@aquera/ngx-smart-table 0.0.9-alpha → 0.0.10-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.
- package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +9 -3
- package/fesm2015/aquera-ngx-smart-table.mjs +8 -2
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -1
- package/fesm2020/aquera-ngx-smart-table.mjs +8 -2
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +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-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/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/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/directives/click-outside.directive.ts","../../../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/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 // 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 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 this._rowCount = rowCount;\n this._columnCount = columnCount;\n \n // Update total rows in validation state\n this.setValidationRowCount(rowCount);\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 */\n moveFocus(direction: NavigationDirection): 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 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 \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 }\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 * 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 * 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 portalDiv?: HTMLElement;\n private eventListeners: Array<{ event: string; handler: EventListener }> = [];\n private optionsSubscription?: Subscription;\n private currentOptions: (SelectOption | string)[] = [];\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 // 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 after render\n setTimeout(() => {\n this.select?.focus();\n this.select?.click();\n \n // Find the portal div for multi-select click detection\n if (this.options.multiple) {\n // Portal div is appended to document body\n this.portalDiv = document.querySelector('.nile-select-portal-append') as HTMLElement;\n }\n }, 0);\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 } else if (value) {\n this.select.value = [String(value)];\n } else {\n this.select.value = [];\n }\n } else {\n // Handle single selection\n this.select.value = 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 if (this.options.portal !== undefined) {\n this.select.portal = this.options.portal;\n } else {\n this.select.portal = true; // Default to portal mode for better positioning\n }\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 // Clear existing options\n while (this.select.firstChild) {\n this.select.removeChild(this.select.firstChild);\n }\n\n // Re-append with new options\n this.createAndAppendOptions(this.currentOptions);\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 * @param options - The options to render\n */\n private createAndAppendOptions(options: (SelectOption | string)[]): void {\n if (!this.select) return;\n\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 primary save trigger\n const changeHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n if (validateOnSave && !this.select?.checkValidity()) {\n this.select?.reportValidity();\n return;\n }\n \n // Only save immediately for single-select\n // Multi-select saves on outside click\n if (!this.options.multiple) {\n context.onSave(this.parseValue(customEvent.detail.value));\n }\n };\n this.select.addEventListener('nile-change', changeHandler);\n this.eventListeners.push({ event: 'nile-change', handler: changeHandler });\n\n // Handle blur as secondary save trigger\n const blurHandler = (e: Event) => {\n if (validateOnSave && !this.select?.checkValidity()) {\n this.select?.reportValidity();\n return;\n }\n // context.onSave(this.getCurrentValue());\n };\n this.select.addEventListener('nile-blur', blurHandler);\n this.eventListeners.push({ event: 'nile-blur', handler: blurHandler });\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 // For multi-select: detect clicks outside portal and select\n if (this.options.multiple) {\n const documentClickHandler = (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const target = mouseEvent.target as HTMLElement;\n \n // Check if portal div exists (might take a moment to render)\n if (!this.portalDiv) {\n this.portalDiv = document.querySelector('.nile-select-portal-append') as HTMLElement;\n }\n \n // Determine if click is inside the select or portal\n const clickedInsideSelect = this.select?.contains(target);\n const clickedInsidePortal = this.portalDiv?.contains(target);\n \n // If clicked outside both select and portal, save and close\n if (!clickedInsideSelect && !clickedInsidePortal) {\n if (validateOnSave && !this.select?.checkValidity()) {\n this.select?.reportValidity();\n return;\n }\n context.onSave(this.getCurrentValue());\n }\n // Otherwise, click is inside - do nothing (dropdown stays open)\n };\n \n // Add to document with capture phase\n document.addEventListener('click', documentClickHandler, true);\n this.eventListeners.push({ \n event: 'document-click', // Use custom name to identify it\n handler: documentClickHandler \n });\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 all event listeners\n if (this.select) {\n this.eventListeners.forEach(({ event, handler }) => {\n if (event === 'document-click') {\n // Remove from document for multi-select click handler\n document.removeEventListener('click', handler, true);\n } else {\n // Remove from select element\n this.select?.removeEventListener(event, handler);\n }\n });\n this.eventListeners = [];\n \n this.select.remove();\n this.select = undefined;\n this.portalDiv = undefined; // Clean up portal reference\n }\n }\n\n focus(): void {\n this.select?.focus();\n }\n\n getCurrentValue(): T {\n if (!this.select) {\n return (this.options.multiple ? [] : '') as unknown as T;\n }\n \n const value = this.select.value;\n \n // Handle multiple selection\n if (this.options.multiple) {\n return (Array.isArray(value) ? value : [value]) as unknown as T;\n }\n \n // Handle single selection\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 { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef, AfterViewInit, TemplateRef, HostListener } from '@angular/core';\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 templateUrl: './st-cell.component.html',\n styleUrls: ['./st-cell.component.scss'],\n})\nexport class StCellComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() cell!: Cell<any>;\n @Input() editMode: EditMode = EditMode.CLICK;\n @Input() tableState?: TableState;\n @Input() tableConfig?: TableConfig;\n @Input() columnIndex?: number;\n \n @Output() cellChange = new EventEmitter<CellChangeEvent>();\n @Output() cellEdit = new EventEmitter<CellEditEvent>();\n @Output() cellSave = new EventEmitter<CellSaveEvent>();\n @Output() cellCancel = new EventEmitter<CellCancelEvent>();\n @Output() cellSaveAndNavigate = new EventEmitter<{event: KeyboardEvent, direction: NavigationDirection}>();\n \n @ViewChild('editorContainer', { read: ElementRef }) editorContainer?: ElementRef;\n \n private editorCleanup?: () => void;\n\n private editingPositionSubscription?: any;\n\n constructor(\n ) {}\n\n ngOnInit(): void {\n // Subscribe to editing position changes\n // When another cell starts editing, save this cell if it's currently editing\n if (this.tableState && this.columnIndex !== undefined) {\n this.editingPositionSubscription = this.tableState.editingCellPosition$.subscribe(position => {\n const rowIndex = this.cell.getRowIndex();\n \n // If this cell is currently editing\n if (this.cell.isEditing() && rowIndex !== undefined) {\n // And the new editing position is a different cell\n if (position && \n (position.rowIndex !== rowIndex || position.columnIndex !== this.columnIndex)) {\n // Force save this cell\n this.saveEdit(this.cell.getValue());\n }\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n // If cell is already in editing mode, render the editor\n if (this.cell.isEditing() && this.editorContainer) {\n this.renderEditor();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupEditor();\n \n // Unsubscribe from editing position changes\n if (this.editingPositionSubscription) {\n this.editingPositionSubscription.unsubscribe();\n }\n }\n\n get isEditable(): boolean {\n const config = this.cell.getColumnConfig();\n return config.editable ?? false;\n }\n\n get validationError(): string | undefined {\n // Read validation state without triggering validation\n // This prevents ExpressionChangedAfterItHasBeenCheckedError\n const state = this.cell.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 // Only return generic message if cell is marked as invalid\n if (!this.cell.isValid()) {\n return 'Invalid value';\n }\n \n return undefined;\n }\n\n get hasCellTemplate(): boolean {\n const config = this.cell.getColumnConfig();\n return !!config.cellTemplate;\n }\n\n get cellTemplate(): TemplateRef<any> | null {\n return this.cell.getColumnConfig().cellTemplate || null;\n }\n\n get templateContext(): any {\n return {\n $implicit: this.cell.getValue(),\n cell: this.cell,\n rowData: this.cell.getRowData(),\n rowIndex: this.cell.getRowIndex()\n };\n }\n\n @HostListener('keydown', ['$event'])\n onCellKeyDown(event: KeyboardEvent): void {\n // Only handle if this cell is focused\n if (!this.cell.isFocused()) {\n return;\n }\n \n // Use NavigationKey enum for type-safe key checking\n switch (event.key as NavigationKey) {\n case NavigationKey.ENTER:\n if (this.cell.isEditing()) {\n // Save and let navigation happen\n event.preventDefault();\n event.stopPropagation();\n this.saveEdit(this.cell.getValue());\n // Emit event to trigger navigation down\n this.cellSaveAndNavigate.emit({ event, direction: NavigationDirection.DOWN });\n }\n // If not editing, let directive handle navigation\n break;\n \n case NavigationKey.TAB:\n if (this.cell.isEditing()) {\n // Save and let navigation happen\n event.preventDefault();\n event.stopPropagation();\n this.saveEdit(this.cell.getValue());\n const direction = event.shiftKey ? NavigationDirection.LEFT : NavigationDirection.RIGHT;\n this.cellSaveAndNavigate.emit({ event, direction });\n }\n // If not editing, let directive handle navigation\n break;\n \n case NavigationKey.ESCAPE:\n if (this.cell.isEditing()) {\n event.preventDefault();\n event.stopPropagation();\n this.cancelEdit();\n // Stay focused on same cell (no navigation)\n }\n break;\n \n default:\n // Check for alphanumeric keys when focused but not editing\n if (!this.cell.isEditing() && this.isAlphanumericKey(event)) {\n if (this.canEditViaKeyboard()) {\n event.preventDefault();\n event.stopPropagation();\n // Start editing with the pressed key as initial value\n this.startEditWithKey(event.key);\n }\n }\n break;\n }\n }\n \n /**\n * Check if Enter key can trigger editing\n * Using EditMode enum values\n */\n private canEditViaEnter(): boolean {\n return this.isEditable && \n (this.editMode === EditMode.ENTER || this.editMode === EditMode.CLICK);\n }\n \n /**\n * Check if keyboard can trigger editing (for alphanumeric and double-click)\n */\n private canEditViaKeyboard(): boolean {\n return this.isEditable && \n (this.editMode === EditMode.ENTER || this.editMode === EditMode.CLICK);\n }\n \n /**\n * Check if a key is alphanumeric (single character)\n */\n private isAlphanumericKey(event: KeyboardEvent): boolean {\n // Single character keys (letters, numbers, symbols)\n return event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;\n }\n \n /**\n * Start editing with a specific key as the initial value\n */\n private startEditWithKey(key: string): void {\n const canStart = this.cell.startEdit();\n if (canStart) {\n const column = this.cell.getColumnConfig();\n const editor = column.editor;\n \n // Only set initial keypress value if editor accepts it\n // Default to true for backward compatibility with existing editors\n const acceptsKeypress = editor?.acceptsInitialKeypress !== false;\n \n if (acceptsKeypress) {\n // Replace current value with the key\n this.cell.setValue(key, false);\n }\n \n const editEvent: CellEditEvent = {\n cell: this.cell,\n value: acceptsKeypress ? key : this.cell.getValue(),\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n cellState: this.cell.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 // Focus is handled by parent st-table component\n }\n\n onCellDoubleClick(): void {\n // Double-click starts editing regardless of EditMode (Excel-like behavior)\n if (this.isEditable && !this.cell.isEditing()) {\n this.startEdit();\n }\n }\n\n private startEdit(): void {\n const canStart = this.cell.startEdit();\n if (canStart) {\n const column = this.cell.getColumnConfig();\n \n // Notify TableState that this cell is now editing\n if (this.tableState && this.columnIndex !== undefined) {\n const rowIndex = this.cell.getRowIndex();\n if (rowIndex !== undefined) {\n this.tableState.setEditingCell(rowIndex, this.columnIndex);\n }\n }\n \n const editEvent: CellEditEvent = {\n cell: this.cell,\n value: this.cell.getValue(),\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n cellState: this.cell.getState()\n };\n this.cellEdit.emit(editEvent);\n \n // Wait for Angular to render the editor container\n setTimeout(() => {\n this.renderEditor();\n }, 0);\n }\n }\n\n private renderEditor(): void {\n if (!this.editorContainer) {\n return;\n }\n\n const column = this.cell.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 = this.cell.getValue();\n const container = this.editorContainer.nativeElement;\n \n // Create editor context\n const context: CellEditorContext<any> = {\n value,\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n onChange: (newValue: any) => {\n // Trigger eager validation if enabled\n if (this.tableConfig?.validation?.mode === 'eager') {\n // Update cell value temporarily for validation\n this.cell.setValue(newValue, true); // skip validation to avoid double validation\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 // Call editor's edit method\n editor.edit(context);\n \n // Store cleanup callback\n this.editorCleanup = () => {\n if (editor.destroy) {\n editor.destroy();\n }\n // Clear container\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n };\n }\n\n private saveEdit(newValue: any): void {\n const previousValue = this.cell.getValue();\n const wasValid = this.cell.isValid();\n const success = this.cell.saveEdit(newValue);\n \n if (success) {\n const column = this.cell.getColumnConfig();\n const cellState = this.cell.getState();\n const isValid = this.cell.isValid();\n \n // Notify TableState that editing ended\n if (this.tableState) {\n this.tableState.clearEditingCell();\n \n // Update validation state (lazy mode - on save)\n this.updateValidationState();\n }\n \n // Emit save event\n const saveEvent: CellSaveEvent = {\n cell: this.cell,\n newValue: newValue,\n previousValue: previousValue,\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n isValid: isValid,\n validationErrors: cellState.error ? [cellState.error] : undefined,\n cellState: cellState\n };\n this.cellSave.emit(saveEvent);\n \n // Emit change event\n const changeEvent: CellChangeEvent = {\n cell: this.cell,\n oldValue: previousValue,\n newValue: newValue,\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n wasValid: wasValid,\n isValid: isValid,\n cellState: cellState\n };\n this.cellChange.emit(changeEvent);\n \n this.cleanupEditor();\n }\n // If validation fails, keep editing mode\n }\n \n /**\n * Update validation state in TableState\n * Called on save (lazy mode) or on change (eager mode)\n */\n private updateValidationState(): void {\n if (!this.tableState) return;\n \n const column = this.cell.getColumnConfig();\n const isValid = this.cell.isValid();\n const error = this.cell.getState().error;\n const rowIndex = this.cell.getRowIndex();\n \n // Only update if rowIndex is defined\n if (rowIndex === undefined) return;\n \n this.tableState.updateCellValidation(\n rowIndex,\n column.key,\n isValid,\n error\n );\n }\n \n /**\n * Trigger eager validation (on every change)\n */\n private triggerEagerValidation(): void {\n if (!this.tableState || !this.tableConfig) return;\n \n const validationMode = this.tableConfig.validation?.mode || 'lazy';\n if (validationMode !== 'eager') return;\n \n // Re-validate the cell\n this.cell.validate();\n \n // Update validation state\n this.updateValidationState();\n }\n\n private cancelEdit(): void {\n const column = this.cell.getColumnConfig();\n const cellState = this.cell.getState();\n \n // Notify TableState that editing ended\n if (this.tableState) {\n this.tableState.clearEditingCell();\n }\n \n const cancelEvent: CellCancelEvent = {\n cell: this.cell,\n value: this.cell.getValue(),\n previousValue: cellState.previousValue,\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n cellState: cellState\n };\n \n this.cell.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 <ng-container *ngIf=\"!cell.isEditing()\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>","/**\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 } from '@angular/core';\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 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","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, ElementRef, AfterViewInit, OnChanges, SimpleChanges } from '@angular/core';\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 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 <nile-select \n *ngIf=\"availableOperators.length > 1\"\n label=\"Operator\"\n [value]=\"selectedOperator\"\n (nile-change)=\"onOperatorChange($event)\"\n class=\"filter-operator\">\n <nile-option \n *ngFor=\"let op of availableOperators\" \n [value]=\"op.value\">\n {{ op.label }}\n </nile-option>\n </nile-select>\n \n <!-- Input Field based on type -->\n <div class=\"filter-value-section\">\n \n <!-- Text Input -->\n <nile-input \n *ngIf=\"inputType === 'text'\"\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 <!-- Number Input -->\n <nile-input \n *ngIf=\"inputType === 'number'\"\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 <!-- Date Input -->\n <nile-input \n *ngIf=\"inputType === 'date'\"\n type=\"date\"\n label=\"Value\"\n [value]=\"filterValue\"\n (nile-input)=\"onValueInput($event)\"\n class=\"filter-value-input\">\n </nile-input>\n \n <!-- Checkbox Input -->\n <nile-checkbox\n *ngIf=\"inputType === 'checkbox'\"\n [checked]=\"filterValue\"\n (nile-change)=\"onCheckboxChange($event)\"\n class=\"filter-checkbox\">\n {{ filterValue ? 'True' : 'False' }}\n </nile-checkbox>\n \n <!-- Single Select Dropdown -->\n <nile-select \n *ngIf=\"inputType === 'select'\"\n label=\"Value\"\n [value]=\"filterValue\"\n placeholder=\"-- Select --\"\n (nile-change)=\"onSelectChange($event)\"\n class=\"filter-value-select\">\n <nile-option \n *ngFor=\"let option of dropdownOptions\" \n [value]=\"option.value\">\n {{ option.label }}\n </nile-option>\n </nile-select>\n \n <!-- Multi-Select with Radio Group as example (or keep checkboxes) -->\n <div *ngIf=\"inputType === 'multiselect'\" class=\"filter-multiselect\">\n <label class=\"multiselect-title\">Select Values</label>\n <div class=\"multiselect-options\">\n <nile-checkbox\n *ngFor=\"let option of dropdownOptions\"\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 </div>\n <div *ngIf=\"dropdownOptions.length === 0\" class=\"empty-state\">\n No options available\n </div>\n </div>\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 } from '@angular/core';\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 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<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\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 <nile-menu *ngIf=\"!isFilterOpen\">\n <!-- Dynamically render all visible actions -->\n <ng-container *ngFor=\"let action of visibleActions; let i = index; let last = last\">\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n <span class=\"checkmark\" *ngIf=\"isActionActive(action)\">✓</span>\n <nile-icon slot=\"prefix\" *ngIf=\"action.icon && !isActionActive(action)\" [name]=\"action.icon\"></nile-icon>\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n <nile-divider *ngIf=\"shouldShowDividerAfter(action, i, last)\"></nile-divider>\n </ng-container>\n \n <!-- Fallback if no actions -->\n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\n </nile-menu>\n \n <!-- Filter popup (conditionally rendered) -->\n <st-column-filter\n #filterPopup\n *ngIf=\"isFilterOpen && context\"\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 </div>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\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 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","<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-overlay\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"dropdown-menu\" [ngStyle]=\"dropdownStyle\">\n <nile-menu *ngIf=\"isOpen\" class=\"dropdown-menu\" [style.left.px]=\"dropdownStyle.left\" [style.top.px]=\"dropdownStyle.top\">\n <ng-container *ngFor=\"let action of visibleActions\">\n <nile-menu-item [class.disabled]=\"isActionDisabled(action)\" (click)=\"onActionClick(action)\" class=\"action-label\">\n <nile-icon *ngIf=\"action.icon\" size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </ng-container>\n \n <nile-menu-item *ngIf=\"visibleActions.length === 0\">No actions available</nile-menu-item>\n </nile-menu>\n </div>\n\n </div>\n","/**\n * st-header Component\n * Encapsulates column-specific logic including sorting and filtering\n */\n\nimport { Component, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\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 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 <button *ngIf=\"isMenuEnabled()\" \n 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 </div>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\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 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<div class=\"dropdown-container\" *ngIf=\"isOpen\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closeMenu()\"></div>\n \n <!-- Main Menu -->\n <div class=\"dropdown-menu\" *ngIf=\"currentView === 'main'\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n <!-- Add Column -->\n <nile-menu-item *ngIf=\"allowAddColumn\" (click)=\"onAddColumn($event)\">\n <nile-icon slot=\"prefix\" name=\"plus\" size=\"12\"></nile-icon>\n Add Column\n </nile-menu-item>\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 <!-- Column Visibility Submenu -->\n <div class=\"dropdown-menu\" *ngIf=\"currentView === 'columns'\" [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 <nile-menu-item \n *ngFor=\"let column of columnsVisibility\"\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 </nile-menu>\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})\nexport class StKeyboardNavigationDirective {\n @Input() tableState!: TableState;\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 this.tableState.moveFocus(direction);\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);\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})\nexport class StColumnResizeDirective implements OnDestroy {\n /**\n * Column configuration\n */\n @Input() column!: ColumnConfig<any>;\n\n /**\n * Emits when column is resized\n */\n @Output() columnResized = 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 // Update column width (mutate Flyweight config)\n (this.column as any).width = newWidth;\n \n // Update element width immediately for visual feedback\n // this.el.nativeElement.style.width = `${newWidth}px`;\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 { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, ViewChild, ElementRef, AfterViewInit, HostListener } from '@angular/core';\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';\n\n@Component({\n selector: 'st-table',\n templateUrl: './st-table.component.html',\n styleUrls: ['./st-table.component.scss']\n})\nexport class StTableComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n // Z-Index constants for template use\n readonly ZIndex = TableZIndex;\n \n // NEW: Primary configuration input\n @Input() tableConfig!: TableConfig;\n \n // NEW: Raw data input (alternative to cellGrid)\n @Input() data?: any[];\n \n // NEW: Observable/BehaviorSubject data input (for reactive data streams)\n @Input() data$?: Observable<any[]> | BehaviorSubject<any[]>;\n \n @Input() tableState?: TableState;\n \n // DEPRECATED: Use tableConfig instead\n @Input() enableSorting: boolean = true;\n @Input() enableFiltering: boolean = true;\n \n // NEW: State change output\n @Output() stateChange = new EventEmitter<TableStateChangeEvent>();\n \n // NEW: Data change output (for async data updates)\n @Output() dataChange = new EventEmitter<DataChangeEvent>();\n \n // EXISTING: Cell and column events\n @Output() cellEdit = new EventEmitter<CellEditEvent>();\n @Output() cellSave = new EventEmitter<CellSaveEvent>();\n @Output() cellCancel = new EventEmitter<CellCancelEvent>();\n @Output() cellChange = new EventEmitter<CellChangeEvent>();\n @Output() columnResized = new EventEmitter<ColumnResizeEvent>();\n @Output() columnMoved = new EventEmitter<ColumnMoveEvent>();\n \n // NEW: Configuration validation output\n @Output() configValidationErrors = new EventEmitter<SchemaValidationError[]>();\n \n // NEW: Column management output\n @Output() columnAdded = new EventEmitter<ColumnAddEvent>();\n \n // NEW: Row action output\n @Output() rowAction = new EventEmitter<RowActionEvent>();\n \n // NEW: Validation state change output\n @Output() validationStateChange = new EventEmitter<TableValidationState>();\n \n // NEW: Optional validation flag\n @Input() validateConfig: boolean = false;\n \n // Internal state\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 internalData$: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);\n private previousData: any[] = [];\n mergedConfig!: TableConfig;\n \n // Modal state\n public showColumnModal: boolean = false;\n \n // Cached visible columns and cell grid to prevent re-creation on every change detection\n public visibleColumns: ColumnConfig<any>[] = [];\n public visibleCellGrid: Cell<any>[][] = [];\n \n // Row actions dropdown state\n public dropdownState: {\n isOpen: boolean;\n position: { x: number; y: number };\n context: RowActionContext | null;\n } = {\n isOpen: false,\n position: { x: 0, y: 0 },\n context: null\n };\n \n public skeletonColumns?: number[];\n public skeletonRows?: number[];\n\n // Column menu dropdown state\n public columnMenuState: {\n isOpen: boolean;\n position: { x: number; y: number };\n context: ColumnActionContext | null;\n } = {\n isOpen: false,\n position: { x: 0, y: 0 },\n context: null\n };\n \n // Virtual scroll properties\n private scrollContainer?: HTMLElement;\n private scrollSubscription?: Subscription;\n private virtualScrollState$ = new BehaviorSubject<VirtualScrollState | null>(null);\n \n // Observable streams derived from virtual scroll state\n public virtualScrollTotalHeight$: Observable<number> = this.virtualScrollState$.pipe(\n map(state => state?.totalHeight ?? 0),\n distinctUntilChanged()\n );\n \n public virtualScrollOffsetY$: Observable<number> = this.virtualScrollState$.pipe(\n map(state => state?.offsetY ?? 0),\n distinctUntilChanged()\n );\n\n public virtualScrollOffsetYNeg$: Observable<number> = this.virtualScrollState$.pipe(\n map(state => Number(state?.offsetY ?? 0) * -1 ),\n distinctUntilChanged()\n );\n \n public visibleRows$: Observable<Cell<any>[][]> = this.virtualScrollState$.pipe(\n map(state => {\n if (!state) return this.visibleCellGrid;\n const { startIndex, endIndex } = state;\n return this.visibleCellGrid.slice(startIndex, endIndex);\n })\n );\n \n @ViewChild('scrollViewport', { read: ElementRef }) scrollViewport?: ElementRef<HTMLElement>;\n \n constructor(\n private schemaValidator: JsonSchemaValidatorService,\n private logger: ValidationLoggerService,\n private virtualScrollService: VirtualScrollService,\n ) {}\n\n ngOnInit(): void {\n // Validate that at least tableConfig or columns is provided\n if (!this.tableConfig) {\n throw new Error('Either tableConfig or columns must be provided');\n }\n \n // Merge config with defaults\n if (this.tableConfig) {\n this.mergedConfig = mergeTableConfig(this.tableConfig);\n \n // Validate configuration if enabled\n if (this.validateConfig) {\n this.validateConfiguration(this.mergedConfig);\n }\n }\n \n // Create or use TableState\n if (!this.tableState) {\n this.createInternalTableState();\n } else {\n // Subscribe to external tableState changes\n this.subscribeToExternalTableState();\n }\n \n // Setup data source (sync or async)\n this.setupDataSource();\n \n // Calculate sticky offsets\n const rowNumberWidth = this.mergedConfig.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 28 : 0; // Settings column is ~32px wide when visible\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: this.mergedConfig.tableSkeleton?.columns ?? 10 }, (_, i) => i);\n this.skeletonRows = Array.from({ length: this.mergedConfig.tableSkeleton?.rows ?? 10 }, (_, i) => i);\n }\n \n ngAfterViewInit(): void {\n // Setup virtual scroll after view is ready\n if (this.isVirtualScrollEnabled() && this.scrollViewport) {\n this.setupVirtualScrollListener();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Validate configuration when tableConfig changes\n if (changes['tableConfig'] && !changes['tableConfig'].firstChange && this.tableConfig) {\n this.mergedConfig = mergeTableConfig(this.tableConfig);\n \n // Validate configuration if enabled\n if (this.validateConfig) {\n this.validateConfiguration(this.mergedConfig);\n }\n \n // Update internal table state with new columns if using internal state\n if (this.internalTableState) {\n this.internalTableState.updateColumns(this.mergedConfig.columns);\n }\n \n // Update visible columns and cell grid\n this.updateVisibleData();\n }\n \n // Recreate cell grid when data changes (only if not using data$ Observable)\n if (changes['data'] && !changes['data'].firstChange && this.data && !this.data$) {\n this.handleSyncDataChange(changes['data'].previousValue || []);\n }\n \n // Handle data$ Observable input changes\n if (changes['data$'] && !changes['data$'].firstChange) {\n this.setupDataSource();\n }\n \n // Recreate cell grid when cellGrid changes\n if (changes['cellGrid'] && !changes['cellGrid'].firstChange) {\n // Cell grid was updated externally, no need to recreate\n // Just recalculate sticky offsets if needed\n if (this.getActiveTableState()) {\n const rowNumberWidth = this.mergedConfig.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n this.getActiveTableState().calculateStickyOffsets(rowNumberWidth, settingsColumnWidth);\n }\n // Update visible columns and cell grid\n this.updateVisibleData();\n }\n \n // Handle tableState input changes (when external state is provided, e.g., in workbook)\n if (changes['tableState'] && !changes['tableState'].firstChange && this.tableState) {\n // Unsubscribe from all old tableState observables to prevent memory leaks\n this.stateSubscription?.unsubscribe();\n this.validationSubscription?.unsubscribe();\n this.focusSubscription?.unsubscribe();\n \n // Resubscribe to new tableState's observables\n this.subscribeToExternalTableState();\n \n // Reinitialize keyboard navigation with new tableState\n if (this.isKeyboardNavigationEnabled()) {\n this.initializeKeyboardNavigation();\n }\n }\n \n // Recalculate virtual scroll when data changes\n if ((changes['data'] || changes['cellGrid']) && !changes['data']?.firstChange) {\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState$.value;\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$.next(newState);\n }\n }\n \n // Update keyboard navigation dimensions if enabled\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 /**\n * Create internal TableState from config\n */\n private createInternalTableState(): void {\n const columns = this.getActiveColumns();\n this.internalTableState = new TableState(columns, {\n pageSize: this.mergedConfig.pagination?.pageSize,\n initialPage: this.mergedConfig.initialState?.page\n });\n \n // Set total items if provided in config (for server-side pagination)\n if (this.mergedConfig.pagination?.totalItems !== undefined) {\n this.internalTableState.setTotalItems(this.mergedConfig.pagination.totalItems);\n }\n \n // Apply initial sort if provided\n if (this.mergedConfig.initialState?.sortBy) {\n this.mergedConfig.initialState.sortBy.forEach(sort => {\n this.internalTableState!.addSortToColumn(sort.key, sort.direction);\n });\n }\n \n // Apply initial filters if provided\n if (this.mergedConfig.initialState?.filters) {\n this.mergedConfig.initialState.filters.forEach(filter => {\n this.internalTableState!.setFilterOnColumn(filter.key, filter.operator, filter.value);\n });\n }\n \n // Subscribe to internal state changes and re-emit\n this.subscribeToInternalState();\n \n // Subscribe to validation state changes and re-emit\n this.subscribeToValidationState();\n }\n \n private subscribeToValidationState() {\n if (!this.internalTableState) return;\n this.validationSubscription = this.internalTableState.tableValidationState$\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 .subscribe(event => {\n this.stateChange.emit(event);\n\n // Update visible columns and cell grid on visibility changes\n if (event.type === 'column-visibility' || event.type === 'column-config') {\n this.updateVisibleData();\n }\n });\n }\n\n /**\n * Subscribe to external TableState changes\n */\n private subscribeToExternalTableState(): void {\n if (!this.tableState) return;\n \n this.stateSubscription = this.tableState.stateChange$\n .subscribe(event => {\n this.stateChange.emit(event);\n \n // Update visible columns and cell grid on visibility changes\n if (event.type === 'column-visibility' || event.type === 'column-config') {\n this.updateVisibleData();\n }\n });\n \n // Subscribe to validation state changes and re-emit\n this.subscribeToValidationState();\n }\n \n /**\n * Create cell grid from raw data\n */\n private createCellGridFromData(): void {\n if (!this.data) return;\n \n const columns = this.getActiveColumns();\n this.internalCellGrid = this.data.map((rowData, rowIndex) =>\n columns.map(column => \n new Cell(column, rowData[column.key], rowData, rowIndex)\n )\n );\n }\n \n /**\n * Setup data source - either sync array or async Observable\n * Handles initialization and subscription to data changes\n */\n private setupDataSource(): void {\n // Warn if both data and data$ are provided\n if (this.data && this.data$) {\n console.warn('StTableComponent: Both data and data$ inputs are provided. Using data$ (Observable) and ignoring data array.');\n }\n \n // Clean up existing subscription\n this.dataSubscription?.unsubscribe();\n \n // Priority: data$ takes precedence over data\n if (this.data$) {\n this.subscribeToDataChanges();\n } else if (this.data) {\n // For sync data, emit once through internal observable\n this.previousData = [];\n this.internalData$.next(this.data);\n this.subscribeToDataChanges();\n } else {\n // No data provided, emit empty array\n this.previousData = [];\n this.internalData$.next([]);\n this.subscribeToDataChanges();\n }\n }\n \n /**\n * Subscribe to data changes (either from data$ input or internal BehaviorSubject)\n */\n private subscribeToDataChanges(): void {\n const dataSource$ = this.data$ || this.internalData$.asObservable();\n \n this.dataSubscription = dataSource$.subscribe(newData => {\n this.handleDataChange(newData);\n });\n }\n \n /**\n * Handle data change from Observable emission\n */\n private handleDataChange(newData: any[]): void {\n const timestamp = Date.now();\n const source: 'sync' | 'async' = this.data$ ? 'async' : 'sync';\n \n // Emit data change event\n this.dataChange.emit({\n previousData: this.previousData,\n currentData: newData,\n timestamp,\n source\n });\n \n // Update data reference\n this.data = newData;\n this.previousData = [...newData];\n \n // Recreate cell grid\n this.createCellGridFromData();\n \n // Update visible data\n this.updateVisibleData();\n \n // Recalculate virtual scroll if enabled\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState$.value;\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$.next(newState);\n }\n }\n \n // Update keyboard navigation dimensions if enabled\n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().setDimensions(\n this.visibleCellGrid.length,\n this.visibleColumns.length\n );\n }\n }\n \n /**\n * Handle sync data change (from @Input() data changes)\n */\n private handleSyncDataChange(previousData: any[]): void {\n this.previousData = previousData;\n this.internalData$.next(this.data || []);\n }\n \n /**\n * Get active TableState (provided or internal)\n */\n getActiveTableState(): TableState {\n return this.tableState || this.internalTableState!;\n }\n \n /**\n * Get active cell grid (provided or internal)\n */\n getActiveCellGrid(): Cell<any>[][] {\n return this.internalCellGrid || [];\n }\n\n /**\n * Get visible cell grid (filtered to only include visible columns)\n */\n getVisibleCellGrid(): Cell<any>[][] {\n const allColumns = this.getActiveColumns();\n const visibleColumns = this.getVisibleColumns();\n const visibleColumnKeys = new Set(visibleColumns.map(col => col.key));\n \n // Get column indices for visible columns\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 /**\n * Update the visible cell grid based on current visibility and column order\n * Called when data, visibility, or column order changes\n * \n * This method properly handles column reordering by mapping cells based on\n * column keys rather than indices, ensuring cells follow their columns.\n */\n private updateVisibleCellGrid(): void {\n const fullGrid = this.getActiveCellGrid();\n \n // Handle empty grid\n if (!fullGrid || fullGrid.length === 0) {\n this.visibleCellGrid = [];\n return;\n }\n \n // Build a map of columnKey → cellIndex for the current grid structure\n // This allows us to find cells by column key regardless of their current position\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 // Reorder cells to match the visibleColumns order\n // This ensures that when columns are moved, the cell data follows\n this.visibleCellGrid = fullGrid.map(row => {\n return this.visibleColumns\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\n /**\n * Update the visible columns based on current visibility\n * Called only when visibility actually changes\n */\n private updateVisibleColumns(): void {\n const allColumns = this.getActiveColumns();\n this.visibleColumns = allColumns.filter(col => col.visible !== false);\n \n // Recalculate sticky offsets for visible columns only\n this.recalculateVisibleStickyOffsets(this.visibleColumns);\n }\n\n /**\n * Update both visible columns and cell grid\n * Call this whenever data or visibility changes\n */\n private updateVisibleData(): void {\n this.updateVisibleColumns();\n this.updateVisibleCellGrid();\n }\n \n /**\n * Get active columns (from config or legacy input)\n */\n getActiveColumns(): ColumnConfig<any>[] {\n return this.mergedConfig.columns;\n }\n\n /**\n * Get visible columns (filtered by visibility property)\n * Also recalculates sticky offsets based on visible columns only\n */\n getVisibleColumns(): ColumnConfig<any>[] {\n const allColumns = this.getActiveColumns();\n const visibleColumns = allColumns.filter(col => col.visible !== false); // Default to true if not set\n \n // Recalculate sticky offsets for visible columns only\n this.recalculateVisibleStickyOffsets(visibleColumns);\n \n return visibleColumns;\n }\n\n /**\n * Recalculate sticky offsets based on visible columns only\n * This ensures correct positioning when columns are hidden\n */\n private recalculateVisibleStickyOffsets(visibleColumns: ColumnConfig<any>[]): void {\n // Calculate left sticky offsets\n // Account for row number column width if shown\n let leftOffset = this.mergedConfig.showRowNumber ? 30 : 0;\n visibleColumns.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 let rightOffset = 0;\n for (let i = visibleColumns.length - 1; i >= 0; i--) {\n const col = visibleColumns[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 onColumnResized(event: ColumnResizeEvent): void {\n // Recalculate sticky offsets after resize\n const rowNumberWidth = this.mergedConfig.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n this.getActiveTableState().calculateStickyOffsets(rowNumberWidth, settingsColumnWidth);\n \n // Emit to parent\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 // Calculate target index\n const targetIndex = event.direction === 'left' \n ? currentIndex - 1 \n : currentIndex + 1;\n \n // Check bounds\n if (targetIndex < 0 || targetIndex >= columns.length) {\n return;\n }\n \n // Swap columns\n [columns[currentIndex], columns[targetIndex]] = \n [columns[targetIndex], columns[currentIndex]];\n \n // Update TableState with new column order\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 // Force virtual scroll to re-render by re-emitting current state\n // This ensures visibleRows$ picks up the updated visibleCellGrid\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState$.value;\n if (currentState) {\n this.virtualScrollState$.next({...currentState});\n }\n }\n }\n\n /**\n * Move column to position just before right sticky columns (used when pinning right)\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 // Find the index of the first right-sticky column\n const firstRightStickyIndex = columns.findIndex(c => c.sticky === 'right');\n \n // Determine target index: just before first right-sticky, or at end if none exist\n const targetIndex = firstRightStickyIndex !== -1 ? firstRightStickyIndex : columns.length;\n \n // If already at target position, no need to move\n if (currentIndex === targetIndex || currentIndex === targetIndex - 1) return;\n \n // Remove column from current position\n const [column] = columns.splice(currentIndex, 1);\n \n // Adjust target index if we removed an element before it\n const adjustedTargetIndex = currentIndex < targetIndex ? targetIndex - 1 : targetIndex;\n \n // Insert at target position (before first right-sticky column, or at end)\n columns.splice(adjustedTargetIndex, 0, column);\n \n // Update TableState with new column order\n this.getActiveTableState().updateColumns(columns);\n \n // Force virtual scroll to re-render\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState$.value;\n if (currentState) {\n this.virtualScrollState$.next({...currentState});\n }\n }\n }\n\n /**\n * Get cumulative left offset for a sticky column on the left side\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 /**\n * Get cumulative right offset for a sticky column on the right side\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 /**\n * Check if top pagination should be shown\n */\n showTopPagination(): boolean {\n return this.mergedConfig.pagination?.enabled == true &&\n this.mergedConfig.pagination?.showTopControls === true;\n }\n \n /**\n * Check if bottom pagination should be shown\n */\n showBottomPagination(): boolean {\n return this.mergedConfig.pagination?.enabled == true &&\n (this.mergedConfig.pagination?.showBottomControls ?? true);\n }\n \n /**\n * Validate table configuration\n * @param config Table configuration to validate\n */\n private validateConfiguration(config: TableConfig): void {\n const result = this.schemaValidator.validate(config, true, false); // Disable logging here, we'll log manually with context\n \n if (!result.valid && result.errors.length > 0) {\n // Emit validation errors\n this.configValidationErrors.emit(result.errors);\n \n // Log validation errors with context\n const configSnippet = JSON.stringify(config, null, 2).substring(0, 500); // First 500 chars of config\n this.logger.logValidationErrors(result.errors, 'renderer', {\n configSnippet: configSnippet\n });\n \n // Log warnings to console (don't break rendering)\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 /**\n * Handle add column button click\n */\n onAddColumnClick(): void {\n this.showColumnModal = true;\n }\n \n /**\n * Handle column created from modal\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 // Emit the new column to parent component\n this.columnAdded.emit(addEvent);\n \n // Close the modal\n this.showColumnModal = false;\n }\n \n /**\n * Handle modal cancelled\n */\n onModalCancelled(): void {\n this.showColumnModal = false;\n }\n\n /**\n * Check if virtual scroll is enabled\n */\n isVirtualScrollEnabled(): boolean {\n return this.mergedConfig.display?.virtualScroll?.enabled ?? false;\n }\n \n /**\n * Check if column is the first sticky-right column (for shadow styling)\n */\n isFirstStickyRight(columnKey: string): boolean {\n const stickyRightColumns = this.visibleColumns.filter(col => col.sticky === 'right' && !col.key.includes('settings'));\n return stickyRightColumns.length > 0 && stickyRightColumns[0].key === columnKey;\n }\n \n /**\n * Get virtual scroll item size\n */\n getVirtualScrollItemSize(): number {\n return this.mergedConfig.display?.virtualScroll?.itemSize ?? 48;\n }\n \n /**\n * Get viewport height\n */\n getVirtualScrollViewportHeight(): number {\n return this.mergedConfig.display?.virtualScroll?.viewportHeight ?? 600;\n }\n \n /**\n * Get buffer size\n */\n getVirtualScrollBufferSize(): number {\n return this.mergedConfig.display?.virtualScroll?.bufferSize ?? 5;\n }\n \n /**\n * Initialize virtual scroll state\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$.next(newState);\n }\n \n /**\n * Setup scroll event listener\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 .subscribe(scrollTop => this.onVirtualScroll(scrollTop));\n }\n \n /**\n * Handle virtual scroll event\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$.next(newState);\n }\n \n /**\n * Get row index for tracking\n */\n getAbsoluteRowIndex(relativeIndex: number): number {\n const currentState = this.virtualScrollState$.value;\n if (!currentState) return relativeIndex;\n return currentState.startIndex + relativeIndex;\n }\n \n /**\n * TrackBy function for better performance\n */\n trackByRowIndex = (index: number, row: Cell<any>[]): number => {\n return this.getAbsoluteRowIndex(index);\n }\n \n /**\n * Scroll to specific row programmatically\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 /**\n * Check if row actions are enabled\n */\n hasRowActions(): boolean {\n return !!(this.mergedConfig.features?.rowManagement?.actions && \n this.mergedConfig.features.rowManagement.actions.length > 0);\n }\n \n /**\n * Get row actions from config\n */\n getRowActions(): RowAction[] {\n return this.mergedConfig.features?.rowManagement?.actions || [];\n }\n \n /**\n * Get row data from cell grid\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 // Get raw data from first cell (all cells in a row share the same rowData)\n return row[0]?.getRowData() || null;\n }\n \n /**\n * Open row actions dropdown\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 // Calculate position (below the button by default)\n const position = {\n x: rect.left,\n y: rect.bottom + 4 // 4px gap\n };\n \n // Create context\n const context: RowActionContext = {\n rowData,\n rowIndex,\n actions: this.getRowActions()\n };\n \n // Update dropdown state\n this.dropdownState = {\n isOpen: true,\n position,\n context\n };\n \n // Disable body scroll\n document.body.style.overflow = 'hidden';\n \n // If virtual scroll is enabled, add scroll listener to close dropdown\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 /**\n * Close row actions dropdown\n */\n closeRowActionsDropdown(): void {\n this.dropdownState = {\n isOpen: false,\n position: { x: 0, y: 0 },\n context: null\n };\n \n // Re-enable body scroll\n document.body.style.overflow = '';\n }\n \n /**\n * Handle row action clicked\n */\n onRowActionClicked(event: RowActionEvent): void {\n // Execute action callback if provided\n if (event.action.action) {\n event.action.action(event.rowData, event.rowIndex);\n }\n \n // Emit event to parent\n this.rowAction.emit(event);\n \n // Close dropdown\n this.closeRowActionsDropdown();\n }\n\n // ============================================================================\n // COLUMN MENU ACTIONS\n // ============================================================================\n\n /**\n * Open column menu dropdown\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 // Calculate position (below the button by default)\n const position = {\n x: rect.left,\n y: rect.bottom + 4 // 4px gap\n };\n\n // Create context\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 // Update column menu state\n this.columnMenuState = {\n isOpen: true,\n position,\n context\n };\n\n // Disable body scroll\n document.body.style.overflow = 'hidden';\n\n // If virtual scroll is enabled, add scroll listener to close dropdown\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 /**\n * Close column menu dropdown\n */\n closeColumnMenu(): void {\n this.columnMenuState = {\n isOpen: false,\n position: { x: 0, y: 0 },\n context: null\n };\n\n // Re-enable body scroll\n document.body.style.overflow = '';\n }\n\n /**\n * Handle column action clicked\n */\n onColumnActionClicked(event: ColumnActionEvent): void {\n // Execute action callback if provided\n if (event.action.action) {\n event.action.action(event.column, event.columnIndex);\n }\n\n // Don't close menu if it's a filter action (filter needs menu to stay open)\n if (event.action.id === 'filter') {\n return;\n }\n\n // Close dropdown for other actions\n this.closeColumnMenu();\n }\n\n /**\n * Get column actions (built-in + custom)\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 // Add built-in actions if enabled (default: true)\n const includeBuiltIn = column.includeBuiltInActions ?? true;\n if (includeBuiltIn) {\n actions.push(...this.getBuiltInColumnActions(column, columnIndex, isFirst, isLast));\n }\n \n // Add custom column actions from config\n if (column.columnActions && column.columnActions.length > 0) {\n actions.push(...column.columnActions);\n }\n \n return actions;\n }\n\n /**\n * Get built-in column actions (sort, filter, pin, move)\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 // Sort ascending\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 // Sort descending\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 // Clear sort (only show if currently sorted)\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 // Filter\n if (column.filterable !== false) {\n actions.push({\n id: 'filter',\n label: 'Filter',\n icon: '⚑',\n action: () => {\n // Filter action handled by column menu component\n }\n });\n }\n\n // Pin Left (if not already pinned)\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 // Pin Right (if not already pinned)\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 // Unpin (if currently pinned)\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 // Move left (only if movable and not pinned)\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 // Move right (only if movable and not pinned)\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 /**\n * Get sort label based on column data type\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 // ============================================================================\n // KEYBOARD NAVIGATION\n // ============================================================================\n\n /**\n * Initialize keyboard navigation\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 // Subscribe to focus position changes\n this.focusSubscription = tableState.focusedCellPosition$.subscribe(position => {\n this.updateCellFocusStates(position);\n });\n \n // Auto-focus first cell to enable keyboard navigation\n if (this.visibleCellGrid.length > 0 && this.visibleColumns.length > 0) {\n setTimeout(() => {\n tableState.focusCell(0, 0);\n }, 0);\n }\n }\n \n /**\n * Update focus state in all cells\n */\n private updateCellFocusStates(position: CellFocusPosition | null): void {\n if (!this.visibleCellGrid) return;\n \n for (let rowIndex = 0; rowIndex < this.visibleCellGrid.length; rowIndex++) {\n const row = this.visibleCellGrid[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 // Focus the actual DOM element\n this.focusTdElement(rowIndex, colIndex);\n } else {\n cell.blur();\n }\n }\n }\n }\n \n /**\n * Focus the TD element in the DOM and scroll it into view,\n * accounting for sticky columns on left and right\n */\n private focusTdElement(rowIndex: number, colIndex: number): void {\n // Use setTimeout to ensure DOM has updated\n setTimeout(() => {\n // Use absolute row index for virtual scroll compatibility\n const absoluteRowIndex = this.getAbsoluteRowIndex(rowIndex);\n const tr = document.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 /**\n * Scroll a cell into view, accounting for sticky columns\n */\n private scrollCellIntoView(cell: HTMLElement, colIndex: number): void {\n // Find the scroll container\n const scrollContainer = this.getScrollContainerElement();\n if (!scrollContainer) return;\n\n const cellRect = cell.getBoundingClientRect();\n const containerRect = scrollContainer.getBoundingClientRect();\n\n // Calculate sticky column widths\n const { leftStickyWidth, rightStickyWidth } = this.calculateStickyWidths();\n\n // Calculate visible area (excluding sticky columns)\n const visibleLeft = containerRect.left + leftStickyWidth;\n const visibleRight = containerRect.right - rightStickyWidth;\n const visibleTop = containerRect.top;\n const visibleBottom = containerRect.bottom;\n\n // Check if column is sticky (don't scroll for sticky columns)\n const column = this.visibleColumns[colIndex];\n if (column?.sticky) {\n // Just ensure vertical visibility for sticky columns\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 // Horizontal scrolling\n if (cellRect.left < visibleLeft) {\n // Cell is hidden behind left sticky columns\n scrollContainer.scrollLeft -= (visibleLeft - cellRect.left);\n } else if (cellRect.right > visibleRight) {\n // Cell is hidden behind right sticky columns\n scrollContainer.scrollLeft += (cellRect.right - visibleRight);\n }\n\n // Vertical scrolling\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 /**\n * Get the scroll container element\n */\n private getScrollContainerElement(): HTMLElement | null {\n // Prefer cached container if already resolved\n if (this.scrollContainer) {\n return this.scrollContainer;\n }\n // Virtual scroll uses scrollViewport\n if (this.isVirtualScrollEnabled() && this.scrollViewport?.nativeElement) {\n this.scrollContainer = this.scrollViewport.nativeElement;\n return this.scrollContainer;\n }\n // Standard mode uses .st-table container (cache it to avoid selecting wrong table repeatedly)\n const tableContainer = document.querySelector('.st-table') as HTMLElement | null;\n if (tableContainer) {\n this.scrollContainer = tableContainer;\n }\n return this.scrollContainer || null;\n }\n\n /**\n * Calculate total width of sticky columns on left and right\n */\n private calculateStickyWidths(): { leftStickyWidth: number; rightStickyWidth: number } {\n let leftStickyWidth = 0;\n let rightStickyWidth = 0;\n\n // Account for row number column if enabled\n if (this.mergedConfig.showRowNumber) {\n leftStickyWidth += 30; // Row number column width\n }\n\n // Calculate from column configs\n for (const col of this.visibleColumns) {\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 // Account for settings column only when row actions are enabled (use consistent width)\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n rightStickyWidth += settingsColumnWidth;\n\n return { leftStickyWidth, rightStickyWidth };\n }\n \n /**\n * Handle cell click\n */\n onCellClick(rowIndex: number, columnIndex: number): void {\n if (!this.isKeyboardNavigationEnabled()) return;\n this.getActiveTableState().focusCell(rowIndex, columnIndex);\n }\n \n /**\n * Handle cell entering edit mode\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 columnIndex = this.visibleColumns.findIndex(col => col.key === columnKey);\n \n if (rowIndex !== undefined && columnIndex >= 0) {\n this.getActiveTableState().setEditingCell(rowIndex, columnIndex);\n }\n }\n }\n \n /**\n * Handle cell save\n */\n onCellSave(event: CellSaveEvent): void {\n this.cellSave.emit(event);\n \n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n }\n }\n \n /**\n * Handle cell cancel\n */\n onCellCancel(event: CellCancelEvent): void {\n this.cellCancel.emit(event);\n \n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n }\n }\n \n /**\n * Handle cell save with navigation (Excel-like behavior)\n */\n onCellSaveAndNavigate(event: {event: KeyboardEvent, direction: NavigationDirection}): void {\n // Navigation is already handled by the directive after save\n // Just ensure editing state is cleared\n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n // Move focus in the specified direction\n setTimeout(() => {\n this.getActiveTableState().moveFocus(event.direction);\n }, 0);\n }\n }\n \n /**\n * Handle focus on table container - focus first cell if no cell is focused\n */\n onTableContainerFocus(event: FocusEvent): void {\n if (!this.isKeyboardNavigationEnabled()) return;\n \n const tableState = this.getActiveTableState();\n const currentFocus = tableState.getFocusedPosition();\n \n // If no cell is focused, focus the first cell\n if (!currentFocus && this.visibleCellGrid.length > 0 && this.visibleColumns.length > 0) {\n tableState.focusCell(0, 0);\n }\n }\n \n /**\n * Check if keyboard navigation is enabled\n */\n isKeyboardNavigationEnabled(): boolean {\n return this.mergedConfig.features?.keyboardNavigation?.enabled ?? false;\n }\n \n /**\n * Get EditMode enum value for cells\n * For Excel-like tables with keyboard navigation, use ENTER mode\n * which allows arrow key navigation without triggering edit.\n * Double-click will still work to start editing.\n */\n getEditModeForCells(): EditMode {\n // If keyboard navigation is enabled, use ENTER mode for Excel-like behavior\n // Otherwise use CLICK mode for immediate editing\n if (this.isKeyboardNavigationEnabled()) {\n return EditMode.ENTER;\n }\n return EditMode.CLICK;\n }\n \n /**\n * Clear focus when clicking outside table\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 \n if (!tableElement) {\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.virtualScrollState$.complete();\n this.internalData$.complete();\n }\n \n}\n\n","<!-- Top pagination controls -->\n<st-pagination \n *ngIf=\"showTopPagination() && !(mergedConfig.tableSkeleton?.enabled | async)\" \n [tableState]=\"getActiveTableState()\"\n [tableConfig]=\"mergedConfig\"\n position=\"top\">\n</st-pagination>\n\n<div class=\"st-table\" *ngIf=\"!(mergedConfig.tableSkeleton?.enabled | async)\" \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 [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 <div class=\"st-scroll-viewport\" #scrollViewport *ngIf=\"isVirtualScrollEnabled()\"\n [ngStyle]=\"{ 'height.px': getVirtualScrollViewportHeight() }\">\n\n <!-- Spacer to create scrollable area -->\n <div class=\"st-scroll-spacer\" [ngStyle]=\"{ 'height.px': virtualScrollTotalHeight$ | async }\">\n </div>\n\n <!-- Table positioner with transform (instead of tbody) -->\n <div class=\"st-table-positioner\" [ngStyle]=\"{ transform: 'translateY(' + (virtualScrollOffsetY$ | async) + 'px)' }\">\n <!-- Table with only visible rows -->\n <ng-container *ngTemplateOutlet=\"tableTemplate; context: { \n mode: 'virtual',\n theadStyle: { top: (virtualScrollOffsetYNeg$ | async) + 'px' }\n }\"></ng-container>\n </div>\n </div>\n \n <!-- Standard table (when virtual scroll disabled) -->\n <ng-container *ngIf=\"!isVirtualScrollEnabled()\">\n <ng-container *ngTemplateOutlet=\"tableTemplate; context: { \n mode: 'standard',\n theadStyle: null\n }\"></ng-container>\n </ng-container>\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<ng-container *ngIf=\"(mergedConfig.tableSkeleton?.enabled | async)\">\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\n</ng-container>\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<st-pagination \n *ngIf=\"showBottomPagination() && !(mergedConfig.tableSkeleton?.enabled | async)\" \n [tableState]=\"getActiveTableState()\"\n [tableConfig]=\"mergedConfig\"\n position=\"bottom\">\n</st-pagination>\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 <th *ngIf=\"mergedConfig.showRowNumber\" 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 <!-- Column Headers -->\n <th \n *ngFor=\"let column of visibleColumns; let colIndex = index; let isFirst = first; let isLast = last\"\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 <div \n class=\"resize-handle\" \n stColumnResize\n [column]=\"column\"\n (columnResized)=\"onColumnResized($event)\"\n *ngIf=\"column.resizable !== false\">\n </div>\n </th>\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 <ng-container *ngIf=\"mode === 'virtual'\">\n <tr *ngFor=\"let row of visibleRows$ | async; let relativeIndex = index; trackBy: trackByRowIndex\"\n [attr.data-row-index]=\"getAbsoluteRowIndex(relativeIndex)\">\n <!-- Row Number Cell -->\n <td *ngIf=\"mergedConfig.showRowNumber\" 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 <ng-container *ngTemplateOutlet=\"bodyCellTemplate; context: { \n row: row,\n rowIndex: getAbsoluteRowIndex(relativeIndex),\n mode: 'virtual',\n relativeIndex: relativeIndex\n }\"></ng-container>\n </tr>\n </ng-container>\n\n <!-- Standard Rows -->\n <ng-container *ngIf=\"mode === 'standard'\">\n <tr *ngFor=\"let row of visibleCellGrid; let rowIndex = index\" [attr.data-row-index]=\"rowIndex\">\n <!-- Row Number Cell -->\n <td *ngIf=\"mergedConfig.showRowNumber\" 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 <ng-container *ngTemplateOutlet=\"bodyCellTemplate; context: { \n row: row,\n rowIndex: rowIndex,\n mode: 'standard'\n }\"></ng-container>\n </tr>\n </ng-container>\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 <td \n *ngFor=\"let cell of row; let colIndex = index\"\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 <st-cell \n *ngIf=\"mode === 'virtual'\"\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 <!-- Standard Cell -->\n <st-cell \n *ngIf=\"mode === 'standard'\"\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 </td>\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 <button \n *ngIf=\"hasRowActions()\"\n class=\"settings-trigger\"\n (click)=\"openRowActionsDropdown($event, getRowData(rowIndex), rowIndex)\"\n type=\"button\" \n aria-label=\"Row actions\">\n ⋯\n </button>\n </td>\n </ng-template>\n\n<ng-template #skeletonLoader>\n <div class=\"list-row\" *ngIf=\"(mergedConfig.tableSkeleton?.enabled | async)\">\n <div *ngFor=\"let i of skeletonColumns\" class=\"list-content\">\n <nile-skeleton-loader variant=\"text\" width=\"90%\" height=\"18\" *ngFor=\"let j of skeletonRows\"></nile-skeleton-loader>\n </div>\n </div>\n</ng-template>","import { Directive, ElementRef, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({\n selector: '[clickOutside]'\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: HTMLElement) {\n const clickedInside = this.el.nativeElement.contains(target);\n if (!clickedInside) {\n this.clickOutside.emit();\n }\n }\n}\n\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\nimport { TableState } from '../../models/table-state.class';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'st-column-visibility',\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 <div class=\"visibility-dropdown\" *ngIf=\"isOpen\">\n <div class=\"dropdown-header\">Show/Hide Columns</div>\n <div class=\"dropdown-content\">\n <label *ngFor=\"let column of getColumnsVisibility()\" \n 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 </div>\n </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'st-add-column-button',\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","<button \n *ngIf=\"enabled\" \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 } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } 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 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 <span class=\"error-message\" *ngIf=\"hasError('key')\">\n {{ getErrorMessage('key') }}\n </span>\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 <option *ngFor=\"let type of dataTypes\" [value]=\"type.value\">\n {{ type.label }}\n </option>\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 <option *ngFor=\"let option of stickyOptions\" [value]=\"option.value\">\n {{ option.label }}\n </option>\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 <option *ngFor=\"let align of alignments\" [value]=\"align.value\">\n {{ align.label }}\n </option>\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 <option *ngFor=\"let align of verticalAlignments\" [value]=\"align.value\">\n {{ align.label }}\n </option>\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 <option *ngFor=\"let mode of editModes\" [value]=\"mode.value\">\n {{ mode.label }}\n </option>\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\n","import { Component, Output, EventEmitter, OnInit, OnDestroy, ViewChild } from '@angular/core';\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 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 } from '@angular/core';\nimport { SheetAction, SheetActionEvent } from '../../../models/sheet-action.interface';\n\n@Component({ \n selector: 'st-sheet-actions',\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","<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 *ngIf=\"visibleActions.length > 0\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n</button>\n\n<!-- Dropdown container -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen\">\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 <nile-menu-item \n *ngFor=\"let action of visibleActions\"\n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n \n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\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} from '@angular/core';\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';\n\n@Component({\n selector: 'st-sheet',\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"," \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 <st-sheet-actions \n *ngIf=\"visibleActions.length > 0\"\n [actions]=\"visibleActions\" \n [sheetId]=\"config.id\"\n (actionClicked)=\"onActionClick($event)\">\n </st-sheet-actions>\n </div>\n </nile-tab>\n <nile-tab-panel name=\"general\">\n <st-table \n *ngIf=\"config && activeState\"\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 </nile-tab-panel>\n</nile-tab-group>\n\n\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 Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\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 templateUrl: './st-workbook.component.html',\n styleUrls: ['./st-workbook.component.scss'],\n})\nexport class StWorkbookComponent implements OnInit, OnChanges, OnDestroy {\n /**\n * Workbook configuration\n */\n @Input() config!: WorkbookConfig;\n\n /**\n * Map of sheet ID to data array\n */\n @Input() sheetsData: BehaviorSubject<Map<string, any[]>> = new BehaviorSubject(new Map());\n\n /**\n * Optional external state management\n */\n @Input() state?: WorkbookState;\n\n /**\n * Emitted when active sheet changes\n */\n @Output() sheetChanged = new EventEmitter<number>();\n\n /**\n * Emitted when add sheet button is clicked\n */\n @Output() addSheet = new EventEmitter<void>();\n\n /**\n * Emitted when a sheet tab action is clicked\n */\n @Output() sheetTabAction = new EventEmitter<SheetTabActionEvent>();\n\n /**\n * Emitted when a workbook action is clicked\n */\n @Output() workbookAction = new EventEmitter<WorkbookActionEvent>();\n\n /**\n * Emitted when cell value changes\n */\n @Output() cellChange = new EventEmitter<CellChangeEvent>();\n\n /**\n * Emitted when cell is saved\n */\n @Output() cellSave = new EventEmitter<any>();\n\n /**\n * Emitted when table state changes\n */\n @Output() tableStateChange = new EventEmitter<TableStateChangeEvent>();\n\n /**\n * Emitted when fullscreen is toggled\n */\n @Output() fullscreenToggle = new EventEmitter<boolean>();\n\n /**\n * Array of sheets\n */\n sheets: WorkbookSheetConfig[] = [];\n\n /**\n * Active sheet index\n */\n activeSheetIndex = 0;\n\n /**\n * Current table config (for active sheet)\n */\n currentTableConfig: TableConfig | null = null;\n\n /**\n * Current table data (for active sheet) - using BehaviorSubject for reactive updates\n */\n currentTableData$: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);\n\n /**\n * Current table state (for active sheet)\n */\n currentTableState: TableState | null = null;\n\n /**\n * Unique key for table component (changes on sheet switch to force reinitialization)\n */\n tableComponentKey: string = '';\n\n /**\n * Internal state instance\n */\n internalState?: WorkbookState;\n\n /**\n * Fullscreen state observable\n */\n isFullscreen$ = new BehaviorSubject<boolean>(false);\n\n /**\n * Tab actions dropdown state\n */\n tabActionsOpen = false;\n selectedSheet: WorkbookSheetConfig | null = null;\n selectedSheetIndex: number = -1;\n tabActionsPosition: any = {};\n\n /**\n * Workbook actions dropdown state\n */\n workbookActionsOpen = false;\n workbookActionsPosition: any = {};\n\n /**\n * Visible workbook actions (filtered by hidden)\n */\n visibleWorkbookActions: WorkbookAction[] = [];\n\n /**\n * Destroy subject for cleanup\n */\n private destroy$ = new Subject<void>();\n\n /**\n * Autosave enabled flag\n */\n autosaveEnabled: boolean = false;\n\n /**\n * Autosave strategy\n */\n private autosaveStrategy: AutosaveStrategy = 'lazy';\n\n /**\n * Last save timestamp\n */\n lastSaveTime: Date | null = null;\n\n /**\n * Saving indicator\n */\n isSaving: boolean = false;\n\n /**\n * Beforeunload handler reference\n */\n private beforeUnloadHandler: ((event: BeforeUnloadEvent) => void) | null = null;\n\n constructor(\n private autosaveService: AutosaveService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.initializeComponent();\n\n // Subscribe to sheetsData changes to update currentTableData$ reactively\n this.sheetsData.pipe(\n takeUntil(this.destroy$)\n ).subscribe((dataMap) => {\n if (this.selectedSheet && dataMap) {\n const newData = dataMap.get(this.selectedSheet.id);\n if (newData) {\n // Update the BehaviorSubject - st-table will react automatically\n this.currentTableData$.next([...newData]);\n }\n }\n });\n\n // Initialize autosave if enabled\n const autosaveConfig = this.config.autosave || DEFAULT_AUTOSAVE_CONFIG;\n this.autosaveEnabled = 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 /**\n * Initialize component state\n * @param isFirstInit Whether this is the first initialization (true) or a config update (false)\n */\n private initializeComponent(isFirstInit: boolean = true): void {\n if (!this.config) return;\n\n this.sheets = [...this.config.sheets];\n \n // Only reset activeSheetIndex on first init, preserve it on config updates\n if (isFirstInit) {\n this.activeSheetIndex = this.config.initialActiveSheetIndex || 0;\n } else {\n // Ensure activeSheetIndex is still valid after config change\n if (this.activeSheetIndex >= this.sheets.length) {\n this.activeSheetIndex = Math.max(0, this.sheets.length - 1);\n }\n }\n \n if (!this.state) {\n this.internalState = new WorkbookState({\n id: this.config.id,\n name: this.config.name,\n initialActiveSheetIndex: this.activeSheetIndex\n });\n }\n\n this.updateVisibleWorkbookActions();\n this.updateActiveSheet();\n }\n\n /**\n * Get active state (external or internal)\n */\n get activeState(): WorkbookState {\n return this.state || this.internalState!;\n }\n\n /**\n * Handle tab change event from nile-tab-group\n */\n onTabChange(event: any): void {\n const newIndex = event.detail?.index ?? event;\n \n // Ignore if clicked on toolbar tab\n if (newIndex >= this.sheets.length) {\n return;\n }\n\n this.activeSheetIndex = newIndex;\n this.activeState.setActiveSheetIndex(newIndex);\n this.updateActiveSheet();\n this.sheetChanged.emit(this.activeSheetIndex);\n }\n\n /**\n * Update active sheet data (triggers table re-initialization with new config/state)\n */\n private updateActiveSheet(): void {\n const sheet = this.sheets[this.activeSheetIndex];\n if (!sheet) return;\n\n // Update selected sheet reference for data subscriptions\n this.selectedSheet = sheet;\n this.selectedSheetIndex = this.activeSheetIndex;\n\n // Get sheet data\n const sheetData = this.sheetsData.getValue()?.get(sheet.id) || [];\n\n // Create a fresh TableState for this sheet (lazy initialization)\n // This ensures the table reinitializes with new config and state\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 // Update current table properties (triggers Angular change detection)\n // The st-table component will detect these changes and reinitialize\n this.currentTableConfig = { ...sheet.tableConfig };\n this.currentTableData$.next(sheetData);\n this.currentTableState = tableState;\n \n // Update component key to force DOM re-creation (true lazy loading)\n // This ensures complete reinitialization of st-table component\n this.tableComponentKey = `${sheet.id}-${Date.now()}`;\n\n // Store the table state in workbook state for persistence\n this.activeState.setSheetTableState(sheet.id, tableState);\n\n }\n\n /**\n * Add new sheet\n */\n onAddSheet(): void {\n this.addSheet.emit();\n }\n\n /**\n * TrackBy function to force component recreation when key changes\n */\n trackByKey(index: number, key: string): string {\n return key;\n }\n\n /**\n * Check if can add more sheets\n */\n get canAddSheet(): boolean {\n if (this.config.display?.allowAddSheet === false) {\n return false;\n }\n if (this.config.display?.maxSheets) {\n return this.sheets.length < this.config.display.maxSheets;\n }\n return true;\n }\n\n /**\n * Get minimum sheets required\n */\n get minSheets(): number {\n return this.config.display?.minSheets || 1;\n }\n\n /**\n * Open tab actions dropdown\n */\n openTabActions(event: MouseEvent, sheet: WorkbookSheetConfig, index: number): void {\n event.stopPropagation();\n \n this.selectedSheet = sheet;\n this.selectedSheetIndex = index;\n this.tabActionsOpen = true;\n\n // Position dropdown\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.tabActionsPosition = {\n top: `${rect.bottom + 4}px`,\n left: `${rect.left}px`\n };\n }\n\n /**\n * Close tab actions dropdown\n */\n closeTabActions(): void {\n this.tabActionsOpen = false;\n this.selectedSheet = null;\n this.selectedSheetIndex = -1;\n }\n\n /**\n * Check if sheet has tab actions\n */\n hasTabActions(sheet: WorkbookSheetConfig): boolean {\n return !!(sheet.tabActions && sheet.tabActions.length > 0);\n }\n\n /**\n * Handle tab action click\n */\n onTabActionClick(action: any, event: Event): void {\n event.stopPropagation();\n\n if (!this.selectedSheet) return;\n\n this.sheetTabAction.emit({\n action,\n sheetId: this.selectedSheet.id\n });\n\n this.closeTabActions();\n }\n\n /**\n * Toggle workbook actions dropdown\n */\n toggleWorkbookActions(event: MouseEvent): void {\n event.stopPropagation();\n \n this.workbookActionsOpen = !this.workbookActionsOpen;\n\n if (this.workbookActionsOpen) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.workbookActionsPosition = {\n top: `${rect.bottom + 4}px`,\n right: `${window.innerWidth - rect.right}px`\n };\n }\n\n }\n\n /**\n * Close workbook actions dropdown\n */\n closeWorkbookActions(): void {\n this.workbookActionsOpen = false;\n }\n\n /**\n * Update visible workbook actions\n */\n private updateVisibleWorkbookActions(): void {\n if (!this.config.workbookActions) {\n this.visibleWorkbookActions = [];\n return;\n }\n\n this.visibleWorkbookActions = this.config.workbookActions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden();\n }\n return !action.hidden;\n });\n }\n\n /**\n * Check if workbook action is disabled\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 /**\n * Handle workbook action click\n */\n onWorkbookActionClick(action: WorkbookAction, event: Event): void {\n event.stopPropagation();\n\n if (this.isActionDisabled(action)) {\n return;\n }\n\n this.workbookAction.emit({\n action,\n workbookId: this.config.id\n });\n\n this.closeWorkbookActions();\n }\n\n /**\n * Toggle fullscreen mode\n */\n toggleFullscreen(): void {\n const current = this.isFullscreen$.value;\n const newValue = !current;\n \n this.isFullscreen$.next(newValue);\n this.fullscreenToggle.emit(newValue);\n }\n\n /**\n * Handle cell change from table - update internal data and pass through to parent\n */\n onCellChange(event: CellChangeEvent): void {\n this.selectedSheet = this.sheets[this.activeSheetIndex];\n \n // Update the internal sheetsData with the new cell value\n if (this.selectedSheet && event.rowData && event.columnKey !== undefined) {\n const currentData = this.sheetsData.getValue();\n const sheetData = currentData.get(this.selectedSheet.id);\n \n if (sheetData && event.rowIndex !== undefined) {\n // Update the specific row's column value\n const updatedRow = { ...sheetData[event.rowIndex] };\n updatedRow[event.columnKey] = event.newValue;\n \n // Create a new array with the updated row\n const updatedSheetData = [...sheetData];\n updatedSheetData[event.rowIndex] = updatedRow;\n \n // Create a new Map with the updated sheet data\n const updatedData = new Map(currentData);\n updatedData.set(this.selectedSheet.id, updatedSheetData);\n \n // Update the BehaviorSubject with new reference\n this.sheetsData.next(updatedData);\n }\n }\n \n // Emit to parent\n this.cellChange.emit(event);\n }\n\n /**\n * Handle cell save from table - update internal data and pass through to parent\n */\n onCellSave(event: any): void {\n // Update the internal sheetsData with the new cell value\n if (this.selectedSheet && event.rowData && event.columnKey !== undefined) {\n const currentData = this.sheetsData.getValue();\n const sheetData = currentData.get(this.selectedSheet.id);\n \n if (sheetData && event.rowIndex !== undefined) {\n // Update the specific row's column value\n const updatedRow = { ...sheetData[event.rowIndex] };\n updatedRow[event.columnKey] = event.newValue;\n \n // Create a new array with the updated row\n const updatedSheetData = [...sheetData];\n updatedSheetData[event.rowIndex] = updatedRow;\n \n // Create a new Map with the updated sheet data\n const updatedData = new Map(currentData);\n updatedData.set(this.selectedSheet.id, updatedSheetData);\n \n // Update the BehaviorSubject with new reference\n this.sheetsData.next(updatedData);\n }\n }\n \n // Emit to parent\n this.cellSave.emit(event);\n }\n\n /**\n * Handle table state change - pass through to parent\n */\n onTableStateChange(event: TableStateChangeEvent): void {\n this.tableStateChange.emit(event);\n }\n\n /**\n * Component cleanup\n */\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n\n // Clear autosave data on destroy\n if (this.autosaveEnabled) {\n this.autosaveService.clear(this.config.id);\n }\n\n // Remove beforeunload handler\n if (this.beforeUnloadHandler) {\n window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n }\n }\n\n /**\n * Initialize autosave subscription\n */\n private initializeAutosave(): void {\n const changeEvents$ = merge(\n this.cellChange,\n this.cellSave,\n this.tableStateChange,\n this.sheetTabAction\n );\n\n const autosave$ = this.autosaveStrategy === 'lazy'\n ? changeEvents$.pipe(\n tap(() => this.autosaveService.setDirty(this.config.id, true)),\n debounceTime(2000),\n distinctUntilChanged()\n )\n : changeEvents$.pipe(\n tap(() => this.autosaveService.setDirty(this.config.id, true)),\n debounceTime(100)\n );\n\n autosave$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => this.performAutosave());\n }\n\n /**\n * Perform autosave operation\n */\n private performAutosave(): void {\n this.isSaving = true;\n\n const autosaveData: AutosaveData = {\n workbookConfig: this.config,\n workbookState: this.activeState.getSnapshot(),\n sheetsData: new Map(this.sheetsData.getValue()),\n timestamp: new Date()\n };\n\n this.autosaveService.save(this.config.id, autosaveData);\n this.lastSaveTime = new Date();\n this.isSaving = false;\n this.autosaveService.setDirty(this.config.id, false);\n }\n\n /**\n * Setup auto-restore from autosave\n */\n private setupAutoRestore(): void {\n const autosaved = this.autosaveService.get(this.config.id);\n\n if (autosaved) {\n // Restore config\n this.config = autosaved.workbookConfig;\n\n // Restore sheets data\n this.sheetsData.next(autosaved.sheetsData);\n\n // Note: Workbook state restoration is handled internally\n // If external state management is used, parent component should handle it\n\n this.lastSaveTime = autosaved.timestamp;\n }\n }\n\n /**\n * Setup beforeunload warning for unsaved changes\n */\n private setupBeforeUnloadWarning(): void {\n this.beforeUnloadHandler = (event: BeforeUnloadEvent) => {\n if (this.autosaveService.isDirty(this.config.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\n","<div class=\"workbook-container\" [class.fullscreen]=\"isFullscreen$ | async\">\n <nile-tab-group [activeIndex]=\"activeSheetIndex\">\n \n <!-- Sheet Tabs (one per sheet) -->\n <nile-tab *ngFor=\"let sheet of sheets; let i = index\"\n 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 <button class=\"tab-actions-button\"\n (click)=\"openTabActions($event, sheet, i)\"\n *ngIf=\"hasTabActions(sheet)\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n </button>\n </div>\n </nile-tab>\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 <div class=\"autosave-indicator\" *ngIf=\"autosaveEnabled\">\n <nile-icon \n *ngIf=\"!isSaving && lastSaveTime\" \n name=\"save\" \n size=\"14\"\n [title]=\"'Saved at ' + (lastSaveTime | date:'HH:mm:ss')\">\n </nile-icon>\n <nile-icon \n *ngIf=\"isSaving\" \n name=\"loader\" \n size=\"14\"\n title=\"Saving...\">\n </nile-icon>\n </div>\n\n <!-- Workbook Actions Dropdown -->\n <button class=\"workbook-actions-button\"\n *ngIf=\"config.workbookActions && config.workbookActions.length > 0\"\n (click)=\"toggleWorkbookActions($event)\"\n title=\"Workbook Actions\">\n <nile-icon name=\"settings\"></nile-icon>\n </button>\n \n <!-- Add Sheet Button -->\n <button class=\"add-sheet-button\"\n *ngIf=\"canAddSheet\"\n (click)=\"onAddSheet()\"\n title=\"Add Sheet\">\n <nile-icon name=\"plus\"></nile-icon>\n </button>\n \n <!-- Fullscreen Button -->\n <button class=\"fullscreen-button\"\n *ngIf=\"config.display?.allowFullscreen !== false\"\n (click)=\"toggleFullscreen()\"\n [title]=\"(isFullscreen$ | async) ? 'Exit Fullscreen' : 'Fullscreen'\">\n <nile-icon [name]=\"(isFullscreen$ | async) ? 'collapse' : 'expand-06'\"></nile-icon>\n </button>\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 ngFor with trackBy to force complete reinitialization when tableComponentKey changes -->\n <ng-container *ngFor=\"let key of [tableComponentKey]; trackBy: trackByKey\">\n <st-table *ngIf=\"currentTableConfig && currentTableState\"\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 </st-table>\n </ng-container>\n </nile-tab-panel>\n \n </nile-tab-group>\n</div>\n\n<!-- Tab Actions Dropdown -->\n<div class=\"tab-actions-dropdown\" \n *ngIf=\"tabActionsOpen\"\n [ngStyle]=\"tabActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeTabActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of selectedSheet?.tabActions\" \n (click)=\"onTabActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Workbook Actions Dropdown -->\n<div class=\"workbook-actions-dropdown\"\n *ngIf=\"workbookActionsOpen\"\n [ngStyle]=\"workbookActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeWorkbookActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of visibleWorkbookActions\"\n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onWorkbookActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Fullscreen Backdrop -->\n<div class=\"fullscreen-backdrop\" \n *ngIf=\"isFullscreen$ | async\"\n (click)=\"toggleFullscreen()\">\n</div>\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 { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ColumnEditorComponent } from '../builder/components/column-editor/column-editor.component';\n\n@NgModule({\n declarations: [\n ColumnEditorComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule\n ],\n exports: [\n ColumnEditorComponent\n ]\n})\nexport class SharedTableComponentsModule { }\n\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\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 declarations: [\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 imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SharedTableComponentsModule, // Import shared module for ColumnEditorComponent\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 } from '@angular/core';\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 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 <span *ngIf=\"hasUnsavedChanges\" class=\"unsaved-indicator\">●</span>\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","/**\n * Column List Component\n * Displays and manages columns\n */\n\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\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 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 <div class=\"add-menu\" *ngIf=\"showAddMenu\">\n <button\n *ngFor=\"let type of dataTypes\"\n class=\"menu-item\"\n (click)=\"onAddColumn(type.value)\">\n {{ type.label }}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"column-items\">\n <div\n *ngFor=\"let column of columns; let i = index\"\n class=\"column-item\"\n [class.selected]=\"selectedIndex === i\"\n [class.dragging]=\"draggedIndex === i\"\n [class.drag-over]=\"dragOverIndex === i\"\n (click)=\"onColumnClick(i)\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event, i)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n (dragleave)=\"dragOverIndex = null\">\n <div class=\"drag-handle\">\n <span>☰</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 <div *ngIf=\"columns.length === 0\" class=\"empty-state\">\n <p>No columns yet. Click \"Add Column\" to get started.</p>\n </div>\n </div>\n</div>\n\n","/**\n * Table Config Editor Component\n * Form for table-level configuration\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { TableConfig } from '../../../models/table-config.interface';\n\n@Component({\n selector: 'st-table-config-editor',\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 <div class=\"form-group\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <label>Page Size</label>\n <select formControlName=\"pageSize\" class=\"form-control\">\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">\n {{ size }}\n </option>\n </select>\n </div>\n <label class=\"checkbox-label\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"showTopControls\">\n <span>Show Top Controls</span>\n </label>\n <label class=\"checkbox-label\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"showBottomControls\">\n <span>Show Bottom Controls</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <label>Variant</label>\n <select formControlName=\"variant\" class=\"form-control\">\n <option value=\"fluid\">Fluid</option>\n <option value=\"compact\">Compact</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Sorting -->\n <div class=\"config-section\">\n <h4>Sorting</h4>\n <div formGroupName=\"sorting\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <label class=\"checkbox-label\" *ngIf=\"form.get('sorting.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"multiColumn\">\n <span>Multi-column</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('sorting.enabled')?.value\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Filtering -->\n <div class=\"config-section\">\n <h4>Filtering</h4>\n <div formGroupName=\"filtering\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('filtering.enabled')?.value\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Display -->\n <div class=\"config-section\">\n <h4>Display</h4>\n <div formGroupName=\"display\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"stickyHeader\">\n <span>Sticky Header</span>\n </label>\n \n <!-- Virtual Scroll Configuration -->\n <div class=\"subsection\" formGroupName=\"virtualScroll\">\n <h5>Virtual Scroll</h5>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Virtual Scrolling (for large datasets)</span>\n </label>\n \n <div *ngIf=\"form.get('display.virtualScroll.enabled')?.value\" class=\"virtual-scroll-options\">\n <div class=\"form-group\">\n <label>Row Height (px)</label>\n <input type=\"number\" formControlName=\"itemSize\" class=\"form-control\" min=\"20\" max=\"200\">\n <small class=\"help-text\">Must be consistent for all rows</small>\n </div>\n \n <div class=\"form-group\">\n <label>Buffer Size (rows)</label>\n <input type=\"number\" formControlName=\"bufferSize\" class=\"form-control\" min=\"0\" max=\"20\">\n <small class=\"help-text\">Rows rendered above/below viewport</small>\n </div>\n \n <div class=\"form-group\">\n <label>Viewport Height (px)</label>\n <input type=\"number\" formControlName=\"viewportHeight\" class=\"form-control\" min=\"200\" max=\"2000\">\n <small class=\"help-text\">Height of scrollable container</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Keyboard Navigation -->\n <div class=\"config-section\">\n <h4>Keyboard Navigation</h4>\n <div formGroupName=\"keyboardNavigation\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Excel-like Navigation</span>\n </label>\n </div>\n </div>\n </form>\n</div>\n\n","/**\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 } from '@angular/core';\nimport { TableConfig } from '../../../models/table-config.interface';\nimport { SampleDataGeneratorService } from '../../services/sample-data-generator.service';\n\n@Component({\n selector: 'st-builder-preview',\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 <div *ngIf=\"isLoading\" class=\"loading\">\n <p>Generating preview...</p>\n </div>\n\n <div *ngIf=\"!isLoading && tableConfig?.columns?.length === 0\" class=\"empty-state\">\n <p>Add columns to see preview</p>\n </div>\n <ng-container *ngIf=\"tableConfig\">\n <st-table\n *ngIf=\"!isLoading && tableConfig!.columns!.length > 0\"\n [tableConfig]=\"tableConfig\"\n [data]=\"sampleData\"\n (stateChange)=\"onStateChange($event)\">\n </st-table>\n </ng-container>\n\n </div>\n</div>\n\n","/**\n * Definition Builder Component\n * Main container component that orchestrates all builder sub-components\n */\n\nimport { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DefinitionBuilderService } from '../../services/definition-builder.service';\nimport { BuilderState } from '../../models/builder-state.interface';\n\n@Component({\n selector: 'st-definition-builder',\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 <div class=\"middle-panel\" *ngIf=\"state.selectedColumn\">\n <st-column-editor\n [column]=\"state.selectedColumn\"\n [columnIndex]=\"state.selectedColumnIndex!\"\n (columnUpdated)=\"onColumnUpdated(state.selectedColumnIndex!, $event)\"\n (cancel)=\"onColumnCancel()\">\n </st-column-editor>\n </div>\n\n <!-- Right Panel: Preview -->\n <div class=\"right-panel\" *ngIf=\"state.previewVisible\">\n <st-builder-preview\n [tableConfig]=\"state.tableConfig\">\n </st-builder-preview>\n </div>\n </div>\n</div>\n\n","/**\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';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n// Builder Components\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 declarations: [\n DefinitionBuilderComponent,\n BuilderToolbarComponent,\n ColumnListComponent,\n // ColumnEditorComponent moved to SharedTableComponentsModule\n TableConfigEditorComponent,\n BuilderPreviewComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n SmartTableModule,\n SharedTableComponentsModule // Import shared module for ColumnEditorComponent\n ],\n exports: [\n DefinitionBuilderComponent,\n BuilderToolbarComponent,\n ColumnListComponent,\n TableConfigEditorComponent,\n BuilderPreviewComponent,\n SharedTableComponentsModule // Re-export so consumers get ColumnEditorComponent\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.StColumnFilterComponent","i2","i1.JsonSchemaValidatorService","i2.ValidationLoggerService","i3.VirtualScrollService","i4.StPaginationComponent","i5.StColumnMenuDropdownComponent","i6.StRowActionsDropdownComponent","i7.StHeaderComponent","i8.StTableActionsComponent","i9.StCellComponent","i10","i11.StKeyboardNavigationDirective","i12.StColumnResizeDirective","i1.ClickOutsideDirective","i1","i1.ColumnEditorComponent","i1.StSheetActionsComponent","i2.StTableComponent","i3","i1.AutosaveService","i1.DefinitionBuilderService","i2.DefinitionExportService","i3.DefinitionImportService","i4","i1.SampleDataGeneratorService","i2.BuilderToolbarComponent","i3.ColumnListComponent","i4.TableConfigEditorComponent","i5.ColumnEditorComponent","i6.BuilderPreviewComponent","i7"],"mappings":"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"}
|
|
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-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/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/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/directives/click-outside.directive.ts","../../../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/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 // 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 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 this._rowCount = rowCount;\n this._columnCount = columnCount;\n \n // Update total rows in validation state\n this.setValidationRowCount(rowCount);\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 */\n moveFocus(direction: NavigationDirection): 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 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 \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 }\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 * 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 * 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 portalDiv?: HTMLElement;\n private eventListeners: Array<{ event: string; handler: EventListener }> = [];\n private optionsSubscription?: Subscription;\n private currentOptions: (SelectOption | string)[] = [];\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 // 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 after render\n setTimeout(() => {\n this.select?.focus();\n this.select?.click();\n \n // Find the portal div for multi-select click detection\n if (this.options.multiple) {\n // Portal div is appended to document body\n this.portalDiv = document.querySelector('.nile-select-portal-append') as HTMLElement;\n }\n }, 0);\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 } else if (value) {\n this.select.value = [String(value)];\n } else {\n this.select.value = [];\n }\n } else {\n // Handle single selection\n this.select.value = 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 if (this.options.portal !== undefined) {\n this.select.portal = this.options.portal;\n } else {\n this.select.portal = true; // Default to portal mode for better positioning\n }\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 // Clear existing options\n while (this.select.firstChild) {\n this.select.removeChild(this.select.firstChild);\n }\n\n // Re-append with new options\n this.createAndAppendOptions(this.currentOptions);\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 * @param options - The options to render\n */\n private createAndAppendOptions(options: (SelectOption | string)[]): void {\n if (!this.select) return;\n\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 primary save trigger\n const changeHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n if (validateOnSave && !this.select?.checkValidity()) {\n this.select?.reportValidity();\n return;\n }\n \n // Only save immediately for single-select\n // Multi-select saves on outside click\n if (!this.options.multiple) {\n context.onSave(this.parseValue(customEvent.detail.value));\n }\n };\n this.select.addEventListener('nile-change', changeHandler);\n this.eventListeners.push({ event: 'nile-change', handler: changeHandler });\n\n // Handle blur as secondary save trigger\n const blurHandler = (e: Event) => {\n if (validateOnSave && !this.select?.checkValidity()) {\n this.select?.reportValidity();\n return;\n }\n // context.onSave(this.getCurrentValue());\n };\n this.select.addEventListener('nile-blur', blurHandler);\n this.eventListeners.push({ event: 'nile-blur', handler: blurHandler });\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 // For multi-select: detect clicks outside portal and select\n if (this.options.multiple) {\n const documentClickHandler = (e: Event) => {\n const mouseEvent = e as MouseEvent;\n const target = mouseEvent.target as HTMLElement;\n \n // Check if portal div exists (might take a moment to render)\n if (!this.portalDiv) {\n this.portalDiv = document.querySelector('.nile-select-portal-append') as HTMLElement;\n }\n \n // Determine if click is inside the select or portal\n const clickedInsideSelect = this.select?.contains(target);\n const clickedInsidePortal = this.portalDiv?.contains(target);\n \n // If clicked outside both select and portal, save and close\n if (!clickedInsideSelect && !clickedInsidePortal) {\n if (validateOnSave && !this.select?.checkValidity()) {\n this.select?.reportValidity();\n return;\n }\n context.onSave(this.getCurrentValue());\n }\n // Otherwise, click is inside - do nothing (dropdown stays open)\n };\n \n // Add to document with capture phase\n document.addEventListener('click', documentClickHandler, true);\n this.eventListeners.push({ \n event: 'document-click', // Use custom name to identify it\n handler: documentClickHandler \n });\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 all event listeners\n if (this.select) {\n this.eventListeners.forEach(({ event, handler }) => {\n if (event === 'document-click') {\n // Remove from document for multi-select click handler\n document.removeEventListener('click', handler, true);\n } else {\n // Remove from select element\n this.select?.removeEventListener(event, handler);\n }\n });\n this.eventListeners = [];\n \n this.select.remove();\n this.select = undefined;\n this.portalDiv = undefined; // Clean up portal reference\n }\n }\n\n focus(): void {\n this.select?.focus();\n }\n\n getCurrentValue(): T {\n if (!this.select) {\n return (this.options.multiple ? [] : '') as unknown as T;\n }\n \n const value = this.select.value;\n \n // Handle multiple selection\n if (this.options.multiple) {\n return (Array.isArray(value) ? value : [value]) as unknown as T;\n }\n \n // Handle single selection\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 { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef, AfterViewInit, TemplateRef, HostListener } from '@angular/core';\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 templateUrl: './st-cell.component.html',\n styleUrls: ['./st-cell.component.scss'],\n})\nexport class StCellComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() cell!: Cell<any>;\n @Input() editMode: EditMode = EditMode.CLICK;\n @Input() tableState?: TableState;\n @Input() tableConfig?: TableConfig;\n @Input() columnIndex?: number;\n \n @Output() cellChange = new EventEmitter<CellChangeEvent>();\n @Output() cellEdit = new EventEmitter<CellEditEvent>();\n @Output() cellSave = new EventEmitter<CellSaveEvent>();\n @Output() cellCancel = new EventEmitter<CellCancelEvent>();\n @Output() cellSaveAndNavigate = new EventEmitter<{event: KeyboardEvent, direction: NavigationDirection}>();\n \n @ViewChild('editorContainer', { read: ElementRef }) editorContainer?: ElementRef;\n \n private editorCleanup?: () => void;\n\n private editingPositionSubscription?: any;\n\n constructor(\n ) {}\n\n ngOnInit(): void {\n // Subscribe to editing position changes\n // When another cell starts editing, save this cell if it's currently editing\n if (this.tableState && this.columnIndex !== undefined) {\n this.editingPositionSubscription = this.tableState.editingCellPosition$.subscribe(position => {\n const rowIndex = this.cell.getRowIndex();\n \n // If this cell is currently editing\n if (this.cell.isEditing() && rowIndex !== undefined) {\n // And the new editing position is a different cell\n if (position && \n (position.rowIndex !== rowIndex || position.columnIndex !== this.columnIndex)) {\n // Force save this cell\n this.saveEdit(this.cell.getValue());\n }\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n // If cell is already in editing mode, render the editor\n if (this.cell.isEditing() && this.editorContainer) {\n this.renderEditor();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupEditor();\n \n // Unsubscribe from editing position changes\n if (this.editingPositionSubscription) {\n this.editingPositionSubscription.unsubscribe();\n }\n }\n\n get isEditable(): boolean {\n const config = this.cell.getColumnConfig();\n return config.editable ?? false;\n }\n\n get validationError(): string | undefined {\n // Read validation state without triggering validation\n // This prevents ExpressionChangedAfterItHasBeenCheckedError\n const state = this.cell.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 // Only return generic message if cell is marked as invalid\n if (!this.cell.isValid()) {\n return 'Invalid value';\n }\n \n return undefined;\n }\n\n get hasCellTemplate(): boolean {\n const config = this.cell.getColumnConfig();\n return !!config.cellTemplate;\n }\n\n get cellTemplate(): TemplateRef<any> | null {\n return this.cell.getColumnConfig().cellTemplate || null;\n }\n\n get templateContext(): any {\n return {\n $implicit: this.cell.getValue(),\n cell: this.cell,\n rowData: this.cell.getRowData(),\n rowIndex: this.cell.getRowIndex()\n };\n }\n\n @HostListener('keydown', ['$event'])\n onCellKeyDown(event: KeyboardEvent): void {\n // Only handle if this cell is focused\n if (!this.cell.isFocused()) {\n return;\n }\n \n // Use NavigationKey enum for type-safe key checking\n switch (event.key as NavigationKey) {\n case NavigationKey.ENTER:\n if (this.cell.isEditing()) {\n // Save and let navigation happen\n event.preventDefault();\n event.stopPropagation();\n this.saveEdit(this.cell.getValue());\n // Emit event to trigger navigation down\n this.cellSaveAndNavigate.emit({ event, direction: NavigationDirection.DOWN });\n }\n // If not editing, let directive handle navigation\n break;\n \n case NavigationKey.TAB:\n if (this.cell.isEditing()) {\n // Save and let navigation happen\n event.preventDefault();\n event.stopPropagation();\n this.saveEdit(this.cell.getValue());\n const direction = event.shiftKey ? NavigationDirection.LEFT : NavigationDirection.RIGHT;\n this.cellSaveAndNavigate.emit({ event, direction });\n }\n // If not editing, let directive handle navigation\n break;\n \n case NavigationKey.ESCAPE:\n if (this.cell.isEditing()) {\n event.preventDefault();\n event.stopPropagation();\n this.cancelEdit();\n // Stay focused on same cell (no navigation)\n }\n break;\n \n default:\n // Check for alphanumeric keys when focused but not editing\n if (!this.cell.isEditing() && this.isAlphanumericKey(event)) {\n if (this.canEditViaKeyboard()) {\n event.preventDefault();\n event.stopPropagation();\n // Start editing with the pressed key as initial value\n this.startEditWithKey(event.key);\n }\n }\n break;\n }\n }\n \n /**\n * Check if Enter key can trigger editing\n * Using EditMode enum values\n */\n private canEditViaEnter(): boolean {\n return this.isEditable && \n (this.editMode === EditMode.ENTER || this.editMode === EditMode.CLICK);\n }\n \n /**\n * Check if keyboard can trigger editing (for alphanumeric and double-click)\n */\n private canEditViaKeyboard(): boolean {\n return this.isEditable && \n (this.editMode === EditMode.ENTER || this.editMode === EditMode.CLICK);\n }\n \n /**\n * Check if a key is alphanumeric (single character)\n */\n private isAlphanumericKey(event: KeyboardEvent): boolean {\n // Single character keys (letters, numbers, symbols)\n return event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;\n }\n \n /**\n * Start editing with a specific key as the initial value\n */\n private startEditWithKey(key: string): void {\n const canStart = this.cell.startEdit();\n if (canStart) {\n const column = this.cell.getColumnConfig();\n const editor = column.editor;\n \n // Only set initial keypress value if editor accepts it\n // Default to true for backward compatibility with existing editors\n const acceptsKeypress = editor?.acceptsInitialKeypress !== false;\n \n if (acceptsKeypress) {\n // Replace current value with the key\n this.cell.setValue(key, false);\n }\n \n const editEvent: CellEditEvent = {\n cell: this.cell,\n value: acceptsKeypress ? key : this.cell.getValue(),\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n cellState: this.cell.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 // Focus is handled by parent st-table component\n }\n\n onCellDoubleClick(): void {\n // Double-click starts editing regardless of EditMode (Excel-like behavior)\n if (this.isEditable && !this.cell.isEditing()) {\n this.startEdit();\n }\n }\n\n private startEdit(): void {\n const canStart = this.cell.startEdit();\n if (canStart) {\n const column = this.cell.getColumnConfig();\n \n // Notify TableState that this cell is now editing\n if (this.tableState && this.columnIndex !== undefined) {\n const rowIndex = this.cell.getRowIndex();\n if (rowIndex !== undefined) {\n this.tableState.setEditingCell(rowIndex, this.columnIndex);\n }\n }\n \n const editEvent: CellEditEvent = {\n cell: this.cell,\n value: this.cell.getValue(),\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n cellState: this.cell.getState()\n };\n this.cellEdit.emit(editEvent);\n \n // Wait for Angular to render the editor container\n setTimeout(() => {\n this.renderEditor();\n }, 0);\n }\n }\n\n private renderEditor(): void {\n if (!this.editorContainer) {\n return;\n }\n\n const column = this.cell.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 = this.cell.getValue();\n const container = this.editorContainer.nativeElement;\n \n // Create editor context\n const context: CellEditorContext<any> = {\n value,\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n onChange: (newValue: any) => {\n // Trigger eager validation if enabled\n if (this.tableConfig?.validation?.mode === 'eager') {\n // Update cell value temporarily for validation\n this.cell.setValue(newValue, true); // skip validation to avoid double validation\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 // Call editor's edit method\n editor.edit(context);\n \n // Store cleanup callback\n this.editorCleanup = () => {\n if (editor.destroy) {\n editor.destroy();\n }\n // Clear container\n while (container.firstChild) {\n container.removeChild(container.firstChild);\n }\n };\n }\n\n private saveEdit(newValue: any): void {\n const previousValue = this.cell.getValue();\n const wasValid = this.cell.isValid();\n const success = this.cell.saveEdit(newValue);\n \n if (success) {\n const column = this.cell.getColumnConfig();\n const cellState = this.cell.getState();\n const isValid = this.cell.isValid();\n \n // Notify TableState that editing ended\n if (this.tableState) {\n this.tableState.clearEditingCell();\n \n // Update validation state (lazy mode - on save)\n this.updateValidationState();\n }\n \n // Emit save event\n const saveEvent: CellSaveEvent = {\n cell: this.cell,\n newValue: newValue,\n previousValue: previousValue,\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n isValid: isValid,\n validationErrors: cellState.error ? [cellState.error] : undefined,\n cellState: cellState\n };\n this.cellSave.emit(saveEvent);\n \n // Emit change event\n const changeEvent: CellChangeEvent = {\n cell: this.cell,\n oldValue: previousValue,\n newValue: newValue,\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n wasValid: wasValid,\n isValid: isValid,\n cellState: cellState\n };\n this.cellChange.emit(changeEvent);\n \n this.cleanupEditor();\n }\n // If validation fails, keep editing mode\n }\n \n /**\n * Update validation state in TableState\n * Called on save (lazy mode) or on change (eager mode)\n */\n private updateValidationState(): void {\n if (!this.tableState) return;\n \n const column = this.cell.getColumnConfig();\n const isValid = this.cell.isValid();\n const error = this.cell.getState().error;\n const rowIndex = this.cell.getRowIndex();\n \n // Only update if rowIndex is defined\n if (rowIndex === undefined) return;\n \n this.tableState.updateCellValidation(\n rowIndex,\n column.key,\n isValid,\n error\n );\n }\n \n /**\n * Trigger eager validation (on every change)\n */\n private triggerEagerValidation(): void {\n if (!this.tableState || !this.tableConfig) return;\n \n const validationMode = this.tableConfig.validation?.mode || 'lazy';\n if (validationMode !== 'eager') return;\n \n // Re-validate the cell\n this.cell.validate();\n \n // Update validation state\n this.updateValidationState();\n }\n\n private cancelEdit(): void {\n const column = this.cell.getColumnConfig();\n const cellState = this.cell.getState();\n \n // Notify TableState that editing ended\n if (this.tableState) {\n this.tableState.clearEditingCell();\n }\n \n const cancelEvent: CellCancelEvent = {\n cell: this.cell,\n value: this.cell.getValue(),\n previousValue: cellState.previousValue,\n rowData: this.cell.getRowData(),\n columnKey: column.key,\n rowIndex: this.cell.getRowIndex(),\n cellState: cellState\n };\n \n this.cell.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 <ng-container *ngIf=\"!cell.isEditing()\">\n <!-- Custom Template -->\n <ng-container *ngIf=\"hasCellTemplate\">\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: templateContext\"></ng-container>\n </ng-container>\n\n <!-- Default Text Rendering -->\n <span *ngIf=\"!hasCellTemplate\" class=\"cell-display\">\n {{ cell.render() }}\n </span>\n </ng-container>\n\n <!-- Edit Mode -->\n <div *ngIf=\"cell.isEditing()\" class=\"cell-editor\" #editorContainer>\n </div>\n</div>","/**\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 } from '@angular/core';\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 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","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, ElementRef, AfterViewInit, OnChanges, SimpleChanges } from '@angular/core';\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 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 <nile-select \n *ngIf=\"availableOperators.length > 1\"\n label=\"Operator\"\n [value]=\"selectedOperator\"\n (nile-change)=\"onOperatorChange($event)\"\n class=\"filter-operator\">\n <nile-option \n *ngFor=\"let op of availableOperators\" \n [value]=\"op.value\">\n {{ op.label }}\n </nile-option>\n </nile-select>\n \n <!-- Input Field based on type -->\n <div class=\"filter-value-section\">\n \n <!-- Text Input -->\n <nile-input \n *ngIf=\"inputType === 'text'\"\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 <!-- Number Input -->\n <nile-input \n *ngIf=\"inputType === 'number'\"\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 <!-- Date Input -->\n <nile-input \n *ngIf=\"inputType === 'date'\"\n type=\"date\"\n label=\"Value\"\n [value]=\"filterValue\"\n (nile-input)=\"onValueInput($event)\"\n class=\"filter-value-input\">\n </nile-input>\n \n <!-- Checkbox Input -->\n <nile-checkbox\n *ngIf=\"inputType === 'checkbox'\"\n [checked]=\"filterValue\"\n (nile-change)=\"onCheckboxChange($event)\"\n class=\"filter-checkbox\">\n {{ filterValue ? 'True' : 'False' }}\n </nile-checkbox>\n \n <!-- Single Select Dropdown -->\n <nile-select \n *ngIf=\"inputType === 'select'\"\n label=\"Value\"\n [value]=\"filterValue\"\n placeholder=\"-- Select --\"\n (nile-change)=\"onSelectChange($event)\"\n class=\"filter-value-select\">\n <nile-option \n *ngFor=\"let option of dropdownOptions\" \n [value]=\"option.value\">\n {{ option.label }}\n </nile-option>\n </nile-select>\n \n <!-- Multi-Select with Radio Group as example (or keep checkboxes) -->\n <div *ngIf=\"inputType === 'multiselect'\" class=\"filter-multiselect\">\n <label class=\"multiselect-title\">Select Values</label>\n <div class=\"multiselect-options\">\n <nile-checkbox\n *ngFor=\"let option of dropdownOptions\"\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 </div>\n <div *ngIf=\"dropdownOptions.length === 0\" class=\"empty-state\">\n No options available\n </div>\n </div>\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 } from '@angular/core';\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 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<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\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 <nile-menu *ngIf=\"!isFilterOpen\">\n <!-- Dynamically render all visible actions -->\n <ng-container *ngFor=\"let action of visibleActions; let i = index; let last = last\">\n <nile-menu-item \n (click)=\"onActionClick(action)\"\n [class.disabled]=\"isActionDisabled(action)\"\n [class.active]=\"isActionActive(action)\">\n <span class=\"checkmark\" *ngIf=\"isActionActive(action)\">✓</span>\n <nile-icon slot=\"prefix\" *ngIf=\"action.icon && !isActionActive(action)\" [name]=\"action.icon\"></nile-icon>\n <span class=\"action-label\">{{ action.label }}</span>\n </nile-menu-item>\n \n <!-- Add divider after action groups -->\n <nile-divider *ngIf=\"shouldShowDividerAfter(action, i, last)\"></nile-divider>\n </ng-container>\n \n <!-- Fallback if no actions -->\n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\n </nile-menu>\n \n <!-- Filter popup (conditionally rendered) -->\n <st-column-filter\n #filterPopup\n *ngIf=\"isFilterOpen && context\"\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 </div>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\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 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","<div class=\"dropdown-container\" *ngIf=\"isOpen && context\">\n <!-- Backdrop -->\n <div class=\"dropdown-overlay\" (click)=\"closed.emit()\"></div>\n \n <!-- Dropdown menu -->\n <div class=\"dropdown-menu\" [ngStyle]=\"dropdownStyle\">\n <nile-menu *ngIf=\"isOpen\" class=\"dropdown-menu\" [style.left.px]=\"dropdownStyle.left\" [style.top.px]=\"dropdownStyle.top\">\n <ng-container *ngFor=\"let action of visibleActions\">\n <nile-menu-item [class.disabled]=\"isActionDisabled(action)\" (click)=\"onActionClick(action)\" class=\"action-label\">\n <nile-icon *ngIf=\"action.icon\" size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </ng-container>\n \n <nile-menu-item *ngIf=\"visibleActions.length === 0\">No actions available</nile-menu-item>\n </nile-menu>\n </div>\n\n </div>\n","/**\n * st-header Component\n * Encapsulates column-specific logic including sorting and filtering\n */\n\nimport { Component, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\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 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 <button *ngIf=\"isMenuEnabled()\" \n 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 </div>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\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 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<div class=\"dropdown-container\" *ngIf=\"isOpen\">\n <!-- Backdrop -->\n <div class=\"dropdown-backdrop\" (click)=\"closeMenu()\"></div>\n \n <!-- Main Menu -->\n <div class=\"dropdown-menu\" *ngIf=\"currentView === 'main'\" [ngStyle]=\"dropdownStyle\">\n <nile-menu>\n <!-- Add Column -->\n <nile-menu-item *ngIf=\"allowAddColumn\" (click)=\"onAddColumn($event)\">\n <nile-icon slot=\"prefix\" name=\"plus\" size=\"12\"></nile-icon>\n Add Column\n </nile-menu-item>\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 <!-- Column Visibility Submenu -->\n <div class=\"dropdown-menu\" *ngIf=\"currentView === 'columns'\" [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 <nile-menu-item \n *ngFor=\"let column of columnsVisibility\"\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 </nile-menu>\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})\nexport class StKeyboardNavigationDirective {\n @Input() tableState!: TableState;\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 this.tableState.moveFocus(direction);\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);\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})\nexport class StColumnResizeDirective implements OnDestroy {\n /**\n * Column configuration\n */\n @Input() column!: ColumnConfig<any>;\n\n /**\n * Emits when column is resized\n */\n @Output() columnResized = 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 // Update column width (mutate Flyweight config)\n (this.column as any).width = newWidth;\n \n // Update element width immediately for visual feedback\n // this.el.nativeElement.style.width = `${newWidth}px`;\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 { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, ViewChild, ElementRef, AfterViewInit, HostListener } from '@angular/core';\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';\n\n@Component({\n selector: 'st-table',\n templateUrl: './st-table.component.html',\n styleUrls: ['./st-table.component.scss']\n})\nexport class StTableComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n // Z-Index constants for template use\n readonly ZIndex = TableZIndex;\n \n // NEW: Primary configuration input\n @Input() tableConfig!: TableConfig;\n \n // NEW: Raw data input (alternative to cellGrid)\n @Input() data?: any[];\n \n // NEW: Observable/BehaviorSubject data input (for reactive data streams)\n @Input() data$?: Observable<any[]> | BehaviorSubject<any[]>;\n \n @Input() tableState?: TableState;\n \n // DEPRECATED: Use tableConfig instead\n @Input() enableSorting: boolean = true;\n @Input() enableFiltering: boolean = true;\n \n // NEW: State change output\n @Output() stateChange = new EventEmitter<TableStateChangeEvent>();\n \n // NEW: Data change output (for async data updates)\n @Output() dataChange = new EventEmitter<DataChangeEvent>();\n \n // EXISTING: Cell and column events\n @Output() cellEdit = new EventEmitter<CellEditEvent>();\n @Output() cellSave = new EventEmitter<CellSaveEvent>();\n @Output() cellCancel = new EventEmitter<CellCancelEvent>();\n @Output() cellChange = new EventEmitter<CellChangeEvent>();\n @Output() columnResized = new EventEmitter<ColumnResizeEvent>();\n @Output() columnMoved = new EventEmitter<ColumnMoveEvent>();\n \n // NEW: Configuration validation output\n @Output() configValidationErrors = new EventEmitter<SchemaValidationError[]>();\n \n // NEW: Column management output\n @Output() columnAdded = new EventEmitter<ColumnAddEvent>();\n \n // NEW: Row action output\n @Output() rowAction = new EventEmitter<RowActionEvent>();\n \n // NEW: Validation state change output\n @Output() validationStateChange = new EventEmitter<TableValidationState>();\n \n // NEW: Optional validation flag\n @Input() validateConfig: boolean = false;\n \n // Internal state\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 internalData$: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);\n private previousData: any[] = [];\n mergedConfig!: TableConfig;\n \n // Modal state\n public showColumnModal: boolean = false;\n \n // Cached visible columns and cell grid to prevent re-creation on every change detection\n public visibleColumns: ColumnConfig<any>[] = [];\n public visibleCellGrid: Cell<any>[][] = [];\n \n // Row actions dropdown state\n public dropdownState: {\n isOpen: boolean;\n position: { x: number; y: number };\n context: RowActionContext | null;\n } = {\n isOpen: false,\n position: { x: 0, y: 0 },\n context: null\n };\n \n public skeletonColumns?: number[];\n public skeletonRows?: number[];\n\n // Column menu dropdown state\n public columnMenuState: {\n isOpen: boolean;\n position: { x: number; y: number };\n context: ColumnActionContext | null;\n } = {\n isOpen: false,\n position: { x: 0, y: 0 },\n context: null\n };\n \n // Virtual scroll properties\n private scrollContainer?: HTMLElement;\n private scrollSubscription?: Subscription;\n private virtualScrollState$ = new BehaviorSubject<VirtualScrollState | null>(null);\n \n // Observable streams derived from virtual scroll state\n public virtualScrollTotalHeight$: Observable<number> = this.virtualScrollState$.pipe(\n map(state => state?.totalHeight ?? 0),\n distinctUntilChanged()\n );\n \n public virtualScrollOffsetY$: Observable<number> = this.virtualScrollState$.pipe(\n map(state => state?.offsetY ?? 0),\n distinctUntilChanged()\n );\n\n public virtualScrollOffsetYNeg$: Observable<number> = this.virtualScrollState$.pipe(\n map(state => Number(state?.offsetY ?? 0) * -1 ),\n distinctUntilChanged()\n );\n \n public visibleRows$: Observable<Cell<any>[][]> = this.virtualScrollState$.pipe(\n map(state => {\n if (!state) return this.visibleCellGrid;\n const { startIndex, endIndex } = state;\n return this.visibleCellGrid.slice(startIndex, endIndex);\n })\n );\n \n @ViewChild('scrollViewport', { read: ElementRef }) scrollViewport?: ElementRef<HTMLElement>;\n \n constructor(\n private schemaValidator: JsonSchemaValidatorService,\n private logger: ValidationLoggerService,\n private virtualScrollService: VirtualScrollService,\n ) {}\n\n ngOnInit(): void {\n // Validate that at least tableConfig or columns is provided\n if (!this.tableConfig) {\n throw new Error('Either tableConfig or columns must be provided');\n }\n \n // Merge config with defaults\n if (this.tableConfig) {\n this.mergedConfig = mergeTableConfig(this.tableConfig);\n \n // Validate configuration if enabled\n if (this.validateConfig) {\n this.validateConfiguration(this.mergedConfig);\n }\n }\n \n // Create or use TableState\n if (!this.tableState) {\n this.createInternalTableState();\n } else {\n // Subscribe to external tableState changes\n this.subscribeToExternalTableState();\n }\n \n // Setup data source (sync or async)\n this.setupDataSource();\n \n // Calculate sticky offsets\n const rowNumberWidth = this.mergedConfig.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 28 : 0; // Settings column is ~32px wide when visible\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: this.mergedConfig.tableSkeleton?.columns ?? 10 }, (_, i) => i);\n this.skeletonRows = Array.from({ length: this.mergedConfig.tableSkeleton?.rows ?? 10 }, (_, i) => i);\n }\n \n ngAfterViewInit(): void {\n // Setup virtual scroll after view is ready\n if (this.isVirtualScrollEnabled() && this.scrollViewport) {\n this.setupVirtualScrollListener();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // Validate configuration when tableConfig changes\n if (changes['tableConfig'] && !changes['tableConfig'].firstChange && this.tableConfig) {\n this.mergedConfig = mergeTableConfig(this.tableConfig);\n \n // Validate configuration if enabled\n if (this.validateConfig) {\n this.validateConfiguration(this.mergedConfig);\n }\n \n // Update internal table state with new columns if using internal state\n if (this.internalTableState) {\n this.internalTableState.updateColumns(this.mergedConfig.columns);\n }\n \n // Update visible columns and cell grid\n this.updateVisibleData();\n }\n \n // Recreate cell grid when data changes (only if not using data$ Observable)\n if (changes['data'] && !changes['data'].firstChange && this.data && !this.data$) {\n this.handleSyncDataChange(changes['data'].previousValue || []);\n }\n \n // Handle data$ Observable input changes\n if (changes['data$'] && !changes['data$'].firstChange) {\n this.setupDataSource();\n }\n \n // Recreate cell grid when cellGrid changes\n if (changes['cellGrid'] && !changes['cellGrid'].firstChange) {\n // Cell grid was updated externally, no need to recreate\n // Just recalculate sticky offsets if needed\n if (this.getActiveTableState()) {\n const rowNumberWidth = this.mergedConfig.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n this.getActiveTableState().calculateStickyOffsets(rowNumberWidth, settingsColumnWidth);\n }\n // Update visible columns and cell grid\n this.updateVisibleData();\n }\n \n // Handle tableState input changes (when external state is provided, e.g., in workbook)\n if (changes['tableState'] && !changes['tableState'].firstChange && this.tableState) {\n // Unsubscribe from all old tableState observables to prevent memory leaks\n this.stateSubscription?.unsubscribe();\n this.validationSubscription?.unsubscribe();\n this.focusSubscription?.unsubscribe();\n \n // Resubscribe to new tableState's observables\n this.subscribeToExternalTableState();\n \n // Reinitialize keyboard navigation with new tableState\n if (this.isKeyboardNavigationEnabled()) {\n this.initializeKeyboardNavigation();\n }\n }\n \n // Recalculate virtual scroll when data changes\n if ((changes['data'] || changes['cellGrid']) && !changes['data']?.firstChange) {\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState$.value;\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$.next(newState);\n }\n }\n \n // Update keyboard navigation dimensions if enabled\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 /**\n * Create internal TableState from config\n */\n private createInternalTableState(): void {\n const columns = this.getActiveColumns();\n this.internalTableState = new TableState(columns, {\n pageSize: this.mergedConfig.pagination?.pageSize,\n initialPage: this.mergedConfig.initialState?.page\n });\n \n // Set total items if provided in config (for server-side pagination)\n if (this.mergedConfig.pagination?.totalItems !== undefined) {\n this.internalTableState.setTotalItems(this.mergedConfig.pagination.totalItems);\n }\n \n // Apply initial sort if provided\n if (this.mergedConfig.initialState?.sortBy) {\n this.mergedConfig.initialState.sortBy.forEach(sort => {\n this.internalTableState!.addSortToColumn(sort.key, sort.direction);\n });\n }\n \n // Apply initial filters if provided\n if (this.mergedConfig.initialState?.filters) {\n this.mergedConfig.initialState.filters.forEach(filter => {\n this.internalTableState!.setFilterOnColumn(filter.key, filter.operator, filter.value);\n });\n }\n \n // Subscribe to internal state changes and re-emit\n this.subscribeToInternalState();\n \n // Subscribe to validation state changes and re-emit\n this.subscribeToValidationState();\n }\n \n private subscribeToValidationState() {\n if (!this.internalTableState) return;\n this.validationSubscription = this.internalTableState.tableValidationState$\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 .subscribe(event => {\n this.stateChange.emit(event);\n\n // Update visible columns and cell grid on visibility changes\n if (event.type === 'column-visibility' || event.type === 'column-config') {\n this.updateVisibleData();\n }\n });\n }\n\n /**\n * Subscribe to external TableState changes\n */\n private subscribeToExternalTableState(): void {\n if (!this.tableState) return;\n \n this.stateSubscription = this.tableState.stateChange$\n .subscribe(event => {\n this.stateChange.emit(event);\n \n // Update visible columns and cell grid on visibility changes\n if (event.type === 'column-visibility' || event.type === 'column-config') {\n this.updateVisibleData();\n }\n });\n \n // Subscribe to validation state changes and re-emit\n this.subscribeToValidationState();\n }\n \n /**\n * Create cell grid from raw data\n */\n private createCellGridFromData(): void {\n if (!this.data) return;\n \n const columns = this.getActiveColumns();\n this.internalCellGrid = this.data.map((rowData, rowIndex) =>\n columns.map(column => \n new Cell(column, rowData[column.key], rowData, rowIndex)\n )\n );\n }\n \n /**\n * Setup data source - either sync array or async Observable\n * Handles initialization and subscription to data changes\n */\n private setupDataSource(): void {\n // Warn if both data and data$ are provided\n if (this.data && this.data$) {\n console.warn('StTableComponent: Both data and data$ inputs are provided. Using data$ (Observable) and ignoring data array.');\n }\n \n // Clean up existing subscription\n this.dataSubscription?.unsubscribe();\n \n // Priority: data$ takes precedence over data\n if (this.data$) {\n this.subscribeToDataChanges();\n } else if (this.data) {\n // For sync data, emit once through internal observable\n this.previousData = [];\n this.internalData$.next(this.data);\n this.subscribeToDataChanges();\n } else {\n // No data provided, emit empty array\n this.previousData = [];\n this.internalData$.next([]);\n this.subscribeToDataChanges();\n }\n }\n \n /**\n * Subscribe to data changes (either from data$ input or internal BehaviorSubject)\n */\n private subscribeToDataChanges(): void {\n const dataSource$ = this.data$ || this.internalData$.asObservable();\n \n this.dataSubscription = dataSource$.subscribe(newData => {\n this.handleDataChange(newData);\n });\n }\n \n /**\n * Handle data change from Observable emission\n */\n private handleDataChange(newData: any[]): void {\n const timestamp = Date.now();\n const source: 'sync' | 'async' = this.data$ ? 'async' : 'sync';\n \n // Emit data change event\n this.dataChange.emit({\n previousData: this.previousData,\n currentData: newData,\n timestamp,\n source\n });\n \n // Update data reference\n this.data = newData;\n this.previousData = [...newData];\n \n // Recreate cell grid\n this.createCellGridFromData();\n \n // Update visible data\n this.updateVisibleData();\n \n // Recalculate virtual scroll if enabled\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState$.value;\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$.next(newState);\n }\n }\n \n // Update keyboard navigation dimensions if enabled\n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().setDimensions(\n this.visibleCellGrid.length,\n this.visibleColumns.length\n );\n }\n }\n \n /**\n * Handle sync data change (from @Input() data changes)\n */\n private handleSyncDataChange(previousData: any[]): void {\n this.previousData = previousData;\n this.internalData$.next(this.data || []);\n }\n \n /**\n * Get active TableState (provided or internal)\n */\n getActiveTableState(): TableState {\n return this.tableState || this.internalTableState!;\n }\n \n /**\n * Get active cell grid (provided or internal)\n */\n getActiveCellGrid(): Cell<any>[][] {\n return this.internalCellGrid || [];\n }\n\n /**\n * Get visible cell grid (filtered to only include visible columns)\n */\n getVisibleCellGrid(): Cell<any>[][] {\n const allColumns = this.getActiveColumns();\n const visibleColumns = this.getVisibleColumns();\n const visibleColumnKeys = new Set(visibleColumns.map(col => col.key));\n \n // Get column indices for visible columns\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 /**\n * Update the visible cell grid based on current visibility and column order\n * Called when data, visibility, or column order changes\n * \n * This method properly handles column reordering by mapping cells based on\n * column keys rather than indices, ensuring cells follow their columns.\n */\n private updateVisibleCellGrid(): void {\n const fullGrid = this.getActiveCellGrid();\n \n // Handle empty grid\n if (!fullGrid || fullGrid.length === 0) {\n this.visibleCellGrid = [];\n return;\n }\n \n // Build a map of columnKey → cellIndex for the current grid structure\n // This allows us to find cells by column key regardless of their current position\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 // Reorder cells to match the visibleColumns order\n // This ensures that when columns are moved, the cell data follows\n this.visibleCellGrid = fullGrid.map(row => {\n return this.visibleColumns\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\n /**\n * Update the visible columns based on current visibility\n * Called only when visibility actually changes\n */\n private updateVisibleColumns(): void {\n const allColumns = this.getActiveColumns();\n this.visibleColumns = allColumns.filter(col => col.visible !== false);\n \n // Recalculate sticky offsets for visible columns only\n this.recalculateVisibleStickyOffsets(this.visibleColumns);\n }\n\n /**\n * Update both visible columns and cell grid\n * Call this whenever data or visibility changes\n */\n private updateVisibleData(): void {\n this.updateVisibleColumns();\n this.updateVisibleCellGrid();\n }\n \n /**\n * Get active columns (from config or legacy input)\n */\n getActiveColumns(): ColumnConfig<any>[] {\n return this.mergedConfig.columns;\n }\n\n /**\n * Get visible columns (filtered by visibility property)\n * Also recalculates sticky offsets based on visible columns only\n */\n getVisibleColumns(): ColumnConfig<any>[] {\n const allColumns = this.getActiveColumns();\n const visibleColumns = allColumns.filter(col => col.visible !== false); // Default to true if not set\n \n // Recalculate sticky offsets for visible columns only\n this.recalculateVisibleStickyOffsets(visibleColumns);\n \n return visibleColumns;\n }\n\n /**\n * Recalculate sticky offsets based on visible columns only\n * This ensures correct positioning when columns are hidden\n */\n private recalculateVisibleStickyOffsets(visibleColumns: ColumnConfig<any>[]): void {\n // Calculate left sticky offsets\n // Account for row number column width if shown\n let leftOffset = this.mergedConfig.showRowNumber ? 30 : 0;\n visibleColumns.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 let rightOffset = 0;\n for (let i = visibleColumns.length - 1; i >= 0; i--) {\n const col = visibleColumns[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 onColumnResized(event: ColumnResizeEvent): void {\n // Recalculate sticky offsets after resize\n const rowNumberWidth = this.mergedConfig.showRowNumber ? 30 : 0;\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n this.getActiveTableState().calculateStickyOffsets(rowNumberWidth, settingsColumnWidth);\n \n // Emit to parent\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 // Calculate target index\n const targetIndex = event.direction === 'left' \n ? currentIndex - 1 \n : currentIndex + 1;\n \n // Check bounds\n if (targetIndex < 0 || targetIndex >= columns.length) {\n return;\n }\n \n // Swap columns\n [columns[currentIndex], columns[targetIndex]] = \n [columns[targetIndex], columns[currentIndex]];\n \n // Update TableState with new column order\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 // Force virtual scroll to re-render by re-emitting current state\n // This ensures visibleRows$ picks up the updated visibleCellGrid\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState$.value;\n if (currentState) {\n this.virtualScrollState$.next({...currentState});\n }\n }\n }\n\n /**\n * Move column to position just before right sticky columns (used when pinning right)\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 // Find the index of the first right-sticky column\n const firstRightStickyIndex = columns.findIndex(c => c.sticky === 'right');\n \n // Determine target index: just before first right-sticky, or at end if none exist\n const targetIndex = firstRightStickyIndex !== -1 ? firstRightStickyIndex : columns.length;\n \n // If already at target position, no need to move\n if (currentIndex === targetIndex || currentIndex === targetIndex - 1) return;\n \n // Remove column from current position\n const [column] = columns.splice(currentIndex, 1);\n \n // Adjust target index if we removed an element before it\n const adjustedTargetIndex = currentIndex < targetIndex ? targetIndex - 1 : targetIndex;\n \n // Insert at target position (before first right-sticky column, or at end)\n columns.splice(adjustedTargetIndex, 0, column);\n \n // Update TableState with new column order\n this.getActiveTableState().updateColumns(columns);\n \n // Force virtual scroll to re-render\n if (this.isVirtualScrollEnabled()) {\n const currentState = this.virtualScrollState$.value;\n if (currentState) {\n this.virtualScrollState$.next({...currentState});\n }\n }\n }\n\n /**\n * Get cumulative left offset for a sticky column on the left side\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 /**\n * Get cumulative right offset for a sticky column on the right side\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 /**\n * Check if top pagination should be shown\n */\n showTopPagination(): boolean {\n return this.mergedConfig.pagination?.enabled == true &&\n this.mergedConfig.pagination?.showTopControls === true;\n }\n \n /**\n * Check if bottom pagination should be shown\n */\n showBottomPagination(): boolean {\n return this.mergedConfig.pagination?.enabled == true &&\n (this.mergedConfig.pagination?.showBottomControls ?? true);\n }\n \n /**\n * Validate table configuration\n * @param config Table configuration to validate\n */\n private validateConfiguration(config: TableConfig): void {\n const result = this.schemaValidator.validate(config, true, false); // Disable logging here, we'll log manually with context\n \n if (!result.valid && result.errors.length > 0) {\n // Emit validation errors\n this.configValidationErrors.emit(result.errors);\n \n // Log validation errors with context\n const configSnippet = JSON.stringify(config, null, 2).substring(0, 500); // First 500 chars of config\n this.logger.logValidationErrors(result.errors, 'renderer', {\n configSnippet: configSnippet\n });\n \n // Log warnings to console (don't break rendering)\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 /**\n * Handle add column button click\n */\n onAddColumnClick(): void {\n this.showColumnModal = true;\n }\n \n /**\n * Handle column created from modal\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 // Emit the new column to parent component\n this.columnAdded.emit(addEvent);\n \n // Close the modal\n this.showColumnModal = false;\n }\n \n /**\n * Handle modal cancelled\n */\n onModalCancelled(): void {\n this.showColumnModal = false;\n }\n\n /**\n * Check if virtual scroll is enabled\n */\n isVirtualScrollEnabled(): boolean {\n return this.mergedConfig.display?.virtualScroll?.enabled ?? false;\n }\n \n /**\n * Check if column is the first sticky-right column (for shadow styling)\n */\n isFirstStickyRight(columnKey: string): boolean {\n const stickyRightColumns = this.visibleColumns.filter(col => col.sticky === 'right' && !col.key.includes('settings'));\n return stickyRightColumns.length > 0 && stickyRightColumns[0].key === columnKey;\n }\n \n /**\n * Get virtual scroll item size\n */\n getVirtualScrollItemSize(): number {\n return this.mergedConfig.display?.virtualScroll?.itemSize ?? 48;\n }\n \n /**\n * Get viewport height\n */\n getVirtualScrollViewportHeight(): number {\n return this.mergedConfig.display?.virtualScroll?.viewportHeight ?? 600;\n }\n \n /**\n * Get buffer size\n */\n getVirtualScrollBufferSize(): number {\n return this.mergedConfig.display?.virtualScroll?.bufferSize ?? 5;\n }\n \n /**\n * Initialize virtual scroll state\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$.next(newState);\n }\n \n /**\n * Setup scroll event listener\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 .subscribe(scrollTop => this.onVirtualScroll(scrollTop));\n }\n \n /**\n * Handle virtual scroll event\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$.next(newState);\n }\n \n /**\n * Get row index for tracking\n */\n getAbsoluteRowIndex(relativeIndex: number): number {\n const currentState = this.virtualScrollState$.value;\n if (!currentState) return relativeIndex;\n return currentState.startIndex + relativeIndex;\n }\n \n /**\n * TrackBy function for better performance\n */\n trackByRowIndex = (index: number, row: Cell<any>[]): number => {\n return this.getAbsoluteRowIndex(index);\n }\n \n /**\n * Scroll to specific row programmatically\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 /**\n * Check if row actions are enabled\n */\n hasRowActions(): boolean {\n return !!(this.mergedConfig.features?.rowManagement?.actions && \n this.mergedConfig.features.rowManagement.actions.length > 0);\n }\n \n /**\n * Get row actions from config\n */\n getRowActions(): RowAction[] {\n return this.mergedConfig.features?.rowManagement?.actions || [];\n }\n \n /**\n * Get row data from cell grid\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 // Get raw data from first cell (all cells in a row share the same rowData)\n return row[0]?.getRowData() || null;\n }\n \n /**\n * Open row actions dropdown\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 // Calculate position (below the button by default)\n const position = {\n x: rect.left,\n y: rect.bottom + 4 // 4px gap\n };\n \n // Create context\n const context: RowActionContext = {\n rowData,\n rowIndex,\n actions: this.getRowActions()\n };\n \n // Update dropdown state\n this.dropdownState = {\n isOpen: true,\n position,\n context\n };\n \n // Disable body scroll\n document.body.style.overflow = 'hidden';\n \n // If virtual scroll is enabled, add scroll listener to close dropdown\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 /**\n * Close row actions dropdown\n */\n closeRowActionsDropdown(): void {\n this.dropdownState = {\n isOpen: false,\n position: { x: 0, y: 0 },\n context: null\n };\n \n // Re-enable body scroll\n document.body.style.overflow = '';\n }\n \n /**\n * Handle row action clicked\n */\n onRowActionClicked(event: RowActionEvent): void {\n // Execute action callback if provided\n if (event.action.action) {\n event.action.action(event.rowData, event.rowIndex);\n }\n \n // Emit event to parent\n this.rowAction.emit(event);\n \n // Close dropdown\n this.closeRowActionsDropdown();\n }\n\n // ============================================================================\n // COLUMN MENU ACTIONS\n // ============================================================================\n\n /**\n * Open column menu dropdown\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 // Calculate position (below the button by default)\n const position = {\n x: rect.left,\n y: rect.bottom + 4 // 4px gap\n };\n\n // Create context\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 // Update column menu state\n this.columnMenuState = {\n isOpen: true,\n position,\n context\n };\n\n // Disable body scroll\n document.body.style.overflow = 'hidden';\n\n // If virtual scroll is enabled, add scroll listener to close dropdown\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 /**\n * Close column menu dropdown\n */\n closeColumnMenu(): void {\n this.columnMenuState = {\n isOpen: false,\n position: { x: 0, y: 0 },\n context: null\n };\n\n // Re-enable body scroll\n document.body.style.overflow = '';\n }\n\n /**\n * Handle column action clicked\n */\n onColumnActionClicked(event: ColumnActionEvent): void {\n // Execute action callback if provided\n if (event.action.action) {\n event.action.action(event.column, event.columnIndex);\n }\n\n // Don't close menu if it's a filter action (filter needs menu to stay open)\n if (event.action.id === 'filter') {\n return;\n }\n\n // Close dropdown for other actions\n this.closeColumnMenu();\n }\n\n /**\n * Get column actions (built-in + custom)\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 // Add built-in actions if enabled (default: true)\n const includeBuiltIn = column.includeBuiltInActions ?? true;\n if (includeBuiltIn) {\n actions.push(...this.getBuiltInColumnActions(column, columnIndex, isFirst, isLast));\n }\n \n // Add custom column actions from config\n if (column.columnActions && column.columnActions.length > 0) {\n actions.push(...column.columnActions);\n }\n \n return actions;\n }\n\n /**\n * Get built-in column actions (sort, filter, pin, move)\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 // Sort ascending\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 // Sort descending\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 // Clear sort (only show if currently sorted)\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 // Filter\n if (column.filterable !== false) {\n actions.push({\n id: 'filter',\n label: 'Filter',\n icon: '⚑',\n action: () => {\n // Filter action handled by column menu component\n }\n });\n }\n\n // Pin Left (if not already pinned)\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 // Pin Right (if not already pinned)\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 // Unpin (if currently pinned)\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 // Move left (only if movable and not pinned)\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 // Move right (only if movable and not pinned)\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 /**\n * Get sort label based on column data type\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 // ============================================================================\n // KEYBOARD NAVIGATION\n // ============================================================================\n\n /**\n * Initialize keyboard navigation\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 // Subscribe to focus position changes\n this.focusSubscription = tableState.focusedCellPosition$.subscribe(position => {\n this.updateCellFocusStates(position);\n });\n \n // Auto-focus first cell to enable keyboard navigation\n if (this.visibleCellGrid.length > 0 && this.visibleColumns.length > 0) {\n setTimeout(() => {\n tableState.focusCell(0, 0);\n }, 0);\n }\n }\n \n /**\n * Update focus state in all cells\n */\n private updateCellFocusStates(position: CellFocusPosition | null): void {\n if (!this.visibleCellGrid) return;\n \n for (let rowIndex = 0; rowIndex < this.visibleCellGrid.length; rowIndex++) {\n const row = this.visibleCellGrid[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 // Focus the actual DOM element\n this.focusTdElement(rowIndex, colIndex);\n } else {\n cell.blur();\n }\n }\n }\n }\n \n /**\n * Focus the TD element in the DOM and scroll it into view,\n * accounting for sticky columns on left and right\n */\n private focusTdElement(rowIndex: number, colIndex: number): void {\n // Use setTimeout to ensure DOM has updated\n setTimeout(() => {\n // Use absolute row index for virtual scroll compatibility\n const absoluteRowIndex = this.getAbsoluteRowIndex(rowIndex);\n const tr = document.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 /**\n * Scroll a cell into view, accounting for sticky columns\n */\n private scrollCellIntoView(cell: HTMLElement, colIndex: number): void {\n // Find the scroll container\n const scrollContainer = this.getScrollContainerElement();\n if (!scrollContainer) return;\n\n const cellRect = cell.getBoundingClientRect();\n const containerRect = scrollContainer.getBoundingClientRect();\n\n // Calculate sticky column widths\n const { leftStickyWidth, rightStickyWidth } = this.calculateStickyWidths();\n\n // Calculate visible area (excluding sticky columns)\n const visibleLeft = containerRect.left + leftStickyWidth;\n const visibleRight = containerRect.right - rightStickyWidth;\n const visibleTop = containerRect.top;\n const visibleBottom = containerRect.bottom;\n\n // Check if column is sticky (don't scroll for sticky columns)\n const column = this.visibleColumns[colIndex];\n if (column?.sticky) {\n // Just ensure vertical visibility for sticky columns\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 // Horizontal scrolling\n if (cellRect.left < visibleLeft) {\n // Cell is hidden behind left sticky columns\n scrollContainer.scrollLeft -= (visibleLeft - cellRect.left);\n } else if (cellRect.right > visibleRight) {\n // Cell is hidden behind right sticky columns\n scrollContainer.scrollLeft += (cellRect.right - visibleRight);\n }\n\n // Vertical scrolling\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 /**\n * Get the scroll container element\n */\n private getScrollContainerElement(): HTMLElement | null {\n // Prefer cached container if already resolved\n if (this.scrollContainer) {\n return this.scrollContainer;\n }\n // Virtual scroll uses scrollViewport\n if (this.isVirtualScrollEnabled() && this.scrollViewport?.nativeElement) {\n this.scrollContainer = this.scrollViewport.nativeElement;\n return this.scrollContainer;\n }\n // Standard mode uses .st-table container (cache it to avoid selecting wrong table repeatedly)\n const tableContainer = document.querySelector('.st-table') as HTMLElement | null;\n if (tableContainer) {\n this.scrollContainer = tableContainer;\n }\n return this.scrollContainer || null;\n }\n\n /**\n * Calculate total width of sticky columns on left and right\n */\n private calculateStickyWidths(): { leftStickyWidth: number; rightStickyWidth: number } {\n let leftStickyWidth = 0;\n let rightStickyWidth = 0;\n\n // Account for row number column if enabled\n if (this.mergedConfig.showRowNumber) {\n leftStickyWidth += 30; // Row number column width\n }\n\n // Calculate from column configs\n for (const col of this.visibleColumns) {\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 // Account for settings column only when row actions are enabled (use consistent width)\n const settingsColumnWidth = this.hasRowActions() ? 32 : 0;\n rightStickyWidth += settingsColumnWidth;\n\n return { leftStickyWidth, rightStickyWidth };\n }\n \n /**\n * Handle cell click\n */\n onCellClick(rowIndex: number, columnIndex: number): void {\n if (!this.isKeyboardNavigationEnabled()) return;\n this.getActiveTableState().focusCell(rowIndex, columnIndex);\n }\n \n /**\n * Handle cell entering edit mode\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 columnIndex = this.visibleColumns.findIndex(col => col.key === columnKey);\n \n if (rowIndex !== undefined && columnIndex >= 0) {\n this.getActiveTableState().setEditingCell(rowIndex, columnIndex);\n }\n }\n }\n \n /**\n * Handle cell save\n */\n onCellSave(event: CellSaveEvent): void {\n this.cellSave.emit(event);\n \n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n }\n }\n \n /**\n * Handle cell cancel\n */\n onCellCancel(event: CellCancelEvent): void {\n this.cellCancel.emit(event);\n \n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n }\n }\n \n /**\n * Handle cell save with navigation (Excel-like behavior)\n */\n onCellSaveAndNavigate(event: {event: KeyboardEvent, direction: NavigationDirection}): void {\n // Navigation is already handled by the directive after save\n // Just ensure editing state is cleared\n if (this.isKeyboardNavigationEnabled()) {\n this.getActiveTableState().clearEditingCell();\n // Move focus in the specified direction\n setTimeout(() => {\n this.getActiveTableState().moveFocus(event.direction);\n }, 0);\n }\n }\n \n /**\n * Handle focus on table container - focus first cell if no cell is focused\n */\n onTableContainerFocus(event: FocusEvent): void {\n if (!this.isKeyboardNavigationEnabled()) return;\n \n const tableState = this.getActiveTableState();\n const currentFocus = tableState.getFocusedPosition();\n \n // If no cell is focused, focus the first cell\n if (!currentFocus && this.visibleCellGrid.length > 0 && this.visibleColumns.length > 0) {\n tableState.focusCell(0, 0);\n }\n }\n \n /**\n * Check if keyboard navigation is enabled\n */\n isKeyboardNavigationEnabled(): boolean {\n return this.mergedConfig.features?.keyboardNavigation?.enabled ?? false;\n }\n \n /**\n * Get EditMode enum value for cells\n * For Excel-like tables with keyboard navigation, use ENTER mode\n * which allows arrow key navigation without triggering edit.\n * Double-click will still work to start editing.\n */\n getEditModeForCells(): EditMode {\n // If keyboard navigation is enabled, use ENTER mode for Excel-like behavior\n // Otherwise use CLICK mode for immediate editing\n if (this.isKeyboardNavigationEnabled()) {\n return EditMode.ENTER;\n }\n return EditMode.CLICK;\n }\n \n /**\n * Clear focus when clicking outside table\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 \n if (!tableElement) {\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.virtualScrollState$.complete();\n this.internalData$.complete();\n }\n \n}\n\n","<!-- Top pagination controls -->\n<st-pagination \n *ngIf=\"showTopPagination() && !(mergedConfig.tableSkeleton?.enabled | async)\" \n [tableState]=\"getActiveTableState()\"\n [tableConfig]=\"mergedConfig\"\n position=\"top\">\n</st-pagination>\n\n<div class=\"st-table\" *ngIf=\"!(mergedConfig.tableSkeleton?.enabled | async)\" \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 [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 <div class=\"st-scroll-viewport\" #scrollViewport *ngIf=\"isVirtualScrollEnabled()\"\n [ngStyle]=\"{ 'height.px': getVirtualScrollViewportHeight() }\">\n\n <!-- Spacer to create scrollable area -->\n <div class=\"st-scroll-spacer\" [ngStyle]=\"{ 'height.px': virtualScrollTotalHeight$ | async }\">\n </div>\n\n <!-- Table positioner with transform (instead of tbody) -->\n <div class=\"st-table-positioner\" [ngStyle]=\"{ transform: 'translateY(' + (virtualScrollOffsetY$ | async) + 'px)' }\">\n <!-- Table with only visible rows -->\n <ng-container *ngTemplateOutlet=\"tableTemplate; context: { \n mode: 'virtual',\n theadStyle: { top: (virtualScrollOffsetYNeg$ | async) + 'px' }\n }\"></ng-container>\n </div>\n </div>\n \n <!-- Standard table (when virtual scroll disabled) -->\n <ng-container *ngIf=\"!isVirtualScrollEnabled()\">\n <ng-container *ngTemplateOutlet=\"tableTemplate; context: { \n mode: 'standard',\n theadStyle: null\n }\"></ng-container>\n </ng-container>\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<ng-container *ngIf=\"(mergedConfig.tableSkeleton?.enabled | async)\">\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\n</ng-container>\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<st-pagination \n *ngIf=\"showBottomPagination() && !(mergedConfig.tableSkeleton?.enabled | async)\" \n [tableState]=\"getActiveTableState()\"\n [tableConfig]=\"mergedConfig\"\n position=\"bottom\">\n</st-pagination>\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 <th *ngIf=\"mergedConfig.showRowNumber\" 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 <!-- Column Headers -->\n <th \n *ngFor=\"let column of visibleColumns; let colIndex = index; let isFirst = first; let isLast = last\"\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 <div \n class=\"resize-handle\" \n stColumnResize\n [column]=\"column\"\n (columnResized)=\"onColumnResized($event)\"\n *ngIf=\"column.resizable !== false\">\n </div>\n </th>\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 <ng-container *ngIf=\"mode === 'virtual'\">\n <tr *ngFor=\"let row of visibleRows$ | async; let relativeIndex = index; trackBy: trackByRowIndex\"\n [attr.data-row-index]=\"getAbsoluteRowIndex(relativeIndex)\">\n <!-- Row Number Cell -->\n <td *ngIf=\"mergedConfig.showRowNumber\" 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 <ng-container *ngTemplateOutlet=\"bodyCellTemplate; context: { \n row: row,\n rowIndex: getAbsoluteRowIndex(relativeIndex),\n mode: 'virtual',\n relativeIndex: relativeIndex\n }\"></ng-container>\n </tr>\n </ng-container>\n\n <!-- Standard Rows -->\n <ng-container *ngIf=\"mode === 'standard'\">\n <tr *ngFor=\"let row of visibleCellGrid; let rowIndex = index\" [attr.data-row-index]=\"rowIndex\">\n <!-- Row Number Cell -->\n <td *ngIf=\"mergedConfig.showRowNumber\" 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 <ng-container *ngTemplateOutlet=\"bodyCellTemplate; context: { \n row: row,\n rowIndex: rowIndex,\n mode: 'standard'\n }\"></ng-container>\n </tr>\n </ng-container>\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 <td \n *ngFor=\"let cell of row; let colIndex = index\"\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 <st-cell \n *ngIf=\"mode === 'virtual'\"\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 <!-- Standard Cell -->\n <st-cell \n *ngIf=\"mode === 'standard'\"\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 </td>\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 <button \n *ngIf=\"hasRowActions()\"\n class=\"settings-trigger\"\n (click)=\"openRowActionsDropdown($event, getRowData(rowIndex), rowIndex)\"\n type=\"button\" \n aria-label=\"Row actions\">\n ⋯\n </button>\n </td>\n </ng-template>\n\n<ng-template #skeletonLoader>\n <div class=\"list-row\" *ngIf=\"(mergedConfig.tableSkeleton?.enabled | async)\">\n <div *ngFor=\"let i of skeletonColumns\" class=\"list-content\">\n <nile-skeleton-loader variant=\"text\" width=\"90%\" height=\"18\" *ngFor=\"let j of skeletonRows\"></nile-skeleton-loader>\n </div>\n </div>\n</ng-template>","import { Directive, ElementRef, EventEmitter, HostListener, Output } from '@angular/core';\n\n@Directive({\n selector: '[clickOutside]'\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: HTMLElement) {\n const clickedInside = this.el.nativeElement.contains(target);\n if (!clickedInside) {\n this.clickOutside.emit();\n }\n }\n}\n\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\nimport { TableState } from '../../models/table-state.class';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'st-column-visibility',\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 <div class=\"visibility-dropdown\" *ngIf=\"isOpen\">\n <div class=\"dropdown-header\">Show/Hide Columns</div>\n <div class=\"dropdown-content\">\n <label *ngFor=\"let column of getColumnsVisibility()\" \n 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 </div>\n </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'st-add-column-button',\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","<button \n *ngIf=\"enabled\" \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 } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } 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 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 <span class=\"error-message\" *ngIf=\"hasError('key')\">\n {{ getErrorMessage('key') }}\n </span>\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 <option *ngFor=\"let type of dataTypes\" [value]=\"type.value\">\n {{ type.label }}\n </option>\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 <option *ngFor=\"let option of stickyOptions\" [value]=\"option.value\">\n {{ option.label }}\n </option>\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 <option *ngFor=\"let align of alignments\" [value]=\"align.value\">\n {{ align.label }}\n </option>\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 <option *ngFor=\"let align of verticalAlignments\" [value]=\"align.value\">\n {{ align.label }}\n </option>\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 <option *ngFor=\"let mode of editModes\" [value]=\"mode.value\">\n {{ mode.label }}\n </option>\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\n","import { Component, Output, EventEmitter, OnInit, OnDestroy, ViewChild } from '@angular/core';\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 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 } from '@angular/core';\nimport { SheetAction, SheetActionEvent } from '../../../models/sheet-action.interface';\n\n@Component({ \n selector: 'st-sheet-actions',\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","<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 *ngIf=\"visibleActions.length > 0\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n</button>\n\n<!-- Dropdown container -->\n<div class=\"dropdown-container\" *ngIf=\"isOpen\">\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 <nile-menu-item \n *ngFor=\"let action of visibleActions\"\n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" size=\"14\" slot=\"prefix\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n \n <nile-menu-item *ngIf=\"visibleActions.length === 0\">\n No actions available\n </nile-menu-item>\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} from '@angular/core';\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';\n\n@Component({\n selector: 'st-sheet',\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"," \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 <st-sheet-actions \n *ngIf=\"visibleActions.length > 0\"\n [actions]=\"visibleActions\" \n [sheetId]=\"config.id\"\n (actionClicked)=\"onActionClick($event)\">\n </st-sheet-actions>\n </div>\n </nile-tab>\n <nile-tab-panel name=\"general\">\n <st-table \n *ngIf=\"config && activeState\"\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 </nile-tab-panel>\n</nile-tab-group>\n\n\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 Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ChangeDetectorRef,\n} from '@angular/core';\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 templateUrl: './st-workbook.component.html',\n styleUrls: ['./st-workbook.component.scss'],\n})\nexport class StWorkbookComponent implements OnInit, OnChanges, OnDestroy {\n /**\n * Workbook configuration\n */\n @Input() config!: WorkbookConfig;\n\n /**\n * Map of sheet ID to data array\n */\n @Input() sheetsData: BehaviorSubject<Map<string, any[]>> = new BehaviorSubject(new Map());\n\n /**\n * Optional external state management\n */\n @Input() state?: WorkbookState;\n\n /**\n * Emitted when active sheet changes\n */\n @Output() sheetChanged = new EventEmitter<number>();\n\n /**\n * Emitted when add sheet button is clicked\n */\n @Output() addSheet = new EventEmitter<void>();\n\n /**\n * Emitted when a sheet tab action is clicked\n */\n @Output() sheetTabAction = new EventEmitter<SheetTabActionEvent>();\n\n /**\n * Emitted when a workbook action is clicked\n */\n @Output() workbookAction = new EventEmitter<WorkbookActionEvent>();\n\n /**\n * Emitted when cell value changes\n */\n @Output() cellChange = new EventEmitter<CellChangeEvent>();\n\n /**\n * Emitted when cell is saved\n */\n @Output() cellSave = new EventEmitter<any>();\n\n /**\n * Emitted when table state changes\n */\n @Output() tableStateChange = new EventEmitter<TableStateChangeEvent>();\n\n /**\n * Emitted when fullscreen is toggled\n */\n @Output() fullscreenToggle = new EventEmitter<boolean>();\n\n /**\n * Array of sheets\n */\n sheets: WorkbookSheetConfig[] = [];\n\n /**\n * Active sheet index\n */\n activeSheetIndex = 0;\n\n /**\n * Current table config (for active sheet)\n */\n currentTableConfig: TableConfig | null = null;\n\n /**\n * Current table data (for active sheet) - using BehaviorSubject for reactive updates\n */\n currentTableData$: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);\n\n /**\n * Current table state (for active sheet)\n */\n currentTableState: TableState | null = null;\n\n /**\n * Unique key for table component (changes on sheet switch to force reinitialization)\n */\n tableComponentKey: string = '';\n\n /**\n * Internal state instance\n */\n internalState?: WorkbookState;\n\n /**\n * Fullscreen state observable\n */\n isFullscreen$ = new BehaviorSubject<boolean>(false);\n\n /**\n * Tab actions dropdown state\n */\n tabActionsOpen = false;\n selectedSheet: WorkbookSheetConfig | null = null;\n selectedSheetIndex: number = -1;\n tabActionsPosition: any = {};\n\n /**\n * Workbook actions dropdown state\n */\n workbookActionsOpen = false;\n workbookActionsPosition: any = {};\n\n /**\n * Visible workbook actions (filtered by hidden)\n */\n visibleWorkbookActions: WorkbookAction[] = [];\n\n /**\n * Destroy subject for cleanup\n */\n private destroy$ = new Subject<void>();\n\n /**\n * Autosave enabled flag\n */\n autosaveEnabled: boolean = false;\n\n /**\n * Autosave strategy\n */\n private autosaveStrategy: AutosaveStrategy = 'lazy';\n\n /**\n * Last save timestamp\n */\n lastSaveTime: Date | null = null;\n\n /**\n * Saving indicator\n */\n isSaving: boolean = false;\n\n /**\n * Beforeunload handler reference\n */\n private beforeUnloadHandler: ((event: BeforeUnloadEvent) => void) | null = null;\n\n constructor(\n private autosaveService: AutosaveService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.initializeComponent();\n\n // Subscribe to sheetsData changes to update currentTableData$ reactively\n this.sheetsData.pipe(\n takeUntil(this.destroy$)\n ).subscribe((dataMap) => {\n if (this.selectedSheet && dataMap) {\n const newData = dataMap.get(this.selectedSheet.id);\n if (newData) {\n // Update the BehaviorSubject - st-table will react automatically\n this.currentTableData$.next([...newData]);\n }\n }\n });\n\n // Initialize autosave if enabled\n const autosaveConfig = this.config.autosave || DEFAULT_AUTOSAVE_CONFIG;\n this.autosaveEnabled = 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 /**\n * Initialize component state\n * @param isFirstInit Whether this is the first initialization (true) or a config update (false)\n */\n private initializeComponent(isFirstInit: boolean = true): void {\n if (!this.config) return;\n\n const previousSheetCount = this.sheets.length;\n this.sheets = [...this.config.sheets];\n const newSheetCount = this.sheets.length;\n \n // Only reset activeSheetIndex on first init, preserve it on config updates\n if (isFirstInit) {\n this.activeSheetIndex = this.config.initialActiveSheetIndex || 0;\n } else {\n // Check if a new sheet was added - switch to the new sheet\n if (newSheetCount > previousSheetCount) {\n this.activeSheetIndex = newSheetCount - 1; // Switch to the newly added sheet\n }\n // Ensure activeSheetIndex is still valid after config change (e.g., sheet deleted)\n else if (this.activeSheetIndex >= this.sheets.length) {\n this.activeSheetIndex = Math.max(0, this.sheets.length - 1);\n }\n }\n \n if (!this.state) {\n this.internalState = new WorkbookState({\n id: this.config.id,\n name: this.config.name,\n initialActiveSheetIndex: this.activeSheetIndex\n });\n }\n\n this.updateVisibleWorkbookActions();\n this.updateActiveSheet();\n }\n\n /**\n * Get active state (external or internal)\n */\n get activeState(): WorkbookState {\n return this.state || this.internalState!;\n }\n\n /**\n * Handle tab change event from nile-tab-group\n */\n onTabChange(event: any): void {\n const newIndex = event.detail?.index ?? event;\n \n // Ignore if clicked on toolbar tab\n if (newIndex >= this.sheets.length) {\n return;\n }\n\n this.activeSheetIndex = newIndex;\n this.activeState.setActiveSheetIndex(newIndex);\n this.updateActiveSheet();\n this.sheetChanged.emit(this.activeSheetIndex);\n }\n\n /**\n * Update active sheet data (triggers table re-initialization with new config/state)\n */\n private updateActiveSheet(): void {\n const sheet = this.sheets[this.activeSheetIndex];\n if (!sheet) return;\n\n // Update selected sheet reference for data subscriptions\n this.selectedSheet = sheet;\n this.selectedSheetIndex = this.activeSheetIndex;\n\n // Get sheet data\n const sheetData = this.sheetsData.getValue()?.get(sheet.id) || [];\n\n // Create a fresh TableState for this sheet (lazy initialization)\n // This ensures the table reinitializes with new config and state\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 // Update current table properties (triggers Angular change detection)\n // The st-table component will detect these changes and reinitialize\n this.currentTableConfig = { ...sheet.tableConfig };\n this.currentTableData$.next(sheetData);\n this.currentTableState = tableState;\n \n // Update component key to force DOM re-creation (true lazy loading)\n // This ensures complete reinitialization of st-table component\n this.tableComponentKey = `${sheet.id}-${Date.now()}`;\n\n // Store the table state in workbook state for persistence\n this.activeState.setSheetTableState(sheet.id, tableState);\n\n }\n\n /**\n * Add new sheet\n */\n onAddSheet(): void {\n this.addSheet.emit();\n }\n\n /**\n * TrackBy function to force component recreation when key changes\n */\n trackByKey(index: number, key: string): string {\n return key;\n }\n\n /**\n * Check if can add more sheets\n */\n get canAddSheet(): boolean {\n if (this.config.display?.allowAddSheet === false) {\n return false;\n }\n if (this.config.display?.maxSheets) {\n return this.sheets.length < this.config.display.maxSheets;\n }\n return true;\n }\n\n /**\n * Get minimum sheets required\n */\n get minSheets(): number {\n return this.config.display?.minSheets || 1;\n }\n\n /**\n * Open tab actions dropdown\n */\n openTabActions(event: MouseEvent, sheet: WorkbookSheetConfig, index: number): void {\n event.stopPropagation();\n \n this.selectedSheet = sheet;\n this.selectedSheetIndex = index;\n this.tabActionsOpen = true;\n\n // Position dropdown\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.tabActionsPosition = {\n top: `${rect.bottom + 4}px`,\n left: `${rect.left}px`\n };\n }\n\n /**\n * Close tab actions dropdown\n */\n closeTabActions(): void {\n this.tabActionsOpen = false;\n this.selectedSheet = null;\n this.selectedSheetIndex = -1;\n }\n\n /**\n * Check if sheet has tab actions\n */\n hasTabActions(sheet: WorkbookSheetConfig): boolean {\n return !!(sheet.tabActions && sheet.tabActions.length > 0);\n }\n\n /**\n * Handle tab action click\n */\n onTabActionClick(action: any, event: Event): void {\n event.stopPropagation();\n\n if (!this.selectedSheet) return;\n\n this.sheetTabAction.emit({\n action,\n sheetId: this.selectedSheet.id\n });\n\n this.closeTabActions();\n }\n\n /**\n * Toggle workbook actions dropdown\n */\n toggleWorkbookActions(event: MouseEvent): void {\n event.stopPropagation();\n \n this.workbookActionsOpen = !this.workbookActionsOpen;\n\n if (this.workbookActionsOpen) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.workbookActionsPosition = {\n top: `${rect.bottom + 4}px`,\n right: `${window.innerWidth - rect.right}px`\n };\n }\n\n }\n\n /**\n * Close workbook actions dropdown\n */\n closeWorkbookActions(): void {\n this.workbookActionsOpen = false;\n }\n\n /**\n * Update visible workbook actions\n */\n private updateVisibleWorkbookActions(): void {\n if (!this.config.workbookActions) {\n this.visibleWorkbookActions = [];\n return;\n }\n\n this.visibleWorkbookActions = this.config.workbookActions.filter(action => {\n if (typeof action.hidden === 'function') {\n return !action.hidden();\n }\n return !action.hidden;\n });\n }\n\n /**\n * Check if workbook action is disabled\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 /**\n * Handle workbook action click\n */\n onWorkbookActionClick(action: WorkbookAction, event: Event): void {\n event.stopPropagation();\n\n if (this.isActionDisabled(action)) {\n return;\n }\n\n this.workbookAction.emit({\n action,\n workbookId: this.config.id\n });\n\n this.closeWorkbookActions();\n }\n\n /**\n * Toggle fullscreen mode\n */\n toggleFullscreen(): void {\n const current = this.isFullscreen$.value;\n const newValue = !current;\n \n this.isFullscreen$.next(newValue);\n this.fullscreenToggle.emit(newValue);\n }\n\n /**\n * Handle cell change from table - update internal data and pass through to parent\n */\n onCellChange(event: CellChangeEvent): void {\n this.selectedSheet = this.sheets[this.activeSheetIndex];\n \n // Update the internal sheetsData with the new cell value\n if (this.selectedSheet && event.rowData && event.columnKey !== undefined) {\n const currentData = this.sheetsData.getValue();\n const sheetData = currentData.get(this.selectedSheet.id);\n \n if (sheetData && event.rowIndex !== undefined) {\n // Update the specific row's column value\n const updatedRow = { ...sheetData[event.rowIndex] };\n updatedRow[event.columnKey] = event.newValue;\n \n // Create a new array with the updated row\n const updatedSheetData = [...sheetData];\n updatedSheetData[event.rowIndex] = updatedRow;\n \n // Create a new Map with the updated sheet data\n const updatedData = new Map(currentData);\n updatedData.set(this.selectedSheet.id, updatedSheetData);\n \n // Update the BehaviorSubject with new reference\n this.sheetsData.next(updatedData);\n }\n }\n \n // Emit to parent\n this.cellChange.emit(event);\n }\n\n /**\n * Handle cell save from table - update internal data and pass through to parent\n */\n onCellSave(event: any): void {\n // Update the internal sheetsData with the new cell value\n if (this.selectedSheet && event.rowData && event.columnKey !== undefined) {\n const currentData = this.sheetsData.getValue();\n const sheetData = currentData.get(this.selectedSheet.id);\n \n if (sheetData && event.rowIndex !== undefined) {\n // Update the specific row's column value\n const updatedRow = { ...sheetData[event.rowIndex] };\n updatedRow[event.columnKey] = event.newValue;\n \n // Create a new array with the updated row\n const updatedSheetData = [...sheetData];\n updatedSheetData[event.rowIndex] = updatedRow;\n \n // Create a new Map with the updated sheet data\n const updatedData = new Map(currentData);\n updatedData.set(this.selectedSheet.id, updatedSheetData);\n \n // Update the BehaviorSubject with new reference\n this.sheetsData.next(updatedData);\n }\n }\n \n // Emit to parent\n this.cellSave.emit(event);\n }\n\n /**\n * Handle table state change - pass through to parent\n */\n onTableStateChange(event: TableStateChangeEvent): void {\n this.tableStateChange.emit(event);\n }\n\n /**\n * Component cleanup\n */\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n\n // Clear autosave data on destroy\n if (this.autosaveEnabled) {\n this.autosaveService.clear(this.config.id);\n }\n\n // Remove beforeunload handler\n if (this.beforeUnloadHandler) {\n window.removeEventListener('beforeunload', this.beforeUnloadHandler);\n }\n }\n\n /**\n * Initialize autosave subscription\n */\n private initializeAutosave(): void {\n const changeEvents$ = merge(\n this.cellChange,\n this.cellSave,\n this.tableStateChange,\n this.sheetTabAction\n );\n\n const autosave$ = this.autosaveStrategy === 'lazy'\n ? changeEvents$.pipe(\n tap(() => this.autosaveService.setDirty(this.config.id, true)),\n debounceTime(2000),\n distinctUntilChanged()\n )\n : changeEvents$.pipe(\n tap(() => this.autosaveService.setDirty(this.config.id, true)),\n debounceTime(100)\n );\n\n autosave$.pipe(\n takeUntil(this.destroy$)\n ).subscribe(() => this.performAutosave());\n }\n\n /**\n * Perform autosave operation\n */\n private performAutosave(): void {\n this.isSaving = true;\n\n const autosaveData: AutosaveData = {\n workbookConfig: this.config,\n workbookState: this.activeState.getSnapshot(),\n sheetsData: new Map(this.sheetsData.getValue()),\n timestamp: new Date()\n };\n\n this.autosaveService.save(this.config.id, autosaveData);\n this.lastSaveTime = new Date();\n this.isSaving = false;\n this.autosaveService.setDirty(this.config.id, false);\n }\n\n /**\n * Setup auto-restore from autosave\n */\n private setupAutoRestore(): void {\n const autosaved = this.autosaveService.get(this.config.id);\n\n if (autosaved) {\n // Restore config\n this.config = autosaved.workbookConfig;\n\n // Restore sheets data\n this.sheetsData.next(autosaved.sheetsData);\n\n // Note: Workbook state restoration is handled internally\n // If external state management is used, parent component should handle it\n\n this.lastSaveTime = autosaved.timestamp;\n }\n }\n\n /**\n * Setup beforeunload warning for unsaved changes\n */\n private setupBeforeUnloadWarning(): void {\n this.beforeUnloadHandler = (event: BeforeUnloadEvent) => {\n if (this.autosaveService.isDirty(this.config.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\n","<div class=\"workbook-container\" [class.fullscreen]=\"isFullscreen$ | async\">\n <nile-tab-group [activeIndex]=\"activeSheetIndex\">\n \n <!-- Sheet Tabs (one per sheet) -->\n <nile-tab *ngFor=\"let sheet of sheets; let i = index\"\n 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 <button class=\"tab-actions-button\"\n (click)=\"openTabActions($event, sheet, i)\"\n *ngIf=\"hasTabActions(sheet)\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n </button>\n </div>\n </nile-tab>\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 <div class=\"autosave-indicator\" *ngIf=\"autosaveEnabled\">\n <nile-icon \n *ngIf=\"!isSaving && lastSaveTime\" \n name=\"save\" \n size=\"14\"\n [title]=\"'Saved at ' + (lastSaveTime | date:'HH:mm:ss')\">\n </nile-icon>\n <nile-icon \n *ngIf=\"isSaving\" \n name=\"loader\" \n size=\"14\"\n title=\"Saving...\">\n </nile-icon>\n </div>\n\n <!-- Workbook Actions Dropdown -->\n <button class=\"workbook-actions-button\"\n *ngIf=\"config.workbookActions && config.workbookActions.length > 0\"\n (click)=\"toggleWorkbookActions($event)\"\n title=\"Workbook Actions\">\n <nile-icon name=\"settings\"></nile-icon>\n </button>\n \n <!-- Add Sheet Button -->\n <button class=\"add-sheet-button\"\n *ngIf=\"canAddSheet\"\n (click)=\"onAddSheet()\"\n title=\"Add Sheet\">\n <nile-icon name=\"plus\"></nile-icon>\n </button>\n \n <!-- Fullscreen Button -->\n <button class=\"fullscreen-button\"\n *ngIf=\"config.display?.allowFullscreen !== false\"\n (click)=\"toggleFullscreen()\"\n [title]=\"(isFullscreen$ | async) ? 'Exit Fullscreen' : 'Fullscreen'\">\n <nile-icon [name]=\"(isFullscreen$ | async) ? 'collapse' : 'expand-06'\"></nile-icon>\n </button>\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 ngFor with trackBy to force complete reinitialization when tableComponentKey changes -->\n <ng-container *ngFor=\"let key of [tableComponentKey]; trackBy: trackByKey\">\n <st-table *ngIf=\"currentTableConfig && currentTableState\"\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 </st-table>\n </ng-container>\n </nile-tab-panel>\n \n </nile-tab-group>\n</div>\n\n<!-- Tab Actions Dropdown -->\n<div class=\"tab-actions-dropdown\" \n *ngIf=\"tabActionsOpen\"\n [ngStyle]=\"tabActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeTabActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of selectedSheet?.tabActions\" \n (click)=\"onTabActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Workbook Actions Dropdown -->\n<div class=\"workbook-actions-dropdown\"\n *ngIf=\"workbookActionsOpen\"\n [ngStyle]=\"workbookActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeWorkbookActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of visibleWorkbookActions\"\n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onWorkbookActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Fullscreen Backdrop -->\n<div class=\"fullscreen-backdrop\" \n *ngIf=\"isFullscreen$ | async\"\n (click)=\"toggleFullscreen()\">\n</div>\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 { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ColumnEditorComponent } from '../builder/components/column-editor/column-editor.component';\n\n@NgModule({\n declarations: [\n ColumnEditorComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule\n ],\n exports: [\n ColumnEditorComponent\n ]\n})\nexport class SharedTableComponentsModule { }\n\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\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 declarations: [\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 imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SharedTableComponentsModule, // Import shared module for ColumnEditorComponent\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 } from '@angular/core';\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 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 <span *ngIf=\"hasUnsavedChanges\" class=\"unsaved-indicator\">●</span>\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","/**\n * Column List Component\n * Displays and manages columns\n */\n\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\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 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 <div class=\"add-menu\" *ngIf=\"showAddMenu\">\n <button\n *ngFor=\"let type of dataTypes\"\n class=\"menu-item\"\n (click)=\"onAddColumn(type.value)\">\n {{ type.label }}\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"column-items\">\n <div\n *ngFor=\"let column of columns; let i = index\"\n class=\"column-item\"\n [class.selected]=\"selectedIndex === i\"\n [class.dragging]=\"draggedIndex === i\"\n [class.drag-over]=\"dragOverIndex === i\"\n (click)=\"onColumnClick(i)\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event, i)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n (dragleave)=\"dragOverIndex = null\">\n <div class=\"drag-handle\">\n <span>☰</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 <div *ngIf=\"columns.length === 0\" class=\"empty-state\">\n <p>No columns yet. Click \"Add Column\" to get started.</p>\n </div>\n </div>\n</div>\n\n","/**\n * Table Config Editor Component\n * Form for table-level configuration\n */\n\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { TableConfig } from '../../../models/table-config.interface';\n\n@Component({\n selector: 'st-table-config-editor',\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 <div class=\"form-group\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <label>Page Size</label>\n <select formControlName=\"pageSize\" class=\"form-control\">\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">\n {{ size }}\n </option>\n </select>\n </div>\n <label class=\"checkbox-label\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"showTopControls\">\n <span>Show Top Controls</span>\n </label>\n <label class=\"checkbox-label\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"showBottomControls\">\n <span>Show Bottom Controls</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('pagination.enabled')?.value\">\n <label>Variant</label>\n <select formControlName=\"variant\" class=\"form-control\">\n <option value=\"fluid\">Fluid</option>\n <option value=\"compact\">Compact</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Sorting -->\n <div class=\"config-section\">\n <h4>Sorting</h4>\n <div formGroupName=\"sorting\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <label class=\"checkbox-label\" *ngIf=\"form.get('sorting.enabled')?.value\">\n <input type=\"checkbox\" formControlName=\"multiColumn\">\n <span>Multi-column</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('sorting.enabled')?.value\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Filtering -->\n <div class=\"config-section\">\n <h4>Filtering</h4>\n <div formGroupName=\"filtering\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enabled</span>\n </label>\n <div class=\"form-group\" *ngIf=\"form.get('filtering.enabled')?.value\">\n <label>Mode</label>\n <select formControlName=\"mode\" class=\"form-control\">\n <option value=\"local\">Local</option>\n <option value=\"server\">Server</option>\n </select>\n </div>\n </div>\n </div>\n\n <!-- Display -->\n <div class=\"config-section\">\n <h4>Display</h4>\n <div formGroupName=\"display\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"stickyHeader\">\n <span>Sticky Header</span>\n </label>\n \n <!-- Virtual Scroll Configuration -->\n <div class=\"subsection\" formGroupName=\"virtualScroll\">\n <h5>Virtual Scroll</h5>\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Virtual Scrolling (for large datasets)</span>\n </label>\n \n <div *ngIf=\"form.get('display.virtualScroll.enabled')?.value\" class=\"virtual-scroll-options\">\n <div class=\"form-group\">\n <label>Row Height (px)</label>\n <input type=\"number\" formControlName=\"itemSize\" class=\"form-control\" min=\"20\" max=\"200\">\n <small class=\"help-text\">Must be consistent for all rows</small>\n </div>\n \n <div class=\"form-group\">\n <label>Buffer Size (rows)</label>\n <input type=\"number\" formControlName=\"bufferSize\" class=\"form-control\" min=\"0\" max=\"20\">\n <small class=\"help-text\">Rows rendered above/below viewport</small>\n </div>\n \n <div class=\"form-group\">\n <label>Viewport Height (px)</label>\n <input type=\"number\" formControlName=\"viewportHeight\" class=\"form-control\" min=\"200\" max=\"2000\">\n <small class=\"help-text\">Height of scrollable container</small>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Keyboard Navigation -->\n <div class=\"config-section\">\n <h4>Keyboard Navigation</h4>\n <div formGroupName=\"keyboardNavigation\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" formControlName=\"enabled\">\n <span>Enable Excel-like Navigation</span>\n </label>\n </div>\n </div>\n </form>\n</div>\n\n","/**\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 } from '@angular/core';\nimport { TableConfig } from '../../../models/table-config.interface';\nimport { SampleDataGeneratorService } from '../../services/sample-data-generator.service';\n\n@Component({\n selector: 'st-builder-preview',\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 <div *ngIf=\"isLoading\" class=\"loading\">\n <p>Generating preview...</p>\n </div>\n\n <div *ngIf=\"!isLoading && tableConfig?.columns?.length === 0\" class=\"empty-state\">\n <p>Add columns to see preview</p>\n </div>\n <ng-container *ngIf=\"tableConfig\">\n <st-table\n *ngIf=\"!isLoading && tableConfig!.columns!.length > 0\"\n [tableConfig]=\"tableConfig\"\n [data]=\"sampleData\"\n (stateChange)=\"onStateChange($event)\">\n </st-table>\n </ng-container>\n\n </div>\n</div>\n\n","/**\n * Definition Builder Component\n * Main container component that orchestrates all builder sub-components\n */\n\nimport { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DefinitionBuilderService } from '../../services/definition-builder.service';\nimport { BuilderState } from '../../models/builder-state.interface';\n\n@Component({\n selector: 'st-definition-builder',\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 <div class=\"middle-panel\" *ngIf=\"state.selectedColumn\">\n <st-column-editor\n [column]=\"state.selectedColumn\"\n [columnIndex]=\"state.selectedColumnIndex!\"\n (columnUpdated)=\"onColumnUpdated(state.selectedColumnIndex!, $event)\"\n (cancel)=\"onColumnCancel()\">\n </st-column-editor>\n </div>\n\n <!-- Right Panel: Preview -->\n <div class=\"right-panel\" *ngIf=\"state.previewVisible\">\n <st-builder-preview\n [tableConfig]=\"state.tableConfig\">\n </st-builder-preview>\n </div>\n </div>\n</div>\n\n","/**\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';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n// Builder Components\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 declarations: [\n DefinitionBuilderComponent,\n BuilderToolbarComponent,\n ColumnListComponent,\n // ColumnEditorComponent moved to SharedTableComponentsModule\n TableConfigEditorComponent,\n BuilderPreviewComponent,\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n SmartTableModule,\n SharedTableComponentsModule // Import shared module for ColumnEditorComponent\n ],\n exports: [\n DefinitionBuilderComponent,\n BuilderToolbarComponent,\n ColumnListComponent,\n TableConfigEditorComponent,\n BuilderPreviewComponent,\n SharedTableComponentsModule // Re-export so consumers get ColumnEditorComponent\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.StColumnFilterComponent","i2","i1.JsonSchemaValidatorService","i2.ValidationLoggerService","i3.VirtualScrollService","i4.StPaginationComponent","i5.StColumnMenuDropdownComponent","i6.StRowActionsDropdownComponent","i7.StHeaderComponent","i8.StTableActionsComponent","i9.StCellComponent","i10","i11.StKeyboardNavigationDirective","i12.StColumnResizeDirective","i1.ClickOutsideDirective","i1","i1.ColumnEditorComponent","i1.StSheetActionsComponent","i2.StTableComponent","i3","i1.AutosaveService","i1.DefinitionBuilderService","i2.DefinitionExportService","i3.DefinitionImportService","i4","i1.SampleDataGeneratorService","i2.BuilderToolbarComponent","i3.ColumnListComponent","i4.TableConfigEditorComponent","i5.ColumnEditorComponent","i6.BuilderPreviewComponent","i7"],"mappings":"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"}
|