y11n-spreadsheet 1.0.1 → 1.0.2

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/dist/types.d.ts CHANGED
@@ -1,117 +1,198 @@
1
1
  /**
2
- * Coordinate System
3
- * Zero-indexed (0,0 is A1)
2
+ * A zero-indexed cell coordinate.
3
+ * (0, 0) corresponds to cell A1.
4
4
  */
5
5
  export interface CellCoord {
6
+ /** 0-indexed row number (0 = row 1) */
6
7
  row: number;
8
+ /** 0-indexed column number (0 = column A) */
7
9
  col: number;
8
10
  }
9
11
  /**
10
- * Cell-level formatting options
12
+ * Cell-level formatting options.
13
+ * All properties are optional; only set properties are applied.
11
14
  */
12
15
  export interface CellFormat {
16
+ /** Whether the cell text is bold */
13
17
  bold?: boolean;
18
+ /** Whether the cell text is italic */
14
19
  italic?: boolean;
20
+ /** Whether the cell text is underlined */
15
21
  underline?: boolean;
22
+ /** Whether the cell text has a strikethrough */
16
23
  strikethrough?: boolean;
24
+ /** CSS color string for text (e.g. "#ff0000", "red") */
17
25
  textColor?: string;
26
+ /** CSS color string for cell background */
18
27
  backgroundColor?: string;
28
+ /** Horizontal text alignment */
19
29
  textAlign?: 'left' | 'center' | 'right';
30
+ /** Font size in pixels */
20
31
  fontSize?: number;
32
+ /** Numeric display format (e.g. currency, percent) */
33
+ numberFormat?: NumberFormatOptions;
34
+ }
35
+ /** Available preset number format types */
36
+ export type NumberFormatType = 'number' | 'currency' | 'percent' | 'scientific';
37
+ /** Options for number formatting */
38
+ export interface NumberFormatOptions {
39
+ type: NumberFormatType;
40
+ /** Number of decimal places (default: 2) */
41
+ decimals?: number;
42
+ /** Currency symbol (default: '$'), only used when type is 'currency' */
43
+ currencySymbol?: string;
44
+ /** Whether to use thousands separators (default: true for 'number' and 'currency') */
45
+ thousandsSep?: boolean;
21
46
  }
22
47
  /**
23
- * Data Structure for a Single Cell
48
+ * Data for a single cell in the grid.
24
49
  */
25
50
  export interface CellData {
51
+ /** The raw user-entered value (may be a formula starting with "=") */
26
52
  rawValue: string;
53
+ /** The computed display string shown in the cell */
27
54
  displayValue: string;
55
+ /** The resolved data type after evaluation */
28
56
  type: 'text' | 'number' | 'boolean' | 'error';
57
+ /** Optional visual formatting applied to the cell */
29
58
  format?: CellFormat;
30
59
  }
31
60
  /**
32
- * The Sparse Data Map
33
- * Key format: "${row}:${col}" (e.g., "0:0")
61
+ * Sparse data map for the entire grid.
62
+ * Keys use the format `"${row}:${col}"` (e.g. `"0:0"` for A1, `"2:3"` for D3).
63
+ * Only cells with content are stored; absent keys represent empty cells.
34
64
  */
35
65
  export type GridData = Map<string, CellData>;
36
66
  /**
37
- * Selection Range (normalized bounding box)
67
+ * A normalized rectangular selection range.
68
+ * `start` is always the top-left corner; `end` is always the bottom-right.
38
69
  */
39
70
  export interface SelectionRange {
71
+ /** Top-left corner of the selection (minimum row and column) */
40
72
  start: CellCoord;
73
+ /** Bottom-right corner of the selection (maximum row and column) */
41
74
  end: CellCoord;
42
75
  }
43
76
  /**
44
- * Formula Context
45
- * Passed to custom functions to allow them to access the grid
77
+ * Context object passed to custom formula functions, providing access to grid data.
46
78
  */
47
79
  export interface FormulaContext {
80
+ /** Retrieve the evaluated value of a single cell by reference (e.g. "A1"). */
48
81
  getCellValue: (ref: string) => unknown;
82
+ /** Retrieve a flat array of values for a rectangular range (e.g. "A1", "B5"). */
49
83
  getRangeValues: (start: string, end: string) => unknown[];
50
84
  }
51
85
  /**
52
- * A formula function that receives a context and arguments
86
+ * Signature for user-defined formula functions.
87
+ *
88
+ * @param ctx - Provides access to cell/range values from the grid.
89
+ * @param args - Variadic evaluated arguments passed to the function in the formula.
90
+ * @returns The computed result (number, string, boolean, or error string).
53
91
  */
54
92
  export type FormulaFunction = (ctx: FormulaContext, ...args: unknown[]) => unknown;
55
93
  /**
56
- * Cell change event detail
94
+ * Detail for the `cell-change` event, fired when a single cell is edited.
57
95
  */
58
96
  export interface CellChangeDetail {
97
+ /** Cell key in `"row:col"` format */
59
98
  cellId: string;
99
+ /** New raw value of the cell */
60
100
  value: string;
101
+ /** Previous raw value of the cell */
61
102
  oldValue: string;
62
103
  }
63
104
  /**
64
- * Selection change event detail
105
+ * Detail for the `selection-change` event, fired when the selected range changes.
65
106
  */
66
107
  export interface SelectionChangeDetail {
108
+ /** The current normalized selection range */
67
109
  range: SelectionRange;
68
110
  }
69
111
  /**
70
- * Data change event detail (bulk updates)
112
+ * Detail for the `data-change` event, fired on bulk updates (paste, cut, clear, undo/redo).
71
113
  */
72
114
  export interface DataChangeDetail {
115
+ /** Array of cell updates, each with a cell key and new raw value */
73
116
  updates: Array<{
74
117
  id: string;
75
118
  value: string;
76
119
  }>;
120
+ /** What triggered the change */
77
121
  source?: 'user' | 'undo' | 'redo' | 'programmatic';
122
+ /** The type of operation that caused the change */
78
123
  operation?: 'edit' | 'cut' | 'paste' | 'clear' | 'format';
79
124
  }
80
125
  /**
81
- * Format change event detail
126
+ * Detail for the `format-change` event, fired when cell formatting is modified.
82
127
  */
83
128
  export interface FormatChangeDetail {
129
+ /** Cell keys that were affected */
84
130
  cellIds: string[];
131
+ /** The format properties that were applied (empty object for clear) */
85
132
  format: CellFormat;
133
+ /** What triggered the format change */
86
134
  source: 'user' | 'undo' | 'redo' | 'programmatic';
87
135
  }
88
136
  /**
89
- * Shallow-compare two CellFormat objects (key-order independent)
137
+ * Compare two CellFormat objects for deep equality (key-order independent).
138
+ * Deep-compares the `numberFormat` sub-object.
139
+ *
140
+ * @param a - First format (or undefined)
141
+ * @param b - Second format (or undefined)
142
+ * @returns `true` if both formats are structurally equal
90
143
  */
91
144
  export declare function formatsEqual(a: CellFormat | undefined, b: CellFormat | undefined): boolean;
92
145
  /**
93
- * Creates a cell key from row and col indices
146
+ * Format a numeric value according to the given number format options.
147
+ *
148
+ * @param value - The numeric value to format
149
+ * @param opts - Formatting options (type, decimals, currency symbol, thousands separator)
150
+ * @returns The formatted string representation
151
+ */
152
+ export declare function formatNumber(value: number, opts: NumberFormatOptions): string;
153
+ /**
154
+ * Creates a cell key string from row and column indices.
155
+ *
156
+ * @param row - 0-indexed row number
157
+ * @param col - 0-indexed column number
158
+ * @returns A key in `"row:col"` format (e.g. `"0:0"`)
94
159
  */
95
160
  export declare function cellKey(row: number, col: number): string;
96
161
  /**
97
- * Parse a cell key back to coordinates
162
+ * Parse a cell key string back to row/col coordinates.
163
+ *
164
+ * @param key - A key in `"row:col"` format (e.g. `"0:0"`)
165
+ * @returns The parsed coordinate
98
166
  */
99
167
  export declare function parseKey(key: string): CellCoord;
100
168
  /**
101
- * Convert a column index (0-based) to a letter (A, B, ... Z, AA, AB...)
169
+ * Convert a 0-based column index to a column letter (A, B, ... Z, AA, AB...).
170
+ *
171
+ * @param col - 0-indexed column number
172
+ * @returns The column letter(s) (e.g. 0 -> "A", 25 -> "Z", 26 -> "AA")
102
173
  */
103
174
  export declare function colToLetter(col: number): string;
104
175
  /**
105
- * Convert a column letter (A, B, ... Z, AA, AB...) to 0-based index
176
+ * Convert a column letter (A, B, ... Z, AA, AB...) to a 0-based index.
177
+ *
178
+ * @param letter - Column letter(s) (e.g. "A", "Z", "AA")
179
+ * @returns 0-indexed column number (e.g. "A" -> 0, "Z" -> 25, "AA" -> 26)
106
180
  */
107
181
  export declare function letterToCol(letter: string): number;
108
182
  /**
109
- * Convert a cell reference like "A1" to a CellCoord
110
- * Supports absolute/mixed references: $A$1, $A1, A$1
183
+ * Convert a cell reference string to a CellCoord.
184
+ * Supports absolute/mixed references: `$A$1`, `$A1`, `A$1`.
185
+ *
186
+ * @param ref - Cell reference (e.g. "A1", "$B$3")
187
+ * @returns The 0-indexed coordinate
188
+ * @throws {Error} If the reference format is invalid
111
189
  */
112
190
  export declare function refToCoord(ref: string): CellCoord;
113
191
  /**
114
- * Convert a CellCoord to a cell reference like "A1"
192
+ * Convert a CellCoord to a cell reference string like "A1".
193
+ *
194
+ * @param coord - The 0-indexed coordinate
195
+ * @returns Cell reference string (e.g. `{row: 0, col: 0}` -> "A1")
115
196
  */
116
197
  export declare function coordToRef(coord: CellCoord): string;
117
198
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -2,20 +2,41 @@ import { LitElement } from 'lit';
2
2
  import { type CellFormat, type GridData, type SelectionRange, type FormulaFunction } from './types.js';
3
3
  import './components/y11n-formula-bar.js';
4
4
  /**
5
- * <y11n-spreadsheet> - An accessible spreadsheet web component.
5
+ * `<y11n-spreadsheet>` -- An accessible spreadsheet web component.
6
6
  *
7
- * Implements the WAI-ARIA Grid pattern with roving tabindex,
8
- * keyboard navigation, formula support, and clipboard operations.
7
+ * Implements the WAI-ARIA Grid pattern with:
8
+ * - Roving tabindex and full keyboard navigation (arrows, Tab, Home/End, Ctrl+arrows)
9
+ * - Recursive-descent formula engine (`=SUM(A1:B5)`, `=IF(...)`, etc.)
10
+ * - Copy/cut/paste via the Clipboard API (HTML table + TSV formats)
11
+ * - Undo/redo command history (up to 100 entries)
12
+ * - Virtual rendering for large grids (only visible cells + buffer are in the DOM)
13
+ * - Cell formatting (bold, italic, colors, number formats, etc.)
14
+ *
15
+ * @fires cell-change - When a single cell value is edited
16
+ * @fires selection-change - When the selected range changes
17
+ * @fires data-change - On bulk updates (paste, cut, clear, undo/redo)
18
+ * @fires format-change - When cell formatting is modified
19
+ *
20
+ * @csspart editor - The inline cell editor input element
9
21
  */
10
22
  export declare class Y11nSpreadsheet extends LitElement {
23
+ /** Number of rows in the grid. Default: 100 */
11
24
  rows: number;
25
+ /** Number of columns in the grid. Default: 26 */
12
26
  cols: number;
27
+ /** The sparse grid data map. Set externally or via `setData()`. */
13
28
  data: GridData;
29
+ /** When true, all editing is disabled. Default: false */
14
30
  readOnly: boolean;
31
+ /** Accessible label for the grid. Default: 'Spreadsheet' */
32
+ gridLabel: string;
33
+ /** Record of custom formula functions to register, keyed by name. */
15
34
  functions: Record<string, FormulaFunction>;
16
35
  private _isEditing;
17
36
  private _editValue;
18
37
  private _formulaBarMode;
38
+ /** When true, the next render should reposition the editor cursor (set on edit start / ref mode) */
39
+ private _editorNeedsCursorReset;
19
40
  /** Whether arrow keys are currently selecting a cell reference in a formula */
20
41
  private _refMode;
21
42
  /** Screen reader announcement text for mode changes */
@@ -30,6 +51,7 @@ export declare class Y11nSpreadsheet extends LitElement {
30
51
  private _clipboardManager;
31
52
  /** Internal data store - we keep a separate mutable copy */
32
53
  private _internalData;
54
+ private _lastSyncedDataRef;
33
55
  /** Track which cell started editing for commit logic */
34
56
  private _editingCellKey;
35
57
  private _undoStack;
@@ -41,25 +63,73 @@ export declare class Y11nSpreadsheet extends LitElement {
41
63
  /** Start/end positions of the reference text within the formula string */
42
64
  private _refInsertStart;
43
65
  private _refInsertEnd;
44
- connectedCallback(): void;
66
+ /** Whether an async paste operation is currently in progress */
67
+ private _pasteInProgress;
68
+ /** Number of cells to process per animation frame during large pastes */
69
+ private static readonly PASTE_CHUNK_SIZE;
70
+ private static readonly INITIAL_VIEW_ROWS;
71
+ private static readonly INITIAL_VIEW_COLS;
72
+ private static readonly ROW_HEADER_WIDTH;
45
73
  willUpdate(changedProps: Map<string, unknown>): void;
46
- /** Returns the current state of the grid data */
74
+ /**
75
+ * Returns a shallow copy of the current grid data.
76
+ *
77
+ * @returns A new Map containing all cell data
78
+ */
47
79
  getData(): GridData;
48
- /** Hard reset of the grid data */
80
+ /**
81
+ * Replaces the entire grid data and resets undo/redo history.
82
+ *
83
+ * @param data - The new sparse grid data map
84
+ */
49
85
  setData(data: GridData): void;
50
- /** Dynamically register a formula function */
86
+ /**
87
+ * Register a custom formula function at runtime.
88
+ * Triggers a full recalculation of all formulas.
89
+ *
90
+ * @param name - Function name (will be uppercased for lookup)
91
+ * @param fn - The function implementation
92
+ */
51
93
  registerFunction(name: string, fn: FormulaFunction): void;
52
- /** Returns the format for a cell, or undefined if unformatted */
94
+ /**
95
+ * Returns the format for a cell, or undefined if unformatted.
96
+ *
97
+ * @param cellId - Cell key in `"row:col"` format
98
+ * @returns The cell's format, or undefined
99
+ */
53
100
  getCellFormat(cellId: string): CellFormat | undefined;
54
- /** Merges format into a cell (creates cell if needed). Pass undefined to unset a property. */
101
+ /**
102
+ * Merges format properties into a cell. Creates the cell if it does not exist.
103
+ *
104
+ * @param cellId - Cell key in `"row:col"` format
105
+ * @param format - Format properties to merge
106
+ */
55
107
  setCellFormat(cellId: string, format: CellFormat): void;
56
- /** Applies format to all cells in a range (creates empty cells if needed) */
108
+ /**
109
+ * Applies format to all cells in a rectangular range.
110
+ *
111
+ * @param range - The selection range to format
112
+ * @param format - Format properties to apply
113
+ */
57
114
  setRangeFormat(range: SelectionRange, format: CellFormat): void;
58
- /** Removes all formatting from a cell */
115
+ /**
116
+ * Removes all formatting from a single cell.
117
+ *
118
+ * @param cellId - Cell key in `"row:col"` format
119
+ */
59
120
  clearCellFormat(cellId: string): void;
60
- /** Removes all formatting from a range */
121
+ /**
122
+ * Removes all formatting from every cell in a range.
123
+ *
124
+ * @param range - The selection range to clear formatting from
125
+ */
61
126
  clearRangeFormat(range: SelectionRange): void;
62
- /** Toggles a boolean format property on the current selection */
127
+ /**
128
+ * Toggles a boolean format property on the current selection.
129
+ * If all selected cells have the property set, it is removed; otherwise it is applied to all.
130
+ *
131
+ * @param prop - The boolean format property to toggle
132
+ */
63
133
  toggleFormat(prop: 'bold' | 'italic' | 'underline' | 'strikethrough'): void;
64
134
  private _applyFormat;
65
135
  private _clearFormat;
@@ -69,6 +139,12 @@ export declare class Y11nSpreadsheet extends LitElement {
69
139
  private _syncData;
70
140
  private _recalcAll;
71
141
  private _recalcAffected;
142
+ /** Re-apply number formatting to all cells that have a numberFormat */
143
+ private _reapplyNumberFormats;
144
+ /** Re-apply number formatting only to the given set of cell keys */
145
+ private _applyNumberFormatsToKeys;
146
+ /** Apply number formatting to a single cell using rawValue for robustness */
147
+ private _applyNumberFormatToCell;
72
148
  private _getCell;
73
149
  private _getCellDisplay;
74
150
  private _getCellRaw;
@@ -117,11 +193,18 @@ export declare class Y11nSpreadsheet extends LitElement {
117
193
  private _focusActiveCell;
118
194
  private _handleGridKeydown;
119
195
  private _handleEditorKeydown;
196
+ private _handleSelectAll;
197
+ private _handleCornerKeydown;
120
198
  private _handleCellPointerDown;
121
199
  private _handleCellDblClick;
122
200
  private _handleCopy;
123
201
  private _handleCut;
124
202
  private _handlePaste;
203
+ /**
204
+ * Apply a command batch progressively in chunks, yielding to the event loop
205
+ * between chunks via requestAnimationFrame to keep the UI responsive.
206
+ */
207
+ private _applyBatchProgressive;
125
208
  private _clearSelectedCells;
126
209
  private _handleScroll;
127
210
  private _handleEditorInput;
@@ -137,12 +220,15 @@ export declare class Y11nSpreadsheet extends LitElement {
137
220
  * We add a buffer of extra rows/cols for smooth scrolling.
138
221
  */
139
222
  private _getVisibleRange;
223
+ private _ensureCellVisible;
140
224
  private _getCSSVarPx;
141
225
  private _getEditorStyle;
142
226
  static styles: import("lit").CSSResult;
143
227
  protected render(): import("lit-html").TemplateResult<1>;
228
+ private _renderColumnSpacer;
144
229
  private _renderHeaderRow;
145
230
  private _renderRows;
231
+ private _renderCell;
146
232
  private _renderRow;
147
233
  private _getAnnouncement;
148
234
  protected updated(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"y11n-spreadsheet.d.ts","sourceRoot":"","sources":["../src/y11n-spreadsheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"y11n-spreadsheet.d.ts","sourceRoot":"","sources":["../src/y11n-spreadsheet.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "y11n-spreadsheet",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Accessible spreadsheet web component built with Lit 3.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -53,18 +53,17 @@
53
53
  "lit": "^3.0.0"
54
54
  },
55
55
  "devDependencies": {
56
- "lit": "^3.0.0",
57
- "@playwright/test": "^1.56.1",
58
- "@storybook/addon-essentials": "^8.6.17",
59
- "@storybook/blocks": "^8.6.17",
60
- "@storybook/manager-api": "^8.6.17",
61
- "@storybook/test": "8.6.17",
62
- "@storybook/web-components": "^8.6.17",
63
- "@storybook/web-components-vite": "^8.6.17",
64
- "jsdom": "^28.1.0",
65
- "storybook": "^8.6.17",
66
- "typescript": "^5.3.0",
67
- "vite": "^5.0.0",
68
- "vitest": "^4.0.18"
56
+ "@axe-core/playwright": "^4.14.0",
57
+ "@playwright/test": "^1.65.0",
58
+ "@storybook/addon-a11y": "^10.6.6",
59
+ "@storybook/addon-docs": "^10.6.6",
60
+ "@storybook/web-components": "^10.6.6",
61
+ "@storybook/web-components-vite": "^10.6.6",
62
+ "jsdom": "^31.0.0",
63
+ "lit": "^3.3.3",
64
+ "storybook": "^10.6.6",
65
+ "typescript": "^7.0.2",
66
+ "vite": "^8.3.6",
67
+ "vitest": "^5.1.0"
69
68
  }
70
69
  }