y11n-spreadsheet 1.0.2 → 1.1.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/dist/types.d.ts CHANGED
@@ -27,13 +27,25 @@ export interface CellFormat {
27
27
  backgroundColor?: string;
28
28
  /** Horizontal text alignment */
29
29
  textAlign?: 'left' | 'center' | 'right';
30
+ /** Vertical text alignment within the cell (default: middle) */
31
+ verticalAlign?: 'top' | 'middle' | 'bottom';
32
+ /**
33
+ * Wrap long text onto multiple lines instead of truncating it with an
34
+ * ellipsis. Rows keep their fixed height (`--ls-cell-height`), so only the
35
+ * lines that fit are visible.
36
+ */
37
+ wrap?: boolean;
30
38
  /** Font size in pixels */
31
39
  fontSize?: number;
32
40
  /** Numeric display format (e.g. currency, percent) */
33
41
  numberFormat?: NumberFormatOptions;
34
42
  }
35
- /** Available preset number format types */
36
- export type NumberFormatType = 'number' | 'currency' | 'percent' | 'scientific';
43
+ /**
44
+ * Available preset number format types. `date` renders a date serial number
45
+ * (days since 1899-12-30, as returned by `DATE()`, `TODAY()` and `NOW()`)
46
+ * using `datePattern`.
47
+ */
48
+ export type NumberFormatType = 'number' | 'currency' | 'percent' | 'scientific' | 'date';
37
49
  /** Options for number formatting */
38
50
  export interface NumberFormatOptions {
39
51
  type: NumberFormatType;
@@ -43,6 +55,12 @@ export interface NumberFormatOptions {
43
55
  currencySymbol?: string;
44
56
  /** Whether to use thousands separators (default: true for 'number' and 'currency') */
45
57
  thousandsSep?: boolean;
58
+ /**
59
+ * Pattern for the 'date' type (default: `'YYYY-MM-DD'`). Tokens: `YYYY`, `YY`,
60
+ * `MM`, `M`, `DD`, `D`, `HH`, `H`, `mm`, `ss`. Other characters are literal,
61
+ * e.g. `'DD/MM/YYYY'` or `'YYYY-MM-DD HH:mm'`.
62
+ */
63
+ datePattern?: string;
46
64
  }
47
65
  /**
48
66
  * Data for a single cell in the grid.
@@ -120,7 +138,7 @@ export interface DataChangeDetail {
120
138
  /** What triggered the change */
121
139
  source?: 'user' | 'undo' | 'redo' | 'programmatic';
122
140
  /** The type of operation that caused the change */
123
- operation?: 'edit' | 'cut' | 'paste' | 'clear' | 'format';
141
+ operation?: 'edit' | 'cut' | 'paste' | 'clear' | 'format' | 'fill' | 'import';
124
142
  }
125
143
  /**
126
144
  * Detail for the `format-change` event, fired when cell formatting is modified.
@@ -150,6 +168,29 @@ export declare function formatsEqual(a: CellFormat | undefined, b: CellFormat |
150
168
  * @returns The formatted string representation
151
169
  */
152
170
  export declare function formatNumber(value: number, opts: NumberFormatOptions): string;
171
+ /**
172
+ * Convert a date serial number (days since 1899-12-30; the fraction is the
173
+ * time of day) to a `Date` whose UTC fields hold the wall-clock date and time.
174
+ * Read it with `getUTCFullYear()`, `getUTCHours()`, etc.
175
+ *
176
+ * @param serial - Date serial number
177
+ * @returns The corresponding date, truncated to the second
178
+ */
179
+ export declare function dateSerialToDate(serial: number): Date;
180
+ /**
181
+ * Convert wall-clock date/time fields to a date serial number. Uses UTC
182
+ * arithmetic so daylight-saving and historical timezone offsets never shift
183
+ * the result.
184
+ *
185
+ * @param year - Full year (e.g. 2024; 0-99 are not remapped)
186
+ * @param month - 0-indexed month
187
+ * @param day - Day of month (overflow rolls into the next month)
188
+ * @param hours - Hours (default 0)
189
+ * @param minutes - Minutes (default 0)
190
+ * @param seconds - Seconds (default 0)
191
+ * @returns The date serial number
192
+ */
193
+ export declare function dateToSerial(year: number, month: number, day: number, hours?: number, minutes?: number, seconds?: number): number;
153
194
  /**
154
195
  * Creates a cell key string from row and column indices.
155
196
  *
@@ -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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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Parsing and serialization for delimiter-separated text (CSV, TSV).
3
+ *
4
+ * Follows RFC 4180 quoting: a field that contains the delimiter, a double
5
+ * quote, or a line break is wrapped in double quotes, and embedded quotes are
6
+ * doubled (`""`). This is also the format Excel and Google Sheets put on the
7
+ * clipboard as TSV.
8
+ */
9
+ /**
10
+ * Parse delimited text into a 2D array of strings.
11
+ *
12
+ * - Quoted fields may contain delimiters, line breaks, and escaped quotes (`""`).
13
+ * - A quote only opens a quoted field at the start of a field; a quote in the
14
+ * middle of a field (e.g. `5" screen`, which Excel leaves unquoted) is literal.
15
+ * - `\r\n`, `\n`, and bare `\r` all end a row.
16
+ * - A single trailing line break does not produce an extra empty row.
17
+ * - A leading UTF-8 byte-order mark (common in Excel exports) is ignored.
18
+ *
19
+ * @param text - The text to parse
20
+ * @param delimiter - Field separator (default `,`)
21
+ * @returns Rows of fields
22
+ */
23
+ export declare function parseDelimited(text: string, delimiter?: string): string[][];
24
+ /**
25
+ * Quote a single field if it contains the delimiter, a quote, or a line break.
26
+ *
27
+ * @param value - The field value
28
+ * @param delimiter - Field separator (default `,`)
29
+ * @returns The field, quoted and escaped when necessary
30
+ */
31
+ export declare function quoteDelimitedField(value: string, delimiter?: string): string;
32
+ /**
33
+ * Serialize a 2D array of strings as delimited text. Rows are joined with `\n`.
34
+ *
35
+ * @param rows - Rows of fields
36
+ * @param delimiter - Field separator (default `,`)
37
+ * @returns The delimited text
38
+ */
39
+ export declare function serializeDelimited(rows: string[][], delimiter?: string): string;
40
+ //# sourceMappingURL=delimited.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delimited.d.ts","sourceRoot":"","sources":["../../src/utils/delimited.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,EAAE,EAAE,CAiExE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAU1E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,SAAM,GAAG,MAAM,CAU5E"}
@@ -1,6 +1,22 @@
1
1
  import { LitElement } from 'lit';
2
- import { type CellFormat, type GridData, type SelectionRange, type FormulaFunction } from './types.js';
2
+ import { type CellCoord, type CellFormat, type GridData, type SelectionRange, type FormulaFunction } from './types.js';
3
3
  import './components/y11n-formula-bar.js';
4
+ /** Options for `toCSV()`. */
5
+ export interface CSVExportOptions {
6
+ /** Range to export. Default: from A1 to the last row/column that has content. */
7
+ range?: SelectionRange;
8
+ /** Field separator. Default: `,` */
9
+ delimiter?: string;
10
+ /** Export computed display values (default) or raw values (formulas). */
11
+ values?: 'display' | 'raw';
12
+ }
13
+ /** Options for `fromCSV()`. */
14
+ export interface CSVImportOptions {
15
+ /** Field separator. Default: `,` */
16
+ delimiter?: string;
17
+ /** Top-left cell to write to. Default: A1 */
18
+ start?: CellCoord;
19
+ }
4
20
  /**
5
21
  * `<y11n-spreadsheet>` -- An accessible spreadsheet web component.
6
22
  *
@@ -91,6 +107,26 @@ export declare class Y11nSpreadsheet extends LitElement {
91
107
  * @param fn - The function implementation
92
108
  */
93
109
  registerFunction(name: string, fn: FormulaFunction): void;
110
+ /**
111
+ * Serialize grid contents as CSV (or TSV etc. via `delimiter`).
112
+ * By default exports display values from A1 to the last row and column
113
+ * that contain a value.
114
+ *
115
+ * @param options - Range, delimiter, and whether to export display or raw values
116
+ * @returns The delimited text (rows joined with `\n`); empty string for an empty grid
117
+ */
118
+ toCSV(options?: CSVExportOptions): string;
119
+ /**
120
+ * Write CSV (or TSV etc. via `delimiter`) text into the grid starting at
121
+ * `start` (default A1). Values beginning with `=` become formulas. Values
122
+ * outside the grid's `rows`/`cols` are dropped, so grow the grid first if
123
+ * needed. The import is a single undoable step and fires `data-change`
124
+ * with `operation: 'import'`.
125
+ *
126
+ * @param text - Delimited text
127
+ * @param options - Delimiter and top-left target cell
128
+ */
129
+ fromCSV(text: string, options?: CSVImportOptions): void;
94
130
  /**
95
131
  * Returns the format for a cell, or undefined if unformatted.
96
132
  *
@@ -155,6 +191,16 @@ export declare class Y11nSpreadsheet extends LitElement {
155
191
  private _snapshotSelection;
156
192
  private _restoreSelection;
157
193
  private _buildCommandBatch;
194
+ /**
195
+ * Build a batch that writes values and, optionally, formats. Cells whose
196
+ * value and format would both be unchanged are skipped.
197
+ */
198
+ private _buildCellBatch;
199
+ /**
200
+ * Execute and record a user batch. Large batches are applied in chunks
201
+ * across animation frames so the UI stays responsive.
202
+ */
203
+ private _runUserBatch;
158
204
  private _pushHistory;
159
205
  private _finalizeBatch;
160
206
  private _applyBatch;
@@ -193,6 +239,20 @@ export declare class Y11nSpreadsheet extends LitElement {
193
239
  private _focusActiveCell;
194
240
  private _handleGridKeydown;
195
241
  private _handleEditorKeydown;
242
+ private _isCellFilled;
243
+ /**
244
+ * Ctrl+Space: select the full columns spanned by the selection.
245
+ * Shift+Space: select the full rows. Both: select all.
246
+ * The active cell stays where it is.
247
+ */
248
+ private _selectWholeRowsOrColumns;
249
+ /**
250
+ * Pointer selection on row/column headers: click selects the row or
251
+ * column, Shift+click extends from the selection's anchor, and dragging
252
+ * across headers selects a span. The active cell moves into the clicked
253
+ * column (or row) but keeps its row (or column), so the view doesn't jump.
254
+ */
255
+ private _handleHeaderPointerDown;
196
256
  private _handleSelectAll;
197
257
  private _handleCornerKeydown;
198
258
  private _handleCellPointerDown;
@@ -206,6 +266,21 @@ export declare class Y11nSpreadsheet extends LitElement {
206
266
  */
207
267
  private _applyBatchProgressive;
208
268
  private _clearSelectedCells;
269
+ /**
270
+ * Fill down (Ctrl+D) or right (Ctrl+R): copy the first row/column of the
271
+ * selection into the rest of it, shifting relative formula references and
272
+ * copying formats. With a single row/column selected, copies from the
273
+ * row above / column to the left instead.
274
+ */
275
+ private _fillSelection;
276
+ /** Shift the relative references of a formula; non-formulas are returned as-is. */
277
+ private _shiftFormula;
278
+ /**
279
+ * Ctrl/Cmd+Enter while editing: commit the edited value into every cell of
280
+ * the selection. Formulas are written relative to each cell, as if the
281
+ * edited cell were copied there.
282
+ */
283
+ private _commitEditToSelection;
209
284
  private _handleScroll;
210
285
  private _handleEditorInput;
211
286
  private _handleEditorBlur;
@@ -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.2",
3
+ "version": "1.1.0",
4
4
  "description": "Accessible spreadsheet web component built with Lit 3.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",