@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aquera-ngx-smart-table.mjs","sources":["../../../projects/smart-table/src/lib/models/cell-types.ts","../../../projects/smart-table/src/lib/models/cell-strategies.interface.ts","../../../projects/smart-table/src/lib/renderer/models/cell-state.interface.ts","../../../projects/smart-table/src/lib/renderer/models/table-types.ts","../../../projects/smart-table/src/lib/strategies/default-formatters.ts","../../../projects/smart-table/src/lib/strategies/default-editors.ts","../../../projects/smart-table/src/lib/models/column-config.interface.ts","../../../projects/smart-table/src/lib/renderer/models/table-state.interface.ts","../../../projects/smart-table/src/lib/renderer/models/table-state.class.ts","../../../projects/smart-table/src/lib/renderer/models/z-index.enum.ts","../../../projects/smart-table/src/lib/models/table-config.interface.ts","../../../projects/smart-table/src/lib/models/row-action.interface.ts","../../../projects/smart-table/src/lib/models/column-action.interface.ts","../../../projects/smart-table/src/lib/models/sheet-config.interface.ts","../../../projects/smart-table/src/lib/models/sheet-action.interface.ts","../../../projects/smart-table/src/lib/renderer/models/sheet-state.interface.ts","../../../projects/smart-table/src/lib/renderer/models/sheet-state.class.ts","../../../projects/smart-table/src/lib/models/workbook-config.interface.ts","../../../projects/smart-table/src/lib/models/workbook-action.interface.ts","../../../projects/smart-table/src/lib/renderer/models/workbook-state.interface.ts","../../../projects/smart-table/src/lib/renderer/models/workbook-state.class.ts","../../../projects/smart-table/src/lib/renderer/models/cell.class.ts","../../../projects/smart-table/src/lib/models/column-config.utils.ts","../../../projects/smart-table/src/lib/models/base-column-config.class.ts","../../../projects/smart-table/src/lib/strategies/default-validators.ts","../../../projects/smart-table/src/lib/renderer/models/row-validation-state.interface.ts","../../../projects/smart-table/src/lib/renderer/models/table-validation-state.interface.ts","../../../projects/smart-table/src/lib/editors/nile-input-editor.ts","../../../projects/smart-table/src/lib/editors/nile-select-editor.ts","../../../projects/smart-table/src/lib/editors/nile-autocomplete-editor.ts","../../../projects/smart-table/src/lib/editors/nile-calendar-editor.ts","../../../projects/smart-table/src/lib/editors/nile-date-picker-editor.ts","../../../projects/smart-table/src/lib/editors/index.ts","../../../projects/smart-table/src/lib/factories/column-config.factory.ts","../../../projects/smart-table/src/lib/renderer/components/st-cell/st-cell.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-cell/st-cell.component.html","../../../projects/smart-table/src/lib/schemas/table-config.schema.ts","../../../projects/smart-table/src/lib/services/custom-validation-rules.util.ts","../../../projects/smart-table/src/lib/services/validation-logger.service.ts","../../../projects/smart-table/src/lib/services/json-schema-validator.service.ts","../../../projects/smart-table/src/lib/services/virtual-scroll.service.ts","../../../projects/smart-table/src/lib/renderer/components/st-pagination/st-pagination.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-pagination/st-pagination.component.html","../../../projects/smart-table/src/lib/renderer/components/st-header/st-header.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-header/st-header.component.html","../../../projects/smart-table/src/lib/renderer/components/st-table-actions/st-table-actions.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-table-actions/st-table-actions.component.html","../../../projects/smart-table/src/lib/renderer/components/st-column-filter/st-column-filter.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-column-filter/st-column-filter.component.html","../../../projects/smart-table/src/lib/renderer/components/st-column-menu/st-column-menu.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-column-menu/st-column-menu.component.html","../../../projects/smart-table/src/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.html","../../../projects/smart-table/src/lib/renderer/directives/st-keyboard-navigation.directive.ts","../../../projects/smart-table/src/lib/renderer/directives/st-column-resize.directive.ts","../../../projects/smart-table/src/lib/renderer/components/st-table/st-table.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-table/st-table.component.html","../../../projects/smart-table/src/lib/renderer/components/st-column-visibility/st-column-visibility.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-column-visibility/st-column-visibility.component.html","../../../projects/smart-table/src/lib/renderer/components/st-add-column-button/st-add-column-button.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-add-column-button/st-add-column-button.component.html","../../../projects/smart-table/src/lib/builder/components/column-editor/column-editor.component.ts","../../../projects/smart-table/src/lib/builder/components/column-editor/column-editor.component.html","../../../projects/smart-table/src/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.html","../../../projects/smart-table/src/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.html","../../../projects/smart-table/src/lib/renderer/components/st-sheet/st-sheet.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-sheet/st-sheet.component.html","../../../projects/smart-table/src/lib/models/autosave-config.interface.ts","../../../projects/smart-table/src/lib/services/autosave.service.ts","../../../projects/smart-table/src/lib/renderer/components/st-workbook/st-workbook.component.ts","../../../projects/smart-table/src/lib/renderer/components/st-workbook/st-workbook.component.html","../../../projects/smart-table/src/lib/renderer/directives/click-outside.directive.ts","../../../projects/smart-table/src/lib/shared/shared-table-components.module.ts","../../../projects/smart-table/src/lib/smart-table.module.ts","../../../projects/smart-table/src/lib/builder/services/definition-builder.service.ts","../../../projects/smart-table/src/lib/builder/utils/typescript-generator.util.ts","../../../projects/smart-table/src/lib/builder/services/definition-export.service.ts","../../../projects/smart-table/src/lib/builder/utils/config-validator.util.ts","../../../projects/smart-table/src/lib/builder/services/definition-import.service.ts","../../../projects/smart-table/src/lib/builder/components/builder-toolbar/builder-toolbar.component.ts","../../../projects/smart-table/src/lib/builder/components/builder-toolbar/builder-toolbar.component.html","../../../projects/smart-table/src/lib/builder/components/column-list/column-list.component.ts","../../../projects/smart-table/src/lib/builder/components/column-list/column-list.component.html","../../../projects/smart-table/src/lib/builder/components/table-config-editor/table-config-editor.component.ts","../../../projects/smart-table/src/lib/builder/components/table-config-editor/table-config-editor.component.html","../../../projects/smart-table/src/lib/builder/services/sample-data-generator.service.ts","../../../projects/smart-table/src/lib/builder/components/builder-preview/builder-preview.component.ts","../../../projects/smart-table/src/lib/builder/components/builder-preview/builder-preview.component.html","../../../projects/smart-table/src/lib/builder/components/definition-builder/definition-builder.component.ts","../../../projects/smart-table/src/lib/builder/components/definition-builder/definition-builder.component.html","../../../projects/smart-table/src/lib/builder/models/builder-state.interface.ts","../../../projects/smart-table/src/lib/builder/definition-builder.module.ts","../../../projects/smart-table/src/lib/services/row-validation.service.ts","../../../projects/smart-table/src/public-api.ts","../../../projects/smart-table/src/aquera-ngx-smart-table.ts"],"sourcesContent":["/**\n * Base type definitions for cell configuration model\n */\n\n// Forward declarations for event interfaces\nimport type { Cell } from '../renderer/models/cell.class';\nimport type { CellState } from '../renderer/models/cell-state.interface';\n\n/**\n * Supported cell data types\n */\nexport type CellValue = string | number | boolean | Date | null | undefined | any;\n\n/**\n * Data type enumeration for type-specific handling\n */\nexport enum CellDataType {\n STRING = 'string',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n DATE = 'date',\n CUSTOM = 'custom'\n}\n\n/**\n * Result of cell validation\n */\nexport interface ValidationResult {\n /**\n * Whether the value is valid\n */\n valid: boolean;\n\n /**\n * Error message if validation failed\n */\n error?: string;\n\n /**\n * Field-specific error messages for complex validations\n */\n errors?: Record<string, string>;\n\n /**\n * Warning messages (non-blocking)\n */\n warnings?: string[];\n}\n\n/**\n * Cell alignment options\n */\nexport enum CellAlignment {\n LEFT = 'left',\n CENTER = 'center',\n RIGHT = 'right'\n}\n\n/**\n * Vertical alignment options\n */\nexport enum CellVerticalAlignment {\n TOP = 'top',\n MIDDLE = 'middle',\n BOTTOM = 'bottom'\n}\n\n/**\n * Edit mode trigger options\n */\nexport enum EditMode {\n /**\n * Single click to edit\n */\n CLICK = 'click',\n \n /**\n * Enter key to edit (requires keyboard navigation enabled)\n */\n ENTER = 'enter',\n\n /**\n * Manual trigger (via API call)\n */\n MANUAL = 'manual',\n\n /**\n * Never editable\n */\n NONE = 'none'\n}\n\n/**\n * Navigation key identifiers for keyboard navigation\n */\nexport enum NavigationKey {\n /**\n * Arrow up key\n */\n ARROW_UP = 'ArrowUp',\n \n /**\n * Arrow down key\n */\n ARROW_DOWN = 'ArrowDown',\n \n /**\n * Arrow left key\n */\n ARROW_LEFT = 'ArrowLeft',\n \n /**\n * Arrow right key\n */\n ARROW_RIGHT = 'ArrowRight',\n \n /**\n * Tab key\n */\n TAB = 'Tab',\n \n /**\n * Enter key\n */\n ENTER = 'Enter',\n \n /**\n * Escape key\n */\n ESCAPE = 'Escape'\n}\n\n/**\n * Navigation directions\n */\nexport enum NavigationDirection {\n UP = 'up',\n DOWN = 'down',\n LEFT = 'left',\n RIGHT = 'right'\n}\n\n/**\n * Cell lifecycle states\n */\nexport enum CellLifecycleState {\n /**\n * Cell is displaying value\n */\n DISPLAY = 'display',\n\n /**\n * Cell is in edit mode\n */\n EDITING = 'editing',\n\n /**\n * Cell value is being validated\n */\n VALIDATING = 'validating',\n\n /**\n * Cell value is being saved\n */\n SAVING = 'saving',\n\n /**\n * Cell has error\n */\n ERROR = 'error',\n\n /**\n * Cell is disabled\n */\n DISABLED = 'disabled'\n}\n\n/**\n * Generic cell event data\n */\nexport interface CellEvent<T = any> {\n /**\n * The cell value\n */\n value: T;\n\n /**\n * Previous value (for change events)\n */\n previousValue?: T;\n\n /**\n * Row data context\n */\n rowData?: any;\n\n /**\n * Column key\n */\n columnKey: string;\n\n /**\n * Row index\n */\n rowIndex?: number;\n\n /**\n * Native event if triggered by user interaction\n */\n originalEvent?: Event;\n}\n\n/**\n * Type guard to check if value is null or undefined\n */\nexport function isNullOrUndefined(value: any): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Type guard to check if value is a valid date\n */\nexport function isValidDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value.getTime());\n}\n\n/**\n * Type guard to check if validation result is valid\n */\nexport function isValidationSuccess(result: ValidationResult): boolean {\n return result.valid === true;\n}\n\n/**\n * Cell edit started event\n * Emitted when a cell enters edit mode\n */\nexport interface CellEditEvent<T = any> {\n /**\n * The cell instance\n */\n cell: Cell<T>;\n \n /**\n * Current cell value\n */\n value: T;\n \n /**\n * Row data context\n */\n rowData: any;\n \n /**\n * Column key\n */\n columnKey: string;\n \n /**\n * Row index\n */\n rowIndex?: number;\n \n /**\n * Current cell state snapshot\n */\n cellState: CellState<T>;\n}\n\n/**\n * Cell value saved event\n * Emitted when a cell value is successfully saved after editing\n */\nexport interface CellSaveEvent<T = any> {\n /**\n * The cell instance\n */\n cell: Cell<T>;\n \n /**\n * New value after save\n */\n newValue: T;\n \n /**\n * Previous value before save\n */\n previousValue?: T;\n \n /**\n * Row data context\n */\n rowData: any;\n \n /**\n * Column key\n */\n columnKey: string;\n \n /**\n * Row index\n */\n rowIndex?: number;\n \n /**\n * Whether the saved value is valid\n */\n isValid: boolean;\n \n /**\n * Validation error messages if any\n */\n validationErrors?: string[];\n \n /**\n * Current cell state snapshot after save\n */\n cellState: CellState<T>;\n}\n\n/**\n * Cell value changed event\n * Emitted after a successful cell value change (after save and validation)\n */\nexport interface CellChangeEvent<T = any> {\n /**\n * The cell instance\n */\n cell: Cell<T>;\n \n /**\n * Old value before change\n */\n oldValue: T;\n \n /**\n * New value after change\n */\n newValue: T;\n \n /**\n * Row data context\n */\n rowData: any;\n \n /**\n * Column key\n */\n columnKey: string;\n \n /**\n * Row index\n */\n rowIndex?: number;\n \n /**\n * Whether the old value was valid\n */\n wasValid: boolean;\n \n /**\n * Whether the new value is valid\n */\n isValid: boolean;\n \n /**\n * Current cell state snapshot\n */\n cellState: CellState<T>;\n}\n\n/**\n * Cell edit cancelled event\n * Emitted when cell editing is cancelled without saving\n */\nexport interface CellCancelEvent<T = any> {\n /**\n * The cell instance\n */\n cell: Cell<T>;\n \n /**\n * Current value (unchanged)\n */\n value: T;\n \n /**\n * Previous value that was being edited\n */\n previousValue?: T;\n \n /**\n * Row data context\n */\n rowData: any;\n \n /**\n * Column key\n */\n columnKey: string;\n \n /**\n * Row index\n */\n rowIndex?: number;\n \n /**\n * Current cell state snapshot\n */\n cellState: CellState<T>;\n}\n\n","/**\n * Strategy interfaces for cell behavior\n * These interfaces define pluggable strategies for formatting, validation, and editing\n */\n\nimport { ValidationResult, CellEvent } from './cell-types';\n\n/**\n * Strategy interface for formatting cell values for display\n * Formatters are stateless and can be shared across multiple cells\n */\nexport interface CellFormatter<T = any> {\n /**\n * Formats a value for display\n * @param value The value to format\n * @returns Formatted string representation\n */\n format(value: T): string;\n\n /**\n * Optional method to format value with additional context\n * @param value The value to format\n * @param rowData The entire row data\n * @param columnKey The column key\n * @returns Formatted string representation\n */\n formatWithContext?(value: T, rowData: any, columnKey: string): string;\n}\n\n/**\n * Strategy interface for validating cell values\n * Validators are stateless and can be shared across multiple cells\n */\nexport interface CellValidator<T = any> {\n /**\n * Validates a cell value\n * @param value The value to validate\n * @returns Validation result with success flag and optional error messages\n */\n validate(value: T): ValidationResult;\n\n /**\n * Optional method to validate with additional context\n * @param value The value to validate\n * @param rowData The entire row data\n * @param columnKey The column key\n * @returns Validation result\n */\n validateWithContext?(value: T, rowData: any, columnKey: string): ValidationResult;\n\n /**\n * Optional error message template\n */\n errorMessage?: string;\n}\n\n/**\n * Editor context provided to cell editors\n */\nexport interface CellEditorContext<T = any> {\n /**\n * Current cell value\n */\n value: T;\n\n /**\n * Row data context\n */\n rowData?: any;\n\n /**\n * Column key\n */\n columnKey: string;\n\n /**\n * Row index\n */\n rowIndex?: number;\n\n /**\n * Callback when value changes\n */\n onChange: (newValue: T) => void;\n\n /**\n * Callback to save the edited value\n */\n onSave: (newValue: T) => void;\n\n /**\n * Callback to cancel editing\n */\n onCancel: () => void;\n\n /**\n * Container element for the editor\n */\n container?: HTMLElement;\n}\n\n/**\n * Strategy interface for handling inline cell editing\n * Editors are stateless and can be shared across multiple cells\n */\nexport interface CellEditor<T = any> {\n /**\n * Whether this editor should receive the initial keypress character\n * when starting edit mode via keyboard.\n * - true (default): Initial keypress character becomes the starting value\n * - false: Initial keypress just triggers edit mode, character is ignored\n */\n acceptsInitialKeypress?: boolean;\n\n /**\n * Initialize and render the editor\n * @param context Editor context with value, callbacks, and container\n */\n edit(context: CellEditorContext<T>): void;\n\n /**\n * Optional cleanup when editor is destroyed\n */\n destroy?(): void;\n\n /**\n * Optional method to focus the editor\n */\n focus?(): void;\n\n /**\n * Optional method to get current editor value without saving\n */\n getCurrentValue?(): T;\n}\n\n/**\n * Parser interface for converting user input to typed values\n * Used by editors to convert string input to proper data types\n */\nexport interface CellParser<T = any> {\n /**\n * Parse user input to typed value\n * @param input User input (usually string)\n * @returns Parsed typed value\n */\n parse(input: any): T;\n\n /**\n * Optional method to check if input can be parsed\n * @param input User input\n * @returns True if input can be parsed\n */\n canParse?(input: any): boolean;\n}\n\n/**\n * Composite validator that chains multiple validators\n */\nexport interface CompositeValidator<T = any> extends CellValidator<T> {\n /**\n * Add a validator to the chain\n */\n addValidator(validator: CellValidator<T>): this;\n\n /**\n * Get all validators in the chain\n */\n getValidators(): CellValidator<T>[];\n}\n\n/**\n * Event handler types for cell lifecycle events\n */\nexport type CellEventHandler<T = any> = (event: CellEvent<T>) => void;\n\n/**\n * Cell lifecycle hooks\n */\nexport interface CellLifecycleHooks<T = any> {\n /**\n * Called before editing starts\n */\n beforeEdit?: CellEventHandler<T>;\n\n /**\n * Called when edit mode is entered\n */\n onEdit?: CellEventHandler<T>;\n\n /**\n * Called after edit mode is exited\n */\n afterEdit?: CellEventHandler<T>;\n\n /**\n * Called before value is saved\n */\n beforeSave?: CellEventHandler<T>;\n\n /**\n * Called after value is saved\n */\n onSave?: CellEventHandler<T>;\n\n /**\n * Called when edit is cancelled\n */\n onCancel?: CellEventHandler<T>;\n\n /**\n * Called when validation fails\n */\n onValidationError?: CellEventHandler<T>;\n\n /**\n * Called when cell value changes\n */\n onChange?: CellEventHandler<T>;\n}\n\n","/**\n * Cell state interface - represents unique state per cell instance\n * This is the \"Context\" in the Flyweight pattern\n */\n\nimport { CellLifecycleState } from '../../models/cell-types';\n\n/**\n * Cell state containing all unique state per cell instance\n * This is stored individually per cell, while ColumnConfig is shared (Flyweight)\n */\nexport interface CellState<T = any> {\n /**\n * Current cell value\n */\n value: T;\n\n /**\n * Whether the cell is currently in edit mode\n */\n isEditing: boolean;\n\n /**\n * Whether the cell value has been modified\n */\n isDirty: boolean;\n\n /**\n * Previous value before current edit (for undo/cancel)\n */\n previousValue?: T;\n\n /**\n * Original value when cell was initialized (for reset)\n */\n originalValue?: T;\n\n /**\n * Validation error message if validation failed\n */\n error?: string;\n\n /**\n * Multiple validation errors (field-specific)\n */\n errors?: Record<string, string>;\n\n /**\n * Warning messages (non-blocking)\n */\n warnings?: string[];\n\n /**\n * Current lifecycle state of the cell\n */\n lifecycleState: CellLifecycleState;\n\n /**\n * Whether the cell is currently loading (async operations)\n */\n isLoading?: boolean;\n\n /**\n * Whether the cell is disabled\n */\n isDisabled?: boolean;\n\n /**\n * Whether the cell is readonly\n */\n isReadonly?: boolean;\n\n /**\n * Whether the cell is selected\n */\n isSelected?: boolean;\n\n /**\n * Whether the cell is focused\n */\n isFocused?: boolean;\n\n /**\n * Whether the cell is hovered\n */\n isHovered?: boolean;\n\n /**\n * Custom metadata for cell-specific data\n */\n metadata?: Record<string, any>;\n\n /**\n * Timestamp of last modification\n */\n lastModified?: Date;\n\n /**\n * Timestamp of last validation\n */\n lastValidated?: Date;\n}\n\n/**\n * Factory function to create initial cell state with defaults\n */\nexport function createCellState<T>(value: T, overrides?: Partial<CellState<T>>): CellState<T> {\n return {\n value,\n isEditing: false,\n isDirty: false,\n isFocused: false,\n previousValue: value,\n originalValue: value,\n lifecycleState: CellLifecycleState.DISPLAY,\n ...overrides\n };\n}\n\n/**\n * Cell state memento for save/restore operations (Memento pattern)\n * Contains minimal state needed for undo/redo\n */\nexport interface CellStateMemento<T = any> {\n value: T;\n isDirty: boolean;\n error?: string;\n metadata?: Record<string, any>;\n timestamp: Date;\n}\n\n/**\n * Create a memento snapshot of cell state\n */\nexport function createMemento<T>(state: CellState<T>): CellStateMemento<T> {\n return {\n value: state.value,\n isDirty: state.isDirty,\n error: state.error,\n metadata: state.metadata ? { ...state.metadata } : undefined,\n timestamp: new Date()\n };\n}\n\n/**\n * Restore cell state from memento\n */\nexport function restoreFromMemento<T>(\n currentState: CellState<T>,\n memento: CellStateMemento<T>\n): CellState<T> {\n return {\n ...currentState,\n value: memento.value,\n isDirty: memento.isDirty,\n error: memento.error,\n metadata: memento.metadata ? { ...memento.metadata } : currentState.metadata\n };\n}\n\n/**\n * Helper to check if cell is in valid state\n */\nexport function isCellValid<T>(state: CellState<T>): boolean {\n return !state.error && (!state.errors || Object.keys(state.errors).length === 0);\n}\n\n/**\n * Helper to check if cell can be edited\n */\nexport function canEdit<T>(state: CellState<T>): boolean {\n return !state.isDisabled && \n !state.isReadonly && \n !state.isLoading &&\n state.lifecycleState !== CellLifecycleState.SAVING;\n}\n\n/**\n * Helper to check if cell is in display mode\n */\nexport function isDisplayMode<T>(state: CellState<T>): boolean {\n return state.lifecycleState === CellLifecycleState.DISPLAY && !state.isEditing;\n}\n\n","/**\n * Table types and enumerations for state management\n */\n\nimport type { ColumnConfig } from '../../models/column-config.interface';\n\n/**\n * Sort direction for columns\n */\nexport enum SortDirection {\n NONE = 'none',\n ASC = 'asc',\n DESC = 'desc'\n}\n\n/**\n * Filter operators for column filtering\n */\nexport enum FilterOperator {\n EQUALS = 'equals',\n CONTAINS = 'contains',\n STARTS_WITH = 'startsWith',\n ENDS_WITH = 'endsWith',\n GT = 'gt', // Greater than\n LT = 'lt', // Less than\n GTE = 'gte', // Greater than or equal\n LTE = 'lte', // Less than or equal\n BETWEEN = 'between',\n IN = 'in'\n}\n\n/**\n * Pagination state for table\n */\nexport interface PaginationState {\n currentPage: number; // 0-indexed\n pageSize: number;\n totalItems: number;\n totalPages: number;\n}\n\n/**\n * Sort state for a column\n * Contains full information about an active sort operation\n */\nexport interface ColumnSortState {\n columnKey: string;\n direction: SortDirection;\n priority?: number; // For multi-column sort (0 = primary, 1 = secondary, etc.)\n}\n\n/**\n * Filter state for a column\n * Contains full information about an active filter operation\n */\nexport interface ColumnFilterState {\n columnKey: string;\n operator: FilterOperator;\n value: any;\n enabled: boolean;\n}\n\n/**\n * Cell focus position for keyboard navigation\n */\nexport interface CellFocusPosition {\n rowIndex: number;\n columnIndex: number;\n}\n\n/**\n * Table state change event\n */\nexport interface TableStateChangeEvent {\n type: 'pagination' | 'sorting' | 'filtering' | 'column-config' | 'column-visibility' | 'cell-focus' | 'cell-edit-start' | 'cell-edit-end';\n state: TableStateSnapshot;\n focusPosition?: CellFocusPosition;\n editingPosition?: CellFocusPosition;\n}\n\n/**\n * Snapshot of current table state\n * Contains complete state information for sorting, filtering, and pagination\n */\nexport interface TableStateSnapshot {\n pagination: PaginationState;\n sortedColumns: ColumnSortState[]; // Array of columns with active sorts\n filteredColumns: ColumnFilterState[]; // Array of columns with active filters\n}\n\n/**\n * Column resize event\n * Emitted when a column is resized by the user\n */\nexport interface ColumnResizeEvent {\n /**\n * Key of the resized column\n */\n columnKey: string;\n \n /**\n * Previous width before resize\n */\n oldWidth: number;\n \n /**\n * New width after resize\n */\n newWidth: number;\n \n /**\n * The column configuration\n */\n column: ColumnConfig;\n}\n\n/**\n * Column sort toggle event\n * Emitted when a column's sort direction is changed\n */\nexport interface ColumnSortEvent {\n /**\n * Key of the sorted column\n */\n columnKey: string;\n \n /**\n * New sort direction\n */\n direction: SortDirection;\n \n /**\n * Previous sort direction\n */\n previousDirection: SortDirection;\n \n /**\n * The column configuration\n */\n column: ColumnConfig;\n \n /**\n * Current table state snapshot\n */\n tableState: TableStateSnapshot;\n}\n\n/**\n * Column filter change event\n * Emitted when a column filter is modified\n */\nexport interface ColumnFilterEvent {\n /**\n * Key of the filtered column\n */\n columnKey: string;\n \n /**\n * Filter operator\n */\n operator: FilterOperator;\n \n /**\n * Filter value\n */\n value: any;\n \n /**\n * Previous filter value\n */\n previousValue?: any;\n \n /**\n * Whether filter is enabled\n */\n enabled: boolean;\n \n /**\n * The column configuration\n */\n column: ColumnConfig;\n \n /**\n * Current table state snapshot\n */\n tableState: TableStateSnapshot;\n}\n\n/**\n * Column moved event\n * Emitted when a column is reordered\n */\nexport interface ColumnMoveEvent {\n /**\n * Key of the moved column\n */\n columnKey: string;\n \n /**\n * Direction of movement\n */\n direction: 'left' | 'right';\n \n /**\n * Original column index\n */\n oldIndex: number;\n \n /**\n * New column index after move\n */\n newIndex: number;\n \n /**\n * The column configuration\n */\n column: ColumnConfig;\n}\n\n/**\n * Column added event\n * Emitted when a new column is added to the table\n */\nexport interface ColumnAddEvent {\n /**\n * The newly added column configuration\n */\n column: ColumnConfig;\n \n /**\n * Index where column was added\n */\n index: number;\n \n /**\n * Total number of columns after addition\n */\n totalColumns: number;\n}\n\n/**\n * Data change event\n * Emitted when table data is updated (via sync or async input)\n */\nexport interface DataChangeEvent {\n /**\n * Previous data array reference\n */\n previousData: any[];\n \n /**\n * Current data array reference\n */\n currentData: any[];\n \n /**\n * Timestamp when change occurred\n */\n timestamp: number;\n \n /**\n * Source of the data change\n */\n source: 'sync' | 'async';\n}\n\n","/**\n * Default formatter implementations\n */\n\nimport { CellFormatter } from '../models/cell-strategies.interface';\nimport { isNullOrUndefined, isValidDate } from '../models/cell-types';\n\n/**\n * String formatter - default string display\n */\nexport class StringFormatter implements CellFormatter<string> {\n constructor(\n private readonly options?: {\n maxLength?: number;\n ellipsis?: string;\n trim?: boolean;\n toUpperCase?: boolean;\n toLowerCase?: boolean;\n }\n ) {}\n\n format(value: string): string {\n if (isNullOrUndefined(value)) {\n return '';\n }\n\n let result = String(value);\n\n if (this.options?.trim) {\n result = result.trim();\n }\n\n if (this.options?.toUpperCase) {\n result = result.toUpperCase();\n }\n\n if (this.options?.toLowerCase) {\n result = result.toLowerCase();\n }\n\n if (this.options?.maxLength && result.length > this.options.maxLength) {\n const ellipsis = this.options.ellipsis ?? '...';\n result = result.substring(0, this.options.maxLength - ellipsis.length) + ellipsis;\n }\n\n return result;\n }\n}\n\n/**\n * Number formatter - formats numbers with decimals\n */\nexport class NumberFormatter implements CellFormatter<number> {\n constructor(\n private readonly options?: {\n decimals?: number;\n thousandsSeparator?: string;\n decimalSeparator?: string;\n prefix?: string;\n suffix?: string;\n }\n ) {}\n\n format(value: number): string {\n if (isNullOrUndefined(value) || isNaN(value)) {\n return '';\n }\n\n const decimals = this.options?.decimals ?? 2;\n const fixed = value.toFixed(decimals);\n \n const [integerPart, decimalPart] = fixed.split('.');\n \n // Add thousands separator\n const thousandsSeparator = this.options?.thousandsSeparator ?? ',';\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandsSeparator);\n \n // Combine integer and decimal parts\n const decimalSeparator = this.options?.decimalSeparator ?? '.';\n const result = decimalPart ? `${formattedInteger}${decimalSeparator}${decimalPart}` : formattedInteger;\n \n // Add prefix and suffix\n const prefix = this.options?.prefix ?? '';\n const suffix = this.options?.suffix ?? '';\n \n return `${prefix}${result}${suffix}`;\n }\n}\n\n/**\n * Currency formatter - formats currency values\n */\nexport class CurrencyFormatter implements CellFormatter<number> {\n constructor(\n private readonly options?: {\n currency?: string;\n locale?: string;\n decimals?: number;\n }\n ) {}\n\n format(value: number): string {\n if (isNullOrUndefined(value) || isNaN(value)) {\n return '';\n }\n\n const locale = this.options?.locale ?? 'en-US';\n const currency = this.options?.currency ?? 'USD';\n const decimals = this.options?.decimals ?? 2;\n\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals\n }).format(value);\n } catch (error) {\n // Fallback if Intl is not supported\n return `$${value.toFixed(decimals)}`;\n }\n }\n}\n\n/**\n * Percentage formatter\n */\nexport class PercentageFormatter implements CellFormatter<number> {\n constructor(\n private readonly options?: {\n decimals?: number;\n multiplier?: number; // e.g., 100 if value is 0.25 and should display as 25%\n }\n ) {}\n\n format(value: number): string {\n if (isNullOrUndefined(value) || isNaN(value)) {\n return '';\n }\n\n const decimals = this.options?.decimals ?? 2;\n const multiplier = this.options?.multiplier ?? 1;\n const percentage = value * multiplier;\n\n return `${percentage.toFixed(decimals)}%`;\n }\n}\n\n/**\n * Date formatter - locale-aware date formatting\n */\nexport class DateFormatter implements CellFormatter<Date> {\n constructor(\n private readonly options?: {\n locale?: string;\n dateStyle?: 'full' | 'long' | 'medium' | 'short';\n timeStyle?: 'full' | 'long' | 'medium' | 'short';\n format?: string; // Custom format string\n }\n ) {}\n\n format(value: Date): string {\n if (isNullOrUndefined(value)) {\n return '';\n }\n\n // Convert to Date if it's a string or number\n let date: Date;\n if (value instanceof Date) {\n date = value;\n } else {\n date = new Date(value);\n }\n\n if (!isValidDate(date)) {\n return '';\n }\n\n const locale = this.options?.locale ?? 'en-US';\n\n try {\n if (this.options?.format) {\n return this.formatCustom(date);\n }\n\n return new Intl.DateTimeFormat(locale, {\n dateStyle: this.options?.dateStyle ?? 'medium',\n timeStyle: this.options?.timeStyle\n }).format(date);\n } catch (error) {\n return date.toLocaleDateString();\n }\n }\n\n private formatCustom(date: Date): string {\n // Simple custom formatting (can be extended)\n const format = this.options?.format ?? 'YYYY-MM-DD';\n \n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n\n return format\n .replace('YYYY', String(year))\n .replace('MM', month)\n .replace('DD', day)\n .replace('HH', hours)\n .replace('mm', minutes)\n .replace('ss', seconds);\n }\n}\n\n/**\n * Boolean formatter - formats boolean values\n */\nexport class BooleanFormatter implements CellFormatter<boolean> {\n constructor(\n private readonly options?: {\n trueValue?: string;\n falseValue?: string;\n nullValue?: string;\n }\n ) {}\n\n format(value: boolean): string {\n if (isNullOrUndefined(value)) {\n return this.options?.nullValue ?? '';\n }\n\n return value \n ? (this.options?.trueValue ?? 'Yes')\n : (this.options?.falseValue ?? 'No');\n }\n}\n\n/**\n * Array formatter - formats array values\n */\nexport class ArrayFormatter<T = any> implements CellFormatter<T[]> {\n constructor(\n private readonly options?: {\n separator?: string;\n maxItems?: number;\n ellipsis?: string;\n itemFormatter?: (item: T) => string;\n }\n ) {}\n\n format(value: T[]): string {\n if (isNullOrUndefined(value) || !Array.isArray(value)) {\n return '';\n }\n\n if (value.length === 0) {\n return '';\n }\n\n const separator = this.options?.separator ?? ', ';\n const maxItems = this.options?.maxItems;\n const itemFormatter = this.options?.itemFormatter ?? ((item: T) => String(item));\n\n let items = value.map(itemFormatter);\n\n if (maxItems && items.length > maxItems) {\n const ellipsis = this.options?.ellipsis ?? '...';\n items = items.slice(0, maxItems);\n items.push(ellipsis);\n }\n\n return items.join(separator);\n }\n}\n\n/**\n * Template formatter - formats values using a template string\n */\nexport class TemplateFormatter implements CellFormatter<any> {\n constructor(private readonly template: string) {}\n\n format(value: any): string {\n if (isNullOrUndefined(value)) {\n return '';\n }\n\n return this.template.replace(/\\{(\\w+)\\}/g, (match, key) => {\n return value[key] ?? match;\n });\n }\n}\n\n/**\n * Function formatter - formats values using a custom function\n */\nexport class FunctionFormatter<T = any> implements CellFormatter<T> {\n constructor(private readonly formatFn: (value: T) => string) {}\n\n format(value: T): string {\n return this.formatFn(value);\n }\n}\n\n/**\n * Default formatter - returns string representation\n */\nexport class DefaultFormatter implements CellFormatter<any> {\n format(value: any): string {\n if (isNullOrUndefined(value)) {\n return '';\n }\n return String(value);\n }\n}\n\n","/**\n * Default editor implementations\n */\n\nimport { CellEditor, CellEditorContext } from '../models/cell-strategies.interface';\n\n/**\n * Text editor - basic text input\n */\nexport class TextEditor implements CellEditor<string> {\n private input?: HTMLInputElement;\n\n constructor(\n private readonly options?: {\n placeholder?: string;\n maxLength?: number;\n autoFocus?: boolean;\n selectOnFocus?: boolean;\n }\n ) {}\n\n edit(context: CellEditorContext<string>): void {\n if (!context.container) {\n console.warn('TextEditor requires a container element');\n return;\n }\n\n // Create input element\n this.input = document.createElement('input');\n this.input.type = 'text';\n this.input.value = context.value ?? '';\n this.input.className = 'st-cell-editor st-text-editor';\n // Apply inline styles for full width\n this.input.style.width = 'inherit';\n this.input.style.height = 'inherit';\n this.input.style.boxSizing = 'border-box';\n this.input.style.border = 'none';\n this.input.style.outline = 'none';\n\n if (this.options?.placeholder) {\n this.input.placeholder = this.options.placeholder;\n }\n\n if (this.options?.maxLength) {\n this.input.maxLength = this.options.maxLength;\n }\n\n // Handle Enter to save\n this.input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n context.onSave(this.input!.value as any);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n context.onCancel();\n }\n });\n\n // Handle blur to save\n this.input.addEventListener('blur', () => {\n context.onSave(this.input!.value as any);\n });\n\n // Clear container and append input\n context.container.innerHTML = '';\n context.container.appendChild(this.input);\n\n // Auto focus\n if (this.options?.autoFocus !== false) {\n this.input.focus();\n \n if (this.options?.selectOnFocus !== false) {\n this.input.select();\n }\n }\n }\n\n destroy(): void {\n if (this.input) {\n this.input.remove();\n this.input = undefined;\n }\n }\n\n focus(): void {\n this.input?.focus();\n }\n\n getCurrentValue(): string {\n return this.input?.value ?? '';\n }\n}\n\n/**\n * Number editor - numeric input\n */\nexport class NumberEditor implements CellEditor<number> {\n private input?: HTMLInputElement;\n\n constructor(\n private readonly options?: {\n min?: number;\n max?: number;\n step?: number;\n placeholder?: string;\n autoFocus?: boolean;\n selectOnFocus?: boolean;\n }\n ) {}\n\n edit(context: CellEditorContext<number>): void {\n if (!context.container) {\n console.warn('NumberEditor requires a container element');\n return;\n }\n\n // Create input element\n this.input = document.createElement('input');\n this.input.type = 'number';\n this.input.value = context.value?.toString() ?? '';\n this.input.className = 'st-cell-editor st-number-editor';\n // Apply inline styles with flex-grow for numbers\n this.input.style.width = 'inherit';\n this.input.style.height = 'inherit';\n this.input.style.boxSizing = 'border-box';\n this.input.style.flexGrow = '1';\n this.input.style.border = 'none';\n this.input.style.outline = 'none';\n\n if (this.options?.placeholder) {\n this.input.placeholder = this.options.placeholder;\n }\n\n if (this.options?.min !== undefined) {\n this.input.min = this.options.min.toString();\n }\n\n if (this.options?.max !== undefined) {\n this.input.max = this.options.max.toString();\n }\n\n if (this.options?.step !== undefined) {\n this.input.step = this.options.step.toString();\n }\n\n // Handle Enter to save\n this.input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const value = parseFloat(this.input!.value);\n context.onSave(value as any);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n context.onCancel();\n }\n });\n\n // Handle blur to save\n this.input.addEventListener('blur', () => {\n const value = parseFloat(this.input!.value);\n context.onSave(value as any);\n });\n\n // Clear container and append input\n context.container.innerHTML = '';\n context.container.appendChild(this.input);\n\n // Auto focus\n if (this.options?.autoFocus !== false) {\n this.input.focus();\n \n if (this.options?.selectOnFocus !== false) {\n this.input.select();\n }\n }\n }\n\n destroy(): void {\n if (this.input) {\n this.input.remove();\n this.input = undefined;\n }\n }\n\n focus(): void {\n this.input?.focus();\n }\n\n getCurrentValue(): number {\n return parseFloat(this.input?.value ?? '0');\n }\n}\n\n/**\n * Date editor - date input\n */\nexport class DateEditor implements CellEditor<Date> {\n private input?: HTMLInputElement;\n\n constructor(\n private readonly options?: {\n min?: string | Date;\n max?: string | Date;\n autoFocus?: boolean;\n }\n ) {}\n\n edit(context: CellEditorContext<Date>): void {\n if (!context.container) {\n console.warn('DateEditor requires a container element');\n return;\n }\n\n // Create input element\n this.input = document.createElement('input');\n this.input.type = 'date';\n this.input.className = 'st-cell-editor st-date-editor';\n // Apply inline styles for full width\n this.input.style.width = 'inherit';\n this.input.style.height = 'inherit';\n this.input.style.boxSizing = 'border-box';\n\n // Format date value\n if (context.value) {\n const date = context.value instanceof Date ? context.value : new Date(context.value);\n if (!isNaN(date.getTime())) {\n this.input.value = date.toISOString().split('T')[0];\n }\n }\n\n if (this.options?.min) {\n const minDate = this.options.min instanceof Date ? this.options.min : new Date(this.options.min);\n this.input.min = minDate.toISOString().split('T')[0];\n }\n\n if (this.options?.max) {\n const maxDate = this.options.max instanceof Date ? this.options.max : new Date(this.options.max);\n this.input.max = maxDate.toISOString().split('T')[0];\n }\n\n // Handle Enter to save\n this.input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const value = this.input!.value ? new Date(this.input!.value) : null;\n context.onSave(value as any);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n context.onCancel();\n }\n });\n\n // Handle change to save\n this.input.addEventListener('change', () => {\n const value = this.input!.value ? new Date(this.input!.value) : null;\n context.onSave(value as any);\n });\n\n // Handle blur to save\n this.input.addEventListener('blur', () => {\n const value = this.input!.value ? new Date(this.input!.value) : null;\n context.onSave(value as any);\n });\n\n // Clear container and append input\n context.container.innerHTML = '';\n context.container.appendChild(this.input);\n\n // Auto focus\n if (this.options?.autoFocus !== false) {\n this.input.focus();\n }\n }\n\n destroy(): void {\n if (this.input) {\n this.input.remove();\n this.input = undefined;\n }\n }\n\n focus(): void {\n this.input?.focus();\n }\n\n getCurrentValue(): Date {\n const value = this.input?.value;\n return value ? new Date(value) : new Date();\n }\n}\n\n/**\n * Select editor - dropdown selection\n */\nexport class SelectEditor<T = any> implements CellEditor<T> {\n private select?: HTMLSelectElement;\n\n constructor(\n private readonly options: {\n options: Array<{ value: T; label: string }>;\n placeholder?: string;\n autoFocus?: boolean;\n }\n ) {}\n\n edit(context: CellEditorContext<T>): void {\n if (!context.container) {\n console.warn('SelectEditor requires a container element');\n return;\n }\n\n // Create select element\n this.select = document.createElement('select');\n this.select.className = 'st-cell-editor st-select-editor';\n // Apply inline styles for full width\n this.select.style.width = '100%';\n this.select.style.boxSizing = 'border-box';\n\n // Add placeholder option\n if (this.options.placeholder) {\n const placeholderOption = document.createElement('option');\n placeholderOption.value = '';\n placeholderOption.textContent = this.options.placeholder;\n placeholderOption.disabled = true;\n this.select.appendChild(placeholderOption);\n }\n\n // Add options\n this.options.options.forEach(opt => {\n const option = document.createElement('option');\n option.value = String(opt.value);\n option.textContent = opt.label;\n option.selected = opt.value === context.value;\n this.select!.appendChild(option);\n });\n\n // Handle change to save\n this.select.addEventListener('change', () => {\n const selectedOption = this.options.options.find(\n opt => String(opt.value) === this.select!.value\n );\n if (selectedOption) {\n context.onSave(selectedOption.value);\n }\n });\n\n // Handle keydown\n this.select.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n context.onCancel();\n }\n });\n\n // Handle blur to cancel (already saved on change)\n this.select.addEventListener('blur', () => {\n // Don't save on blur since we save on change\n context.onCancel();\n });\n\n // Clear container and append select\n context.container.innerHTML = '';\n context.container.appendChild(this.select);\n\n // Auto focus\n if (this.options.autoFocus !== false) {\n this.select.focus();\n }\n }\n\n destroy(): void {\n if (this.select) {\n this.select.remove();\n this.select = undefined;\n }\n }\n\n focus(): void {\n this.select?.focus();\n }\n\n getCurrentValue(): T {\n const selectedOption = this.options.options.find(\n opt => String(opt.value) === this.select?.value\n );\n return selectedOption?.value ?? ('' as any);\n }\n}\n\n/**\n * Boolean editor - checkbox\n */\nexport class BooleanEditor implements CellEditor<boolean> {\n private checkbox?: HTMLInputElement;\n\n constructor(\n private readonly options?: {\n autoFocus?: boolean;\n saveOnChange?: boolean;\n }\n ) {}\n\n edit(context: CellEditorContext<boolean>): void {\n if (!context.container) {\n console.warn('BooleanEditor requires a container element');\n return;\n }\n\n // Create checkbox element\n this.checkbox = document.createElement('input');\n this.checkbox.type = 'checkbox';\n this.checkbox.checked = !!context.value;\n this.checkbox.className = 'st-cell-editor st-boolean-editor';\n // Apply inline styles (centered checkbox)\n this.checkbox.style.margin = '0 auto';\n this.checkbox.style.display = 'block';\n\n // Handle change to save\n if (this.options?.saveOnChange !== false) {\n this.checkbox.addEventListener('change', () => {\n context.onSave(this.checkbox!.checked as any);\n });\n }\n\n // Handle keydown\n this.checkbox.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n context.onSave(this.checkbox!.checked as any);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n context.onCancel();\n }\n });\n\n // Clear container and append checkbox\n context.container.innerHTML = '';\n context.container.appendChild(this.checkbox);\n\n // Auto focus\n if (this.options?.autoFocus !== false) {\n this.checkbox.focus();\n }\n }\n\n destroy(): void {\n if (this.checkbox) {\n this.checkbox.remove();\n this.checkbox = undefined;\n }\n }\n\n focus(): void {\n this.checkbox?.focus();\n }\n\n getCurrentValue(): boolean {\n return this.checkbox?.checked ?? false;\n }\n}\n\n/**\n * Textarea editor - multi-line text input\n */\nexport class TextAreaEditor implements CellEditor<string> {\n private textarea?: HTMLTextAreaElement;\n\n constructor(\n private readonly options?: {\n rows?: number;\n cols?: number;\n placeholder?: string;\n maxLength?: number;\n autoFocus?: boolean;\n selectOnFocus?: boolean;\n }\n ) {}\n\n edit(context: CellEditorContext<string>): void {\n if (!context.container) {\n console.warn('TextAreaEditor requires a container element');\n return;\n }\n\n // Create textarea element\n this.textarea = document.createElement('textarea');\n this.textarea.value = context.value ?? '';\n this.textarea.className = 'st-cell-editor st-textarea-editor';\n // Apply inline styles for full width\n this.textarea.style.width = 'inherit';\n this.textarea.style.height = 'inherit';\n this.textarea.style.boxSizing = 'border-box';\n this.textarea.style.resize = 'vertical';\n\n if (this.options?.placeholder) {\n this.textarea.placeholder = this.options.placeholder;\n }\n\n if (this.options?.maxLength) {\n this.textarea.maxLength = this.options.maxLength;\n }\n\n if (this.options?.rows) {\n this.textarea.rows = this.options.rows;\n }\n\n if (this.options?.cols) {\n this.textarea.cols = this.options.cols;\n }\n\n // Handle Ctrl+Enter to save\n this.textarea.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n context.onSave(this.textarea!.value as any);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n context.onCancel();\n }\n });\n\n // Handle blur to save\n this.textarea.addEventListener('blur', () => {\n context.onSave(this.textarea!.value as any);\n });\n\n // Clear container and append textarea\n context.container.innerHTML = '';\n context.container.appendChild(this.textarea);\n\n // Auto focus\n if (this.options?.autoFocus !== false) {\n this.textarea.focus();\n \n if (this.options?.selectOnFocus !== false) {\n this.textarea.select();\n }\n }\n }\n\n destroy(): void {\n if (this.textarea) {\n this.textarea.remove();\n this.textarea = undefined;\n }\n }\n\n focus(): void {\n this.textarea?.focus();\n }\n\n getCurrentValue(): string {\n return this.textarea?.value ?? '';\n }\n}\n\n","/**\n * Column configuration interface - Flyweight pattern\n * This configuration is shared across all cells in a column\n */\n\nimport { CellFormatter, CellValidator, CellEditor, CellParser, CellLifecycleHooks } from './cell-strategies.interface';\nimport { CellAlignment, CellVerticalAlignment, EditMode, CellDataType } from './cell-types';\nimport { SortDirection, FilterOperator } from '../renderer/models/table-types';\nimport { Cell } from '../renderer/models/cell.class';\nimport { TemplateRef } from '@angular/core';\nimport { DefaultFormatter } from '../strategies/default-formatters';\nimport { TextEditor } from '../strategies/default-editors';\nimport { ColumnAction } from './column-action.interface';\n\n\n/**\n * Filter options configuration for custom dropdown filters\n */\nexport interface FilterOptions {\n /**\n * Array of data items to display in the dropdown\n */\n data: any[];\n \n /**\n * Handler function to transform data items into {label, value} pairs\n * @param item The data item to transform\n * @returns Object with label (displayed text) and value (stored value)\n */\n handler: (item: any) => { label: string; value: any };\n \n /**\n * Whether to allow multiple selections\n * @default false\n */\n multiselect?: boolean;\n}\n\n/**\n * Column configuration - shared immutable config for all cells in a column (Flyweight)\n * Contains behavior, metadata, and strategies but NO state\n */\nexport interface ColumnConfig<T = any> {\n /**\n * Unique key for the column (maps to row data property)\n */\n readonly key: string;\n\n /**\n * Display header text for the column\n */\n readonly header?: string;\n\n /**\n * Data type of the column values\n */\n readonly dataType?: CellDataType;\n\n /**\n * Formatter strategy for displaying cell values\n */\n readonly formatter?: CellFormatter<T>;\n\n /**\n * Validator strategy for validating cell values\n */\n readonly validator?: CellValidator<T>;\n\n /**\n * Editor strategy for inline editing\n */\n readonly editor?: CellEditor<T>;\n\n /**\n * Parser strategy for converting user input to typed values\n */\n readonly parser?: CellParser<T>;\n\n /**\n * Whether cells in this column are editable\n */\n readonly editable?: boolean;\n\n /**\n * Edit mode trigger\n */\n readonly editMode?: EditMode;\n\n /**\n * Whether this column is sortable\n */\n readonly sortable?: boolean;\n\n /**\n * Whether this column is filterable\n */\n readonly filterable?: boolean;\n\n /**\n * Whether this column's visibility can be toggled by users\n */\n readonly hideable?: boolean;\n\n /**\n * Whether this column can be moved left/right by users\n * Note: Pinned/sticky columns cannot be moved\n * @default true\n */\n readonly movable?: boolean;\n\n /**\n * Whether this column can be pinned/unpinned by users\n * @default true\n */\n readonly pinnable?: boolean;\n\n /**\n * Whether to show the column menu dropdown for this column\n * @default true\n */\n readonly enableMenu?: boolean;\n\n /**\n * Custom actions for this column (shown in column menu dropdown)\n * Similar to row actions but for column-level operations\n * @default []\n */\n readonly columnActions?: ColumnAction[];\n\n /**\n * Whether to include built-in actions (sort, filter, pin, move) in the column menu\n * Set to false to show only custom actions\n * @default true\n */\n readonly includeBuiltInActions?: boolean;\n\n /**\n * Current sort direction for this column\n * @default 'none'\n */\n sortDirection?: SortDirection;\n\n /**\n * Whether sorting is currently active/enabled on this column\n * @default false\n */\n sortEnabled?: boolean;\n\n /**\n * Filter configuration for this column\n * Contains operator, value, enabled state, and custom dropdown options\n */\n filterConfig?: {\n /**\n * Filter operator\n * @default 'contains'\n */\n operator?: FilterOperator;\n \n /**\n * Current filter value\n */\n value?: any;\n \n /**\n * Whether filtering is currently active/enabled on this column\n * @default false\n */\n enabled?: boolean;\n \n /**\n * Custom filter options for dropdown-based filtering\n * Both data and handler must be provided together, otherwise falls back to text input\n */\n options?: FilterOptions;\n };\n\n /**\n * Whether this column is resizable\n */\n readonly resizable?: boolean;\n\n /**\n * Column width (px, %, or 'auto')\n */\n readonly width?: number | string;\n\n /**\n * Minimum column width (px)\n */\n readonly minWidth?: number;\n\n /**\n * Maximum column width (px)\n */\n readonly maxWidth?: number;\n\n /**\n * Whether this column is sticky (left or right)\n */\n readonly sticky?: 'left' | 'right' | false;\n\n /**\n * Calculated offset for sticky positioning (px)\n * Auto-calculated by table component based on column order\n */\n stickyOffset?: number;\n\n /**\n * Whether to show shadow indicator on sticky columns\n * @default true\n */\n readonly showStickyShadow?: boolean;\n\n /**\n * Cell content alignment\n */\n readonly alignment?: CellAlignment;\n\n /**\n * Cell vertical alignment\n */\n readonly verticalAlignment?: CellVerticalAlignment;\n\n /**\n * Whether to truncate overflowing text\n */\n readonly truncate?: boolean;\n\n /**\n * Tooltip configuration\n */\n readonly tooltip?: string | ((value: T, rowData: any) => string);\n\n /**\n * CSS class name(s) for cells in this column\n */\n readonly className?: string | string[] | ((value: T, rowData: any) => string | string[]);\n\n /**\n * Inline styles for cells in this column\n */\n readonly style?: Record<string, any> | ((value: T, rowData: any) => Record<string, any>);\n\n /**\n * Custom cell template (Angular TemplateRef)\n */\n readonly cellTemplate?: TemplateRef<any>;\n\n /**\n * Custom header template\n */\n readonly headerTemplate?: TemplateRef<any>;\n\n /**\n * Whether column is visible\n */\n readonly visible?: boolean;\n\n /**\n * Whether column is pinned (left, right, or none)\n */\n readonly pinned?: 'left' | 'right' | false;\n\n /**\n * Sort order priority (for multi-column sort)\n */\n readonly sortPriority?: number;\n\n /**\n * Custom comparator for sorting\n */\n readonly comparator?: (a: T, b: T) => number;\n\n /**\n * Function to extract value from row data (for nested properties)\n */\n readonly valueGetter?: (rowData: any) => T;\n\n /**\n * Function to set value in row data (for nested properties)\n */\n readonly valueSetter?: (rowData: any, value: T) => void;\n\n /**\n * Lifecycle hooks for cells in this column\n */\n readonly hooks?: CellLifecycleHooks<T>;\n\n /**\n * Whether cells should show loading indicator during async operations\n */\n readonly showLoadingIndicator?: boolean;\n\n /**\n * Custom metadata for column\n */\n readonly metadata?: Record<string, any>;\n\n /**\n * Factory method to create a cell instance for this column (Factory Pattern)\n * @param rowData The row data object\n * @param rowIndex Optional row index\n * @returns A new Cell instance\n */\n createCell(rowData: any, rowIndex?: number): Cell<T>;\n}\n\n/**\n * Partial column config for extending existing configs\n */\nexport type PartialColumnConfig<T = any> = Partial<ColumnConfig<T>>;\n\n/**\n * Column config builder options\n */\nexport interface ColumnConfigOptions<T = any> extends Omit<ColumnConfig<T>, 'key' | 'createCell'> {\n // All properties from ColumnConfig except key and createCell\n}\n\n/**\n * Helper type for column config with required key\n */\nexport type ColumnConfigWithKey<T = any> = Required<Pick<ColumnConfig<T>, 'key'>> & Partial<Omit<ColumnConfig<T>, 'key'>>;\n\n/**\n * Default column configuration values\n */\nexport const DEFAULT_COLUMN_CONFIG: Partial<ColumnConfig<any>> = {\n editable: true,\n editMode: EditMode.CLICK,\n sortable: true,\n filterable: true,\n resizable: true,\n hideable: true,\n movable: true,\n pinnable: true,\n enableMenu: true,\n columnActions: [],\n includeBuiltInActions: true,\n minWidth: 50,\n maxWidth: 1000,\n visible: true,\n alignment: CellAlignment.LEFT,\n verticalAlignment: CellVerticalAlignment.MIDDLE,\n truncate: false,\n pinned: false,\n sticky: false,\n showStickyShadow: true,\n showLoadingIndicator: true,\n sortDirection: SortDirection.NONE,\n sortEnabled: false,\n editor: new TextEditor(), // Add default editor to prevent runtime errors\n formatter: new DefaultFormatter(), // Add default formatter to prevent runtime errors\n filterConfig: {\n operator: FilterOperator.CONTAINS,\n enabled: false\n }\n};\n\n\n\n","/**\n * Table state interfaces for configuration and initialization\n */\n\n/**\n * Configuration options for initializing TableState\n */\nexport interface TableStateConfig {\n /**\n * Initial page number (0-indexed)\n * @default 0\n */\n initialPage?: number;\n\n /**\n * Number of items per page\n * @default 25\n */\n pageSize?: number;\n}\n\n","/**\n * TableState - Reactive state management for table operations\n * Event-driven architecture: tracks state, emits events, consumer handles async data operations\n */\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { map, distinctUntilChanged } from 'rxjs/operators';\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { \n PaginationState, \n SortDirection, \n FilterOperator,\n TableStateChangeEvent,\n TableStateSnapshot,\n CellFocusPosition\n} from './table-types';\nimport { TableStateConfig } from './table-state.interface';\nimport { NavigationDirection } from '../../models/cell-types';\nimport { RowValidationState } from './row-validation-state.interface';\nimport { TableValidationState } from './table-validation-state.interface';\n\n/**\n * TableState class - Column-driven, event-emitting state management\n * NO data manipulation - only state tracking and event emission\n */\nexport class TableState {\n // Reference to columns array (column-driven architecture)\n private _columns: ColumnConfig<any>[];\n \n // Pagination state\n private _pagination$: BehaviorSubject<PaginationState>;\n \n // State change events\n private _stateChange$: Subject<TableStateChangeEvent>;\n \n // Initial configuration\n private _initialConfig: TableStateConfig;\n \n // Row number column width for sticky offset calculation\n private _rowNumberWidth: number = 0;\n\n // Settings column width for sticky offset calculation\n private _settingsColumnWidth: number = 0;\n \n // Focus position tracking\n private _focusedCellPosition$: BehaviorSubject<CellFocusPosition | null>;\n public readonly focusedCellPosition$: Observable<CellFocusPosition | null>;\n \n // Editing position tracking\n private _editingCellPosition$: BehaviorSubject<CellFocusPosition | null>;\n public readonly editingCellPosition$: Observable<CellFocusPosition | null>;\n \n // Validation state tracking\n private _tableValidationState$: BehaviorSubject<TableValidationState>;\n public readonly tableValidationState$: Observable<TableValidationState>;\n \n // Request to add a new row (emitted when navigating past last row)\n private _requestAddRow$: Subject<{ focusColumn: number }>;\n public readonly requestAddRow$: Observable<{ focusColumn: number }>;\n \n // Pending focus position after a new row is added\n // Set when requestAddRow is emitted, cleared when focus is applied\n private _pendingFocusAfterRowAdd: { columnIndex: number } | null = null;\n \n // Dimensions for boundary checking\n private _rowCount: number = 0;\n private _columnCount: number = 0;\n\n /**\n * Observable of complete state snapshot\n */\n public readonly state$: Observable<TableStateSnapshot>;\n\n /**\n * Observable of state change events\n */\n public readonly stateChange$: Observable<TableStateChangeEvent>;\n\n /**\n * Observable of pagination state changes\n */\n public readonly paginationChange$: Observable<PaginationState>;\n\n /**\n * Constructor\n * @param columns Reference to columns array\n * @param config Initial configuration\n */\n constructor(columns: ColumnConfig<any>[], config?: TableStateConfig) {\n this._columns = columns;\n this._initialConfig = {\n initialPage: config?.initialPage ?? 0,\n pageSize: config?.pageSize ?? 25\n };\n\n // Initialize pagination state\n this._pagination$ = new BehaviorSubject<PaginationState>({\n currentPage: this._initialConfig.initialPage!,\n pageSize: this._initialConfig.pageSize!,\n totalItems: 0,\n totalPages: 0\n });\n\n // Initialize state change subject\n this._stateChange$ = new Subject<TableStateChangeEvent>();\n \n // Initialize focus and editing position tracking\n this._focusedCellPosition$ = new BehaviorSubject<CellFocusPosition | null>(null);\n this.focusedCellPosition$ = this._focusedCellPosition$.asObservable();\n \n this._editingCellPosition$ = new BehaviorSubject<CellFocusPosition | null>(null);\n this.editingCellPosition$ = this._editingCellPosition$.asObservable();\n \n // Initialize validation state\n this._tableValidationState$ = new BehaviorSubject<TableValidationState>({\n isValid: true,\n totalRows: 0,\n validRows: 0,\n invalidRows: 0,\n rowStates: new Map(),\n lastUpdated: new Date()\n });\n this.tableValidationState$ = this._tableValidationState$.asObservable();\n \n // Initialize request add row subject\n this._requestAddRow$ = new Subject<{ focusColumn: number }>();\n this.requestAddRow$ = this._requestAddRow$.asObservable();\n \n this._columnCount = columns.filter(c => c.visible !== false).length;\n\n // Setup observables\n this.paginationChange$ = this._pagination$.asObservable().pipe(\n distinctUntilChanged((a, b) => \n a.currentPage === b.currentPage && \n a.pageSize === b.pageSize &&\n a.totalItems === b.totalItems\n )\n );\n\n this.state$ = this._pagination$.pipe(\n map(() => this.buildStateSnapshot())\n );\n\n this.stateChange$ = this._stateChange$.asObservable();\n \n // Clear focus/editing on pagination changes\n this.paginationChange$.subscribe(() => {\n this.clearFocus();\n this.clearEditingCell();\n });\n }\n\n // ============================================================================\n // STATE ACCESS METHODS\n // ============================================================================\n\n /**\n * Get current state snapshot\n */\n getState(): TableStateSnapshot {\n return this.buildStateSnapshot();\n }\n\n /**\n * Get current pagination state\n */\n getPagination(): PaginationState {\n return { ...this._pagination$.value };\n }\n\n /**\n * Get columns with sorting enabled\n */\n getSortedColumns(): ColumnConfig<any>[] {\n return this._columns.filter(col => col.sortEnabled === true);\n }\n\n /**\n * Get columns with filtering enabled\n */\n getFilteredColumns(): ColumnConfig<any>[] {\n return this._columns.filter(col => col.filterConfig?.enabled === true);\n }\n\n /**\n * Get current columns reference\n */\n getColumns(): ColumnConfig<any>[] {\n return this._columns;\n }\n\n // ============================================================================\n // PAGINATION METHODS\n // ============================================================================\n\n /**\n * Set current page\n * @param page Page number (0-indexed)\n */\n setPage(page: number): void {\n const currentState = this._pagination$.value;\n if (page < 0 || page >= currentState.totalPages) {\n console.warn(`Invalid page number: ${page}. Valid range: 0-${currentState.totalPages - 1}`);\n return;\n }\n\n this._pagination$.next({\n ...currentState,\n currentPage: page\n });\n this.emitStateChange('pagination');\n }\n\n /**\n * Set page size\n * @param size Number of items per page\n */\n setPageSize(size: number): void {\n if (size <= 0) {\n console.warn(`Invalid page size: ${size}. Must be greater than 0.`);\n return;\n }\n\n const currentState = this._pagination$.value;\n const newTotalPages = this.calculateTotalPages(currentState.totalItems, size);\n \n this._pagination$.next({\n currentPage: 0, // Reset to first page\n pageSize: size,\n totalItems: currentState.totalItems,\n totalPages: newTotalPages\n });\n this.emitStateChange('pagination');\n }\n\n /**\n * Set total items (called after API response)\n * @param total Total number of items\n */\n setTotalItems(total: number): void {\n const currentState = this._pagination$.value;\n const newTotalPages = this.calculateTotalPages(total, currentState.pageSize);\n \n this._pagination$.next({\n ...currentState,\n totalItems: total,\n totalPages: newTotalPages\n });\n // Don't emit state change here - this is called after data load\n }\n\n /**\n * Go to next page\n */\n nextPage(): void {\n const currentState = this._pagination$.value;\n if (this.hasNextPage()) {\n this.setPage(currentState.currentPage + 1);\n }\n }\n\n /**\n * Go to previous page\n */\n previousPage(): void {\n const currentState = this._pagination$.value;\n if (this.hasPreviousPage()) {\n this.setPage(currentState.currentPage - 1);\n }\n }\n\n /**\n * Go to first page\n */\n firstPage(): void {\n this.setPage(0);\n }\n\n /**\n * Go to last page\n */\n lastPage(): void {\n const currentState = this._pagination$.value;\n if (currentState.totalPages > 0) {\n this.setPage(currentState.totalPages - 1);\n }\n }\n\n /**\n * Check if there is a next page\n */\n hasNextPage(): boolean {\n const currentState = this._pagination$.value;\n return currentState.currentPage < currentState.totalPages - 1;\n }\n\n /**\n * Check if there is a previous page\n */\n hasPreviousPage(): boolean {\n const currentState = this._pagination$.value;\n return currentState.currentPage > 0;\n }\n\n // ============================================================================\n // SORTING METHODS (operate on column configs)\n // ============================================================================\n\n /**\n * Set sort on a column (clears other sorts)\n * @param columnKey Column key\n * @param direction Sort direction\n */\n setSortOnColumn(columnKey: string, direction: SortDirection): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n if (column.sortable === false) {\n console.warn(`Column ${columnKey} is not sortable`);\n return;\n }\n\n // Clear all other sorts\n this._columns.forEach(col => {\n if (col.key !== columnKey) {\n col.sortDirection = SortDirection.NONE;\n col.sortEnabled = false;\n }\n });\n\n // Set sort on target column\n column.sortDirection = direction;\n column.sortEnabled = direction !== SortDirection.NONE;\n\n this.emitStateChange('sorting');\n }\n\n /**\n * Add sort to a column (for multi-column sorting)\n * @param columnKey Column key\n * @param direction Sort direction\n */\n addSortToColumn(columnKey: string, direction: SortDirection): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n if (column.sortable === false) {\n console.warn(`Column ${columnKey} is not sortable`);\n return;\n }\n\n column.sortDirection = direction;\n column.sortEnabled = direction !== SortDirection.NONE;\n\n this.emitStateChange('sorting');\n }\n\n /**\n * Toggle sort on a column (cycles through none -> asc -> desc -> none)\n * @param columnKey Column key\n */\n toggleSortOnColumn(columnKey: string): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n if (column.sortable === false) {\n console.warn(`Column ${columnKey} is not sortable`);\n return;\n }\n\n const currentDirection = column.sortDirection || SortDirection.NONE;\n let newDirection: SortDirection;\n\n switch (currentDirection) {\n case SortDirection.NONE:\n newDirection = SortDirection.ASC;\n break;\n case SortDirection.ASC:\n newDirection = SortDirection.DESC;\n break;\n case SortDirection.DESC:\n newDirection = SortDirection.NONE;\n break;\n default:\n newDirection = SortDirection.ASC;\n }\n\n column.sortDirection = newDirection;\n column.sortEnabled = newDirection !== SortDirection.NONE;\n\n this.clearFocus();\n this.clearEditingCell();\n this.emitStateChange('sorting');\n }\n\n /**\n * Clear all sorting\n */\n clearAllSorting(): void {\n this._columns.forEach(col => {\n col.sortDirection = SortDirection.NONE;\n col.sortEnabled = false;\n });\n\n this.clearFocus();\n this.clearEditingCell();\n this.emitStateChange('sorting');\n }\n\n /**\n * Get sort configuration for a column\n * @param columnKey Column key\n * @returns Sort configuration or null\n */\n getSortForColumn(columnKey: string): { direction: SortDirection; enabled: boolean } | null {\n const column = this.findColumn(columnKey);\n if (!column) {\n return null;\n }\n\n return {\n direction: column.sortDirection || SortDirection.NONE,\n enabled: column.sortEnabled || false\n };\n }\n\n // ============================================================================\n // FILTERING METHODS (operate on column configs)\n // ============================================================================\n\n /**\n * Set filter on a column\n * @param columnKey Column key\n * @param operator Filter operator\n * @param value Filter value\n */\n setFilterOnColumn(columnKey: string, operator: FilterOperator, value: any): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n if (column.filterable === false) {\n console.warn(`Column ${columnKey} is not filterable`);\n return;\n }\n\n // Initialize filterConfig if it doesn't exist\n if (!column.filterConfig) {\n column.filterConfig = {};\n }\n\n column.filterConfig.operator = operator;\n column.filterConfig.value = value;\n column.filterConfig.enabled = true;\n\n this.clearFocus();\n this.clearEditingCell();\n this.emitStateChange('filtering');\n }\n\n /**\n * Clear filter on a column\n * @param columnKey Column key\n */\n clearFilterOnColumn(columnKey: string): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n // Initialize filterConfig if it doesn't exist (for consistency with setFilterOnColumn)\n if (!column.filterConfig) {\n column.filterConfig = {};\n }\n\n column.filterConfig.value = undefined;\n column.filterConfig.enabled = false;\n\n this.clearFocus();\n this.clearEditingCell();\n this.emitStateChange('filtering');\n }\n\n /**\n * Clear all filters\n */\n clearAllFilters(): void {\n this._columns.forEach(col => {\n // Initialize filterConfig if it doesn't exist (for consistency with setFilterOnColumn)\n if (!col.filterConfig) {\n col.filterConfig = {};\n }\n \n col.filterConfig.value = undefined;\n col.filterConfig.enabled = false;\n });\n\n this.clearFocus();\n this.clearEditingCell();\n this.emitStateChange('filtering');\n }\n\n /**\n * Set filter enabled state\n * @param columnKey Column key\n * @param enabled Whether filter is enabled\n */\n setFilterEnabled(columnKey: string, enabled: boolean): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n // Initialize filterConfig if it doesn't exist\n if (!column.filterConfig) {\n column.filterConfig = {};\n }\n\n column.filterConfig.enabled = enabled;\n\n this.emitStateChange('filtering');\n }\n\n /**\n * Get filter configuration for a column\n * @param columnKey Column key\n * @returns Filter configuration or null\n */\n getFilterForColumn(columnKey: string): { operator: FilterOperator; value: any; enabled: boolean } | null {\n const column = this.findColumn(columnKey);\n if (!column) {\n return null;\n }\n\n return {\n operator: column.filterConfig?.operator || FilterOperator.CONTAINS,\n value: column.filterConfig?.value,\n enabled: column.filterConfig?.enabled || false\n };\n }\n\n // ============================================================================\n // STICKY COLUMN MANAGEMENT\n // ============================================================================\n\n /**\n * Get sticky columns grouped by position\n * @returns Object with left and right sticky column keys\n */\n getStickyColumns(): { left: string[]; right: string[] } {\n const left = this._columns\n .filter(col => col.sticky === 'left')\n .map(col => col.key);\n \n const right = this._columns\n .filter(col => col.sticky === 'right')\n .map(col => col.key);\n \n return { left, right };\n }\n\n /**\n * Set sticky position for a column\n * @param columnKey Column key\n * @param position Sticky position ('left', 'right', or false)\n */\n setStickyColumn(columnKey: string, position: 'left' | 'right' | false): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n (column as any).sticky = position;\n this.calculateStickyOffsets();\n this.emitStateChange('column-config');\n }\n\n /**\n * Calculate sticky offsets for all sticky columns\n * This calculates cumulative widths for positioning\n * @param rowNumberWidth Optional width of row number column to account for in left offset\n * @param settingsColumnWidth Optional width of settings column to account for in right offset\n */\n calculateStickyOffsets(rowNumberWidth?: number, settingsColumnWidth?: number): void {\n // Update stored row number width if provided\n if (rowNumberWidth !== undefined) {\n this._rowNumberWidth = rowNumberWidth;\n }\n \n // Update stored settings column width if provided\n if (settingsColumnWidth !== undefined) {\n this._settingsColumnWidth = settingsColumnWidth;\n }\n \n // Calculate left sticky offsets\n // Account for row number column width\n let leftOffset = this._rowNumberWidth;\n this._columns.forEach(col => {\n if (col.sticky === 'left') {\n (col as any).stickyOffset = leftOffset;\n leftOffset += (col.width as number) || 100;\n }\n });\n\n // Calculate right sticky offsets\n // Account for settings column width (row actions column)\n let rightOffset = this._settingsColumnWidth;\n for (let i = this._columns.length - 1; i >= 0; i--) {\n const col = this._columns[i];\n if (col.sticky === 'right') {\n (col as any).stickyOffset = rightOffset;\n rightOffset += (col.width as number) || 100;\n }\n }\n }\n\n // ============================================================================\n // COLUMN MANAGEMENT\n // ============================================================================\n\n /**\n * Update columns reference\n * @param columns New columns array\n */\n updateColumns(columns: ColumnConfig<any>[]): void {\n this._columns = columns;\n this.calculateStickyOffsets();\n this.emitStateChange('column-config');\n }\n\n // ============================================================================\n // COLUMN VISIBILITY METHODS\n // ============================================================================\n\n /**\n * Toggle visibility of a column\n * @param columnKey Column key\n */\n toggleColumnVisibility(columnKey: string): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n // Check if column is hideable\n if (column.hideable === false) {\n console.warn(`Column ${columnKey} cannot be hidden (hideable is false)`);\n return;\n }\n\n const currentVisibility = column.visible !== false; // Default to true if not set\n (column as any).visible = !currentVisibility;\n this.emitStateChange('column-visibility');\n }\n\n /**\n * Set visibility of a column\n * @param columnKey Column key\n * @param visible Whether column should be visible\n */\n setColumnVisibility(columnKey: string, visible: boolean): void {\n const column = this.findColumn(columnKey);\n if (!column) {\n console.warn(`Column not found: ${columnKey}`);\n return;\n }\n\n // Check if column is hideable (only when trying to hide)\n if (!visible && column.hideable === false) {\n console.warn(`Column ${columnKey} cannot be hidden (hideable is false)`);\n return;\n }\n\n (column as any).visible = visible;\n this.emitStateChange('column-visibility');\n }\n\n /**\n * Get all visible columns\n * @returns Array of visible column configs\n */\n getVisibleColumns(): ColumnConfig<any>[] {\n return this._columns.filter(col => col.visible !== false); // Default to true if not set\n }\n\n /**\n * Get visibility state for all columns\n * @returns Array of column visibility info\n */\n getAllColumnsVisibility(): { key: string; header: string; visible: boolean; hideable: boolean }[] {\n return this._columns.map(col => ({\n key: col.key,\n header: col.header || col.key,\n visible: col.visible !== false, // Default to true if not set\n hideable: col.hideable !== false // Default to true if not set\n }));\n }\n\n // ============================================================================\n // KEYBOARD NAVIGATION & FOCUS MANAGEMENT\n // ============================================================================\n\n /**\n * Set table dimensions for navigation boundaries\n */\n setDimensions(rowCount: number, columnCount: number): void {\n const previousRowCount = this._rowCount;\n this._rowCount = rowCount;\n this._columnCount = columnCount;\n \n // Update total rows in validation state\n this.setValidationRowCount(rowCount);\n \n // Check if a new row was added and we have a pending focus\n if (this._pendingFocusAfterRowAdd && rowCount > previousRowCount) {\n const { columnIndex } = this._pendingFocusAfterRowAdd;\n // Focus the last row (newly added) at the pending column\n const newRowIndex = rowCount - 1;\n this._pendingFocusAfterRowAdd = null; // Clear pending focus\n \n // Delay focus to ensure DOM is updated\n setTimeout(() => {\n this.focusCell(newRowIndex, columnIndex);\n }, 0);\n }\n }\n \n /**\n * Focus a cell by position\n */\n focusCell(rowIndex: number, columnIndex: number): void {\n if (rowIndex < 0 || rowIndex >= this._rowCount) return;\n if (columnIndex < 0 || columnIndex >= this._columnCount) return;\n \n this._focusedCellPosition$.next({ rowIndex, columnIndex });\n this.emitStateChange('cell-focus');\n }\n \n /**\n * Get currently focused position\n */\n getFocusedPosition(): CellFocusPosition | null {\n return this._focusedCellPosition$.value;\n }\n \n /**\n * Notify that a cell entered edit mode\n */\n setEditingCell(rowIndex: number, columnIndex: number): void {\n this._editingCellPosition$.next({ rowIndex, columnIndex });\n this.emitStateChange('cell-edit-start');\n }\n \n /**\n * Notify that edit mode ended\n */\n clearEditingCell(): void {\n this._editingCellPosition$.next(null);\n this.emitStateChange('cell-edit-end');\n }\n \n /**\n * Check if any cell is currently editing\n */\n isAnyCellEditing(): boolean {\n return this._editingCellPosition$.value !== null;\n }\n \n /**\n * Get currently editing position\n */\n getEditingPosition(): CellFocusPosition | null {\n return this._editingCellPosition$.value;\n }\n \n /**\n * Move focus in a direction using NavigationDirection enum\n * @param direction The navigation direction\n * @param addRowOnNavigatePastEnd If true, emits requestAddRow when navigating past last row\n */\n moveFocus(direction: NavigationDirection, addRowOnNavigatePastEnd: boolean = false): boolean {\n // Block navigation if any cell is editing\n if (this.isAnyCellEditing()) {\n return false;\n }\n \n const current = this._focusedCellPosition$.value;\n if (!current) return false;\n \n let newRow = current.rowIndex;\n let newCol = current.columnIndex;\n \n // Use NavigationDirection enum values\n switch (direction) {\n case NavigationDirection.UP: newRow--; break;\n case NavigationDirection.DOWN: newRow++; break;\n case NavigationDirection.LEFT: newCol--; break;\n case NavigationDirection.RIGHT: newCol++; break;\n }\n \n // Check if navigating past last row (arrow down at bottom)\n if (direction === NavigationDirection.DOWN && newRow >= this._rowCount) {\n if (addRowOnNavigatePastEnd) {\n // Store pending focus for when the new row is added\n this._pendingFocusAfterRowAdd = { columnIndex: current.columnIndex };\n // Emit request to add a new row, keeping the same column for focus\n this._requestAddRow$.next({ focusColumn: current.columnIndex });\n }\n return false;\n }\n \n if (newRow < 0 || newRow >= this._rowCount) return false;\n if (newCol < 0 || newCol >= this._columnCount) return false;\n \n this.focusCell(newRow, newCol);\n return true;\n }\n \n /**\n * Clear focus\n */\n clearFocus(): void {\n this._focusedCellPosition$.next(null);\n this.emitStateChange('cell-focus');\n }\n \n /**\n * Check if navigation is active\n */\n isNavigationActive(): boolean {\n return this._focusedCellPosition$.value !== null;\n }\n\n // ============================================================================\n // VALIDATION STATE METHODS\n // ============================================================================\n \n /**\n * Update cell validation and accumulate into row/table validation state\n * Only stores invalid states - valid rows are automatically removed\n */\n updateCellValidation(rowIndex: number, columnKey: string, isValid: boolean, error?: string): void {\n const currentState = this._tableValidationState$.value;\n const rowStates = new Map(currentState.rowStates);\n \n // Get existing row state (only exists if row has errors)\n let rowState = rowStates.get(rowIndex);\n \n if (!isValid && error) {\n // Cell is invalid - add or update error\n if (!rowState) {\n // Create new row state for this invalid row\n rowState = {\n rowIndex,\n isValid: false,\n invalidCellCount: 1,\n cellErrors: new Map([[columnKey, error]]),\n lastValidated: new Date()\n };\n } else {\n // Update existing row state\n const cellErrors = new Map(rowState.cellErrors);\n cellErrors.set(columnKey, error);\n \n rowState = {\n rowIndex,\n isValid: false,\n invalidCellCount: cellErrors.size,\n cellErrors,\n lastValidated: new Date()\n };\n }\n rowStates.set(rowIndex, rowState);\n \n } else {\n // Cell is valid - remove error if it exists\n if (rowState) {\n const cellErrors = new Map(rowState.cellErrors);\n cellErrors.delete(columnKey);\n \n if (cellErrors.size === 0) {\n // No more errors in this row - remove row state completely\n rowStates.delete(rowIndex);\n } else {\n // Still has other errors - update row state\n rowState = {\n rowIndex,\n isValid: false,\n invalidCellCount: cellErrors.size,\n cellErrors,\n lastValidated: new Date()\n };\n rowStates.set(rowIndex, rowState);\n }\n }\n // If rowState doesn't exist, cell was already valid - do nothing\n }\n \n // Recalculate table state\n // All rows in rowStates map are invalid by definition\n const invalidRows = rowStates.size;\n \n const newTableState: TableValidationState = {\n isValid: invalidRows === 0,\n totalRows: currentState.totalRows, // Keep track of total rows separately\n validRows: currentState.totalRows - invalidRows,\n invalidRows,\n rowStates,\n lastUpdated: new Date()\n };\n \n // Emit new state\n this._tableValidationState$.next(newTableState);\n }\n \n /**\n * Get current table validation state\n */\n getTableValidationState(): TableValidationState {\n return this._tableValidationState$.value;\n }\n \n /**\n * Set total rows for validation state tracking\n */\n setValidationRowCount(totalRows: number): void {\n const currentState = this._tableValidationState$.value;\n this._tableValidationState$.next({\n ...currentState,\n totalRows,\n lastUpdated: new Date()\n });\n }\n\n // ============================================================================\n // STATE RESET\n // ============================================================================\n\n /**\n * Reset to initial configuration\n */\n reset(): void {\n this.resetPagination();\n this.resetAllSorting();\n this.resetAllFilters();\n }\n\n /**\n * Reset pagination only\n */\n resetPagination(): void {\n this._pagination$.next({\n currentPage: this._initialConfig.initialPage!,\n pageSize: this._initialConfig.pageSize!,\n totalItems: 0,\n totalPages: 0\n });\n this.emitStateChange('pagination');\n }\n\n /**\n * Reset all column sorts\n */\n resetAllSorting(): void {\n this.clearAllSorting();\n }\n\n /**\n * Reset all column filters\n */\n resetAllFilters(): void {\n this.clearAllFilters();\n }\n\n // ============================================================================\n // INTERNAL METHODS\n // ============================================================================\n\n /**\n * Find a column by key\n * @param columnKey Column key\n * @returns Column config or undefined\n */\n private findColumn(columnKey: string): ColumnConfig<any> | undefined {\n return this._columns.find(col => col.key === columnKey);\n }\n\n /**\n * Calculate total pages\n * @param totalItems Total number of items\n * @param pageSize Page size\n * @returns Total number of pages\n */\n private calculateTotalPages(totalItems: number = 0, pageSize: number = 25): number {\n if (totalItems === 0 || pageSize === 0) {\n return 0;\n }\n return Math.ceil(totalItems / pageSize);\n }\n\n /**\n * Emit state change event\n * @param type Type of change\n */\n private emitStateChange(type: TableStateChangeEvent['type']): void {\n const state = this.buildStateSnapshot();\n this._stateChange$.next({\n type,\n state\n });\n }\n\n /**\n * Build state snapshot from current state\n * @returns State snapshot\n */\n private buildStateSnapshot(): TableStateSnapshot {\n return {\n pagination: this.getPagination(),\n \n // Build full sort state with direction and priority\n sortedColumns: this._columns\n .filter(col => col.sortEnabled === true)\n .map((col, index) => ({\n columnKey: col.key,\n direction: col.sortDirection || SortDirection.NONE,\n priority: index // Sort order based on enablement order\n })),\n \n // Build full filter state with operator and value\n filteredColumns: this._columns\n .filter(col => col.filterConfig?.enabled === true)\n .map(col => ({\n columnKey: col.key,\n operator: col.filterConfig?.operator || FilterOperator.CONTAINS,\n value: col.filterConfig?.value,\n enabled: true\n }))\n };\n }\n}\n\n","/**\n * Z-Index values for table layering\n * \n * Range Groups:\n * - Table layers: -1 to 10\n * - Dropdowns/Popups: 100-1001\n * - Overlays/Modals: 2000-9999\n */\nexport enum TableZIndex {\n // ============================================\n // Table Internal Layers (-1 to 10)\n // ============================================\n \n /** Hidden scroll spacer element (below everything) */\n SCROLL_SPACER = -1,\n \n /** Base table body layer */\n BODY = 1,\n \n /** Sticky columns in body (left/right) */\n STICKY_COLUMN = 2,\n \n /** Virtual scroll sticky header */\n VIRTUAL_SCROLL_HEADER = 3,\n \n /** Column resize handles */\n RESIZE_HANDLE = 4,\n \n /** Sticky body cells (inline styled) */\n STICKY_BODY_CELL = 5,\n \n /** Sticky header cells (inline styled) */\n STICKY_HEADER_CELL = 7,\n \n /** Standard table sticky header container */\n STICKY_HEADER_CONTAINER = 8,\n \n /** Focused cell (keyboard navigation - highest in table) */\n FOCUSED_CELL = 10,\n \n // ============================================\n // Dropdowns & Popups (100-1001)\n // ============================================\n \n /** Table actions dropdown menu */\n DROPDOWN = 100,\n \n /** Add column button and similar UI elements */\n FLOATING_BUTTON = 1000,\n \n /** Column filter popup */\n POPUP = 1001,\n \n // ============================================\n // Overlays & Modals (2000-9999)\n // ============================================\n \n /** Modal backdrop/overlay */\n MODAL_OVERLAY = 2000,\n \n /** Table actions dropdown backdrop */\n TABLE_ACTIONS_BACKDROP = 9996,\n \n /** Table actions dropdown menu */\n TABLE_ACTIONS_DROPDOWN = 9997,\n \n /** Row actions dropdown backdrop */\n ROW_ACTIONS_BACKDROP = 9998,\n \n /** Row actions dropdown menu */\n ROW_ACTIONS_DROPDOWN = 9999\n}\n","/**\n * Table configuration interface - centralizes all table settings\n * Provides a single source of truth for pagination, sorting, filtering, and display options\n */\n\nimport { ColumnConfig } from './column-config.interface';\nimport { SortDirection, FilterOperator } from '../renderer/models/table-types';\nimport { RowManagementConfig } from './row-action.interface';\nimport { Observable, of } from 'rxjs';\nimport { delay } from 'rxjs/operators';\n\n/**\n * Comprehensive table configuration interface\n */\nexport interface TableConfig {\n /**\n * Column definitions (required)\n */\n columns: ColumnConfig[];\n \n /**\n * Pagination configuration\n */\n pagination?: {\n /**\n * Enable pagination\n * @default true\n */\n enabled?: boolean;\n \n /**\n * Number of items per page\n * @default 25\n */\n pageSize?: number;\n \n /**\n * Available page size options for user selection\n * @default [10, 25, 50, 100]\n */\n pageSizeOptions?: number[];\n\n \n /**\n * Show pagination controls at the top of the table\n * @default false\n */\n showTopControls?: boolean;\n \n /**\n * Show pagination controls at the bottom of the table\n * @default true\n */\n showBottomControls?: boolean;\n \n /**\n * Total number of items available (for server-side pagination)\n * When set, the pagination controls will display the correct total pages\n * @default undefined (will be calculated from data length)\n */\n totalItems?: number;\n \n /**\n * Variant for nile-pagination component styling\n * @default 'fluid'\n */\n variant?: 'fluid' | 'compact';\n };\n \n /**\n * Sorting configuration\n */\n sorting?: {\n /**\n * Enable sorting\n * @default true\n */\n enabled?: boolean;\n \n /**\n * Allow sorting by multiple columns simultaneously\n * @default false\n */\n multiColumn?: boolean;\n \n /**\n * Sorting mode - local (client-side) or server (API-based)\n * @default 'server'\n */\n mode?: 'local' | 'server';\n };\n \n /**\n * Filtering configuration\n */\n filtering?: {\n /**\n * Enable filtering\n * @default false\n */\n enabled?: boolean;\n \n /**\n * Filtering mode - local (client-side) or server (API-based)\n * @default 'server'\n */\n mode?: 'local' | 'server';\n };\n \n /**\n * Selection configuration (future feature)\n */\n selection?: {\n /**\n * Enable row selection\n * @default false\n */\n enabled?: boolean;\n \n /**\n * Selection mode - single row or multiple rows\n * @default 'multiple'\n */\n mode?: 'single' | 'multiple';\n };\n \n /**\n * Display configuration\n */\n display?: {\n /**\n * Make table header sticky on scroll\n * @default true\n */\n stickyHeader?: boolean;\n \n /**\n * Highlight row on hover\n * @default true\n */\n hover?: boolean;\n\n /**\n * Max height of the table in pixels\n * @default 300\n */\n maxHeight?: number;\n \n /**\n * Virtual scroll configuration for large datasets\n * Enables efficient rendering by only showing visible rows\n */\n virtualScroll?: {\n /**\n * Enable virtual scrolling\n * @default false\n */\n enabled?: boolean;\n \n /**\n * Row height in pixels (must be consistent for all rows)\n * @default 48\n */\n itemSize?: number;\n \n /**\n * Number of buffer rows to render above/below viewport\n * Higher values provide smoother scrolling but use more memory\n * @default 5\n */\n bufferSize?: number;\n \n /**\n * Viewport height in pixels\n * @default 600\n */\n viewportHeight?: number;\n };\n };\n \n /**\n * Initial state configuration\n */\n initialState?: {\n /**\n * Initial page number (0-indexed)\n * @default 0\n */\n page?: number;\n \n /**\n * Initial sort configuration\n */\n sortBy?: Array<{\n key: string;\n direction: SortDirection;\n }>;\n \n /**\n * Initial filter configuration\n */\n filters?: Array<{\n key: string;\n operator: FilterOperator;\n value: any;\n }>;\n };\n \n /**\n * Features configuration\n */\n features?: {\n /**\n * Column management features\n */\n columnManagement?: {\n /**\n * Allow users to add new columns dynamically\n * @default false\n */\n allowAdd?: boolean;\n };\n \n /**\n * Row management features\n * Provides a settings column with configurable actions for each row\n */\n rowManagement?: RowManagementConfig;\n \n /**\n * Keyboard navigation features\n * Enables Excel-like keyboard navigation with arrow keys\n */\n keyboardNavigation?: {\n /**\n * Enable keyboard navigation\n * @default false\n */\n enabled?: boolean;\n \n /**\n * Add a new empty row when navigating past the last row (arrow down at bottom)\n * When enabled, pressing arrow down at the last row will emit a requestAddRow event\n * @default false\n */\n addRowOnNavigatePastEnd?: boolean;\n };\n };\n \n /**\n * Validation configuration - accumulates cell validation results\n */\n validation?: {\n /**\n * Validation trigger mode\n * - 'lazy': Validate on cell save/blur\n * - 'eager': Validate on every cell change\n * @default 'lazy'\n */\n mode?: 'lazy' | 'eager';\n };\n\n /**\n * Table skeleton configuration\n * Shows a skeleton loader while data is loading\n * @default undefined (disabled)\n */\n tableSkeleton?: {\n enabled: Observable<boolean>;\n rows: number;\n columns: number;\n };\n\n /**\n * Show row number in the table\n */\n showRowNumber?: boolean;\n}\n\n/**\n * Default table configuration with sensible defaults\n */\nexport const DEFAULT_TABLE_CONFIG: Partial<TableConfig> = {\n pagination: {\n enabled: true,\n pageSize: 25,\n pageSizeOptions: [10, 25, 50, 100],\n showTopControls: false,\n showBottomControls: true,\n variant: 'fluid'\n },\n sorting: {\n enabled: true,\n multiColumn: false,\n mode: 'server'\n },\n filtering: {\n enabled: false,\n mode: 'server'\n },\n selection: {\n enabled: false,\n mode: 'multiple'\n },\n display: {\n stickyHeader: true,\n maxHeight: 300,\n virtualScroll: {\n enabled: false,\n itemSize: 48,\n bufferSize: 5,\n viewportHeight: 600\n }\n },\n features: {\n columnManagement: {\n allowAdd: false\n },\n rowManagement: {\n actions: []\n },\n keyboardNavigation: {\n enabled: false,\n addRowOnNavigatePastEnd: false\n }\n },\n validation: {\n mode: 'lazy'\n },\n showRowNumber: true\n};\n\n/**\n * Helper function to merge user config with defaults\n */\nexport function mergeTableConfig(userConfig: TableConfig): TableConfig {\n return {\n columns: userConfig.columns,\n pagination: {\n ...DEFAULT_TABLE_CONFIG.pagination,\n ...userConfig.pagination\n },\n sorting: {\n ...DEFAULT_TABLE_CONFIG.sorting,\n ...userConfig.sorting\n },\n filtering: {\n ...DEFAULT_TABLE_CONFIG.filtering,\n ...userConfig.filtering\n },\n selection: {\n ...DEFAULT_TABLE_CONFIG.selection,\n ...userConfig.selection\n },\n display: {\n ...DEFAULT_TABLE_CONFIG.display,\n ...userConfig.display,\n virtualScroll: {\n ...DEFAULT_TABLE_CONFIG.display?.virtualScroll,\n ...userConfig.display?.virtualScroll\n }\n },\n features: {\n columnManagement: {\n ...DEFAULT_TABLE_CONFIG.features?.columnManagement,\n ...userConfig.features?.columnManagement\n },\n rowManagement: userConfig.features?.rowManagement,\n keyboardNavigation: {\n ...DEFAULT_TABLE_CONFIG.features?.keyboardNavigation,\n ...userConfig.features?.keyboardNavigation\n }\n },\n validation: {\n ...DEFAULT_TABLE_CONFIG.validation,\n ...userConfig.validation\n },\n tableSkeleton: userConfig.tableSkeleton,\n showRowNumber: userConfig.showRowNumber,\n initialState: userConfig.initialState\n };\n}\n\n","/**\n * Row action interfaces for configurable row management features\n */\n\n/**\n * Defines a single row action that can be performed on a table row\n */\nexport interface RowAction {\n /**\n * Unique identifier for the action\n */\n id: string;\n \n /**\n * Display label for the action\n */\n label: string;\n \n /**\n * Optional icon to display (can be emoji, icon class, or SVG)\n */\n icon?: string;\n \n /**\n * Function to determine if action should be disabled for a specific row\n * @param rowData The data for the row\n * @param rowIndex The index of the row\n */\n disabled?: boolean | ((rowData: any, rowIndex: number) => boolean);\n \n /**\n * Function to determine if action should be hidden for a specific row\n * @param rowData The data for the row\n * @param rowIndex The index of the row\n */\n hidden?: boolean | ((rowData: any, rowIndex: number) => boolean);\n \n /**\n * Callback function to execute when action is clicked\n * @param rowData The data for the row\n * @param rowIndex The index of the row\n */\n action?: (rowData: any, rowIndex: number) => void;\n}\n\n/**\n * Configuration for row management features\n */\nexport interface RowManagementConfig {\n /**\n * Array of actions to display in the dropdown\n */\n actions: RowAction[];\n \n /**\n * Position of the settings column\n * @default 'end'\n */\n position?: 'start' | 'end';\n}\n\n/**\n * Event emitted when a row action is clicked\n */\nexport interface RowActionEvent {\n /**\n * The action that was clicked\n */\n action: RowAction;\n \n /**\n * The row data\n */\n rowData: any;\n \n /**\n * The row index\n */\n rowIndex: number;\n}\n\n/**\n * Context object passed to the dropdown component\n */\nexport interface RowActionContext {\n /**\n * The row data\n */\n rowData: any;\n \n /**\n * The row index\n */\n rowIndex: number;\n \n /**\n * Available actions for this row\n */\n actions: RowAction[];\n}\n","/**\n * Column action interface - defines actions that can be performed on table columns\n * Similar to RowAction but for column-level operations\n */\n\nimport { ColumnConfig } from './column-config.interface';\nimport { TableState } from '../renderer/models/table-state.class';\n\n/**\n * Defines a single action that can be performed on a column\n */\nexport interface ColumnAction {\n /**\n * Unique identifier for the action\n */\n id: string;\n\n /**\n * Display label for the action\n */\n label: string;\n\n /**\n * Optional icon to display with the action\n */\n icon?: string;\n\n /**\n * Callback function executed when the action is clicked\n * @param column - The column config\n * @param columnIndex - The index of the column\n */\n action?: (column: ColumnConfig<any>, columnIndex: number) => void;\n\n /**\n * Whether the action should be hidden\n * Can be a boolean or a function that returns boolean based on column state\n */\n hidden?: boolean | ((column: ColumnConfig<any>, columnIndex: number) => boolean);\n\n /**\n * Whether the action should be disabled\n * Can be a boolean or a function that returns boolean based on column state\n */\n disabled?: boolean | ((column: ColumnConfig<any>, columnIndex: number) => boolean);\n}\n\n/**\n * Context object passed to the column menu dropdown component\n * Contains all information needed to render and handle column actions\n */\nexport interface ColumnActionContext {\n /**\n * The column configuration\n */\n column: ColumnConfig<any>;\n\n /**\n * The index of the column in the visible columns array\n */\n columnIndex: number;\n\n /**\n * Whether this is the first column\n */\n isFirstColumn: boolean;\n\n /**\n * Whether this is the last column\n */\n isLastColumn: boolean;\n\n /**\n * Table state for accessing sorting, filtering, etc.\n */\n tableState?: TableState;\n\n /**\n * Available actions for this column\n */\n actions: ColumnAction[];\n}\n\n/**\n * Event emitted when a column action is clicked\n */\nexport interface ColumnActionEvent {\n /**\n * The action that was clicked\n */\n action: ColumnAction;\n\n /**\n * The column configuration\n */\n column: ColumnConfig<any>;\n\n /**\n * The index of the column\n */\n columnIndex: number;\n}\n","/**\n * Sheet configuration interface - wraps table with sheet-level settings\n */\n\nimport { TableConfig } from './table-config.interface';\nimport { SheetAction } from './sheet-action.interface';\n\n/**\n * Comprehensive sheet configuration interface\n */\nexport interface SheetConfig {\n /**\n * Unique identifier for the sheet\n */\n id: string;\n\n /**\n * Display name of the sheet\n */\n name: string;\n\n /**\n * Table configuration (existing TableConfig)\n */\n tableConfig: TableConfig;\n\n /**\n * Sheet-level actions (similar to RowAction pattern)\n */\n actions?: SheetAction[];\n\n /**\n * Display configuration\n */\n display?: {\n /**\n * Show sheet header bar\n * @default true\n */\n showHeader?: boolean;\n\n /**\n * Header variant style\n * @default 'default'\n */\n headerVariant?: 'default' | 'compact';\n };\n}\n\n","/**\n * Sheet action interfaces for configurable sheet-level features\n */\n\n/**\n * Defines a single sheet action that can be performed on a sheet\n */\nexport interface SheetAction {\n /**\n * Unique identifier for the action\n */\n id: string;\n\n /**\n * Display label for the action\n */\n label: string;\n\n /**\n * Optional icon to display (nile-icon name)\n */\n icon?: string;\n\n /**\n * Function to determine if action should be disabled\n */\n disabled?: boolean | (() => boolean);\n\n /**\n * Function to determine if action should be hidden\n */\n hidden?: boolean | (() => boolean);\n\n /**\n * Callback function to execute when action is clicked\n * @param sheetId The ID of the sheet\n */\n action?: (sheetId: string) => void;\n}\n\n/**\n * Event emitted when a sheet action is clicked\n */\nexport interface SheetActionEvent {\n /**\n * The action that was clicked\n */\n action: SheetAction;\n\n /**\n * The sheet ID\n */\n sheetId: string;\n}\n\n/**\n * Context object passed to the sheet actions component\n */\nexport interface SheetActionContext {\n /**\n * The sheet ID\n */\n sheetId: string;\n\n /**\n * Available actions for this sheet\n */\n actions: SheetAction[];\n}\n\n","/**\n * Sheet state interfaces for state management\n */\n\nimport { TableStateSnapshot } from './table-types';\n\n/**\n * Configuration options for initializing SheetState\n */\nexport interface SheetStateConfig {\n /**\n * Sheet ID\n */\n id: string;\n\n /**\n * Initial sheet name\n */\n name: string;\n}\n\n/**\n * Sheet metadata tracking\n */\nexport interface SheetMetadata {\n /**\n * When the sheet was created\n */\n createdAt: Date;\n\n /**\n * When the sheet was last modified\n */\n lastModified: Date;\n\n /**\n * When the sheet was last accessed\n */\n lastAccessed: Date;\n}\n\n/**\n * Complete snapshot of sheet state\n */\nexport interface SheetStateSnapshot {\n /**\n * Sheet ID\n */\n id: string;\n\n /**\n * Sheet name\n */\n name: string;\n\n /**\n * Table state snapshot\n */\n tableStateSnapshot: TableStateSnapshot;\n\n /**\n * Sheet metadata\n */\n metadata: SheetMetadata;\n}\n\n","/**\n * SheetState - Reactive state management for sheet operations\n * Wraps TableState and adds sheet-level state tracking\n */\n\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TableState } from './table-state.class';\nimport { SheetStateConfig, SheetMetadata, SheetStateSnapshot } from './sheet-state.interface';\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { TableStateConfig } from './table-state.interface';\n\n/**\n * SheetState class - Manages sheet-level state and delegates table operations\n */\nexport class SheetState {\n /**\n * Sheet identity\n */\n readonly id: string;\n\n /**\n * Observable sheet name\n */\n readonly name$: BehaviorSubject<string>;\n\n /**\n * Table state instance (delegates table operations)\n */\n readonly tableState: TableState;\n\n /**\n * Sheet metadata\n */\n private _metadata$: BehaviorSubject<SheetMetadata>;\n readonly metadata$: Observable<SheetMetadata>;\n\n /**\n * Constructor\n * @param config Sheet state configuration\n * @param columns Reference to columns array for table state\n * @param tableStateConfig Optional table state configuration\n */\n constructor(\n config: SheetStateConfig,\n columns: ColumnConfig<any>[],\n tableStateConfig?: TableStateConfig\n ) {\n this.id = config.id;\n this.name$ = new BehaviorSubject<string>(config.name);\n\n // Initialize table state\n this.tableState = new TableState(columns, tableStateConfig);\n\n // Initialize metadata\n const now = new Date();\n this._metadata$ = new BehaviorSubject<SheetMetadata>({\n createdAt: now,\n lastModified: now,\n lastAccessed: now\n });\n this.metadata$ = this._metadata$.asObservable();\n }\n\n /**\n * Update sheet name\n * @param name New sheet name\n */\n updateName(name: string): void {\n this.name$.next(name);\n this.updateLastModified();\n }\n\n /**\n * Get current sheet name\n */\n getName(): string {\n return this.name$.value;\n }\n\n /**\n * Get complete state snapshot\n */\n getSnapshot(): SheetStateSnapshot {\n return {\n id: this.id,\n name: this.name$.value,\n tableStateSnapshot: this.tableState.getState(),\n metadata: this._metadata$.value\n };\n }\n\n /**\n * Reset sheet state\n */\n reset(): void {\n this.tableState.reset();\n this.updateLastModified();\n }\n\n /**\n * Update last accessed timestamp\n */\n updateLastAccessed(): void {\n const currentMetadata = this._metadata$.value;\n this._metadata$.next({\n ...currentMetadata,\n lastAccessed: new Date()\n });\n }\n\n /**\n * Update last modified timestamp\n */\n private updateLastModified(): void {\n const currentMetadata = this._metadata$.value;\n this._metadata$.next({\n ...currentMetadata,\n lastModified: new Date()\n });\n }\n\n /**\n * Get current metadata\n */\n getMetadata(): SheetMetadata {\n return this._metadata$.value;\n }\n}\n\n","/**\n * Workbook configuration interface - manages multiple sheets\n */\n\nimport { TableConfig } from './table-config.interface';\nimport { WorkbookAction, SheetTabAction } from './workbook-action.interface';\nimport { AutosaveConfig } from './autosave-config.interface';\n\n/**\n * Sheet configuration for workbook (simpler than standalone SheetConfig)\n */\nexport interface WorkbookSheetConfig {\n /**\n * Unique identifier for the sheet\n */\n id: string;\n\n /**\n * Display name of the sheet\n */\n name: string;\n\n /**\n * Table configuration for this sheet\n */\n tableConfig: TableConfig;\n\n /**\n * Optional per-sheet tab actions (overrides workbook defaults)\n */\n tabActions?: SheetTabAction[];\n}\n\n/**\n * Comprehensive workbook configuration interface\n */\nexport interface WorkbookConfig {\n /**\n * Unique identifier for the workbook\n */\n id: string;\n\n /**\n * Display name of the workbook\n */\n name: string;\n\n /**\n * Array of sheets in the workbook\n */\n sheets: WorkbookSheetConfig[];\n\n /**\n * Initial active sheet index (0-based)\n * @default 0\n */\n initialActiveSheetIndex?: number;\n\n /**\n * Workbook-level actions (dropdown in toolbar)\n */\n workbookActions?: WorkbookAction[];\n\n /**\n * Default sheet tab actions (applied to all sheets unless overridden)\n */\n defaultSheetTabActions?: SheetTabAction[];\n\n /**\n * Display configuration\n */\n display?: {\n /**\n * Allow adding new sheets\n * @default true\n */\n allowAddSheet?: boolean;\n\n /**\n * Allow deleting sheets\n * @default true\n */\n allowDeleteSheet?: boolean;\n\n /**\n * Allow fullscreen mode\n * @default true\n */\n allowFullscreen?: boolean;\n\n /**\n * Maximum number of sheets allowed\n * @default undefined (unlimited)\n */\n maxSheets?: number;\n\n /**\n * Minimum number of sheets required\n * @default 1\n */\n minSheets?: number;\n };\n\n /**\n * Defaults for new sheets created via \"Add Sheet\" button\n */\n newSheetDefaults?: {\n /**\n * Prefix for new sheet names\n * @default 'Sheet'\n */\n namePrefix?: string;\n\n /**\n * Default table configuration for new sheets\n */\n tableConfig?: Partial<TableConfig>;\n };\n\n /**\n * Autosave configuration\n * Enables automatic saving of workbook config, state, and data to memory\n * @default { enabled: true, strategy: 'lazy' }\n */\n autosave?: AutosaveConfig;\n}\n\n","/**\n * Workbook action interfaces for configurable workbook-level features\n */\n\nimport { WorkbookSheetConfig } from './workbook-config.interface';\n\n/**\n * Defines a workbook-level action (export all, print, etc.)\n */\nexport interface WorkbookAction {\n /**\n * Unique identifier for the action\n */\n id: string;\n\n /**\n * Display label for the action\n */\n label: string;\n\n /**\n * Optional icon to display (nile-icon name)\n */\n icon?: string;\n\n /**\n * Show as a toolbar button instead of in the dropdown menu\n * @default false\n */\n showInToolbar?: boolean;\n\n /**\n * Function to determine if action should be disabled\n */\n disabled?: boolean | (() => boolean);\n\n /**\n * Function to determine if action should be hidden\n */\n hidden?: boolean | (() => boolean);\n\n /**\n * Callback function to execute when action is clicked\n * @param workbookId The ID of the workbook\n */\n action?: (workbookId: string) => void;\n}\n\n/**\n * Defines a sheet tab action (rename, duplicate, delete)\n */\nexport interface SheetTabAction {\n /**\n * Unique identifier for the action\n */\n id: string;\n\n /**\n * Display label for the action\n */\n label: string;\n\n /**\n * Optional icon to display (nile-icon name)\n */\n icon?: string;\n\n /**\n * Function to determine if action should be disabled\n */\n disabled?: boolean | ((sheet: WorkbookSheetConfig) => boolean);\n\n /**\n * Function to determine if action should be hidden\n */\n hidden?: boolean | ((sheet: WorkbookSheetConfig) => boolean);\n\n /**\n * Callback function to execute when action is clicked\n * @param sheetId The ID of the sheet\n */\n action?: (sheetId: string) => void;\n}\n\n/**\n * Event emitted when a workbook action is clicked\n */\nexport interface WorkbookActionEvent {\n /**\n * The action that was clicked\n */\n action: WorkbookAction;\n\n /**\n * The workbook ID\n */\n workbookId: string;\n}\n\n/**\n * Event emitted when a sheet tab action is clicked\n */\nexport interface SheetTabActionEvent {\n /**\n * The action that was clicked\n */\n action: SheetTabAction;\n\n /**\n * The sheet ID\n */\n sheetId: string;\n}\n\n","/**\n * Workbook state interfaces for state management\n */\n\nimport { TableStateSnapshot } from './table-types';\n\n/**\n * Configuration options for initializing WorkbookState\n */\nexport interface WorkbookStateConfig {\n /**\n * Workbook ID\n */\n id: string;\n\n /**\n * Initial workbook name\n */\n name: string;\n\n /**\n * Initial active sheet index\n */\n initialActiveSheetIndex?: number;\n}\n\n/**\n * Workbook metadata tracking\n */\nexport interface WorkbookMetadata {\n /**\n * When the workbook was created\n */\n createdAt: Date;\n\n /**\n * When the workbook was last modified\n */\n lastModified: Date;\n\n /**\n * When the workbook was last accessed\n */\n lastAccessed: Date;\n\n /**\n * Number of sheets in workbook\n */\n sheetCount: number;\n}\n\n/**\n * Complete snapshot of workbook state\n */\nexport interface WorkbookStateSnapshot {\n /**\n * Workbook ID\n */\n id: string;\n\n /**\n * Workbook name\n */\n name: string;\n\n /**\n * Active sheet index\n */\n activeSheetIndex: number;\n\n /**\n * Fullscreen state\n */\n isFullscreen: boolean;\n\n /**\n * Map of sheet ID to TableStateSnapshot\n */\n sheetTableStates: Map<string, TableStateSnapshot>;\n\n /**\n * Workbook metadata\n */\n metadata: WorkbookMetadata;\n}\n\n","/**\n * WorkbookState - Reactive state management for workbook operations\n * Manages multiple sheet states and workbook-level state\n */\n\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TableState } from './table-state.class';\nimport { WorkbookStateConfig, WorkbookMetadata, WorkbookStateSnapshot } from './workbook-state.interface';\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { TableStateConfig } from './table-state.interface';\n\n/**\n * WorkbookState class - Manages workbook-level state and sheet TableStates\n */\nexport class WorkbookState {\n /**\n * Workbook identity\n */\n readonly id: string;\n\n /**\n * Observable workbook name\n */\n readonly name$: BehaviorSubject<string>;\n\n /**\n * Map of TableState instances (one per sheet)\n * Key: sheetId, Value: TableState\n */\n private _sheetTableStates: Map<string, TableState>;\n\n /**\n * Active sheet tracking\n */\n private _activeSheetIndex$: BehaviorSubject<number>;\n readonly activeSheetIndex$: Observable<number>;\n\n /**\n * Fullscreen state\n */\n private _isFullscreen$: BehaviorSubject<boolean>;\n readonly isFullscreen$: Observable<boolean>;\n\n /**\n * Workbook metadata\n */\n private _metadata$: BehaviorSubject<WorkbookMetadata>;\n readonly metadata$: Observable<WorkbookMetadata>;\n\n /**\n * Constructor\n * @param config Workbook state configuration\n */\n constructor(config: WorkbookStateConfig) {\n this.id = config.id;\n this.name$ = new BehaviorSubject<string>(config.name);\n\n // Initialize sheet states map\n this._sheetTableStates = new Map<string, TableState>();\n\n // Initialize active sheet index\n this._activeSheetIndex$ = new BehaviorSubject<number>(config.initialActiveSheetIndex || 0);\n this.activeSheetIndex$ = this._activeSheetIndex$.asObservable();\n\n // Initialize fullscreen state\n this._isFullscreen$ = new BehaviorSubject<boolean>(false);\n this.isFullscreen$ = this._isFullscreen$.asObservable();\n\n // Initialize metadata\n const now = new Date();\n this._metadata$ = new BehaviorSubject<WorkbookMetadata>({\n createdAt: now,\n lastModified: now,\n lastAccessed: now,\n sheetCount: 0\n });\n this.metadata$ = this._metadata$.asObservable();\n }\n\n /**\n * Get or create TableState for a sheet\n * @param sheetId Sheet ID\n * @param columns Column configurations for the sheet\n * @param tableStateConfig Optional table state configuration\n * @returns TableState instance for the sheet\n */\n getSheetTableState(\n sheetId: string,\n columns: ColumnConfig<any>[],\n tableStateConfig?: TableStateConfig\n ): TableState {\n if (!this._sheetTableStates.has(sheetId)) {\n // Create new TableState for this sheet\n const tableState = new TableState(columns, tableStateConfig);\n this._sheetTableStates.set(sheetId, tableState);\n this.updateSheetCount();\n }\n return this._sheetTableStates.get(sheetId)!;\n }\n\n /**\n * Set TableState for a sheet (useful for lazy initialization)\n * @param sheetId Sheet ID\n * @param tableState TableState instance to set\n */\n setSheetTableState(sheetId: string, tableState: TableState): void {\n this._sheetTableStates.set(sheetId, tableState);\n this.updateSheetCount();\n this.updateLastModified();\n }\n\n /**\n * Remove TableState for a sheet\n * @param sheetId Sheet ID to remove\n */\n removeSheetTableState(sheetId: string): void {\n this._sheetTableStates.delete(sheetId);\n this.updateSheetCount();\n this.updateLastModified();\n }\n\n /**\n * Set active sheet index\n * @param index Sheet index (0-based)\n */\n setActiveSheetIndex(index: number): void {\n this._activeSheetIndex$.next(index);\n this.updateLastAccessed();\n }\n\n /**\n * Get current active sheet index\n */\n getActiveSheetIndex(): number {\n return this._activeSheetIndex$.value;\n }\n\n /**\n * Toggle fullscreen mode\n */\n toggleFullscreen(): void {\n const current = this._isFullscreen$.value;\n this._isFullscreen$.next(!current);\n }\n\n /**\n * Set fullscreen mode\n * @param fullscreen Fullscreen state\n */\n setFullscreen(fullscreen: boolean): void {\n this._isFullscreen$.next(fullscreen);\n }\n\n /**\n * Get current fullscreen state\n */\n isFullscreen(): boolean {\n return this._isFullscreen$.value;\n }\n\n /**\n * Update workbook name\n * @param name New workbook name\n */\n updateName(name: string): void {\n this.name$.next(name);\n this.updateLastModified();\n }\n\n /**\n * Get current workbook name\n */\n getName(): string {\n return this.name$.value;\n }\n\n /**\n * Get complete state snapshot\n */\n getSnapshot(): WorkbookStateSnapshot {\n const sheetTableStates = new Map<string, any>();\n \n // Build map of sheet states\n this._sheetTableStates.forEach((tableState, sheetId) => {\n sheetTableStates.set(sheetId, tableState.getState());\n });\n\n return {\n id: this.id,\n name: this.name$.value,\n activeSheetIndex: this._activeSheetIndex$.value,\n isFullscreen: this._isFullscreen$.value,\n sheetTableStates,\n metadata: this._metadata$.value\n };\n }\n\n /**\n * Update last accessed timestamp\n */\n private updateLastAccessed(): void {\n const currentMetadata = this._metadata$.value;\n this._metadata$.next({\n ...currentMetadata,\n lastAccessed: new Date()\n });\n }\n\n /**\n * Update last modified timestamp\n */\n private updateLastModified(): void {\n const currentMetadata = this._metadata$.value;\n this._metadata$.next({\n ...currentMetadata,\n lastModified: new Date()\n });\n }\n\n /**\n * Update sheet count in metadata\n */\n private updateSheetCount(): void {\n const currentMetadata = this._metadata$.value;\n this._metadata$.next({\n ...currentMetadata,\n sheetCount: this._sheetTableStates.size\n });\n }\n\n /**\n * Get current metadata\n */\n getMetadata(): WorkbookMetadata {\n return this._metadata$.value;\n }\n}\n\n","/**\n * Cell class - represents individual cell instances\n * Combines ColumnConfig (Flyweight) with CellState (unique per instance)\n */\n\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { CellState, createCellState, CellStateMemento, createMemento, restoreFromMemento, canEdit, isCellValid } from './cell-state.interface';\nimport { ValidationResult, CellLifecycleState, CellEvent, EditMode } from '../../models/cell-types';\n\n/**\n * Cell class implementing the Flyweight pattern\n * - References shared ColumnConfig (Flyweight)\n * - Owns unique CellState (Flyweight Context)\n */\nexport class Cell<T = any> {\n /**\n * Shared column configuration (Flyweight - reference only, not owned)\n */\n private readonly columnConfig: ColumnConfig<T>;\n\n /**\n * Unique cell state (owned by this instance)\n */\n private state: CellState<T>;\n\n /**\n * Row data context (reference to parent row data)\n */\n private rowData?: any;\n\n /**\n * Row index in table\n */\n private rowIndex?: number;\n\n /**\n * History of state mementos for undo/redo\n */\n private history: CellStateMemento<T>[] = [];\n\n /**\n * Current position in history\n */\n private historyIndex: number = -1;\n\n /**\n * Maximum history size\n */\n private readonly maxHistorySize: number = 10;\n\n constructor(\n columnConfig: ColumnConfig<T>,\n initialValue: T,\n rowData?: any,\n rowIndex?: number\n ) {\n this.columnConfig = columnConfig;\n this.state = createCellState(initialValue);\n this.rowData = rowData;\n this.rowIndex = rowIndex;\n \n // Save initial state to history\n this.saveToHistory();\n }\n\n /**\n * Get current cell value\n */\n getValue(): T {\n return this.state.value;\n }\n\n /**\n * Set cell value\n * @param value New value\n * @param skipValidation Skip validation (useful for programmatic sets)\n */\n setValue(value: T, skipValidation: boolean = false): boolean {\n const previousValue = this.state.value;\n\n // Call before change hook\n if (this.columnConfig.hooks?.onChange) {\n this.columnConfig.hooks.onChange(this.createEvent(value, previousValue));\n }\n\n this.state.value = value;\n this.state.isDirty = true;\n this.state.lastModified = new Date();\n\n // Validate if not skipped\n if (!skipValidation) {\n const validationResult = this.validate();\n if (!validationResult.valid) {\n return false;\n }\n }\n\n this.saveToHistory();\n return true;\n }\n\n /**\n * Render cell value as formatted string (delegates to formatter strategy)\n */\n render(): string {\n if (!this.columnConfig.formatter) {\n return String(this.state.value ?? '');\n }\n\n if (this.columnConfig.formatter.formatWithContext) {\n return this.columnConfig.formatter.formatWithContext(\n this.state.value,\n this.rowData,\n this.columnConfig.key\n );\n }\n\n // Ensure format method exists before calling it\n if (this.columnConfig.formatter.format) {\n return this.columnConfig.formatter.format(this.state.value);\n }\n\n // Fallback if formatter exists but has no methods\n return String(this.state.value ?? '');\n }\n\n /**\n * Validate cell value (delegates to validator strategy)\n */\n validate(): ValidationResult {\n // Clear previous errors\n this.state.error = undefined;\n this.state.errors = undefined;\n this.state.lastValidated = new Date();\n\n if (!this.columnConfig.validator) {\n return { valid: true };\n }\n\n const result = this.columnConfig.validator.validateWithContext\n ? this.columnConfig.validator.validateWithContext(\n this.state.value,\n this.rowData,\n this.columnConfig.key\n )\n : this.columnConfig.validator.validate(this.state.value);\n\n if (!result.valid) {\n this.state.error = result.error;\n this.state.errors = result.errors;\n this.state.lifecycleState = CellLifecycleState.ERROR;\n\n // Call validation error hook\n if (this.columnConfig.hooks?.onValidationError) {\n this.columnConfig.hooks.onValidationError(this.createEvent(this.state.value));\n }\n }\n\n return result;\n }\n\n /**\n * Start edit mode\n */\n startEdit(): boolean {\n // Check if cell can be edited\n if (!this.canEdit()) {\n return false;\n }\n\n // Call before edit hook\n if (this.columnConfig.hooks?.beforeEdit) {\n this.columnConfig.hooks.beforeEdit(this.createEvent(this.state.value));\n }\n\n // Save current value as previous\n this.state.previousValue = this.state.value;\n this.state.isEditing = true;\n this.state.lifecycleState = CellLifecycleState.EDITING;\n\n // Call on edit hook\n if (this.columnConfig.hooks?.onEdit) {\n this.columnConfig.hooks.onEdit(this.createEvent(this.state.value));\n }\n\n return true;\n }\n\n /**\n * Save edited value\n * @param newValue The new value from editor\n */\n saveEdit(newValue: T): boolean {\n if (!this.state.isEditing) {\n return false;\n }\n\n // Call before save hook\n if (this.columnConfig.hooks?.beforeSave) {\n this.columnConfig.hooks.beforeSave(this.createEvent(newValue, this.state.previousValue));\n }\n\n // Parse value if parser is provided\n let parsedValue = newValue;\n if (this.columnConfig.parser) {\n try {\n parsedValue = this.columnConfig.parser.parse(newValue);\n } catch (error) {\n this.state.error = `Failed to parse value: ${error}`;\n return false;\n }\n }\n\n // Validate\n const previousValue = this.state.value;\n this.state.value = parsedValue;\n const validationResult = this.validate();\n\n if (!validationResult.valid) {\n this.state.value = previousValue; // Revert on validation failure\n return false;\n }\n\n // Mark as dirty if value changed\n this.state.isDirty = this.state.value !== this.state.originalValue;\n this.state.isEditing = false;\n this.state.lifecycleState = CellLifecycleState.DISPLAY;\n this.state.lastModified = new Date();\n\n // Save to history\n this.saveToHistory();\n\n // Call after save hook\n if (this.columnConfig.hooks?.onSave) {\n this.columnConfig.hooks.onSave(this.createEvent(parsedValue, previousValue));\n }\n\n // Call after edit hook\n if (this.columnConfig.hooks?.afterEdit) {\n this.columnConfig.hooks.afterEdit(this.createEvent(parsedValue));\n }\n\n return true;\n }\n\n /**\n * Cancel edit and revert to previous value\n */\n cancelEdit(): void {\n if (!this.state.isEditing) {\n return;\n }\n\n // Revert to previous value\n if (this.state.previousValue !== undefined) {\n this.state.value = this.state.previousValue;\n }\n\n this.state.isEditing = false;\n this.state.lifecycleState = CellLifecycleState.DISPLAY;\n this.state.error = undefined;\n this.state.errors = undefined;\n\n // Call cancel hook\n if (this.columnConfig.hooks?.onCancel) {\n this.columnConfig.hooks.onCancel(this.createEvent(this.state.value));\n }\n\n // Call after edit hook\n if (this.columnConfig.hooks?.afterEdit) {\n this.columnConfig.hooks.afterEdit(this.createEvent(this.state.value));\n }\n }\n\n /**\n * Reset cell to original value\n */\n reset(): void {\n if (this.state.originalValue !== undefined) {\n this.state.value = this.state.originalValue;\n this.state.isDirty = false;\n this.state.error = undefined;\n this.state.errors = undefined;\n this.state.isEditing = false;\n this.state.lifecycleState = CellLifecycleState.DISPLAY;\n }\n }\n\n /**\n * Check if cell can be edited\n */\n canEdit(): boolean {\n return (\n this.columnConfig.editable === true &&\n this.columnConfig.editMode !== EditMode.NONE &&\n canEdit(this.state)\n );\n }\n\n /**\n * Check if cell is valid\n */\n isValid(): boolean {\n return isCellValid(this.state);\n }\n\n /**\n * Check if cell is dirty (modified)\n */\n isDirty(): boolean {\n return this.state.isDirty;\n }\n\n /**\n * Check if cell is in edit mode\n */\n isEditing(): boolean {\n return this.state.isEditing;\n }\n\n /**\n * Set focus state on this cell\n */\n focus(): void {\n this.state.isFocused = true;\n }\n \n /**\n * Remove focus from this cell\n */\n blur(): void {\n this.state.isFocused = false;\n }\n \n /**\n * Check if this cell is focused\n */\n isFocused(): boolean {\n return this.state.isFocused ?? false;\n }\n\n /**\n * Get current cell state (Memento pattern)\n */\n getState(): CellState<T> {\n return { ...this.state };\n }\n\n /**\n * Restore cell state from snapshot (Memento pattern)\n */\n restoreState(state: CellState<T>): void {\n this.state = { ...state };\n }\n\n /**\n * Get column configuration (readonly access)\n */\n getColumnConfig(): Readonly<ColumnConfig<T>> {\n return this.columnConfig;\n }\n\n /**\n * Get row data context\n */\n getRowData(): any {\n return this.rowData;\n }\n\n /**\n * Get row index\n */\n getRowIndex(): number | undefined {\n return this.rowIndex;\n }\n\n /**\n * Set loading state\n */\n setLoading(isLoading: boolean): void {\n this.state.isLoading = isLoading;\n }\n\n /**\n * Set disabled state\n */\n setDisabled(isDisabled: boolean): void {\n this.state.isDisabled = isDisabled;\n }\n\n /**\n * Set readonly state\n */\n setReadonly(isReadonly: boolean): void {\n this.state.isReadonly = isReadonly;\n }\n\n /**\n * Save current state to history\n */\n private saveToHistory(): void {\n // Remove any states after current position (for redo invalidation)\n this.history = this.history.slice(0, this.historyIndex + 1);\n\n // Add current state\n this.history.push(createMemento(this.state));\n this.historyIndex = this.history.length - 1;\n\n // Limit history size\n if (this.history.length > this.maxHistorySize) {\n this.history.shift();\n this.historyIndex--;\n }\n }\n\n /**\n * Undo last change\n */\n undo(): boolean {\n if (this.historyIndex > 0) {\n this.historyIndex--;\n const memento = this.history[this.historyIndex];\n this.state = restoreFromMemento(this.state, memento);\n return true;\n }\n return false;\n }\n\n /**\n * Redo last undone change\n */\n redo(): boolean {\n if (this.historyIndex < this.history.length - 1) {\n this.historyIndex++;\n const memento = this.history[this.historyIndex];\n this.state = restoreFromMemento(this.state, memento);\n return true;\n }\n return false;\n }\n\n /**\n * Check if undo is available\n */\n canUndo(): boolean {\n return this.historyIndex > 0;\n }\n\n /**\n * Check if redo is available\n */\n canRedo(): boolean {\n return this.historyIndex < this.history.length - 1;\n }\n\n /**\n * Create cell event for hooks\n */\n private createEvent(value: T, previousValue?: T): CellEvent<T> {\n return {\n value,\n previousValue: previousValue ?? this.state.previousValue,\n rowData: this.rowData,\n columnKey: this.columnConfig.key,\n rowIndex: this.rowIndex\n };\n }\n\n /**\n * Get cell metadata\n */\n getMetadata(key: string): any {\n return this.state.metadata?.[key];\n }\n\n /**\n * Set cell metadata\n */\n setMetadata(key: string, value: any): void {\n if (!this.state.metadata) {\n this.state.metadata = {};\n }\n this.state.metadata[key] = value;\n }\n\n /**\n * Clear all metadata\n */\n clearMetadata(): void {\n this.state.metadata = undefined;\n }\n}\n\n","/**\n * Utility functions for column configuration operations\n */\n\nimport { ColumnConfig, PartialColumnConfig, DEFAULT_COLUMN_CONFIG } from './column-config.interface';\nimport { EditMode } from './cell-types';\n\n/**\n * Helper function to check if a value is a plain object\n * (not an array, null, Date, RegExp, or class instance)\n */\nexport function isPlainObject(value: any): boolean {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n \n // Exclude arrays\n if (Array.isArray(value)) {\n return false;\n }\n \n // Check if it's an instance of a built-in type or custom class\n // Plain objects have Object.prototype as their direct prototype\n const proto = Object.getPrototypeOf(value);\n \n // If prototype is null (Object.create(null)) or Object.prototype, it's a plain object\n if (proto === null || proto === Object.prototype) {\n return true;\n }\n \n // If it has a constructor and the constructor is not Object, it's a class instance\n if (value.constructor && value.constructor !== Object) {\n return false;\n }\n \n // Otherwise, it's not a plain object (likely a class instance)\n return false;\n}\n\n/**\n * Recursively deep merges multiple column configurations.\n * This function properly clones nested objects and arrays to avoid shared references.\n * \n * @param configs - Variable number of partial column configurations to merge\n * @returns A merged configuration with all nested objects properly cloned\n * \n * @example\n * const merged = deepMergeColumnConfig(\n * { filterConfig: { operator: 'equals' } },\n * { filterConfig: { value: 'test' } }\n * );\n * // Result: { filterConfig: { operator: 'equals', value: 'test' } }\n */\nexport function deepMergeColumnConfig<T>(\n ...configs: Array<Partial<ColumnConfig<T>>>\n): Partial<ColumnConfig<T>> {\n const result: any = {};\n \n for (const config of configs) {\n if (!config) continue;\n \n Object.keys(config).forEach(key => {\n const value = (config as any)[key];\n \n if (value === undefined) {\n return; // Skip undefined values\n }\n \n // Check if value is a plain object (for recursive merging)\n if (isPlainObject(value)) {\n // Recursively merge nested objects\n result[key] = deepMergeColumnConfig(result[key] || {}, value);\n } else if (Array.isArray(value)) {\n // Clone arrays to avoid shared references\n result[key] = [...value];\n } else {\n // Primitives, functions, and class instances are assigned directly\n result[key] = value;\n }\n });\n }\n \n return result;\n}\n\n/**\n * Helper function to merge column configs with defaults\n * @deprecated Use deepMergeColumnConfig instead for proper nested object handling\n */\nexport function mergeWithDefaults<T>(config: PartialColumnConfig<T>): ColumnConfig<T> {\n return deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, config) as ColumnConfig<T>;\n}\n\n/**\n * Helper to create a readonly column config\n */\nexport function createReadonlyColumn<T>(\n key: string,\n options?: PartialColumnConfig<T>\n): ColumnConfig<T> {\n return mergeWithDefaults({\n key,\n editable: false,\n editMode: EditMode.NONE,\n ...options\n } as ColumnConfig<T>);\n}\n\n/**\n * Helper to create an editable column config\n */\nexport function createEditableColumn<T>(\n key: string,\n options?: PartialColumnConfig<T>\n): ColumnConfig<T> {\n return mergeWithDefaults({\n key,\n editable: true,\n ...options\n } as ColumnConfig<T>);\n}","/**\n * Base column configuration class implementing Template Method pattern\n */\n\nimport { ColumnConfig, DEFAULT_COLUMN_CONFIG } from './column-config.interface';\nimport { Cell } from '../renderer/models/cell.class';\nimport { CellFormatter, CellValidator, CellEditor, CellParser, CellLifecycleHooks } from './cell-strategies.interface';\nimport { CellAlignment, CellVerticalAlignment, EditMode, CellDataType, ValidationResult } from './cell-types';\nimport { TemplateRef } from '@angular/core';\nimport { deepMergeColumnConfig } from './column-config.utils';\n\n/**\n * Abstract base class for column configurations\n * Implements Template Method pattern for cell operations\n */\nexport abstract class BaseColumnConfig<T = any> implements ColumnConfig<T> {\n readonly key: string;\n readonly header?: string;\n readonly dataType?: CellDataType;\n readonly formatter?: CellFormatter<T>;\n readonly validator?: CellValidator<T>;\n readonly editor?: CellEditor<T>;\n readonly parser?: CellParser<T>;\n readonly editable?: boolean;\n readonly editMode?: EditMode;\n readonly sortable?: boolean;\n readonly filterable?: boolean;\n readonly resizable?: boolean;\n readonly width?: number | string;\n readonly minWidth?: number;\n readonly maxWidth?: number;\n readonly alignment?: CellAlignment;\n readonly verticalAlignment?: CellVerticalAlignment;\n readonly truncate?: boolean;\n readonly tooltip?: string | ((value: T, rowData: any) => string);\n readonly className?: string | string[] | ((value: T, rowData: any) => string | string[]);\n readonly style?: Record<string, any> | ((value: T, rowData: any) => Record<string, any>);\n readonly cellTemplate?: TemplateRef<any>;\n readonly headerTemplate?: TemplateRef<any>;\n readonly visible?: boolean;\n readonly pinned?: 'left' | 'right' | false;\n readonly sortPriority?: number;\n readonly comparator?: (a: T, b: T) => number;\n readonly valueGetter?: (rowData: any) => T;\n readonly valueSetter?: (rowData: any, value: T) => void;\n readonly hooks?: CellLifecycleHooks<T>;\n readonly showLoadingIndicator?: boolean;\n readonly metadata?: Record<string, any>;\n\n constructor(config: Partial<ColumnConfig<T>> & { key: string }) {\n const merged = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, config) as ColumnConfig<T>;\n \n this.key = merged.key;\n this.header = merged.header;\n this.dataType = merged.dataType;\n this.formatter = merged.formatter;\n this.validator = merged.validator;\n this.editor = merged.editor;\n this.parser = merged.parser;\n this.editable = merged.editable;\n this.editMode = merged.editMode;\n this.sortable = merged.sortable;\n this.filterable = merged.filterable;\n this.resizable = merged.resizable;\n this.width = merged.width;\n this.minWidth = merged.minWidth;\n this.maxWidth = merged.maxWidth;\n this.alignment = merged.alignment;\n this.verticalAlignment = merged.verticalAlignment;\n this.truncate = merged.truncate;\n this.tooltip = merged.tooltip;\n this.className = merged.className;\n this.style = merged.style;\n this.cellTemplate = merged.cellTemplate;\n this.headerTemplate = merged.headerTemplate;\n this.visible = merged.visible;\n this.pinned = merged.pinned;\n this.sortPriority = merged.sortPriority;\n this.comparator = merged.comparator;\n this.valueGetter = merged.valueGetter;\n this.valueSetter = merged.valueSetter;\n this.hooks = merged.hooks;\n this.showLoadingIndicator = merged.showLoadingIndicator;\n this.metadata = merged.metadata;\n }\n\n /**\n * Factory method to create a cell (Factory Pattern)\n * Can be overridden by subclasses for custom cell creation\n */\n createCell(rowData: any, rowIndex?: number): Cell<T> {\n const value = this.extractValue(rowData);\n const cell = new Cell<T>(this, value, rowData, rowIndex);\n \n // Apply any post-creation hooks\n this.afterCellCreated(cell, rowData, rowIndex);\n \n return cell;\n }\n\n /**\n * Template method for processing cell edit workflow\n * Defines the algorithm steps that subclasses can customize\n */\n processEdit(cell: Cell<T>, newValue: T): boolean {\n // Step 1: Before edit hook\n if (!this.beforeEdit(cell, newValue)) {\n return false;\n }\n\n // Step 2: Parse the value\n const parsedValue = this.parseValue(newValue);\n if (parsedValue === undefined) {\n return false;\n }\n\n // Step 3: Validate the parsed value\n const validationResult = this.validateValue(parsedValue, cell.getRowData());\n if (!validationResult.valid) {\n this.onValidationFailed(cell, validationResult);\n return false;\n }\n\n // Step 4: Apply the value\n const success = cell.saveEdit(parsedValue);\n \n if (success) {\n // Step 5: After edit hook\n this.afterEdit(cell, parsedValue);\n \n // Step 6: Update row data if valueSetter is provided\n if (this.valueSetter) {\n this.valueSetter(cell.getRowData(), parsedValue);\n }\n }\n\n return success;\n }\n\n /**\n * Hook: Before edit validation (can be overridden)\n */\n protected beforeEdit(cell: Cell<T>, newValue: T): boolean {\n if (this.hooks?.beforeEdit) {\n this.hooks.beforeEdit({\n value: newValue,\n previousValue: cell.getValue(),\n rowData: cell.getRowData(),\n columnKey: this.key,\n rowIndex: cell.getRowIndex()\n });\n }\n return true;\n }\n\n /**\n * Hook: After edit completion (can be overridden)\n */\n protected afterEdit(cell: Cell<T>, newValue: T): void {\n if (this.hooks?.afterEdit) {\n this.hooks.afterEdit({\n value: newValue,\n previousValue: cell.getValue(),\n rowData: cell.getRowData(),\n columnKey: this.key,\n rowIndex: cell.getRowIndex()\n });\n }\n }\n\n /**\n * Hook: After cell is created (can be overridden)\n */\n protected afterCellCreated(cell: Cell<T>, rowData: any, rowIndex?: number): void {\n // Subclasses can override to perform post-creation setup\n }\n\n /**\n * Hook: When validation fails (can be overridden)\n */\n protected onValidationFailed(cell: Cell<T>, validationResult: ValidationResult): void {\n if (this.hooks?.onValidationError) {\n this.hooks.onValidationError({\n value: cell.getValue(),\n rowData: cell.getRowData(),\n columnKey: this.key,\n rowIndex: cell.getRowIndex()\n });\n }\n }\n\n /**\n * Extract value from row data (can be overridden)\n */\n protected extractValue(rowData: any): T {\n if (this.valueGetter) {\n return this.valueGetter(rowData);\n }\n return rowData[this.key];\n }\n\n /**\n * Parse value using parser if available (can be overridden)\n */\n protected parseValue(value: any): T | undefined {\n if (this.parser) {\n try {\n return this.parser.parse(value);\n } catch (error) {\n console.error(`Failed to parse value for column ${this.key}:`, error);\n return undefined;\n }\n }\n return value;\n }\n\n /**\n * Validate value using validator if available (can be overridden)\n */\n protected validateValue(value: T, rowData: any): ValidationResult {\n if (this.validator) {\n if (this.validator.validateWithContext) {\n return this.validator.validateWithContext(value, rowData, this.key);\n }\n return this.validator.validate(value);\n }\n return { valid: true };\n }\n\n /**\n * Format value for display (can be overridden)\n */\n formatValue(value: T, rowData?: any): string {\n if (this.formatter) {\n if (this.formatter.formatWithContext && rowData) {\n return this.formatter.formatWithContext(value, rowData, this.key);\n }\n return this.formatter.format(value);\n }\n return String(value ?? '');\n }\n\n /**\n * Get cell tooltip (can be overridden)\n */\n getTooltip(value: T, rowData: any): string | undefined {\n if (!this.tooltip) {\n return undefined;\n }\n \n if (typeof this.tooltip === 'function') {\n return this.tooltip(value, rowData);\n }\n \n return this.tooltip;\n }\n\n /**\n * Get cell class names (can be overridden)\n */\n getClassName(value: T, rowData: any): string | string[] | undefined {\n if (!this.className) {\n return undefined;\n }\n \n if (typeof this.className === 'function') {\n return this.className(value, rowData);\n }\n \n return this.className;\n }\n\n /**\n * Get cell styles (can be overridden)\n */\n getStyle(value: T, rowData: any): Record<string, any> | undefined {\n if (!this.style) {\n return undefined;\n }\n \n if (typeof this.style === 'function') {\n return this.style(value, rowData);\n }\n \n return this.style;\n }\n\n /**\n * Compare two values for sorting (can be overridden)\n */\n compare(a: T, b: T): number {\n if (this.comparator) {\n return this.comparator(a, b);\n }\n \n // Default comparison\n if (a === b) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n \n if (typeof a === 'number' && typeof b === 'number') {\n return a - b;\n }\n \n if (a instanceof Date && b instanceof Date) {\n return a.getTime() - b.getTime();\n }\n \n return String(a).localeCompare(String(b));\n }\n}\n\n/**\n * Concrete implementation for simple use cases\n */\nexport class SimpleColumnConfig<T = any> extends BaseColumnConfig<T> {\n constructor(config: Partial<ColumnConfig<T>> & { key: string }) {\n super(config);\n }\n}\n\n","/**\n * Default validator implementations\n */\n\nimport { CellValidator, CompositeValidator } from '../models/cell-strategies.interface';\nimport { ValidationResult, isNullOrUndefined } from '../models/cell-types';\n\n/**\n * Required validator - ensures value is not empty\n */\nexport class RequiredValidator implements CellValidator<any> {\n errorMessage = 'This field is required';\n\n constructor(private readonly customMessage?: string) {\n if (customMessage) {\n this.errorMessage = customMessage;\n }\n }\n\n validate(value: any): ValidationResult {\n const isEmpty = isNullOrUndefined(value) || \n (typeof value === 'string' && value.trim() === '') ||\n (Array.isArray(value) && value.length === 0);\n\n return {\n valid: !isEmpty,\n error: isEmpty ? this.errorMessage : undefined\n };\n }\n}\n\n/**\n * Range validator - validates numeric range\n */\nexport class RangeValidator implements CellValidator<number> {\n errorMessage: string;\n\n constructor(\n private readonly min?: number,\n private readonly max?: number,\n customMessage?: string\n ) {\n this.errorMessage = customMessage ?? this.buildErrorMessage();\n }\n\n validate(value: number): ValidationResult {\n if (isNullOrUndefined(value)) {\n return { valid: true }; // Use RequiredValidator for required checks\n }\n\n if (typeof value !== 'number' || isNaN(value)) {\n return {\n valid: false,\n error: 'Value must be a number'\n };\n }\n\n if (this.min !== undefined && value < this.min) {\n return {\n valid: false,\n error: `Value must be at least ${this.min}`\n };\n }\n\n if (this.max !== undefined && value > this.max) {\n return {\n valid: false,\n error: `Value must be at most ${this.max}`\n };\n }\n\n return { valid: true };\n }\n\n private buildErrorMessage(): string {\n if (this.min !== undefined && this.max !== undefined) {\n return `Value must be between ${this.min} and ${this.max}`;\n } else if (this.min !== undefined) {\n return `Value must be at least ${this.min}`;\n } else if (this.max !== undefined) {\n return `Value must be at most ${this.max}`;\n }\n return 'Invalid value';\n }\n}\n\n/**\n * String length validator\n */\nexport class LengthValidator implements CellValidator<string> {\n errorMessage: string;\n\n constructor(\n private readonly minLength?: number,\n private readonly maxLength?: number,\n customMessage?: string\n ) {\n this.errorMessage = customMessage ?? this.buildErrorMessage();\n }\n\n validate(value: string): ValidationResult {\n if (isNullOrUndefined(value)) {\n return { valid: true };\n }\n\n const length = String(value).length;\n\n if (this.minLength !== undefined && length < this.minLength) {\n return {\n valid: false,\n error: `Minimum length is ${this.minLength} characters`\n };\n }\n\n if (this.maxLength !== undefined && length > this.maxLength) {\n return {\n valid: false,\n error: `Maximum length is ${this.maxLength} characters`\n };\n }\n\n return { valid: true };\n }\n\n private buildErrorMessage(): string {\n if (this.minLength !== undefined && this.maxLength !== undefined) {\n return `Length must be between ${this.minLength} and ${this.maxLength} characters`;\n } else if (this.minLength !== undefined) {\n return `Minimum length is ${this.minLength} characters`;\n } else if (this.maxLength !== undefined) {\n return `Maximum length is ${this.maxLength} characters`;\n }\n return 'Invalid length';\n }\n}\n\n/**\n * Regex validator - validates against regular expression\n */\nexport class RegexValidator implements CellValidator<string> {\n errorMessage = 'Invalid format';\n\n constructor(\n private readonly pattern: RegExp | string,\n customMessage?: string\n ) {\n if (customMessage) {\n this.errorMessage = customMessage;\n }\n }\n\n validate(value: string): ValidationResult {\n if (isNullOrUndefined(value)) {\n return { valid: true };\n }\n\n const regex = typeof this.pattern === 'string' \n ? new RegExp(this.pattern) \n : this.pattern;\n\n const isValid = regex.test(String(value));\n\n return {\n valid: isValid,\n error: isValid ? undefined : this.errorMessage\n };\n }\n}\n\n/**\n * Email validator\n */\nexport class EmailValidator implements CellValidator<string> {\n errorMessage = 'Invalid email address';\n\n private readonly emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n constructor(customMessage?: string) {\n if (customMessage) {\n this.errorMessage = customMessage;\n }\n }\n\n validate(value: string): ValidationResult {\n if (isNullOrUndefined(value)) {\n return { valid: true };\n }\n\n const isValid = this.emailPattern.test(String(value));\n\n return {\n valid: isValid,\n error: isValid ? undefined : this.errorMessage\n };\n }\n}\n\n/**\n * URL validator\n */\nexport class UrlValidator implements CellValidator<string> {\n errorMessage = 'Invalid URL';\n\n constructor(customMessage?: string) {\n if (customMessage) {\n this.errorMessage = customMessage;\n }\n }\n\n validate(value: string): ValidationResult {\n if (isNullOrUndefined(value)) {\n return { valid: true };\n }\n\n try {\n new URL(String(value));\n return { valid: true };\n } catch {\n return {\n valid: false,\n error: this.errorMessage\n };\n }\n }\n}\n\n/**\n * Date range validator\n */\nexport class DateRangeValidator implements CellValidator<Date> {\n errorMessage: string;\n\n constructor(\n private readonly minDate?: Date,\n private readonly maxDate?: Date,\n customMessage?: string\n ) {\n this.errorMessage = customMessage ?? this.buildErrorMessage();\n }\n\n validate(value: Date): ValidationResult {\n if (isNullOrUndefined(value)) {\n return { valid: true };\n }\n\n const date = value instanceof Date ? value : new Date(value);\n\n if (isNaN(date.getTime())) {\n return {\n valid: false,\n error: 'Invalid date'\n };\n }\n\n if (this.minDate && date < this.minDate) {\n return {\n valid: false,\n error: `Date must be on or after ${this.minDate.toLocaleDateString()}`\n };\n }\n\n if (this.maxDate && date > this.maxDate) {\n return {\n valid: false,\n error: `Date must be on or before ${this.maxDate.toLocaleDateString()}`\n };\n }\n\n return { valid: true };\n }\n\n private buildErrorMessage(): string {\n if (this.minDate && this.maxDate) {\n return `Date must be between ${this.minDate.toLocaleDateString()} and ${this.maxDate.toLocaleDateString()}`;\n } else if (this.minDate) {\n return `Date must be on or after ${this.minDate.toLocaleDateString()}`;\n } else if (this.maxDate) {\n return `Date must be on or before ${this.maxDate.toLocaleDateString()}`;\n }\n return 'Invalid date';\n }\n}\n\n/**\n * Custom function validator\n */\nexport class FunctionValidator<T = any> implements CellValidator<T> {\n errorMessage = 'Validation failed';\n\n constructor(\n private readonly validateFn: (value: T) => boolean | ValidationResult,\n customMessage?: string\n ) {\n if (customMessage) {\n this.errorMessage = customMessage;\n }\n }\n\n validate(value: T): ValidationResult {\n const result = this.validateFn(value);\n\n if (typeof result === 'boolean') {\n return {\n valid: result,\n error: result ? undefined : this.errorMessage\n };\n }\n\n return result;\n }\n}\n\n/**\n * Composite validator - chains multiple validators (Chain of Responsibility)\n */\nexport class ChainValidator<T = any> implements CompositeValidator<T> {\n errorMessage = 'Validation failed';\n\n private validators: CellValidator<T>[] = [];\n\n constructor(validators?: CellValidator<T>[]) {\n if (validators) {\n this.validators = validators;\n }\n }\n\n addValidator(validator: CellValidator<T>): this {\n this.validators.push(validator);\n return this;\n }\n\n getValidators(): CellValidator<T>[] {\n return [...this.validators];\n }\n\n validate(value: T): ValidationResult {\n const errors: Record<string, string> = {};\n let allValid = true;\n\n for (let i = 0; i < this.validators.length; i++) {\n const validator = this.validators[i];\n const result = validator.validate(value);\n\n if (!result.valid) {\n allValid = false;\n errors[`validator_${i}`] = result.error || 'Validation failed';\n }\n }\n\n if (!allValid) {\n const firstError = Object.values(errors)[0];\n return {\n valid: false,\n error: firstError,\n errors\n };\n }\n\n return { valid: true };\n }\n}\n\n/**\n * Async validator interface (for future implementation)\n */\nexport interface AsyncCellValidator<T = any> {\n validateAsync(value: T): Promise<ValidationResult>;\n}\n\n/**\n * Pattern validators for common use cases\n */\nexport class PatternValidators {\n static email(message?: string): EmailValidator {\n return new EmailValidator(message);\n }\n\n static url(message?: string): UrlValidator {\n return new UrlValidator(message);\n }\n\n static required(message?: string): RequiredValidator {\n return new RequiredValidator(message);\n }\n\n static range(min?: number, max?: number, message?: string): RangeValidator {\n return new RangeValidator(min, max, message);\n }\n\n static stringLength(min?: number, max?: number, message?: string): LengthValidator {\n return new LengthValidator(min, max, message);\n }\n\n static regex(pattern: RegExp | string, message?: string): RegexValidator {\n return new RegexValidator(pattern, message);\n }\n\n static dateRange(min?: Date, max?: Date, message?: string): DateRangeValidator {\n return new DateRangeValidator(min, max, message);\n }\n\n static custom<T>(fn: (value: T) => boolean | ValidationResult, message?: string): FunctionValidator<T> {\n return new FunctionValidator(fn, message);\n }\n\n static chain<T>(...validators: CellValidator<T>[]): ChainValidator<T> {\n return new ChainValidator(validators);\n }\n}\n\n","/**\n * Row validation state interface\n * Represents an INVALID row with accumulated cell errors\n * Note: Valid rows are not stored - absence of a row state means the row is valid\n */\n\nexport interface RowValidationState {\n /**\n * Index of the row in the table\n */\n rowIndex: number;\n \n /**\n * Always false for stored states (only invalid rows are stored)\n */\n isValid: false;\n \n /**\n * Number of invalid cells in the row\n */\n invalidCellCount: number;\n \n /**\n * Map of column keys to validation error messages\n */\n cellErrors: Map<string, string>;\n \n /**\n * Timestamp of the last validation\n */\n lastValidated: Date;\n}\n","/**\n * Table validation state interface\n * Aggregates validation results from all rows in the table\n * Note: Only invalid rows are stored in rowStates - absence means row is valid\n */\n\nimport { RowValidationState } from './row-validation-state.interface';\n\nexport interface TableValidationState {\n /**\n * Whether all rows in the table are valid\n * True when rowStates is empty (no invalid rows)\n */\n isValid: boolean;\n \n /**\n * Total number of rows in the table\n */\n totalRows: number;\n \n /**\n * Number of valid rows (calculated as totalRows - invalidRows)\n */\n validRows: number;\n \n /**\n * Number of invalid rows (size of rowStates map)\n */\n invalidRows: number;\n \n /**\n * Map of row indices to their validation states\n * Only contains INVALID rows - if a row is not in this map, it's valid\n */\n rowStates: Map<number, RowValidationState>;\n \n /**\n * Timestamp of the last validation state update\n */\n lastUpdated: Date;\n}\n\n","/**\n * Custom editor using NileInput from @aquera/nile-elements\n * This demonstrates how to create custom editors for ngx-smart-table\n */\n\nimport { CellEditor, CellEditorContext } from '../models/cell-strategies.interface';\n\n/**\n * Options interface for NileInputEditor\n */\nexport interface NileInputEditorOptions {\n // Basic properties\n placeholder?: string;\n maxLength?: number;\n minLength?: number;\n autoFocus?: boolean;\n selectOnFocus?: boolean;\n type?: 'text' | 'email' | 'tel' | 'url' | 'search' | 'number' | 'password' | 'date' | 'time' | 'datetime-local';\n size?: 'small' | 'medium' | 'large';\n \n // Style options\n filled?: boolean; // Draws a filled input style\n pill?: boolean; // Pill-style with rounded edges\n \n // Behavior options\n clearable?: boolean; // Adds clear button\n disabled?: boolean; // Disable the input\n readonly?: boolean; // Make it readonly\n required?: boolean; // Required field\n \n // Validation\n pattern?: string; // Regex pattern\n min?: number | string; // Min value (for number/date)\n max?: number | string; // Max value (for number/date)\n step?: number | 'any'; // Step for number inputs\n \n // Visual states\n warning?: boolean; // Warning state\n error?: boolean; // Error state\n success?: boolean; // Success state\n errorMessage?: string; // Error message to display\n helpText?: string; // Help text\n \n // Advanced options\n enterkeyhint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';\n spellcheck?: boolean;\n autocomplete?: string;\n inputmode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';\n \n // Validation behavior\n validateOnSave?: boolean; // Validate before saving (default: true)\n}\n\n/**\n * Custom editor that uses NileInput component\n * @template T The value type (string, number, or both)\n */\nexport class NileInputEditor<T = string> implements CellEditor<T> {\n private input?: any;\n private eventListeners: Array<{ event: string; handler: EventListener }> = [];\n\n constructor(private readonly options?: NileInputEditorOptions) {}\n\n edit(context: CellEditorContext<T>): void {\n if (!context.container) {\n console.warn('NileInputEditor requires a container element');\n return;\n }\n\n // Create NileInput custom element using document.createElement\n this.input = document.createElement('nile-input');\n this.input.type = this.options?.type || 'text';\n this.input.value = String(context.value ?? '');\n this.input.className = 'st-cell-editor st-nile-input-editor';\n \n // Apply inline styles for proper cell fitting\n this.input.style.width = '100%';\n this.input.style.height = '100%';\n this.input.style.boxSizing = 'border-box';\n \n // Set NileInput specific properties\n this.input.noOutline = true;\n this.input.noPadding = true;\n this.input.size = this.options?.size || 'small';\n\n // Apply all configuration options\n this.applyOptions();\n\n // Set up event listeners\n this.setupEventListeners(context);\n\n // Clear container and append input\n context.container.innerHTML = '';\n context.container.appendChild(this.input);\n\n // Auto focus and select\n if (this.options?.autoFocus !== false) {\n // Use setTimeout to ensure element is rendered before focusing\n setTimeout(() => {\n this.input?.focus();\n \n if (this.options?.selectOnFocus !== false) {\n this.input?.select();\n }\n }, 0);\n }\n }\n\n /**\n * Apply all configuration options to the NileInput element\n */\n private applyOptions(): void {\n if (!this.input) return;\n\n // Basic options\n if (this.options?.placeholder) {\n this.input.placeholder = this.options.placeholder;\n }\n\n if (this.options?.maxLength) {\n this.input.maxlength = this.options.maxLength;\n }\n\n if (this.options?.minLength) {\n this.input.minlength = this.options.minLength;\n }\n\n // Style options\n if (this.options?.filled !== undefined) {\n this.input.filled = this.options.filled;\n }\n\n if (this.options?.pill) {\n this.input.pill = this.options.pill;\n }\n\n // Behavior options\n if (this.options?.clearable) {\n this.input.clearable = this.options.clearable;\n }\n\n if (this.options?.disabled) {\n this.input.disabled = this.options.disabled;\n }\n\n if (this.options?.readonly) {\n this.input.readonly = this.options.readonly;\n }\n\n if (this.options?.required) {\n this.input.required = this.options.required;\n }\n\n // Validation properties\n if (this.options?.pattern) {\n this.input.pattern = this.options.pattern;\n }\n\n if (this.options?.min !== undefined) {\n this.input.min = this.options.min;\n }\n\n if (this.options?.max !== undefined) {\n this.input.max = this.options.max;\n }\n\n if (this.options?.step !== undefined) {\n this.input.step = this.options.step;\n }\n\n // Visual states\n if (this.options?.warning) {\n this.input.warning = this.options.warning;\n }\n\n if (this.options?.error) {\n this.input.error = this.options.error;\n }\n\n if (this.options?.success) {\n this.input.success = this.options.success;\n }\n\n if (this.options?.errorMessage) {\n this.input.errorMessage = this.options.errorMessage;\n }\n\n if (this.options?.helpText) {\n this.input.helpText = this.options.helpText;\n }\n\n // Advanced options\n if (this.options?.enterkeyhint) {\n this.input.enterkeyhint = this.options.enterkeyhint;\n } else {\n // Default to 'done' for better mobile UX\n this.input.enterkeyhint = 'done';\n }\n\n if (this.options?.spellcheck !== undefined) {\n this.input.spellcheck = this.options.spellcheck;\n }\n\n if (this.options?.autocomplete) {\n this.input.autocomplete = this.options.autocomplete;\n }\n\n if (this.options?.inputmode) {\n this.input.inputmode = this.options.inputmode;\n }\n }\n\n /**\n * Set up all event listeners with proper cleanup tracking\n */\n private setupEventListeners(context: CellEditorContext<T>): void {\n if (!this.input) return;\n\n const validateOnSave = this.options?.validateOnSave !== false;\n\n // Handle keyboard events (keydown is not replaced by custom events)\n const keydownHandler = (e: Event) => {\n const keyEvent = e as KeyboardEvent;\n if (keyEvent.key === 'Enter') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n this.saveValue(context, validateOnSave);\n } else if (keyEvent.key === 'Escape') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n context.onCancel();\n }\n };\n this.input.addEventListener('keydown', keydownHandler);\n this.eventListeners.push({ event: 'keydown', handler: keydownHandler });\n\n // Use nile-blur custom event instead of native blur\n const blurHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n if (validateOnSave && !this.input?.checkValidity()) {\n // Show validation error but don't save\n this.input?.reportValidity();\n return;\n }\n context.onSave(this.parseValue(customEvent.detail.value));\n };\n this.input.addEventListener('nile-blur', blurHandler);\n this.eventListeners.push({ event: 'nile-blur', handler: blurHandler });\n\n // Optional: Real-time value updates using nile-input\n const inputHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n context.onChange(this.parseValue(customEvent.detail.value));\n };\n this.input.addEventListener('nile-input', inputHandler);\n this.eventListeners.push({ event: 'nile-input', handler: inputHandler });\n\n // Handle clear button if enabled\n if (this.options?.clearable) {\n const clearHandler = (e: Event) => {\n context.onSave(this.parseValue(''));\n };\n this.input.addEventListener('nile-clear', clearHandler);\n this.eventListeners.push({ event: 'nile-clear', handler: clearHandler });\n }\n }\n\n /**\n * Save value with optional validation\n */\n private saveValue(context: CellEditorContext<T>, validate: boolean): void {\n if (!this.input) return;\n\n if (validate && !this.input.checkValidity()) {\n // Show validation error\n this.input.reportValidity();\n return;\n }\n\n context.onSave(this.getCurrentValue());\n }\n\n /**\n * Parse value based on input type\n */\n private parseValue(value: string): T {\n if (this.options?.type === 'number' && value !== '') {\n const num = parseFloat(value);\n return (isNaN(num) ? 0 : num) as unknown as T;\n }\n return value as unknown as T;\n }\n\n destroy(): void {\n // Remove all event listeners\n if (this.input) {\n this.eventListeners.forEach(({ event, handler }) => {\n this.input?.removeEventListener(event, handler);\n });\n this.eventListeners = [];\n \n this.input.remove();\n this.input = undefined;\n }\n }\n\n focus(): void {\n this.input?.focus();\n }\n\n getCurrentValue(): T {\n if (!this.input) return '' as unknown as T;\n \n // Return appropriate value based on type\n if (this.options?.type === 'number') {\n return (this.input.valueAsNumber ?? 0) as unknown as T;\n }\n \n if (this.options?.type === 'date' || this.options?.type === 'datetime-local') {\n const date = this.input.valueAsDate;\n return (date ? date.toISOString() : '') as unknown as T;\n }\n \n return (this.input.value ?? '') as unknown as T;\n }\n}\n","/**\n * Custom editor using NileSelect from @aquera/nile-elements\n * This demonstrates how to create dropdown/select editors for ngx-smart-table\n */\n\nimport { CellEditor, CellEditorContext } from '../models/cell-strategies.interface';\nimport { Observable, Subscription, isObservable } from 'rxjs';\n\n/**\n * Inject global styles for nile-select dropdown height limit\n */\nlet dropdownStylesInjected = false;\nfunction injectDropdownStyles(): void {\n if (dropdownStylesInjected) return;\n dropdownStylesInjected = true;\n\n const styleId = 'nile-select-dropdown-styles';\n if (document.getElementById(styleId)) return;\n\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n /* Limit nile-select dropdown height and enable scrolling */\n .nile-select-portal-append {\n max-height: 300px !important;\n }\n .nile-select-portal-append .select__listbox {\n min-width: 220px !important;\n max-height: 260px !important;\n overflow-y: auto !important;\n width: auto !important;\n }\n .nile-select-portal-append .select__footer {\n height: 35px !important;\n }\n /* Prevent option text truncation - target the options container */\n .nile-select-portal-append .select__options {\n width: auto !important;\n }\n .nile-select-portal-append nile-option {\n width: auto !important;\n max-width: none !important;\n }\n .nile-select-portal-append nile-option::part(base) {\n white-space: nowrap !important;\n text-overflow: clip !important;\n overflow: visible !important;\n max-width: none !important;\n }\n /* Fix option text truncation by changing flex direction */\n .nile-select-portal-append nile-option::part(option_label_container) {\n flex-direction: row !important;\n }\n /* Combobox styling using ::part() selector */\n nile-select.st-cell-editor::part(combobox) {\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary)) !important;\n border: solid 1px transparent !important;\n margin: 1px 4px !important;\n }\n nile-select.st-cell-editor::part(combobox):hover {\n border: solid 1px transparent !important;\n }\n .st-cell-editor::part(combobox) {\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary)) !important;\n border: solid 1px transparent !important;\n margin: 1px 4px !important;\n }\n /* Search input full width */\n .nile-select-portal-append .select__search {\n width: 100% !important;\n }\n `;\n document.head.appendChild(style);\n}\n\n/**\n * Select option configuration\n */\nexport interface SelectOption {\n /** The option's value */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional prefix icon or content */\n prefix?: string;\n}\n\n/**\n * Options interface for NileSelectEditor\n */\nexport interface NileSelectEditorOptions {\n // Options configuration (REQUIRED)\n /** Array of options - supports static arrays, Observable, or BehaviorSubject for reactive updates */\n options: SelectOption[] | string[] | Observable<SelectOption[] | string[]>;\n \n // Basic properties\n /** Placeholder text when no selection is made */\n placeholder?: string;\n /** Size of the select control */\n size?: 'small' | 'medium' | 'large';\n /** Enable multiple selection mode */\n multiple?: boolean;\n \n // Behavior options\n /** Adds clear button when value is not empty */\n clearable?: boolean;\n /** Disable the select control */\n disabled?: boolean;\n /** Make the select required */\n required?: boolean;\n /** Enable search functionality */\n searchEnabled?: boolean;\n \n // Visual states\n /** Warning state styling */\n warning?: boolean;\n /** Error state styling */\n error?: boolean;\n /** Success state styling */\n success?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Help text to display */\n helpText?: string;\n \n // Advanced features\n /** Maximum number of selected options to show in multiple mode (0 = no limit) */\n maxOptionsVisible?: number;\n /** Draws a filled select style */\n filled?: boolean;\n /** Pill-style with rounded edges */\n pill?: boolean;\n /** Use fixed positioning to prevent clipping */\n hoist?: boolean;\n /** Placement of the dropdown menu */\n placement?: 'top' | 'bottom';\n \n // Virtual scroll for large lists\n /** Enable virtual scrolling for better performance with many options */\n enableVirtualScroll?: boolean;\n \n // Search configuration\n /** Disable local search (use for server-side search) */\n disableLocalSearch?: boolean;\n \n // Validation\n /** Validate before saving (default: true) */\n validateOnSave?: boolean;\n \n // Portal options\n /** Append dropdown to document body instead of parent */\n portal?: boolean;\n}\n\n/**\n * Custom editor that uses NileSelect component\n * @template T The value type (string for single selection, string[] for multiple)\n */\nexport class NileSelectEditor<T = string> implements CellEditor<T> {\n acceptsInitialKeypress = false;\n \n private select?: any;\n private eventListeners: Array<{ event: string; handler: EventListener }> = [];\n private optionsSubscription?: Subscription;\n private currentOptions: (SelectOption | string)[] = [];\n private trackedValues: string[] = []; // Track selected values for virtual scroll\n\n constructor(private readonly options: NileSelectEditorOptions) {\n // Handle Observable options\n if (isObservable(options.options)) {\n this.optionsSubscription = options.options.subscribe(opts => {\n this.currentOptions = opts;\n // If editor is already active, update the DOM\n if (this.select) {\n this.updateOptions();\n }\n });\n } else {\n // Static options\n this.currentOptions = options.options || [];\n if (this.currentOptions.length === 0) {\n console.warn('NileSelectEditor: options array is empty');\n }\n }\n }\n\n edit(context: CellEditorContext<T>): void {\n if (!context.container) {\n console.warn('NileSelectEditor requires a container element');\n return;\n }\n\n // Inject dropdown height styles once\n injectDropdownStyles();\n\n // Create NileSelect custom element using document.createElement\n this.select = document.createElement('nile-select');\n this.select.className = 'st-cell-editor';\n \n // Apply inline styles for proper cell fitting\n this.select.style.width = '100%';\n this.select.style.height = 'inherit';\n this.select.style.boxSizing = 'border-box';\n \n // Set initial value\n this.setInitialValue(context.value);\n\n // Apply all configuration options\n this.applyOptions();\n\n // Create and append options with current options\n this.createAndAppendOptions(this.currentOptions);\n\n // Set up event listeners\n this.setupEventListeners(context);\n\n // Clear container and append select\n context.container.innerHTML = '';\n context.container.appendChild(this.select);\n\n // Focus the select after render\n setTimeout(() => {\n try {\n this.select?.focus();\n } catch (e) {\n // Ignore errors\n }\n }, 50);\n }\n\n /**\n * Set the initial value for the select\n */\n private setInitialValue(value: T): void {\n if (!this.select) return;\n\n if (this.options.multiple) {\n // Handle multiple selection - value should be array\n if (Array.isArray(value)) {\n this.select.value = value;\n this.trackedValues = [...value]; // Initialize tracked values\n } else if (value) {\n this.select.value = [String(value)];\n this.trackedValues = [String(value)];\n } else {\n this.select.value = [];\n this.trackedValues = [];\n }\n } else {\n // Handle single selection\n this.select.value = value ? String(value) : '';\n this.trackedValues = value ? [String(value)] : [];\n }\n }\n\n /**\n * Apply all configuration options to the NileSelect element\n */\n private applyOptions(): void {\n if (!this.select) return;\n\n // Basic options\n if (this.options.placeholder) {\n this.select.placeholder = this.options.placeholder;\n }\n\n if (this.options.size) {\n this.select.size = this.options.size;\n } else {\n this.select.size = 'small'; // Default for table cells\n }\n\n if (this.options.multiple) {\n this.select.multiple = this.options.multiple;\n }\n\n // Behavior options\n if (this.options.clearable) {\n this.select.clearable = this.options.clearable;\n }\n\n if (this.options.disabled) {\n this.select.disabled = this.options.disabled;\n }\n\n if (this.options.required) {\n this.select.required = this.options.required;\n }\n\n if (this.options.searchEnabled) {\n this.select.searchEnabled = this.options.searchEnabled;\n }\n\n // Visual states\n if (this.options.warning) {\n this.select.warning = this.options.warning;\n }\n\n if (this.options.error) {\n this.select.error = this.options.error;\n }\n\n if (this.options.success) {\n this.select.success = this.options.success;\n }\n\n if (this.options.errorMessage) {\n this.select.errorMessage = this.options.errorMessage;\n }\n\n if (this.options.helpText) {\n this.select.helpText = this.options.helpText;\n }\n\n // Advanced features\n if (this.options.maxOptionsVisible !== undefined) {\n this.select.maxOptionsVisible = this.options.maxOptionsVisible;\n }\n\n if (this.options.filled !== undefined) {\n this.select.filled = this.options.filled;\n }\n\n if (this.options.pill) {\n this.select.pill = this.options.pill;\n }\n\n if (this.options.hoist) {\n this.select.hoist = this.options.hoist;\n }\n\n if (this.options.placement) {\n this.select.placement = this.options.placement;\n }\n\n if (this.options.enableVirtualScroll) {\n this.select.enableVirtualScroll = this.options.enableVirtualScroll;\n }\n\n if (this.options.disableLocalSearch) {\n this.select.disableLocalSearch = this.options.disableLocalSearch;\n }\n\n // Enable portal mode by default to prevent dropdown clipping in table cells\n this.select.portal = this.options.portal !== false;\n\n // Prevent width syncing issues in table cells\n this.select.noWidthSync = true;\n }\n\n /**\n * Update options dynamically while editor is active\n */\n private updateOptions(): void {\n if (!this.select) return;\n\n // For virtual scroll mode, just update the data property (no DOM children to clear)\n if (this.options.enableVirtualScroll) {\n this.createAndAppendOptions(this.currentOptions);\n } else {\n // Standard mode: clear existing nile-option elements first\n while (this.select.firstChild) {\n this.select.removeChild(this.select.firstChild);\n }\n this.createAndAppendOptions(this.currentOptions);\n }\n \n // Trigger update on the web component\n if (this.select.requestUpdate) {\n this.select.requestUpdate();\n }\n }\n\n /**\n * Create NileOption elements and append them to the select\n * When enableVirtualScroll is true, uses data property instead of DOM elements\n * @see https://nile.aqueralabs.com/select-virtual?theme=enterprise\n * @param options - The options to render\n */\n private createAndAppendOptions(options: (SelectOption | string)[]): void {\n if (!this.select) return;\n\n // Virtual scroll mode: use data property instead of DOM elements\n if (this.options.enableVirtualScroll) {\n const virtualData = options.map(opt => \n typeof opt === 'string' \n ? { value: opt, label: opt }\n : { value: opt.value, label: opt.label, disabled: opt.disabled }\n );\n this.select.data = virtualData;\n return;\n }\n\n // Standard mode: create nile-option elements\n options.forEach(opt => {\n const nileOption = document.createElement('nile-option') as any;\n\n // Auto-detect format: string or SelectOption object\n if (typeof opt === 'string') {\n nileOption.value = opt;\n nileOption.setAttribute('value', opt);\n nileOption.textContent = opt;\n } else {\n nileOption.value = opt.value;\n nileOption.setAttribute('value', opt.value);\n nileOption.textContent = opt.label;\n \n if (opt.disabled) {\n nileOption.disabled = true;\n nileOption.setAttribute('disabled', 'true');\n }\n\n // Handle prefix if provided (could be icon name or content)\n if (opt.prefix) {\n // nileOption.setAttribute('slot', 'prefix');\n // nileOption.innerHTML = `<nile-icon name=\"${opt.prefix}\"></nile-icon>`;\n }\n }\n\n this.select!.appendChild(nileOption);\n });\n }\n\n /**\n * Set up all event listeners with proper cleanup tracking\n */\n private setupEventListeners(context: CellEditorContext<T>): void {\n if (!this.select) return;\n\n const validateOnSave = this.options.validateOnSave !== false;\n\n // Handle keyboard events (keydown is not replaced by custom events)\n const keydownHandler = (e: Event) => {\n const keyEvent = e as KeyboardEvent;\n if (keyEvent.key === 'Escape') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n context.onCancel();\n }\n };\n this.select.addEventListener('keydown', keydownHandler);\n this.eventListeners.push({ event: 'keydown', handler: keydownHandler });\n\n // Use nile-change custom event as save trigger - ONLY for single-select\n // Multi-select should stay open until user clicks outside\n if (!this.options.multiple) {\n const changeHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n try {\n if (validateOnSave && this.select && !this.select.checkValidity()) {\n this.select.reportValidity();\n return;\n }\n } catch (err) {\n // Ignore validation errors - nile-select internals may not be ready\n }\n context.onSave(this.parseValue(customEvent.detail.value));\n };\n this.select.addEventListener('nile-change', changeHandler);\n this.eventListeners.push({ event: 'nile-change', handler: changeHandler });\n }\n\n // For multi-select, track value changes (needed for virtual scroll where value property doesn't update)\n if (this.options.multiple) {\n const trackValueHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n const newValue = customEvent.detail?.value;\n if (newValue !== undefined) {\n if (Array.isArray(newValue)) {\n this.trackedValues = [...newValue];\n } else {\n this.trackedValues = newValue ? [newValue] : [];\n }\n }\n };\n this.select.addEventListener('nile-change', trackValueHandler);\n this.eventListeners.push({ event: 'nile-change', handler: trackValueHandler });\n }\n\n // Track if save was already triggered (to prevent double save)\n let saveTriggered = false;\n \n // Use mousedown on document to detect clicks outside the select and portal\n const documentMousedownHandler = (e: MouseEvent) => {\n if (saveTriggered) return;\n if (!this.select) return;\n \n // Use composedPath to traverse shadow DOM boundaries\n const path = e.composedPath();\n \n // Check if click is inside the select element or any nile-select related elements\n for (const element of path) {\n if (!(element instanceof HTMLElement)) continue;\n \n // Check if it's our select element\n if (element === this.select) {\n return;\n }\n \n // Check for nile-select portals (various class names)\n if (element.classList?.contains('nile-select-portal-append') ||\n element.classList?.contains('select__listbox') ||\n element.classList?.contains('select__options') ||\n element.tagName?.toLowerCase() === 'nile-option' ||\n element.tagName?.toLowerCase() === 'nile-select') {\n return;\n }\n \n // Check for any element with nile-select in its class\n if (element.className && typeof element.className === 'string' && \n element.className.includes('nile-select')) {\n return;\n }\n }\n \n // Also check portal containers directly\n const portals = document.querySelectorAll('.nile-select-portal-append, [class*=\"select__listbox\"]');\n for (let i = 0; i < portals.length; i++) {\n if (portals[i].contains(e.target as Node)) {\n return;\n }\n }\n \n // Click is outside - save and exit\n saveTriggered = true;\n \n try {\n if (validateOnSave && this.select && !this.select.checkValidity()) {\n this.select.reportValidity();\n return;\n }\n } catch (err) {\n // Ignore validation errors - nile-select internals may not be ready\n }\n context.onSave(this.getCurrentValue());\n };\n \n // Add listener after a short delay to avoid capturing the initial click that opened the editor\n setTimeout(() => {\n document.addEventListener('mousedown', documentMousedownHandler, true);\n }, 50);\n \n // Store for cleanup\n (this as any)._documentMousedownHandler = documentMousedownHandler;\n\n // Handle clear button if enabled\n if (this.options.clearable) {\n const clearHandler = (e: Event) => {\n context.onSave(this.parseValue(this.options.multiple ? [] : ''));\n };\n this.select.addEventListener('nile-clear', clearHandler);\n this.eventListeners.push({ event: 'nile-clear', handler: clearHandler });\n }\n\n // Handle search for server-side search scenarios\n if (this.options.disableLocalSearch) {\n const searchHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n // Emit search query through onChange for external handling\n context.onChange(customEvent.detail as T);\n };\n this.select.addEventListener('nile-search', searchHandler);\n this.eventListeners.push({ event: 'nile-search', handler: searchHandler });\n }\n }\n\n /**\n * Parse value based on selection mode\n */\n private parseValue(value: string | string[]): T {\n if (this.options.multiple) {\n // Ensure array for multiple selection\n if (Array.isArray(value)) {\n return value as unknown as T;\n }\n return (value ? [value] : []) as unknown as T;\n }\n \n // Single selection - return string\n if (Array.isArray(value)) {\n return (value.length > 0 ? value[0] : '') as unknown as T;\n }\n return value as unknown as T;\n }\n\n destroy(): void {\n // Unsubscribe from options Observable\n if (this.optionsSubscription) {\n this.optionsSubscription.unsubscribe();\n this.optionsSubscription = undefined;\n }\n \n // Remove document mousedown handler if exists\n if ((this as any)._documentMousedownHandler) {\n document.removeEventListener('mousedown', (this as any)._documentMousedownHandler, true);\n delete (this as any)._documentMousedownHandler;\n }\n \n // Remove all event listeners\n if (this.select) {\n this.eventListeners.forEach(({ event, handler }) => {\n this.select?.removeEventListener(event, handler);\n });\n this.eventListeners = [];\n \n this.select.remove();\n this.select = undefined;\n }\n }\n\n focus(): void {\n try {\n this.select?.focus();\n } catch (e) {\n // Ignore focus errors - nile-select internals may not be ready\n }\n }\n\n getCurrentValue(): T {\n if (!this.select) {\n return (this.options.multiple ? [] : '') as unknown as T;\n }\n \n // For multi-select, prefer tracked values (more reliable for virtual scroll)\n if (this.options.multiple) {\n // Use tracked values if available, otherwise try component value\n let values = this.trackedValues.length > 0 ? this.trackedValues : this.select.value;\n \n if (Array.isArray(values)) {\n return values.filter((v: any) => v !== undefined && v !== null && v !== '') as unknown as T;\n }\n return (values ? [values] : []) as unknown as T;\n }\n \n // For single-select, use tracked values or component value\n let value = this.trackedValues.length > 0 ? this.trackedValues[0] : this.select.value;\n return (Array.isArray(value) ? (value.length > 0 ? value[0] : '') : (value || '')) as unknown as T;\n }\n}\n","/**\n * Custom editor using NileAutoComplete from @aquera/nile-elements\n * Provides real-time suggestions as users type in table cells\n */\n\nimport { CellEditor, CellEditorContext } from '../models/cell-strategies.interface';\n\n/**\n * Autocomplete option configuration\n */\nexport interface AutoCompleteOption {\n /** The option's value */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n}\n\n/**\n * Options interface for NileAutoCompleteEditor\n */\nexport interface NileAutoCompleteEditorOptions {\n // Options configuration (REQUIRED)\n /** Array of autocomplete suggestions - supports both simple string array or detailed AutoCompleteOption objects */\n options: AutoCompleteOption[] | string[];\n \n // Basic properties\n /** Placeholder text to show as a hint when the search is empty */\n placeholder?: string;\n /** Disable the autocomplete control */\n disabled?: boolean;\n /** Help text to display below the control */\n helpText?: string;\n /** Size of the autocomplete control */\n size?: 'small' | 'medium' | 'large';\n \n // Behavior options\n /** Adds clear button when value is not empty */\n clearable?: boolean;\n /** Make the autocomplete required */\n required?: boolean;\n /** Auto-focus the input when editor opens */\n autoFocus?: boolean;\n /** Select all text when focused */\n selectOnFocus?: boolean;\n \n // Visual states\n /** Warning state styling */\n warning?: boolean;\n /** Error state styling */\n error?: boolean;\n /** Success state styling */\n success?: boolean;\n /** Error message to display */\n errorMessage?: string;\n \n // Autocomplete specific options\n /** Minimum number of characters before showing suggestions */\n minSearchLength?: number;\n /** Maximum number of suggestions to show */\n maxSuggestions?: number;\n /** Case-sensitive matching */\n caseSensitive?: boolean;\n /** Filter mode for matching suggestions */\n filterMode?: 'startsWith' | 'contains' | 'custom';\n /** Custom filter function for matching */\n customFilter?: (input: string, option: AutoCompleteOption) => boolean;\n \n // Styling options\n /** Draws a filled autocomplete style */\n filled?: boolean;\n /** Pill-style with rounded edges */\n pill?: boolean;\n \n // Advanced options\n /** Use fixed positioning to prevent clipping */\n hoist?: boolean;\n /** Placement of the suggestions dropdown */\n placement?: 'top' | 'bottom';\n \n // Validation\n /** Validate before saving (default: true) */\n validateOnSave?: boolean;\n}\n\n/**\n * Custom editor that uses NileAutoComplete component\n * @template T The value type (string by default)\n */\nexport class NileAutoCompleteEditor<T = string> implements CellEditor<T> {\n private autocomplete?: any;\n private eventListeners: Array<{ event: string; handler: EventListener }> = [];\n\n constructor(private readonly options: NileAutoCompleteEditorOptions) {\n if (!options.options || options.options.length === 0) {\n console.warn('NileAutoCompleteEditor requires options array to be provided');\n }\n }\n\n edit(context: CellEditorContext<T>): void {\n if (!context.container) {\n console.warn('NileAutoCompleteEditor requires a container element');\n return;\n }\n\n // Create NileAutoComplete custom element using document.createElement\n this.autocomplete = document.createElement('nile-autocomplete');\n this.autocomplete.value = String(context.value ?? '');\n this.autocomplete.className = 'st-cell-editor st-nile-autocomplete-editor';\n \n // Apply inline styles for proper cell fitting\n this.autocomplete.style.width = 'inherit';\n this.autocomplete.style.height = 'inherit';\n this.autocomplete.style.boxSizing = 'border-box';\n \n // Apply all configuration options\n this.applyOptions();\n\n // Set allMenuItems property for autocomplete suggestions\n this.setMenuItems();\n\n // Set up event listeners\n this.setupEventListeners(context);\n\n // Clear container and append autocomplete\n context.container.innerHTML = '';\n context.container.appendChild(this.autocomplete);\n\n // Auto focus\n if (this.options?.autoFocus !== false) {\n setTimeout(() => {\n this.autocomplete?.focus();\n }, 0);\n }\n }\n\n /**\n * Set allMenuItems property for autocomplete suggestions\n * NileAutoComplete requires allMenuItems to be set as a property, not child elements\n */\n private setMenuItems(): void {\n if (!this.autocomplete) return;\n\n const options = this.options.options || [];\n \n // Convert options to string array for allMenuItems\n const menuItems: string[] = options.map(opt => {\n if (typeof opt === 'string') {\n return opt;\n } else {\n // For AutoCompleteOption objects, use the label for display\n return opt.label;\n }\n });\n\n // Set the allMenuItems property directly on the element\n (this.autocomplete as any).allMenuItems = menuItems;\n }\n\n /**\n * Apply all configuration options to the NileAutoComplete element\n */\n private applyOptions(): void {\n if (!this.autocomplete) return;\n\n // Basic properties\n if (this.options?.placeholder) {\n this.autocomplete.placeholder = this.options.placeholder;\n }\n\n if (this.options?.disabled) {\n this.autocomplete.disabled = this.options.disabled;\n }\n\n // Note: Some properties may not be available on NileAutoComplete\n // Setting via attributes as fallback\n if (this.options?.helpText) {\n this.autocomplete.setAttribute('help-text', this.options.helpText);\n }\n\n // Size (if supported by NileAutoComplete)\n if (this.options?.size) {\n this.autocomplete.setAttribute('size', this.options.size);\n }\n\n // Behavior options - using attributes for properties that may not exist\n if (this.options?.clearable) {\n this.autocomplete.setAttribute('clearable', String(this.options.clearable));\n }\n\n if (this.options?.required) {\n this.autocomplete.setAttribute('required', String(this.options.required));\n }\n\n // Styling options\n if (this.options?.filled !== undefined) {\n this.autocomplete.setAttribute('filled', String(this.options.filled));\n }\n\n if (this.options?.pill) {\n this.autocomplete.setAttribute('pill', String(this.options.pill));\n }\n\n // Visual states - using attributes for properties that may not exist\n if (this.options?.warning) {\n this.autocomplete.setAttribute('warning', String(this.options.warning));\n }\n\n if (this.options?.error) {\n this.autocomplete.setAttribute('error', String(this.options.error));\n }\n\n if (this.options?.success) {\n this.autocomplete.setAttribute('success', String(this.options.success));\n }\n\n if (this.options?.errorMessage) {\n this.autocomplete.setAttribute('error-message', this.options.errorMessage);\n }\n\n // Autocomplete specific options\n if (this.options?.minSearchLength !== undefined) {\n this.autocomplete.setAttribute('min-search-length', String(this.options.minSearchLength));\n }\n\n if (this.options?.maxSuggestions !== undefined) {\n this.autocomplete.setAttribute('max-suggestions', String(this.options.maxSuggestions));\n }\n\n if (this.options?.caseSensitive !== undefined) {\n this.autocomplete.setAttribute('case-sensitive', String(this.options.caseSensitive));\n }\n\n // Advanced options\n if (this.options?.hoist) {\n this.autocomplete.setAttribute('hoist', String(this.options.hoist));\n }\n\n if (this.options?.placement) {\n this.autocomplete.setAttribute('placement', this.options.placement);\n }\n\n // Set portal attribute for proper dropdown rendering\n this.autocomplete.setAttribute('portal', 'true');\n }\n\n /**\n * Set up all event listeners with proper cleanup tracking\n */\n private setupEventListeners(context: CellEditorContext<T>): void {\n if (!this.autocomplete) return;\n\n const validateOnSave = this.options?.validateOnSave !== false;\n\n // Handle keyboard events (keydown is not replaced by custom events)\n const keydownHandler = (e: Event) => {\n const keyEvent = e as KeyboardEvent;\n if (keyEvent.key === 'Enter') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n this.saveValue(context, validateOnSave);\n } else if (keyEvent.key === 'Escape') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n context.onCancel();\n } else if (keyEvent.key === 'Tab') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n this.saveValue(context, validateOnSave);\n }\n };\n this.autocomplete.addEventListener('keydown', keydownHandler);\n this.eventListeners.push({ event: 'keydown', handler: keydownHandler });\n\n // Use nile-complete custom event for when user selects an autocomplete suggestion\n const completeHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n // Save the selected value from autocomplete\n if (customEvent.detail && customEvent.detail.value !== undefined) {\n context.onSave(this.parseValue(customEvent.detail.value));\n }\n };\n this.autocomplete.addEventListener('nile-complete', completeHandler);\n this.eventListeners.push({ event: 'nile-complete', handler: completeHandler });\n\n // Use native blur event (NileAutoComplete doesn't have nile-blur)\n const blurHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n // Get current value directly from the component\n const currentValue = customEvent.detail?.value ?? '';\n // Save on blur - TableState coordination ensures only one cell is editing at a time\n context.onSave(this.parseValue(currentValue));\n };\n this.autocomplete.addEventListener('blur', blurHandler);\n this.eventListeners.push({ event: 'blur', handler: blurHandler });\n\n // Use native input event for real-time value updates (NileAutoComplete doesn't have nile-input)\n const inputHandler = () => {\n const currentValue = this.autocomplete?.value ?? '';\n context.onChange(this.parseValue(currentValue));\n };\n this.autocomplete.addEventListener('input', inputHandler);\n this.eventListeners.push({ event: 'input', handler: inputHandler });\n }\n\n /**\n * Save value with optional validation\n */\n private saveValue(context: CellEditorContext<T>, validate: boolean): void {\n if (!this.autocomplete) return;\n\n // Note: NileAutoComplete may not have validation methods\n // Validation should be handled by the validator strategy instead\n context.onSave(this.getCurrentValue());\n }\n\n /**\n * Parse value to appropriate type\n */\n private parseValue(value: string): T {\n return value as unknown as T;\n }\n\n destroy(): void {\n // Remove all event listeners\n if (this.autocomplete) {\n this.eventListeners.forEach(({ event, handler }) => {\n this.autocomplete?.removeEventListener(event, handler);\n });\n this.eventListeners = [];\n \n this.autocomplete.remove();\n this.autocomplete = undefined;\n }\n }\n\n focus(): void {\n this.autocomplete?.focus();\n }\n\n getCurrentValue(): T {\n if (!this.autocomplete) return '' as unknown as T;\n return (this.autocomplete.value ?? '') as unknown as T;\n }\n}\n","/**\n * Custom editor using NileCalendar from @aquera/nile-elements\n * Provides date selection functionality for table cells\n */\n\nimport { CellEditor, CellEditorContext } from '../models/cell-strategies.interface';\n\n/**\n * Date range configuration for restricting allowed dates\n */\nexport interface AllowedDatesRange {\n /** Start date in ISO format (YYYY-MM-DD) */\n startDate?: string;\n /** End date in ISO format (YYYY-MM-DD) */\n endDate?: string;\n}\n\n/**\n * Options interface for NileCalendarEditor\n */\nexport interface NileCalendarEditorOptions {\n // Basic properties\n /** Placeholder text to show when no date is selected */\n placeholder?: string;\n /** Disable the calendar control */\n disabled?: boolean;\n /** Help text to display below the control */\n helpText?: string;\n \n // Date configuration\n /** Date format for display (default: 'YYYY-MM-DD') */\n dateFormat?: string;\n /** Start year for year dropdown */\n startYear?: number;\n /** End year for year dropdown */\n endYear?: number;\n /** Date range restrictions */\n allowedDates?: AllowedDatesRange;\n \n // Behavior options\n /** Show clear button for removing date */\n allowClear?: boolean;\n /** Allow double-click to unselect date */\n doubleClickUnselect?: boolean;\n /** Show month selection dropdown */\n showMonthDropdown?: boolean;\n /** Show year selection dropdown */\n showYearDropdown?: boolean;\n /** Allow manual date input via text fields */\n showManualInputs?: boolean;\n /** Auto-focus the calendar when editor opens */\n autoFocus?: boolean;\n \n // Visual states\n /** Warning state styling */\n warning?: boolean;\n /** Error state styling */\n error?: boolean;\n /** Success state styling */\n success?: boolean;\n /** Error message to display */\n errorMessage?: string;\n \n // Styling\n /** Size of the calendar control */\n size?: 'small' | 'medium' | 'large';\n \n // Advanced options\n /** Validate before saving (default: true) */\n validateOnSave?: boolean;\n}\n\n/**\n * Custom editor that uses NileCalendar component for date selection\n * @template T The value type (string by default, formatted as YYYY-MM-DD)\n */\nexport class NileCalendarEditor<T = string> implements CellEditor<T> {\n acceptsInitialKeypress = false;\n \n private calendar?: any;\n private eventListeners: Array<{ event: string; handler: EventListener }> = [];\n\n constructor(private readonly options?: NileCalendarEditorOptions) {}\n\n edit(context: CellEditorContext<T>): void {\n if (!context.container) {\n console.warn('NileCalendarEditor requires a container element');\n return;\n }\n\n // Create NileCalendar custom element using document.createElement\n this.calendar = document.createElement('nile-calendar');\n \n // Set initial value (NileCalendar expects Date object)\n if (context.value) {\n const dateValue = String(context.value);\n // Convert string to Date object\n const date = new Date(dateValue);\n if (!isNaN(date.getTime())) {\n this.calendar.value = date;\n }\n }\n \n this.calendar.className = 'st-cell-editor st-nile-calendar-editor';\n \n // Apply inline styles for proper cell fitting\n this.calendar.style.width = 'inherit';\n this.calendar.style.height = 'inherit';\n this.calendar.style.boxSizing = 'border-box';\n \n // Apply all configuration options\n this.applyOptions();\n \n // Set up event listeners\n this.setupEventListeners(context);\n \n // Clear container and append calendar\n context.container.innerHTML = '';\n context.container.appendChild(this.calendar);\n \n // Auto focus\n if (this.options?.autoFocus !== false) {\n setTimeout(() => {\n this.calendar?.focus();\n }, 0);\n }\n }\n\n /**\n * Apply all configuration options to the NileCalendar element\n */\n private applyOptions(): void {\n if (!this.calendar) return;\n \n // Date format (default: ISO format)\n const dateFormat = this.options?.dateFormat || 'YYYY-MM-DD';\n this.calendar.setAttribute('dateFormat', dateFormat);\n \n // Basic properties\n if (this.options?.disabled) {\n this.calendar.setAttribute('disabled', String(this.options.disabled));\n }\n \n if (this.options?.placeholder) {\n this.calendar.setAttribute('placeholder', this.options.placeholder);\n }\n \n if (this.options?.helpText) {\n this.calendar.setAttribute('help-text', this.options.helpText);\n }\n \n // Behavior options\n if (this.options?.allowClear) {\n this.calendar.setAttribute('allowClear', String(this.options.allowClear));\n }\n \n if (this.options?.doubleClickUnselect) {\n this.calendar.setAttribute('doubleClickUnselect', String(this.options.doubleClickUnselect));\n }\n \n if (this.options?.showMonthDropdown) {\n this.calendar.setAttribute('showMonthDropdown', String(this.options.showMonthDropdown));\n }\n \n if (this.options?.showYearDropdown) {\n this.calendar.setAttribute('showYearDropdown', String(this.options.showYearDropdown));\n }\n \n if (this.options?.showManualInputs) {\n this.calendar.setAttribute('showManualInputs', String(this.options.showManualInputs));\n }\n \n // Year range\n if (this.options?.startYear) {\n this.calendar.setAttribute('startYear', String(this.options.startYear));\n }\n \n if (this.options?.endYear) {\n this.calendar.setAttribute('endYear', String(this.options.endYear));\n }\n \n // Allowed dates range\n if (this.options?.allowedDates) {\n this.calendar.setAttribute('allowedDates', JSON.stringify(this.options.allowedDates));\n }\n \n // Visual states - using attributes for properties that may not exist\n if (this.options?.warning) {\n this.calendar.setAttribute('warning', String(this.options.warning));\n }\n \n if (this.options?.error) {\n this.calendar.setAttribute('error', String(this.options.error));\n }\n \n if (this.options?.success) {\n this.calendar.setAttribute('success', String(this.options.success));\n }\n \n if (this.options?.errorMessage) {\n this.calendar.setAttribute('error-message', this.options.errorMessage);\n }\n \n // Size\n if (this.options?.size) {\n this.calendar.setAttribute('size', this.options.size);\n }\n }\n\n /**\n * Set up all event listeners with proper cleanup tracking\n */\n private setupEventListeners(context: CellEditorContext<T>): void {\n if (!this.calendar) return;\n \n const validateOnSave = this.options?.validateOnSave !== false;\n \n // Handle keyboard events (keydown is not replaced by custom events)\n const keydownHandler = (e: Event) => {\n const keyEvent = e as KeyboardEvent;\n if (keyEvent.key === 'Enter') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n this.saveValue(context, validateOnSave);\n } else if (keyEvent.key === 'Escape') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n context.onCancel();\n } else if (keyEvent.key === 'Tab') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n this.saveValue(context, validateOnSave);\n }\n };\n this.calendar.addEventListener('keydown', keydownHandler);\n this.eventListeners.push({ event: 'keydown', handler: keydownHandler });\n \n // Use nile-change custom event for date selection\n const changeHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n context.onSave(this.parseValue(customEvent.detail.value));\n };\n this.calendar.addEventListener('nile-change', changeHandler);\n this.eventListeners.push({ event: 'nile-change', handler: changeHandler });\n \n // Use nile-blur custom event (save on blur)\n const blurHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n // Note: NileCalendar may not have validation methods\n // Validation should be handled by the validator strategy instead\n context.onSave(this.parseValue(customEvent.detail.value));\n };\n this.calendar.addEventListener('nile-blur', blurHandler);\n this.eventListeners.push({ event: 'nile-blur', handler: blurHandler });\n \n // Handle clear button if enabled\n if (this.options?.allowClear) {\n const clearHandler = (e: Event) => {\n context.onSave(this.parseValue(''));\n };\n this.calendar.addEventListener('nile-clear', clearHandler);\n this.eventListeners.push({ event: 'nile-clear', handler: clearHandler });\n }\n }\n\n /**\n * Save value with optional validation\n */\n private saveValue(context: CellEditorContext<T>, validate: boolean): void {\n if (!this.calendar) return;\n \n // Note: NileCalendar may not have validation methods\n // Validation should be handled by the validator strategy instead\n context.onSave(this.getCurrentValue());\n }\n\n /**\n * Parse value to appropriate type\n */\n private parseValue(value: string): T {\n // Value is already in the correct format from nile-calendar\n return (value || '') as unknown as T;\n }\n\n destroy(): void {\n // Remove all event listeners\n if (this.calendar) {\n this.eventListeners.forEach(({ event, handler }) => {\n this.calendar?.removeEventListener(event, handler);\n });\n this.eventListeners = [];\n \n this.calendar.remove();\n this.calendar = undefined;\n }\n }\n\n focus(): void {\n this.calendar?.focus();\n }\n\n getCurrentValue(): T {\n if (!this.calendar) return '' as unknown as T;\n \n // NileCalendar.value is a Date object, convert to ISO string format\n if (this.calendar.value instanceof Date) {\n const year = this.calendar.value.getFullYear();\n const month = String(this.calendar.value.getMonth() + 1).padStart(2, '0');\n const day = String(this.calendar.value.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}` as unknown as T;\n }\n \n return '' as unknown as T;\n }\n}\n","/**\n * Custom editor using NileDatePicker from @aquera/nile-elements\n * Supports both single date and range selection with slot-based trigger div\n * Returns string values for both modes:\n * - Single mode: 'YYYY-MM-DD'\n * - Range mode: 'YYYY-MM-DD - YYYY-MM-DD'\n */\n\nimport { CellEditor, CellEditorContext } from '../models/cell-strategies.interface';\n\n/**\n * Date range value interface (kept for reference but not used as return type)\n * The editor returns string values instead\n */\nexport interface DateRange {\n /** Start date in ISO format (YYYY-MM-DD) */\n startDate: string;\n /** End date in ISO format (YYYY-MM-DD) */\n endDate: string;\n}\n\n/**\n * Options interface for NileDatePickerEditor\n */\nexport interface NileDatePickerEditorOptions {\n // Basic properties\n /** Placeholder text to show when no date is selected */\n placeholder?: string;\n /** Label for the trigger input */\n label?: string;\n /** Disable the date picker control */\n disabled?: boolean;\n /** Help text to display below the control */\n helpText?: string;\n \n // Date configuration\n /** Date format for display (default: 'YYYY-MM-DD') */\n dateFormat?: string;\n /** Enable range selection mode */\n range?: boolean;\n /** Sync date pickers in range mode */\n syncDatePicker?: boolean;\n \n // Behavior options\n /** Show clear button for removing date */\n clearable?: boolean;\n /** Auto-focus the date picker when editor opens */\n autoFocus?: boolean;\n \n // Visual states\n /** Warning state styling */\n warning?: boolean;\n /** Error state styling */\n error?: boolean;\n /** Success state styling */\n success?: boolean;\n /** Error message to display */\n errorMessage?: string;\n \n // Styling (for trigger input)\n /** Size of the date picker control */\n size?: number;\n /** Filled style for the input */\n filled?: boolean;\n /** Pill style for the input */\n pill?: boolean;\n \n // Advanced\n /** Validate before saving (default: true) */\n validateOnSave?: boolean;\n}\n\n/**\n * Custom editor using NileDatePicker component\n * Supports both single date and range selection\n * @template T The value type - string for both single and range modes\n * Single mode: 'YYYY-MM-DD'\n * Range mode: 'YYYY-MM-DD - YYYY-MM-DD'\n */\nexport class NileDatePickerEditor<T = string> implements CellEditor<T> {\n acceptsInitialKeypress = false;\n \n private datePicker?: any;\n private triggerDiv?: any;\n private eventListeners: Array<{ event: string; handler: EventListener }> = [];\n\n constructor(private readonly options?: NileDatePickerEditorOptions) {}\n\n edit(context: CellEditorContext<T>): void {\n if (!context.container) {\n console.warn('NileDatePickerEditor requires a container element');\n return;\n }\n\n // Create NileDatePicker using document.createElement\n this.datePicker = document.createElement('nile-date-picker');\n this.datePicker.className = 'st-cell-editor st-nile-date-picker-editor';\n \n // Apply styles for cell fitting\n this.datePicker.style.width = 'inherit';\n this.datePicker.style.height = 'inherit';\n this.datePicker.style.boxSizing = 'border-box';\n \n // Create trigger div with slot\n this.triggerDiv = document.createElement('div');\n this.triggerDiv.setAttribute('slot', 'trigger');\n this.triggerDiv.setAttribute('contenteditable', 'false');\n this.triggerDiv.style.width = '100%';\n this.triggerDiv.style.minHeight = '28px';\n this.triggerDiv.style.cursor = 'pointer';\n this.triggerDiv.style.boxSizing = 'border-box';\n \n // Set initial value\n this.setInitialValue(context.value);\n \n \n // Apply configuration options\n this.applyOptions();\n \n // Append trigger to date picker (slot-based)\n this.datePicker.appendChild(this.triggerDiv);\n \n // Set up event listeners\n this.setupEventListeners(context);\n \n // Append to container\n context.container.innerHTML = '';\n context.container.appendChild(this.datePicker);\n \n // Auto focus and open the date picker\n if (this.options?.autoFocus !== false) {\n setTimeout(() => {\n this.triggerDiv?.focus();\n // Trigger a click to open the date picker dropdown\n this.triggerDiv?.click();\n }, 0);\n }\n }\n\n /**\n * Set initial value in the trigger div\n */\n private setInitialValue(value: T | null | undefined): void {\n if (!this.triggerDiv) return;\n \n if (!value) {\n this.triggerDiv.textContent = '';\n return;\n }\n \n // Both single and range modes use string value\n this.triggerDiv.textContent = String(value);\n }\n\n /**\n * Apply configuration options to the date picker\n * Note: Trigger is now a simple div, so input-specific options are not applied\n */\n private applyOptions(): void {\n if (!this.datePicker) return;\n \n // Configure NileDatePicker\n const dateFormat = this.options?.dateFormat || 'YYYY-MM-DD';\n this.datePicker.setAttribute('dateFormat', dateFormat);\n \n if (this.options?.range) {\n this.datePicker.setAttribute('range', String(this.options.range));\n }\n \n if (this.options?.syncDatePicker) {\n this.datePicker.setAttribute('syncDatePicker', String(this.options.syncDatePicker));\n }\n \n // Trigger div styling (disabled state can be indicated with opacity)\n if (this.triggerDiv && this.options?.disabled) {\n this.triggerDiv.style.opacity = '0.5';\n this.triggerDiv.style.pointerEvents = 'none';\n }\n }\n\n /**\n * Set up all event listeners with proper cleanup tracking\n */\n private setupEventListeners(context: CellEditorContext<T>): void {\n if (!this.datePicker || !this.triggerDiv) return;\n \n const validateOnSave = this.options?.validateOnSave !== false;\n \n // Keyboard events on trigger div\n const keydownHandler = (e: Event) => {\n const keyEvent = e as KeyboardEvent;\n if (keyEvent.key === 'Enter') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n this.saveValue(context, validateOnSave);\n } else if (keyEvent.key === 'Escape') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n context.onCancel();\n } else if (keyEvent.key === 'Tab') {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n this.saveValue(context, validateOnSave);\n } else {\n // Prevent all other keypresses from typing into the div\n keyEvent.preventDefault();\n }\n };\n this.triggerDiv.addEventListener('keydown', keydownHandler);\n this.eventListeners.push({ event: 'keydown', handler: keydownHandler });\n \n // nile-change event on date picker\n const changeHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n // NileDatePicker detail has startDate and endDate, not a single value\n const detail = customEvent.detail;\n let dateValue = '';\n \n if (detail.startDate && detail.endDate) {\n // Range mode: combine startDate and endDate\n dateValue = `${detail.startDate} - ${detail.endDate}`;\n } else if (detail.startDate) {\n // Single mode: only startDate\n dateValue = detail.startDate;\n }\n \n context.onSave(this.parseValue(dateValue));\n };\n this.datePicker.addEventListener('nile-change', changeHandler);\n this.eventListeners.push({ event: 'nile-change', handler: changeHandler });\n }\n\n /**\n * Save value with optional validation\n */\n private saveValue(context: CellEditorContext<T>, validate: boolean): void {\n if (!this.datePicker) return;\n context.onSave(this.getCurrentValue());\n }\n\n /**\n * Parse value from string to appropriate type\n */\n private parseValue(value: string): T {\n // Both single and range modes return string\n // Single mode: 'YYYY-MM-DD'\n // Range mode: 'YYYY-MM-DD - YYYY-MM-DD'\n return (value || '') as unknown as T;\n }\n\n getCurrentValue(): T {\n if (!this.triggerDiv) {\n return '' as unknown as T;\n }\n \n return this.parseValue(this.triggerDiv.textContent ?? '');\n }\n\n destroy(): void {\n if (this.datePicker || this.triggerDiv) {\n this.eventListeners.forEach(({ event, handler }) => {\n this.datePicker?.removeEventListener(event, handler);\n this.triggerDiv?.removeEventListener(event, handler);\n });\n this.eventListeners = [];\n \n if (this.datePicker) {\n this.datePicker.remove();\n this.datePicker = undefined;\n }\n \n this.triggerDiv = undefined;\n }\n }\n\n focus(): void {\n this.triggerDiv?.focus();\n }\n}\n","/**\n * Custom cell editors for ngx-smart-table\n */\n\nexport { NileInputEditor, NileInputEditorOptions } from './nile-input-editor';\nexport { NileSelectEditor, NileSelectEditorOptions, SelectOption } from './nile-select-editor';\nexport { NileAutoCompleteEditor, NileAutoCompleteEditorOptions, AutoCompleteOption } from './nile-autocomplete-editor';\nexport { NileCalendarEditor, NileCalendarEditorOptions, AllowedDatesRange } from './nile-calendar-editor';\nexport { NileDatePickerEditor, NileDatePickerEditorOptions, DateRange } from './nile-date-picker-editor';\n","/**\n * Column configuration factory\n * Simplifies creation of common column types with sensible defaults\n */\n\nimport { ColumnConfig, DEFAULT_COLUMN_CONFIG } from '../models/column-config.interface';\nimport { CellDataType } from '../models/cell-types';\nimport { Cell } from '../renderer/models/cell.class';\nimport {\n StringFormatter,\n NumberFormatter,\n CurrencyFormatter,\n DateFormatter,\n BooleanFormatter\n} from '../strategies/default-formatters';\nimport {\n PatternValidators\n} from '../strategies/default-validators';\nimport {\n TextEditor,\n NumberEditor,\n DateEditor,\n SelectEditor,\n BooleanEditor\n} from '../strategies/default-editors';\nimport { deepMergeColumnConfig } from '../models/column-config.utils';\n\n/**\n * Column configuration factory - Factory Pattern\n * Provides convenient methods to create pre-configured column types\n */\nexport class ColumnConfigFactory {\n /**\n * Create a text column\n */\n static text(key: string, options?: Partial<ColumnConfig<string>>): ColumnConfig<string> {\n const config = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n dataType: CellDataType.STRING,\n formatter: new StringFormatter(),\n editor: new TextEditor(),\n },\n options || {}\n );\n\n return {\n ...config,\n createCell(rowData: any, rowIndex?: number): Cell<string> {\n const valueGetter = options?.valueGetter || ((data: any) => data[key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<string>;\n }\n\n /**\n * Create a number column\n */\n static number(key: string, options?: Partial<ColumnConfig<number>>): ColumnConfig<number> {\n const config = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n dataType: CellDataType.NUMBER,\n formatter: new NumberFormatter({ decimals: 2 }),\n validator: PatternValidators.custom((val) => typeof val === 'number' && !isNaN(val), 'Must be a valid number'),\n editor: new NumberEditor(),\n },\n options || {}\n );\n\n return {\n ...config,\n createCell(rowData: any, rowIndex?: number): Cell<number> {\n const valueGetter = options?.valueGetter || ((data: any) => data[key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<number>;\n }\n\n /**\n * Create a currency column\n */\n static currency(key: string, options?: Partial<ColumnConfig<number>> & {\n currency?: string;\n locale?: string;\n }): ColumnConfig<number> {\n const currency = (options as any)?.currency || 'USD';\n const locale = (options as any)?.locale || 'en-US';\n\n const config = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n dataType: CellDataType.NUMBER,\n formatter: new CurrencyFormatter({ currency, locale }),\n validator: PatternValidators.chain(\n PatternValidators.custom((val) => typeof val === 'number' && !isNaN(val), 'Must be a valid number'),\n PatternValidators.range(0, undefined, 'Amount must be positive')\n ),\n editor: new NumberEditor({ min: 0, step: 0.01 }),\n },\n options || {}\n );\n\n return {\n ...config,\n createCell(rowData: any, rowIndex?: number): Cell<number> {\n const valueGetter = options?.valueGetter || ((data: any) => data[key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<number>;\n }\n\n /**\n * Create a date column\n */\n static date(key: string, options?: Partial<ColumnConfig<Date>> & {\n dateStyle?: 'full' | 'long' | 'medium' | 'short';\n locale?: string;\n }): ColumnConfig<Date> {\n const dateStyle = (options as any)?.dateStyle || 'medium';\n const locale = (options as any)?.locale || 'en-US';\n\n const config = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n dataType: CellDataType.DATE,\n formatter: new DateFormatter({ dateStyle, locale }),\n editor: new DateEditor(),\n },\n options || {}\n );\n\n return {\n ...config,\n createCell(rowData: any, rowIndex?: number): Cell<Date> {\n const valueGetter = options?.valueGetter || ((data: any) => data[key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<Date>;\n }\n\n /**\n * Create a boolean column\n */\n static boolean(key: string, options?: Partial<ColumnConfig<boolean>> & {\n trueValue?: string;\n falseValue?: string;\n }): ColumnConfig<boolean> {\n const trueValue = (options as any)?.trueValue || 'Yes';\n const falseValue = (options as any)?.falseValue || 'No';\n\n const config = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n dataType: CellDataType.BOOLEAN,\n formatter: new BooleanFormatter({ trueValue, falseValue }),\n editor: new BooleanEditor(),\n },\n options || {}\n );\n\n return {\n ...config,\n createCell(rowData: any, rowIndex?: number): Cell<boolean> {\n const valueGetter = options?.valueGetter || ((data: any) => data[key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<boolean>;\n }\n\n /**\n * Create a select/dropdown column\n */\n static select<T = string>(\n key: string,\n selectOptions: Array<{ value: T; label: string }>,\n options?: Partial<ColumnConfig<T>>\n ): ColumnConfig<T> {\n const config = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n editor: new SelectEditor({ options: selectOptions }),\n },\n options || {}\n );\n\n return {\n ...config,\n createCell(rowData: any, rowIndex?: number): Cell<T> {\n const valueGetter = options?.valueGetter || ((data: any) => data[key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<T>;\n }\n\n /**\n * Create an email column\n */\n static email(key: string, options?: Partial<ColumnConfig<string>>): ColumnConfig<string> {\n const config = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n dataType: CellDataType.STRING,\n formatter: new StringFormatter(),\n validator: PatternValidators.email(),\n editor: new TextEditor({ placeholder: 'email@example.com' }),\n },\n options || {}\n );\n\n return {\n ...config,\n createCell(rowData: any, rowIndex?: number): Cell<string> {\n const valueGetter = options?.valueGetter || ((data: any) => data[key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<string>;\n }\n\n /**\n * Create a readonly column\n */\n static readonly<T = any>(key: string, options?: Partial<ColumnConfig<T>>): ColumnConfig<T> {\n const config = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n key,\n header: key.charAt(0).toUpperCase() + key.slice(1),\n editable: false,\n },\n options || {}\n );\n\n return {\n ...config,\n createCell(rowData: any, rowIndex?: number): Cell<T> {\n const valueGetter = options?.valueGetter || ((data: any) => data[key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<T>;\n }\n\n /**\n * Create a custom column with full control\n */\n static custom<T = any>(config: Partial<ColumnConfig<T>> & { key: string }): ColumnConfig<T> {\n if (!config.key) {\n throw new Error('Column key is required');\n }\n\n const mergedConfig = deepMergeColumnConfig(\n DEFAULT_COLUMN_CONFIG,\n {\n header: config.key.charAt(0).toUpperCase() + config.key.slice(1),\n },\n config\n );\n\n return {\n ...mergedConfig,\n createCell(rowData: any, rowIndex?: number): Cell<T> {\n const valueGetter = config.valueGetter || ((data: any) => data[config.key]);\n const value = valueGetter(rowData);\n return new Cell(this, value, rowData, rowIndex);\n }\n } as ColumnConfig<T>;\n }\n\n /**\n * Create multiple columns at once from a simple configuration\n */\n static fromKeys<T extends Record<string, any>>(\n keys: Array<keyof T | { key: keyof T; type?: 'text' | 'number' | 'date' | 'boolean'; options?: any }>\n ): ColumnConfig<any>[] {\n return keys.map(keyConfig => {\n if (typeof keyConfig === 'string' || typeof keyConfig === 'number' || typeof keyConfig === 'symbol') {\n return ColumnConfigFactory.text(String(keyConfig));\n } else {\n const { key, type = 'text', options = {} } = keyConfig;\n const keyStr = String(key);\n \n switch (type) {\n case 'number':\n return ColumnConfigFactory.number(keyStr, options);\n case 'date':\n return ColumnConfigFactory.date(keyStr, options);\n case 'boolean':\n return ColumnConfigFactory.boolean(keyStr, options);\n case 'text':\n default:\n return ColumnConfigFactory.text(keyStr, options);\n }\n }\n });\n }\n}\n\n/**\n * Convenience exports for common column types\n */\nexport const Columns = ColumnConfigFactory;\n\n","import { \n Component, \n OnInit, \n OnDestroy, \n ViewChild, \n ElementRef, \n AfterViewInit, \n TemplateRef, \n HostListener,\n input,\n output,\n computed,\n effect,\n Injector,\n inject,\n DestroyRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CommonModule } from '@angular/common';\nimport { Cell } from '../../models/cell.class';\nimport { CellEditorContext } from '../../../models/cell-strategies.interface';\nimport { CellEditEvent, CellSaveEvent, CellChangeEvent, CellCancelEvent, EditMode, NavigationKey, NavigationDirection } from '../../../models/cell-types';\nimport { TableState } from '../../models/table-state.class';\nimport { TableConfig } from '../../../models/table-config.interface';\n\n@Component({\n selector: 'st-cell',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './st-cell.component.html',\n styleUrls: ['./st-cell.component.scss'],\n})\nexport class StCellComponent implements OnInit, OnDestroy, AfterViewInit {\n private destroyRef = inject(DestroyRef);\n \n // Signal-based inputs\n readonly cell = input.required<Cell<any>>();\n readonly editMode = input<EditMode>(EditMode.CLICK);\n readonly tableState = input<TableState | undefined>(undefined);\n readonly tableConfig = input<TableConfig | undefined>(undefined);\n readonly columnIndex = input<number | undefined>(undefined);\n \n // Signal-based outputs\n readonly cellChange = output<CellChangeEvent>();\n readonly cellEdit = output<CellEditEvent>();\n readonly cellSave = output<CellSaveEvent>();\n readonly cellCancel = output<CellCancelEvent>();\n readonly cellSaveAndNavigate = output<{event: KeyboardEvent, direction: NavigationDirection}>();\n \n @ViewChild('editorContainer', { read: ElementRef }) editorContainer?: ElementRef;\n \n private editorCleanup?: () => void;\n\n // Computed signals for derived state\n readonly isEditable = computed(() => {\n const cellValue = this.cell();\n if (!cellValue) return false;\n const config = cellValue.getColumnConfig();\n return config.editable ?? false;\n });\n\n readonly validationError = computed(() => {\n const cellValue = this.cell();\n if (!cellValue) return undefined;\n \n const state = cellValue.getState();\n \n if (state.error) {\n return state.error;\n }\n \n if (state.errors && Array.isArray(state.errors) && state.errors.length > 0) {\n return state.errors.join(', ');\n }\n \n if (!cellValue.isValid()) {\n return 'Invalid value';\n }\n \n return undefined;\n });\n\n readonly hasCellTemplate = computed(() => {\n const cellValue = this.cell();\n if (!cellValue) return false;\n const config = cellValue.getColumnConfig();\n return !!config.cellTemplate;\n });\n\n readonly cellTemplate = computed<TemplateRef<any> | null>(() => {\n const cellValue = this.cell();\n if (!cellValue) return null;\n return cellValue.getColumnConfig().cellTemplate || null;\n });\n\n readonly templateContext = computed(() => {\n const cellValue = this.cell();\n if (!cellValue) return null;\n return {\n $implicit: cellValue.getValue(),\n cell: cellValue,\n rowData: cellValue.getRowData(),\n rowIndex: cellValue.getRowIndex()\n };\n });\n\n ngOnInit(): void {\n const tableStateValue = this.tableState();\n const colIndex = this.columnIndex();\n \n if (tableStateValue && colIndex !== undefined) {\n tableStateValue.editingCellPosition$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(position => {\n const cellValue = this.cell();\n if (!cellValue) return;\n \n const rowIndex = cellValue.getRowIndex();\n \n if (cellValue.isEditing() && rowIndex !== undefined) {\n if (position && \n (position.rowIndex !== rowIndex || position.columnIndex !== colIndex)) {\n this.saveEdit(cellValue.getValue());\n }\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n const cellValue = this.cell();\n if (cellValue?.isEditing() && this.editorContainer) {\n this.renderEditor();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupEditor();\n }\n\n @HostListener('keydown', ['$event'])\n onCellKeyDown(event: KeyboardEvent): void {\n const cellValue = this.cell();\n if (!cellValue?.isFocused()) {\n return;\n }\n \n switch (event.key as NavigationKey) {\n case NavigationKey.ENTER:\n if (cellValue.isEditing()) {\n event.preventDefault();\n event.stopPropagation();\n this.saveEdit(cellValue.getValue());\n this.cellSaveAndNavigate.emit({ event, direction: NavigationDirection.DOWN });\n }\n break;\n \n case NavigationKey.TAB:\n if (cellValue.isEditing()) {\n event.preventDefault();\n event.stopPropagation();\n this.saveEdit(cellValue.getValue());\n const direction = event.shiftKey ? NavigationDirection.LEFT : NavigationDirection.RIGHT;\n this.cellSaveAndNavigate.emit({ event, direction });\n }\n break;\n \n case NavigationKey.ESCAPE:\n if (cellValue.isEditing()) {\n event.preventDefault();\n event.stopPropagation();\n this.cancelEdit();\n }\n break;\n \n default:\n if (!cellValue.isEditing() && this.isAlphanumericKey(event)) {\n if (this.canEditViaKeyboard()) {\n event.preventDefault();\n event.stopPropagation();\n this.startEditWithKey(event.key);\n }\n }\n break;\n }\n }\n \n private canEditViaEnter(): boolean {\n return this.isEditable() && \n (this.editMode() === EditMode.ENTER || this.editMode() === EditMode.CLICK);\n }\n \n private canEditViaKeyboard(): boolean {\n return this.isEditable() && \n (this.editMode() === EditMode.ENTER || this.editMode() === EditMode.CLICK);\n }\n \n private isAlphanumericKey(event: KeyboardEvent): boolean {\n return event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;\n }\n \n private startEditWithKey(key: string): void {\n const cellValue = this.cell();\n if (!cellValue) return;\n \n const canStart = cellValue.startEdit();\n if (canStart) {\n const column = cellValue.getColumnConfig();\n const editor = column.editor;\n \n const acceptsKeypress = editor?.acceptsInitialKeypress !== false;\n \n if (acceptsKeypress) {\n cellValue.setValue(key, false);\n }\n \n const editEvent: CellEditEvent = {\n cell: cellValue,\n value: acceptsKeypress ? key : cellValue.getValue(),\n rowData: cellValue.getRowData(),\n columnKey: column.key,\n rowIndex: cellValue.getRowIndex(),\n cellState: cellValue.getState()\n };\n this.cellEdit.emit(editEvent);\n \n setTimeout(() => {\n this.renderEditor();\n }, 0);\n }\n }\n\n onCellClick(): void {\n // Single click now only focuses, doesn't start editing\n }\n\n onCellDoubleClick(): void {\n const cellValue = this.cell();\n if (this.isEditable() && cellValue && !cellValue.isEditing()) {\n this.startEdit();\n }\n }\n\n private startEdit(): void {\n const cellValue = this.cell();\n if (!cellValue) return;\n \n const canStart = cellValue.startEdit();\n if (canStart) {\n const column = cellValue.getColumnConfig();\n const tableStateValue = this.tableState();\n const colIndex = this.columnIndex();\n \n if (tableStateValue && colIndex !== undefined) {\n const rowIndex = cellValue.getRowIndex();\n if (rowIndex !== undefined) {\n tableStateValue.setEditingCell(rowIndex, colIndex);\n }\n }\n \n const editEvent: CellEditEvent = {\n cell: cellValue,\n value: cellValue.getValue(),\n rowData: cellValue.getRowData(),\n columnKey: column.key,\n rowIndex: cellValue.getRowIndex(),\n cellState: cellValue.getState()\n };\n this.cellEdit.emit(editEvent);\n \n setTimeout(() => {\n this.renderEditor();\n }, 0);\n }\n }\n\n private renderEditor(): void {\n if (!this.editorContainer) {\n return;\n }\n\n const cellValue = this.cell();\n if (!cellValue) return;\n \n const column = cellValue.getColumnConfig();\n const editor = column.editor;\n \n if (!editor) {\n console.warn('No editor configured for column:', column.key);\n return;\n }\n\n const value = cellValue.getValue();\n const container = this.editorContainer.nativeElement;\n const tableConfigValue = this.tableConfig();\n \n const context: CellEditorContext<any> = {\n value,\n rowData: cellValue.getRowData(),\n columnKey: column.key,\n rowIndex: cellValue.getRowIndex(),\n onChange: (newValue: any) => {\n if (tableConfigValue?.validation?.mode === 'eager') {\n cellValue.setValue(newValue, true);\n this.triggerEagerValidation();\n }\n },\n onSave: (newValue: any) => {\n this.saveEdit(newValue);\n },\n onCancel: () => {\n this.cancelEdit();\n },\n container\n };\n \n editor.edit(context);\n \n this.editorCleanup = () => {\n if (editor.destroy) {\n editor.destroy();\n }\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n };\n }\n\n private saveEdit(newValue: any): void {\n const cellValue = this.cell();\n if (!cellValue) return;\n \n const previousValue = cellValue.getValue();\n const wasValid = cellValue.isValid();\n const success = cellValue.saveEdit(newValue);\n \n if (success) {\n const column = cellValue.getColumnConfig();\n const cellState = cellValue.getState();\n const isValid = cellValue.isValid();\n const tableStateValue = this.tableState();\n \n if (tableStateValue) {\n tableStateValue.clearEditingCell();\n this.updateValidationState();\n }\n \n const saveEvent: CellSaveEvent = {\n cell: cellValue,\n newValue: newValue,\n previousValue: previousValue,\n rowData: cellValue.getRowData(),\n columnKey: column.key,\n rowIndex: cellValue.getRowIndex(),\n isValid: isValid,\n validationErrors: cellState.error ? [cellState.error] : undefined,\n cellState: cellState\n };\n this.cellSave.emit(saveEvent);\n \n const changeEvent: CellChangeEvent = {\n cell: cellValue,\n oldValue: previousValue,\n newValue: newValue,\n rowData: cellValue.getRowData(),\n columnKey: column.key,\n rowIndex: cellValue.getRowIndex(),\n wasValid: wasValid,\n isValid: isValid,\n cellState: cellState\n };\n this.cellChange.emit(changeEvent);\n \n this.cleanupEditor();\n }\n }\n \n private updateValidationState(): void {\n const tableStateValue = this.tableState();\n const cellValue = this.cell();\n if (!tableStateValue || !cellValue) return;\n \n const column = cellValue.getColumnConfig();\n const isValid = cellValue.isValid();\n const error = cellValue.getState().error;\n const rowIndex = cellValue.getRowIndex();\n \n if (rowIndex === undefined) return;\n \n tableStateValue.updateCellValidation(\n rowIndex,\n column.key,\n isValid,\n error\n );\n }\n \n private triggerEagerValidation(): void {\n const tableStateValue = this.tableState();\n const tableConfigValue = this.tableConfig();\n const cellValue = this.cell();\n \n if (!tableStateValue || !tableConfigValue || !cellValue) return;\n \n const validationMode = tableConfigValue.validation?.mode || 'lazy';\n if (validationMode !== 'eager') return;\n \n cellValue.validate();\n this.updateValidationState();\n }\n\n private cancelEdit(): void {\n const cellValue = this.cell();\n if (!cellValue) return;\n \n const column = cellValue.getColumnConfig();\n const cellState = cellValue.getState();\n const tableStateValue = this.tableState();\n \n if (tableStateValue) {\n tableStateValue.clearEditingCell();\n }\n \n const cancelEvent: CellCancelEvent = {\n cell: cellValue,\n value: cellValue.getValue(),\n previousValue: cellState.previousValue,\n rowData: cellValue.getRowData(),\n columnKey: column.key,\n rowIndex: cellValue.getRowIndex(),\n cellState: cellState\n };\n \n cellValue.cancelEdit();\n this.cellCancel.emit(cancelEvent);\n this.cleanupEditor();\n }\n\n private cleanupEditor(): void {\n if (this.editorCleanup) {\n this.editorCleanup();\n this.editorCleanup = undefined;\n }\n }\n}\n","<div class=\"st-cell\" \n [ngClass]=\"{\n 'editing': cell().isEditing(),\n 'dirty': cell().isDirty(),\n 'invalid': !cell().isValid(),\n 'readonly': !isEditable()\n }\"\n (click)=\"onCellClick()\" \n (dblclick)=\"onCellDoubleClick()\">\n\n <!-- Display Mode with Template Support -->\n @if (!cell().isEditing()) {\n <!-- Custom Template -->\n @if (hasCellTemplate()) {\n <ng-container *ngTemplateOutlet=\"cellTemplate(); context: templateContext()\"></ng-container>\n }\n\n <!-- Default Text Rendering -->\n @if (!hasCellTemplate()) {\n <span class=\"cell-display\">\n {{ cell().render() }}\n </span>\n }\n }\n\n <!-- Edit Mode -->\n @if (cell().isEditing()) {\n <div class=\"cell-editor\" #editorContainer>\n </div>\n }\n</div>\n","/**\n * TableConfig JSON Schema\n * Exported as TypeScript constant for use in validation service\n */\n\nexport const tableConfigSchema = {\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://ngx-smart-table.schema/table-config.json\",\n \"title\": \"Smart Table Configuration Schema\",\n \"description\": \"JSON Schema for Smart Table TableConfig\",\n \"type\": \"object\",\n \"required\": [\"columns\"],\n \"properties\": {\n \"columns\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"description\": \"Array of column definitions\",\n \"items\": {\n \"$ref\": \"#/definitions/ColumnConfig\"\n }\n },\n \"pagination\": {\n \"$ref\": \"#/definitions/PaginationConfig\"\n },\n \"sorting\": {\n \"$ref\": \"#/definitions/SortingConfig\"\n },\n \"filtering\": {\n \"$ref\": \"#/definitions/FilteringConfig\"\n },\n \"selection\": {\n \"$ref\": \"#/definitions/SelectionConfig\"\n },\n \"display\": {\n \"$ref\": \"#/definitions/DisplayConfig\"\n },\n \"initialState\": {\n \"$ref\": \"#/definitions/InitialStateConfig\"\n },\n \"features\": {\n \"$ref\": \"#/definitions/FeaturesConfig\"\n }\n },\n \"definitions\": {\n \"ColumnConfig\": {\n \"type\": \"object\",\n \"required\": [\"key\", \"header\", \"dataType\"],\n \"properties\": {\n \"key\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-zA-Z_$][a-zA-Z0-9_$]*$\",\n \"description\": \"Unique identifier for the column (must be a valid identifier)\"\n },\n \"header\": {\n \"type\": \"string\",\n \"description\": \"Display header text for the column\"\n },\n \"dataType\": {\n \"type\": \"string\",\n \"enum\": [\"string\", \"number\", \"boolean\", \"date\", \"custom\"],\n \"description\": \"Data type of the column values\"\n },\n \"editable\": {\n \"type\": \"boolean\",\n \"description\": \"Whether cells in this column are editable\"\n },\n \"editMode\": {\n \"type\": \"string\",\n \"enum\": [\"click\", \"manual\", \"none\"],\n \"description\": \"Edit mode trigger\"\n },\n \"sortable\": {\n \"type\": \"boolean\",\n \"description\": \"Whether this column is sortable\"\n },\n \"filterable\": {\n \"type\": \"boolean\",\n \"description\": \"Whether this column is filterable\"\n },\n \"hideable\": {\n \"type\": \"boolean\",\n \"description\": \"Whether this column's visibility can be toggled by users\"\n },\n \"movable\": {\n \"type\": \"boolean\",\n \"description\": \"Whether this column can be moved left/right by users\"\n },\n \"pinnable\": {\n \"type\": \"boolean\",\n \"description\": \"Whether this column can be pinned/unpinned by users\"\n },\n \"enableMenu\": {\n \"type\": \"boolean\",\n \"description\": \"Whether to show the column menu dropdown for this column\"\n },\n \"resizable\": {\n \"type\": \"boolean\",\n \"description\": \"Whether this column is resizable\"\n },\n \"width\": {\n \"oneOf\": [\n {\n \"type\": \"number\",\n \"minimum\": 1\n },\n {\n \"type\": \"string\",\n \"enum\": [\"auto\"]\n }\n ],\n \"description\": \"Column width (px, %, or 'auto')\"\n },\n \"minWidth\": {\n \"type\": \"number\",\n \"minimum\": 1,\n \"description\": \"Minimum column width (px)\"\n },\n \"maxWidth\": {\n \"type\": \"number\",\n \"minimum\": 1,\n \"description\": \"Maximum column width (px)\"\n },\n \"sticky\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"left\", \"right\"]\n },\n {\n \"type\": \"boolean\",\n \"const\": false\n }\n ],\n \"description\": \"Whether this column is sticky (left or right)\"\n },\n \"showStickyShadow\": {\n \"type\": \"boolean\",\n \"description\": \"Whether to show shadow indicator on sticky columns\"\n },\n \"alignment\": {\n \"type\": \"string\",\n \"enum\": [\"left\", \"center\", \"right\"],\n \"description\": \"Cell content horizontal alignment\"\n },\n \"verticalAlignment\": {\n \"type\": \"string\",\n \"enum\": [\"top\", \"middle\", \"bottom\"],\n \"description\": \"Cell content vertical alignment\"\n },\n \"truncate\": {\n \"type\": \"boolean\",\n \"description\": \"Whether to truncate overflowing text\"\n },\n \"tooltip\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"null\"\n }\n ],\n \"description\": \"Tooltip configuration (string or function - functions not serializable)\"\n },\n \"className\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n {\n \"type\": \"null\"\n }\n ],\n \"description\": \"CSS class name(s) for cells in this column\"\n },\n \"style\": {\n \"type\": \"object\",\n \"description\": \"Inline styles for cells in this column (object or function - functions not serializable)\"\n },\n \"visible\": {\n \"type\": \"boolean\",\n \"description\": \"Whether column is visible\"\n },\n \"pinned\": {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": [\"left\", \"right\"]\n },\n {\n \"type\": \"boolean\",\n \"const\": false\n }\n ],\n \"description\": \"Whether column is pinned (left, right, or none)\"\n },\n \"sortPriority\": {\n \"type\": \"number\",\n \"description\": \"Sort order priority (for multi-column sort)\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"description\": \"Custom metadata for column\"\n },\n \"showLoadingIndicator\": {\n \"type\": \"boolean\",\n \"description\": \"Whether cells should show loading indicator during async operations\"\n },\n \"sortDirection\": {\n \"type\": \"string\",\n \"enum\": [\"none\", \"asc\", \"desc\"],\n \"description\": \"Current sort direction (runtime state)\"\n },\n \"sortEnabled\": {\n \"type\": \"boolean\",\n \"description\": \"Whether sorting is currently active/enabled (runtime state)\"\n },\n \"filterConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"operator\": {\n \"type\": \"string\",\n \"enum\": [\"equals\", \"contains\", \"startsWith\", \"endsWith\", \"gt\", \"lt\", \"gte\", \"lte\", \"between\", \"in\"],\n \"description\": \"Filter operator\"\n },\n \"value\": {\n \"description\": \"Current filter value (any type)\"\n },\n \"enabled\": {\n \"type\": \"boolean\",\n \"description\": \"Whether filtering is currently active/enabled\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/FilterOptions\",\n \"description\": \"Custom filter options for dropdown-based filtering\"\n }\n },\n \"additionalProperties\": false,\n \"description\": \"Filter configuration for this column\"\n },\n \"stickyOffset\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Calculated offset for sticky positioning (runtime state, auto-calculated)\"\n }\n },\n \"additionalProperties\": false\n },\n \"PaginationConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"description\": \"Enable pagination\"\n },\n \"pageSize\": {\n \"type\": \"number\",\n \"minimum\": 1,\n \"description\": \"Number of items per page\"\n },\n \"pageSizeOptions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"number\",\n \"minimum\": 1\n },\n \"minItems\": 1,\n \"description\": \"Available page size options for user selection\"\n },\n \"showPagination\": {\n \"type\": \"boolean\",\n \"description\": \"Show pagination UI controls\"\n },\n \"showTopControls\": {\n \"type\": \"boolean\",\n \"description\": \"Show pagination controls at the top of the table\"\n },\n \"showBottomControls\": {\n \"type\": \"boolean\",\n \"description\": \"Show pagination controls at the bottom of the table\"\n },\n \"totalItems\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Total number of items available (for server-side pagination)\"\n }\n },\n \"additionalProperties\": false\n },\n \"SortingConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"description\": \"Enable sorting\"\n },\n \"multiColumn\": {\n \"type\": \"boolean\",\n \"description\": \"Allow sorting by multiple columns simultaneously\"\n },\n \"mode\": {\n \"type\": \"string\",\n \"enum\": [\"local\", \"server\"],\n \"description\": \"Sorting mode - local (client-side) or server (API-based)\"\n }\n },\n \"additionalProperties\": false\n },\n \"FilteringConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"description\": \"Enable filtering\"\n },\n \"mode\": {\n \"type\": \"string\",\n \"enum\": [\"local\", \"server\"],\n \"description\": \"Filtering mode - local (client-side) or server (API-based)\"\n }\n },\n \"additionalProperties\": false\n },\n \"SelectionConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"description\": \"Enable row selection\"\n },\n \"mode\": {\n \"type\": \"string\",\n \"enum\": [\"single\", \"multiple\"],\n \"description\": \"Selection mode - single row or multiple rows\"\n }\n },\n \"additionalProperties\": false\n },\n \"DisplayConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"stickyHeader\": {\n \"type\": \"boolean\",\n \"description\": \"Make table header sticky on scroll\"\n },\n \"maxHeight\": {\n \"type\": \"number\",\n \"description\": \"Maximum height of the table in pixels\"\n },\n \"virtualScroll\": {\n \"$ref\": \"#/definitions/VirtualScrollConfig\"\n }\n },\n \"additionalProperties\": false\n },\n \"InitialStateConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"page\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"description\": \"Initial page number (0-indexed)\"\n },\n \"sortBy\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"key\"],\n \"properties\": {\n \"key\": {\n \"type\": \"string\",\n \"description\": \"Column key to sort by\"\n },\n \"direction\": {\n \"type\": \"string\",\n \"enum\": [\"none\", \"asc\", \"desc\"],\n \"description\": \"Sort direction\"\n }\n },\n \"additionalProperties\": false\n },\n \"description\": \"Initial sort configuration\"\n },\n \"filters\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\"key\", \"operator\"],\n \"properties\": {\n \"key\": {\n \"type\": \"string\",\n \"description\": \"Column key to filter\"\n },\n \"operator\": {\n \"type\": \"string\",\n \"enum\": [\"equals\", \"contains\", \"startsWith\", \"endsWith\", \"gt\", \"lt\", \"gte\", \"lte\", \"between\", \"in\"],\n \"description\": \"Filter operator\"\n },\n \"value\": {\n \"description\": \"Filter value (any type)\"\n }\n },\n \"additionalProperties\": false\n },\n \"description\": \"Initial filter configuration\"\n }\n },\n \"additionalProperties\": false\n },\n \"FeaturesConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"columnManagement\": {\n \"type\": \"object\",\n \"properties\": {\n \"allowAdd\": {\n \"type\": \"boolean\",\n \"description\": \"Allow users to add new columns dynamically\",\n \"default\": false\n }\n },\n \"additionalProperties\": false,\n \"description\": \"Column management features\"\n },\n \"keyboardNavigation\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"description\": \"Enable Excel-like keyboard navigation with arrow keys\",\n \"default\": false\n }\n },\n \"additionalProperties\": false,\n \"description\": \"Keyboard navigation features\"\n }\n },\n \"additionalProperties\": false,\n \"description\": \"Features configuration for table capabilities\"\n },\n \"FilterOptions\": {\n \"type\": \"object\",\n \"required\": [\"data\", \"handler\"],\n \"properties\": {\n \"data\": {\n \"type\": \"array\",\n \"description\": \"Array of data items to display in the dropdown\",\n \"items\": {\n \"description\": \"Data item of any type\"\n }\n },\n \"handler\": {\n \"description\": \"Handler function to transform data items into {label, value} pairs. Type: (item: any) => {label: string, value: any}\"\n },\n \"multiselect\": {\n \"type\": \"boolean\",\n \"description\": \"Whether to allow multiple selections (default: false)\",\n \"default\": false\n }\n },\n \"additionalProperties\": false,\n \"description\": \"Filter options configuration for custom dropdown filters\"\n }\n },\n \"additionalProperties\": false\n} as const;\n\n","/**\n * Custom validation rules utility\n * Implements business logic validations that can't be expressed in JSON Schema\n */\n\nimport { TableConfig } from '../models/table-config.interface';\nimport { SchemaValidationError } from '../models/schema-validation.interface';\n\n/**\n * Validate custom business rules\n * @param config Table configuration\n * @returns Array of validation errors\n */\nexport function validateCustomRules(config: TableConfig): SchemaValidationError[] {\n const errors: SchemaValidationError[] = [];\n\n if (!config.columns || !Array.isArray(config.columns)) {\n return errors; // Let schema validation handle this\n }\n\n // 1. Check for duplicate column keys\n const keys = config.columns.map(col => col.key);\n const keyCounts = new Map<string, number>();\n keys.forEach((key, index) => {\n const count = keyCounts.get(key) || 0;\n keyCounts.set(key, count + 1);\n if (count > 0) {\n errors.push({\n path: `/columns/${index}/key`,\n message: `Duplicate column key: \"${key}\". Column keys must be unique.`,\n code: 'DUPLICATE_KEY',\n value: key,\n field: `columns[${index}].key`\n });\n }\n });\n\n // 2. Validate width constraints for each column\n config.columns.forEach((column, index) => {\n const prefix = `/columns/${index}`;\n \n // Width constraint: minWidth <= width <= maxWidth\n if (\n typeof column.width === 'number' &&\n column.minWidth !== undefined &&\n column.width < column.minWidth\n ) {\n errors.push({\n path: `${prefix}/width`,\n message: `Width (${column.width}) must be greater than or equal to minWidth (${column.minWidth})`,\n code: 'WIDTH_CONSTRAINT_VIOLATION',\n value: column.width,\n field: `columns[${index}].width`\n });\n }\n\n if (\n typeof column.width === 'number' &&\n column.maxWidth !== undefined &&\n column.width > column.maxWidth\n ) {\n errors.push({\n path: `${prefix}/width`,\n message: `Width (${column.width}) must be less than or equal to maxWidth (${column.maxWidth})`,\n code: 'WIDTH_CONSTRAINT_VIOLATION',\n value: column.width,\n field: `columns[${index}].width`\n });\n }\n\n // 3. Sticky columns must have defined width (not 'auto')\n if (column.sticky && (column.sticky === 'left' || column.sticky === 'right')) {\n if (column.width === undefined || column.width === 'auto') {\n errors.push({\n path: `${prefix}/width`,\n message: `Sticky columns must have a defined width (not 'auto'). Column \"${column.key}\" is sticky but has no width.`,\n code: 'STICKY_WIDTH_REQUIRED',\n value: column.width,\n field: `columns[${index}].width`\n });\n }\n }\n\n // 4. Column key format validation (should be valid identifier)\n if (column.key && !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(column.key)) {\n errors.push({\n path: `${prefix}/key`,\n message: `Column key \"${column.key}\" must be a valid identifier (letters, numbers, underscore, dollar sign, starting with letter/underscore/dollar)`,\n code: 'INVALID_KEY_FORMAT',\n value: column.key,\n field: `columns[${index}].key`\n });\n }\n });\n\n // 5. Validate pagination pageSize is in pageSizeOptions (if both provided)\n if (config.pagination?.pageSize && config.pagination?.pageSizeOptions) {\n if (!config.pagination.pageSizeOptions.includes(config.pagination.pageSize)) {\n errors.push({\n path: '/pagination/pageSize',\n message: `pageSize (${config.pagination.pageSize}) must be one of the pageSizeOptions: [${config.pagination.pageSizeOptions.join(', ')}]`,\n code: 'PAGE_SIZE_NOT_IN_OPTIONS',\n value: config.pagination.pageSize,\n field: 'pagination.pageSize'\n });\n }\n }\n\n // 6. Validate initial state sortBy keys exist in columns\n if (config.initialState?.sortBy) {\n const columnKeys = new Set(config.columns.map(col => col.key));\n config.initialState.sortBy.forEach((sort, index) => {\n if (!columnKeys.has(sort.key)) {\n errors.push({\n path: `/initialState/sortBy/${index}/key`,\n message: `Sort key \"${sort.key}\" does not exist in columns`,\n code: 'INVALID_SORT_KEY',\n value: sort.key,\n field: `initialState.sortBy[${index}].key`\n });\n }\n });\n }\n\n // 7. Validate initial state filter keys exist in columns\n if (config.initialState?.filters) {\n const columnKeys = new Set(config.columns.map(col => col.key));\n config.initialState.filters.forEach((filter, index) => {\n if (!columnKeys.has(filter.key)) {\n errors.push({\n path: `/initialState/filters/${index}/key`,\n message: `Filter key \"${filter.key}\" does not exist in columns`,\n code: 'INVALID_FILTER_KEY',\n value: filter.key,\n field: `initialState.filters[${index}].key`\n });\n }\n });\n }\n\n return errors;\n}\n\n","/**\n * Validation Logger Service\n * Automatically logs validation errors and provides functionality to download them as a log file\n */\n\nimport { Injectable } from '@angular/core';\nimport { SchemaValidationError } from '../models/schema-validation.interface';\n\n/**\n * Validation log entry interface\n */\nexport interface ValidationLogEntry {\n /**\n * ISO timestamp when validation failed\n */\n timestamp: string;\n\n /**\n * Source of validation (e.g., 'import', 'renderer', 'schema-validation')\n */\n source: string;\n\n /**\n * Array of validation errors\n */\n errors: SchemaValidationError[];\n\n /**\n * Optional context information\n */\n context?: {\n fileName?: string;\n configSnippet?: string;\n storageKey?: string;\n };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ValidationLoggerService {\n private logEntries: ValidationLogEntry[] = [];\n private downloadTimeoutId: any = null;\n private readonly DOWNLOAD_DELAY_MS = 500; // Wait 500ms after last error before downloading\n\n /**\n * Log validation errors\n * @param errors Array of validation errors\n * @param source Source of validation (e.g., 'import', 'renderer', 'schema-validation')\n * @param context Optional context information\n * @param autoDownload Whether to automatically download log file (default: true)\n */\n logValidationErrors(\n errors: SchemaValidationError[],\n source: string,\n context?: {\n fileName?: string;\n configSnippet?: string;\n storageKey?: string;\n },\n autoDownload: boolean = true\n ): void {\n if (errors.length === 0) {\n return; // Don't log if there are no errors\n }\n\n const entry: ValidationLogEntry = {\n timestamp: new Date().toISOString(),\n source: source,\n errors: errors,\n context: context\n };\n\n this.logEntries.push(entry);\n\n // Schedule automatic download after errors accumulate (debounced)\n if (autoDownload) {\n this.scheduleDownload();\n }\n }\n\n /**\n * Schedule log file download with debounce\n * This ensures we only download once after all errors are accumulated\n */\n private scheduleDownload(): void {\n // Clear any existing timeout\n if (this.downloadTimeoutId !== null) {\n clearTimeout(this.downloadTimeoutId);\n }\n\n // Schedule download after delay\n // If more errors come in before timeout fires, this will be cancelled and rescheduled\n this.downloadTimeoutId = setTimeout(() => {\n this.downloadLogFileOnError();\n this.downloadTimeoutId = null;\n }, this.DOWNLOAD_DELAY_MS);\n }\n\n /**\n * Download log file with timestamped filename\n * Called automatically when validation errors occur (after debounce delay)\n */\n private downloadLogFileOnError(): void {\n // Generate filename with timestamp to avoid overwriting\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5); // Format: 2024-01-15T10-30-45\n const filename = `smart-table-validation-errors-${timestamp}.log`;\n this.downloadLogFile(filename);\n }\n\n /**\n * Get all log entries\n * @returns Array of all log entries\n */\n getLogEntries(): ValidationLogEntry[] {\n return [...this.logEntries];\n }\n\n /**\n * Format all log entries as plain text\n * @returns Formatted log text\n */\n formatLogAsText(): string {\n if (this.logEntries.length === 0) {\n return 'No validation errors logged.\\n';\n }\n\n let logText = `Smart Table Validation Error Log\\n`;\n logText += `Generated: ${new Date().toISOString()}\\n`;\n logText += `Total Validation Failures: ${this.logEntries.length}\\n`;\n logText += `${'='.repeat(80)}\\n\\n`;\n\n this.logEntries.forEach((entry, index) => {\n logText += this.formatLogEntry(entry, index + 1);\n logText += '\\n';\n });\n\n return logText;\n }\n\n /**\n * Format a single log entry as plain text\n * @param entry Log entry to format\n * @param entryNumber Entry number (for display)\n * @returns Formatted entry text\n */\n private formatLogEntry(entry: ValidationLogEntry, entryNumber: number): string {\n let text = `[${entry.timestamp}] Validation Failed - Source: ${entry.source}\\n`;\n \n // Add context information if available\n if (entry.context) {\n if (entry.context.fileName) {\n text += `File: ${entry.context.fileName}\\n`;\n }\n if (entry.context.storageKey) {\n text += `Storage Key: ${entry.context.storageKey}\\n`;\n }\n if (entry.context.configSnippet) {\n text += `Config Snippet: ${entry.context.configSnippet}\\n`;\n }\n }\n\n text += `${'━'.repeat(80)}\\n`;\n\n // Format each error\n entry.errors.forEach((error, errorIndex) => {\n text += `Error ${errorIndex + 1}:\\n`;\n \n if (error.field) {\n text += ` Field: ${error.field}\\n`;\n }\n \n if (error.path) {\n text += ` Path: ${error.path}\\n`;\n }\n \n if (error.code) {\n text += ` Code: ${error.code}\\n`;\n }\n \n if (error.message) {\n text += ` Message: ${error.message}\\n`;\n }\n \n if (error.value !== undefined && error.value !== null) {\n const valueStr = typeof error.value === 'object' \n ? JSON.stringify(error.value, null, 2).split('\\n').map(line => ` ${line}`).join('\\n')\n : String(error.value);\n text += ` Value: ${valueStr}\\n`;\n }\n \n text += '\\n';\n });\n\n text += `${'━'.repeat(80)}\\n`;\n\n return text;\n }\n\n /**\n * Download log file\n * @param filename Optional filename (default: 'smart-table-validation-errors.log')\n */\n downloadLogFile(filename: string = 'smart-table-validation-errors.log'): void {\n const logText = this.formatLogAsText();\n const blob = new Blob([logText], { type: 'text/plain' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n /**\n * Clear all log entries\n */\n clearLog(): void {\n // Cancel any pending download\n if (this.downloadTimeoutId !== null) {\n clearTimeout(this.downloadTimeoutId);\n this.downloadTimeoutId = null;\n }\n this.logEntries = [];\n }\n\n /**\n * Get number of log entries\n * @returns Number of log entries\n */\n getLogSize(): number {\n return this.logEntries.length;\n }\n}\n\n","/**\n * JSON Schema Validation Service\n * Validates TableConfig JSON against JSON Schema using ajv\n * \n */\n\nimport { Injectable } from '@angular/core';\nimport { tableConfigSchema } from '../schemas/table-config.schema';\nimport { validateCustomRules } from './custom-validation-rules.util';\nimport { ValidationLoggerService } from './validation-logger.service';\nimport { SchemaValidationError, SchemaValidationResult } from '../models/schema-validation.interface';\nimport Ajv from 'ajv';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class JsonSchemaValidatorService {\n private ajv: any = null;\n private validateFn: any = null;\n private ajvAvailable: boolean = false;\n private initialized: boolean = false;\n\n constructor(private logger: ValidationLoggerService) {\n }\n\n /**\n * Ensure ajv is initialized (lazy initialization)\n */\n private ensureInitialized(): void {\n if (!this.initialized) {\n this.initializeAjv();\n this.initialized = true;\n }\n }\n\n /**\n * Initialize ajv validator\n */\n private initializeAjv(): void {\n try {\n // Try to load ajv - use require for compatibility with Angular build system\n // eslint-disable-next-line @typescript-eslint/no-require-imports \n this.ajv = new Ajv({\n allErrors: true,\n verbose: true,\n strict: false,\n validateSchema: false // Don't validate the schema itself\n });\n\n // Compile schema (convert const to regular object for ajv)\n const schema = JSON.parse(JSON.stringify(tableConfigSchema));\n this.validateFn = this.ajv.compile(schema);\n this.ajvAvailable = true;\n } catch (error) {\n // ajv is optional - if not installed, validation will use custom rules only\n console.warn('ajv library not found. JSON schema validation will be disabled. Install with: npm install ajv');\n this.ajvAvailable = false;\n }\n }\n\n /**\n * Validate JSON data against TableConfig schema\n * @param data JSON data to validate\n * @param includeCustomRules Whether to include custom business rule validations\n * @param enableLogging Whether to log validation errors (default: true)\n * @returns Validation result\n */\n validate(data: any, includeCustomRules: boolean = true, enableLogging: boolean = true): SchemaValidationResult {\n // Ensure ajv is initialized before validation\n this.ensureInitialized();\n \n const allErrors: SchemaValidationError[] = [];\n\n // 1. JSON Schema validation (if ajv is available)\n if (this.ajvAvailable) {\n const isValid = this.validateFn(data);\n\n if (!isValid) {\n // Convert ajv errors to our format\n const schemaErrors: SchemaValidationError[] = (this.validateFn.errors || []).map((error: any) => {\n const path = error.instancePath || error.schemaPath || '';\n const field = this.pathToFieldName(path);\n \n return {\n path: path,\n message: this.formatErrorMessage(error, field),\n code: error.keyword || 'VALIDATION_ERROR',\n value: error.data,\n field: field\n };\n });\n\n allErrors.push(...schemaErrors);\n }\n } else {\n // If ajv is not available, add a warning but continue with custom rules\n allErrors.push({\n path: '',\n message: 'JSON schema validation is not available. Please install ajv: npm install ajv',\n code: 'AJV_NOT_AVAILABLE',\n field: 'root'\n });\n }\n\n // 2. Custom business rule validation\n if (includeCustomRules && data && typeof data === 'object') {\n try {\n const customErrors = validateCustomRules(data as any);\n allErrors.push(...customErrors);\n } catch (error: any) {\n allErrors.push({\n path: '',\n message: `Custom validation failed: ${error.message}`,\n code: 'CUSTOM_VALIDATION_ERROR',\n field: 'root'\n });\n }\n }\n\n const result = {\n valid: allErrors.length === 0,\n errors: allErrors,\n ajvAvailable: this.ajvAvailable\n };\n\n // Log validation errors if validation failed and logging is enabled\n if (!result.valid && enableLogging) {\n this.logger.logValidationErrors(allErrors, 'schema-validation');\n }\n\n return result;\n }\n\n /**\n * Validate JSON string\n * @param jsonString JSON string to validate\n * @param includeCustomRules Whether to include custom business rule validations\n * @param enableLogging Whether to log validation errors (default: true)\n * @returns Validation result\n */\n validateJSONString(jsonString: string, includeCustomRules: boolean = true, enableLogging: boolean = true): SchemaValidationResult {\n try {\n const data = JSON.parse(jsonString);\n return this.validate(data, includeCustomRules, enableLogging);\n } catch (error: any) {\n const result = {\n valid: false,\n errors: [{\n path: '',\n message: `Invalid JSON: ${error.message}`,\n code: 'JSON_PARSE_ERROR',\n value: jsonString,\n field: 'root'\n }],\n ajvAvailable: this.ajvAvailable\n };\n\n // Log JSON parse errors if logging is enabled\n if (enableLogging) {\n this.logger.logValidationErrors(result.errors, 'schema-validation', {\n configSnippet: jsonString.substring(0, 200) // Include first 200 chars as context\n });\n }\n\n return result;\n }\n }\n\n /**\n * Check if ajv is available\n */\n isAvailable(): boolean {\n this.ensureInitialized();\n return this.ajvAvailable;\n }\n\n /**\n * Convert JSON path to user-friendly field name\n */\n private pathToFieldName(path: string): string {\n if (!path) return 'root';\n \n // Remove leading slash\n let field = path.replace(/^\\//, '');\n \n // Replace array indices with brackets\n field = field.replace(/\\/(\\d+)/g, '[$1]');\n \n // Replace slashes with dots\n field = field.replace(/\\//g, '.');\n \n return field || 'root';\n }\n\n /**\n * Format error message from ajv error\n */\n private formatErrorMessage(error: any, field: string): string {\n const keyword = error.keyword;\n const params = error.params || {};\n \n switch (keyword) {\n case 'required':\n return `Field '${field}' is required but missing`;\n \n case 'type':\n return `Field '${field}' must be of type ${params.type}, but got ${typeof error.data}`;\n \n case 'enum':\n return `Field '${field}' must be one of: ${params.allowedValues?.join(', ') || 'allowed values'}`;\n \n case 'pattern':\n return `Field '${field}' does not match required pattern: ${params.pattern}`;\n \n case 'minimum':\n return `Field '${field}' must be at least ${params.limit}`;\n \n case 'maximum':\n return `Field '${field}' must be at most ${params.limit}`;\n \n case 'minLength':\n return `Field '${field}' must have at least ${params.limit} items`;\n \n case 'maxLength':\n return `Field '${field}' must have at most ${params.limit} items`;\n \n case 'minItems':\n return `Array '${field}' must have at least ${params.limit} items`;\n \n case 'maxItems':\n return `Array '${field}' must have at most ${params.limit} items`;\n \n case 'additionalProperties':\n return `Field '${field}' contains unknown property: ${params.additionalProperty}`;\n \n case 'oneOf':\n return `Field '${field}' does not match any of the allowed types`;\n \n default:\n return error.message || `Field '${field}' is invalid`;\n }\n }\n}\n\n","import { Injectable } from '@angular/core';\nimport { Observable, fromEvent } from 'rxjs';\nimport { map, throttleTime } from 'rxjs/operators';\n\n/**\n * Virtual scroll state interface\n * Contains all information needed for virtual scroll calculations\n */\nexport interface VirtualScrollState {\n scrollTop: number; // Current scroll position\n viewportHeight: number; // Visible area height\n totalItems: number; // Total number of rows\n itemSize: number; // Height per row\n bufferSize: number; // Buffer rows\n startIndex: number; // First visible row index\n endIndex: number; // Last visible row index\n totalHeight: number; // Total scrollable height\n offsetY: number; // Transform offset for visible rows\n}\n\n/**\n * Virtual Scroll Service\n * Handles all virtual scroll calculations for efficient rendering of large datasets\n */\n@Injectable()\nexport class VirtualScrollService {\n /**\n * Calculate visible range based on scroll position\n * @param state Current scroll state parameters\n * @returns Complete virtual scroll state with calculated indices\n */\n calculateVisibleRange(state: {\n scrollTop: number;\n viewportHeight: number;\n totalItems: number;\n itemSize: number;\n bufferSize: number;\n }): VirtualScrollState {\n const { scrollTop, viewportHeight, totalItems, itemSize, bufferSize } = state;\n \n // Calculate indices for visible rows\n const startIndex = Math.max(0, Math.floor(scrollTop / itemSize) - bufferSize);\n const visibleCount = Math.ceil(viewportHeight / itemSize);\n const endIndex = Math.min(totalItems, startIndex + visibleCount + bufferSize * 2);\n \n // Calculate heights for spacer and transform\n const totalHeight = totalItems * itemSize;\n const offsetY = startIndex * itemSize;\n \n return {\n scrollTop,\n viewportHeight,\n totalItems,\n itemSize,\n bufferSize,\n startIndex,\n endIndex,\n totalHeight,\n offsetY\n };\n }\n \n /**\n * Create throttled scroll observable for performance\n * Throttles to 60fps (16ms) for smooth scrolling\n * @param element The scrollable element to observe\n * @returns Observable emitting scroll position\n */\n createScrollObservable(element: HTMLElement): Observable<number> {\n return fromEvent(element, 'scroll').pipe(\n map((event: Event) => (event.target as HTMLElement).scrollTop),\n throttleTime(16, undefined, { leading: true, trailing: true }) // 60fps\n );\n }\n}\n","import { Component, Input, OnInit, OnDestroy, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableState } from '../../models/table-state.class';\nimport { TableConfig } from '../../../models/table-config.interface';\nimport { PaginationState } from '../../models/table-types';\nimport { Subscription } from 'rxjs';\n\n/**\n * Pagination component that wraps nile-pagination web component\n * Handles conversion between internal 0-indexed pages and nile-pagination's 1-indexed pages\n */\n@Component({\n selector: 'st-pagination',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-pagination.component.html',\n styleUrls: ['./st-pagination.component.scss']\n})\nexport class StPaginationComponent implements OnInit, OnDestroy {\n @Input() tableState!: TableState;\n @Input() tableConfig!: TableConfig;\n @Input() position: 'top' | 'bottom' = 'bottom';\n \n paginationState: PaginationState = {\n currentPage: 0,\n pageSize: 25,\n totalItems: 0,\n totalPages: 0\n };\n \n private paginationSubscription?: Subscription;\n \n ngOnInit(): void {\n if (!this.tableState) {\n throw new Error('tableState is required for st-pagination component');\n }\n \n if (!this.tableConfig) {\n throw new Error('tableConfig is required for st-pagination component');\n }\n \n // Initialize with current state\n this.paginationState = this.tableState.getPagination();\n \n // Subscribe to pagination changes\n this.paginationSubscription = this.tableState.paginationChange$\n .subscribe(state => {\n this.paginationState = state;\n });\n }\n \n ngOnDestroy(): void {\n this.paginationSubscription?.unsubscribe();\n }\n \n /**\n * Get current page display (1-indexed for nile-pagination)\n */\n getCurrentPageDisplay(): number {\n return this.paginationState.currentPage + 1;\n }\n \n /**\n * Get variant from config\n */\n getVariant(): string {\n return this.tableConfig.pagination?.variant || 'fluid';\n }\n \n /**\n * Get page size options array for nile-pagination\n */\n getPageSizeOptions(): number[] {\n return this.tableConfig.pagination?.pageSizeOptions || [10, 25, 50, 100];\n }\n \n /**\n * Handle page change from nile-pagination\n * @param event Custom event from nile-pagination with 1-indexed page number\n */\n onPageChange(event: any): void {\n const newPage = event.detail;\n if (typeof newPage === 'number') {\n // Convert from 1-indexed to 0-indexed\n this.tableState.setPage(newPage - 1);\n }\n }\n \n /**\n * Handle page size change from nile-pagination\n * @param event Custom event from nile-pagination with new page size\n */\n onPageSizeChange(event: any): void {\n const newPageSize = event.detail;\n if (typeof newPageSize === 'number') {\n this.tableState.setPageSize(newPageSize);\n }\n }\n}\n","<nile-pagination\n [totalItems]=\"paginationState.totalItems\"\n [currentPage]=\"getCurrentPageDisplay()\"\n [pageSize]=\"paginationState.pageSize\"\n [variant]=\"getVariant()\"\n [pageSizeOptions]=\"getPageSizeOptions()\"\n (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\">\n</nile-pagination>\n","/**\n * st-header Component\n * Encapsulates column-specific logic including sorting and filtering\n */\n\nimport { Component, Input, Output, EventEmitter, OnDestroy, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnConfig } from '../../../models/column-config.interface';\nimport { TableState } from '../../models/table-state.class';\nimport { SortDirection, ColumnSortEvent, ColumnFilterEvent, ColumnMoveEvent } from '../../models/table-types';\n\n@Component({\n selector: 'st-header',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-header.component.html',\n styleUrls: ['./st-header.component.scss']\n})\nexport class StHeaderComponent implements OnDestroy {\n /**\n * Column configuration - contains all column metadata and state\n */\n @Input() column!: ColumnConfig<any>;\n\n /**\n * Column index in the visible columns array\n */\n @Input() columnIndex: number = 0;\n\n /**\n * Whether this is the first column\n */\n @Input() isFirstColumn: boolean = false;\n\n /**\n * Whether this is the last column\n */\n @Input() isLastColumn: boolean = false;\n\n /**\n * Optional TableState reference for integrated sorting/filtering\n */\n @Input() tableState?: TableState;\n\n /**\n * Whether sorting is enabled globally\n */\n @Input() enableSorting: boolean = true;\n\n /**\n * Whether filtering is enabled globally\n */\n @Input() enableFiltering: boolean = true;\n\n /**\n * Emits column sort event when sort is toggled\n */\n @Output() sortToggle = new EventEmitter<ColumnSortEvent>();\n\n /**\n * Emits filter changes (future feature)\n */\n @Output() filterChange = new EventEmitter<ColumnFilterEvent>();\n\n /**\n * Emits when column is moved left or right\n */\n @Output() columnMoved = new EventEmitter<ColumnMoveEvent>();\n\n /**\n * Emits when column menu button is clicked\n */\n @Output() menuClick = new EventEmitter<MouseEvent>();\n\n /**\n * Cleanup on destroy\n */\n ngOnDestroy(): void {\n // No cleanup needed - resize is now handled by directive\n }\n\n /**\n * Handle column menu button click\n */\n onMenuClick(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.menuClick.emit(event);\n }\n\n /**\n * Check if column menu should be shown\n */\n isMenuEnabled(): boolean {\n return this.column.enableMenu !== false;\n }\n\n /**\n * Check if column is sortable\n */\n isSortable(): boolean {\n return this.column.sortable !== false && this.enableSorting;\n }\n\n /**\n * Get current sort direction\n */\n getSortDirection(): SortDirection {\n return this.column.sortDirection || SortDirection.NONE;\n }\n\n /**\n * Check if column is currently sorted\n */\n isSorted(): boolean {\n return this.column.sortEnabled || false;\n }\n\n /**\n * Get ARIA sort attribute for accessibility\n */\n getAriaSort(): string | null {\n if (!this.isSortable()) {\n return null;\n }\n\n const dir = this.getSortDirection();\n if (dir === SortDirection.ASC) {\n return 'ascending';\n }\n if (dir === SortDirection.DESC) {\n return 'descending';\n }\n return 'none';\n }\n\n /**\n * Handle move left action\n */\n onMoveLeft(): void {\n const moveEvent: ColumnMoveEvent = {\n columnKey: this.column.key,\n direction: 'left',\n oldIndex: this.columnIndex,\n newIndex: this.columnIndex - 1,\n column: this.column\n };\n this.columnMoved.emit(moveEvent);\n }\n\n /**\n * Handle move right action\n */\n onMoveRight(): void {\n const moveEvent: ColumnMoveEvent = {\n columnKey: this.column.key,\n direction: 'right',\n oldIndex: this.columnIndex,\n newIndex: this.columnIndex + 1,\n column: this.column\n };\n this.columnMoved.emit(moveEvent);\n }\n}\n\n","<div class=\"st-header\" [class.sortable]=\"isSortable()\" [class.sorted]=\"isSorted()\" [attr.aria-sort]=\"getAriaSort()\">\n <div class=\"header-content\">\n <span class=\"header-text\">{{ column.header || column.key }}</span>\n @if (isMenuEnabled()) {\n <button class=\"column-menu-trigger\" \n (click)=\"onMenuClick($event)\"\n type=\"button\" \n aria-label=\"Column actions\">\n <nile-icon name=\"options\"></nile-icon>\n </button>\n }\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableState } from '../../models/table-state.class';\nimport { Subscription } from 'rxjs';\nimport { TableZIndex } from '../../models/z-index.enum';\n\ntype MenuView = 'main' | 'columns';\n\n@Component({\n selector: 'st-table-actions',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-table-actions.component.html',\n styleUrls: ['./st-table-actions.component.scss']\n})\nexport class StTableActionsComponent implements OnInit, OnDestroy {\n @Input() tableState!: TableState;\n @Input() allowAddColumn: boolean = false;\n \n @Output() addColumnClicked = new EventEmitter<void>();\n \n isOpen = false;\n currentView: MenuView = 'main';\n columnsVisibility: { key: string; header: string; visible: boolean; hideable: boolean }[] = [];\n \n /**\n * Dropdown positioning style\n */\n dropdownStyle: any = {};\n \n private stateSubscription?: Subscription;\n \n constructor() {}\n \n ngOnInit(): void {\n if (!this.tableState) {\n console.warn('tableState is required for st-table-actions component');\n return;\n }\n \n // Initialize with current state\n this.updateColumnsVisibility();\n \n // Subscribe to state changes to update visibility list\n this.subscribeToStateChanges();\n }\n \n ngOnDestroy(): void {\n this.stateSubscription?.unsubscribe();\n // Re-enable body scroll if component is destroyed while menu is open\n if (this.isOpen) {\n document.body.style.overflow = '';\n }\n }\n \n /**\n * Update columns visibility list from current table state\n */\n private updateColumnsVisibility(): void {\n if (this.tableState) {\n this.columnsVisibility = this.tableState.getAllColumnsVisibility();\n }\n }\n \n /**\n * Subscribe to table state changes\n */\n private subscribeToStateChanges(): void {\n if (!this.tableState) return;\n \n this.stateSubscription = this.tableState.stateChange$\n .subscribe(event => {\n if (event.type === 'column-visibility' || event.type === 'column-config') {\n this.updateColumnsVisibility();\n }\n });\n }\n \n /**\n * Toggle menu open/close\n */\n toggleMenu(event: Event): void {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.currentView = 'main';\n this.updateDropdownPosition(event as MouseEvent);\n // Disable body scroll when menu opens\n document.body.style.overflow = 'hidden';\n } else {\n // Re-enable body scroll when menu closes\n document.body.style.overflow = '';\n }\n }\n \n /**\n * Update dropdown position based on trigger button\n */\n private updateDropdownPosition(event: MouseEvent): void {\n const button = event.currentTarget as HTMLElement;\n const rect = button.getBoundingClientRect();\n \n\n const dropdownWidth = 220;\n \n let x = rect.right;\n let y = rect.bottom + 5;\n \n // // Adjust horizontal position if dropdown would overflow\n // if (x + dropdownWidth > viewportWidth) {\n // x = Math.max(10, viewportWidth - dropdownWidth - 10);\n // }\n \n // // Adjust vertical position if dropdown would overflow\n // if (y + dropdownHeight > viewportHeight) {\n // y = rect.top - dropdownHeight - 5;\n // }\n \n this.dropdownStyle = {\n position: 'absolute',\n left: `${x - dropdownWidth}px`,\n top: `${y}px`,\n 'z-index': TableZIndex.TABLE_ACTIONS_DROPDOWN\n };\n }\n \n /**\n * Close menu\n */\n closeMenu(): void {\n this.isOpen = false;\n this.currentView = 'main';\n // Re-enable body scroll when menu closes\n document.body.style.overflow = '';\n }\n \n /**\n * Handle add column action\n */\n onAddColumn(event: Event): void {\n event.stopPropagation();\n this.addColumnClicked.emit();\n this.closeMenu();\n }\n \n /**\n * Open column visibility submenu\n */\n openColumnsSubmenu(event: Event): void {\n event.stopPropagation();\n this.currentView = 'columns';\n }\n \n /**\n * Go back to main menu\n */\n backToMain(event: Event): void {\n event.stopPropagation();\n this.currentView = 'main';\n }\n \n /**\n * Toggle column visibility\n */\n onToggleColumn(columnKey: string, event: Event): void {\n event.stopPropagation();\n \n // Check if column is hideable before toggling\n const column = this.columnsVisibility.find(col => col.key === columnKey);\n if (column && column.hideable !== false) {\n if (this.tableState) {\n this.tableState.toggleColumnVisibility(columnKey);\n }\n }\n }\n \n /**\n * Check if column is visible\n */\n isColumnVisible(columnKey: string): boolean {\n if (!this.tableState) {\n return true;\n }\n const column = this.tableState.getColumns().find(col => col.key === columnKey);\n return column ? (column.visible !== false) : true;\n }\n \n /**\n * Check if column is hideable\n */\n isColumnHideable(column: { key: string; header: string; visible: boolean; hideable: boolean }): boolean {\n return column.hideable !== false; // Default to true if not set\n }\n}\n\n","<button \n class=\"table-actions-button\"\n (click)=\"toggleMenu($event)\"\n type=\"button\"\n title=\"Table Actions\"\n aria-label=\"Table actions menu\"\n [class.active]=\"isOpen\">\n <nile-icon name=\"settings\"></nile-icon>\n</button>\n\n<!-- Dropdown container with shared pattern -->\n@if (isOpen) {\n <div class=\"dropdown-container\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closeMenu()\"></div>\n \n <!-- Main Menu -->\n @if (currentView === 'main') {\n <div class=\"dropdown-menu\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n <!-- Add Column -->\n @if (allowAddColumn) {\n <nile-menu-item (click)=\"onAddColumn($event)\">\n <nile-icon slot=\"prefix\" name=\"plus\" size=\"12\"></nile-icon>\n Add Column\n </nile-menu-item>\n }\n \n <!-- Show/Hide Columns -->\n <nile-menu-item (click)=\"openColumnsSubmenu($event)\">\n <nile-icon size=\"12\" slot=\"prefix\" name=\"eye\"></nile-icon>\n Show/Hide Columns\n </nile-menu-item>\n </nile-menu>\n </div>\n }\n \n <!-- Column Visibility Submenu -->\n @if (currentView === 'columns') {\n <div class=\"dropdown-menu\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n <!-- Back button -->\n <nile-menu-item (click)=\"backToMain($event)\" class=\"back-item\">\n <nile-icon size=\"12\" slot=\"prefix\" name=\"chevron-left\"></nile-icon>\n Back\n </nile-menu-item>\n \n <nile-divider></nile-divider>\n \n <!-- Column checkboxes -->\n @for (column of columnsVisibility; track column.key) {\n <nile-menu-item \n [class.disabled]=\"!isColumnHideable(column)\"\n (click)=\"onToggleColumn(column.key, $event)\">\n <nile-checkbox \n [checked]=\"isColumnVisible(column.key)\" \n [disabled]=\"!isColumnHideable(column)\" \n [label]=\"column.header || column.key\" \n (nile-change)=\"onToggleColumn(column.key, $event)\">\n </nile-checkbox>\n </nile-menu-item>\n }\n </nile-menu>\n </div>\n }\n </div>\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, ElementRef, AfterViewInit, OnChanges, SimpleChanges, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnConfig } from '../../../models/column-config.interface';\nimport { TableState } from '../../models/table-state.class';\nimport { FilterOperator } from '../../models/table-types';\nimport { CellDataType } from '../../../models/cell-types';\n\n/**\n * Filter context for the popover component\n */\nexport interface FilterContext {\n column: ColumnConfig<any>;\n tableState?: TableState;\n columnIndex: number;\n isFirstColumn: boolean;\n isLastColumn: boolean;\n}\n\n/**\n * Filter popup component for per-column filtering\n * Uses Nile components for consistent UI\n * Designed as a shared component with context input\n */\n@Component({\n selector: 'st-column-filter',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-column-filter.component.html',\n styleUrls: ['./st-column-filter.component.scss']\n})\nexport class StColumnFilterComponent implements OnInit, AfterViewInit, OnChanges {\n @ViewChild('filterAnchor', { static: false }) filterAnchor?: ElementRef<HTMLElement>;\n \n @Input() column!: ColumnConfig<any>;\n @Input() tableState?: TableState;\n @Input() columnIndex: number = 0;\n @Input() isFirstColumn: boolean = false;\n @Input() isLastColumn: boolean = false;\n \n @Input() set isOpen(value: boolean) {\n this._isOpen = value;\n if (value) {\n // Reinitialize when opened\n this.initializeFilterState();\n this.determineInputType();\n this.setAvailableOperators();\n }\n }\n get isOpen(): boolean {\n return this._isOpen;\n }\n private _isOpen = false;\n \n @Output() closed = new EventEmitter<void>();\n @Output() filterApplied = new EventEmitter<{ operator: FilterOperator; value: any }>();\n @Output() filterCleared = new EventEmitter<void>();\n \n // Current filter state\n selectedOperator: FilterOperator = FilterOperator.CONTAINS;\n filterValue: any = '';\n selectedValues: any[] = []; // For multi-select\n \n // Available operators for the current column\n availableOperators: { value: FilterOperator; label: string }[] = [];\n \n // Input type to render\n inputType: 'text' | 'number' | 'date' | 'checkbox' | 'select' | 'multiselect' = 'text';\n \n // Dropdown options (for custom filter options)\n dropdownOptions: { label: string; value: any }[] = [];\n \n /**\n * Get filter context for external use\n */\n get context(): FilterContext {\n return {\n column: this.column,\n tableState: this.tableState,\n columnIndex: this.columnIndex,\n isFirstColumn: this.isFirstColumn,\n isLastColumn: this.isLastColumn\n };\n }\n \n /**\n * Set filter context (allows using component as context-driven)\n */\n @Input() set filterContext(context: FilterContext | null) {\n if (context) {\n this.column = context.column;\n this.tableState = context.tableState;\n this.columnIndex = context.columnIndex;\n this.isFirstColumn = context.isFirstColumn;\n this.isLastColumn = context.isLastColumn;\n }\n }\n \n ngOnInit(): void {\n this.initializeFilterState();\n this.determineInputType();\n this.setAvailableOperators();\n }\n \n ngAfterViewInit(): void {\n // Popover will be controlled via isOpen property\n }\n \n ngOnChanges(changes: SimpleChanges): void {\n // When isOpen changes, show/hide the popover\n if (changes['isOpen'] && this.filterAnchor) {\n const popover = this.filterAnchor.nativeElement.closest('nile-popover') as any;\n if (popover) {\n if (this.isOpen) {\n popover.show();\n } else {\n popover.hide();\n }\n }\n }\n }\n \n /**\n * Initialize filter state from column config\n */\n private initializeFilterState(): void {\n // Set operator from column or use default\n this.selectedOperator = this.column.filterConfig?.operator || FilterOperator.CONTAINS;\n \n // Set value from column if filter is active\n if (this.column.filterConfig?.enabled && this.column.filterConfig?.value !== undefined) {\n if (Array.isArray(this.column.filterConfig.value)) {\n this.selectedValues = [...this.column.filterConfig.value];\n } else {\n this.filterValue = this.column.filterConfig.value;\n }\n }\n }\n \n /**\n * Determine which input type to render based on priority\n */\n private determineInputType(): void {\n // Priority 1: Custom dropdown options\n if (this.hasValidFilterOptions()) {\n this.processDropdownOptions();\n this.inputType = this.column.filterConfig?.options?.multiselect ? 'multiselect' : 'select';\n return;\n }\n \n // Priority 2: Data type based\n const dataType = this.column.dataType;\n switch (dataType) {\n case CellDataType.NUMBER:\n this.inputType = 'number';\n break;\n case CellDataType.DATE:\n this.inputType = 'date';\n break;\n case CellDataType.BOOLEAN:\n this.inputType = 'checkbox';\n break;\n case CellDataType.STRING:\n case CellDataType.CUSTOM:\n default:\n this.inputType = 'text';\n break;\n }\n }\n \n /**\n * Check if column has valid filter options configuration\n */\n private hasValidFilterOptions(): boolean {\n return !!(\n this.column.filterConfig?.options &&\n this.column.filterConfig.options.data &&\n this.column.filterConfig.options.handler &&\n Array.isArray(this.column.filterConfig.options.data) &&\n typeof this.column.filterConfig.options.handler === 'function'\n );\n }\n \n /**\n * Process dropdown options using the handler\n */\n private processDropdownOptions(): void {\n if (!this.column.filterConfig?.options) return;\n \n try {\n this.dropdownOptions = this.column.filterConfig.options.data.map(item => {\n const result = this.column.filterConfig!.options!.handler(item);\n return {\n label: result.label,\n value: result.value\n };\n });\n } catch (error) {\n console.error('Error processing filter options:', error);\n this.dropdownOptions = [];\n }\n }\n \n /**\n * Set available operators based on input type\n */\n private setAvailableOperators(): void {\n switch (this.inputType) {\n case 'text':\n this.availableOperators = [\n { value: FilterOperator.EQUALS, label: 'Equals' },\n { value: FilterOperator.CONTAINS, label: 'Contains' },\n { value: FilterOperator.STARTS_WITH, label: 'Starts With' },\n { value: FilterOperator.ENDS_WITH, label: 'Ends With' }\n ];\n break;\n \n case 'number':\n case 'date':\n this.availableOperators = [\n { value: FilterOperator.EQUALS, label: 'Equals' },\n { value: FilterOperator.GT, label: this.inputType === 'date' ? 'After' : 'Greater Than (>)' },\n { value: FilterOperator.LT, label: this.inputType === 'date' ? 'Before' : 'Less Than (<)' },\n { value: FilterOperator.GTE, label: this.inputType === 'date' ? 'On or After (≥)' : 'Greater or Equal (≥)' },\n { value: FilterOperator.LTE, label: this.inputType === 'date' ? 'On or Before (≤)' : 'Less or Equal (≤)' }\n ];\n break;\n \n case 'checkbox':\n case 'select':\n this.availableOperators = [\n { value: FilterOperator.EQUALS, label: 'Equals' }\n ];\n this.selectedOperator = FilterOperator.EQUALS;\n break;\n \n case 'multiselect':\n this.availableOperators = [\n { value: FilterOperator.IN, label: 'In' }\n ];\n this.selectedOperator = FilterOperator.IN;\n break;\n \n default:\n this.availableOperators = [\n { value: FilterOperator.EQUALS, label: 'Equals' },\n { value: FilterOperator.CONTAINS, label: 'Contains' }\n ];\n break;\n }\n }\n \n /**\n * Open the filter popup\n */\n open(): void {\n this.isOpen = true;\n }\n \n /**\n * Close the filter popup\n */\n close(): void {\n this.isOpen = false;\n this.closed.emit();\n }\n \n /**\n * Handle popover hide event from nile-popover\n */\n onPopoverHide(): void {\n this.close();\n }\n \n /**\n * Handle operator change from nile-select\n */\n onOperatorChange(event: Event): void {\n const customEvent = event as CustomEvent;\n this.selectedOperator = customEvent.detail.value as FilterOperator;\n }\n \n /**\n * Handle value input from nile-input\n */\n onValueInput(event: Event): void {\n const customEvent = event as CustomEvent;\n this.filterValue = customEvent.detail.value;\n }\n \n /**\n * Handle checkbox change from nile-checkbox\n */\n onCheckboxChange(event: Event): void {\n const customEvent = event as CustomEvent;\n this.filterValue = customEvent.detail.checked;\n }\n \n /**\n * Handle select change from nile-select\n */\n onSelectChange(event: Event): void {\n const customEvent = event as CustomEvent;\n this.filterValue = customEvent.detail.value;\n }\n \n /**\n * Handle multiselect checkbox change\n */\n onMultiselectCheckboxChange(event: Event, value: any): void {\n const customEvent = event as CustomEvent;\n const checked = customEvent.detail.checked;\n \n if (checked) {\n if (!this.selectedValues.includes(value)) {\n this.selectedValues.push(value);\n }\n } else {\n const index = this.selectedValues.indexOf(value);\n if (index > -1) {\n this.selectedValues.splice(index, 1);\n }\n }\n }\n \n /**\n * Apply the filter\n */\n onApply(): void {\n if (!this.tableState) return;\n \n let value: any;\n \n // Get the value based on input type\n if (this.inputType === 'multiselect') {\n value = this.selectedValues.length > 0 ? this.selectedValues : null;\n } else if (this.inputType === 'checkbox') {\n value = this.filterValue;\n } else {\n value = this.filterValue !== '' ? this.filterValue : null;\n }\n \n // Apply filter via table state\n if (value !== null) {\n this.tableState.setFilterOnColumn(this.column.key, this.selectedOperator, value);\n this.filterApplied.emit({ operator: this.selectedOperator, value });\n } else {\n // Clear filter if no value\n this.onClear();\n return;\n }\n \n this.close();\n }\n \n /**\n * Clear the filter\n */\n onClear(): void {\n if (!this.tableState) return;\n \n // Reset local state\n this.filterValue = this.inputType === 'checkbox' ? false : '';\n this.selectedValues = [];\n \n // Clear filter via table state\n this.tableState.clearFilterOnColumn(this.column.key);\n this.filterCleared.emit();\n \n this.close();\n }\n \n /**\n * Handle multiselect change (kept for backward compatibility)\n * @deprecated Use onMultiselectCheckboxChange instead\n */\n onMultiselectChange(value: any, event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n \n if (checked) {\n if (!this.selectedValues.includes(value)) {\n this.selectedValues.push(value);\n }\n } else {\n const index = this.selectedValues.indexOf(value);\n if (index > -1) {\n this.selectedValues.splice(index, 1);\n }\n }\n }\n \n /**\n * Check if a value is selected in multiselect\n */\n isValueSelected(value: any): boolean {\n return this.selectedValues.includes(value);\n }\n \n /**\n * Get column display name\n */\n getColumnName(): string {\n return this.column.header || this.column.key;\n }\n\n /**\n * Determine if filter should align to the left (for first few columns)\n */\n shouldAlignLeft(): boolean {\n // Align left for first 2 columns to prevent clipping\n return this.columnIndex <= 1;\n }\n}\n\n","<!-- Popover content -->\n<div class=\"filter-content\">\n <!-- Operator Select -->\n @if (availableOperators.length > 1) {\n <nile-select \n label=\"Operator\"\n [value]=\"selectedOperator\"\n (nile-change)=\"onOperatorChange($event)\"\n class=\"filter-operator\">\n @for (op of availableOperators; track op.value) {\n <nile-option [value]=\"op.value\">\n {{ op.label }}\n </nile-option>\n }\n </nile-select>\n }\n \n <!-- Input Field based on type -->\n <div class=\"filter-value-section\">\n \n <!-- Text Input -->\n @if (inputType === 'text') {\n <nile-input \n type=\"text\"\n label=\"Value\"\n [value]=\"filterValue\"\n placeholder=\"Enter value...\"\n (nile-input)=\"onValueInput($event)\"\n class=\"filter-value-input\">\n </nile-input>\n }\n \n <!-- Number Input -->\n @if (inputType === 'number') {\n <nile-input \n type=\"number\"\n label=\"Value\"\n [value]=\"filterValue\"\n placeholder=\"Enter number...\"\n (nile-input)=\"onValueInput($event)\"\n class=\"filter-value-input\">\n </nile-input>\n }\n \n <!-- Date Input -->\n @if (inputType === 'date') {\n <nile-input \n type=\"date\"\n label=\"Value\"\n [value]=\"filterValue\"\n (nile-input)=\"onValueInput($event)\"\n class=\"filter-value-input\">\n </nile-input>\n }\n \n <!-- Checkbox Input -->\n @if (inputType === 'checkbox') {\n <nile-checkbox\n [checked]=\"filterValue\"\n (nile-change)=\"onCheckboxChange($event)\"\n class=\"filter-checkbox\">\n {{ filterValue ? 'True' : 'False' }}\n </nile-checkbox>\n }\n \n <!-- Single Select Dropdown -->\n @if (inputType === 'select') {\n <nile-select \n label=\"Value\"\n [value]=\"filterValue\"\n placeholder=\"-- Select --\"\n (nile-change)=\"onSelectChange($event)\"\n class=\"filter-value-select\">\n @for (option of dropdownOptions; track option.value) {\n <nile-option [value]=\"option.value\">\n {{ option.label }}\n </nile-option>\n }\n </nile-select>\n }\n \n <!-- Multi-Select with Radio Group as example (or keep checkboxes) -->\n @if (inputType === 'multiselect') {\n <div class=\"filter-multiselect\">\n <label class=\"multiselect-title\">Select Values</label>\n <div class=\"multiselect-options\">\n @for (option of dropdownOptions; track option.value) {\n <nile-checkbox\n [checked]=\"isValueSelected(option.value)\"\n [value]=\"option.value\"\n (nile-change)=\"onMultiselectCheckboxChange($event, option.value)\"\n class=\"multiselect-checkbox\">\n {{ option.label }}\n </nile-checkbox>\n }\n </div>\n @if (dropdownOptions.length === 0) {\n <div class=\"empty-state\">\n No options available\n </div>\n }\n </div>\n }\n </div>\n \n <!-- Action Buttons -->\n <div class=\"filter-actions\">\n <nile-button \n variant=\"primary\"\n size=\"small\"\n (click)=\"onApply()\">\n Apply\n </nile-button>\n <nile-button \n variant=\"default\"\n size=\"small\"\n (click)=\"onClear()\">\n Clear\n </nile-button>\n </div>\n</div>\n","import { Component, EventEmitter, Output, Input, ViewChild, OnChanges, SimpleChanges, HostListener, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnAction, ColumnActionContext, ColumnActionEvent } from '../../../models/column-action.interface';\nimport { SortDirection } from '../../models/table-types';\nimport { CellDataType } from '../../../models/cell-types';\nimport { StColumnFilterComponent } from '../st-column-filter/st-column-filter.component';\n\n@Component({\n selector: 'st-column-menu-dropdown',\n standalone: true,\n imports: [CommonModule, StColumnFilterComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-column-menu.component.html',\n styleUrls: ['./st-column-menu.component.scss'],\n})\nexport class StColumnMenuDropdownComponent implements OnChanges {\n /**\n * Whether the dropdown is open\n */\n @Input() isOpen: boolean = false;\n \n /**\n * Position of the dropdown (x, y coordinates)\n */\n @Input() position: { x: number; y: number } = { x: 0, y: 0 };\n \n /**\n * Context containing column data, index, and actions\n */\n @Input() context: ColumnActionContext | null = null;\n \n /**\n * Emitted when an action is clicked\n */\n @Output() actionClicked = new EventEmitter<ColumnActionEvent>();\n \n /**\n * Emitted when the dropdown should close\n */\n @Output() closed = new EventEmitter<void>();\n \n @ViewChild('filterPopup') filterPopup?: StColumnFilterComponent;\n \n /**\n * Visible actions (filtered by hidden property)\n */\n visibleActions: ColumnAction[] = [];\n \n /**\n * Dropdown positioning style\n */\n dropdownStyle: any = {};\n \n isFilterOpen = false;\n \n ngOnChanges(changes: SimpleChanges): void {\n if (changes['context'] || changes['isOpen']) {\n this.updateVisibleActions();\n }\n \n if (changes['position'] || changes['isOpen']) {\n this.updateDropdownPosition();\n }\n }\n \n /**\n * Update visible actions based on hidden property\n */\n private updateVisibleActions(): void {\n if (!this.context) {\n this.visibleActions = [];\n return;\n }\n \n this.visibleActions = this.context.actions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden(this.context!.column, this.context!.columnIndex);\n }\n return !action.hidden;\n });\n }\n \n /**\n * Check if an action is currently active (for checkmarks)\n */\n isActionActive(action: ColumnAction): boolean {\n if (!this.context) return false;\n \n const column = this.context.column;\n \n // Sort actions\n if (action.id === 'sort-asc') {\n return column.sortDirection === SortDirection.ASC;\n }\n if (action.id === 'sort-desc') {\n return column.sortDirection === SortDirection.DESC;\n }\n \n // Filter action\n if (action.id === 'filter') {\n return column.filterConfig?.enabled === true;\n }\n \n // Pin actions\n if (action.id === 'pin-left') {\n return column.sticky === 'left';\n }\n if (action.id === 'pin-right') {\n return column.sticky === 'right';\n }\n \n return false;\n }\n\n /**\n * Determine if divider should be shown after an action\n * Groups built-in actions: [sort group] | [filter] | [pin group] | [move group] | [custom]\n */\n shouldShowDividerAfter(action: ColumnAction, index: number, isLast: boolean): boolean {\n if (isLast || !this.visibleActions[index + 1]) return false;\n \n const currentId = action.id;\n const nextId = this.visibleActions[index + 1].id;\n \n // Divider after sort group\n if (['sort-asc', 'sort-desc', 'clear-sort'].includes(currentId) && \n !['sort-asc', 'sort-desc', 'clear-sort'].includes(nextId)) {\n return true;\n }\n \n // Divider after filter\n if (currentId === 'filter') {\n return true;\n }\n \n // Divider after pin group\n if (['pin-left', 'pin-right', 'unpin'].includes(currentId) && \n !['pin-left', 'pin-right', 'unpin'].includes(nextId)) {\n return true;\n }\n \n // Divider after move group (before custom actions)\n if (['move-left', 'move-right'].includes(currentId) && \n !['move-left', 'move-right'].includes(nextId)) {\n return true;\n }\n \n return false;\n }\n \n /**\n * Update dropdown position based on available viewport space\n */\n private updateDropdownPosition(): void {\n if (!this.isOpen) {\n this.dropdownStyle = {};\n return;\n }\n \n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const dropdownWidth = 280; // Approximate dropdown width\n const dropdownHeight = 300; // Approximate max dropdown height\n \n let { x, y } = this.position;\n \n // Adjust horizontal position if dropdown would overflow\n if (x + dropdownWidth > viewportWidth) {\n x = Math.max(10, viewportWidth - dropdownWidth - 10);\n }\n \n // Adjust vertical position if dropdown would overflow\n if (y + dropdownHeight > viewportHeight) {\n y = Math.max(10, viewportHeight - dropdownHeight - 10);\n }\n \n this.dropdownStyle = {\n position: 'fixed',\n left: `${x}px`,\n top: `${y}px`,\n 'z-index': 9999\n };\n }\n \n /**\n * Check if an action is disabled\n */\n isActionDisabled(action: ColumnAction): boolean {\n if (!this.context) return true;\n \n if (typeof action.disabled === 'function') {\n return action.disabled(this.context.column, this.context.columnIndex);\n }\n return action.disabled || false;\n }\n \n /**\n * Handle action click\n */\n onActionClick(action: ColumnAction): void {\n if (!this.context || this.isActionDisabled(action)) {\n return;\n }\n \n // Special handling for filter action - open filter popup\n if (action.id === 'filter') {\n this.isFilterOpen = true;\n return; // Don't emit or close menu\n }\n \n const event: ColumnActionEvent = {\n action,\n column: this.context.column,\n columnIndex: this.context.columnIndex\n };\n \n this.actionClicked.emit(event);\n }\n \n /**\n * Close dropdown when clicking backdrop\n */\n @HostListener('click', ['$event'])\n onBackdropClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (target.classList.contains('dropdown-backdrop')) {\n // this.closed.emit();\n }\n }\n\n onFilterClosed(): void {\n this.isFilterOpen = false;\n // Close the entire column menu when filter is closed\n this.closed.emit();\n }\n\n onFilterApplied(event: { operator: any; value: any }): void {\n console.log('Filter applied:', event);\n this.isFilterOpen = false;\n // Close the entire column menu when filter is applied\n this.closed.emit();\n }\n\n onFilterCleared(): void {\n console.log('Filter cleared');\n this.isFilterOpen = false;\n // Close the entire column menu when filter is cleared\n this.closed.emit();\n }\n\n /**\n * Determine if menu should align to the left (for first few columns)\n */\n shouldAlignLeft(): boolean {\n // Align left for first 2 columns to prevent clipping\n return (this.context?.columnIndex || 0) <= 1;\n }\n}","<!-- Dropdown container with backdrop -->\n@if (isOpen && context) {\n <div class=\"dropdown-container\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"column-menu-dropdown\" [ngStyle]=\"dropdownStyle\">\n <!-- Main menu with actions -->\n @if (!isFilterOpen) {\n <nile-menu>\n <!-- Dynamically render all visible actions -->\n @for (action of visibleActions; track action.id; let i = $index, last = $last) {\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n @if (isActionActive(action)) {\n <span class=\"checkmark\">✓</span>\n }\n @if (action.icon && !isActionActive(action)) {\n <nile-icon slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n }\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n @if (shouldShowDividerAfter(action, i, last)) {\n <nile-divider></nile-divider>\n }\n }\n \n <!-- Fallback if no actions -->\n @if (visibleActions.length === 0) {\n <nile-menu-item>\n No actions available\n </nile-menu-item>\n }\n </nile-menu>\n }\n \n <!-- Filter popup (conditionally rendered) -->\n @if (isFilterOpen && context) {\n <st-column-filter\n #filterPopup\n [column]=\"context.column\"\n [tableState]=\"context.tableState\"\n [columnIndex]=\"context.columnIndex\"\n [isFirstColumn]=\"context.isFirstColumn\"\n [isLastColumn]=\"context.isLastColumn\"\n [isOpen]=\"isFilterOpen\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterCleared)=\"onFilterCleared()\"\n (closed)=\"onFilterClosed()\">\n </st-column-filter>\n }\n </div>\n </div>\n}\n","import { Component, Input, Output, EventEmitter, HostListener, OnChanges, SimpleChanges, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RowAction, RowActionContext, RowActionEvent } from '../../../models/row-action.interface';\nimport { TableZIndex } from '../../models/z-index.enum';\n\n@Component({\n selector: 'st-row-actions-dropdown',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-row-actions-dropdown.component.html',\n styleUrls: ['./st-row-actions-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StRowActionsDropdownComponent implements OnChanges {\n /**\n * Whether the dropdown is open\n */\n @Input() isOpen: boolean = false;\n \n /**\n * Position of the dropdown (x, y coordinates)\n */\n @Input() position: { x: number; y: number } = { x: 0, y: 0 };\n \n /**\n * Context containing row data, index, and actions\n */\n @Input() context: RowActionContext | null = null;\n \n /**\n * Emitted when an action is clicked\n */\n @Output() actionClicked = new EventEmitter<RowActionEvent>();\n \n /**\n * Emitted when the dropdown should close\n */\n @Output() closed = new EventEmitter<void>();\n \n /**\n * Visible actions (filtered by hidden property)\n */\n visibleActions: RowAction[] = [];\n \n /**\n * Dropdown positioning style\n */\n dropdownStyle: any = {};\n \n ngOnChanges(changes: SimpleChanges): void {\n if (changes['context'] || changes['isOpen']) {\n this.updateVisibleActions();\n }\n \n if (changes['position'] || changes['isOpen']) {\n this.updateDropdownPosition();\n }\n }\n \n /**\n * Update visible actions based on hidden property\n */\n private updateVisibleActions(): void {\n if (!this.context) {\n this.visibleActions = [];\n return;\n }\n \n this.visibleActions = this.context.actions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden(this.context!.rowData, this.context!.rowIndex);\n }\n return !action.hidden;\n });\n }\n \n /**\n * Update dropdown position based on available viewport space\n */\n private updateDropdownPosition(): void {\n if (!this.isOpen) {\n this.dropdownStyle = {};\n return;\n }\n \n const DROPDOWN_WIDTH = 200; // Approximate width\n const DROPDOWN_HEIGHT = this.visibleActions.length * 40 + 16; // Approximate height\n \n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n \n let left = this.position.x;\n let top = this.position.y;\n \n // Check if dropdown would overflow right edge\n if (left + DROPDOWN_WIDTH > viewportWidth) {\n left = viewportWidth - DROPDOWN_WIDTH - 10;\n }\n \n // Check if dropdown would overflow bottom edge\n if (top + DROPDOWN_HEIGHT > viewportHeight) {\n // Position above the trigger\n top = this.position.y - DROPDOWN_HEIGHT;\n }\n \n // Ensure dropdown doesn't go off-screen on the left\n if (left < 10) {\n left = 10;\n }\n \n // Ensure dropdown doesn't go off-screen on the top\n if (top < 10) {\n top = 10;\n }\n \n this.dropdownStyle = {\n position: 'fixed',\n left: `${left}px`,\n top: `${top}px`,\n zIndex: TableZIndex.ROW_ACTIONS_DROPDOWN\n };\n }\n \n /**\n * Handle action click\n */\n onActionClick(action: RowAction): void {\n if (!this.context) return;\n \n // Check if action is disabled\n if (this.isActionDisabled(action)) {\n return;\n }\n \n const event: RowActionEvent = {\n action,\n rowData: this.context.rowData,\n rowIndex: this.context.rowIndex\n };\n \n this.actionClicked.emit(event);\n }\n \n /**\n * Check if an action is disabled\n */\n isActionDisabled(action: RowAction): boolean {\n if (!this.context) return true;\n \n if (typeof action.disabled === 'function') {\n return action.disabled(this.context.rowData, this.context.rowIndex);\n }\n return !!action.disabled;\n }\n \n /**\n * Handle overlay click (close dropdown)\n */\n onOverlayClick(): void {\n this.closed.emit();\n }\n \n /**\n * Handle ESC key press\n */\n @HostListener('document:keydown.escape', ['$event'])\n onEscapeKey(event: Event): void {\n if (this.isOpen) {\n event.preventDefault();\n event.stopPropagation();\n this.closed.emit();\n }\n }\n \n /**\n * Prevent dropdown click from closing\n */\n onDropdownClick(event: Event): void {\n event.stopPropagation();\n }\n}\n","@if (isOpen && context) {\n <div class=\"dropdown-container\">\n <!-- Backdrop -->\n <div class=\"dropdown-overlay\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"dropdown-menu\" [ngStyle]=\"dropdownStyle\">\n @if (isOpen) {\n <nile-menu class=\"dropdown-menu\" [style.left.px]=\"dropdownStyle.left\" [style.top.px]=\"dropdownStyle.top\">\n @for (action of visibleActions; track action.id) {\n <nile-menu-item [class.disabled]=\"isActionDisabled(action)\" (click)=\"onActionClick(action)\" class=\"action-label\">\n @if (action.icon) {\n <nile-icon size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n }\n {{ action.label }}\n </nile-menu-item>\n }\n \n @if (visibleActions.length === 0) {\n <nile-menu-item>No actions available</nile-menu-item>\n }\n </nile-menu>\n }\n </div>\n </div>\n}\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { TableState } from '../models/table-state.class';\nimport { NavigationKey, NavigationDirection } from '../../models/cell-types';\n\n/**\n * Directive to handle keyboard navigation in table cells\n */\n@Directive({\n selector: '[stKeyboardNavigation]',\n standalone: true\n})\nexport class StKeyboardNavigationDirective {\n @Input() tableState!: TableState;\n \n /**\n * When enabled, pressing arrow down at the last row will emit requestAddRow event\n */\n @Input() addRowOnNavigatePastEnd: boolean = false;\n \n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (!this.tableState.isNavigationActive()) {\n return;\n }\n \n const isEditing = this.tableState.isAnyCellEditing();\n \n // Use NavigationKey enum for type-safe key checking\n switch (event.key as NavigationKey) {\n case NavigationKey.ARROW_UP:\n case NavigationKey.ARROW_DOWN:\n case NavigationKey.ARROW_LEFT:\n case NavigationKey.ARROW_RIGHT:\n // Allow navigation when NOT editing\n if (isEditing) return;\n \n event.preventDefault();\n const direction = this.getDirection(event.key as NavigationKey);\n if (direction) {\n // Pass addRowOnNavigatePastEnd only for DOWN direction\n const addRowEnabled = direction === NavigationDirection.DOWN && this.addRowOnNavigatePastEnd;\n this.tableState.moveFocus(direction, addRowEnabled);\n }\n break;\n \n case NavigationKey.ENTER:\n // Navigate down when NOT editing (Excel-like behavior)\n if (isEditing) return; // Let cell component handle save\n \n event.preventDefault();\n this.tableState.moveFocus(NavigationDirection.DOWN, this.addRowOnNavigatePastEnd);\n break;\n \n case NavigationKey.TAB:\n // Navigate left/right when NOT editing (Excel-like behavior)\n if (isEditing) return; // Let cell component handle save\n \n event.preventDefault();\n this.tableState.moveFocus(\n event.shiftKey ? NavigationDirection.LEFT : NavigationDirection.RIGHT\n );\n break;\n }\n }\n \n /**\n * Convert navigation key to direction using enums\n */\n private getDirection(key: NavigationKey): NavigationDirection | null {\n const map: Record<NavigationKey, NavigationDirection | null> = {\n [NavigationKey.ARROW_UP]: NavigationDirection.UP,\n [NavigationKey.ARROW_DOWN]: NavigationDirection.DOWN,\n [NavigationKey.ARROW_LEFT]: NavigationDirection.LEFT,\n [NavigationKey.ARROW_RIGHT]: NavigationDirection.RIGHT,\n [NavigationKey.TAB]: null,\n [NavigationKey.ENTER]: null,\n [NavigationKey.ESCAPE]: null\n };\n return map[key];\n }\n}\n","/**\n * Column Resize Directive\n * Handles column resizing when applied to th/td elements\n */\n\nimport { Directive, ElementRef, HostListener, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { ColumnResizeEvent } from '../models/table-types';\n\n@Directive({\n selector: '[stColumnResize]',\n standalone: true\n})\nexport class StColumnResizeDirective implements OnDestroy {\n /**\n * Column configuration\n */\n @Input() column!: ColumnConfig<any>;\n\n /**\n * Emits when column is resized (on drag end)\n */\n @Output() columnResized = new EventEmitter<ColumnResizeEvent>();\n\n /**\n * Emits during column resize (while dragging) for real-time updates\n */\n @Output() columnResizing = new EventEmitter<ColumnResizeEvent>();\n\n /**\n * Resize state\n */\n private isResizing = false;\n private startX = 0;\n private startWidth = 0;\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n /**\n * Start resize on mousedown\n */\n @HostListener('mousedown', ['$event'])\n onResizeStart(event: MouseEvent): void {\n // Check if click is on the resize handle span element\n const target = event.target as HTMLElement;\n const isResizeHandle = target.classList.contains('resize-handle') || \n target.closest('.resize-handle') !== null;\n\n if (!isResizeHandle) {\n return;\n }\n\n if (this.column.resizable === false) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.isResizing = true;\n this.startX = event.pageX;\n this.startWidth = (this.column.width as number) || 100;\n\n // Attach global listeners\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n }\n\n /**\n * Track mouse movement during resize\n */\n private onResizeMove = (event: MouseEvent): void => {\n if (!this.isResizing) {\n return;\n }\n\n const deltaX = event.pageX - this.startX;\n let newWidth = this.startWidth + deltaX;\n\n // Apply constraints\n const minWidth = this.column.minWidth ?? 50;\n const maxWidth = this.column.maxWidth;\n\n newWidth = Math.max(minWidth, newWidth);\n if (maxWidth) {\n newWidth = Math.min(maxWidth, newWidth);\n }\n\n // Emit resizing event for real-time visual updates\n const resizeEvent: ColumnResizeEvent = {\n columnKey: this.column.key,\n oldWidth: this.startWidth,\n newWidth: newWidth,\n column: this.column\n };\n this.columnResizing.emit(resizeEvent);\n };\n\n /**\n * End resize on mouseup\n */\n private onResizeEnd = (): void => {\n if (!this.isResizing) {\n return;\n }\n\n this.isResizing = false;\n\n // Emit event with old and new width\n const resizeEvent: ColumnResizeEvent = {\n columnKey: this.column.key,\n oldWidth: this.startWidth,\n newWidth: (this.column.width as number)!,\n column: this.column\n };\n this.columnResized.emit(resizeEvent);\n\n // Remove global listeners\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n };\n\n /**\n * Cleanup on destroy\n */\n ngOnDestroy(): void {\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n }\n}\n\n","import { \n Component, \n OnInit, \n OnDestroy, \n OnChanges, \n SimpleChanges, \n ViewChild, \n ElementRef, \n AfterViewInit, \n HostListener, \n CUSTOM_ELEMENTS_SCHEMA,\n input,\n output,\n signal,\n computed,\n effect,\n inject,\n DestroyRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CommonModule } from '@angular/common';\nimport { ColumnConfig } from '../../../models/column-config.interface';\nimport { Cell } from '../../models/cell.class';\nimport { TableState } from '../../models/table-state.class';\nimport { TableConfig, mergeTableConfig } from '../../../models/table-config.interface';\nimport { TableStateChangeEvent, ColumnResizeEvent, ColumnAddEvent, ColumnMoveEvent, CellFocusPosition, DataChangeEvent } from '../../models/table-types';\nimport { CellChangeEvent, CellSaveEvent, CellEditEvent, CellCancelEvent, EditMode, NavigationDirection } from '../../../models/cell-types';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { map, distinctUntilChanged } from 'rxjs/operators';\nimport { JsonSchemaValidatorService } from '../../../services/json-schema-validator.service';\nimport { SchemaValidationError } from '../../../models/schema-validation.interface';\nimport { ValidationLoggerService } from '../../../services/validation-logger.service';\nimport { VirtualScrollService, VirtualScrollState } from '../../../services/virtual-scroll.service';\nimport { RowAction, RowActionContext, RowActionEvent } from '../../../models/row-action.interface';\nimport { ColumnAction, ColumnActionContext, ColumnActionEvent } from '../../../models/column-action.interface';\nimport { TableZIndex } from '../../models/z-index.enum';\nimport { SortDirection } from '../../models/table-types';\nimport { TableValidationState } from '../../models/table-validation-state.interface';\nimport { StPaginationComponent } from '../st-pagination/st-pagination.component';\nimport { StHeaderComponent } from '../st-header/st-header.component';\nimport { StCellComponent } from '../st-cell/st-cell.component';\nimport { StTableActionsComponent } from '../st-table-actions/st-table-actions.component';\nimport { StColumnMenuDropdownComponent } from '../st-column-menu/st-column-menu.component';\nimport { StRowActionsDropdownComponent } from '../st-row-actions-dropdown/st-row-actions-dropdown.component';\nimport { StKeyboardNavigationDirective } from '../../directives/st-keyboard-navigation.directive';\nimport { StColumnResizeDirective } from '../../directives/st-column-resize.directive';\n\n@Component({\n selector: 'st-table',\n standalone: true,\n imports: [\n CommonModule,\n StPaginationComponent,\n StHeaderComponent,\n StCellComponent,\n StTableActionsComponent,\n StColumnMenuDropdownComponent,\n StRowActionsDropdownComponent,\n StKeyboardNavigationDirective,\n StColumnResizeDirective\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-table.component.html',\n styleUrls: ['./st-table.component.scss']\n})\nexport class StTableComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n private destroyRef = inject(DestroyRef);\n private schemaValidator = inject(JsonSchemaValidatorService);\n private logger = inject(ValidationLoggerService);\n private virtualScrollService = inject(VirtualScrollService);\n private elementRef = inject(ElementRef<HTMLElement>);\n \n // Z-Index constants for template use\n readonly ZIndex = TableZIndex;\n \n // Signal-based inputs\n readonly tableConfig = input.required<TableConfig>();\n readonly data = input<any[] | undefined>(undefined);\n readonly data$ = input<Observable<any[]> | BehaviorSubject<any[]> | undefined>(undefined);\n readonly tableState = input<TableState | undefined>(undefined);\n readonly enableSorting = input<boolean>(true);\n readonly enableFiltering = input<boolean>(true);\n readonly validateConfig = input<boolean>(false);\n \n // Signal-based outputs\n readonly stateChange = output<TableStateChangeEvent>();\n readonly dataChange = output<DataChangeEvent>();\n readonly cellEdit = output<CellEditEvent>();\n readonly cellSave = output<CellSaveEvent>();\n readonly cellCancel = output<CellCancelEvent>();\n readonly cellChange = output<CellChangeEvent>();\n readonly columnResized = output<ColumnResizeEvent>();\n readonly columnMoved = output<ColumnMoveEvent>();\n readonly configValidationErrors = output<SchemaValidationError[]>();\n readonly columnAdded = output<ColumnAddEvent>();\n readonly rowAction = output<RowActionEvent>();\n readonly validationStateChange = output<TableValidationState>();\n readonly requestAddRow = output<{ focusColumn?: number }>();\n \n // Internal state signals\n readonly mergedConfig = signal<TableConfig | null>(null);\n readonly visibleColumns = signal<ColumnConfig<any>[]>([]);\n readonly visibleCellGrid = signal<Cell<any>[][]>([]);\n readonly showColumnModal = signal(false);\n \n // Internal data signal (stores current effective data from either data input or data$ observable)\n readonly currentData = signal<any[]>([]);\n \n // Row actions dropdown state as signals\n readonly dropdownIsOpen = signal(false);\n readonly dropdownPosition = signal({ x: 0, y: 0 });\n readonly dropdownContext = signal<RowActionContext | null>(null);\n \n // Column menu dropdown state as signals\n readonly columnMenuIsOpen = signal(false);\n readonly columnMenuPosition = signal({ x: 0, y: 0 });\n readonly columnMenuContext = signal<ColumnActionContext | null>(null);\n \n // Virtual scroll state as signal\n readonly virtualScrollState = signal<VirtualScrollState | null>(null);\n \n // Computed signals for virtual scroll\n readonly virtualScrollTotalHeight = computed(() => this.virtualScrollState()?.totalHeight ?? 0);\n readonly virtualScrollOffsetY = computed(() => this.virtualScrollState()?.offsetY ?? 0);\n readonly virtualScrollOffsetYNeg = computed(() => (this.virtualScrollState()?.offsetY ?? 0) * -1);\n \n readonly visibleRows = computed(() => {\n const state = this.virtualScrollState();\n const grid = this.visibleCellGrid();\n if (!state) return grid;\n const { startIndex, endIndex } = state;\n return grid.slice(startIndex, endIndex);\n });\n \n // Computed for dropdown state (for template compatibility)\n readonly dropdownState = computed(() => ({\n isOpen: this.dropdownIsOpen(),\n position: this.dropdownPosition(),\n context: this.dropdownContext()\n }));\n \n readonly columnMenuState = computed(() => ({\n isOpen: this.columnMenuIsOpen(),\n position: this.columnMenuPosition(),\n context: this.columnMenuContext()\n }));\n \n // Legacy observable wrappers for backward compatibility\n readonly virtualScrollTotalHeight$ = new BehaviorSubject<number>(0);\n readonly virtualScrollOffsetY$ = new BehaviorSubject<number>(0);\n readonly virtualScrollOffsetYNeg$ = new BehaviorSubject<number>(0);\n readonly visibleRows$ = new BehaviorSubject<Cell<any>[][]>([]);\n \n // Skeleton arrays\n skeletonColumns?: number[];\n skeletonRows?: number[];\n \n // Internal state (non-signal)\n private internalTableState?: TableState;\n private internalCellGrid?: Cell<any>[][];\n private stateSubscription?: Subscription;\n private focusSubscription?: Subscription;\n private validationSubscription?: Subscription;\n private dataSubscription?: Subscription;\n private requestAddRowSubscription?: Subscription;\n private internalData$: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);\n private previousData: any[] = [];\n private scrollContainer?: HTMLElement;\n private scrollSubscription?: Subscription;\n \n @ViewChild('scrollViewport', { read: ElementRef }) scrollViewport?: ElementRef<HTMLElement>;\n \n constructor() {\n // Effect to sync virtual scroll signal to observables (for template compatibility)\n effect(() => {\n const state = this.virtualScrollState();\n this.virtualScrollTotalHeight$.next(state?.totalHeight ?? 0);\n this.virtualScrollOffsetY$.next(state?.offsetY ?? 0);\n this.virtualScrollOffsetYNeg$.next((state?.offsetY ?? 0) * -1);\n this.visibleRows$.next(this.visibleRows());\n });\n }\n\n ngOnInit(): void {\n const config = this.tableConfig();\n if (!config) {\n throw new Error('tableConfig must be provided');\n }\n \n // Merge config with defaults\n const merged = mergeTableConfig(config);\n this.mergedConfig.set(merged);\n \n // Validate configuration if enabled\n if (this.validateConfig()) {\n this.validateConfiguration(merged);\n }\n \n // Create or use TableState\n const externalState = this.tableState();\n if (!externalState) {\n this.createInternalTableState();\n } else {\n this.subscribeToExternalTableState();\n }\n \n // Setup data source (sync or async)\n this.setupDataSource();\n \n // Calculate sticky offsets\n const rowNumberWidth = merged.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 28 : 0;\n this.getActiveTableState().calculateStickyOffsets(rowNumberWidth, settingsColumnWidth);\n \n // Initialize visible columns and cell grid\n this.updateVisibleData();\n \n // Initialize virtual scroll if enabled\n if (this.isVirtualScrollEnabled()) {\n this.initializeVirtualScroll();\n }\n \n // Initialize keyboard navigation if enabled\n if (this.isKeyboardNavigationEnabled()) {\n this.initializeKeyboardNavigation();\n }\n\n this.skeletonColumns = Array.from({ length: merged.tableSkeleton?.columns ?? 10 }, (_, i) => i);\n this.skeletonRows = Array.from({ length: merged.tableSkeleton?.rows ?? 10 }, (_, i) => i);\n }\n \n ngAfterViewInit(): void {\n if (this.isVirtualScrollEnabled() && this.scrollViewport) {\n this.setupVirtualScrollListener();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const config = this.tableConfig();\n \n if (changes['tableConfig'] && !changes['tableConfig'].firstChange && config) {\n const merged = mergeTableConfig(config);\n this.mergedConfig.set(merged);\n \n if (this.validateConfig()) {\n this.validateConfiguration(merged);\n }\n \n if (this.internalTableState) {\n this.internalTableState.updateColumns(merged.columns);\n }\n \n this.updateVisibleData();\n }\n \n const dataValue = this.data();\n const data$Value = this.data$();\n \n if (changes['data'] && !changes['data'].firstChange && dataValue && !data$Value) {\n this.handleSyncDataChange(changes['data'].previousValue || []);\n }\n \n if (changes['data$'] && !changes['data$'].firstChange) {\n this.setupDataSource();\n }\n \n if (changes['cellGrid'] && !changes['cellGrid'].firstChange) {\n const merged = this.mergedConfig();\n if (this.getActiveTableState() && merged) {\n const rowNumberWidth = merged.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n this.getActiveTableState().calculateStickyOffsets(rowNumberWidth, settingsColumnWidth);\n }\n this.updateVisibleData();\n }\n \n const externalState = this.tableState();\n if (changes['tableState'] && !changes['tableState'].firstChange && externalState) {\n this.stateSubscription?.unsubscribe();\n this.validationSubscription?.unsubscribe();\n this.focusSubscription?.unsubscribe();\n \n this.subscribeToExternalTableState();\n \n if (this.isKeyboardNavigationEnabled()) {\n this.initializeKeyboardNavigation();\n }\n }\n \n if ((changes['data'] || changes['cellGrid']) && !changes['data']?.firstChange) {\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState();\n if (currentState) {\n const newState = this.virtualScrollService.calculateVisibleRange({\n scrollTop: currentState.scrollTop,\n viewportHeight: this.getVirtualScrollViewportHeight(),\n totalItems: this.visibleCellGrid().length,\n itemSize: this.getVirtualScrollItemSize(),\n bufferSize: this.getVirtualScrollBufferSize()\n });\n this.virtualScrollState.set(newState);\n }\n }\n \n if (this.isKeyboardNavigationEnabled() && (changes['data'] || changes['cellGrid'])) {\n this.getActiveTableState().setDimensions(\n this.visibleCellGrid().length,\n this.visibleColumns().length\n );\n }\n }\n }\n\n private createInternalTableState(): void {\n const merged = this.mergedConfig();\n if (!merged) return;\n \n const columns = this.getActiveColumns();\n this.internalTableState = new TableState(columns, {\n pageSize: merged.pagination?.pageSize,\n initialPage: merged.initialState?.page\n });\n \n if (merged.pagination?.totalItems !== undefined) {\n this.internalTableState.setTotalItems(merged.pagination.totalItems);\n }\n \n if (merged.initialState?.sortBy) {\n merged.initialState.sortBy.forEach(sort => {\n this.internalTableState!.addSortToColumn(sort.key, sort.direction);\n });\n }\n \n if (merged.initialState?.filters) {\n merged.initialState.filters.forEach(filter => {\n this.internalTableState!.setFilterOnColumn(filter.key, filter.operator, filter.value);\n });\n }\n \n this.subscribeToInternalState();\n this.subscribeToValidationState();\n }\n \n private subscribeToValidationState() {\n if (!this.internalTableState) return;\n this.validationSubscription = this.internalTableState.tableValidationState$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(state => {\n this.validationStateChange.emit(state);\n });\n }\n\n private subscribeToInternalState() {\n if (!this.internalTableState) return;\n this.stateSubscription = this.internalTableState?.stateChange$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n this.stateChange.emit(event);\n\n if (event.type === 'column-visibility' || event.type === 'column-config') {\n this.updateVisibleData();\n }\n });\n }\n\n private subscribeToExternalTableState(): void {\n const externalState = this.tableState();\n if (!externalState) return;\n \n this.stateSubscription = externalState.stateChange$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n this.stateChange.emit(event);\n \n if (event.type === 'column-visibility' || event.type === 'column-config') {\n this.updateVisibleData();\n }\n });\n \n this.subscribeToValidationState();\n }\n \n private createCellGridFromData(): void {\n const dataValue = this.currentData();\n if (!dataValue || dataValue.length === 0) return;\n \n const columns = this.getActiveColumns();\n this.internalCellGrid = dataValue.map((rowData, rowIndex) =>\n columns.map(column => \n new Cell(column, rowData[column.key], rowData, rowIndex)\n )\n );\n }\n \n private setupDataSource(): void {\n const dataValue = this.data();\n const data$Value = this.data$();\n \n if (dataValue && data$Value) {\n console.warn('StTableComponent: Both data and data$ inputs are provided. Using data$ (Observable) and ignoring data array.');\n }\n \n this.dataSubscription?.unsubscribe();\n \n if (data$Value) {\n this.subscribeToDataChanges();\n } else if (dataValue) {\n this.previousData = [];\n this.internalData$.next(dataValue);\n this.subscribeToDataChanges();\n } else {\n this.previousData = [];\n this.internalData$.next([]);\n this.subscribeToDataChanges();\n }\n }\n \n private subscribeToDataChanges(): void {\n const data$Value = this.data$();\n const dataSource$ = data$Value || this.internalData$.asObservable();\n \n this.dataSubscription = dataSource$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(newData => {\n this.handleDataChange(newData);\n });\n }\n \n private handleDataChange(newData: any[]): void {\n const timestamp = Date.now();\n const source: 'sync' | 'async' = this.data$() ? 'async' : 'sync';\n \n this.dataChange.emit({\n previousData: this.previousData,\n currentData: newData,\n timestamp,\n source\n });\n \n // Update internal data signal\n this.currentData.set(newData);\n this.previousData = [...newData];\n \n this.createCellGridFromData();\n this.updateVisibleData();\n \n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState();\n if (currentState) {\n const newState = this.virtualScrollService.calculateVisibleRange({\n scrollTop: currentState.scrollTop,\n viewportHeight: this.getVirtualScrollViewportHeight(),\n totalItems: this.visibleCellGrid().length,\n itemSize: this.getVirtualScrollItemSize(),\n bufferSize: this.getVirtualScrollBufferSize()\n });\n this.virtualScrollState.set(newState);\n }\n }\n \n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().setDimensions(\n this.visibleCellGrid().length,\n this.visibleColumns().length\n );\n }\n }\n \n private handleSyncDataChange(previousData: any[]): void {\n this.previousData = previousData;\n const dataValue = this.data();\n this.internalData$.next(dataValue || []);\n }\n \n getActiveTableState(): TableState {\n return this.tableState() || this.internalTableState!;\n }\n \n getActiveCellGrid(): Cell<any>[][] {\n return this.internalCellGrid || [];\n }\n\n getVisibleCellGrid(): Cell<any>[][] {\n const allColumns = this.getActiveColumns();\n const visible = this.visibleColumns();\n const visibleColumnKeys = new Set(visible.map(col => col.key));\n \n const visibleIndices = allColumns\n .map((col, index) => visibleColumnKeys.has(col.key) ? index : -1)\n .filter(index => index !== -1);\n \n const fullGrid = this.getActiveCellGrid();\n return fullGrid.map(row => \n visibleIndices.map(index => row[index]).filter(cell => cell !== undefined)\n );\n }\n\n private updateVisibleCellGrid(): void {\n const fullGrid = this.getActiveCellGrid();\n \n if (!fullGrid || fullGrid.length === 0) {\n this.visibleCellGrid.set([]);\n return;\n }\n \n const keyToIndexMap = new Map<string, number>();\n fullGrid[0]?.forEach((cell, index) => {\n if (cell) {\n const columnConfig = cell.getColumnConfig();\n keyToIndexMap.set(columnConfig.key, index);\n }\n });\n \n const visible = this.visibleColumns();\n const newGrid = fullGrid.map(row => {\n return visible\n .map(col => {\n const cellIndex = keyToIndexMap.get(col.key);\n return cellIndex !== undefined ? row[cellIndex] : undefined;\n })\n .filter((cell): cell is Cell<any> => cell !== undefined);\n });\n \n this.visibleCellGrid.set(newGrid);\n }\n\n private updateVisibleColumns(): void {\n const allColumns = this.getActiveColumns();\n const visible = allColumns.filter(col => col.visible !== false);\n this.visibleColumns.set(visible);\n this.recalculateVisibleStickyOffsets(visible);\n }\n\n private updateVisibleData(): void {\n this.updateVisibleColumns();\n this.updateVisibleCellGrid();\n }\n \n getActiveColumns(): ColumnConfig<any>[] {\n const merged = this.mergedConfig();\n return merged?.columns || [];\n }\n\n getVisibleColumns(): ColumnConfig<any>[] {\n const allColumns = this.getActiveColumns();\n const visible = allColumns.filter(col => col.visible !== false);\n this.recalculateVisibleStickyOffsets(visible);\n return visible;\n }\n\n private recalculateVisibleStickyOffsets(visibleCols: ColumnConfig<any>[]): void {\n const merged = this.mergedConfig();\n let leftOffset = merged?.showRowNumber ? 30 : 0;\n visibleCols.forEach(col => {\n if (col.sticky === 'left') {\n (col as any).stickyOffset = leftOffset;\n leftOffset += (col.width as number) || 100;\n }\n });\n\n let rightOffset = 0;\n for (let i = visibleCols.length - 1; i >= 0; i--) {\n const col = visibleCols[i];\n if (col.sticky === 'right') {\n (col as any).stickyOffset = rightOffset;\n rightOffset += (col.width as number) || 100;\n }\n }\n }\n\n onCellChange(event: CellChangeEvent): void {\n this.cellChange.emit(event);\n }\n\n onColumnResizing(event: ColumnResizeEvent): void {\n const visible = this.visibleColumns();\n const column = visible.find(c => c.key === event.columnKey);\n if (column) {\n (column as any).width = event.newWidth;\n }\n }\n\n onColumnResized(event: ColumnResizeEvent): void {\n const merged = this.mergedConfig();\n if (merged) {\n const rowNumberWidth = merged.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n this.getActiveTableState().calculateStickyOffsets(rowNumberWidth, settingsColumnWidth);\n }\n this.columnResized.emit(event);\n }\n\n onColumnMoved(event: {columnKey: string, direction: 'left' | 'right'}): void {\n const columns = this.getActiveColumns();\n const currentIndex = columns.findIndex(c => c.key === event.columnKey);\n if (currentIndex === -1) return;\n \n const targetIndex = event.direction === 'left' \n ? currentIndex - 1 \n : currentIndex + 1;\n \n if (targetIndex < 0 || targetIndex >= columns.length) {\n return;\n }\n \n [columns[currentIndex], columns[targetIndex]] = \n [columns[targetIndex], columns[currentIndex]];\n \n this.getActiveTableState().updateColumns(columns);\n this.columnMoved.emit({\n columnKey: event.columnKey,\n direction: event.direction,\n oldIndex: currentIndex,\n newIndex: targetIndex,\n column: columns[currentIndex]\n });\n \n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState();\n if (currentState) {\n this.virtualScrollState.set({...currentState});\n }\n }\n }\n\n private moveColumnToEnd(columnKey: string): void {\n const columns = this.getActiveColumns();\n const currentIndex = columns.findIndex(c => c.key === columnKey);\n if (currentIndex === -1) return;\n \n const firstRightStickyIndex = columns.findIndex(c => c.sticky === 'right');\n const targetIndex = firstRightStickyIndex !== -1 ? firstRightStickyIndex : columns.length;\n \n if (currentIndex === targetIndex || currentIndex === targetIndex - 1) return;\n \n const [column] = columns.splice(currentIndex, 1);\n const adjustedTargetIndex = currentIndex < targetIndex ? targetIndex - 1 : targetIndex;\n columns.splice(adjustedTargetIndex, 0, column);\n \n this.getActiveTableState().updateColumns(columns);\n \n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState();\n if (currentState) {\n this.virtualScrollState.set({...currentState});\n }\n }\n }\n\n getStickyLeftOffset(columnKey: string): number {\n const columns = this.getActiveColumns();\n let offset = 0;\n for (const col of columns) {\n if (col.key === columnKey) break;\n if (col.sticky === 'left') {\n offset += (col.width as number) || 100;\n }\n }\n return offset;\n }\n\n getStickyRightOffset(columnKey: string): number {\n const columns = this.getActiveColumns();\n let offset = 0;\n const colIndex = columns.findIndex(c => c.key === columnKey);\n for (let i = colIndex + 1; i < columns.length; i++) {\n const col = columns[i];\n if (col.sticky === 'right') {\n offset += (col.width as number) || 100;\n }\n }\n return offset;\n }\n \n showTopPagination(): boolean {\n const merged = this.mergedConfig();\n return merged?.pagination?.enabled == true &&\n merged?.pagination?.showTopControls === true;\n }\n \n showBottomPagination(): boolean {\n const merged = this.mergedConfig();\n return merged?.pagination?.enabled == true &&\n (merged?.pagination?.showBottomControls ?? true);\n }\n \n private validateConfiguration(config: TableConfig): void {\n const result = this.schemaValidator.validate(config, true, false);\n \n if (!result.valid && result.errors.length > 0) {\n this.configValidationErrors.emit(result.errors);\n \n const configSnippet = JSON.stringify(config, null, 2).substring(0, 500);\n this.logger.logValidationErrors(result.errors, 'renderer', {\n configSnippet: configSnippet\n });\n \n console.warn('Smart Table: Configuration validation errors detected:', result.errors);\n result.errors.forEach(error => {\n console.warn(` - ${error.field || error.path}: ${error.message}`);\n });\n }\n }\n \n onAddColumnClick(): void {\n this.showColumnModal.set(true);\n }\n \n onColumnCreated(column: ColumnConfig): void {\n const columns = this.getActiveColumns();\n const addEvent: ColumnAddEvent = {\n column: column,\n index: columns.length,\n totalColumns: columns.length + 1\n };\n \n this.columnAdded.emit(addEvent);\n this.showColumnModal.set(false);\n }\n \n onModalCancelled(): void {\n this.showColumnModal.set(false);\n }\n\n isVirtualScrollEnabled(): boolean {\n const merged = this.mergedConfig();\n return merged?.display?.virtualScroll?.enabled ?? false;\n }\n \n isFirstStickyRight(columnKey: string): boolean {\n const visible = this.visibleColumns();\n const stickyRightColumns = visible.filter(col => col.sticky === 'right' && !col.key.includes('settings'));\n return stickyRightColumns.length > 0 && stickyRightColumns[0].key === columnKey;\n }\n \n getVirtualScrollItemSize(): number {\n const merged = this.mergedConfig();\n return merged?.display?.virtualScroll?.itemSize ?? 48;\n }\n \n getVirtualScrollViewportHeight(): number {\n const merged = this.mergedConfig();\n return merged?.display?.virtualScroll?.viewportHeight ?? 600;\n }\n \n getVirtualScrollBufferSize(): number {\n const merged = this.mergedConfig();\n return merged?.display?.virtualScroll?.bufferSize ?? 5;\n }\n \n private initializeVirtualScroll(): void {\n const newState = this.virtualScrollService.calculateVisibleRange({\n scrollTop: 0,\n viewportHeight: this.getVirtualScrollViewportHeight(),\n totalItems: this.visibleCellGrid().length,\n itemSize: this.getVirtualScrollItemSize(),\n bufferSize: this.getVirtualScrollBufferSize()\n });\n \n this.virtualScrollState.set(newState);\n }\n \n private setupVirtualScrollListener(): void {\n if (!this.scrollViewport) return;\n \n const element = this.scrollViewport.nativeElement;\n this.scrollContainer = element;\n \n this.scrollSubscription = this.virtualScrollService\n .createScrollObservable(element)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(scrollTop => this.onVirtualScroll(scrollTop));\n }\n \n private onVirtualScroll(scrollTop: number): void {\n const newState = this.virtualScrollService.calculateVisibleRange({\n scrollTop,\n viewportHeight: this.getVirtualScrollViewportHeight(),\n totalItems: this.visibleCellGrid().length,\n itemSize: this.getVirtualScrollItemSize(),\n bufferSize: this.getVirtualScrollBufferSize()\n });\n \n this.virtualScrollState.set(newState);\n }\n \n getAbsoluteRowIndex(relativeIndex: number): number {\n const currentState = this.virtualScrollState();\n if (!currentState) return relativeIndex;\n return currentState.startIndex + relativeIndex;\n }\n \n trackByRowIndex = (index: number, row: Cell<any>[]): number => {\n return this.getAbsoluteRowIndex(index);\n }\n \n scrollToRow(index: number): void {\n if (!this.scrollContainer || !this.isVirtualScrollEnabled()) return;\n \n const scrollTop = index * this.getVirtualScrollItemSize();\n this.scrollContainer.scrollTop = scrollTop;\n }\n \n hasRowActions(): boolean {\n const merged = this.mergedConfig();\n return !!(merged?.features?.rowManagement?.actions && \n merged.features.rowManagement.actions.length > 0);\n }\n \n getRowActions(): RowAction[] {\n const merged = this.mergedConfig();\n return merged?.features?.rowManagement?.actions || [];\n }\n \n getRowData(rowIndex: number): any {\n const cellGrid = this.getActiveCellGrid();\n if (!cellGrid || rowIndex < 0 || rowIndex >= cellGrid.length) {\n return null;\n }\n \n const row = cellGrid[rowIndex];\n if (!row || row.length === 0) {\n return null;\n }\n \n return row[0]?.getRowData() || null;\n }\n \n openRowActionsDropdown(event: MouseEvent, rowData: any, rowIndex: number): void {\n event.preventDefault();\n event.stopPropagation();\n \n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n \n const position = {\n x: rect.left,\n y: rect.bottom + 4\n };\n \n const context: RowActionContext = {\n rowData,\n rowIndex,\n actions: this.getRowActions()\n };\n \n this.dropdownIsOpen.set(true);\n this.dropdownPosition.set(position);\n this.dropdownContext.set(context);\n \n document.body.style.overflow = 'hidden';\n \n if (this.isVirtualScrollEnabled() && this.scrollContainer) {\n const scrollListener = () => {\n this.closeRowActionsDropdown();\n this.scrollContainer?.removeEventListener('scroll', scrollListener);\n };\n this.scrollContainer.addEventListener('scroll', scrollListener, { once: true });\n }\n }\n \n closeRowActionsDropdown(): void {\n this.dropdownIsOpen.set(false);\n this.dropdownPosition.set({ x: 0, y: 0 });\n this.dropdownContext.set(null);\n \n document.body.style.overflow = '';\n }\n \n onRowActionClicked(event: RowActionEvent): void {\n if (event.action.action) {\n event.action.action(event.rowData, event.rowIndex);\n }\n \n this.rowAction.emit(event);\n this.closeRowActionsDropdown();\n }\n\n openColumnMenu(event: MouseEvent, column: ColumnConfig<any>, columnIndex: number, isFirst: boolean, isLast: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n const position = {\n x: rect.left,\n y: rect.bottom + 4\n };\n\n const context: ColumnActionContext = {\n column,\n columnIndex,\n isFirstColumn: isFirst,\n isLastColumn: isLast,\n tableState: this.getActiveTableState(),\n actions: this.getColumnActions(column, columnIndex, isFirst, isLast)\n };\n\n this.columnMenuIsOpen.set(true);\n this.columnMenuPosition.set(position);\n this.columnMenuContext.set(context);\n\n document.body.style.overflow = 'hidden';\n\n if (this.isVirtualScrollEnabled() && this.scrollContainer) {\n const scrollListener = () => {\n this.closeColumnMenu();\n this.scrollContainer?.removeEventListener('scroll', scrollListener);\n };\n this.scrollContainer.addEventListener('scroll', scrollListener, { once: true });\n }\n }\n\n closeColumnMenu(): void {\n this.columnMenuIsOpen.set(false);\n this.columnMenuPosition.set({ x: 0, y: 0 });\n this.columnMenuContext.set(null);\n\n document.body.style.overflow = '';\n }\n\n onColumnActionClicked(event: ColumnActionEvent): void {\n if (event.action.action) {\n event.action.action(event.column, event.columnIndex);\n }\n\n if (event.action.id === 'filter') {\n return;\n }\n\n this.closeColumnMenu();\n }\n\n private getColumnActions(\n column: ColumnConfig<any>, \n columnIndex: number, \n isFirst: boolean, \n isLast: boolean\n ): ColumnAction[] {\n const actions: ColumnAction[] = [];\n \n const includeBuiltIn = column.includeBuiltInActions ?? true;\n if (includeBuiltIn) {\n actions.push(...this.getBuiltInColumnActions(column, columnIndex, isFirst, isLast));\n }\n \n if (column.columnActions && column.columnActions.length > 0) {\n actions.push(...column.columnActions);\n }\n \n return actions;\n }\n\n private getBuiltInColumnActions(\n column: ColumnConfig<any>,\n columnIndex: number,\n isFirst: boolean,\n isLast: boolean\n ): ColumnAction[] {\n const tableState = this.getActiveTableState();\n const actions: ColumnAction[] = [];\n\n if (column.sortable !== false) {\n actions.push({\n id: 'sort-asc',\n label: this.getSortLabel(column, 'asc'),\n icon: '↑',\n action: (col) => {\n tableState.addSortToColumn(col.key, SortDirection.ASC);\n }\n });\n }\n\n if (column.sortable !== false) {\n actions.push({\n id: 'sort-desc',\n label: this.getSortLabel(column, 'desc'),\n icon: '↓',\n action: (col) => {\n tableState.addSortToColumn(col.key, SortDirection.DESC);\n }\n });\n }\n\n if (column.sortable !== false && column.sortDirection && column.sortDirection !== SortDirection.NONE) {\n actions.push({\n id: 'clear-sort',\n label: 'Clear Sort',\n icon: '✕',\n action: (col) => {\n tableState.addSortToColumn(col.key, SortDirection.NONE);\n }\n });\n }\n\n if (column.filterable !== false) {\n actions.push({\n id: 'filter',\n label: 'Filter',\n icon: '⚑',\n action: () => {\n }\n });\n }\n\n if (column.pinnable !== false && column.sticky !== 'left' && column.sticky !== 'right') {\n actions.push({\n id: 'pin-left',\n label: 'Pin Left',\n icon: '📌',\n action: (col) => {\n tableState.setStickyColumn(col.key, 'left');\n }\n });\n }\n\n if (column.pinnable !== false && column.sticky !== 'left' && column.sticky !== 'right') {\n actions.push({\n id: 'pin-right',\n label: 'Pin Right',\n icon: '📌',\n action: (col) => {\n this.moveColumnToEnd(col.key);\n tableState.setStickyColumn(col.key, 'right');\n }\n });\n }\n\n if (column.pinnable !== false && (column.sticky === 'left' || column.sticky === 'right')) {\n actions.push({\n id: 'unpin',\n label: 'Unpin',\n icon: '📍',\n action: (col) => {\n tableState.setStickyColumn(col.key, false);\n }\n });\n }\n\n if (!isFirst && column.movable !== false && !column.sticky) {\n actions.push({\n id: 'move-left',\n label: 'Move Left',\n icon: '←',\n action: (col) => {\n this.onColumnMoved({\n columnKey: col.key,\n direction: 'left'\n });\n }\n });\n }\n\n if (!isLast && column.movable !== false && !column.sticky) {\n actions.push({\n id: 'move-right',\n label: 'Move Right',\n icon: '→',\n action: (col) => {\n this.onColumnMoved({\n columnKey: col.key,\n direction: 'right'\n });\n }\n });\n }\n\n return actions;\n }\n\n private getSortLabel(column: ColumnConfig<any>, direction: 'asc' | 'desc'): string {\n const dataType = column.dataType;\n\n if (dataType === 'number') {\n return direction === 'asc' ? 'Sort 0→9' : 'Sort 9→0';\n } else if (dataType === 'date') {\n return direction === 'asc' ? 'Sort Oldest First' : 'Sort Newest First';\n } else {\n return direction === 'asc' ? 'Sort A→Z' : 'Sort Z→A';\n }\n }\n\n private initializeKeyboardNavigation(): void {\n const tableState = this.getActiveTableState();\n \n tableState.setDimensions(\n this.visibleCellGrid().length,\n this.visibleColumns().length\n );\n \n this.focusSubscription = tableState.focusedCellPosition$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(position => {\n this.updateCellFocusStates(position);\n });\n \n this.requestAddRowSubscription = tableState.requestAddRow$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n this.requestAddRow.emit(event);\n });\n \n const grid = this.visibleCellGrid();\n const cols = this.visibleColumns();\n if (grid.length > 0 && cols.length > 0) {\n setTimeout(() => {\n tableState.focusCell(0, 0);\n }, 0);\n }\n }\n \n private updateCellFocusStates(position: CellFocusPosition | null): void {\n const grid = this.visibleCellGrid();\n if (!grid) return;\n \n for (let rowIndex = 0; rowIndex < grid.length; rowIndex++) {\n const row = grid[rowIndex];\n for (let colIndex = 0; colIndex < row.length; colIndex++) {\n const cell = row[colIndex];\n if (!cell) continue;\n \n const shouldFocus = position && \n position.rowIndex === rowIndex && \n position.columnIndex === colIndex;\n \n if (shouldFocus) {\n cell.focus();\n this.focusTdElement(rowIndex, colIndex);\n } else {\n cell.blur();\n }\n }\n }\n }\n \n private focusTdElement(rowIndex: number, colIndex: number): void {\n setTimeout(() => {\n const editingPosition = this.getActiveTableState().getEditingPosition();\n if (editingPosition && \n editingPosition.rowIndex === rowIndex && \n editingPosition.columnIndex === colIndex) {\n return;\n }\n \n const absoluteRowIndex = this.getAbsoluteRowIndex(rowIndex);\n const hostElement = this.elementRef?.nativeElement;\n if (!hostElement) return;\n \n const tableContainer = hostElement.querySelector('.st-table') as HTMLElement | null;\n if (tableContainer && typeof tableContainer.focus === 'function') {\n tableContainer.focus({ preventScroll: true });\n }\n \n const tr = hostElement.querySelector(`tr[data-row-index=\"${absoluteRowIndex}\"]`);\n if (tr) {\n const cells = tr.querySelectorAll('td:not(.settings-column):not(.row-number-cell)');\n const targetCell = cells[colIndex] as HTMLElement | undefined;\n if (targetCell && typeof targetCell.focus === 'function') {\n targetCell.focus({ preventScroll: true });\n this.scrollCellIntoView(targetCell, colIndex);\n }\n }\n }, 0);\n }\n\n private scrollCellIntoView(cell: HTMLElement, colIndex: number): void {\n const scrollContainer = this.getScrollContainerElement();\n if (!scrollContainer) return;\n\n const cellRect = cell.getBoundingClientRect();\n const containerRect = scrollContainer.getBoundingClientRect();\n\n const { leftStickyWidth, rightStickyWidth } = this.calculateStickyWidths();\n\n const visibleLeft = containerRect.left + leftStickyWidth;\n const visibleRight = containerRect.right - rightStickyWidth;\n const visibleTop = containerRect.top;\n const visibleBottom = containerRect.bottom;\n\n const cols = this.visibleColumns();\n const column = cols[colIndex];\n if (column?.sticky) {\n if (cellRect.top < visibleTop) {\n scrollContainer.scrollTop -= (visibleTop - cellRect.top);\n } else if (cellRect.bottom > visibleBottom) {\n scrollContainer.scrollTop += (cellRect.bottom - visibleBottom);\n }\n return;\n }\n\n const isCellFullyVisibleHorizontally = cellRect.left >= visibleLeft && cellRect.right <= visibleRight;\n \n if (!isCellFullyVisibleHorizontally) {\n if (cellRect.left < visibleLeft) {\n scrollContainer.scrollLeft -= (visibleLeft - cellRect.left);\n } else if (cellRect.right > visibleRight) {\n scrollContainer.scrollLeft += (cellRect.right - visibleRight);\n }\n }\n\n if (cellRect.top < visibleTop) {\n scrollContainer.scrollTop -= (visibleTop - cellRect.top);\n } else if (cellRect.bottom > visibleBottom) {\n scrollContainer.scrollTop += (cellRect.bottom - visibleBottom);\n }\n }\n\n public scrollToRowAndFocus(rowIndex: number, focusFirstCell: boolean = false): void {\n setTimeout(() => {\n const hostElement = this.elementRef?.nativeElement;\n if (!hostElement) return;\n \n const rows = hostElement.querySelectorAll('tbody tr');\n const targetRow = rows[rowIndex] as HTMLElement;\n \n if (targetRow) {\n targetRow.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n \n if (focusFirstCell) {\n const cells = targetRow.querySelectorAll('td:not(.settings-column):not(.row-number-cell)');\n const firstCell = cells[0] as HTMLElement;\n if (firstCell && typeof firstCell.focus === 'function') {\n setTimeout(() => {\n firstCell.focus();\n const externalState = this.tableState();\n if (externalState) {\n externalState.focusCell(rowIndex, 0);\n }\n }, 100);\n }\n }\n }\n }, 0);\n }\n\n public scrollToLastRow(focusFirstCell: boolean = true): void {\n const dataValue = this.data();\n const rowCount = dataValue?.length || 0;\n if (rowCount > 0) {\n this.scrollToRowAndFocus(rowCount - 1, focusFirstCell);\n }\n }\n\n private getScrollContainerElement(): HTMLElement | null {\n if (this.scrollContainer) {\n return this.scrollContainer;\n }\n if (this.isVirtualScrollEnabled() && this.scrollViewport?.nativeElement) {\n this.scrollContainer = this.scrollViewport.nativeElement;\n return this.scrollContainer;\n }\n const hostElement = this.elementRef?.nativeElement;\n if (hostElement) {\n const tableContainer = hostElement.querySelector('.st-table') as HTMLElement | null;\n if (tableContainer) {\n this.scrollContainer = tableContainer;\n }\n }\n return this.scrollContainer || null;\n }\n\n private calculateStickyWidths(): { leftStickyWidth: number; rightStickyWidth: number } {\n let leftStickyWidth = 0;\n let rightStickyWidth = 0;\n const merged = this.mergedConfig();\n\n if (merged?.showRowNumber) {\n leftStickyWidth += 30;\n }\n\n const cols = this.visibleColumns();\n for (const col of cols) {\n if (col.sticky === 'left') {\n leftStickyWidth += (col.width as number) || 100;\n } else if (col.sticky === 'right') {\n rightStickyWidth += (col.width as number) || 100;\n }\n }\n\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n rightStickyWidth += settingsColumnWidth;\n\n return { leftStickyWidth, rightStickyWidth };\n }\n \n onCellClick(rowIndex: number, columnIndex: number): void {\n if (!this.isKeyboardNavigationEnabled()) return;\n this.getActiveTableState().focusCell(rowIndex, columnIndex);\n }\n \n onCellEdit(event: CellEditEvent): void {\n this.cellEdit.emit(event);\n \n if (this.isKeyboardNavigationEnabled()) {\n const rowIndex = event.cell.getRowIndex();\n const columnKey = event.columnKey;\n const cols = this.visibleColumns();\n const columnIndex = cols.findIndex(col => col.key === columnKey);\n \n if (rowIndex !== undefined && columnIndex >= 0) {\n this.getActiveTableState().setEditingCell(rowIndex, columnIndex);\n }\n }\n }\n \n onCellSave(event: CellSaveEvent): void {\n this.cellSave.emit(event);\n \n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n }\n }\n \n onCellCancel(event: CellCancelEvent): void {\n this.cellCancel.emit(event);\n \n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n }\n }\n \n onCellSaveAndNavigate(event: {event: KeyboardEvent, direction: NavigationDirection}): void {\n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n setTimeout(() => {\n this.getActiveTableState().moveFocus(event.direction);\n }, 0);\n }\n }\n \n onTableContainerFocus(event: FocusEvent): void {\n if (!this.isKeyboardNavigationEnabled()) return;\n \n const tableState = this.getActiveTableState();\n const currentFocus = tableState.getFocusedPosition();\n \n const grid = this.visibleCellGrid();\n const cols = this.visibleColumns();\n if (!currentFocus && grid.length > 0 && cols.length > 0) {\n tableState.focusCell(0, 0);\n }\n }\n \n isKeyboardNavigationEnabled(): boolean {\n const merged = this.mergedConfig();\n return merged?.features?.keyboardNavigation?.enabled ?? false;\n }\n \n getEditModeForCells(): EditMode {\n if (this.isKeyboardNavigationEnabled()) {\n return EditMode.ENTER;\n }\n return EditMode.CLICK;\n }\n \n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isKeyboardNavigationEnabled()) return;\n \n const target = event.target as HTMLElement;\n const tableElement = target.closest('.st-table');\n const portalElement = target.closest('.nile-select-portal-append');\n \n const composedPath = event.composedPath?.() || [];\n const isInsideNileElement = composedPath.some((el: EventTarget) => {\n if (el instanceof HTMLElement) {\n const tagName = el.tagName?.toLowerCase();\n return tagName?.startsWith('nile-') || \n el.classList?.contains('nile-select-portal-append');\n }\n return false;\n });\n \n if (!tableElement && !portalElement && !isInsideNileElement) {\n this.getActiveTableState().clearFocus();\n this.getActiveTableState().clearEditingCell();\n }\n }\n\n ngOnDestroy(): void {\n this.stateSubscription?.unsubscribe();\n this.scrollSubscription?.unsubscribe();\n this.focusSubscription?.unsubscribe();\n this.validationSubscription?.unsubscribe();\n this.dataSubscription?.unsubscribe();\n this.requestAddRowSubscription?.unsubscribe();\n this.virtualScrollTotalHeight$.complete();\n this.virtualScrollOffsetY$.complete();\n this.virtualScrollOffsetYNeg$.complete();\n this.visibleRows$.complete();\n this.internalData$.complete();\n }\n}\n","<!-- Top pagination controls -->\n@if (showTopPagination() && !(mergedConfig()?.tableSkeleton?.enabled | async)) {\n <st-pagination \n [tableState]=\"getActiveTableState()\"\n [tableConfig]=\"mergedConfig()!\"\n position=\"top\">\n </st-pagination>\n}\n\n@if (!(mergedConfig()?.tableSkeleton?.enabled | async)) {\n <div class=\"st-table\"\n [ngClass]=\"{\n 'virtual-scroll-enabled': isVirtualScrollEnabled(),\n 'keyboard-navigation-enabled': isKeyboardNavigationEnabled()\n }\"\n [ngStyle]=\"{\n 'max-height.px': !isVirtualScrollEnabled() ? mergedConfig()?.display?.maxHeight : null\n }\"\n stKeyboardNavigation\n [tableState]=\"getActiveTableState()\"\n [addRowOnNavigatePastEnd]=\"mergedConfig()?.features?.keyboardNavigation?.addRowOnNavigatePastEnd || false\"\n [attr.tabindex]=\"isKeyboardNavigationEnabled() ? 0 : -1\"\n (focus)=\"onTableContainerFocus($event)\"\n [attr.title]=\"isKeyboardNavigationEnabled() ? 'Click a cell or press Tab to start keyboard navigation' : null\">\n <!-- Unified Table Actions Menu -->\n\n <!-- Virtual scroll viewport wrapper -->\n @if (isVirtualScrollEnabled()) {\n <div class=\"st-scroll-viewport\" #scrollViewport\n [ngStyle]=\"{ 'height.px': getVirtualScrollViewportHeight() }\">\n\n <!-- Spacer to create scrollable area -->\n <div class=\"st-scroll-spacer\" [ngStyle]=\"{ 'height.px': virtualScrollTotalHeight() }\">\n </div>\n\n <!-- Table positioner with transform (instead of tbody) -->\n <div class=\"st-table-positioner\" [ngStyle]=\"{ transform: 'translateY(' + virtualScrollOffsetY() + 'px)' }\">\n <!-- Table with only visible rows -->\n <ng-container *ngTemplateOutlet=\"tableTemplate; context: { \n mode: 'virtual',\n theadStyle: { top: virtualScrollOffsetYNeg() + 'px' }\n }\"></ng-container>\n </div>\n </div>\n }\n \n <!-- Standard table (when virtual scroll disabled) -->\n @if (!isVirtualScrollEnabled()) {\n <ng-container *ngTemplateOutlet=\"tableTemplate; context: { \n mode: 'standard',\n theadStyle: null\n }\"></ng-container>\n }\n\n <!-- Shared Column Menu Dropdown -->\n <st-column-menu-dropdown \n [isOpen]=\"columnMenuState().isOpen\"\n [position]=\"columnMenuState().position\"\n [context]=\"columnMenuState().context\"\n (actionClicked)=\"onColumnActionClicked($event)\"\n (closed)=\"closeColumnMenu()\">\n </st-column-menu-dropdown>\n </div>\n}\n\n@if (mergedConfig()?.tableSkeleton?.enabled | async) {\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\n}\n\n<!-- Shared Row Actions Dropdown -->\n<st-row-actions-dropdown [isOpen]=\"dropdownState().isOpen\" [position]=\"dropdownState().position\"\n [context]=\"dropdownState().context\" (actionClicked)=\"onRowActionClicked($event)\" (closed)=\"closeRowActionsDropdown()\">\n</st-row-actions-dropdown>\n\n\n<!-- Bottom pagination controls -->\n@if (showBottomPagination() && !(mergedConfig()?.tableSkeleton?.enabled | async)) {\n <st-pagination \n [tableState]=\"getActiveTableState()\"\n [tableConfig]=\"mergedConfig()!\"\n position=\"bottom\">\n</st-pagination>\n}\n\n\n<!-- ========================================== -->\n<!-- REUSABLE TABLE TEMPLATE -->\n<!-- ========================================== -->\n<ng-template #tableTemplate let-mode=\"mode\" let-theadStyle=\"theadStyle\">\n <table class=\"st-table-element\">\n <!-- TABLE HEADER -->\n <thead [ngClass]=\"{ 'sticky': mergedConfig()?.display?.stickyHeader }\" [ngStyle]=\"theadStyle\">\n <tr>\n <!-- Row Number Header -->\n @if (mergedConfig()?.showRowNumber) {\n <th class=\"row-number-header header-cell sticky-left\"\n [ngStyle]=\"{\n position: 'sticky',\n 'left.px': 0,\n 'z-index': ZIndex.STICKY_HEADER_CELL,\n 'width.px': 30\n }\">\n #\n </th>\n }\n <!-- Column Headers -->\n @for (column of visibleColumns(); track column.key; let colIndex = $index, isFirst = $first, isLast = $last) {\n <th \n [ngClass]=\"{\n 'header-cell': mode === 'standard',\n 'sticky-left': column.sticky === 'left',\n 'sticky-right': column.sticky === 'right',\n 'sticky-right-first': column.sticky === 'right' && isFirstStickyRight(column.key),\n 'resizable': column.resizable !== false\n }\"\n [ngStyle]=\"{\n position: column.sticky ? 'sticky' : null,\n 'left.px': column.sticky === 'left' ? (column.stickyOffset || 0) : null,\n 'right.px': column.sticky === 'right' ? (column.stickyOffset || 0) : null,\n 'z-index': column.sticky ? ZIndex.STICKY_HEADER_CELL : null,\n 'width.px': column.width\n }\">\n \n <st-header \n [column]=\"column\"\n [columnIndex]=\"colIndex\"\n [isFirstColumn]=\"isFirst\"\n [isLastColumn]=\"isLast\"\n [tableState]=\"getActiveTableState()\"\n [enableSorting]=\"mergedConfig()?.sorting?.enabled ?? enableSorting()\"\n [enableFiltering]=\"mergedConfig()?.filtering?.enabled ?? enableFiltering()\"\n (columnMoved)=\"onColumnMoved($event)\"\n (menuClick)=\"openColumnMenu($event, column, colIndex, isFirst, isLast)\">\n </st-header>\n\n @if (column.resizable !== false) {\n <div \n class=\"resize-handle\" \n stColumnResize\n [column]=\"column\"\n (columnResizing)=\"onColumnResizing($event)\"\n (columnResized)=\"onColumnResized($event)\">\n </div>\n }\n </th>\n }\n \n <!-- Settings Column Header -->\n <th \n class=\"settings-column sticky-right\"\n [ngClass]=\"{ 'header-cell': mode === 'standard' }\"\n [ngStyle]=\"{ 'z-index': ZIndex.STICKY_HEADER_CELL }\">\n <div [ngClass]=\"{ 'flex-center': mode === 'virtual', 'header-content': mode === 'standard' }\">\n <st-table-actions \n [tableState]=\"getActiveTableState()\"\n [allowAddColumn]=\"mergedConfig()?.features?.columnManagement?.allowAdd || false\"\n (addColumnClicked)=\"onAddColumnClick()\">\n </st-table-actions>\n </div>\n </th>\n </tr>\n </thead>\n\n <!-- TABLE BODY -->\n <tbody>\n <!-- Virtual Scroll Rows -->\n @if (mode === 'virtual') {\n @for (row of visibleRows(); track trackByRowIndex($index, row); let relativeIndex = $index) {\n <tr [attr.data-row-index]=\"getAbsoluteRowIndex(relativeIndex)\">\n <!-- Row Number Cell -->\n @if (mergedConfig()?.showRowNumber) {\n <td class=\"row-number-cell\" \n [ngClass]=\"{ 'sticky-left': 'left' }\"\n [ngStyle]=\"{\n 'width.px': 30,\n position: 'sticky',\n 'left.px': 0,\n 'z-index': ZIndex.STICKY_BODY_CELL,\n 'height.px': mode === 'virtual' ? getVirtualScrollItemSize() : null\n }\">\n {{getAbsoluteRowIndex(relativeIndex) + 1}}\n </td>\n }\n <ng-container *ngTemplateOutlet=\"bodyCellTemplate; context: { \n row: row,\n rowIndex: getAbsoluteRowIndex(relativeIndex),\n mode: 'virtual',\n relativeIndex: relativeIndex\n }\"></ng-container>\n </tr>\n }\n }\n\n <!-- Standard Rows -->\n @if (mode === 'standard') {\n @for (row of visibleCellGrid(); track $index; let rowIndex = $index) {\n <tr [attr.data-row-index]=\"rowIndex\">\n <!-- Row Number Cell -->\n @if (mergedConfig()?.showRowNumber) {\n <td class=\"row-number-cell\" \n [ngClass]=\"{ 'sticky-left': 'left' }\"\n [ngStyle]=\"{\n 'width.px': 30,\n position: 'sticky',\n 'left.px': 0,\n 'z-index': ZIndex.STICKY_BODY_CELL,\n 'height.px': mode === 'virtual' ? getVirtualScrollItemSize() : null\n }\">\n {{rowIndex + 1}}\n </td>\n }\n <ng-container *ngTemplateOutlet=\"bodyCellTemplate; context: { \n row: row,\n rowIndex: rowIndex,\n mode: 'standard'\n }\"></ng-container>\n </tr>\n }\n }\n </tbody>\n </table>\n</ng-template>\n\n<!-- ========================================== -->\n<!-- REUSABLE BODY CELL TEMPLATE -->\n<!-- ========================================== -->\n<ng-template #bodyCellTemplate let-row=\"row\" let-rowIndex=\"rowIndex\" let-mode=\"mode\" let-relativeIndex=\"relativeIndex\">\n <!-- Data Cells -->\n @for (cell of row; track $index; let colIndex = $index) {\n <td \n [ngClass]=\"{\n 'sticky-left': visibleColumns()[colIndex]?.sticky === 'left',\n 'sticky-right': visibleColumns()[colIndex]?.sticky === 'right',\n 'sticky-right-first': visibleColumns()[colIndex]?.sticky === 'right' && visibleColumns()[colIndex]?.key && isFirstStickyRight(visibleColumns()[colIndex].key),\n 'align-center': visibleColumns()[colIndex]?.alignment === 'center',\n 'align-right': visibleColumns()[colIndex]?.alignment === 'right',\n 'cell-focused': cell.isFocused()\n }\"\n [ngStyle]=\"{\n position: visibleColumns()[colIndex]?.sticky ? 'sticky' : null,\n 'left.px': visibleColumns()[colIndex]?.sticky === 'left' ? (visibleColumns()[colIndex]?.stickyOffset || 0) : null,\n 'right.px': visibleColumns()[colIndex]?.sticky === 'right' ? (visibleColumns()[colIndex]?.stickyOffset || 0) : null,\n 'z-index': visibleColumns()[colIndex]?.sticky ? ZIndex.STICKY_BODY_CELL : null,\n 'width.px': visibleColumns()[colIndex]?.width,\n 'height.px': mode === 'virtual' ? getVirtualScrollItemSize() : null\n }\"\n (click)=\"isKeyboardNavigationEnabled() ? onCellClick(rowIndex, colIndex) : null\">\n \n <!-- Virtual Scroll Cell -->\n @if (mode === 'virtual') {\n <st-cell \n [cell]=\"cell\" \n [attr.tabindex]=\"cell.isFocused() ? 0 : -1\" \n [editMode]=\"getEditModeForCells()\"\n [tableState]=\"getActiveTableState()\"\n [tableConfig]=\"mergedConfig()!\"\n [columnIndex]=\"colIndex\"\n (cellEdit)=\"onCellEdit($event)\" \n (cellSave)=\"onCellSave($event)\"\n (cellSaveAndNavigate)=\"onCellSaveAndNavigate($event)\" \n (cellCancel)=\"onCellCancel($event)\"\n (cellChange)=\"cellChange.emit($event)\">\n </st-cell>\n }\n\n <!-- Standard Cell -->\n @if (mode === 'standard') {\n <st-cell \n [cell]=\"cell\" \n [attr.tabindex]=\"cell.isFocused() ? 0 : -1\"\n [tableState]=\"getActiveTableState()\"\n [tableConfig]=\"mergedConfig()!\"\n [columnIndex]=\"colIndex\"\n (cellSave)=\"onCellSave($event)\"\n (cellChange)=\"cellChange.emit($event)\">\n </st-cell>\n }\n </td>\n }\n \n <!-- Row Actions Cell -->\n <td class=\"settings-column\"\n [ngClass]=\"{\n 'has-actions': hasRowActions()\n }\"\n [ngStyle]=\"{\n position: hasRowActions() ? 'sticky' : null,\n 'right.px': hasRowActions() ? 0 : null,\n 'z-index': hasRowActions() ? ZIndex.STICKY_BODY_CELL : null\n }\">\n @if (hasRowActions()) {\n <button \n class=\"settings-trigger\"\n (click)=\"openRowActionsDropdown($event, getRowData(rowIndex), rowIndex)\"\n type=\"button\" \n aria-label=\"Row actions\">\n ⋯\n </button>\n }\n </td>\n</ng-template>\n\n<ng-template #skeletonLoader>\n @if (mergedConfig()?.tableSkeleton?.enabled | async) {\n <div class=\"list-row\">\n @for (i of skeletonColumns; track $index) {\n <div class=\"list-content\">\n @for (j of skeletonRows; track $index) {\n <nile-skeleton-loader variant=\"text\" width=\"90%\" height=\"18\"></nile-skeleton-loader>\n }\n </div>\n }\n </div>\n }\n</ng-template>\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, OnDestroy, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableState } from '../../models/table-state.class';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'st-column-visibility',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-column-visibility.component.html',\n styleUrls: ['./st-column-visibility.component.scss']\n})\nexport class StColumnVisibilityComponent implements OnInit, OnChanges, OnDestroy {\n @Input() tableState!: TableState;\n \n isOpen = false;\n columnsVisibility: { key: string; header: string; visible: boolean; hideable: boolean }[] = [];\n \n private stateSubscription?: Subscription;\n \n constructor() {}\n \n ngOnInit(): void {\n if (!this.tableState) {\n console.warn('tableState is required for st-column-visibility component');\n return;\n }\n \n // Initialize with current state\n this.updateColumnsVisibility();\n \n // Subscribe to state changes to update visibility list\n this.subscribeToStateChanges();\n }\n \n ngOnChanges(changes: SimpleChanges): void {\n // Handle tableState changes (when columns are added/removed)\n if (changes['tableState'] && !changes['tableState'].firstChange) {\n // Unsubscribe from old state\n this.stateSubscription?.unsubscribe();\n \n // Update columns visibility with new state\n if (this.tableState) {\n this.updateColumnsVisibility();\n \n // Re-subscribe to new state changes\n this.subscribeToStateChanges();\n }\n }\n }\n \n /**\n * Update columns visibility list from current table state\n */\n private updateColumnsVisibility(): void {\n if (this.tableState) {\n this.columnsVisibility = this.tableState.getAllColumnsVisibility();\n }\n }\n \n /**\n * Subscribe to table state changes\n */\n private subscribeToStateChanges(): void {\n if (!this.tableState) return;\n \n this.stateSubscription = this.tableState.stateChange$\n .subscribe(event => {\n if (event.type === 'column-visibility' || event.type === 'column-config') {\n this.updateColumnsVisibility();\n }\n });\n }\n \n ngOnDestroy(): void {\n this.stateSubscription?.unsubscribe();\n }\n \n toggleMenu(event: Event): void {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n }\n \n closeMenu(): void { \n this.isOpen = false; \n }\n\n getColumnsVisibility(): { key: string; header: string; visible: boolean; hideable: boolean }[] {\n return this.columnsVisibility;\n }\n\n isColumnHideable(column: { key: string; header: string; visible: boolean; hideable: boolean }): boolean {\n return column.hideable !== false; // Default to true if not set\n }\n\n onToggleColumn(columnKey: string, event: Event): void {\n event.stopPropagation();\n \n // Check if column is hideable before toggling (defensive check)\n const column = this.columnsVisibility.find(col => col.key === columnKey);\n if (column && !this.isColumnHideable(column)) {\n return;\n }\n \n if (this.tableState) {\n this.tableState.toggleColumnVisibility(columnKey);\n }\n }\n\n isColumnVisible(columnKey: string): boolean {\n if (!this.tableState) {\n return true;\n }\n const column = this.tableState.getColumns().find(col => col.key === columnKey);\n return column ? (column.visible !== false) : true;\n }\n}\n\n","<div class=\"st-column-visibility\" (clickOutside)=\"closeMenu()\">\n <button class=\"visibility-trigger\" \n (click)=\"toggleMenu($event)\" \n title=\"Show/Hide Columns\"\n type=\"button\"\n [class.active]=\"isOpen\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 2H14V14H2V2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 2V14M8 2V14M11 2V14\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n \n @if (isOpen) {\n <div class=\"visibility-dropdown\">\n <div class=\"dropdown-header\">Show/Hide Columns</div>\n <div class=\"dropdown-content\">\n @for (column of getColumnsVisibility(); track column.key) {\n <label class=\"column-item\"\n [class.checked]=\"column.visible\"\n [class.disabled]=\"column.hideable === false\">\n <input type=\"checkbox\" \n [checked]=\"column.visible\"\n [disabled]=\"column.hideable === false\"\n [title]=\"column.hideable === false ? 'This column cannot be hidden' : ''\"\n (change)=\"onToggleColumn(column.key, $event)\">\n <span class=\"column-label\">{{ column.header }}</span>\n </label>\n }\n </div>\n </div>\n }\n</div>\n","import { Component, Input, Output, EventEmitter, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'st-add-column-button',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-add-column-button.component.html',\n styleUrls: ['./st-add-column-button.component.scss']\n})\nexport class StAddColumnButtonComponent {\n @Input() enabled: boolean = false;\n @Output() addColumnClicked = new EventEmitter<void>();\n\n onClick(event: Event): void {\n event.stopPropagation();\n this.addColumnClicked.emit();\n }\n}\n\n","@if (enabled) {\n <button \n class=\"st-add-column-button\"\n (click)=\"onClick($event)\"\n type=\"button\"\n title=\"Add Column\"\n aria-label=\"Add new column\">\n <svg class=\"st-add-column-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 5V19M5 12H19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n}\n","/**\n * Column Editor Component\n * Form-based column configuration\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';\nimport { ColumnConfig } from '../../../models/column-config.interface';\nimport { CellDataType, CellAlignment, CellVerticalAlignment, EditMode } from '../../../models/cell-types';\n\n@Component({\n selector: 'st-column-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './column-editor.component.html',\n styleUrls: ['./column-editor.component.scss']\n})\nexport class ColumnEditorComponent implements OnInit, OnChanges {\n @Input() column!: ColumnConfig;\n @Input() columnIndex!: number;\n\n @Output() columnUpdated = new EventEmitter<Partial<ColumnConfig>>();\n @Output() cancel = new EventEmitter<void>();\n\n form!: FormGroup;\n\n readonly dataTypes = [\n { value: CellDataType.STRING, label: 'Text' },\n { value: CellDataType.NUMBER, label: 'Number' },\n { value: CellDataType.DATE, label: 'Date' },\n { value: CellDataType.BOOLEAN, label: 'Boolean' },\n { value: CellDataType.CUSTOM, label: 'Custom' }\n ];\n\n readonly alignments = [\n { value: CellAlignment.LEFT, label: 'Left' },\n { value: CellAlignment.CENTER, label: 'Center' },\n { value: CellAlignment.RIGHT, label: 'Right' }\n ];\n\n readonly verticalAlignments = [\n { value: CellVerticalAlignment.TOP, label: 'Top' },\n { value: CellVerticalAlignment.MIDDLE, label: 'Middle' },\n { value: CellVerticalAlignment.BOTTOM, label: 'Bottom' }\n ];\n\n readonly editModes = [\n { value: EditMode.CLICK, label: 'Click' },\n { value: EditMode.MANUAL, label: 'Manual' },\n { value: EditMode.NONE, label: 'None' }\n ];\n\n readonly stickyOptions = [\n { value: false, label: 'None' },\n { value: 'left', label: 'Left' },\n { value: 'right', label: 'Right' }\n ];\n\n constructor(private fb: FormBuilder) {}\n\n ngOnInit(): void {\n this.buildForm();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['column'] && !changes['column'].firstChange && this.form) {\n this.updateForm();\n }\n }\n\n /**\n * Build the reactive form\n */\n private buildForm(): void {\n this.form = this.fb.group({\n // Basic properties\n key: [this.column.key, [Validators.required, Validators.pattern(/^[a-zA-Z_$][a-zA-Z0-9_$]*$/)]],\n header: [this.column.header || ''],\n dataType: [this.column.dataType || CellDataType.STRING],\n\n // Feature flags\n editable: [this.column.editable !== false],\n sortable: [this.column.sortable !== false],\n filterable: [this.column.filterable !== false],\n resizable: [this.column.resizable !== false],\n hideable: [this.column.hideable !== false],\n movable: [this.column.movable !== false],\n pinnable: [this.column.pinnable !== false],\n enableMenu: [this.column.enableMenu !== false],\n\n // Layout\n width: [this.column.width || ''],\n minWidth: [this.column.minWidth || ''],\n maxWidth: [this.column.maxWidth || ''],\n sticky: [this.column.sticky || false],\n alignment: [this.column.alignment || CellAlignment.LEFT],\n verticalAlignment: [this.column.verticalAlignment || CellVerticalAlignment.MIDDLE],\n\n // Edit mode\n editMode: [this.column.editMode || EditMode.CLICK],\n\n // Display\n visible: [this.column.visible !== false],\n truncate: [this.column.truncate || false]\n });\n\n // Subscribe to hideable changes to enforce visible=true when hideable=false\n this.form.get('hideable')?.valueChanges.subscribe(hideable => {\n if (!hideable) {\n this.form.get('visible')?.setValue(true, { emitEvent: false });\n }\n });\n\n // Update form when column changes\n this.updateForm();\n }\n\n /**\n * Update form values from column\n */\n private updateForm(): void {\n if (!this.form || !this.column) return;\n\n this.form.patchValue({\n key: this.column.key,\n header: this.column.header || '',\n dataType: this.column.dataType || CellDataType.STRING,\n editable: this.column.editable !== false,\n sortable: this.column.sortable !== false,\n filterable: this.column.filterable !== false,\n resizable: this.column.resizable !== false,\n hideable: this.column.hideable !== false,\n movable: this.column.movable !== false,\n pinnable: this.column.pinnable !== false,\n enableMenu: this.column.enableMenu !== false,\n width: this.column.width || '',\n minWidth: this.column.minWidth || '',\n maxWidth: this.column.maxWidth || '',\n sticky: this.column.sticky || false,\n alignment: this.column.alignment || CellAlignment.LEFT,\n verticalAlignment: this.column.verticalAlignment || CellVerticalAlignment.MIDDLE,\n editMode: this.column.editMode || EditMode.CLICK,\n visible: this.column.visible !== false,\n truncate: this.column.truncate || false\n }, { emitEvent: false });\n }\n\n /**\n * Handle form submission\n */\n onSave(): void {\n if (this.form.valid) {\n const formValue = this.form.value;\n const updates: Partial<ColumnConfig> = {\n key: formValue.key,\n header: formValue.header || undefined,\n dataType: formValue.dataType,\n editable: formValue.editable,\n sortable: formValue.sortable,\n filterable: formValue.filterable,\n resizable: formValue.resizable,\n hideable: formValue.hideable,\n movable: formValue.movable,\n pinnable: formValue.pinnable,\n enableMenu: formValue.enableMenu,\n width: formValue.width || undefined,\n minWidth: formValue.minWidth || undefined,\n maxWidth: formValue.maxWidth || undefined,\n sticky: formValue.sticky || undefined,\n alignment: formValue.alignment,\n verticalAlignment: formValue.verticalAlignment,\n editMode: formValue.editMode,\n visible: formValue.visible,\n truncate: formValue.truncate\n };\n\n // Convert empty strings to undefined\n Object.keys(updates).forEach(key => {\n const value = (updates as any)[key];\n if (value === '' || value === null) {\n (updates as any)[key] = undefined;\n }\n });\n\n this.columnUpdated.emit(updates);\n } else {\n // Mark all fields as touched to show validation errors\n Object.keys(this.form.controls).forEach(key => {\n this.form.get(key)?.markAsTouched();\n });\n }\n }\n\n /**\n * Handle cancel\n */\n onCancel(): void {\n this.cancel.emit();\n }\n\n /**\n * Get form control error message\n */\n getErrorMessage(controlName: string): string {\n const control = this.form.get(controlName);\n if (control?.hasError('required')) {\n return 'This field is required';\n }\n if (control?.hasError('pattern')) {\n return 'Invalid format';\n }\n return '';\n }\n\n /**\n * Check if form control has error\n */\n hasError(controlName: string): boolean {\n const control = this.form.get(controlName);\n return !!(control && control.invalid && (control.dirty || control.touched));\n }\n}\n\n","<div class=\"column-editor\">\n <div class=\"editor-header\">\n <h3>Column Editor</h3>\n <div class=\"editor-actions\">\n <button class=\"btn btn-secondary\" (click)=\"onCancel()\">Cancel</button>\n <button class=\"btn btn-primary\" (click)=\"onSave()\">Save</button>\n </div>\n </div>\n\n <form [formGroup]=\"form\" class=\"editor-form\">\n <!-- Basic Properties -->\n <div class=\"form-section\">\n <h4>Basic Properties</h4>\n <div class=\"form-group\">\n <label for=\"key\">Key *</label>\n <input\n id=\"key\"\n type=\"text\"\n formControlName=\"key\"\n class=\"form-control\"\n [class.error]=\"hasError('key')\"\n placeholder=\"columnKey\">\n @if (hasError('key')) {\n <span class=\"error-message\">\n {{ getErrorMessage('key') }}\n </span>\n }\n </div>\n\n <div class=\"form-group\">\n <label for=\"header\">Header</label>\n <input\n id=\"header\"\n type=\"text\"\n formControlName=\"header\"\n class=\"form-control\"\n placeholder=\"Column Header\">\n </div>\n\n <div class=\"form-group\">\n <label for=\"dataType\">Data Type</label>\n <select id=\"dataType\" formControlName=\"dataType\" class=\"form-control\">\n @for (type of dataTypes; track type.value) {\n <option [value]=\"type.value\">\n {{ type.label }}\n </option>\n }\n </select>\n </div>\n </div>\n\n <!-- Features -->\n <div class=\"form-section\">\n <h4>Features</h4>\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"editable\">\n <span>Editable</span>\n </label>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"sortable\">\n <span>Sortable</span>\n </label>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"filterable\">\n <span>Filterable</span>\n </label>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"resizable\">\n <span>Resizable</span>\n </label>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"hideable\">\n <span>Hideable</span>\n </label>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"movable\">\n <span>Movable</span>\n </label>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"pinnable\">\n <span>Pinnable</span>\n </label>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enableMenu\">\n <span>Enable Menu</span>\n </label>\n </div>\n </div>\n\n <!-- Layout -->\n <div class=\"form-section\">\n <h4>Layout</h4>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"width\">Width</label>\n <input\n id=\"width\"\n type=\"text\"\n formControlName=\"width\"\n class=\"form-control\"\n placeholder=\"150 or 'auto'\">\n </div>\n <div class=\"form-group\">\n <label for=\"minWidth\">Min Width</label>\n <input\n id=\"minWidth\"\n type=\"number\"\n formControlName=\"minWidth\"\n class=\"form-control\"\n placeholder=\"50\">\n </div>\n <div class=\"form-group\">\n <label for=\"maxWidth\">Max Width</label>\n <input\n id=\"maxWidth\"\n type=\"number\"\n formControlName=\"maxWidth\"\n class=\"form-control\"\n placeholder=\"500\">\n </div>\n </div>\n\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label for=\"sticky\">Sticky</label>\n <select id=\"sticky\" formControlName=\"sticky\" class=\"form-control\">\n @for (option of stickyOptions; track option.value) {\n <option [value]=\"option.value\">\n {{ option.label }}\n </option>\n }\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"alignment\">Alignment</label>\n <select id=\"alignment\" formControlName=\"alignment\" class=\"form-control\">\n @for (align of alignments; track align.value) {\n <option [value]=\"align.value\">\n {{ align.label }}\n </option>\n }\n </select>\n </div>\n <div class=\"form-group\">\n <label for=\"verticalAlignment\">Vertical Alignment</label>\n <select id=\"verticalAlignment\" formControlName=\"verticalAlignment\" class=\"form-control\">\n @for (align of verticalAlignments; track align.value) {\n <option [value]=\"align.value\">\n {{ align.label }}\n </option>\n }\n </select>\n </div>\n </div>\n </div>\n\n <!-- Edit Mode -->\n <div class=\"form-section\">\n <h4>Edit Mode</h4>\n <div class=\"form-group\">\n <label for=\"editMode\">Edit Trigger</label>\n <select id=\"editMode\" formControlName=\"editMode\" class=\"form-control\">\n @for (mode of editModes; track mode.value) {\n <option [value]=\"mode.value\">\n {{ mode.label }}\n </option>\n }\n </select>\n </div>\n </div>\n\n <!-- Display -->\n <div class=\"form-section\">\n <h4>Display</h4>\n <div class=\"checkbox-group\">\n <label class=\"checkbox-label\" [class.disabled]=\"!form.get('hideable')?.value\">\n <input type=\"checkbox\" \n formControlName=\"visible\"\n [disabled]=\"!form.get('hideable')?.value\"\n [title]=\"!form.get('hideable')?.value ? 'Column visibility cannot be changed when hideable is disabled' : ''\">\n <span>Visible</span>\n </label>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"truncate\">\n <span>Truncate Text</span>\n </label>\n </div>\n </div>\n </form>\n</div>\n","import { Component, Output, EventEmitter, OnInit, OnDestroy, ViewChild, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnConfig } from '../../../models/column-config.interface';\nimport { CellDataType } from '../../../models/cell-types';\nimport { ColumnConfigFactory } from '../../../factories/column-config.factory';\nimport { ColumnEditorComponent } from '../../../builder/components/column-editor/column-editor.component';\n\n@Component({\n selector: 'st-column-editor-modal',\n standalone: true,\n imports: [CommonModule, ColumnEditorComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-column-editor-modal.component.html',\n styleUrls: ['./st-column-editor-modal.component.scss']\n})\nexport class StColumnEditorModalComponent implements OnInit, OnDestroy {\n @Output() columnCreated = new EventEmitter<ColumnConfig>();\n @Output() cancelled = new EventEmitter<void>();\n \n @ViewChild(ColumnEditorComponent) columnEditor!: ColumnEditorComponent;\n \n newColumn!: ColumnConfig;\n columnIndex: number = -1;\n \n ngOnInit(): void {\n // Create a default column that will be edited\n this.newColumn = this.createDefaultColumn();\n }\n \n ngOnDestroy(): void {\n // Cleanup if needed\n }\n \n /**\n * Create a default column configuration\n */\n private createDefaultColumn(): ColumnConfig {\n return ColumnConfigFactory.text('newColumn', {\n header: 'New Column',\n editable: true,\n sortable: true,\n filterable: true,\n resizable: true,\n hideable: true,\n visible: true\n });\n }\n \n /**\n * Trigger save from external button\n */\n onSave(): void {\n // Call the column editor's save method\n if (this.columnEditor) {\n this.columnEditor.onSave();\n }\n }\n \n /**\n * Handle column updates from the editor\n */\n onColumnUpdated(updates: Partial<ColumnConfig>): void {\n // Merge updates into the new column\n this.newColumn = { ...this.newColumn, ...updates };\n \n // Use ColumnConfigFactory to create proper column based on data type\n let finalColumn: ColumnConfig;\n const key = updates.key || this.newColumn.key;\n const dataType = updates.dataType || this.newColumn.dataType;\n \n switch (dataType) {\n case CellDataType.NUMBER:\n finalColumn = ColumnConfigFactory.number(key, this.newColumn);\n break;\n case CellDataType.DATE:\n finalColumn = ColumnConfigFactory.date(key, this.newColumn);\n break;\n case CellDataType.BOOLEAN:\n finalColumn = ColumnConfigFactory.boolean(key, this.newColumn);\n break;\n default:\n finalColumn = ColumnConfigFactory.text(key, this.newColumn);\n }\n \n // Emit the created column\n this.columnCreated.emit(finalColumn);\n }\n \n /**\n * Handle cancel from the editor\n */\n onCancel(): void {\n this.cancelled.emit();\n }\n \n /**\n * Handle backdrop click to close modal\n */\n onBackdropClick(event: Event): void {\n if (event.target === event.currentTarget) {\n this.cancelled.emit();\n }\n }\n \n /**\n * Prevent event propagation from modal content\n */\n onModalContentClick(event: Event): void {\n event.stopPropagation();\n }\n}\n","<div class=\"modal-backdrop\" (click)=\"onBackdropClick($event)\">\n <div class=\"modal-content\" (click)=\"onModalContentClick($event)\">\n <div class=\"modal-header\">\n <h2>Add New Column</h2>\n <button class=\"close-button\" (click)=\"onCancel()\" type=\"button\" aria-label=\"Close\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n <div class=\"modal-body\">\n <!-- Now using the shared st-column-editor component from SharedTableComponentsModule -->\n <st-column-editor\n [column]=\"newColumn\"\n [columnIndex]=\"columnIndex\"\n (columnUpdated)=\"onColumnUpdated($event)\"\n (cancel)=\"onCancel()\">\n </st-column-editor>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"onCancel()\">Cancel</button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onSave()\">Add Column</button>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SheetAction, SheetActionEvent } from '../../../models/sheet-action.interface';\n\n@Component({ \n selector: 'st-sheet-actions',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-sheet-actions.component.html',\n styleUrls: ['./st-sheet-actions.component.scss'],\n})\nexport class StSheetActionsComponent {\n /**\n * Array of sheet actions\n */\n @Input() actions: SheetAction[] = [];\n\n /**\n * Sheet ID for context\n */\n @Input() sheetId!: string;\n\n /**\n * Emitted when an action is clicked\n */\n @Output() actionClicked = new EventEmitter<SheetActionEvent>();\n\n /**\n * Whether the dropdown is open\n */\n isOpen = false;\n\n /**\n * Visible actions (filtered by hidden property)\n */\n visibleActions: SheetAction[] = [];\n\n /**\n * Dropdown positioning style\n */\n dropdownStyle: any = {};\n\n constructor() {}\n\n ngOnInit(): void {\n this.updateVisibleActions();\n }\n\n ngOnChanges(): void {\n this.updateVisibleActions();\n }\n\n /**\n * Toggle dropdown menu\n */\n toggleMenu(event: MouseEvent): void {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n\n if (this.isOpen) {\n this.updateDropdownPosition(event);\n }\n\n }\n\n /**\n * Close dropdown menu\n */\n closeMenu(): void {\n this.isOpen = false;\n }\n\n /**\n * Handle action click\n */\n onActionClick(action: SheetAction, event: Event): void {\n event.stopPropagation();\n\n if (this.isActionDisabled(action)) {\n return;\n }\n\n // Emit event\n this.actionClicked.emit({\n action,\n sheetId: this.sheetId\n });\n\n // Execute action callback if provided\n if (action.action) {\n action.action(this.sheetId);\n }\n\n this.closeMenu();\n }\n\n /**\n * Check if action is disabled\n */\n isActionDisabled(action: SheetAction): boolean {\n if (typeof action.disabled === 'function') {\n return action.disabled();\n }\n return action.disabled || false;\n }\n\n /**\n * Update visible actions based on hidden property\n */\n private updateVisibleActions(): void {\n this.visibleActions = this.actions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden();\n }\n return !action.hidden;\n });\n }\n\n /**\n * Update dropdown position based on trigger button\n */\n private updateDropdownPosition(event: MouseEvent): void {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n\n this.dropdownStyle = {\n top: `${rect.bottom + 4}px`,\n right: `${window.innerWidth - rect.right}px`\n };\n }\n}\n\n","@if (visibleActions.length > 0) {\n <button \n class=\"sheet-actions-button\"\n (click)=\"toggleMenu($event)\"\n type=\"button\"\n title=\"Sheet Actions\"\n aria-label=\"Sheet actions menu\"\n [class.active]=\"isOpen\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n </button>\n}\n\n<!-- Dropdown container -->\n@if (isOpen) {\n <div class=\"dropdown-container\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closeMenu()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"dropdown-menu\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n @for (action of visibleActions; track action.id) {\n <nile-menu-item \n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onActionClick(action, $event)\">\n @if (action.icon) {\n <nile-icon size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n }\n {{ action.label }}\n </nile-menu-item>\n }\n \n @if (visibleActions.length === 0) {\n <nile-menu-item>\n No actions available\n </nile-menu-item>\n }\n </nile-menu>\n </div>\n </div>\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n SimpleChanges,\n CUSTOM_ELEMENTS_SCHEMA\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport { SheetConfig } from '../../../models/sheet-config.interface';\nimport { SheetAction, SheetActionEvent } from '../../../models/sheet-action.interface';\nimport { SheetState } from '../../models/sheet-state.class';\nimport { SheetStateSnapshot } from '../../models/sheet-state.interface';\nimport { CellChangeEvent } from '../../../models/cell-types';\nimport { TableStateChangeEvent, DataChangeEvent } from '../../models/table-types';\nimport { StTableComponent } from '../st-table/st-table.component';\nimport { StSheetActionsComponent } from '../st-sheet-actions/st-sheet-actions.component';\n\n@Component({\n selector: 'st-sheet',\n standalone: true,\n imports: [CommonModule, StTableComponent, StSheetActionsComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-sheet.component.html',\n styleUrls: ['./st-sheet.component.scss'],\n})\nexport class StSheetComponent implements OnInit, OnChanges {\n /**\n * Sheet configuration\n */\n @Input() config!: SheetConfig;\n\n /**\n * Table data (sync)\n */\n @Input() data: any[] = [];\n \n /**\n * Table data (async) - Observable or BehaviorSubject\n */\n @Input() data$?: Observable<any[]> | BehaviorSubject<any[]>;\n\n /**\n * Optional external state management\n * If not provided, component will create its own state\n */\n @Input() state?: SheetState;\n\n /**\n * Emitted when sheet action is clicked\n */\n @Output() sheetActionClicked = new EventEmitter<SheetActionEvent>();\n\n /**\n * Emitted when sheet state changes\n */\n @Output() stateChange = new EventEmitter<SheetStateSnapshot>();\n\n /**\n * Emitted when a cell value changes\n */\n @Output() cellChange = new EventEmitter<CellChangeEvent>();\n\n /**\n * Emitted when table state changes (pagination, sorting, filtering)\n */\n @Output() tableStateChange = new EventEmitter<TableStateChangeEvent>();\n \n /**\n * Emitted when data changes (via Observable)\n */\n @Output() dataChange = new EventEmitter<DataChangeEvent>();\n\n /**\n * Internal state instance\n */\n internalState?: SheetState;\n\n /**\n * Visible actions (filtered by hidden property)\n */\n visibleActions: SheetAction[] = [];\n activeTab: string = '1';\n\n constructor() {}\n\n ngOnInit(): void {\n this.initializeState();\n this.updateVisibleActions();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config']) {\n if (!this.state && this.config) {\n this.initializeState();\n }\n this.updateVisibleActions();\n }\n }\n\n /**\n * Initialize sheet state\n */\n private initializeState(): void {\n if (!this.state && this.config) {\n this.internalState = new SheetState(\n {\n id: this.config.id,\n name: this.config.name\n },\n this.config.tableConfig.columns,\n {\n initialPage: this.config.tableConfig.initialState?.page,\n pageSize: this.config.tableConfig.pagination?.pageSize\n }\n );\n\n // Update last accessed\n this.internalState.updateLastAccessed();\n }\n }\n\n /**\n * Get active state (external or internal)\n */\n get activeState(): SheetState | undefined {\n return this.state || this.internalState;\n }\n\n /**\n * Handle sheet action click\n */\n onActionClick(event: SheetActionEvent): void {\n this.sheetActionClicked.emit(event);\n \n // Emit state change after action\n if (this.activeState) {\n this.stateChange.emit(this.activeState.getSnapshot());\n }\n }\n\n /**\n * Handle cell value change from table\n */\n onCellChange(event: CellChangeEvent): void {\n this.cellChange.emit(event);\n \n // Update last modified timestamp\n if (this.activeState) {\n this.stateChange.emit(this.activeState.getSnapshot());\n }\n }\n\n /**\n * Handle table state change (pagination, sorting, filtering)\n */\n onTableStateChange(event: TableStateChangeEvent): void {\n this.tableStateChange.emit(event);\n \n // Emit sheet state change\n if (this.activeState) {\n this.stateChange.emit(this.activeState.getSnapshot());\n }\n }\n \n /**\n * Handle data change from table (via Observable)\n */\n onDataChange(event: DataChangeEvent): void {\n this.dataChange.emit(event);\n \n // Emit sheet state change\n if (this.activeState) {\n this.stateChange.emit(this.activeState.getSnapshot());\n }\n }\n\n /**\n * Update visible actions based on hidden property\n */\n private updateVisibleActions(): void {\n if (!this.config?.actions) {\n this.visibleActions = [];\n return;\n }\n\n this.visibleActions = this.config.actions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden();\n }\n return !action.hidden;\n });\n }\n\n /**\n * Check if header should be shown\n */\n get showHeader(): boolean {\n return this.config?.display?.showHeader !== false;\n }\n\n /**\n * Get header variant class\n */\n get headerVariant(): string {\n return this.config?.display?.headerVariant || 'default';\n }\n}\n\n","<nile-tab-group>\n <nile-tab slot=\"nav\" panel=\"general\" [class.active]=\"activeTab === '1'\" (click)=\"activeTab = '1'\">\n <div class=\"sheet-header\">\n {{activeState?.name$ | async | titlecase}}\n @if (visibleActions.length > 0) {\n <st-sheet-actions \n [actions]=\"visibleActions\" \n [sheetId]=\"config.id\"\n (actionClicked)=\"onActionClick($event)\">\n </st-sheet-actions>\n }\n </div>\n </nile-tab>\n <nile-tab-panel name=\"general\">\n @if (config && activeState) {\n <st-table \n [tableConfig]=\"config.tableConfig\"\n [data]=\"data\"\n [data$]=\"data$\"\n [tableState]=\"activeState.tableState\"\n (cellChange)=\"onCellChange($event)\"\n (stateChange)=\"onTableStateChange($event)\"\n (dataChange)=\"onDataChange($event)\">\n </st-table>\n }\n </nile-tab-panel>\n</nile-tab-group>\n","/**\n * Autosave strategy types\n */\nexport type AutosaveStrategy = 'lazy' | 'eager';\n\n/**\n * Autosave configuration interface\n */\nexport interface AutosaveConfig {\n /**\n * Whether autosave is enabled\n */\n enabled: boolean;\n\n /**\n * Autosave strategy:\n * - 'lazy': Saves after user stops making changes (2s debounce)\n * - 'eager': Saves on every change (100ms debounce)\n */\n strategy: AutosaveStrategy;\n}\n\n/**\n * Default autosave configuration\n */\nexport const DEFAULT_AUTOSAVE_CONFIG: AutosaveConfig = {\n enabled: true,\n strategy: 'lazy'\n};\n\n","import { Injectable } from '@angular/core';\nimport { WorkbookConfig } from '../models/workbook-config.interface';\nimport { WorkbookStateSnapshot } from '../renderer/models/workbook-state.interface';\n\n/**\n * Autosave data structure\n */\nexport interface AutosaveData {\n workbookConfig: WorkbookConfig;\n workbookState: WorkbookStateSnapshot;\n sheetsData: Map<string, any[]>;\n timestamp: Date;\n}\n\n/**\n * AutosaveService - In-memory autosave storage\n * \n * Stores autosave data in memory for workbooks.\n * Data is automatically cleared when the component is destroyed or tab is closed.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AutosaveService {\n /**\n * In-memory storage for autosaved data\n */\n private autosaveStore = new Map<string, AutosaveData>();\n\n /**\n * Track dirty state per workbook\n */\n private dirtyState = new Map<string, boolean>();\n\n /**\n * Track last save timestamp per workbook\n */\n private lastSaveTime = new Map<string, Date>();\n\n /**\n * Save workbook data to memory\n * @param workbookId Unique workbook identifier\n * @param data Autosave data to store\n */\n save(workbookId: string, data: AutosaveData): void {\n this.autosaveStore.set(workbookId, data);\n this.lastSaveTime.set(workbookId, data.timestamp);\n this.dirtyState.set(workbookId, false);\n }\n\n /**\n * Retrieve autosaved data for a workbook\n * @param workbookId Unique workbook identifier\n * @returns Autosaved data or null if not found\n */\n get(workbookId: string): AutosaveData | null {\n return this.autosaveStore.get(workbookId) || null;\n }\n\n /**\n * Check if workbook has unsaved changes\n * @param workbookId Unique workbook identifier\n * @returns True if workbook has unsaved changes\n */\n isDirty(workbookId: string): boolean {\n return this.dirtyState.get(workbookId) || false;\n }\n\n /**\n * Mark workbook as dirty or clean\n * @param workbookId Unique workbook identifier\n * @param dirty Dirty state\n */\n setDirty(workbookId: string, dirty: boolean): void {\n this.dirtyState.set(workbookId, dirty);\n }\n\n /**\n * Get last save timestamp for a workbook\n * @param workbookId Unique workbook identifier\n * @returns Last save timestamp or null\n */\n getLastSaveTime(workbookId: string): Date | null {\n return this.lastSaveTime.get(workbookId) || null;\n }\n\n /**\n * Clear autosave data for a specific workbook\n * @param workbookId Unique workbook identifier\n */\n clear(workbookId: string): void {\n this.autosaveStore.delete(workbookId);\n this.dirtyState.delete(workbookId);\n this.lastSaveTime.delete(workbookId);\n }\n\n /**\n * Clear all autosave data\n */\n clearAll(): void {\n this.autosaveStore.clear();\n this.dirtyState.clear();\n this.lastSaveTime.clear();\n }\n}\n\n","import {\n Component,\n OnInit,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ChangeDetectorRef,\n ViewChild,\n CUSTOM_ELEMENTS_SCHEMA,\n input,\n output,\n signal,\n computed,\n effect,\n inject,\n DestroyRef\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CommonModule } from '@angular/common';\nimport { StTableComponent } from '../st-table/st-table.component';\nimport { BehaviorSubject, Subject, merge } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, takeUntil, tap } from 'rxjs/operators';\nimport { WorkbookConfig, WorkbookSheetConfig } from '../../../models/workbook-config.interface';\nimport { WorkbookAction, WorkbookActionEvent, SheetTabActionEvent } from '../../../models/workbook-action.interface';\nimport { WorkbookState } from '../../models/workbook-state.class';\nimport { WorkbookStateSnapshot } from '../../models/workbook-state.interface';\nimport { TableState } from '../../models/table-state.class';\nimport { TableConfig } from '../../../models/table-config.interface';\nimport { CellChangeEvent } from '../../../models/cell-types';\nimport { TableStateChangeEvent } from '../../models/table-types';\nimport { AutosaveStrategy, DEFAULT_AUTOSAVE_CONFIG } from '../../../models/autosave-config.interface';\nimport { AutosaveService, AutosaveData } from '../../../services/autosave.service';\n\n@Component({\n selector: 'st-workbook',\n standalone: true,\n imports: [CommonModule, StTableComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './st-workbook.component.html',\n styleUrls: ['./st-workbook.component.scss'],\n})\nexport class StWorkbookComponent implements OnInit, OnChanges, OnDestroy {\n private destroyRef = inject(DestroyRef);\n private autosaveService = inject(AutosaveService);\n private cdr = inject(ChangeDetectorRef);\n \n // Signal-based inputs\n readonly config = input.required<WorkbookConfig>();\n readonly sheetsData = input<BehaviorSubject<Map<string, any[]>>>(new BehaviorSubject(new Map()));\n readonly state = input<WorkbookState | undefined>(undefined);\n \n // Signal-based outputs\n readonly sheetChanged = output<number>();\n readonly addSheet = output<void>();\n readonly sheetTabAction = output<SheetTabActionEvent>();\n readonly workbookAction = output<WorkbookActionEvent>();\n readonly cellChange = output<CellChangeEvent>();\n readonly cellSave = output<any>();\n readonly tableStateChange = output<TableStateChangeEvent>();\n readonly fullscreenToggle = output<boolean>();\n readonly requestAddRow = output<{ sheetId: string; focusColumn?: number }>();\n\n @ViewChild(StTableComponent) tableComponent?: StTableComponent;\n\n // Internal state signals\n readonly sheets = signal<WorkbookSheetConfig[]>([]);\n readonly activeSheetIndex = signal(0);\n readonly currentTableConfig = signal<TableConfig | null>(null);\n readonly currentTableData$ = new BehaviorSubject<any[]>([]);\n readonly currentTableState = signal<TableState | null>(null);\n readonly tableComponentKey = signal('');\n readonly isFullscreen = signal(false);\n \n // Tab actions state signals\n readonly tabActionsOpen = signal(false);\n readonly selectedSheet = signal<WorkbookSheetConfig | null>(null);\n readonly selectedSheetIndex = signal(-1);\n readonly tabActionsPosition = signal<any>({});\n \n // Workbook actions state signals\n readonly workbookActionsOpen = signal(false);\n readonly workbookActionsPosition = signal<any>({});\n readonly visibleWorkbookActions = signal<WorkbookAction[]>([]);\n readonly toolbarWorkbookActions = signal<WorkbookAction[]>([]);\n \n // Autosave state signals\n readonly autosaveEnabled = signal(false);\n readonly lastSaveTime = signal<Date | null>(null);\n readonly isSaving = signal(false);\n \n // Legacy observable for fullscreen (template compatibility)\n readonly isFullscreen$ = new BehaviorSubject<boolean>(false);\n\n private destroy$ = new Subject<void>();\n private internalState?: WorkbookState;\n private autosaveStrategy: AutosaveStrategy = 'lazy';\n private beforeUnloadHandler: ((event: BeforeUnloadEvent) => void) | null = null;\n\n constructor() {\n // Sync fullscreen signal to observable\n effect(() => {\n this.isFullscreen$.next(this.isFullscreen());\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n\n const sheetsDataValue = this.sheetsData();\n sheetsDataValue.pipe(\n takeUntilDestroyed(this.destroyRef)\n ).subscribe((dataMap) => {\n const selected = this.selectedSheet();\n if (selected && dataMap) {\n const newData = dataMap.get(selected.id);\n if (newData) {\n this.currentTableData$.next([...newData]);\n }\n }\n });\n\n const configValue = this.config();\n const autosaveConfig = configValue.autosave || DEFAULT_AUTOSAVE_CONFIG;\n this.autosaveEnabled.set(autosaveConfig.enabled);\n this.autosaveStrategy = autosaveConfig.strategy;\n\n if (this.autosaveEnabled()) {\n this.setupAutoRestore();\n this.initializeAutosave();\n this.setupBeforeUnloadWarning();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config']) {\n const isFirstChange = changes['config'].firstChange;\n this.initializeComponent(isFirstChange);\n }\n }\n\n private initializeComponent(isFirstInit: boolean = true): void {\n const configValue = this.config();\n if (!configValue) return;\n\n const previousSheetCount = this.sheets().length;\n this.sheets.set([...configValue.sheets]);\n const newSheetCount = this.sheets().length;\n \n if (isFirstInit) {\n this.activeSheetIndex.set(configValue.initialActiveSheetIndex || 0);\n } else {\n if (newSheetCount > previousSheetCount) {\n this.activeSheetIndex.set(newSheetCount - 1);\n }\n else if (this.activeSheetIndex() >= this.sheets().length) {\n this.activeSheetIndex.set(Math.max(0, this.sheets().length - 1));\n }\n }\n \n const externalState = this.state();\n if (!externalState) {\n this.internalState = new WorkbookState({\n id: configValue.id,\n name: configValue.name,\n initialActiveSheetIndex: this.activeSheetIndex()\n });\n }\n\n this.updateVisibleWorkbookActions();\n this.updateActiveSheet();\n }\n\n get activeState(): WorkbookState {\n return this.state() || this.internalState!;\n }\n\n onTabChange(event: any): void {\n const newIndex = event.detail?.index ?? event;\n \n if (newIndex >= this.sheets().length) {\n return;\n }\n\n this.activeSheetIndex.set(newIndex);\n this.activeState.setActiveSheetIndex(newIndex);\n this.updateActiveSheet();\n this.sheetChanged.emit(this.activeSheetIndex());\n }\n\n private updateActiveSheet(): void {\n const sheetsValue = this.sheets();\n const sheet = sheetsValue[this.activeSheetIndex()];\n if (!sheet) return;\n\n this.selectedSheet.set(sheet);\n this.selectedSheetIndex.set(this.activeSheetIndex());\n\n const sheetsDataValue = this.sheetsData();\n const sheetData = sheetsDataValue.getValue()?.get(sheet.id) || [];\n\n const tableState = new TableState(\n sheet.tableConfig.columns,\n {\n initialPage: sheet.tableConfig.initialState?.page || 1,\n pageSize: sheet.tableConfig.pagination?.pageSize || 25\n }\n );\n\n this.currentTableConfig.set({ ...sheet.tableConfig });\n this.currentTableData$.next(sheetData);\n this.currentTableState.set(tableState);\n \n this.tableComponentKey.set(`${sheet.id}-${Date.now()}`);\n\n this.activeState.setSheetTableState(sheet.id, tableState);\n }\n\n onAddSheet(): void {\n this.addSheet.emit();\n }\n\n trackByKey(index: number, key: string): string {\n return key;\n }\n\n get canAddSheet(): boolean {\n const configValue = this.config();\n if (configValue.display?.allowAddSheet === false) {\n return false;\n }\n if (configValue.display?.maxSheets) {\n return this.sheets().length < configValue.display.maxSheets;\n }\n return true;\n }\n\n get minSheets(): number {\n const configValue = this.config();\n return configValue.display?.minSheets || 1;\n }\n\n openTabActions(event: MouseEvent, sheet: WorkbookSheetConfig, index: number): void {\n event.stopPropagation();\n \n this.selectedSheet.set(sheet);\n this.selectedSheetIndex.set(index);\n this.tabActionsOpen.set(true);\n\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.tabActionsPosition.set({\n top: `${rect.bottom + 4}px`,\n left: `${rect.left}px`\n });\n }\n\n closeTabActions(): void {\n this.tabActionsOpen.set(false);\n this.selectedSheet.set(null);\n this.selectedSheetIndex.set(-1);\n }\n\n hasTabActions(sheet: WorkbookSheetConfig): boolean {\n return !!(sheet.tabActions && sheet.tabActions.length > 0);\n }\n\n onTabActionClick(action: any, event: Event): void {\n event.stopPropagation();\n\n const selected = this.selectedSheet();\n if (!selected) return;\n\n this.sheetTabAction.emit({\n action,\n sheetId: selected.id\n });\n\n this.closeTabActions();\n }\n\n toggleWorkbookActions(event: MouseEvent): void {\n event.stopPropagation();\n \n const isOpen = !this.workbookActionsOpen();\n this.workbookActionsOpen.set(isOpen);\n\n if (isOpen) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.workbookActionsPosition.set({\n top: `${rect.bottom + 4}px`,\n right: `${window.innerWidth - rect.right}px`\n });\n }\n }\n\n closeWorkbookActions(): void {\n this.workbookActionsOpen.set(false);\n }\n\n private updateVisibleWorkbookActions(): void {\n const configValue = this.config();\n if (!configValue.workbookActions) {\n this.visibleWorkbookActions.set([]);\n this.toolbarWorkbookActions.set([]);\n return;\n }\n\n const visibleActions = configValue.workbookActions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden();\n }\n return !action.hidden;\n });\n\n this.toolbarWorkbookActions.set(visibleActions.filter(action => action.showInToolbar === true));\n this.visibleWorkbookActions.set(visibleActions.filter(action => action.showInToolbar !== true));\n }\n\n isActionDisabled(action: WorkbookAction): boolean {\n if (typeof action.disabled === 'function') {\n return action.disabled();\n }\n return action.disabled || false;\n }\n\n onWorkbookActionClick(action: WorkbookAction, event: Event): void {\n event.stopPropagation();\n\n if (this.isActionDisabled(action)) {\n return;\n }\n\n const configValue = this.config();\n this.workbookAction.emit({\n action,\n workbookId: configValue.id\n });\n\n this.closeWorkbookActions();\n }\n\n toggleFullscreen(): void {\n const current = this.isFullscreen();\n const newValue = !current;\n \n this.isFullscreen.set(newValue);\n this.fullscreenToggle.emit(newValue);\n }\n\n onCellChange(event: CellChangeEvent): void {\n const selected = this.selectedSheet();\n const sheetsValue = this.sheets();\n \n if (!selected) {\n this.selectedSheet.set(sheetsValue[this.activeSheetIndex()]);\n }\n \n const currentSelected = this.selectedSheet();\n const sheetsDataValue = this.sheetsData();\n \n if (currentSelected && event.rowData && event.columnKey !== undefined) {\n const currentData = sheetsDataValue.getValue();\n const sheetData = currentData.get(currentSelected.id);\n \n if (sheetData && event.rowIndex !== undefined) {\n const updatedRow = { ...sheetData[event.rowIndex] };\n updatedRow[event.columnKey] = event.newValue;\n \n const updatedSheetData = [...sheetData];\n updatedSheetData[event.rowIndex] = updatedRow;\n \n const updatedData = new Map(currentData);\n updatedData.set(currentSelected.id, updatedSheetData);\n \n sheetsDataValue.next(updatedData);\n }\n }\n \n this.cellChange.emit(event);\n }\n\n onCellSave(event: any): void {\n const selected = this.selectedSheet();\n const sheetsDataValue = this.sheetsData();\n \n if (selected && event.rowData && event.columnKey !== undefined) {\n const currentData = sheetsDataValue.getValue();\n const sheetData = currentData.get(selected.id);\n \n if (sheetData && event.rowIndex !== undefined) {\n const updatedRow = { ...sheetData[event.rowIndex] };\n updatedRow[event.columnKey] = event.newValue;\n \n const updatedSheetData = [...sheetData];\n updatedSheetData[event.rowIndex] = updatedRow;\n \n const updatedData = new Map(currentData);\n updatedData.set(selected.id, updatedSheetData);\n \n sheetsDataValue.next(updatedData);\n }\n }\n \n this.cellSave.emit(event);\n }\n\n onTableStateChange(event: TableStateChangeEvent): void {\n this.tableStateChange.emit(event);\n }\n\n onRequestAddRow(event: { focusColumn?: number }): void {\n const sheetsValue = this.sheets();\n const activeSheet = sheetsValue[this.activeSheetIndex()];\n if (activeSheet) {\n this.requestAddRow.emit({\n sheetId: activeSheet.id,\n focusColumn: event.focusColumn\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n\n const configValue = this.config();\n if (this.autosaveEnabled()) {\n this.autosaveService.clear(configValue.id);\n }\n\n if (this.beforeUnloadHandler) {\n window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n }\n \n this.isFullscreen$.complete();\n this.currentTableData$.complete();\n }\n\n private initializeAutosave(): void {\n const changeEvents$ = merge(\n // Convert outputs to observable-like for merge\n );\n\n // Note: outputs don't work like EventEmitters in the same way\n // For autosave, we'll use a different approach\n }\n\n private performAutosave(): void {\n this.isSaving.set(true);\n\n const configValue = this.config();\n const sheetsDataValue = this.sheetsData();\n \n const autosaveData: AutosaveData = {\n workbookConfig: configValue,\n workbookState: this.activeState.getSnapshot(),\n sheetsData: new Map(sheetsDataValue.getValue()),\n timestamp: new Date()\n };\n\n this.autosaveService.save(configValue.id, autosaveData);\n this.lastSaveTime.set(new Date());\n this.isSaving.set(false);\n this.autosaveService.setDirty(configValue.id, false);\n }\n\n private setupAutoRestore(): void {\n const configValue = this.config();\n const autosaved = this.autosaveService.get(configValue.id);\n\n if (autosaved) {\n const sheetsDataValue = this.sheetsData();\n sheetsDataValue.next(autosaved.sheetsData);\n this.lastSaveTime.set(autosaved.timestamp);\n }\n }\n\n private setupBeforeUnloadWarning(): void {\n const configValue = this.config();\n this.beforeUnloadHandler = (event: BeforeUnloadEvent) => {\n if (this.autosaveService.isDirty(configValue.id)) {\n event.preventDefault();\n event.returnValue = 'You have unsaved changes. Are you sure you want to leave?';\n return event.returnValue;\n }\n return undefined;\n };\n\n window.addEventListener('beforeunload', this.beforeUnloadHandler);\n }\n\n public scrollToRow(rowIndex: number, focusFirstCell: boolean = false): void {\n if (this.tableComponent) {\n this.tableComponent.scrollToRowAndFocus(rowIndex, focusFirstCell);\n }\n }\n\n public scrollToLastRow(focusFirstCell: boolean = true): void {\n if (this.tableComponent) {\n this.tableComponent.scrollToLastRow(focusFirstCell);\n }\n }\n}\n","<div class=\"workbook-container\" [class.fullscreen]=\"isFullscreen()\">\n <nile-tab-group [activeIndex]=\"activeSheetIndex()\">\n \n <!-- Sheet Tabs (one per sheet) -->\n @for (sheet of sheets(); track sheet.id; let i = $index) {\n <nile-tab slot=\"nav\" \n panel=\"shared-panel\"\n [class.active]=\"i === activeSheetIndex()\"\n (click)=\"onTabChange(i)\">\n <div class=\"sheet-tab-content\">\n <span class=\"sheet-name\">{{ sheet.name }}</span>\n \n <!-- Tab actions dropdown button -->\n @if (hasTabActions(sheet)) {\n <button class=\"tab-actions-button\"\n (click)=\"openTabActions($event, sheet, i)\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n </button>\n }\n </div>\n </nile-tab>\n }\n \n <!-- Toolbar Tab (for workbook controls) -->\n <nile-tab slot=\"nav\" \n panel=\"shared-panel\"\n class=\"workbook-toolbar-tab\"\n [disabled]=\"true\">\n <div class=\"workbook-toolbar-content\">\n <!-- Autosave Indicator -->\n @if (autosaveEnabled()) {\n <div class=\"autosave-indicator\">\n @if (!isSaving() && lastSaveTime()) {\n <nile-icon \n name=\"save\" \n size=\"14\"\n [title]=\"'Saved at ' + (lastSaveTime() | date:'HH:mm:ss')\">\n </nile-icon>\n }\n @if (isSaving()) {\n <nile-icon \n name=\"loader\" \n size=\"14\"\n title=\"Saving...\">\n </nile-icon>\n }\n </div>\n }\n\n <!-- Toolbar Workbook Actions (shown as individual buttons) -->\n @for (action of toolbarWorkbookActions(); track action.id) {\n <button class=\"toolbar-action-button\"\n [class.disabled]=\"isActionDisabled(action)\"\n [title]=\"action.label\"\n (click)=\"onWorkbookActionClick(action, $event)\">\n @if (action.icon) {\n <nile-icon [name]=\"action.icon\"></nile-icon>\n }\n @if (!action.icon) {\n <span>{{ action.label }}</span>\n }\n </button>\n }\n\n <!-- Workbook Actions Dropdown -->\n @if (visibleWorkbookActions().length > 0) {\n <button class=\"workbook-actions-button\"\n (click)=\"toggleWorkbookActions($event)\"\n title=\"Workbook Actions\">\n <nile-icon name=\"settings\"></nile-icon>\n </button>\n }\n \n <!-- Add Sheet Button -->\n @if (canAddSheet) {\n <button class=\"add-sheet-button\"\n (click)=\"onAddSheet()\"\n title=\"Add Sheet\">\n <nile-icon name=\"plus\"></nile-icon>\n </button>\n }\n \n <!-- Fullscreen Button -->\n @if (config().display?.allowFullscreen !== false) {\n <button class=\"fullscreen-button\"\n (click)=\"toggleFullscreen()\"\n [title]=\"isFullscreen() ? 'Exit Fullscreen' : 'Fullscreen'\">\n <nile-icon [name]=\"isFullscreen() ? 'collapse' : 'expand-06'\"></nile-icon>\n </button>\n }\n </div>\n </nile-tab>\n \n <!-- Single Shared Tab Panel -->\n <nile-tab-panel name=\"shared-panel\">\n <!-- Lazy loading strategy: table is destroyed and recreated with new config/state when sheet changes -->\n <!-- Using @for with track to force complete reinitialization when tableComponentKey changes -->\n @for (key of [tableComponentKey()]; track key) {\n @if (currentTableConfig() && currentTableState()) {\n <st-table \n [attr.data-sheet-key]=\"key\"\n [tableConfig]=\"currentTableConfig()!\"\n [data$]=\"currentTableData$\"\n [tableState]=\"currentTableState()!\"\n (cellChange)=\"onCellChange($event)\"\n (cellSave)=\"onCellSave($event)\"\n (stateChange)=\"onTableStateChange($event)\"\n (requestAddRow)=\"onRequestAddRow($event)\">\n </st-table>\n }\n }\n </nile-tab-panel>\n \n </nile-tab-group>\n</div>\n\n<!-- Tab Actions Dropdown -->\n@if (tabActionsOpen()) {\n <div class=\"tab-actions-dropdown\" [ngStyle]=\"tabActionsPosition()\">\n <div class=\"dropdown-backdrop\" (click)=\"closeTabActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n @for (action of selectedSheet()?.tabActions; track action.id) {\n <nile-menu-item (click)=\"onTabActionClick(action, $event)\">\n @if (action.icon) {\n <nile-icon slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n }\n {{ action.label }}\n </nile-menu-item>\n }\n </nile-menu>\n </div>\n </div>\n}\n\n<!-- Workbook Actions Dropdown -->\n@if (workbookActionsOpen()) {\n <div class=\"workbook-actions-dropdown\" [ngStyle]=\"workbookActionsPosition()\">\n <div class=\"dropdown-backdrop\" (click)=\"closeWorkbookActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n @for (action of visibleWorkbookActions(); track action.id) {\n <nile-menu-item [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onWorkbookActionClick(action, $event)\">\n @if (action.icon) {\n <nile-icon slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n }\n {{ action.label }}\n </nile-menu-item>\n }\n </nile-menu>\n </div>\n </div>\n}\n\n<!-- Fullscreen Backdrop -->\n@if (isFullscreen()) {\n <div class=\"fullscreen-backdrop\" (click)=\"toggleFullscreen()\">\n </div>\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({\n selector: '[clickOutside]',\n standalone: true\n})\nexport class ClickOutsideDirective {\n @Output() clickOutside = new EventEmitter<void>();\n \n constructor(private el: ElementRef) {}\n \n @HostListener('document:click', ['$event.target'])\n onClick(target: EventTarget | null) {\n if (!target) return;\n const clickedInside = this.el.nativeElement.contains(target as Node);\n if (!clickedInside) {\n this.clickOutside.emit();\n }\n }\n}\n\n","/**\n * Shared Table Components Module\n * Contains components that are used by both SmartTableModule and DefinitionBuilderModule\n * This module breaks the circular dependency between the two modules\n */\n\nimport { NgModule } from '@angular/core';\nimport { ColumnEditorComponent } from '../builder/components/column-editor/column-editor.component';\n\n@NgModule({\n imports: [\n ColumnEditorComponent\n ],\n exports: [\n ColumnEditorComponent\n ]\n})\nexport class SharedTableComponentsModule { }\n\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { StCellComponent } from './renderer/components/st-cell/st-cell.component';\nimport { StTableComponent } from './renderer/components/st-table/st-table.component';\nimport { StHeaderComponent } from './renderer/components/st-header/st-header.component';\nimport { StColumnMenuDropdownComponent } from './renderer/components/st-column-menu/st-column-menu.component';\nimport { StColumnVisibilityComponent } from './renderer/components/st-column-visibility/st-column-visibility.component';\nimport { StColumnFilterComponent } from './renderer/components/st-column-filter/st-column-filter.component';\nimport { StPaginationComponent } from './renderer/components/st-pagination/st-pagination.component';\nimport { StAddColumnButtonComponent } from './renderer/components/st-add-column-button/st-add-column-button.component';\nimport { StColumnEditorModalComponent } from './renderer/components/st-column-editor-modal/st-column-editor-modal.component';\nimport { StTableActionsComponent } from './renderer/components/st-table-actions/st-table-actions.component';\nimport { StRowActionsDropdownComponent } from './renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component';\nimport { StSheetComponent } from './renderer/components/st-sheet/st-sheet.component';\nimport { StSheetActionsComponent } from './renderer/components/st-sheet-actions/st-sheet-actions.component';\nimport { StWorkbookComponent } from './renderer/components/st-workbook/st-workbook.component';\nimport { ClickOutsideDirective } from './renderer/directives/click-outside.directive';\nimport { StColumnResizeDirective } from './renderer/directives/st-column-resize.directive';\nimport { StKeyboardNavigationDirective } from './renderer/directives/st-keyboard-navigation.directive';\nimport { SharedTableComponentsModule } from './shared/shared-table-components.module';\nimport { VirtualScrollService } from './services/virtual-scroll.service';\n\n@NgModule({\n imports: [\n SharedTableComponentsModule,\n StCellComponent,\n StTableComponent,\n StHeaderComponent,\n StColumnMenuDropdownComponent,\n StColumnVisibilityComponent,\n StColumnFilterComponent,\n StPaginationComponent,\n StAddColumnButtonComponent,\n StColumnEditorModalComponent,\n StTableActionsComponent,\n StRowActionsDropdownComponent,\n StSheetComponent,\n StSheetActionsComponent,\n StWorkbookComponent,\n ClickOutsideDirective,\n StColumnResizeDirective,\n StKeyboardNavigationDirective\n ],\n exports: [\n StCellComponent,\n StTableComponent,\n StHeaderComponent,\n StColumnMenuDropdownComponent,\n StColumnVisibilityComponent,\n StColumnFilterComponent,\n StPaginationComponent,\n StAddColumnButtonComponent,\n StColumnEditorModalComponent,\n StTableActionsComponent,\n StRowActionsDropdownComponent,\n StSheetComponent,\n StSheetActionsComponent,\n StWorkbookComponent,\n ClickOutsideDirective,\n StColumnResizeDirective,\n StKeyboardNavigationDirective\n ],\n providers: [\n VirtualScrollService\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class SmartTableModule { }\n\n\n","/**\n * Definition builder service\n * Manages builder state and column operations\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TableConfig, mergeTableConfig, DEFAULT_TABLE_CONFIG } from '../../models/table-config.interface';\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { ColumnConfigFactory } from '../../factories/column-config.factory';\nimport { BuilderState } from '../models/builder-state.interface';\nimport { CellDataType } from '../../models/cell-types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DefinitionBuilderService {\n private stateSubject = new BehaviorSubject<BuilderState>(this.createInitialState());\n public readonly state$: Observable<BuilderState> = this.stateSubject.asObservable();\n\n /**\n * Get current state\n */\n getState(): BuilderState {\n return { ...this.stateSubject.value };\n }\n\n /**\n * Create initial empty state\n */\n createInitialState(): BuilderState {\n return {\n tableConfig: {\n columns: [],\n ...DEFAULT_TABLE_CONFIG\n },\n selectedColumn: null,\n selectedColumnIndex: null,\n previewVisible: true,\n hasUnsavedChanges: false\n };\n }\n\n /**\n * Initialize with a TableConfig\n */\n initialize(config: TableConfig): void {\n const mergedConfig = mergeTableConfig(config);\n this.updateState({\n tableConfig: mergedConfig,\n selectedColumn: null,\n selectedColumnIndex: null,\n hasUnsavedChanges: false,\n lastSavedConfig: { ...mergedConfig }\n });\n }\n\n /**\n * Create new definition (reset to empty)\n */\n newDefinition(): void {\n this.updateState(this.createInitialState());\n }\n\n /**\n * Add a new column\n */\n addColumn(type: CellDataType = CellDataType.STRING): ColumnConfig {\n const key = this.generateUniqueKey('newColumn');\n let column: ColumnConfig;\n\n switch (type) {\n case CellDataType.STRING:\n column = ColumnConfigFactory.text(key);\n break;\n case CellDataType.NUMBER:\n column = ColumnConfigFactory.number(key);\n break;\n case CellDataType.DATE:\n column = ColumnConfigFactory.date(key);\n break;\n case CellDataType.BOOLEAN:\n column = ColumnConfigFactory.boolean(key);\n break;\n default:\n column = ColumnConfigFactory.text(key);\n }\n\n const state = this.getState();\n const newColumns = [...state.tableConfig.columns, column];\n this.updateTableConfig({ ...state.tableConfig, columns: newColumns });\n\n // Select the new column\n this.selectColumn(newColumns.length - 1);\n\n return column;\n }\n\n /**\n * Update a column at the given index\n */\n updateColumn(index: number, updates: Partial<ColumnConfig>): void {\n const state = this.getState();\n if (index < 0 || index >= state.tableConfig.columns.length) {\n return;\n }\n\n const columns = [...state.tableConfig.columns];\n columns[index] = { ...columns[index], ...updates };\n\n this.updateTableConfig({ ...state.tableConfig, columns });\n\n // Update selected column if it's the one being updated\n if (state.selectedColumnIndex === index) {\n this.selectColumn(index);\n }\n }\n\n /**\n * Delete a column at the given index\n */\n deleteColumn(index: number): void {\n const state = this.getState();\n if (index < 0 || index >= state.tableConfig.columns.length) {\n return;\n }\n\n const columns = state.tableConfig.columns.filter((_, i) => i !== index);\n this.updateTableConfig({ ...state.tableConfig, columns });\n\n // Clear selection if deleted column was selected\n if (state.selectedColumnIndex === index) {\n this.clearSelection();\n } else if (state.selectedColumnIndex !== null && state.selectedColumnIndex > index) {\n // Adjust selection index if a column before the selected one was deleted\n this.selectColumn(state.selectedColumnIndex - 1);\n }\n }\n\n /**\n * Reorder columns\n */\n reorderColumns(fromIndex: number, toIndex: number): void {\n const state = this.getState();\n const columns = [...state.tableConfig.columns];\n const [moved] = columns.splice(fromIndex, 1);\n columns.splice(toIndex, 0, moved);\n\n this.updateTableConfig({ ...state.tableConfig, columns });\n\n // Update selection if needed\n if (state.selectedColumnIndex !== null) {\n let newIndex = state.selectedColumnIndex;\n if (state.selectedColumnIndex === fromIndex) {\n newIndex = toIndex;\n } else if (fromIndex < state.selectedColumnIndex && toIndex >= state.selectedColumnIndex) {\n newIndex = state.selectedColumnIndex - 1;\n } else if (fromIndex > state.selectedColumnIndex && toIndex <= state.selectedColumnIndex) {\n newIndex = state.selectedColumnIndex + 1;\n }\n this.selectColumn(newIndex);\n }\n }\n\n /**\n * Select a column for editing\n */\n selectColumn(index: number): void {\n const state = this.getState();\n if (index < 0 || index >= state.tableConfig.columns.length) {\n this.clearSelection();\n return;\n }\n\n this.updateState({\n selectedColumn: { ...state.tableConfig.columns[index] },\n selectedColumnIndex: index\n });\n }\n\n /**\n * Clear column selection\n */\n clearSelection(): void {\n this.updateState({\n selectedColumn: null,\n selectedColumnIndex: null\n });\n }\n\n /**\n * Update table configuration\n */\n updateTableConfig(config: TableConfig): void {\n const state = this.getState();\n const mergedConfig = mergeTableConfig(config);\n \n this.updateState({\n tableConfig: mergedConfig,\n hasUnsavedChanges: !this.configsEqual(state.lastSavedConfig, mergedConfig)\n });\n }\n\n /**\n * Update table-level settings (pagination, sorting, etc.)\n */\n updateTableSettings(settings: Partial<TableConfig>): void {\n const state = this.getState();\n this.updateTableConfig({\n ...state.tableConfig,\n ...settings\n });\n }\n\n /**\n * Toggle preview visibility\n */\n togglePreview(): void {\n const state = this.getState();\n this.updateState({\n previewVisible: !state.previewVisible\n });\n }\n\n /**\n * Mark configuration as saved\n */\n markAsSaved(): void {\n const state = this.getState();\n this.updateState({\n hasUnsavedChanges: false,\n lastSavedConfig: { ...state.tableConfig }\n });\n }\n\n /**\n * Update state (internal)\n */\n private updateState(updates: Partial<BuilderState>): void {\n const currentState = this.getState();\n const newState = { ...currentState, ...updates };\n this.stateSubject.next(newState);\n }\n\n /**\n * Generate unique column key\n */\n private generateUniqueKey(baseKey: string): string {\n const state = this.getState();\n const existingKeys = new Set(state.tableConfig.columns.map(col => col.key));\n \n if (!existingKeys.has(baseKey)) {\n return baseKey;\n }\n\n let counter = 1;\n let newKey = `${baseKey}${counter}`;\n while (existingKeys.has(newKey)) {\n counter++;\n newKey = `${baseKey}${counter}`;\n }\n\n return newKey;\n }\n\n /**\n * Compare two configs for equality (deep comparison)\n */\n private configsEqual(config1?: TableConfig, config2?: TableConfig): boolean {\n if (!config1 || !config2) {\n return config1 === config2;\n }\n\n // Simple comparison - in production, use a deep equality library\n return JSON.stringify(config1) === JSON.stringify(config2);\n }\n}\n\n","/**\n * TypeScript code generator utility\n * Converts TableConfig to TypeScript code using ColumnConfigFactory\n */\n\nimport { TableConfig } from '../../models/table-config.interface';\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { CellDataType } from '../../models/cell-types';\n\n/**\n * Options for TypeScript code generation\n */\nexport interface TypeScriptGeneratorOptions {\n /**\n * Variable name for the exported config\n */\n variableName?: string;\n\n /**\n * Include comments in generated code\n */\n includeComments?: boolean;\n\n /**\n * Indentation string (default: 2 spaces)\n */\n indent?: string;\n}\n\n/**\n * Generate TypeScript code from TableConfig\n * @param config Table configuration\n * @param options Generation options\n * @returns TypeScript code string\n */\nexport function generateTypeScriptCode(\n config: TableConfig,\n options: TypeScriptGeneratorOptions = {}\n): string {\n const {\n variableName = 'tableConfig',\n includeComments = true,\n indent = ' '\n } = options;\n\n const lines: string[] = [];\n\n // Add imports\n lines.push(\"import { ColumnConfigFactory, TableConfig } from 'ngx-smart-table';\");\n lines.push('');\n\n // Add comment if requested\n if (includeComments) {\n lines.push('/**');\n lines.push(' * Table configuration generated by Smart Table Builder');\n lines.push(' * @generated');\n lines.push(' */');\n }\n\n // Start config object\n lines.push(`export const ${variableName}: TableConfig = {`);\n\n // Generate columns array\n lines.push(`${indent}columns: [`);\n config.columns.forEach((column, index) => {\n const columnCode = generateColumnCode(column, indent + indent, includeComments);\n const isLast = index === config.columns.length - 1;\n lines.push(`${indent}${indent}${columnCode}${isLast ? '' : ','}`);\n });\n lines.push(`${indent}],`);\n\n // Generate pagination config\n if (config.pagination) {\n lines.push(`${indent}pagination: {`);\n if (config.pagination.enabled !== undefined) {\n lines.push(`${indent}${indent}enabled: ${config.pagination.enabled},`);\n }\n if (config.pagination.pageSize !== undefined) {\n lines.push(`${indent}${indent}pageSize: ${config.pagination.pageSize},`);\n }\n if (config.pagination.pageSizeOptions) {\n lines.push(`${indent}${indent}pageSizeOptions: [${config.pagination.pageSizeOptions.join(', ')}],`);\n }\n if (config.pagination.showTopControls !== undefined) {\n lines.push(`${indent}${indent}showTopControls: ${config.pagination.showTopControls},`);\n }\n if (config.pagination.showBottomControls !== undefined) {\n lines.push(`${indent}${indent}showBottomControls: ${config.pagination.showBottomControls},`);\n }\n if (config.pagination.totalItems !== undefined) {\n lines.push(`${indent}${indent}totalItems: ${config.pagination.totalItems},`);\n }\n if (config.pagination.variant !== undefined) {\n lines.push(`${indent}${indent}variant: '${config.pagination.variant}',`);\n }\n lines.push(`${indent}},`);\n }\n\n // Generate sorting config\n if (config.sorting) {\n lines.push(`${indent}sorting: {`);\n if (config.sorting.enabled !== undefined) {\n lines.push(`${indent}${indent}enabled: ${config.sorting.enabled},`);\n }\n if (config.sorting.multiColumn !== undefined) {\n lines.push(`${indent}${indent}multiColumn: ${config.sorting.multiColumn},`);\n }\n if (config.sorting.mode) {\n lines.push(`${indent}${indent}mode: '${config.sorting.mode}',`);\n }\n lines.push(`${indent}},`);\n }\n\n // Generate filtering config\n if (config.filtering) {\n lines.push(`${indent}filtering: {`);\n if (config.filtering.enabled !== undefined) {\n lines.push(`${indent}${indent}enabled: ${config.filtering.enabled},`);\n }\n if (config.filtering.mode) {\n lines.push(`${indent}${indent}mode: '${config.filtering.mode}',`);\n }\n lines.push(`${indent}},`);\n }\n\n // Generate display config\n if (config.display) {\n lines.push(`${indent}display: {`);\n if (config.display.stickyHeader !== undefined) {\n lines.push(`${indent}${indent}stickyHeader: ${config.display.stickyHeader},`);\n }\n if (config.display.maxHeight !== undefined) {\n lines.push(`${indent}${indent}maxHeight: ${config.display.maxHeight},`);\n }\n lines.push(`${indent}},`);\n }\n\n // Close config object\n lines.push('};');\n\n return lines.join('\\n');\n}\n\n/**\n * Generate TypeScript code for a single column\n * @param column Column configuration\n * @param indent Indentation string\n * @param includeComments Whether to include comments\n * @returns TypeScript code string\n */\nfunction generateColumnCode(\n column: ColumnConfig,\n indent: string,\n includeComments: boolean\n): string {\n const factoryMethod = getFactoryMethod(column);\n const options = generateColumnOptions(column, indent);\n\n if (options) {\n return `ColumnConfigFactory.${factoryMethod}('${column.key}', ${options})`;\n } else {\n return `ColumnConfigFactory.${factoryMethod}('${column.key}')`;\n }\n}\n\n/**\n * Get the appropriate factory method name for a column\n * @param column Column configuration\n * @returns Factory method name\n */\nfunction getFactoryMethod(column: ColumnConfig): string {\n // Check if readonly\n if (column.editable === false) {\n return 'readonly';\n }\n\n // Check dataType\n switch (column.dataType) {\n case CellDataType.STRING:\n // Check if email validator exists\n if (column.validator && column.validator.toString().includes('email')) {\n return 'email';\n }\n return 'text';\n case CellDataType.NUMBER:\n // Check if currency formatter exists\n if (column.formatter && column.formatter.toString().includes('Currency')) {\n return 'currency';\n }\n return 'number';\n case CellDataType.DATE:\n return 'date';\n case CellDataType.BOOLEAN:\n return 'boolean';\n default:\n return 'custom';\n }\n}\n\n/**\n * Generate options object for column factory method\n * @param column Column configuration\n * @param indent Indentation string\n * @returns Options object string or null\n */\nfunction generateColumnOptions(column: ColumnConfig, indent: string): string | null {\n const options: string[] = [];\n\n if (column.header && column.header !== column.key) {\n options.push(`header: '${escapeString(column.header)}'`);\n }\n\n if (column.width !== undefined) {\n if (typeof column.width === 'number') {\n options.push(`width: ${column.width}`);\n } else {\n options.push(`width: '${column.width}'`);\n }\n }\n\n if (column.minWidth !== undefined) {\n options.push(`minWidth: ${column.minWidth}`);\n }\n\n if (column.maxWidth !== undefined) {\n options.push(`maxWidth: ${column.maxWidth}`);\n }\n\n if (column.sticky) {\n options.push(`sticky: '${column.sticky}'`);\n }\n\n if (column.editable !== undefined) {\n options.push(`editable: ${column.editable}`);\n }\n\n if (column.sortable !== undefined) {\n options.push(`sortable: ${column.sortable}`);\n }\n\n if (column.filterable !== undefined) {\n options.push(`filterable: ${column.filterable}`);\n }\n\n if (column.resizable !== undefined) {\n options.push(`resizable: ${column.resizable}`);\n }\n\n // For custom columns, we'd need to include more complex options\n // This is a simplified version - full implementation would handle\n // formatters, validators, editors, etc.\n\n if (options.length === 0) {\n return null;\n }\n\n return `{\\n${indent}${indent}${options.join(`,\\n${indent}${indent}`)}\\n${indent}}`;\n}\n\n/**\n * Escape string for use in TypeScript code\n * @param str String to escape\n * @returns Escaped string\n */\nfunction escapeString(str: string): string {\n return str.replace(/'/g, \"\\\\'\").replace(/\\n/g, '\\\\n');\n}\n\n","/**\n * Definition export service\n * Handles exporting TableConfig to JSON or TypeScript\n */\n\nimport { Injectable } from '@angular/core';\nimport { TableConfig } from '../../models/table-config.interface';\nimport { ExportOptions } from '../models/builder-state.interface';\nimport { generateTypeScriptCode, TypeScriptGeneratorOptions } from '../utils/typescript-generator.util';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DefinitionExportService {\n /**\n * Export TableConfig to JSON string\n * @param config Table configuration\n * @param pretty Whether to format JSON with indentation\n * @returns JSON string\n */\n exportToJSON(config: TableConfig, pretty: boolean = true): string {\n // Create a serializable version (remove functions, circular refs)\n const serializable = this.sanitizeForJSON(config);\n\n if (pretty) {\n return JSON.stringify(serializable, null, 2);\n } else {\n return JSON.stringify(serializable);\n }\n }\n\n /**\n * Export TableConfig to TypeScript code\n * @param config Table configuration\n * @param options Generation options\n * @returns TypeScript code string\n */\n exportToTypeScript(config: TableConfig, options: TypeScriptGeneratorOptions = {}): string {\n return generateTypeScriptCode(config, options);\n }\n\n /**\n * Download configuration as JSON file\n * @param config Table configuration\n * @param fileName File name (without extension)\n */\n downloadAsJSON(config: TableConfig, fileName: string = 'table-config'): void {\n const json = this.exportToJSON(config);\n this.downloadFile(json, `${fileName}.json`, 'application/json');\n }\n\n /**\n * Download configuration as TypeScript file\n * @param config Table configuration\n * @param fileName File name (without extension)\n * @param options Generation options\n */\n downloadAsTypeScript(\n config: TableConfig,\n fileName: string = 'table-config',\n options: TypeScriptGeneratorOptions = {}\n ): void {\n const code = this.exportToTypeScript(config, options);\n this.downloadFile(code, `${fileName}.ts`, 'text/typescript');\n }\n\n /**\n * Save configuration to localStorage\n * @param config Table configuration\n * @param key Storage key\n */\n saveToLocalStorage(config: TableConfig, key: string = 'smart-table-definition'): void {\n try {\n const json = this.exportToJSON(config, false);\n localStorage.setItem(key, json);\n } catch (error) {\n console.error('Failed to save to localStorage:', error);\n throw error;\n }\n }\n\n /**\n * Load configuration from localStorage\n * @param key Storage key\n * @returns TableConfig or null if not found\n */\n loadFromLocalStorage(key: string = 'smart-table-definition'): TableConfig | null {\n try {\n const stored = localStorage.getItem(key);\n if (!stored) {\n return null;\n }\n\n return JSON.parse(stored) as TableConfig;\n } catch (error) {\n console.error('Failed to load from localStorage:', error);\n return null;\n }\n }\n\n /**\n * Sanitize config for JSON serialization\n * Removes functions, circular references, and other non-serializable values\n */\n private sanitizeForJSON(config: TableConfig): any {\n const sanitized: any = {\n columns: config.columns.map(col => this.sanitizeColumn(col)),\n pagination: config.pagination,\n sorting: config.sorting,\n filtering: config.filtering,\n display: config.display,\n initialState: config.initialState\n };\n\n // Remove undefined values\n Object.keys(sanitized).forEach(key => {\n if (sanitized[key] === undefined) {\n delete sanitized[key];\n }\n });\n\n return sanitized;\n }\n\n /**\n * Sanitize column config for JSON serialization\n */\n private sanitizeColumn(column: any): any {\n const sanitized: any = {\n key: column.key,\n header: column.header,\n dataType: column.dataType,\n editable: column.editable,\n sortable: column.sortable,\n filterable: column.filterable,\n resizable: column.resizable,\n width: column.width,\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n sticky: column.sticky,\n alignment: column.alignment,\n verticalAlignment: column.verticalAlignment,\n className: column.className,\n style: column.style,\n tooltip: column.tooltip,\n visible: column.visible,\n pinned: column.pinned,\n sortPriority: column.sortPriority,\n metadata: column.metadata\n };\n\n // Remove undefined values\n Object.keys(sanitized).forEach(key => {\n if (sanitized[key] === undefined) {\n delete sanitized[key];\n }\n });\n\n // Note: formatter, validator, editor, parser, hooks are functions\n // and cannot be serialized to JSON. They will need to be recreated\n // when importing, or stored separately as metadata.\n\n return sanitized;\n }\n\n /**\n * Download file helper\n */\n private downloadFile(content: string, fileName: string, mimeType: string): void {\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n}\n\n","/**\n * Configuration validator utility\n * Validates TableConfig and ColumnConfig objects\n */\n\nimport { TableConfig } from '../../models/table-config.interface';\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { ValidationError } from '../models/builder-state.interface';\n\n/**\n * Validate a TableConfig\n * @param config Table configuration to validate\n * @returns Array of validation errors (empty if valid)\n */\nexport function validateTableConfig(config: TableConfig): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Check if columns array exists and is not empty\n if (!config.columns || !Array.isArray(config.columns)) {\n errors.push({\n field: 'columns',\n message: 'Columns array is required',\n code: 'REQUIRED'\n });\n return errors; // Can't continue validation without columns\n }\n\n if (config.columns.length === 0) {\n errors.push({\n field: 'columns',\n message: 'At least one column is required',\n code: 'MIN_LENGTH'\n });\n }\n\n // Validate each column\n config.columns.forEach((column, index) => {\n const columnErrors = validateColumnConfig(column, index);\n errors.push(...columnErrors);\n });\n\n // Check for duplicate column keys\n const keys = config.columns.map(col => col.key);\n const duplicateKeys = keys.filter((key, index) => keys.indexOf(key) !== index);\n if (duplicateKeys.length > 0) {\n duplicateKeys.forEach(key => {\n errors.push({\n field: `columns[].key`,\n message: `Duplicate column key: ${key}`,\n code: 'DUPLICATE_KEY'\n });\n });\n }\n\n // Validate pagination config if provided\n if (config.pagination) {\n if (config.pagination.pageSize !== undefined && config.pagination.pageSize <= 0) {\n errors.push({\n field: 'pagination.pageSize',\n message: 'Page size must be greater than 0',\n code: 'INVALID_VALUE'\n });\n }\n\n if (config.pagination.pageSizeOptions) {\n const invalidSizes = config.pagination.pageSizeOptions.filter(size => size <= 0);\n if (invalidSizes.length > 0) {\n errors.push({\n field: 'pagination.pageSizeOptions',\n message: 'All page size options must be greater than 0',\n code: 'INVALID_VALUE'\n });\n }\n }\n }\n\n return errors;\n}\n\n/**\n * Validate a ColumnConfig\n * @param column Column configuration to validate\n * @param index Column index (for error messages)\n * @returns Array of validation errors (empty if valid)\n */\nexport function validateColumnConfig(column: ColumnConfig, index: number = 0): ValidationError[] {\n const errors: ValidationError[] = [];\n const prefix = `columns[${index}]`;\n\n // Key is required\n if (!column.key || typeof column.key !== 'string' || column.key.trim() === '') {\n errors.push({\n field: `${prefix}.key`,\n message: 'Column key is required and must be a non-empty string',\n code: 'REQUIRED'\n });\n } else {\n // Key must be a valid identifier\n if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(column.key)) {\n errors.push({\n field: `${prefix}.key`,\n message: 'Column key must be a valid identifier (letters, numbers, underscore, dollar sign)',\n code: 'INVALID_FORMAT'\n });\n }\n }\n\n // Width constraints\n if (column.width !== undefined) {\n if (typeof column.width === 'number' && column.width <= 0) {\n errors.push({\n field: `${prefix}.width`,\n message: 'Column width must be greater than 0',\n code: 'INVALID_VALUE'\n });\n }\n }\n\n if (column.minWidth !== undefined && column.minWidth <= 0) {\n errors.push({\n field: `${prefix}.minWidth`,\n message: 'Minimum width must be greater than 0',\n code: 'INVALID_VALUE'\n });\n }\n\n if (column.maxWidth !== undefined && column.maxWidth <= 0) {\n errors.push({\n field: `${prefix}.maxWidth`,\n message: 'Maximum width must be greater than 0',\n code: 'INVALID_VALUE'\n });\n }\n\n // Width constraints: minWidth <= width <= maxWidth\n if (\n typeof column.width === 'number' &&\n column.minWidth !== undefined &&\n column.width < column.minWidth\n ) {\n errors.push({\n field: `${prefix}.width`,\n message: `Width (${column.width}) must be greater than or equal to minWidth (${column.minWidth})`,\n code: 'CONSTRAINT_VIOLATION'\n });\n }\n\n if (\n typeof column.width === 'number' &&\n column.maxWidth !== undefined &&\n column.width > column.maxWidth\n ) {\n errors.push({\n field: `${prefix}.width`,\n message: `Width (${column.width}) must be less than or equal to maxWidth (${column.maxWidth})`,\n code: 'CONSTRAINT_VIOLATION'\n });\n }\n\n // Sticky columns must have defined width\n if (column.sticky && (column.sticky === 'left' || column.sticky === 'right')) {\n if (column.width === undefined || column.width === 'auto') {\n errors.push({\n field: `${prefix}.width`,\n message: 'Sticky columns must have a defined width (not auto)',\n code: 'CONSTRAINT_VIOLATION'\n });\n }\n }\n\n return errors;\n}\n\n/**\n * Check if a TableConfig is valid\n * @param config Table configuration to check\n * @returns True if valid, false otherwise\n */\nexport function isValidTableConfig(config: TableConfig): boolean {\n return validateTableConfig(config).length === 0;\n}\n\n/**\n * Check if a ColumnConfig is valid\n * @param column Column configuration to check\n * @returns True if valid, false otherwise\n */\nexport function isValidColumnConfig(column: ColumnConfig): boolean {\n return validateColumnConfig(column).length === 0;\n}\n\n","/**\n * Definition import service\n * Handles importing TableConfig from JSON with validation\n */\n\nimport { Injectable } from '@angular/core';\nimport { TableConfig, mergeTableConfig } from '../../models/table-config.interface';\nimport { ImportResult, ValidationError } from '../models/builder-state.interface';\nimport { validateTableConfig } from '../utils/config-validator.util';\nimport { JsonSchemaValidatorService } from '../../services/json-schema-validator.service';\nimport { SchemaValidationError } from '../../models/schema-validation.interface';\nimport { ValidationLoggerService } from '../../services/validation-logger.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DefinitionImportService {\n constructor(\n private schemaValidator: JsonSchemaValidatorService,\n private logger: ValidationLoggerService\n ) {}\n /**\n * Import TableConfig from JSON string\n * @param jsonString JSON string to parse\n * @param skipSchemaValidation Skip JSON schema validation (use custom validation only)\n * @param fileName Optional filename for logging context\n * @returns Import result with success status and config or errors\n */\n importFromJSON(jsonString: string, skipSchemaValidation: boolean = false, fileName?: string): ImportResult {\n try {\n // Parse JSON\n const parsed = JSON.parse(jsonString);\n\n // Validate structure\n if (!parsed || typeof parsed !== 'object') {\n return {\n success: false,\n error: 'Invalid JSON: root must be an object',\n validationErrors: ['Root must be an object']\n };\n }\n\n // JSON Schema validation (if enabled and available)\n let schemaErrors: SchemaValidationError[] = [];\n if (!skipSchemaValidation && this.schemaValidator.isAvailable()) {\n const schemaResult = this.schemaValidator.validateJSONString(jsonString, true);\n if (!schemaResult.valid) {\n schemaErrors = schemaResult.errors;\n }\n }\n\n // Check for columns array (basic validation)\n if (!parsed.columns || !Array.isArray(parsed.columns)) {\n return {\n success: false,\n error: 'Invalid configuration: columns array is required',\n validationErrors: [\n 'Columns array is required',\n ...schemaErrors.map(err => `${err.field || err.path}: ${err.message}`)\n ]\n };\n }\n\n // Create TableConfig object\n const tableConfig: TableConfig = {\n columns: parsed.columns,\n pagination: parsed.pagination,\n sorting: parsed.sorting,\n filtering: parsed.filtering,\n display: parsed.display,\n initialState: parsed.initialState\n };\n\n // Merge with defaults\n const mergedConfig = mergeTableConfig(tableConfig);\n\n // Custom validation (for additional business rules)\n const customValidationErrors = validateTableConfig(mergedConfig);\n \n // Combine all validation errors\n const allErrors = [\n ...schemaErrors.map(err => `${err.field || err.path}: ${err.message}`),\n ...customValidationErrors.map(err => `${err.field}: ${err.message}`)\n ];\n\n if (allErrors.length > 0) {\n // Log validation errors\n const allSchemaErrors: SchemaValidationError[] = [\n ...schemaErrors,\n ...customValidationErrors.map(err => ({\n path: err.field || '',\n message: err.message,\n code: err.code || 'VALIDATION_ERROR',\n field: err.field\n }))\n ];\n \n this.logger.logValidationErrors(allSchemaErrors, 'import', {\n fileName: fileName,\n configSnippet: jsonString.substring(0, 500) // Include first 500 chars as context\n });\n\n return {\n success: false,\n error: 'Configuration validation failed',\n validationErrors: allErrors\n };\n }\n\n return {\n success: true,\n tableConfig: mergedConfig\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Failed to parse JSON: ${error.message}`,\n validationErrors: [error.message]\n };\n }\n }\n\n /**\n * Import TableConfig from File object\n * @param file File to read\n * @returns Promise with import result\n */\n async importFromFile(file: File): Promise<ImportResult> {\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.onload = (event) => {\n const content = event.target?.result as string;\n const result = this.importFromJSON(content, true, file.name);\n resolve(result);\n };\n\n reader.onerror = () => {\n const errorResult = {\n success: false,\n error: 'Failed to read file',\n validationErrors: ['File read error']\n };\n \n // Log file read error\n this.logger.logValidationErrors([{\n path: '',\n message: 'Failed to read file',\n code: 'FILE_READ_ERROR',\n field: 'root'\n }], 'import', {\n fileName: file.name\n });\n \n resolve(errorResult);\n };\n\n reader.readAsText(file);\n });\n }\n\n /**\n * Import TableConfig from localStorage\n * @param key Storage key\n * @returns Import result\n */\n importFromLocalStorage(key: string = 'smart-table-definition'): ImportResult {\n try {\n const stored = localStorage.getItem(key);\n if (!stored) {\n const errorResult = {\n success: false,\n error: 'No data found in localStorage',\n validationErrors: ['No data found']\n };\n \n // Log localStorage read error\n this.logger.logValidationErrors([{\n path: '',\n message: 'No data found in localStorage',\n code: 'STORAGE_NOT_FOUND',\n field: 'root'\n }], 'import', {\n storageKey: key\n });\n \n return errorResult;\n }\n\n return this.importFromJSON(stored, true, undefined);\n } catch (error: any) {\n const errorResult = {\n success: false,\n error: `Failed to read from localStorage: ${error.message}`,\n validationErrors: [error.message]\n };\n \n // Log localStorage error\n this.logger.logValidationErrors([{\n path: '',\n message: `Failed to read from localStorage: ${error.message}`,\n code: 'STORAGE_READ_ERROR',\n field: 'root'\n }], 'import', {\n storageKey: key\n });\n \n return errorResult;\n }\n }\n}\n\n","/**\n * Builder Toolbar Component\n * Handles file operations and actions\n */\n\nimport { Component, Input, Output, EventEmitter, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DefinitionBuilderService } from '../../services/definition-builder.service';\nimport { DefinitionExportService } from '../../services/definition-export.service';\nimport { DefinitionImportService } from '../../services/definition-import.service';\n\n@Component({\n selector: 'st-builder-toolbar',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './builder-toolbar.component.html',\n styleUrls: ['./builder-toolbar.component.scss']\n})\nexport class BuilderToolbarComponent {\n @Input() hasUnsavedChanges: boolean = false;\n \n @Output() newDefinition = new EventEmitter<void>();\n @Output() saved = new EventEmitter<void>();\n @Output() previewToggled = new EventEmitter<void>();\n\n constructor(\n private builderService: DefinitionBuilderService,\n private exportService: DefinitionExportService,\n private importService: DefinitionImportService\n ) {}\n\n /**\n * Handle new definition button click\n */\n onNewDefinition(): void {\n this.newDefinition.emit();\n }\n\n /**\n * Handle open file button click\n */\n onOpenFile(): void {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.json';\n input.onchange = (event: any) => {\n const file = event.target.files[0];\n if (file) {\n this.importService.importFromFile(file).then(result => {\n if (result.success && result.tableConfig) {\n this.builderService.initialize(result.tableConfig);\n this.saved.emit();\n } else {\n alert(`Failed to import: ${result.error}`);\n }\n });\n }\n };\n input.click();\n }\n\n /**\n * Handle save button click\n */\n onSave(): void {\n const state = this.builderService.getState();\n this.exportService.saveToLocalStorage(state.tableConfig);\n this.saved.emit();\n }\n\n /**\n * Handle load from localStorage button click\n */\n onLoad(): void {\n const config = this.exportService.loadFromLocalStorage();\n if (config) {\n this.builderService.initialize(config);\n this.saved.emit();\n } else {\n alert('No saved configuration found');\n }\n }\n\n /**\n * Handle export JSON button click\n */\n onExportJSON(): void {\n const state = this.builderService.getState();\n this.exportService.downloadAsJSON(state.tableConfig);\n }\n\n /**\n * Handle export TypeScript button click\n */\n onExportTypeScript(): void {\n const state = this.builderService.getState();\n this.exportService.downloadAsTypeScript(state.tableConfig, 'table-config', {\n includeComments: true,\n variableName: 'tableConfig'\n });\n }\n\n /**\n * Handle import JSON button click\n */\n onImportJSON(): void {\n this.onOpenFile();\n }\n\n /**\n * Handle preview toggle button click\n */\n onTogglePreview(): void {\n this.previewToggled.emit();\n }\n}\n\n","<div class=\"builder-toolbar\">\n <div class=\"toolbar-section\">\n <button class=\"toolbar-btn\" (click)=\"onNewDefinition()\" title=\"New Definition\">\n <span>New</span>\n </button>\n <button class=\"toolbar-btn\" (click)=\"onOpenFile()\" title=\"Open File\">\n <span>Open</span>\n </button>\n <button class=\"toolbar-btn\" (click)=\"onSave()\" title=\"Save to LocalStorage\" [class.has-changes]=\"hasUnsavedChanges\">\n <span>Save</span>\n @if (hasUnsavedChanges) {\n <span class=\"unsaved-indicator\">●</span>\n }\n </button>\n <button class=\"toolbar-btn\" (click)=\"onLoad()\" title=\"Load from LocalStorage\">\n <span>Load</span>\n </button>\n </div>\n\n <div class=\"toolbar-section\">\n <button class=\"toolbar-btn\" (click)=\"onImportJSON()\" title=\"Import JSON\">\n <span>Import JSON</span>\n </button>\n <button class=\"toolbar-btn\" (click)=\"onExportJSON()\" title=\"Export JSON\">\n <span>Export JSON</span>\n </button>\n <button class=\"toolbar-btn\" (click)=\"onExportTypeScript()\" title=\"Export TypeScript\">\n <span>Export TS</span>\n </button>\n </div>\n\n <div class=\"toolbar-section\">\n <button class=\"toolbar-btn\" (click)=\"onTogglePreview()\" title=\"Toggle Preview\">\n <span>Preview</span>\n </button>\n </div>\n</div>\n","/**\n * Column List Component\n * Displays and manages columns\n */\n\nimport { Component, Input, Output, EventEmitter, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ColumnConfig } from '../../../models/column-config.interface';\nimport { CellDataType } from '../../../models/cell-types';\n\n// Drag-drop interface (making CDK optional)\ninterface DragDropEvent {\n previousIndex: number;\n currentIndex: number;\n}\n\n@Component({\n selector: 'st-column-list',\n standalone: true,\n imports: [CommonModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './column-list.component.html',\n styleUrls: ['./column-list.component.scss']\n})\nexport class ColumnListComponent {\n @Input() columns: ColumnConfig[] = [];\n @Input() selectedIndex: number | null = null;\n\n @Output() columnSelected = new EventEmitter<number>();\n @Output() columnAdded = new EventEmitter<string>();\n @Output() columnDeleted = new EventEmitter<number>();\n @Output() columnReordered = new EventEmitter<{ fromIndex: number; toIndex: number }>();\n\n showAddMenu = false;\n draggedIndex: number | null = null;\n dragOverIndex: number | null = null;\n readonly dataTypes = [\n { value: CellDataType.STRING, label: 'Text' },\n { value: CellDataType.NUMBER, label: 'Number' },\n { value: CellDataType.DATE, label: 'Date' },\n { value: CellDataType.BOOLEAN, label: 'Boolean' }\n ];\n\n /**\n * Handle column click\n */\n onColumnClick(index: number): void {\n this.columnSelected.emit(index);\n }\n\n /**\n * Handle delete button click\n */\n onDelete(index: number, event: Event): void {\n event.stopPropagation();\n if (confirm(`Are you sure you want to delete column \"${this.columns[index].header || this.columns[index].key}\"?`)) {\n this.columnDeleted.emit(index);\n }\n }\n\n /**\n * Handle add column button click\n */\n onAddColumn(type: CellDataType): void {\n this.showAddMenu = false;\n this.columnAdded.emit(type);\n }\n\n closeMenu(): void{\n this.showAddMenu = false;\n }\n\n /**\n * Handle drag start\n */\n onDragStart(event: DragEvent, index: number): void {\n this.draggedIndex = index;\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/html', '');\n }\n }\n\n /**\n * Handle drag over\n */\n onDragOver(event: DragEvent, index: number): void {\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move';\n }\n this.dragOverIndex = index;\n }\n\n /**\n * Handle drop\n */\n onDrop(event: DragEvent, dropIndex: number): void {\n event.preventDefault();\n if (this.draggedIndex !== null && this.draggedIndex !== dropIndex) {\n this.columnReordered.emit({\n fromIndex: this.draggedIndex,\n toIndex: dropIndex\n });\n }\n this.draggedIndex = null;\n }\n\n /**\n * Handle drag end\n */\n onDragEnd(event: DragEvent): void {\n this.draggedIndex = null;\n this.dragOverIndex = null;\n }\n\n /**\n * Get display name for column\n */\n getColumnDisplayName(column: ColumnConfig): string {\n return column.header || column.key;\n }\n\n /**\n * Get data type label\n */\n getDataTypeLabel(column: ColumnConfig): string {\n const type = this.dataTypes.find(dt => dt.value === column.dataType);\n return type?.label || 'Text';\n }\n}\n\n","<div class=\"column-list\" (clickOutside)=\"closeMenu()\">\n <div class=\"column-list-header\">\n <h3>Columns</h3>\n <div class=\"add-column-menu\" [class.open]=\"showAddMenu\">\n <button class=\"add-btn\" (click)=\"showAddMenu = !showAddMenu\" title=\"Add Column\">\n <span>+ Add Column</span>\n </button>\n @if (showAddMenu) {\n <div class=\"add-menu\">\n @for (type of dataTypes; track type.value) {\n <button\n class=\"menu-item\"\n (click)=\"onAddColumn(type.value)\">\n {{ type.label }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"column-items\">\n @for (column of columns; track column.key; let i = $index) {\n <div\n class=\"column-item\"\n [class.selected]=\"selectedIndex === i\"\n [class.dragging]=\"draggedIndex === i\"\n [class.drag-over]=\"dragOverIndex === i\"\n (click)=\"onColumnClick(i)\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event, i)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n (dragleave)=\"dragOverIndex = null\">\n <div class=\"drag-handle\">\n <span>☰</span>\n </div>\n <div class=\"column-info\">\n <div class=\"column-name\">{{ getColumnDisplayName(column) }}</div>\n <div class=\"column-meta\">\n <span class=\"column-type\">{{ getDataTypeLabel(column) }}</span>\n <span class=\"column-key\">{{ column.key }}</span>\n </div>\n </div>\n <button\n class=\"delete-btn\"\n (click)=\"onDelete(i, $event)\"\n title=\"Delete Column\">\n ×\n </button>\n </div>\n }\n\n @if (columns.length === 0) {\n <div class=\"empty-state\">\n <p>No columns yet. Click \"Add Column\" to get started.</p>\n </div>\n }\n </div>\n</div>\n","/**\n * Table Config Editor Component\n * Form for table-level configuration\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TableConfig } from '../../../models/table-config.interface';\n\n@Component({\n selector: 'st-table-config-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './table-config-editor.component.html',\n styleUrls: ['./table-config-editor.component.scss']\n})\nexport class TableConfigEditorComponent implements OnInit, OnChanges {\n @Input() config!: TableConfig;\n @Output() configUpdated = new EventEmitter<Partial<TableConfig>>();\n\n form!: FormGroup;\n\n readonly pageSizeOptions = [10, 25, 50, 100, 200];\n\n constructor(private fb: FormBuilder) {}\n\n ngOnInit(): void {\n this.buildForm();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config'] && !changes['config'].firstChange && this.form) {\n this.updateForm();\n }\n }\n\n /**\n * Build the reactive form\n */\n private buildForm(): void {\n this.form = this.fb.group({\n pagination: this.fb.group({\n enabled: [this.config.pagination?.enabled !== false],\n pageSize: [this.config.pagination?.pageSize || 25],\n showTopControls: [this.config.pagination?.showTopControls || false],\n showBottomControls: [this.config.pagination?.showBottomControls !== false],\n variant: [this.config.pagination?.variant || 'fluid']\n }),\n sorting: this.fb.group({\n enabled: [this.config.sorting?.enabled !== false],\n multiColumn: [this.config.sorting?.multiColumn || false],\n mode: [this.config.sorting?.mode || 'server']\n }),\n filtering: this.fb.group({\n enabled: [this.config.filtering?.enabled || false],\n mode: [this.config.filtering?.mode || 'server']\n }),\n display: this.fb.group({\n stickyHeader: [this.config.display?.stickyHeader !== false],\n maxHeight: [this.config.display?.maxHeight || null],\n virtualScroll: this.fb.group({\n enabled: [this.config.display?.virtualScroll?.enabled || false],\n itemSize: [this.config.display?.virtualScroll?.itemSize || 48],\n bufferSize: [this.config.display?.virtualScroll?.bufferSize || 5],\n viewportHeight: [this.config.display?.virtualScroll?.viewportHeight || 600]\n })\n }),\n keyboardNavigation: this.fb.group({\n enabled: [this.config.features?.keyboardNavigation?.enabled || false]\n })\n });\n\n // Emit changes when form values change\n this.form.valueChanges.subscribe(() => {\n this.onFormChange();\n });\n\n this.updateForm();\n }\n\n /**\n * Update form values from config\n */\n private updateForm(): void {\n if (!this.form || !this.config) return;\n\n this.form.patchValue({\n pagination: {\n enabled: this.config.pagination?.enabled !== false,\n pageSize: this.config.pagination?.pageSize || 25,\n showTopControls: this.config.pagination?.showTopControls || false,\n showBottomControls: this.config.pagination?.showBottomControls !== false,\n variant: this.config.pagination?.variant || 'fluid'\n },\n sorting: {\n enabled: this.config.sorting?.enabled !== false,\n multiColumn: this.config.sorting?.multiColumn || false,\n mode: this.config.sorting?.mode || 'server'\n },\n filtering: {\n enabled: this.config.filtering?.enabled || false,\n mode: this.config.filtering?.mode || 'server'\n },\n display: {\n stickyHeader: this.config.display?.stickyHeader !== false,\n maxHeight: this.config.display?.maxHeight || null,\n virtualScroll: {\n enabled: this.config.display?.virtualScroll?.enabled || false,\n itemSize: this.config.display?.virtualScroll?.itemSize || 48,\n bufferSize: this.config.display?.virtualScroll?.bufferSize || 5,\n viewportHeight: this.config.display?.virtualScroll?.viewportHeight || 600\n }\n },\n keyboardNavigation: {\n enabled: this.config.features?.keyboardNavigation?.enabled || false\n }\n }, { emitEvent: false });\n }\n\n /**\n * Handle form changes\n */\n private onFormChange(): void {\n if (this.form.valid) {\n const formValue = this.form.value;\n \n // Transform to match TableConfig structure\n const updates: Partial<TableConfig> = {\n pagination: formValue.pagination,\n sorting: formValue.sorting,\n filtering: formValue.filtering,\n display: formValue.display,\n features: {\n keyboardNavigation: formValue.keyboardNavigation\n }\n };\n \n this.configUpdated.emit(updates);\n }\n }\n}\n\n","<div class=\"table-config-editor\">\n <h3>Table Configuration</h3>\n\n <form [formGroup]=\"form\" class=\"config-form\">\n <!-- Pagination -->\n <div class=\"config-section\">\n <h4>Pagination</h4>\n <div formGroupName=\"pagination\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n @if (form.get('pagination.enabled')?.value) {\n <div class=\"form-group\">\n <label>Page Size</label>\n <select formControlName=\"pageSize\" class=\"form-control\">\n @for (size of pageSizeOptions; track size) {\n <option [value]=\"size\">\n {{ size }}\n </option>\n }\n </select>\n </div>\n }\n @if (form.get('pagination.enabled')?.value) {\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"showTopControls\">\n <span>Show Top Controls</span>\n </label>\n }\n @if (form.get('pagination.enabled')?.value) {\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"showBottomControls\">\n <span>Show Bottom Controls</span>\n </label>\n }\n @if (form.get('pagination.enabled')?.value) {\n <div class=\"form-group\">\n <label>Variant</label>\n <select formControlName=\"variant\" class=\"form-control\">\n <option value=\"fluid\">Fluid</option>\n <option value=\"compact\">Compact</option>\n </select>\n </div>\n }\n </div>\n </div>\n\n <!-- Sorting -->\n <div class=\"config-section\">\n <h4>Sorting</h4>\n <div formGroupName=\"sorting\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n @if (form.get('sorting.enabled')?.value) {\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"multiColumn\">\n <span>Multi-column</span>\n </label>\n }\n @if (form.get('sorting.enabled')?.value) {\n <div class=\"form-group\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n }\n </div>\n </div>\n\n <!-- Filtering -->\n <div class=\"config-section\">\n <h4>Filtering</h4>\n <div formGroupName=\"filtering\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n @if (form.get('filtering.enabled')?.value) {\n <div class=\"form-group\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n }\n </div>\n </div>\n\n <!-- Display -->\n <div class=\"config-section\">\n <h4>Display</h4>\n <div formGroupName=\"display\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"stickyHeader\">\n <span>Sticky Header</span>\n </label>\n \n <!-- Virtual Scroll Configuration -->\n <div class=\"subsection\" formGroupName=\"virtualScroll\">\n <h5>Virtual Scroll</h5>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Virtual Scrolling (for large datasets)</span>\n </label>\n \n @if (form.get('display.virtualScroll.enabled')?.value) {\n <div class=\"virtual-scroll-options\">\n <div class=\"form-group\">\n <label>Row Height (px)</label>\n <input type=\"number\" formControlName=\"itemSize\" class=\"form-control\" min=\"20\" max=\"200\">\n <small class=\"help-text\">Must be consistent for all rows</small>\n </div>\n \n <div class=\"form-group\">\n <label>Buffer Size (rows)</label>\n <input type=\"number\" formControlName=\"bufferSize\" class=\"form-control\" min=\"0\" max=\"20\">\n <small class=\"help-text\">Rows rendered above/below viewport</small>\n </div>\n \n <div class=\"form-group\">\n <label>Viewport Height (px)</label>\n <input type=\"number\" formControlName=\"viewportHeight\" class=\"form-control\" min=\"200\" max=\"2000\">\n <small class=\"help-text\">Height of scrollable container</small>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Keyboard Navigation -->\n <div class=\"config-section\">\n <h4>Keyboard Navigation</h4>\n <div formGroupName=\"keyboardNavigation\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Excel-like Navigation</span>\n </label>\n </div>\n </div>\n </form>\n</div>\n","/**\n * Sample data generator service\n * Generates sample data for preview based on column configurations\n */\n\nimport { Injectable } from '@angular/core';\nimport { ColumnConfig } from '../../models/column-config.interface';\nimport { CellDataType } from '../../models/cell-types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SampleDataGeneratorService {\n /**\n * Generate sample data based on column configurations\n * @param columns Column configurations\n * @param rowCount Number of rows to generate\n * @returns Array of sample data objects\n */\n generateSampleData(columns: ColumnConfig[], rowCount: number = 5): any[] {\n return Array.from({ length: rowCount }, (_, index) => {\n const row: any = {};\n columns.forEach(column => {\n row[column.key] = this.generateValueForColumn(column, index, columns);\n });\n return row;\n });\n }\n\n /**\n * Generate a sample value for a specific column\n * @param column Column configuration\n * @param rowIndex Row index (for variation)\n * @param allColumns All columns (for valueGetter context)\n * @returns Sample value\n */\n private generateValueForColumn(column: ColumnConfig, rowIndex: number, allColumns?: ColumnConfig[]): any {\n // Use valueGetter if provided\n if (column.valueGetter && allColumns) {\n // For preview, we'll generate a simple object\n const sampleRow = this.generateBasicSampleRow(allColumns);\n return column.valueGetter(sampleRow);\n }\n\n // Generate based on dataType\n switch (column.dataType) {\n case CellDataType.STRING:\n return this.generateStringValue(column, rowIndex);\n case CellDataType.NUMBER:\n return this.generateNumberValue(column, rowIndex);\n case CellDataType.DATE:\n return this.generateDateValue(rowIndex);\n case CellDataType.BOOLEAN:\n return this.generateBooleanValue(rowIndex);\n default:\n return this.generateStringValue(column, rowIndex);\n }\n }\n\n /**\n * Generate a basic sample row for valueGetter\n */\n private generateBasicSampleRow(columns: ColumnConfig[]): any {\n const row: any = {};\n columns.forEach(col => {\n row[col.key] = `Sample ${col.key}`;\n });\n return row;\n }\n\n /**\n * Generate string value\n */\n private generateStringValue(column: ColumnConfig, rowIndex: number): string {\n const key = column.key;\n const samples: Record<string, string[]> = {\n name: ['John Doe', 'Jane Smith', 'Bob Johnson', 'Alice Williams', 'Charlie Brown'],\n email: ['john@example.com', 'jane@example.com', 'bob@example.com', 'alice@example.com', 'charlie@example.com'],\n title: ['Manager', 'Developer', 'Designer', 'Analyst', 'Director'],\n status: ['Active', 'Inactive', 'Pending', 'Approved', 'Rejected'],\n city: ['New York', 'London', 'Tokyo', 'Paris', 'Sydney'],\n country: ['USA', 'UK', 'Japan', 'France', 'Australia']\n };\n\n // Check if we have predefined samples for this key\n if (samples[key]) {\n return samples[key][rowIndex % samples[key].length];\n }\n\n // Generate generic string\n return `${key.charAt(0).toUpperCase() + key.slice(1)} ${rowIndex + 1}`;\n }\n\n /**\n * Generate number value\n */\n private generateNumberValue(column: ColumnConfig, rowIndex: number): number {\n const key = column.key.toLowerCase();\n \n // Special handling for common numeric fields\n if (key.includes('age')) {\n return 20 + (rowIndex * 5) + Math.floor(Math.random() * 10);\n }\n if (key.includes('price') || key.includes('cost') || key.includes('amount') || key.includes('salary')) {\n return (rowIndex + 1) * 1000 + Math.floor(Math.random() * 500);\n }\n if (key.includes('quantity') || key.includes('count')) {\n return (rowIndex + 1) * 10;\n }\n if (key.includes('id')) {\n return rowIndex + 1;\n }\n\n // Generic number\n return (rowIndex + 1) * 100;\n }\n\n /**\n * Generate date value\n */\n private generateDateValue(rowIndex: number): Date {\n const baseDate = new Date(2024, 0, 1);\n baseDate.setDate(baseDate.getDate() + rowIndex * 7); // Increment by weeks\n return baseDate;\n }\n\n /**\n * Generate boolean value\n */\n private generateBooleanValue(rowIndex: number): boolean {\n return rowIndex % 2 === 0;\n }\n}\n\n","/**\n * Builder Preview Component\n * Live preview of table using st-table component\n */\n\nimport { Component, Input, OnInit, OnChanges, SimpleChanges, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableConfig } from '../../../models/table-config.interface';\nimport { SampleDataGeneratorService } from '../../services/sample-data-generator.service';\nimport { StTableComponent } from '../../../renderer/components/st-table/st-table.component';\n\n@Component({\n selector: 'st-builder-preview',\n standalone: true,\n imports: [CommonModule, StTableComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './builder-preview.component.html',\n styleUrls: ['./builder-preview.component.scss']\n})\nexport class BuilderPreviewComponent implements OnInit, OnChanges {\n @Input() tableConfig!: TableConfig;\n\n sampleData: any[] = [];\n isLoading = false;\n\n constructor(\n private sampleDataGenerator: SampleDataGeneratorService,\n ) {}\n\n ngOnInit(): void {\n this.generatePreviewData();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['tableConfig'] && !changes['tableConfig'].firstChange) {\n this.generatePreviewData();\n }\n }\n\n /**\n * Generate sample data for preview\n */\n private generatePreviewData(): void {\n if (!this.tableConfig || !this.tableConfig?.columns || this.tableConfig?.columns.length === 0) {\n this.sampleData = [];\n return;\n }\n\n this.isLoading = true;\n \n // Generate sample data based on columns\n setTimeout(() => {\n this.sampleData = this.sampleDataGenerator.generateSampleData(\n this.tableConfig.columns,\n 5 // Generate 5 sample rows\n );\n this.isLoading = false;\n }, 100);\n }\n\n /**\n * Refresh preview\n */\n refreshPreview(): void {\n this.generatePreviewData();\n }\n\n /**\n * Handle state change from preview table\n */\n onStateChange(event: any): void {\n // Preview is read-only, so we don't need to handle state changes\n // But we can log them for debugging\n console.log('Preview state change:', event);\n }\n}\n\n","<div class=\"builder-preview\">\n <div class=\"preview-header\">\n <h3>Live Preview</h3>\n <button class=\"refresh-btn\" (click)=\"refreshPreview()\" title=\"Refresh Preview\">\n ↻ Refresh\n </button>\n </div>\n\n <div class=\"preview-content\">\n @if (isLoading) {\n <div class=\"loading\">\n <p>Generating preview...</p>\n </div>\n }\n\n @if (!isLoading && tableConfig?.columns?.length === 0) {\n <div class=\"empty-state\">\n <p>Add columns to see preview</p>\n </div>\n }\n @if (tableConfig) {\n @if (!isLoading && tableConfig!.columns!.length > 0) {\n <st-table\n [tableConfig]=\"tableConfig\"\n [data]=\"sampleData\"\n (stateChange)=\"onStateChange($event)\">\n </st-table>\n }\n }\n\n </div>\n</div>\n","/**\n * Definition Builder Component\n * Main container component that orchestrates all builder sub-components\n */\n\nimport { Component, OnInit, OnDestroy, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { DefinitionBuilderService } from '../../services/definition-builder.service';\nimport { BuilderState } from '../../models/builder-state.interface';\nimport { BuilderToolbarComponent } from '../builder-toolbar/builder-toolbar.component';\nimport { ColumnListComponent } from '../column-list/column-list.component';\nimport { TableConfigEditorComponent } from '../table-config-editor/table-config-editor.component';\nimport { ColumnEditorComponent } from '../column-editor/column-editor.component';\nimport { BuilderPreviewComponent } from '../builder-preview/builder-preview.component';\n\n@Component({\n selector: 'st-definition-builder',\n standalone: true,\n imports: [\n CommonModule,\n BuilderToolbarComponent,\n ColumnListComponent,\n TableConfigEditorComponent,\n ColumnEditorComponent,\n BuilderPreviewComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './definition-builder.component.html',\n styleUrls: ['./definition-builder.component.scss']\n})\nexport class DefinitionBuilderComponent implements OnInit, OnDestroy {\n state: BuilderState;\n private stateSubscription?: Subscription;\n\n constructor(private builderService: DefinitionBuilderService) {\n this.state = this.builderService.getState();\n }\n\n ngOnInit(): void {\n // Subscribe to state changes\n this.stateSubscription = this.builderService.state$.subscribe(state => {\n this.state = state;\n });\n }\n\n ngOnDestroy(): void {\n this.stateSubscription?.unsubscribe();\n }\n\n /**\n * Handle new definition action\n */\n onNewDefinition(): void {\n if (this.state.hasUnsavedChanges) {\n if (!confirm('You have unsaved changes. Are you sure you want to create a new definition?')) {\n return;\n }\n }\n this.builderService.newDefinition();\n }\n\n /**\n * Handle column selection\n */\n onColumnSelected(index: number): void {\n this.builderService.selectColumn(index);\n }\n\n /**\n * Handle column deletion\n */\n onColumnDeleted(index: number): void {\n this.builderService.deleteColumn(index);\n }\n\n /**\n * Handle column reorder\n */\n onColumnReordered(fromIndex: number, toIndex: number): void {\n this.builderService.reorderColumns(fromIndex, toIndex);\n }\n\n /**\n * Handle column add\n */\n onColumnAdded(type?: string): void {\n // Convert string type to CellDataType enum if provided\n let dataType: any = undefined;\n if (type) {\n dataType = type as any; // Type is already a CellDataType string value\n }\n this.builderService.addColumn(dataType);\n }\n\n /**\n * Handle column update\n */\n onColumnUpdated(index: number, updates: any): void {\n this.builderService.updateColumn(index, updates);\n }\n\n /**\n * Handle table config update\n */\n onTableConfigUpdated(updates: any): void {\n this.builderService.updateTableSettings(updates);\n }\n\n /**\n * Handle preview toggle\n */\n onPreviewToggled(): void {\n this.builderService.togglePreview();\n }\n\n /**\n * Handle save action\n */\n onSaved(): void {\n this.builderService.markAsSaved();\n }\n\n /**\n * Handle column cancel\n */\n onColumnCancel(): void {\n this.builderService.clearSelection();\n }\n}\n\n","<div class=\"definition-builder\">\n <!-- Toolbar -->\n <st-builder-toolbar\n [hasUnsavedChanges]=\"state.hasUnsavedChanges\"\n (newDefinition)=\"onNewDefinition()\"\n (saved)=\"onSaved()\"\n (previewToggled)=\"onPreviewToggled()\">\n </st-builder-toolbar>\n\n <div class=\"builder-content\">\n <!-- Left Panel: Column List and Table Config -->\n <div class=\"left-panel\">\n <!-- Column List -->\n <st-column-list\n [columns]=\"state.tableConfig.columns\"\n [selectedIndex]=\"state.selectedColumnIndex\"\n (columnSelected)=\"onColumnSelected($event)\"\n (columnAdded)=\"onColumnAdded($event)\"\n (columnDeleted)=\"onColumnDeleted($event)\"\n (columnReordered)=\"onColumnReordered($event.fromIndex, $event.toIndex)\">\n </st-column-list>\n\n <!-- Table Config Editor -->\n <st-table-config-editor\n [config]=\"state.tableConfig\"\n (configUpdated)=\"onTableConfigUpdated($event)\">\n </st-table-config-editor>\n </div>\n\n <!-- Middle Panel: Column Editor -->\n @if (state.selectedColumn) {\n <div class=\"middle-panel\">\n <st-column-editor\n [column]=\"state.selectedColumn\"\n [columnIndex]=\"state.selectedColumnIndex!\"\n (columnUpdated)=\"onColumnUpdated(state.selectedColumnIndex!, $event)\"\n (cancel)=\"onColumnCancel()\">\n </st-column-editor>\n </div>\n }\n\n <!-- Right Panel: Preview -->\n @if (state.previewVisible) {\n <div class=\"right-panel\">\n <st-builder-preview\n [tableConfig]=\"state.tableConfig\">\n </st-builder-preview>\n </div>\n }\n </div>\n</div>\n","/**\n * Builder state interface - tracks the current state of the definition builder\n */\n\nimport { TableConfig } from '../../models/table-config.interface';\nimport { ColumnConfig } from '../../models/column-config.interface';\n\n/**\n * Current state of the definition builder\n */\nexport interface BuilderState {\n /**\n * Current table configuration being edited\n */\n tableConfig: TableConfig;\n\n /**\n * Currently selected column for editing (null if none selected)\n */\n selectedColumn: ColumnConfig | null;\n\n /**\n * Index of selected column in columns array\n */\n selectedColumnIndex: number | null;\n\n /**\n * Whether preview is visible\n */\n previewVisible: boolean;\n\n /**\n * Whether there are unsaved changes\n */\n hasUnsavedChanges: boolean;\n\n /**\n * Last saved configuration (for comparison)\n */\n lastSavedConfig?: TableConfig;\n}\n\n/**\n * Export format options\n */\nexport interface ExportOptions {\n /**\n * Export format type\n */\n format: 'json' | 'typescript';\n\n /**\n * Include comments in TypeScript export\n */\n includeComments?: boolean;\n\n /**\n * Variable name for TypeScript export\n */\n variableName?: string;\n\n /**\n * File name (without extension)\n */\n fileName?: string;\n}\n\n/**\n * Import result\n */\nexport interface ImportResult {\n /**\n * Whether import was successful\n */\n success: boolean;\n\n /**\n * Imported table configuration (if successful)\n */\n tableConfig?: TableConfig;\n\n /**\n * Error message (if failed)\n */\n error?: string;\n\n /**\n * Validation errors (if any)\n */\n validationErrors?: string[];\n}\n\n/**\n * Validation error for form fields\n */\nexport interface ValidationError {\n /**\n * Field path (e.g., 'columns[0].key')\n */\n field: string;\n\n /**\n * Error message\n */\n message: string;\n\n /**\n * Error code\n */\n code?: string;\n}\n\n","/**\n * Definition Builder Module\n * Module for the Visual UI Builder components\n */\n\nimport { NgModule } from '@angular/core';\n\n// Builder Components (all standalone)\nimport { DefinitionBuilderComponent } from './components/definition-builder/definition-builder.component';\nimport { BuilderToolbarComponent } from './components/builder-toolbar/builder-toolbar.component';\nimport { ColumnListComponent } from './components/column-list/column-list.component';\nimport { TableConfigEditorComponent } from './components/table-config-editor/table-config-editor.component';\nimport { BuilderPreviewComponent } from './components/builder-preview/builder-preview.component';\nimport { SmartTableModule } from '../smart-table.module';\nimport { SharedTableComponentsModule } from '../shared/shared-table-components.module';\n\n@NgModule({\n imports: [\n SmartTableModule,\n SharedTableComponentsModule,\n DefinitionBuilderComponent,\n BuilderToolbarComponent,\n ColumnListComponent,\n TableConfigEditorComponent,\n BuilderPreviewComponent,\n ],\n exports: [\n DefinitionBuilderComponent,\n BuilderToolbarComponent,\n ColumnListComponent,\n TableConfigEditorComponent,\n BuilderPreviewComponent,\n SharedTableComponentsModule\n ]\n})\nexport class DefinitionBuilderModule { }\n\n","import { Injectable } from '@angular/core';\nimport { Cell } from '../renderer/models/cell.class';\nimport { RowValidator, RowValidationResult } from '../models/row-validator.interface';\nimport { TableValidator, TableValidationResult } from '../models/table-validator.interface';\nimport { TableConfig } from '../models/table-config.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RowValidationService {\n /**\n * Validate a single row\n */\n validateRow(\n rowData: any,\n cells: Cell[],\n rowIndex: number,\n validator: RowValidator\n ): RowValidationResult {\n try {\n return validator.validateRow(rowData, cells, rowIndex);\n } catch (error: any) {\n return {\n valid: false,\n error: `Validation error: ${error.message}`,\n errors: [error.message]\n };\n }\n }\n \n /**\n * Validate entire table\n */\n validateTable(\n rows: any[],\n config: TableConfig,\n validator: TableValidator,\n rowValidationResults?: Map<number, RowValidationResult>\n ): TableValidationResult {\n try {\n return validator.validateTable(rows, config, rowValidationResults);\n } catch (error: any) {\n return {\n valid: false,\n globalErrors: [`Table validation error: ${error.message}`]\n };\n }\n }\n}\n\n","/**\n * Public API Surface of ngx-smart-table\n * Cell Configuration Model exports\n */\n\n// ============================================\n// Cell Types and Enums\n// ============================================\nexport * from './lib/models/cell-types';\n\n// ============================================\n// Strategy Interfaces\n// ============================================\nexport * from './lib/models/cell-strategies.interface';\n\n// ============================================\n// Cell State\n// ============================================\nexport * from './lib/renderer/models/cell-state.interface';\n\n// ============================================\n// Column Configuration\n// ============================================\nexport * from './lib/models/column-config.interface';\n\n// ============================================\n// Table State Management\n// ============================================\nexport * from './lib/renderer/models/table-types';\nexport * from './lib/renderer/models/table-state.interface';\nexport * from './lib/renderer/models/table-state.class';\nexport * from './lib/renderer/models/z-index.enum';\n\n// ============================================\n// Table Configuration\n// ============================================\nexport * from './lib/models/table-config.interface';\nexport { DEFAULT_TABLE_CONFIG, mergeTableConfig } from './lib/models/table-config.interface';\n\n// ============================================\n// Row Action Types\n// ============================================\nexport * from './lib/models/row-action.interface';\n\n// ============================================\n// Column Action Types\n// ============================================\nexport * from './lib/models/column-action.interface';\n\n// ============================================\n// Sheet Configuration and State\n// ============================================\nexport * from './lib/models/sheet-config.interface';\nexport * from './lib/models/sheet-action.interface';\nexport * from './lib/renderer/models/sheet-state.interface';\nexport * from './lib/renderer/models/sheet-state.class';\n\n// ============================================\n// Workbook Configuration and State\n// ============================================\nexport * from './lib/models/workbook-config.interface';\nexport * from './lib/models/workbook-action.interface';\nexport * from './lib/renderer/models/workbook-state.interface';\nexport * from './lib/renderer/models/workbook-state.class';\n\n// ============================================\n// Cell Class\n// ============================================\nexport * from './lib/renderer/models/cell.class';\n\n// ============================================\n// Base Column Config Class\n// ============================================\nexport * from './lib/models/base-column-config.class';\n\n// ============================================\n// Default Formatters\n// ============================================\nexport * from './lib/strategies/default-formatters';\n\n// ============================================\n// Default Validators\n// ============================================\nexport * from './lib/strategies/default-validators';\n\n// ============================================\n// Validation interfaces\n// ============================================\nexport * from './lib/renderer/models/row-validation-state.interface';\nexport * from './lib/renderer/models/table-validation-state.interface';\n\n// ============================================\n// Default Editors\n// ============================================\nexport * from './lib/strategies/default-editors';\nexport * from './lib/editors/index';\n\n// ============================================\n// Column Config Factory\n// ============================================\nexport * from './lib/factories/column-config.factory';\n\n// ============================================\n// Angular Components\n// ============================================\nexport * from './lib/renderer/components/st-cell/st-cell.component';\nexport * from './lib/renderer/components/st-table/st-table.component';\nexport * from './lib/renderer/components/st-header/st-header.component';\nexport * from './lib/renderer/components/st-column-menu/st-column-menu.component';\nexport * from './lib/renderer/components/st-column-visibility/st-column-visibility.component';\nexport * from './lib/renderer/components/st-column-filter/st-column-filter.component';\nexport * from './lib/renderer/components/st-pagination/st-pagination.component';\nexport * from './lib/renderer/components/st-add-column-button/st-add-column-button.component';\nexport * from './lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component';\nexport * from './lib/renderer/components/st-table-actions/st-table-actions.component';\nexport * from './lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component';\nexport * from './lib/renderer/components/st-sheet/st-sheet.component';\nexport * from './lib/renderer/components/st-sheet-actions/st-sheet-actions.component';\nexport * from './lib/renderer/components/st-workbook/st-workbook.component';\n\n// ============================================\n// Directives\n// ============================================\nexport * from './lib/renderer/directives/click-outside.directive';\nexport * from './lib/renderer/directives/st-column-resize.directive';\nexport * from './lib/renderer/directives/st-keyboard-navigation.directive';\n\n// ============================================\n// Smart Table Module\n// ============================================\nexport * from './lib/smart-table.module';\n\n// ============================================\n// Shared Components Module\n// ============================================\nexport * from './lib/shared/shared-table-components.module';\n\n// ============================================\n// Definition Builder\n// ============================================\nexport * from './lib/builder/components/definition-builder/definition-builder.component';\nexport * from './lib/builder/components/builder-toolbar/builder-toolbar.component';\nexport * from './lib/builder/components/column-list/column-list.component';\nexport * from './lib/builder/components/column-editor/column-editor.component';\nexport * from './lib/builder/components/table-config-editor/table-config-editor.component';\nexport * from './lib/builder/components/builder-preview/builder-preview.component';\nexport * from './lib/builder/services/definition-builder.service';\nexport * from './lib/builder/services/definition-export.service';\nexport * from './lib/builder/services/definition-import.service';\nexport * from './lib/builder/services/sample-data-generator.service';\nexport * from './lib/builder/models/builder-state.interface';\nexport * from './lib/builder/definition-builder.module';\n\n// ============================================\n// Validation Services\n// ============================================\nexport * from './lib/services/json-schema-validator.service';\nexport * from './lib/services/validation-logger.service';\nexport * from './lib/services/row-validation.service';\n\n// ============================================\n// Virtual Scroll Service\n// ============================================\nexport * from './lib/services/virtual-scroll.service';\n\n// ============================================\n// Autosave\n// ============================================\nexport * from './lib/models/autosave-config.interface';\nexport * from './lib/services/autosave.service';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ValidationLoggerService","i1","i1.JsonSchemaValidatorService","i2.ValidationLoggerService","i1.DefinitionBuilderService","i2.DefinitionExportService","i3.DefinitionImportService","i1.SampleDataGeneratorService"],"mappings":"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"}