@ngxsmk/cdk 1.3.2 → 3.0.0
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/README.md +1 -1
- package/cva-base/cva-base.d.ts +34 -0
- package/cva-base/cva-base.d.ts.map +1 -0
- package/cva-base/index.d.ts +2 -0
- package/cva-base/index.d.ts.map +1 -0
- package/cva-base/ngxsmk-cdk-cva-base.d.ts.map +1 -0
- package/esm2022/cva-base/cva-base.mjs +45 -0
- package/esm2022/cva-base/index.mjs +2 -0
- package/esm2022/cva-base/ngxsmk-cdk-cva-base.mjs +5 -0
- package/esm2022/input-group/index.mjs +3 -0
- package/esm2022/input-group/input-group-engine.mjs +219 -0
- package/esm2022/input-group/models/index.mjs +2 -0
- package/esm2022/input-group/models/input-group.model.mjs +2 -0
- package/esm2022/input-group/ngxsmk-cdk-input-group.mjs +5 -0
- package/esm2022/listbox-keyboard/index.mjs +2 -0
- package/esm2022/listbox-keyboard/listbox-keyboard.mjs +145 -0
- package/esm2022/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.mjs +5 -0
- package/esm2022/public-api.mjs +10 -1
- package/esm2022/roving-focus/index.mjs +2 -0
- package/esm2022/roving-focus/ngxsmk-cdk-roving-focus.mjs +5 -0
- package/esm2022/roving-focus/roving-focus.mjs +176 -0
- package/esm2022/scheduler/index.mjs +5 -0
- package/esm2022/scheduler/models/date-range.mjs +2 -0
- package/esm2022/scheduler/models/event.model.mjs +2 -0
- package/esm2022/scheduler/models/index.mjs +6 -0
- package/esm2022/scheduler/models/resource.model.mjs +5 -0
- package/esm2022/scheduler/models/selection.model.mjs +7 -0
- package/esm2022/scheduler/models/view.model.mjs +7 -0
- package/esm2022/scheduler/ngxsmk-cdk-scheduler.mjs +5 -0
- package/esm2022/scheduler/plugin/drag-plugin.mjs +82 -0
- package/esm2022/scheduler/plugin/index.mjs +8 -0
- package/esm2022/scheduler/plugin/keyboard-plugin.mjs +150 -0
- package/esm2022/scheduler/plugin/plugin-host.mjs +48 -0
- package/esm2022/scheduler/plugin/plugin.types.mjs +2 -0
- package/esm2022/scheduler/plugin/resize-plugin.mjs +74 -0
- package/esm2022/scheduler/plugin/selection-plugin.mjs +84 -0
- package/esm2022/scheduler/plugin/tooltip-plugin.mjs +103 -0
- package/esm2022/scheduler/scheduler-engine.mjs +316 -0
- package/esm2022/scheduler/utils/date-utils.mjs +131 -0
- package/esm2022/scheduler/utils/index.mjs +3 -0
- package/esm2022/scheduler/utils/snap.mjs +24 -0
- package/esm2022/scroll-lock/scroll-lock.mjs +22 -5
- package/esm2022/skip-link/index.mjs +2 -0
- package/esm2022/skip-link/ngxsmk-cdk-skip-link.mjs +5 -0
- package/esm2022/skip-link/skip-link.mjs +33 -0
- package/esm2022/spreadsheet/index.mjs +5 -0
- package/esm2022/spreadsheet/models/cell.model.mjs +2 -0
- package/esm2022/spreadsheet/models/column.model.mjs +2 -0
- package/esm2022/spreadsheet/models/filter.model.mjs +2 -0
- package/esm2022/spreadsheet/models/formula.model.mjs +2 -0
- package/esm2022/spreadsheet/models/index.mjs +8 -0
- package/esm2022/spreadsheet/models/row.model.mjs +2 -0
- package/esm2022/spreadsheet/models/selection.model.mjs +2 -0
- package/esm2022/spreadsheet/models/sort.model.mjs +2 -0
- package/esm2022/spreadsheet/ngxsmk-cdk-spreadsheet.mjs +5 -0
- package/esm2022/spreadsheet/plugin/clipboard-plugin.mjs +171 -0
- package/esm2022/spreadsheet/plugin/filter-plugin.mjs +87 -0
- package/esm2022/spreadsheet/plugin/formula-plugin.mjs +456 -0
- package/esm2022/spreadsheet/plugin/index.mjs +10 -0
- package/esm2022/spreadsheet/plugin/plugin-host.mjs +188 -0
- package/esm2022/spreadsheet/plugin/plugin.types.mjs +2 -0
- package/esm2022/spreadsheet/plugin/selection-plugin.mjs +114 -0
- package/esm2022/spreadsheet/plugin/sort-plugin.mjs +63 -0
- package/esm2022/spreadsheet/plugin/undo-plugin.mjs +138 -0
- package/esm2022/spreadsheet/plugin/validation-plugin.mjs +71 -0
- package/esm2022/spreadsheet/spreadsheet-engine.mjs +547 -0
- package/esm2022/spreadsheet/utils/cell-utils.mjs +129 -0
- package/esm2022/spreadsheet/utils/index.mjs +2 -0
- package/fesm2022/ngxsmk-cdk-cva-base.mjs +52 -0
- package/fesm2022/ngxsmk-cdk-cva-base.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-input-group.mjs +226 -0
- package/fesm2022/ngxsmk-cdk-input-group.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs +152 -0
- package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-roving-focus.mjs +183 -0
- package/fesm2022/ngxsmk-cdk-roving-focus.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-scheduler.mjs +1035 -0
- package/fesm2022/ngxsmk-cdk-scheduler.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-scroll-lock.mjs +21 -4
- package/fesm2022/ngxsmk-cdk-scroll-lock.mjs.map +1 -1
- package/fesm2022/ngxsmk-cdk-skip-link.mjs +40 -0
- package/fesm2022/ngxsmk-cdk-skip-link.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-spreadsheet.mjs +1969 -0
- package/fesm2022/ngxsmk-cdk-spreadsheet.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk.mjs +5 -0
- package/fesm2022/ngxsmk-cdk.mjs.map +1 -1
- package/input-group/index.d.ts +3 -0
- package/input-group/index.d.ts.map +1 -0
- package/input-group/input-group-engine.d.ts +88 -0
- package/input-group/input-group-engine.d.ts.map +1 -0
- package/input-group/models/index.d.ts +2 -0
- package/input-group/models/index.d.ts.map +1 -0
- package/input-group/models/input-group.model.d.ts +114 -0
- package/input-group/models/input-group.model.d.ts.map +1 -0
- package/input-group/ngxsmk-cdk-input-group.d.ts.map +1 -0
- package/listbox-keyboard/index.d.ts +2 -0
- package/listbox-keyboard/index.d.ts.map +1 -0
- package/listbox-keyboard/listbox-keyboard.d.ts +60 -0
- package/listbox-keyboard/listbox-keyboard.d.ts.map +1 -0
- package/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.d.ts.map +1 -0
- package/package.json +59 -17
- package/public-api.d.ts +8 -0
- package/public-api.d.ts.map +1 -1
- package/roving-focus/index.d.ts +2 -0
- package/roving-focus/index.d.ts.map +1 -0
- package/roving-focus/ngxsmk-cdk-roving-focus.d.ts.map +1 -0
- package/roving-focus/roving-focus.d.ts +61 -0
- package/roving-focus/roving-focus.d.ts.map +1 -0
- package/scheduler/index.d.ts +5 -0
- package/scheduler/index.d.ts.map +1 -0
- package/scheduler/models/date-range.d.ts +6 -0
- package/scheduler/models/date-range.d.ts.map +1 -0
- package/scheduler/models/event.model.d.ts +50 -0
- package/scheduler/models/event.model.d.ts.map +1 -0
- package/scheduler/models/index.d.ts +6 -0
- package/scheduler/models/index.d.ts.map +1 -0
- package/scheduler/models/resource.model.d.ts +16 -0
- package/scheduler/models/resource.model.d.ts.map +1 -0
- package/scheduler/models/selection.model.d.ts +12 -0
- package/scheduler/models/selection.model.d.ts.map +1 -0
- package/scheduler/models/view.model.d.ts +21 -0
- package/scheduler/models/view.model.d.ts.map +1 -0
- package/scheduler/ngxsmk-cdk-scheduler.d.ts.map +1 -0
- package/scheduler/plugin/drag-plugin.d.ts +28 -0
- package/scheduler/plugin/drag-plugin.d.ts.map +1 -0
- package/scheduler/plugin/index.d.ts +8 -0
- package/scheduler/plugin/index.d.ts.map +1 -0
- package/scheduler/plugin/keyboard-plugin.d.ts +24 -0
- package/scheduler/plugin/keyboard-plugin.d.ts.map +1 -0
- package/scheduler/plugin/plugin-host.d.ts +16 -0
- package/scheduler/plugin/plugin-host.d.ts.map +1 -0
- package/scheduler/plugin/plugin.types.d.ts +9 -0
- package/scheduler/plugin/plugin.types.d.ts.map +1 -0
- package/scheduler/plugin/resize-plugin.d.ts +26 -0
- package/scheduler/plugin/resize-plugin.d.ts.map +1 -0
- package/scheduler/plugin/selection-plugin.d.ts +40 -0
- package/scheduler/plugin/selection-plugin.d.ts.map +1 -0
- package/scheduler/plugin/tooltip-plugin.d.ts +41 -0
- package/scheduler/plugin/tooltip-plugin.d.ts.map +1 -0
- package/scheduler/scheduler-engine.d.ts +95 -0
- package/scheduler/scheduler-engine.d.ts.map +1 -0
- package/scheduler/utils/date-utils.d.ts +26 -0
- package/scheduler/utils/date-utils.d.ts.map +1 -0
- package/scheduler/utils/index.d.ts +3 -0
- package/scheduler/utils/index.d.ts.map +1 -0
- package/scheduler/utils/snap.d.ts +7 -0
- package/scheduler/utils/snap.d.ts.map +1 -0
- package/scroll-lock/scroll-lock.d.ts +2 -0
- package/scroll-lock/scroll-lock.d.ts.map +1 -1
- package/skip-link/index.d.ts +2 -0
- package/skip-link/index.d.ts.map +1 -0
- package/skip-link/ngxsmk-cdk-skip-link.d.ts.map +1 -0
- package/skip-link/skip-link.d.ts +18 -0
- package/skip-link/skip-link.d.ts.map +1 -0
- package/spreadsheet/index.d.ts +5 -0
- package/spreadsheet/index.d.ts.map +1 -0
- package/spreadsheet/models/cell.model.d.ts +44 -0
- package/spreadsheet/models/cell.model.d.ts.map +1 -0
- package/spreadsheet/models/column.model.d.ts +77 -0
- package/spreadsheet/models/column.model.d.ts.map +1 -0
- package/spreadsheet/models/filter.model.d.ts +15 -0
- package/spreadsheet/models/filter.model.d.ts.map +1 -0
- package/spreadsheet/models/formula.model.d.ts +65 -0
- package/spreadsheet/models/formula.model.d.ts.map +1 -0
- package/spreadsheet/models/index.d.ts +8 -0
- package/spreadsheet/models/index.d.ts.map +1 -0
- package/spreadsheet/models/row.model.d.ts +33 -0
- package/spreadsheet/models/row.model.d.ts.map +1 -0
- package/spreadsheet/models/selection.model.d.ts +18 -0
- package/spreadsheet/models/selection.model.d.ts.map +1 -0
- package/spreadsheet/models/sort.model.d.ts +14 -0
- package/spreadsheet/models/sort.model.d.ts.map +1 -0
- package/spreadsheet/ngxsmk-cdk-spreadsheet.d.ts.map +1 -0
- package/spreadsheet/plugin/clipboard-plugin.d.ts +24 -0
- package/spreadsheet/plugin/clipboard-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/filter-plugin.d.ts +21 -0
- package/spreadsheet/plugin/filter-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/formula-plugin.d.ts +39 -0
- package/spreadsheet/plugin/formula-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/index.d.ts +10 -0
- package/spreadsheet/plugin/index.d.ts.map +1 -0
- package/spreadsheet/plugin/plugin-host.d.ts +66 -0
- package/spreadsheet/plugin/plugin-host.d.ts.map +1 -0
- package/spreadsheet/plugin/plugin.types.d.ts +58 -0
- package/spreadsheet/plugin/plugin.types.d.ts.map +1 -0
- package/spreadsheet/plugin/selection-plugin.d.ts +28 -0
- package/spreadsheet/plugin/selection-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/sort-plugin.d.ts +18 -0
- package/spreadsheet/plugin/sort-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/undo-plugin.d.ts +40 -0
- package/spreadsheet/plugin/undo-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/validation-plugin.d.ts +29 -0
- package/spreadsheet/plugin/validation-plugin.d.ts.map +1 -0
- package/spreadsheet/spreadsheet-engine.d.ts +194 -0
- package/spreadsheet/spreadsheet-engine.d.ts.map +1 -0
- package/spreadsheet/utils/cell-utils.d.ts +26 -0
- package/spreadsheet/utils/cell-utils.d.ts.map +1 -0
- package/spreadsheet/utils/index.d.ts +2 -0
- package/spreadsheet/utils/index.d.ts.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngxsmk-cdk-spreadsheet.mjs","sources":["../../../../packages/cdk/spreadsheet/plugin/plugin-host.ts","../../../../packages/cdk/spreadsheet/utils/cell-utils.ts","../../../../packages/cdk/spreadsheet/spreadsheet-engine.ts","../../../../packages/cdk/spreadsheet/plugin/sort-plugin.ts","../../../../packages/cdk/spreadsheet/plugin/filter-plugin.ts","../../../../packages/cdk/spreadsheet/plugin/selection-plugin.ts","../../../../packages/cdk/spreadsheet/plugin/formula-plugin.ts","../../../../packages/cdk/spreadsheet/plugin/clipboard-plugin.ts","../../../../packages/cdk/spreadsheet/plugin/undo-plugin.ts","../../../../packages/cdk/spreadsheet/plugin/validation-plugin.ts","../../../../packages/cdk/spreadsheet/ngxsmk-cdk-spreadsheet.ts"],"sourcesContent":["import type { SpreadsheetPlugin } from './plugin.types';\nimport type { SpreadsheetEngine } from '../spreadsheet-engine';\n\n/**\n * PluginHost manages the lifecycle of all registered plugins.\n * Plugins are executed in priority order (lower = first).\n */\nexport class PluginHost {\n private _plugins: SpreadsheetPlugin[] = [];\n private _engine: SpreadsheetEngine | null = null;\n\n /** Register one or more plugins. */\n register(...plugins: SpreadsheetPlugin[]): void {\n this._plugins.push(...plugins);\n this._plugins.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));\n }\n\n /** Unregister plugins by name. */\n unregister(...names: string[]): void {\n const nameSet = new Set(names);\n const toRemove = this._plugins.filter((p) => nameSet.has(p.name));\n toRemove.forEach((p) => p.onDestroy?.());\n this._plugins = this._plugins.filter((p) => !nameSet.has(p.name));\n }\n\n /** Initialize all plugins with the engine. Called once during engine construction. */\n init(engine: SpreadsheetEngine): void {\n this._engine = engine;\n for (const plugin of this._plugins) {\n plugin.onInit?.(engine);\n }\n }\n\n /** Destroy all plugins. */\n destroy(): void {\n for (const plugin of this._plugins) {\n plugin.onDestroy?.();\n }\n this._plugins = [];\n this._engine = null;\n }\n\n /** Run onBeforeRender on all plugins. Returns false if any plugin cancels. */\n beforeRender(): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeRender?.() === false) return false;\n }\n return true;\n }\n\n /** Run onAfterRender on all plugins. */\n afterRender(): void {\n for (const plugin of this._plugins) {\n plugin.onAfterRender?.();\n }\n }\n\n /** Run onBeforeEdit on all plugins. Returns false if any cancels. */\n beforeEdit(rowIndex: number, colId: string): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeEdit?.(rowIndex, colId) === false) return false;\n }\n return true;\n }\n\n /** Run onAfterEdit on all plugins. */\n afterEdit(rowIndex: number, colId: string, oldValue: unknown, newValue: unknown): void {\n for (const plugin of this._plugins) {\n plugin.onAfterEdit?.(rowIndex, colId, oldValue, newValue);\n }\n }\n\n /** Run onBeforeSort on all plugins. Returns false if any cancels. */\n beforeSort(colId: string, direction: 'asc' | 'desc' | null): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeSort?.(colId, direction) === false) return false;\n }\n return true;\n }\n\n /** Run onAfterSort on all plugins. */\n afterSort(): void {\n for (const plugin of this._plugins) {\n plugin.onAfterSort?.();\n }\n }\n\n /** Run onBeforeFilter on all plugins. Returns false if any cancels. */\n beforeFilter(): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeFilter?.() === false) return false;\n }\n return true;\n }\n\n /** Run onAfterFilter on all plugins. */\n afterFilter(): void {\n for (const plugin of this._plugins) {\n plugin.onAfterFilter?.();\n }\n }\n\n /** Run onBeforeInsertRows on all plugins. Returns false if any cancels. */\n beforeInsertRows(count: number, atIndex: number): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeInsertRows?.(count, atIndex) === false) return false;\n }\n return true;\n }\n\n /** Run onAfterInsertRows on all plugins. */\n afterInsertRows(indices: number[]): void {\n for (const plugin of this._plugins) {\n plugin.onAfterInsertRows?.(indices);\n }\n }\n\n /** Run onBeforeDeleteRows on all plugins. Returns false if any cancels. */\n beforeDeleteRows(indices: number[]): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeDeleteRows?.(indices) === false) return false;\n }\n return true;\n }\n\n /** Run onAfterDeleteRows on all plugins. */\n afterDeleteRows(indices: number[]): void {\n for (const plugin of this._plugins) {\n plugin.onAfterDeleteRows?.(indices);\n }\n }\n\n /** Run onBeforeInsertColumns on all plugins. Returns false if any cancels. */\n beforeInsertColumns(count: number, atIndex: number): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeInsertColumns?.(count, atIndex) === false) return false;\n }\n return true;\n }\n\n /** Run onAfterInsertColumns on all plugins. */\n afterInsertColumns(indices: number[]): void {\n for (const plugin of this._plugins) {\n plugin.onAfterInsertColumns?.(indices);\n }\n }\n\n /** Run onBeforeDeleteColumns on all plugins. Returns false if any cancels. */\n beforeDeleteColumns(indices: number[]): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeDeleteColumns?.(indices) === false) return false;\n }\n return true;\n }\n\n /** Run onAfterDeleteColumns on all plugins. */\n afterDeleteColumns(indices: number[]): void {\n for (const plugin of this._plugins) {\n plugin.onAfterDeleteColumns?.(indices);\n }\n }\n\n /** Run onBeforePaste on all plugins. Returns false if any cancels. */\n beforePaste(data: string, startCell: { row: number; col: number }): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforePaste?.(data, startCell) === false) return false;\n }\n return true;\n }\n\n /** Run onAfterPaste on all plugins. */\n afterPaste(): void {\n for (const plugin of this._plugins) {\n plugin.onAfterPaste?.();\n }\n }\n\n /** Run onBeforeCopy on all plugins. Returns false if any cancels. */\n beforeCopy(): boolean {\n for (const plugin of this._plugins) {\n if (plugin.onBeforeCopy?.() === false) return false;\n }\n return true;\n }\n\n /** Run onAfterCopy on all plugins. */\n afterCopy(): void {\n for (const plugin of this._plugins) {\n plugin.onAfterCopy?.();\n }\n }\n\n /** Fire a custom event to all plugins. */\n fireEvent(eventType: string, payload: unknown): void {\n for (const plugin of this._plugins) {\n plugin.onEvent?.(eventType, payload);\n }\n }\n\n /** Get all registered plugins. */\n get plugins(): readonly SpreadsheetPlugin[] {\n return this._plugins;\n }\n}\n","import type { Cell, CellValue, CellAddress, CellRange, RowDef, ColumnDef } from '../models';\n\n/** Convert a column index to an Excel-style column letter (0=A, 25=Z, 26=AA). */\nexport function colIndexToLetter(index: number): string {\n let letter = '';\n let i = index;\n while (i >= 0) {\n letter = String.fromCharCode(65 + (i % 26)) + letter;\n i = Math.floor(i / 26) - 1;\n }\n return letter;\n}\n\n/** Convert an Excel-style column letter to a 0-based index. */\nexport function colLetterToIndex(letter: string): number {\n let index = 0;\n for (let i = 0; i < letter.length; i++) {\n index = index * 26 + (letter.charCodeAt(i) - 64);\n }\n return index - 1;\n}\n\n/** Build a cell reference string like \"A1\", \"B5\". */\nexport function cellRef(row: number, col: number): string {\n return `${colIndexToLetter(col)}${row + 1}`;\n}\n\n/** Parse a cell reference string like \"A1\" into a CellAddress. */\nexport function parseCellRef(ref: string): CellAddress | null {\n const match = ref.match(/^([A-Z]+)(\\d+)$/i);\n if (!match) return null;\n return { row: parseInt(match[2], 10) - 1, col: colLetterToIndex(match[1].toUpperCase()) };\n}\n\n/** Normalize a range so start <= end in both dimensions. */\nexport function normalizeRange(range: CellRange): CellRange {\n return {\n start: {\n row: Math.min(range.start.row, range.end.row),\n col: Math.min(range.start.col, range.end.col),\n },\n end: {\n row: Math.max(range.start.row, range.end.row),\n col: Math.max(range.start.col, range.end.col),\n },\n };\n}\n\n/** Check if a cell address is within a range. */\nexport function isCellInRange(address: CellAddress, range: CellRange): boolean {\n const nr = normalizeRange(range);\n return (\n address.row >= nr.start.row &&\n address.row <= nr.end.row &&\n address.col >= nr.start.col &&\n address.col <= nr.end.col\n );\n}\n\n/** Get all cell addresses in a range. */\nexport function cellsInRange(range: CellRange): CellAddress[] {\n const nr = normalizeRange(range);\n const cells: CellAddress[] = [];\n for (let r = nr.start.row; r <= nr.end.row; r++) {\n for (let c = nr.start.col; c <= nr.end.col; c++) {\n cells.push({ row: r, col: c });\n }\n }\n return cells;\n}\n\n/** Format a cell value for display. */\nexport function formatCellValue(value: CellValue, format?: string): string {\n if (value == null || value === '') return '';\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE';\n if (value instanceof Date) {\n return value.toLocaleDateString();\n }\n if (typeof value === 'number') {\n if (format) {\n return applyNumberFormat(value, format);\n }\n return String(value);\n }\n return String(value);\n}\n\n/** Apply a basic number format string. */\nfunction applyNumberFormat(value: number, format: string): string {\n const isNeg = value < 0;\n const abs = Math.abs(value);\n\n // Currency format: $#,##0.00\n if (format.includes('$')) {\n const decimals = format.includes('.00') ? 2 : 0;\n return `${isNeg ? '-' : ''}$${abs.toFixed(decimals).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}`;\n }\n\n // Percentage format\n if (format.includes('%')) {\n return `${(abs * 100).toFixed(format.includes('.00') ? 2 : 0)}%`;\n }\n\n // Plain number with commas: #,##0\n if (format.includes(',')) {\n return `${isNeg ? '-' : ''}${abs.toFixed(0).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}`;\n }\n\n return String(value);\n}\n\n/** Create a new RowDef with empty cells for each column. */\nexport function createEmptyRow(id: string, columns: ColumnDef[]): RowDef {\n const cells: Record<string, Cell> = {};\n for (const col of columns) {\n cells[col.id] = {\n value: (col.defaultValue ?? null) as CellValue,\n meta: { type: col.cellType ?? 'text' },\n };\n }\n return { id, cells, selectable: true, editable: true };\n}\n\n/** Generate a unique row ID. */\nexport function generateRowId(): string {\n return `row_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/** Deep clone a row's cell data (for immutable updates). */\nexport function cloneRow(row: RowDef): RowDef {\n return {\n ...row,\n cells: Object.fromEntries(\n Object.entries(row.cells).map(([k, v]) => [\n k,\n { ...v, meta: v.meta ? { ...v.meta } : undefined },\n ]),\n ),\n };\n}\n\n/** Calculate the total width of pinned columns. */\nexport function pinnedWidth(\n columns: ColumnDef[],\n states: Map<string, number>,\n side: 'left' | 'right',\n): number {\n return columns\n .filter((c) => c.pinned === side)\n .reduce((sum, c) => sum + (states.get(c.id) ?? c.width ?? 150), 0);\n}\n","import { computed, signal, type WritableSignal, type Signal } from '@angular/core';\nimport type {\n CellValue,\n CellAddress,\n CellMeta,\n ColumnDef,\n ColumnState,\n RowDef,\n SelectionState,\n SortState,\n SortCriterion,\n FilterState,\n FilterCriterion,\n} from './models';\nimport type { SpreadsheetPlugin } from './plugin/plugin.types';\nimport { PluginHost } from './plugin/plugin-host';\nimport { generateRowId, createEmptyRow } from './utils/cell-utils';\n\n/** Density presets controlling row height and cell padding. */\nexport type SpreadsheetDensity = 'compact' | 'comfortable' | 'dense';\n\nexport interface SpreadsheetConfig {\n /** Column definitions. */\n columns?: ColumnDef[];\n /** Initial row data. */\n rows?: RowDef[];\n /** Enable multi-column sorting. */\n multiSort?: boolean;\n /** Selection mode. */\n selectionMode?: 'cell' | 'range' | 'row' | 'column' | 'none';\n /** Density preset. */\n density?: SpreadsheetDensity;\n /** Enable inline editing. */\n editable?: boolean;\n /** Enable formula evaluation. */\n formulas?: boolean;\n /** Number of rows to render in the viewport buffer. */\n bufferRows?: number;\n /** Row height in px (used for virtual scroll calculations). */\n rowHeight?: number;\n /** Header height in px. */\n headerHeight?: number;\n /** Plugins to register. */\n plugins?: SpreadsheetPlugin[];\n /** Enable tree / hierarchical data. */\n treeData?: boolean;\n /** RTL layout. */\n rtl?: boolean;\n /** Frozen row count. */\n frozenRows?: number;\n /** Frozen column count. */\n frozenColumns?: number;\n}\n\n/** Lifecycle hooks for before/after operations. */\nexport interface SpreadsheetLifecycleHooks {\n beforeEdit: Signal<(rowIndex: number, colId: string) => boolean>;\n afterEdit: Signal<\n (rowIndex: number, colId: string, oldValue: CellValue, newValue: CellValue) => void\n >;\n beforeSort: Signal<(colId: string, direction: 'asc' | 'desc' | null) => boolean>;\n afterSort: Signal<() => void>;\n beforeFilter: Signal<() => boolean>;\n afterFilter: Signal<() => void>;\n beforeInsertRows: Signal<(count: number, atIndex: number) => boolean>;\n afterInsertRows: Signal<(indices: number[]) => void>;\n beforeDeleteRows: Signal<(indices: number[]) => boolean>;\n afterDeleteRows: Signal<(indices: number[]) => void>;\n beforeInsertColumns: Signal<(count: number, atIndex: number) => boolean>;\n afterInsertColumns: Signal<(indices: number[]) => void>;\n beforeDeleteColumns: Signal<(indices: number[]) => boolean>;\n afterDeleteColumns: Signal<(indices: number[]) => void>;\n beforeCopy: Signal<() => boolean>;\n afterCopy: Signal<() => void>;\n beforePaste: Signal<(data: string, startCell: CellAddress) => boolean>;\n afterPaste: Signal<() => void>;\n}\n\nconst DENSITY_ROW_HEIGHT: Record<SpreadsheetDensity, number> = {\n compact: 28,\n comfortable: 36,\n dense: 24,\n};\n\nconst DENSITY_HEADER_HEIGHT: Record<SpreadsheetDensity, number> = {\n compact: 32,\n comfortable: 40,\n dense: 28,\n};\n\nconst DENSITY_CELL_PADDING: Record<SpreadsheetDensity, string> = {\n compact: '2px 6px',\n comfortable: '6px 10px',\n dense: '2px 4px',\n};\n\n/**\n * SpreadsheetEngine — headless, signal-based state machine for spreadsheet data.\n * Zero DOM, zero Angular dependencies beyond signals.\n *\n * Supports: columns, rows, sorting, filtering, selection, editing,\n * undo/redo, clipboard, formulas, tree data, virtual scrolling state.\n */\nexport class SpreadsheetEngine {\n // ── Core Data ──\n readonly columnDefs: WritableSignal<ColumnDef[]>;\n readonly rowData: WritableSignal<RowDef[]>;\n readonly columnStates: WritableSignal<Map<string, ColumnState>>;\n\n // ── State ──\n readonly selection: WritableSignal<SelectionState>;\n readonly sortState: WritableSignal<SortState>;\n readonly filterState: WritableSignal<FilterState>;\n readonly plugins: WritableSignal<SpreadsheetPlugin[]>;\n\n // ── Editing ──\n readonly editingCell: WritableSignal<CellAddress | null>;\n readonly editingValue: WritableSignal<CellValue>;\n\n // ── Config ──\n readonly density: WritableSignal<SpreadsheetDensity>;\n readonly editable: WritableSignal<boolean>;\n readonly rtl: WritableSignal<boolean>;\n readonly frozenRows: WritableSignal<number>;\n readonly frozenColumns: WritableSignal<number>;\n\n // ── Scroll State ──\n readonly scrollTop: WritableSignal<number>;\n readonly scrollLeft: WritableSignal<number>;\n readonly viewportHeight: WritableSignal<number>;\n readonly viewportWidth: WritableSignal<number>;\n\n // ── Plugin Host ──\n readonly pluginHost: PluginHost;\n\n // ── Computed ──\n\n /** Visible rows after filtering. */\n readonly visibleRows: Signal<RowDef[]>;\n\n /** Sorted + filtered rows. */\n readonly displayRows: Signal<RowDef[]>;\n\n /** Visible row range for virtual scrolling (startIndex, endIndex). */\n readonly virtualRowRange: Signal<{\n start: number;\n end: number;\n offsetY: number;\n totalHeight: number;\n }>;\n\n /** Visible column range for horizontal virtual scrolling. */\n readonly virtualColRange: Signal<{\n start: number;\n end: number;\n offsetX: number;\n totalWidth: number;\n }>;\n\n /** Row height for current density. */\n readonly rowHeight: Signal<number>;\n\n /** Header height for current density. */\n readonly headerHeight: Signal<number>;\n\n /** Cell padding for current density. */\n readonly cellPadding: Signal<string>;\n\n /** Total number of rows. */\n readonly totalRows: Signal<number>;\n\n /** Total number of columns. */\n readonly totalColumns: Signal<number>;\n\n /** Total scrollable height. */\n readonly totalHeight: Signal<number>;\n\n /** Total scrollable width. */\n readonly totalWidth: Signal<number>;\n\n /** Visible (non-hidden) columns. */\n readonly visibleColumns: Signal<ColumnDef[]>;\n\n /** Pinned left columns. */\n readonly pinnedLeftColumns: Signal<ColumnDef[]>;\n\n /** Pinned right columns. */\n readonly pinnedRightColumns: Signal<ColumnDef[]>;\n\n /** Unpinned (scrollable) columns. */\n readonly unpinnedColumns: Signal<ColumnDef[]>;\n\n /** Column width map for computed widths. */\n readonly columnWidths: Signal<Map<string, number>>;\n\n // ── Lifecycle ──\n readonly lifecycle: SpreadsheetLifecycleHooks;\n\n private _config: SpreadsheetConfig;\n\n constructor(config: SpreadsheetConfig = {}) {\n this._config = config;\n this.pluginHost = new PluginHost();\n\n // Density\n this.density = signal(config.density ?? 'comfortable');\n this.editable = signal(config.editable ?? true);\n this.rtl = signal(config.rtl ?? false);\n this.frozenRows = signal(config.frozenRows ?? 0);\n this.frozenColumns = signal(config.frozenColumns ?? 0);\n\n // Row/column height computed from density\n this.rowHeight = computed(() => DENSITY_ROW_HEIGHT[this.density()]);\n this.headerHeight = computed(() => DENSITY_HEADER_HEIGHT[this.density()]);\n this.cellPadding = computed(() => DENSITY_CELL_PADDING[this.density()]);\n\n // Column definitions\n this.columnDefs = signal(config.columns ?? []);\n\n // Column states (width, visibility, pin, sort)\n const initialStates = new Map<string, ColumnState>();\n (config.columns ?? []).forEach((col, idx) => {\n initialStates.set(col.id, {\n id: col.id,\n width: col.width ?? 150,\n visible: col.visible !== false,\n pinned: col.pinned ?? false,\n sort: col.sort ?? null,\n sortIndex: undefined,\n order: idx,\n });\n });\n this.columnStates = signal(initialStates);\n\n // Row data\n this.rowData = signal(config.rows ?? []);\n\n // Selection\n this.selection = signal<SelectionState>({\n activeCell: null,\n range: null,\n selectedRows: new Set(),\n selectedCols: new Set(),\n mode: config.selectionMode ?? 'cell',\n dragging: false,\n });\n\n // Sort\n this.sortState = signal<SortState>({\n criteria: (config.columns ?? [])\n .filter((c) => c.sort)\n .map((c, i) => ({ colId: c.id, direction: c.sort!, index: i })),\n multiSort: config.multiSort ?? false,\n });\n\n // Filter\n this.filterState = signal<FilterState>({ criteria: [], mode: 'and' });\n\n // Editing\n this.editingCell = signal(null);\n this.editingValue = signal(null);\n\n // Scroll\n this.scrollTop = signal(0);\n this.scrollLeft = signal(0);\n this.viewportHeight = signal(600);\n this.viewportWidth = signal(800);\n\n // Plugins\n this.plugins = signal(config.plugins ?? []);\n\n // Lifecycle hooks\n this.lifecycle = {\n beforeEdit: signal(() => true),\n afterEdit: signal(() => {\n /* noop */\n }),\n beforeSort: signal(() => true),\n afterSort: signal(() => {\n /* noop */\n }),\n beforeFilter: signal(() => true),\n afterFilter: signal(() => {\n /* noop */\n }),\n beforeInsertRows: signal(() => true),\n afterInsertRows: signal(() => {\n /* noop */\n }),\n beforeDeleteRows: signal(() => true),\n afterDeleteRows: signal(() => {\n /* noop */\n }),\n beforeInsertColumns: signal(() => true),\n afterInsertColumns: signal(() => {\n /* noop */\n }),\n beforeDeleteColumns: signal(() => true),\n afterDeleteColumns: signal(() => {\n /* noop */\n }),\n beforeCopy: signal(() => true),\n afterCopy: signal(() => {\n /* noop */\n }),\n beforePaste: signal(() => true),\n afterPaste: signal(() => {\n /* noop */\n }),\n };\n\n // ── Computed ──\n\n this.visibleColumns = computed(() => {\n const states = this.columnStates();\n return this.columnDefs().filter((col) => {\n const st = states.get(col.id);\n return st?.visible ?? true;\n });\n });\n\n this.pinnedLeftColumns = computed(() =>\n this.visibleColumns().filter((c) => c.pinned === 'left'),\n );\n\n this.pinnedRightColumns = computed(() =>\n this.visibleColumns().filter((c) => c.pinned === 'right'),\n );\n\n this.unpinnedColumns = computed(() => this.visibleColumns().filter((c) => !c.pinned));\n\n this.columnWidths = computed(() => {\n const states = this.columnStates();\n const widths = new Map<string, number>();\n for (const col of this.columnDefs()) {\n widths.set(col.id, states.get(col.id)?.width ?? col.width ?? 150);\n }\n return widths;\n });\n\n this.totalColumns = computed(() => this.visibleColumns().length);\n\n this.visibleRows = computed(() => {\n return this.rowData();\n });\n\n this.displayRows = computed(() => {\n return this.visibleRows();\n });\n\n this.totalRows = computed(() => this.displayRows().length);\n\n this.rowHeight = computed(() => DENSITY_ROW_HEIGHT[this.density()]);\n\n this.totalHeight = computed(() => this.totalRows() * this.rowHeight());\n\n this.totalWidth = computed(() => {\n const widths = this.columnWidths();\n let total = 0;\n for (const col of this.visibleColumns()) {\n total += widths.get(col.id) ?? 150;\n }\n return total;\n });\n\n // Virtual scroll range — which rows are visible\n this.virtualRowRange = computed(() => {\n const rh = this.rowHeight();\n const vh = this.viewportHeight();\n const st = this.scrollTop();\n const total = this.totalRows();\n const buffer = config.bufferRows ?? 5;\n\n const start = Math.max(0, Math.floor(st / rh) - buffer);\n const visibleCount = Math.ceil(vh / rh);\n const end = Math.min(total, start + visibleCount + buffer * 2);\n\n return {\n start,\n end,\n offsetY: start * rh,\n totalHeight: total * rh,\n };\n });\n\n // Virtual scroll range — which columns are visible\n this.virtualColRange = computed(() => {\n const widths = this.columnWidths();\n const vw = this.viewportWidth();\n const sl = this.scrollLeft();\n const cols = this.unpinnedColumns();\n const buffer = 3;\n\n let start = 0;\n let end = cols.length;\n\n // Find start column\n let accWidth = 0;\n for (let i = 0; i < cols.length; i++) {\n const w = widths.get(cols[i].id) ?? 150;\n if (accWidth + w > sl) {\n start = Math.max(0, i - buffer);\n break;\n }\n accWidth += w;\n }\n\n // Find end column\n let accWidth2 = 0;\n for (let i = start; i < cols.length; i++) {\n accWidth2 += widths.get(cols[i].id) ?? 150;\n if (accWidth2 > vw + sl) {\n end = Math.min(cols.length, i + buffer + 1);\n break;\n }\n }\n\n // Recalculate offsetX\n let finalOffsetX = 0;\n for (let i = 0; i < start; i++) {\n finalOffsetX += widths.get(cols[i].id) ?? 150;\n }\n\n return {\n start,\n end,\n offsetX: finalOffsetX,\n totalWidth: cols.reduce((sum, c) => sum + (widths.get(c.id) ?? 150), 0),\n };\n });\n\n // Initialize plugins\n this.pluginHost.init(this);\n }\n\n // ── Column Operations ──\n\n /** Get column state by ID. */\n getColumnState(colId: string): ColumnState | undefined {\n return this.columnStates().get(colId);\n }\n\n /** Set column width. */\n setColumnWidth(colId: string, width: number): void {\n const states = new Map(this.columnStates());\n const st = states.get(colId);\n if (st) {\n const col = this.columnDefs().find((c) => c.id === colId);\n const min = col?.minWidth ?? 40;\n const max = col?.maxWidth ?? 600;\n states.set(colId, { ...st, width: Math.max(min, Math.min(max, width)) });\n this.columnStates.set(states);\n }\n }\n\n /** Toggle column visibility. */\n toggleColumnVisibility(colId: string): void {\n const states = new Map(this.columnStates());\n const st = states.get(colId);\n if (st) {\n states.set(colId, { ...st, visible: !st.visible });\n this.columnStates.set(states);\n }\n }\n\n /** Set column sort direction. */\n setColumnSort(colId: string, direction: 'asc' | 'desc' | null): void {\n const states = new Map(this.columnStates());\n const st = states.get(colId);\n if (st) {\n states.set(colId, { ...st, sort: direction });\n this.columnStates.set(states);\n }\n\n // Update sort state\n const current = this.sortState();\n let criteria: SortCriterion[];\n\n if (current.multiSort) {\n const existing = current.criteria.filter((c) => c.colId !== colId);\n if (direction) {\n criteria = [...existing, { colId, direction, index: existing.length }];\n } else {\n criteria = existing;\n }\n } else {\n // Single sort: clear other sorts\n for (const [id, s] of states) {\n if (id !== colId && s.sort) {\n states.set(id, { ...s, sort: null });\n }\n }\n this.columnStates.set(states);\n criteria = direction ? [{ colId, direction, index: 0 }] : [];\n }\n\n this.sortState.set({ ...current, criteria });\n }\n\n /** Reorder columns. */\n moveColumn(fromIndex: number, toIndex: number): void {\n const cols = [...this.columnDefs()];\n const [moved] = cols.splice(fromIndex, 1);\n if (moved) {\n cols.splice(toIndex, 0, moved);\n this.columnDefs.set(cols);\n }\n }\n\n // ── Row Operations ──\n\n /** Insert rows at the given index. */\n insertRows(count: number, atIndex?: number): number[] {\n const index = atIndex ?? this.rowData().length;\n const rows = [...this.rowData()];\n const newIndices: number[] = [];\n\n for (let i = 0; i < count; i++) {\n const newRow = createEmptyRow(generateRowId(), this.columnDefs());\n rows.splice(index + i, 0, newRow);\n newIndices.push(index + i);\n }\n\n this.rowData.set(rows);\n return newIndices;\n }\n\n /** Delete rows by index. */\n deleteRows(indices: number[]): RowDef[] {\n const sorted = [...indices].sort((a, b) => b - a);\n const rows = [...this.rowData()];\n const deleted: RowDef[] = [];\n\n for (const idx of sorted) {\n if (idx >= 0 && idx < rows.length) {\n deleted.push(rows[idx]);\n rows.splice(idx, 1);\n }\n }\n\n this.rowData.set(rows);\n return deleted;\n }\n\n // ── Cell Operations ──\n\n /** Get a cell value. */\n getCellValue(rowIndex: number, colId: string): CellValue {\n return this.rowData()[rowIndex]?.cells[colId]?.value ?? null;\n }\n\n /** Set a cell value. */\n setCellValue(rowIndex: number, colId: string, value: CellValue): void {\n const rows = [...this.rowData()];\n const row = rows[rowIndex];\n if (!row) return;\n\n rows[rowIndex] = {\n ...row,\n cells: {\n ...row.cells,\n [colId]: { value, meta: row.cells[colId]?.meta },\n },\n };\n\n this.rowData.set(rows);\n }\n\n /** Get cell metadata. */\n getCellMeta(rowIndex: number, colId: string): CellMeta | undefined {\n return this.rowData()[rowIndex]?.cells[colId]?.meta;\n }\n\n /** Get a column definition by ID. */\n getColumnDef(colId: string): ColumnDef | undefined {\n return this.columnDefs().find((c) => c.id === colId);\n }\n\n /** Get the 0-based column index by ID. */\n getColIndex(colId: string): number {\n return this.visibleColumns().findIndex((c) => c.id === colId);\n }\n\n // ── Editing ──\n\n /** Begin editing a cell. */\n startEdit(rowIndex: number, colId: string): boolean {\n if (!this.editable()) return false;\n if (!this.pluginHost.beforeEdit(rowIndex, colId)) return false;\n\n const value = this.getCellValue(rowIndex, colId);\n this.editingCell.set({ row: rowIndex, col: this.getColIndex(colId) });\n this.editingValue.set(value);\n return true;\n }\n\n /** Commit the current edit. */\n commitEdit(): void {\n const cell = this.editingCell();\n if (!cell) return;\n\n const col = this.visibleColumns()[cell.col];\n if (!col) return;\n\n const oldValue = this.getCellValue(cell.row, col.id);\n const newValue = this.editingValue();\n\n if (oldValue !== newValue) {\n this.setCellValue(cell.row, col.id, newValue);\n this.pluginHost.afterEdit(cell.row, col.id, oldValue, newValue);\n }\n\n this.editingCell.set(null);\n }\n\n /** Cancel the current edit. */\n cancelEdit(): void {\n this.editingCell.set(null);\n this.editingValue.set(null);\n }\n\n // ── Sort ──\n\n /** Sort by a column (toggles direction). */\n sortBy(colId: string): void {\n const st = this.columnStates().get(colId);\n if (!st) return;\n\n const currentSort = st.sort;\n let newDirection: 'asc' | 'desc' | null;\n\n if (currentSort === null) {\n newDirection = 'asc';\n } else if (currentSort === 'asc') {\n newDirection = 'desc';\n } else {\n newDirection = null;\n }\n\n if (!this.pluginHost.beforeSort(colId, newDirection)) return;\n\n this.setColumnSort(colId, newDirection);\n this.pluginHost.afterSort();\n }\n\n /** Clear all sorting. */\n clearSort(): void {\n const states = new Map(this.columnStates());\n for (const [id, st] of states) {\n if (st.sort) {\n states.set(id, { ...st, sort: null, sortIndex: undefined });\n }\n }\n this.columnStates.set(states);\n this.sortState.set({ criteria: [], multiSort: this.sortState().multiSort });\n }\n\n // ── Filter ──\n\n /** Apply a filter. */\n applyFilter(\n colId: string,\n operator: FilterCriterion['operator'],\n value: unknown,\n valueTo?: unknown,\n ): void {\n const current = this.filterState();\n const existing = current.criteria.filter((c) => c.colId !== colId);\n const criteria = [...existing, { colId, operator, value, valueTo }];\n this.filterState.set({ ...current, criteria });\n }\n\n /** Clear filter for a column. */\n clearColumnFilter(colId: string): void {\n const current = this.filterState();\n this.filterState.set({\n ...current,\n criteria: current.criteria.filter((c) => c.colId !== colId),\n });\n }\n\n /** Clear all filters. */\n clearFilters(): void {\n this.filterState.set({ criteria: [], mode: 'and' });\n }\n\n // ── Navigation ──\n\n /** Move the active cell by delta. */\n navigate(deltaRow: number, deltaCol: number): void {\n const sel = this.selection();\n const current = sel.activeCell ?? { row: 0, col: 0 };\n const newRow = Math.max(0, Math.min(this.totalRows() - 1, current.row + deltaRow));\n const newCol = Math.max(0, Math.min(this.totalColumns() - 1, current.col + deltaCol));\n\n this.selection.set({\n ...sel,\n activeCell: { row: newRow, col: newCol },\n range: { start: { row: newRow, col: newCol }, end: { row: newRow, col: newCol } },\n });\n }\n\n /** Scroll to make a cell visible. */\n scrollToCell(rowIndex: number, _colIndex: number): void {\n const rh = this.rowHeight();\n const cellTop = rowIndex * rh;\n const cellBottom = cellTop + rh;\n\n const st = this.scrollTop();\n const vh = this.viewportHeight();\n\n if (cellTop < st) {\n this.scrollTop.set(cellTop);\n } else if (cellBottom > st + vh) {\n this.scrollTop.set(cellBottom - vh);\n }\n }\n\n // ── Selection ──\n\n /** Select a cell. */\n selectCell(row: number, col: number): void {\n this.selection.set({\n ...this.selection(),\n activeCell: { row, col },\n range: { start: { row, col }, end: { row, col } },\n mode: 'cell',\n });\n }\n\n /** Select a range. */\n selectRange(start: CellAddress, end: CellAddress): void {\n this.selection.set({\n ...this.selection(),\n range: { start, end },\n mode: 'range',\n });\n }\n\n /** Select a row. */\n selectRow(rowIndex: number): void {\n const rows = new Set(this.selection().selectedRows);\n if (rows.has(rowIndex)) {\n rows.delete(rowIndex);\n } else {\n rows.add(rowIndex);\n }\n this.selection.set({ ...this.selection(), selectedRows: rows, mode: 'row' });\n }\n\n /** Select a column. */\n selectColumn(colIndex: number): void {\n const cols = new Set(this.selection().selectedCols);\n if (cols.has(colIndex)) {\n cols.delete(colIndex);\n } else {\n cols.add(colIndex);\n }\n this.selection.set({ ...this.selection(), selectedCols: cols, mode: 'column' });\n }\n\n /** Select all cells. */\n selectAll(): void {\n const allRows = new Set(Array.from({ length: this.totalRows() }, (_, i) => i));\n const allCols = new Set(Array.from({ length: this.totalColumns() }, (_, i) => i));\n this.selection.set({\n activeCell: { row: 0, col: 0 },\n range: {\n start: { row: 0, col: 0 },\n end: { row: this.totalRows() - 1, col: this.totalColumns() - 1 },\n },\n selectedRows: allRows,\n selectedCols: allCols,\n mode: 'range',\n dragging: false,\n });\n }\n\n /** Check if a cell is selected. */\n isCellSelected(row: number, col: number): boolean {\n const sel = this.selection();\n if (sel.range) {\n const minR = Math.min(sel.range.start.row, sel.range.end.row);\n const maxR = Math.max(sel.range.start.row, sel.range.end.row);\n const minC = Math.min(sel.range.start.col, sel.range.end.col);\n const maxC = Math.max(sel.range.start.col, sel.range.end.col);\n if (row >= minR && row <= maxR && col >= minC && col <= maxC) return true;\n }\n return sel.selectedRows.has(row) || sel.selectedCols.has(col);\n }\n\n /** Check if a cell is the active cell. */\n isCellActive(row: number, col: number): boolean {\n const ac = this.selection().activeCell;\n return ac?.row === row && ac?.col === col;\n }\n\n // ── Refresh ──\n\n /** Force recalculation by re-setting data. */\n refresh(): void {\n this.rowData.update((r) => [...r]);\n this.columnStates.update((s) => new Map(s));\n }\n\n // ── Destroy ──\n\n destroy(): void {\n this.pluginHost.destroy();\n }\n}\n","import type { SpreadsheetPlugin } from './plugin.types';\nimport type { SpreadsheetEngine } from '../spreadsheet-engine';\nimport type { SortCriterion } from '../models';\n\n/**\n * SortPlugin manages multi-column sorting.\n * Sorts the engine's rows by the active sort criteria.\n */\nexport class SortPlugin implements SpreadsheetPlugin {\n readonly name = 'sort';\n readonly priority = 10;\n\n private _engine: SpreadsheetEngine | null = null;\n\n onInit(engine: SpreadsheetEngine): void {\n this._engine = engine;\n }\n\n /** Apply all active sort criteria to the engine's row list. */\n applySort(criteria: readonly SortCriterion[]): void {\n if (!this._engine || criteria.length === 0) return;\n\n const defs = this._engine.columnDefs();\n const sorted = [...this._engine.rowData()];\n\n sorted.sort((a, b) => {\n for (const crit of criteria) {\n const col = defs.find((d) => d.id === crit.colId);\n const aVal = a.cells[crit.colId]?.value;\n const bVal = b.cells[crit.colId]?.value;\n\n let cmp: number;\n if (col?.comparator) {\n cmp = col.comparator(aVal, bVal, crit.direction);\n } else {\n cmp = defaultCompare(aVal, bVal);\n }\n\n if (cmp !== 0) {\n return crit.direction === 'desc' ? -cmp : cmp;\n }\n }\n return 0;\n });\n\n this._engine.rowData.set(sorted);\n }\n\n onBeforeSort(_colId: string, _direction: 'asc' | 'desc' | null): boolean {\n return true;\n }\n\n onAfterSort(): void {\n const criteria = this._engine?.sortState().criteria;\n if (criteria && criteria.length > 0) {\n this.applySort(criteria);\n }\n }\n}\n\nfunction defaultCompare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n return String(a).localeCompare(String(b));\n}\n","import type { SpreadsheetPlugin } from './plugin.types';\nimport type { SpreadsheetEngine } from '../spreadsheet-engine';\nimport type { FilterCriterion, RowDef } from '../models';\n\n/**\n * FilterPlugin applies column-level filters to the row set.\n * Stores original rows and restores on clear.\n */\nexport class FilterPlugin implements SpreadsheetPlugin {\n readonly name = 'filter';\n readonly priority = 20;\n\n private _engine: SpreadsheetEngine | null = null;\n private _originalRows: readonly RowDef[] = [];\n\n onInit(engine: SpreadsheetEngine): void {\n this._engine = engine;\n this._originalRows = engine.rowData();\n }\n\n /** Apply filter criteria. */\n applyFilter(criteria: readonly FilterCriterion[], mode: 'and' | 'or'): void {\n if (!this._engine) return;\n if (criteria.length === 0) {\n this._engine.rowData.set([...this._originalRows]);\n return;\n }\n\n this._originalRows = this._engine.rowData();\n const filtered = this._originalRows.filter((row) => {\n const results = criteria.map((c) => matchesCriterion(row.cells[c.colId]?.value, c));\n return mode === 'and' ? results.every(Boolean) : results.some(Boolean);\n });\n\n this._engine.rowData.set(filtered);\n }\n\n /** Clear all filters and restore original rows. */\n clearFilter(): void {\n if (!this._engine) return;\n this._engine.rowData.set([...this._originalRows]);\n }\n\n onBeforeFilter(): boolean {\n return true;\n }\n\n onAfterFilter(): void {\n // Sync original rows when data changes externally\n if (this._engine) {\n this._originalRows = this._engine.rowData();\n }\n }\n}\n\nfunction matchesCriterion(value: unknown, criterion: FilterCriterion): boolean {\n const v = value == null ? '' : String(value).toLowerCase();\n const c = criterion.value == null ? '' : String(criterion.value).toLowerCase();\n\n switch (criterion.operator) {\n case 'equals':\n return v === c;\n case 'notEquals':\n return v !== c;\n case 'contains':\n return v.includes(c);\n case 'notContains':\n return !v.includes(c);\n case 'startsWith':\n return v.startsWith(c);\n case 'endsWith':\n return v.endsWith(c);\n case 'gt':\n return Number(value) > Number(criterion.value);\n case 'gte':\n return Number(value) >= Number(criterion.value);\n case 'lt':\n return Number(value) < Number(criterion.value);\n case 'lte':\n return Number(value) <= Number(criterion.value);\n case 'between': {\n const num = Number(value);\n return num >= Number(criterion.value) && num <= Number(criterion.valueTo);\n }\n case 'in': {\n const arr = Array.isArray(criterion.value) ? criterion.value : [];\n return arr.some((item) => String(item).toLowerCase() === v);\n }\n case 'empty':\n return v === '';\n case 'notEmpty':\n return v !== '';\n default:\n return true;\n }\n}\n","import type { SpreadsheetPlugin } from './plugin.types';\nimport type { SpreadsheetEngine } from '../spreadsheet-engine';\nimport type { CellAddress } from '../models';\n\n/**\n * SelectionPlugin manages cell/row/column/range selection state.\n * Handles keyboard navigation and selection extension.\n */\nexport class SelectionPlugin implements SpreadsheetPlugin {\n readonly name = 'selection';\n readonly priority = 5;\n\n private _engine: SpreadsheetEngine | null = null;\n\n onInit(engine: SpreadsheetEngine): void {\n this._engine = engine;\n }\n\n /** Select a single cell. */\n selectCell(row: number, col: number): void {\n if (!this._engine) return;\n this._engine.selection.set({\n ...this._engine.selection(),\n activeCell: { row, col },\n range: { start: { row, col }, end: { row, col } },\n mode: 'cell',\n });\n }\n\n /** Select a rectangular range. */\n selectRange(start: CellAddress, end: CellAddress): void {\n if (!this._engine) return;\n this._engine.selection.set({\n ...this._engine.selection(),\n range: { start, end },\n mode: 'range',\n });\n }\n\n /** Select an entire row. */\n selectRow(rowIndex: number): void {\n if (!this._engine) return;\n const rows = new Set(this._engine.selection().selectedRows);\n if (rows.has(rowIndex)) {\n rows.delete(rowIndex);\n } else {\n rows.add(rowIndex);\n }\n this._engine.selection.set({\n ...this._engine.selection(),\n selectedRows: rows,\n mode: 'row',\n });\n }\n\n /** Select an entire column. */\n selectColumn(colIndex: number): void {\n if (!this._engine) return;\n const cols = new Set(this._engine.selection().selectedCols);\n if (cols.has(colIndex)) {\n cols.delete(colIndex);\n } else {\n cols.add(colIndex);\n }\n this._engine.selection.set({\n ...this._engine.selection(),\n selectedCols: cols,\n mode: 'column',\n });\n }\n\n /** Extend the range selection to include the given cell. */\n extendSelection(row: number, col: number): void {\n if (!this._engine) return;\n const sel = this._engine.selection();\n if (!sel.range) {\n this.selectRange(sel.activeCell ?? { row, col }, { row, col });\n } else {\n this.selectRange(sel.range.start, { row, col });\n }\n }\n\n /** Clear all selection. */\n clearSelection(): void {\n if (!this._engine) return;\n this._engine.selection.set({\n activeCell: null,\n range: null,\n selectedRows: new Set(),\n selectedCols: new Set(),\n mode: 'cell',\n dragging: false,\n });\n }\n\n /** Check if a cell is within the current selection. */\n isSelected(row: number, col: number): boolean {\n const sel = this._engine?.selection();\n if (!sel) return false;\n\n if (sel.range) {\n const minRow = Math.min(sel.range.start.row, sel.range.end.row);\n const maxRow = Math.max(sel.range.start.row, sel.range.end.row);\n const minCol = Math.min(sel.range.start.col, sel.range.end.col);\n const maxCol = Math.max(sel.range.start.col, sel.range.end.col);\n if (row >= minRow && row <= maxRow && col >= minCol && col <= maxCol) return true;\n }\n\n if (sel.selectedRows.has(row)) return true;\n if (sel.selectedCols.has(col)) return true;\n\n return false;\n }\n}\n","import type { SpreadsheetPlugin } from './plugin.types';\nimport type { SpreadsheetEngine } from '../spreadsheet-engine';\nimport type {\n FormulaNode,\n CellRefNode,\n RangeRefNode,\n NumberNode,\n StringNode,\n BooleanNode,\n BinaryOpNode,\n UnaryOpNode,\n FunctionCallNode,\n FormulaResult,\n FormulaFunction,\n} from '../models';\n\n/**\n * FormulaPlugin evaluates formulas in cells.\n * Maintains a dependency graph for recalculation ordering.\n */\nexport class FormulaPlugin implements SpreadsheetPlugin {\n readonly name = 'formula';\n readonly priority = 50;\n\n private _engine: SpreadsheetEngine | null = null;\n private _functions = new Map<string, FormulaFunction>();\n\n constructor() {\n this._registerBuiltinFunctions();\n }\n\n onInit(engine: SpreadsheetEngine): void {\n this._engine = engine;\n }\n\n onDestroy(): void {\n this._functions.clear();\n }\n\n /** Register a custom function. */\n registerFunction(fn: FormulaFunction): void {\n this._functions.set(fn.name.toUpperCase(), fn);\n }\n\n /** Evaluate a formula string. */\n evaluate(formula: string, getCellValue: (ref: string) => unknown): FormulaResult {\n try {\n const ast = this._parse(formula);\n if (!ast) return { value: null, error: '#PARSE!' };\n const value = this._evalNode(ast, getCellValue);\n return { value };\n } catch (e) {\n return { value: null, error: e instanceof Error ? e.message : '#ERROR!' };\n }\n }\n\n /** Build a dependency graph: which cells depend on which. */\n buildDependencyGraph(): Map<string, string[]> {\n const graph = new Map<string, string[]>();\n if (!this._engine) return graph;\n\n const rows = this._engine.rowData();\n const cols = this._engine.columnDefs();\n\n for (let r = 0; r < rows.length; r++) {\n for (const col of cols) {\n const val = rows[r].cells[col.id]?.value;\n if (typeof val === 'string' && val.startsWith('=')) {\n const refs = this._extractRefs(val);\n graph.set(`${r}:${col.id}`, refs);\n }\n }\n }\n\n return graph;\n }\n\n /** Topologically sort cells by their dependencies (recalc order). */\n getRecalcOrder(): string[] {\n const graph = this.buildDependencyGraph();\n const visited = new Set<string>();\n const order: string[] = [];\n\n const visit = (cell: string, stack: Set<string>) => {\n if (visited.has(cell)) return;\n if (stack.has(cell)) return;\n stack.add(cell);\n const deps = graph.get(cell) ?? [];\n for (const dep of deps) {\n visit(dep, stack);\n }\n stack.delete(cell);\n visited.add(cell);\n order.push(cell);\n };\n\n for (const cell of graph.keys()) {\n visit(cell, new Set());\n }\n\n return order;\n }\n\n // ── Parser ──\n\n private _parse(formula: string): FormulaNode | null {\n const expr = formula.startsWith('=') ? formula.slice(1) : formula;\n try {\n return this._parseExpression(expr, { pos: 0 });\n } catch {\n return null;\n }\n }\n\n private _parseExpression(expr: string, ctx: { pos: number }): FormulaNode {\n return this._parseComparison(expr, ctx);\n }\n\n private _parseComparison(expr: string, ctx: { pos: number }): FormulaNode {\n let left = this._parseConcat(expr, ctx);\n this._skipSpaces(expr, ctx);\n\n while (ctx.pos < expr.length) {\n const ch = expr[ctx.pos];\n if (ch === '=' || ch === '<' || ch === '>') {\n let op: string;\n if (ch === '=' && expr[ctx.pos + 1] !== '=') {\n op = '=';\n ctx.pos++;\n } else if (ch === '<' && expr[ctx.pos + 1] === '>') {\n op = '<>';\n ctx.pos += 2;\n } else if (ch === '<' && expr[ctx.pos + 1] === '=') {\n op = '<=';\n ctx.pos += 2;\n } else if (ch === '>' && expr[ctx.pos + 1] === '=') {\n op = '>=';\n ctx.pos += 2;\n } else if (ch === '>') {\n op = '>';\n ctx.pos++;\n } else {\n break;\n }\n const right = this._parseConcat(expr, ctx);\n left = { type: 'binary_op', op: op as BinaryOpNode['op'], left, right } as BinaryOpNode;\n } else {\n break;\n }\n }\n\n return left;\n }\n\n private _parseConcat(expr: string, ctx: { pos: number }): FormulaNode {\n let left = this._parseAddSub(expr, ctx);\n this._skipSpaces(expr, ctx);\n\n while (ctx.pos < expr.length && expr[ctx.pos] === '&') {\n ctx.pos++;\n const right = this._parseAddSub(expr, ctx);\n left = { type: 'binary_op', op: '&', left, right } as BinaryOpNode;\n this._skipSpaces(expr, ctx);\n }\n\n return left;\n }\n\n private _parseAddSub(expr: string, ctx: { pos: number }): FormulaNode {\n let left = this._parseMulDiv(expr, ctx);\n this._skipSpaces(expr, ctx);\n\n while (ctx.pos < expr.length && (expr[ctx.pos] === '+' || expr[ctx.pos] === '-')) {\n const op = expr[ctx.pos] as '+' | '-';\n ctx.pos++;\n const right = this._parseMulDiv(expr, ctx);\n left = { type: 'binary_op', op, left, right } as BinaryOpNode;\n this._skipSpaces(expr, ctx);\n }\n\n return left;\n }\n\n private _parseMulDiv(expr: string, ctx: { pos: number }): FormulaNode {\n let left = this._parseUnary(expr, ctx);\n this._skipSpaces(expr, ctx);\n\n while (ctx.pos < expr.length && (expr[ctx.pos] === '*' || expr[ctx.pos] === '/')) {\n const op = expr[ctx.pos] as '*' | '/';\n ctx.pos++;\n const right = this._parseUnary(expr, ctx);\n left = { type: 'binary_op', op, left, right } as BinaryOpNode;\n this._skipSpaces(expr, ctx);\n }\n\n return left;\n }\n\n private _parseUnary(expr: string, ctx: { pos: number }): FormulaNode {\n this._skipSpaces(expr, ctx);\n if (ctx.pos < expr.length && (expr[ctx.pos] === '-' || expr[ctx.pos] === '+')) {\n const op = expr[ctx.pos] as '-' | '+';\n ctx.pos++;\n const operand = this._parseUnary(expr, ctx);\n return { type: 'unary_op', op, operand } as UnaryOpNode;\n }\n return this._parsePrimary(expr, ctx);\n }\n\n private _parsePrimary(expr: string, ctx: { pos: number }): FormulaNode {\n this._skipSpaces(expr, ctx);\n\n if (ctx.pos >= expr.length) {\n throw new Error('Unexpected end of expression');\n }\n\n const ch = expr[ctx.pos];\n\n // String literal\n if (ch === '\"') {\n ctx.pos++;\n let str = '';\n while (ctx.pos < expr.length && expr[ctx.pos] !== '\"') {\n str += expr[ctx.pos++];\n }\n if (ctx.pos < expr.length) ctx.pos++;\n return { type: 'string', value: str } as StringNode;\n }\n\n // Parenthesized expression\n if (ch === '(') {\n ctx.pos++;\n const node = this._parseExpression(expr, ctx);\n this._skipSpaces(expr, ctx);\n if (ctx.pos < expr.length && expr[ctx.pos] === ')') ctx.pos++;\n return node;\n }\n\n // Number\n if ((ch >= '0' && ch <= '9') || ch === '.') {\n let numStr = '';\n while (\n ctx.pos < expr.length &&\n ((expr[ctx.pos] >= '0' && expr[ctx.pos] <= '9') || expr[ctx.pos] === '.')\n ) {\n numStr += expr[ctx.pos++];\n }\n return { type: 'number', value: parseFloat(numStr) } as NumberNode;\n }\n\n // Boolean\n const upper = expr.slice(ctx.pos).toUpperCase();\n if (upper.startsWith('TRUE')) {\n ctx.pos += 4;\n return { type: 'boolean', value: true } as BooleanNode;\n }\n if (upper.startsWith('FALSE')) {\n ctx.pos += 5;\n return { type: 'boolean', value: false } as BooleanNode;\n }\n\n // Cell reference, range, or function call\n if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) {\n let name = '';\n while (ctx.pos < expr.length && /[A-Za-z0-9_]/.test(expr[ctx.pos])) {\n name += expr[ctx.pos++];\n }\n this._skipSpaces(expr, ctx);\n\n // Range reference (e.g. A1:B5)\n if (ctx.pos < expr.length && expr[ctx.pos] === ':') {\n ctx.pos++;\n const end = this._parseCellRef(expr, ctx);\n const startParsed = parseCellRefStr(name);\n return {\n type: 'range_ref',\n startCol: startParsed.col,\n startRow: startParsed.row,\n endCol: end.col,\n endRow: end.row,\n } as RangeRefNode;\n }\n\n // Function call\n if (ctx.pos < expr.length && expr[ctx.pos] === '(') {\n ctx.pos++;\n const args: FormulaNode[] = [];\n while (ctx.pos < expr.length && expr[ctx.pos] !== ')') {\n args.push(this._parseExpression(expr, ctx));\n this._skipSpaces(expr, ctx);\n if (ctx.pos < expr.length && expr[ctx.pos] === ',') ctx.pos++;\n this._skipSpaces(expr, ctx);\n }\n if (ctx.pos < expr.length) ctx.pos++;\n return { type: 'function_call', name: name.toUpperCase(), args } as FunctionCallNode;\n }\n\n // Cell reference\n const ref = parseCellRefStr(name);\n return { type: 'cell_ref', col: ref.col, row: ref.row } as CellRefNode;\n }\n\n throw new Error(`Unexpected character: ${ch}`);\n }\n\n private _parseCellRef(expr: string, ctx: { pos: number }): { col: string; row: number } {\n let name = '';\n while (ctx.pos < expr.length && /[A-Za-z0-9_]/.test(expr[ctx.pos])) {\n name += expr[ctx.pos++];\n }\n return parseCellRefStr(name);\n }\n\n private _skipSpaces(expr: string, ctx: { pos: number }): void {\n while (ctx.pos < expr.length && expr[ctx.pos] === ' ') ctx.pos++;\n }\n\n // ── Evaluator ──\n\n private _evalNode(\n node: FormulaNode,\n getCellValue: (ref: string) => unknown,\n ): number | string | boolean | null {\n switch (node.type) {\n case 'number':\n return (node as NumberNode).value;\n case 'string':\n return (node as StringNode).value;\n case 'boolean':\n return (node as BooleanNode).value;\n case 'cell_ref': {\n const refNode = node as CellRefNode;\n const ref = `${refNode.col}${refNode.row}`;\n const val = getCellValue(ref);\n if (typeof val === 'string' && val.startsWith('=')) {\n const result = this.evaluate(val, getCellValue);\n return result.value;\n }\n return val as number | string | boolean | null;\n }\n case 'binary_op': {\n const binNode = node as BinaryOpNode;\n const l = this._evalNode(binNode.left, getCellValue);\n const r = this._evalNode(binNode.right, getCellValue);\n return this._evalBinaryOp(binNode.op, l, r);\n }\n case 'unary_op': {\n const unaryNode = node as UnaryOpNode;\n const val = this._evalNode(unaryNode.operand, getCellValue);\n if (unaryNode.op === '-') return -(val as number);\n return val;\n }\n case 'function_call': {\n const fnNode = node as FunctionCallNode;\n const fn = this._functions.get(fnNode.name);\n if (!fn) throw new Error(`Unknown function: ${fnNode.name}`);\n const args = fnNode.args.map((a: FormulaNode) => this._evalNode(a, getCellValue));\n return fn.fn(args);\n }\n case 'range_ref':\n return 0;\n default:\n return null;\n }\n }\n\n private _evalBinaryOp(op: string, l: unknown, r: unknown): number | string | boolean {\n const ln = typeof l === 'number' ? l : parseFloat(String(l)) || 0;\n const rn = typeof r === 'number' ? r : parseFloat(String(r)) || 0;\n\n switch (op) {\n case '+':\n return ln + rn;\n case '-':\n return ln - rn;\n case '*':\n return ln * rn;\n case '/':\n return rn !== 0 ? ln / rn : (null as unknown as number);\n case '&':\n return String(l ?? '') + String(r ?? '');\n case '=':\n return l === r || ln === rn;\n case '<>':\n return l !== r && ln !== rn;\n case '>':\n return ln > rn;\n case '<':\n return ln < rn;\n case '>=':\n return ln >= rn;\n case '<=':\n return ln <= rn;\n default:\n return 0;\n }\n }\n\n private _extractRefs(formula: string): string[] {\n const refs: string[] = [];\n const regex = /([A-Z]+)(\\d+)/gi;\n let match;\n while ((match = regex.exec(formula)) !== null) {\n refs.push(`${match[1].toUpperCase()}${match[2]}`);\n }\n return refs;\n }\n\n // ── Built-in Functions ──\n\n private _registerBuiltinFunctions(): void {\n const fns: FormulaFunction[] = [\n {\n name: 'SUM',\n minArgs: 1,\n maxArgs: Infinity,\n fn: (args) => args.reduce<number>((s, v) => s + (Number(v) || 0), 0),\n },\n {\n name: 'AVERAGE',\n minArgs: 1,\n maxArgs: Infinity,\n fn: (args) => {\n const nums = args.map(Number).filter((n) => !isNaN(n));\n return nums.length ? nums.reduce((s, v) => s + v, 0) / nums.length : 0;\n },\n },\n {\n name: 'COUNT',\n minArgs: 1,\n maxArgs: Infinity,\n fn: (args) => args.filter((v) => v != null && v !== '').length,\n },\n {\n name: 'MIN',\n minArgs: 1,\n maxArgs: Infinity,\n fn: (args) => Math.min(...args.map(Number).filter((n) => !isNaN(n))),\n },\n {\n name: 'MAX',\n minArgs: 1,\n maxArgs: Infinity,\n fn: (args) => Math.max(...args.map(Number).filter((n) => !isNaN(n))),\n },\n {\n name: 'IF',\n minArgs: 3,\n maxArgs: 3,\n fn: (args) => (args[0] ? args[1] : args[2]),\n },\n {\n name: 'AND',\n minArgs: 1,\n maxArgs: Infinity,\n fn: (args) => args.every(Boolean),\n },\n {\n name: 'OR',\n minArgs: 1,\n maxArgs: Infinity,\n fn: (args) => args.some(Boolean),\n },\n {\n name: 'NOT',\n minArgs: 1,\n maxArgs: 1,\n fn: (args) => !args[0],\n },\n {\n name: 'CONCAT',\n minArgs: 1,\n maxArgs: Infinity,\n fn: (args) => args.join(''),\n },\n {\n name: 'ROUND',\n minArgs: 1,\n maxArgs: 2,\n fn: (args) => {\n const decimals = args[1] != null ? Number(args[1]) : 0;\n return Math.round(Number(args[0]) * Math.pow(10, decimals)) / Math.pow(10, decimals);\n },\n },\n { name: 'ABS', minArgs: 1, maxArgs: 1, fn: (args) => Math.abs(Number(args[0])) },\n {\n name: 'POWER',\n minArgs: 2,\n maxArgs: 2,\n fn: (args) => Math.pow(Number(args[0]), Number(args[1])),\n },\n { name: 'SQRT', minArgs: 1, maxArgs: 1, fn: (args) => Math.sqrt(Number(args[0])) },\n { name: 'LEN', minArgs: 1, maxArgs: 1, fn: (args) => String(args[0]).length },\n { name: 'UPPER', minArgs: 1, maxArgs: 1, fn: (args) => String(args[0]).toUpperCase() },\n { name: 'LOWER', minArgs: 1, maxArgs: 1, fn: (args) => String(args[0]).toLowerCase() },\n { name: 'TRIM', minArgs: 1, maxArgs: 1, fn: (args) => String(args[0]).trim() },\n ];\n for (const fn of fns) {\n this._functions.set(fn.name, fn);\n }\n }\n}\n\nfunction parseCellRefStr(ref: string): { col: string; row: number } {\n const match = ref.match(/^([A-Z]+)(\\d+)$/i);\n if (!match) throw new Error(`Invalid cell reference: ${ref}`);\n return { col: match[1].toUpperCase(), row: parseInt(match[2], 10) };\n}\n","import type { SpreadsheetPlugin } from './plugin.types';\nimport type { SpreadsheetEngine } from '../spreadsheet-engine';\nimport type { CellValue } from '../models';\n\n/**\n * ClipboardPlugin handles copy/paste/cut operations.\n * Reads from and writes to the system clipboard via the Clipboard API.\n */\nexport class ClipboardPlugin implements SpreadsheetPlugin {\n readonly name = 'clipboard';\n readonly priority = 30;\n\n private _engine: SpreadsheetEngine | null = null;\n private _cutCells: { row: number; col: number; value: CellValue }[] | null = null;\n\n onInit(engine: SpreadsheetEngine): void {\n this._engine = engine;\n }\n\n /** Copy the current selection to the clipboard. */\n async copy(): Promise<void> {\n if (!this._engine) return;\n const sel = this._engine.selection();\n if (!sel.range) return;\n\n const tsv = this._selectionToTsv(\n sel.range.start.row,\n sel.range.start.col,\n sel.range.end.row,\n sel.range.end.col,\n );\n try {\n await navigator.clipboard.writeText(tsv);\n } catch {\n // Fallback: use a temporary textarea\n this._copyToTextarea(tsv);\n }\n }\n\n /** Cut the current selection (copy + clear). */\n async cut(): Promise<void> {\n if (!this._engine) return;\n const sel = this._engine.selection();\n if (!sel.range) return;\n\n const startRow = Math.min(sel.range.start.row, sel.range.end.row);\n const startCol = Math.min(sel.range.start.col, sel.range.end.col);\n const endRow = Math.max(sel.range.start.row, sel.range.end.row);\n const endCol = Math.max(sel.range.start.col, sel.range.end.col);\n\n this._cutCells = [];\n const rows = [...this._engine.rowData()];\n const cols = this._engine.columnDefs();\n\n for (let r = startRow; r <= endRow; r++) {\n for (let c = startCol; c <= endCol; c++) {\n const colId = cols[c]?.id;\n if (colId) {\n this._cutCells.push({ row: r, col: c, value: rows[r]?.cells[colId]?.value ?? null });\n }\n }\n }\n\n await this.copy();\n this.clearSelectionContent();\n }\n\n /** Paste clipboard content starting at the active cell. */\n async paste(): Promise<void> {\n if (!this._engine) return;\n const sel = this._engine.selection();\n const activeCell = sel.activeCell;\n if (!activeCell) return;\n\n let text: string;\n try {\n text = await navigator.clipboard.readText();\n } catch {\n return;\n }\n\n if (!text) return;\n\n const lines = text.split('\\n').filter((l) => l.length > 0);\n const cols = this._engine.columnDefs();\n const rows = [...this._engine.rowData()];\n const startRow = activeCell.row;\n const startCol = activeCell.col;\n\n for (let r = 0; r < lines.length; r++) {\n const cells = lines[r].split('\\t');\n const targetRow = startRow + r;\n if (targetRow >= rows.length) break;\n\n for (let c = 0; c < cells.length; c++) {\n const targetCol = startCol + c;\n if (targetCol >= cols.length) break;\n\n const colId = cols[targetCol].id;\n const rowData = rows[targetRow];\n if (rowData) {\n const raw = cells[c].trim();\n const value: CellValue = parseClipboardValue(raw);\n rows[targetRow] = {\n ...rowData,\n cells: { ...rowData.cells, [colId]: { value, meta: rowData.cells[colId]?.meta } },\n };\n }\n }\n }\n\n this._engine.rowData.set(rows);\n }\n\n /** Clear the content of selected cells. */\n clearSelectionContent(): void {\n if (!this._engine) return;\n const sel = this._engine.selection();\n if (!sel.range) return;\n\n const startRow = Math.min(sel.range.start.row, sel.range.end.row);\n const startCol = Math.min(sel.range.start.col, sel.range.end.col);\n const endRow = Math.max(sel.range.start.row, sel.range.end.row);\n const endCol = Math.max(sel.range.start.col, sel.range.end.col);\n\n const rows = [...this._engine.rowData()];\n const cols = this._engine.columnDefs();\n\n for (let r = startRow; r <= endRow; r++) {\n for (let c = startCol; c <= endCol; c++) {\n const colId = cols[c]?.id;\n if (colId && rows[r]) {\n rows[r] = {\n ...rows[r],\n cells: { ...rows[r].cells, [colId]: { value: null, meta: rows[r].cells[colId]?.meta } },\n };\n }\n }\n }\n\n this._engine.rowData.set(rows);\n }\n\n private _selectionToTsv(\n startRow: number,\n startCol: number,\n endRow: number,\n endCol: number,\n ): string {\n if (!this._engine) return '';\n const rows = this._engine.rowData();\n const cols = this._engine.columnDefs();\n const minRow = Math.min(startRow, endRow);\n const maxRow = Math.max(startRow, endRow);\n const minCol = Math.min(startCol, endCol);\n const maxCol = Math.max(startCol, endCol);\n\n const lines: string[] = [];\n for (let r = minRow; r <= maxRow; r++) {\n const cells: string[] = [];\n for (let c = minCol; c <= maxCol; c++) {\n const colId = cols[c]?.id;\n const val = colId ? rows[r]?.cells[colId]?.value : null;\n cells.push(val == null ? '' : String(val));\n }\n lines.push(cells.join('\\t'));\n }\n return lines.join('\\n');\n }\n\n private _copyToTextarea(text: string): void {\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.position = 'fixed';\n ta.style.left = '-9999px';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n }\n}\n\nfunction parseClipboardValue(raw: string): CellValue {\n if (raw === '') return null;\n if (raw === 'TRUE') return true;\n if (raw === 'FALSE') return false;\n const num = Number(raw);\n if (!isNaN(num) && raw !== '') return num;\n return raw;\n}\n","import type { SpreadsheetPlugin } from './plugin.types';\nimport type { SpreadsheetEngine } from '../spreadsheet-engine';\nimport type { CellValue, RowDef } from '../models';\n\ninterface UndoEntry {\n readonly type: 'edit' | 'insert_rows' | 'delete_rows' | 'insert_cols' | 'delete_cols';\n readonly timestamp: number;\n /** For edit: row index + col id + old value. */\n readonly edits?: { rowIndex: number; colId: string; oldValue: CellValue; newValue: CellValue }[];\n /** For row/col insert/delete: the actual data that was removed or added. */\n readonly rows?: RowDef[];\n readonly rowIndex?: number;\n readonly colIds?: string[];\n readonly colWidths?: number[];\n}\n\n/**\n * UndoPlugin provides undo/redo by maintaining a history stack.\n * Captures snapshots before mutations.\n */\nexport class UndoPlugin implements SpreadsheetPlugin {\n readonly name = 'undo';\n readonly priority = 100;\n\n private _engine: SpreadsheetEngine | null = null;\n private _undoStack: UndoEntry[] = [];\n private _redoStack: UndoEntry[] = [];\n private _maxHistory = 100;\n\n onInit(engine: SpreadsheetEngine): void {\n this._engine = engine;\n }\n\n onDestroy(): void {\n this._undoStack = [];\n this._redoStack = [];\n }\n\n /** Record an edit mutation for undo. */\n recordEdit(rowIndex: number, colId: string, oldValue: CellValue, newValue: CellValue): void {\n this._push({\n type: 'edit',\n timestamp: Date.now(),\n edits: [{ rowIndex, colId, oldValue, newValue }],\n });\n }\n\n /** Record a bulk edit (multiple cells). */\n recordBulkEdit(\n edits: { rowIndex: number; colId: string; oldValue: CellValue; newValue: CellValue }[],\n ): void {\n if (edits.length === 0) return;\n this._push({ type: 'edit', timestamp: Date.now(), edits });\n }\n\n /** Undo the last mutation. */\n undo(): boolean {\n if (!this._engine || this._undoStack.length === 0) return false;\n const entry = this._undoStack.pop()!;\n this._applyUndo(entry);\n this._redoStack.push(entry);\n return true;\n }\n\n /** Redo the last undone mutation. */\n redo(): boolean {\n if (!this._engine || this._redoStack.length === 0) return false;\n const entry = this._redoStack.pop()!;\n this._applyRedo(entry);\n this._undoStack.push(entry);\n return true;\n }\n\n /** Whether undo is available. */\n get canUndo(): boolean {\n return this._undoStack.length > 0;\n }\n\n /** Whether redo is available. */\n get canRedo(): boolean {\n return this._redoStack.length > 0;\n }\n\n /** Clear all history. */\n clearHistory(): void {\n this._undoStack = [];\n this._redoStack = [];\n }\n\n private _push(entry: UndoEntry): void {\n this._undoStack.push(entry);\n if (this._undoStack.length > this._maxHistory) {\n this._undoStack.shift();\n }\n this._redoStack = [];\n }\n\n private _applyUndo(entry: UndoEntry): void {\n if (!this._engine) return;\n\n if (entry.type === 'edit' && entry.edits) {\n const rows = [...this._engine.rowData()];\n for (const edit of entry.edits) {\n if (rows[edit.rowIndex]) {\n rows[edit.rowIndex] = {\n ...rows[edit.rowIndex],\n cells: {\n ...rows[edit.rowIndex].cells,\n [edit.colId]: {\n value: edit.oldValue,\n meta: rows[edit.rowIndex].cells[edit.colId]?.meta,\n },\n },\n };\n }\n }\n this._engine.rowData.set(rows);\n } else if (entry.type === 'delete_rows' && entry.rows) {\n const rows = [...this._engine.rowData()];\n rows.splice(entry.rowIndex ?? 0, 0, ...entry.rows);\n this._engine.rowData.set(rows);\n } else if (entry.type === 'insert_rows' && entry.rowIndex != null) {\n const rows = [...this._engine.rowData()];\n rows.splice(entry.rowIndex, entry.rows?.length ?? 0);\n this._engine.rowData.set(rows);\n }\n }\n\n private _applyRedo(entry: UndoEntry): void {\n if (!this._engine) return;\n\n if (entry.type === 'edit' && entry.edits) {\n const rows = [...this._engine.rowData()];\n for (const edit of entry.edits) {\n if (rows[edit.rowIndex]) {\n rows[edit.rowIndex] = {\n ...rows[edit.rowIndex],\n cells: {\n ...rows[edit.rowIndex].cells,\n [edit.colId]: {\n value: edit.newValue,\n meta: rows[edit.rowIndex].cells[edit.colId]?.meta,\n },\n },\n };\n }\n }\n this._engine.rowData.set(rows);\n } else if (entry.type === 'insert_rows' && entry.rows) {\n const rows = [...this._engine.rowData()];\n rows.splice(entry.rowIndex ?? 0, 0, ...entry.rows);\n this._engine.rowData.set(rows);\n } else if (entry.type === 'delete_rows' && entry.rowIndex != null) {\n const rows = [...this._engine.rowData()];\n rows.splice(entry.rowIndex, entry.rows?.length ?? 0);\n this._engine.rowData.set(rows);\n }\n }\n}\n","import type { SpreadsheetPlugin } from './plugin.types';\nimport type { SpreadsheetEngine } from '../spreadsheet-engine';\nimport type { CellValue } from '../models';\n\n/** Validation rule applied to cells. */\nexport interface ValidationRule {\n readonly colId: string;\n readonly validator: (value: CellValue) => string | null;\n}\n\n/**\n * ValidationPlugin validates cell values against registered rules.\n */\nexport class ValidationPlugin implements SpreadsheetPlugin {\n readonly name = 'validation';\n readonly priority = 40;\n\n private _engine: SpreadsheetEngine | null = null;\n private _rules = new Map<string, (value: CellValue) => string | null>();\n\n onInit(engine: SpreadsheetEngine): void {\n this._engine = engine;\n }\n\n /** Register a validation rule for a column. */\n addRule(rule: ValidationRule): void {\n this._rules.set(rule.colId, rule.validator);\n }\n\n /** Remove a validation rule. */\n removeRule(colId: string): void {\n this._rules.delete(colId);\n }\n\n /** Validate a single cell value. Returns null if valid, error string if not. */\n validate(colId: string, value: CellValue): string | null {\n const rule = this._rules.get(colId);\n return rule ? rule(value) : null;\n }\n\n /** Validate all cells and return errors indexed by \"row:colId\". */\n validateAll(): Map<string, string[]> {\n const errors = new Map<string, string[]>();\n if (!this._engine) return errors;\n\n const rows = this._engine.rowData();\n const cols = this._engine.columnDefs();\n\n for (let r = 0; r < rows.length; r++) {\n for (const col of cols) {\n const val = rows[r].cells[col.id]?.value;\n const err = this.validate(col.id, val);\n if (err) {\n const key = `${r}:${col.id}`;\n errors.set(key, [err]);\n }\n }\n }\n\n return errors;\n }\n\n onBeforeEdit(_rowIndex: number, _colId: string): boolean {\n return true;\n }\n\n onAfterEdit(rowIndex: number, colId: string, _oldValue: unknown, newValue: unknown): void {\n const err = this.validate(colId, newValue as CellValue);\n if (err && this._engine) {\n const rows = [...this._engine.rowData()];\n const row = rows[rowIndex];\n if (row) {\n const cell = row.cells[colId];\n rows[rowIndex] = {\n ...row,\n cells: {\n ...row.cells,\n [colId]: {\n value: newValue as CellValue,\n meta: { ...cell?.meta, errors: [err], type: cell?.meta?.type ?? 'text' },\n },\n },\n };\n this._engine.rowData.set(rows);\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngxsmk-cdk.mjs
CHANGED
|
@@ -8,6 +8,11 @@ export * from '@ngxsmk/cdk/visually-hidden';
|
|
|
8
8
|
export * from '@ngxsmk/cdk/intersection-observer';
|
|
9
9
|
export * from '@ngxsmk/cdk/resize-observer';
|
|
10
10
|
export * from '@ngxsmk/cdk/autofocus';
|
|
11
|
+
export * from '@ngxsmk/cdk/cva-base';
|
|
12
|
+
export * from '@ngxsmk/cdk/listbox-keyboard';
|
|
13
|
+
export * from '@ngxsmk/cdk/scheduler';
|
|
14
|
+
export { ClipboardPlugin, FilterPlugin, FormulaPlugin, SortPlugin, SpreadsheetEngine, PluginHost as SpreadsheetPluginHost, SelectionPlugin as SpreadsheetSelectionPlugin, UndoPlugin, ValidationPlugin, cellRef, cellsInRange, cloneRow, colIndexToLetter, colLetterToIndex, createEmptyRow, formatCellValue, generateRowId, isCellInRange, normalizeRange, parseCellRef, pinnedWidth } from '@ngxsmk/cdk/spreadsheet';
|
|
15
|
+
export * from '@ngxsmk/cdk/input-group';
|
|
11
16
|
|
|
12
17
|
/*
|
|
13
18
|
* Public API Surface of @ngxsmk/cdk
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngxsmk-cdk.mjs","sources":["../../../../packages/cdk/public-api.ts","../../../../packages/cdk/ngxsmk-cdk.ts"],"sourcesContent":["/*\n * Public API Surface of @ngxsmk/cdk\n */\n\nexport * from '@ngxsmk/cdk/click-outside';\nexport * from '@ngxsmk/cdk/focusable';\nexport * from '@ngxsmk/cdk/focus-trap';\nexport * from '@ngxsmk/cdk/live-announcer';\nexport * from '@ngxsmk/cdk/media-query';\nexport * from '@ngxsmk/cdk/scroll-lock';\nexport * from '@ngxsmk/cdk/visually-hidden';\nexport * from '@ngxsmk/cdk/intersection-observer';\nexport * from '@ngxsmk/cdk/resize-observer';\nexport * from '@ngxsmk/cdk/autofocus';\n\n// NOTE: '@ngxsmk/cdk/testing' is intentionally NOT re-exported here. It pulls in\n// axe-core (a CommonJS dependency) which would otherwise leak into every runtime\n// bundle that imports the main '@ngxsmk/cdk' barrel. Import test helpers directly\n// from the dedicated entry point instead: `import { ... } from '@ngxsmk/cdk/testing'`.\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ngxsmk-cdk.mjs","sources":["../../../../packages/cdk/public-api.ts","../../../../packages/cdk/ngxsmk-cdk.ts"],"sourcesContent":["/*\n * Public API Surface of @ngxsmk/cdk\n */\n\nexport * from '@ngxsmk/cdk/click-outside';\nexport * from '@ngxsmk/cdk/focusable';\nexport * from '@ngxsmk/cdk/focus-trap';\nexport * from '@ngxsmk/cdk/live-announcer';\nexport * from '@ngxsmk/cdk/media-query';\nexport * from '@ngxsmk/cdk/scroll-lock';\nexport * from '@ngxsmk/cdk/visually-hidden';\nexport * from '@ngxsmk/cdk/intersection-observer';\nexport * from '@ngxsmk/cdk/resize-observer';\nexport * from '@ngxsmk/cdk/autofocus';\nexport * from '@ngxsmk/cdk/cva-base';\nexport * from '@ngxsmk/cdk/listbox-keyboard';\nexport * from '@ngxsmk/cdk/scheduler';\n\n// Spreadsheet — selective re-exports to avoid name collisions with scheduler\nexport {\n SpreadsheetEngine,\n type SpreadsheetConfig,\n type SpreadsheetDensity,\n type SpreadsheetLifecycleHooks,\n} from '@ngxsmk/cdk/spreadsheet';\nexport type {\n Cell,\n CellValue,\n CellType,\n CellMeta,\n CellEditState,\n CellAddress,\n CellRange,\n ColumnDef,\n ColumnState,\n SortDirection,\n ColumnWidthPreset,\n RowDef,\n RowData,\n SummaryRow,\n SelectionState as SpreadsheetSelectionState,\n SelectionMode,\n SortCriterion,\n SortState,\n FilterCriterion,\n FilterOperator,\n FilterState,\n FormulaNode,\n FormulaResult,\n FormulaDependency,\n FormulaFunction,\n} from '@ngxsmk/cdk/spreadsheet';\nexport {\n PluginHost as SpreadsheetPluginHost,\n SortPlugin,\n FilterPlugin,\n SelectionPlugin as SpreadsheetSelectionPlugin,\n FormulaPlugin,\n ClipboardPlugin,\n UndoPlugin,\n ValidationPlugin,\n type SpreadsheetPlugin,\n} from '@ngxsmk/cdk/spreadsheet';\nexport {\n colIndexToLetter,\n colLetterToIndex,\n cellRef,\n parseCellRef,\n normalizeRange,\n isCellInRange,\n cellsInRange,\n formatCellValue,\n createEmptyRow,\n generateRowId,\n cloneRow,\n pinnedWidth,\n} from '@ngxsmk/cdk/spreadsheet';\n\n// Input Group — no naming collisions, re-export everything\nexport * from '@ngxsmk/cdk/input-group';\n\n// NOTE: '@ngxsmk/cdk/testing' is intentionally NOT re-exported here. It pulls in\n// axe-core (a CommonJS dependency) which would otherwise leak into every runtime\n// bundle that imports the main '@ngxsmk/cdk' barrel. Import test helpers directly\n// from the dedicated entry point instead: `import { ... } from '@ngxsmk/cdk/testing'`.\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;AAEG;AA+EH;AACA;AACA;AACA;;ACpFA;;AAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/input-group/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { type WritableSignal, type Signal } from '@angular/core';
|
|
2
|
+
import type { InputGroupConfig, InputGroupAddon, InputGroupInputType, InputGroupVariant, InputGroupSize, InputGroupRadius, InputGroupDensity, ValidationStatus } from './models';
|
|
3
|
+
export interface InputGroupEngineConfig extends InputGroupConfig {
|
|
4
|
+
/** Initial value. */
|
|
5
|
+
initialValue?: string;
|
|
6
|
+
/** Async validator function. */
|
|
7
|
+
asyncValidator?: (value: string) => Promise<ValidationStatus>;
|
|
8
|
+
/** Sync validator function. */
|
|
9
|
+
validator?: (value: string) => {
|
|
10
|
+
status: ValidationStatus;
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
13
|
+
/** Debounce for async validation in ms. */
|
|
14
|
+
asyncDebounce?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* InputGroupEngine — headless, signal-based state machine for input group behaviour.
|
|
18
|
+
* Zero DOM, zero Angular template dependencies.
|
|
19
|
+
*/
|
|
20
|
+
export declare class InputGroupEngine {
|
|
21
|
+
readonly value: WritableSignal<string>;
|
|
22
|
+
readonly focused: WritableSignal<boolean>;
|
|
23
|
+
readonly hovered: WritableSignal<boolean>;
|
|
24
|
+
readonly touched: WritableSignal<boolean>;
|
|
25
|
+
readonly dirty: WritableSignal<boolean>;
|
|
26
|
+
readonly status: WritableSignal<ValidationStatus>;
|
|
27
|
+
readonly message: WritableSignal<string>;
|
|
28
|
+
readonly disabled: WritableSignal<boolean>;
|
|
29
|
+
readonly readonly: WritableSignal<boolean>;
|
|
30
|
+
readonly passwordVisible: WritableSignal<boolean>;
|
|
31
|
+
readonly loading: WritableSignal<boolean>;
|
|
32
|
+
readonly addons: WritableSignal<InputGroupAddon[]>;
|
|
33
|
+
readonly type: WritableSignal<InputGroupInputType>;
|
|
34
|
+
readonly variant: WritableSignal<InputGroupVariant>;
|
|
35
|
+
readonly size: WritableSignal<InputGroupSize>;
|
|
36
|
+
readonly radius: WritableSignal<InputGroupRadius>;
|
|
37
|
+
readonly density: WritableSignal<InputGroupDensity>;
|
|
38
|
+
readonly placeholder: WritableSignal<string>;
|
|
39
|
+
readonly label: WritableSignal<string>;
|
|
40
|
+
readonly hint: WritableSignal<string>;
|
|
41
|
+
readonly required: WritableSignal<boolean>;
|
|
42
|
+
readonly maxLength: WritableSignal<number>;
|
|
43
|
+
readonly minLength: WritableSignal<number>;
|
|
44
|
+
readonly showClear: WritableSignal<boolean>;
|
|
45
|
+
readonly showCounter: WritableSignal<boolean>;
|
|
46
|
+
readonly fullWidth: WritableSignal<boolean>;
|
|
47
|
+
readonly floatingLabel: WritableSignal<boolean>;
|
|
48
|
+
readonly charCount: Signal<number>;
|
|
49
|
+
readonly hasContent: Signal<boolean>;
|
|
50
|
+
readonly isActive: Signal<boolean>;
|
|
51
|
+
readonly isOverLength: Signal<boolean>;
|
|
52
|
+
readonly isUnderLength: Signal<boolean>;
|
|
53
|
+
readonly hasError: Signal<boolean>;
|
|
54
|
+
readonly hasSuccess: Signal<boolean>;
|
|
55
|
+
readonly hasWarning: Signal<boolean>;
|
|
56
|
+
readonly isInvalid: Signal<boolean>;
|
|
57
|
+
readonly showPlaceholder: Signal<boolean>;
|
|
58
|
+
readonly shouldFloat: Signal<boolean>;
|
|
59
|
+
readonly leadingAddons: Signal<InputGroupAddon[]>;
|
|
60
|
+
readonly trailingAddons: Signal<InputGroupAddon[]>;
|
|
61
|
+
readonly hasLeading: Signal<boolean>;
|
|
62
|
+
readonly hasTrailing: Signal<boolean>;
|
|
63
|
+
readonly inputType: Signal<InputGroupInputType>;
|
|
64
|
+
readonly onFocus: WritableSignal<() => void>;
|
|
65
|
+
readonly onBlur: WritableSignal<() => void>;
|
|
66
|
+
readonly onChange: WritableSignal<(value: string) => void>;
|
|
67
|
+
readonly onClear: WritableSignal<() => void>;
|
|
68
|
+
readonly onValidationChange: WritableSignal<(status: ValidationStatus, message: string) => void>;
|
|
69
|
+
private _config;
|
|
70
|
+
private _asyncTimer;
|
|
71
|
+
constructor(config?: InputGroupEngineConfig);
|
|
72
|
+
setValue(value: string): void;
|
|
73
|
+
clear(): void;
|
|
74
|
+
getValue(): string;
|
|
75
|
+
focus(): void;
|
|
76
|
+
blur(): void;
|
|
77
|
+
togglePasswordVisibility(): void;
|
|
78
|
+
showLoading(): void;
|
|
79
|
+
hideLoading(): void;
|
|
80
|
+
addAddon(addon: InputGroupAddon): void;
|
|
81
|
+
removeAddon(id: string): void;
|
|
82
|
+
setStatus(status: ValidationStatus, message?: string): void;
|
|
83
|
+
private _runValidation;
|
|
84
|
+
reset(): void;
|
|
85
|
+
enable(): void;
|
|
86
|
+
disable(): void;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=input-group-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-group-engine.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/input-group/input-group-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D,+BAA+B;IAC/B,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;QAAE,MAAM,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAE3B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,OAAO,0BAAiB;IACjC,QAAQ,CAAC,OAAO,0BAAiB;IACjC,QAAQ,CAAC,OAAO,0BAAiB;IACjC,QAAQ,CAAC,KAAK,0BAAiB;IAC/B,QAAQ,CAAC,MAAM,mCAAoC;IACnD,QAAQ,CAAC,OAAO,yBAAc;IAC9B,QAAQ,CAAC,QAAQ,0BAAiB;IAClC,QAAQ,CAAC,QAAQ,0BAAiB;IAClC,QAAQ,CAAC,eAAe,0BAAiB;IACzC,QAAQ,CAAC,OAAO,0BAAiB;IACjC,QAAQ,CAAC,MAAM,oCAAiC;IAGhD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,QAAQ,CAAC,WAAW,yBAAc;IAClC,QAAQ,CAAC,KAAK,yBAAc;IAC5B,QAAQ,CAAC,IAAI,yBAAc;IAC3B,QAAQ,CAAC,QAAQ,0BAAiB;IAClC,QAAQ,CAAC,SAAS,yBAAyC;IAC3D,QAAQ,CAAC,SAAS,yBAAyC;IAC3D,QAAQ,CAAC,SAAS,0BAAiB;IACnC,QAAQ,CAAC,WAAW,0BAAiB;IACrC,QAAQ,CAAC,SAAS,0BAAgB;IAClC,QAAQ,CAAC,aAAa,0BAAiB;IAGvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IAClD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAGhD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IAEjG,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAA8C;gBAErD,MAAM,GAAE,sBAA2B;IA8F/C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO7B,KAAK,IAAI,IAAI;IAKb,QAAQ,IAAI,MAAM;IAMlB,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IASZ,wBAAwB,IAAI,IAAI;IAMhC,WAAW,IAAI,IAAI;IAInB,WAAW,IAAI,IAAI;IAMnB,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAItC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAM7B,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,SAAK,GAAG,IAAI;IAMvD,OAAO,CAAC,cAAc;IAsDtB,KAAK,IAAI,IAAI;IAYb,MAAM,IAAI,IAAI;IAId,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/input-group/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/** Supported HTML input types that the group can wrap. */
|
|
2
|
+
export type InputGroupInputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url' | 'date' | 'time' | 'datetime-local' | 'color' | 'file';
|
|
3
|
+
/** Visual variant of the input group container. */
|
|
4
|
+
export type InputGroupVariant = 'outlined' | 'filled' | 'soft' | 'ghost' | 'underline';
|
|
5
|
+
/** Size preset controlling height, padding, and font size. */
|
|
6
|
+
export type InputGroupSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
7
|
+
/** Corner radius preset. */
|
|
8
|
+
export type InputGroupRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'pill';
|
|
9
|
+
/** Density preset controlling spacing. */
|
|
10
|
+
export type InputGroupDensity = 'compact' | 'comfortable' | 'spacious';
|
|
11
|
+
/** Validation status displayed on the group. */
|
|
12
|
+
export type ValidationStatus = 'error' | 'warning' | 'success' | 'info' | 'pending' | 'none';
|
|
13
|
+
/** Position of an add-on element. */
|
|
14
|
+
export type AddonPosition = 'leading' | 'trailing';
|
|
15
|
+
/** Content type for an add-on slot. */
|
|
16
|
+
export type AddonContentType = 'text' | 'icon' | 'button' | 'avatar' | 'badge' | 'chip' | 'toggle' | 'spinner' | 'custom';
|
|
17
|
+
/** Configuration for a single add-on element. */
|
|
18
|
+
export interface InputGroupAddon {
|
|
19
|
+
/** Unique key for tracking. */
|
|
20
|
+
readonly id: string;
|
|
21
|
+
/** Position: leading or trailing. */
|
|
22
|
+
readonly position: AddonPosition;
|
|
23
|
+
/** What kind of content this add-on holds. */
|
|
24
|
+
readonly contentType: AddonContentType;
|
|
25
|
+
/** Text content (when contentType is 'text'). */
|
|
26
|
+
readonly text?: string;
|
|
27
|
+
/** Icon name or SVG path (when contentType is 'icon'). */
|
|
28
|
+
readonly icon?: string;
|
|
29
|
+
/** Whether this add-on is interactive (clickable). */
|
|
30
|
+
readonly interactive?: boolean;
|
|
31
|
+
/** Whether this add-on is disabled. */
|
|
32
|
+
readonly disabled?: boolean;
|
|
33
|
+
/** Custom CSS class applied to the add-on element. */
|
|
34
|
+
readonly className?: string;
|
|
35
|
+
/** ARIA label for the add-on. */
|
|
36
|
+
readonly ariaLabel?: string;
|
|
37
|
+
/** Tooltip text for the add-on. */
|
|
38
|
+
readonly tooltip?: string;
|
|
39
|
+
/** Template key for custom rendering. */
|
|
40
|
+
readonly templateKey?: string;
|
|
41
|
+
}
|
|
42
|
+
/** Full configuration for the input group. */
|
|
43
|
+
export interface InputGroupConfig {
|
|
44
|
+
/** HTML input type. */
|
|
45
|
+
type?: InputGroupInputType;
|
|
46
|
+
/** Visual variant. */
|
|
47
|
+
variant?: InputGroupVariant;
|
|
48
|
+
/** Size. */
|
|
49
|
+
size?: InputGroupSize;
|
|
50
|
+
/** Corner radius. */
|
|
51
|
+
radius?: InputGroupRadius;
|
|
52
|
+
/** Density. */
|
|
53
|
+
density?: InputGroupDensity;
|
|
54
|
+
/** Whether the entire group is disabled. */
|
|
55
|
+
disabled?: boolean;
|
|
56
|
+
/** Whether the input is read-only. */
|
|
57
|
+
readonly?: boolean;
|
|
58
|
+
/** Placeholder text. */
|
|
59
|
+
placeholder?: string;
|
|
60
|
+
/** Label text (can also be provided via template). */
|
|
61
|
+
label?: string;
|
|
62
|
+
/** Hint text below the input. */
|
|
63
|
+
hint?: string;
|
|
64
|
+
/** Whether the input is required. */
|
|
65
|
+
required?: boolean;
|
|
66
|
+
/** Maximum character length. */
|
|
67
|
+
maxLength?: number;
|
|
68
|
+
/** Minimum character length. */
|
|
69
|
+
minLength?: number;
|
|
70
|
+
/** Whether to show a clear button. */
|
|
71
|
+
showClear?: boolean;
|
|
72
|
+
/** Whether to show a character counter. */
|
|
73
|
+
showCounter?: boolean;
|
|
74
|
+
/** Whether the input takes full width. */
|
|
75
|
+
fullWidth?: boolean;
|
|
76
|
+
/** Whether the input is loading. */
|
|
77
|
+
loading?: boolean;
|
|
78
|
+
/** Whether the input group supports RTL. */
|
|
79
|
+
rtl?: boolean;
|
|
80
|
+
/** Floating label mode. */
|
|
81
|
+
floatingLabel?: boolean;
|
|
82
|
+
}
|
|
83
|
+
/** Runtime state tracked by the engine. */
|
|
84
|
+
export interface InputGroupState {
|
|
85
|
+
/** Current value. */
|
|
86
|
+
readonly value: string;
|
|
87
|
+
/** Whether the input has focus. */
|
|
88
|
+
readonly focused: boolean;
|
|
89
|
+
/** Whether the mouse is hovering. */
|
|
90
|
+
readonly hovered: boolean;
|
|
91
|
+
/** Whether the value has been touched (blurred at least once). */
|
|
92
|
+
readonly touched: boolean;
|
|
93
|
+
/** Whether the value has been modified from initial. */
|
|
94
|
+
readonly dirty: boolean;
|
|
95
|
+
/** Current validation status. */
|
|
96
|
+
readonly status: ValidationStatus;
|
|
97
|
+
/** Validation message text. */
|
|
98
|
+
readonly message: string;
|
|
99
|
+
/** Whether the input is disabled. */
|
|
100
|
+
readonly disabled: boolean;
|
|
101
|
+
/** Whether the input is read-only. */
|
|
102
|
+
readonly readonly: boolean;
|
|
103
|
+
/** Whether the password is currently visible (reveal toggle). */
|
|
104
|
+
readonly passwordVisible: boolean;
|
|
105
|
+
/** Whether the loading indicator is showing. */
|
|
106
|
+
readonly loading: boolean;
|
|
107
|
+
/** Current character count. */
|
|
108
|
+
readonly charCount: number;
|
|
109
|
+
/** Registered add-ons. */
|
|
110
|
+
readonly addons: readonly InputGroupAddon[];
|
|
111
|
+
/** Whether the input has content (for floating label positioning). */
|
|
112
|
+
readonly hasContent: boolean;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=input-group.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-group.model.d.ts","sourceRoot":"","sources":["../../../../../packages/cdk/input-group/models/input-group.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngxsmk-cdk-input-group.d.ts","sourceRoot":"","sources":["../../../../packages/cdk/input-group/ngxsmk-cdk-input-group.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,SAAS,CAAC"}
|