zubin-grid 0.4.12 → 0.41.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +147 -5
  2. package/dist/core/cell.d.ts +8 -8
  3. package/dist/core/cell.d.ts.map +1 -1
  4. package/dist/core/cell.js +125 -38
  5. package/dist/core/cell.js.map +1 -1
  6. package/dist/core/grid-id.d.ts +7 -0
  7. package/dist/core/grid-id.d.ts.map +1 -0
  8. package/dist/core/grid-id.js +51 -0
  9. package/dist/core/grid-id.js.map +1 -0
  10. package/dist/core/grid.d.ts +11 -9
  11. package/dist/core/grid.d.ts.map +1 -1
  12. package/dist/core/grid.js +597 -80
  13. package/dist/core/grid.js.map +1 -1
  14. package/dist/core/head.d.ts +11 -13
  15. package/dist/core/head.d.ts.map +1 -1
  16. package/dist/core/head.js +38 -33
  17. package/dist/core/head.js.map +1 -1
  18. package/dist/core/helpers.d.ts +4 -4
  19. package/dist/core/helpers.d.ts.map +1 -1
  20. package/dist/core/helpers.js +5 -2
  21. package/dist/core/helpers.js.map +1 -1
  22. package/dist/core/{gridPersist.d.ts → persist.d.ts} +3 -3
  23. package/dist/core/persist.d.ts.map +1 -0
  24. package/dist/core/{gridPersist.js → persist.js} +43 -42
  25. package/dist/core/persist.js.map +1 -0
  26. package/dist/core/tail.d.ts +9 -11
  27. package/dist/core/tail.d.ts.map +1 -1
  28. package/dist/core/tail.js +17 -19
  29. package/dist/core/tail.js.map +1 -1
  30. package/dist/core/types/cell.types.d.ts.map +1 -0
  31. package/dist/core/{cell.types.js.map → types/cell.types.js.map} +1 -1
  32. package/dist/core/{grid.types.d.ts → types/grid.types.d.ts} +79 -16
  33. package/dist/core/types/grid.types.d.ts.map +1 -0
  34. package/dist/core/{grid.types.js.map → types/grid.types.js.map} +1 -1
  35. package/dist/core/{head.types.d.ts → types/head.types.d.ts} +7 -6
  36. package/dist/core/types/head.types.d.ts.map +1 -0
  37. package/dist/core/{head.types.js.map → types/head.types.js.map} +1 -1
  38. package/dist/core/{gridPersist.types.d.ts → types/persist.types.d.ts} +1 -1
  39. package/dist/core/types/persist.types.d.ts.map +1 -0
  40. package/dist/core/types/persist.types.js +2 -0
  41. package/dist/core/types/persist.types.js.map +1 -0
  42. package/dist/core/{tail.types.d.ts → types/tail.types.d.ts} +3 -2
  43. package/dist/core/types/tail.types.d.ts.map +1 -0
  44. package/dist/core/{tail.types.js.map → types/tail.types.js.map} +1 -1
  45. package/dist/index.d.ts +6 -6
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +2 -2
  48. package/dist/index.js.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/core/cell.types.d.ts.map +0 -1
  51. package/dist/core/grid.types.d.ts.map +0 -1
  52. package/dist/core/gridPersist.d.ts.map +0 -1
  53. package/dist/core/gridPersist.js.map +0 -1
  54. package/dist/core/gridPersist.types.d.ts.map +0 -1
  55. package/dist/core/gridPersist.types.js +0 -2
  56. package/dist/core/gridPersist.types.js.map +0 -1
  57. package/dist/core/head.types.d.ts.map +0 -1
  58. package/dist/core/tail.types.d.ts.map +0 -1
  59. /package/dist/core/{cell.types.d.ts → types/cell.types.d.ts} +0 -0
  60. /package/dist/core/{cell.types.js → types/cell.types.js} +0 -0
  61. /package/dist/core/{grid.types.js → types/grid.types.js} +0 -0
  62. /package/dist/core/{head.types.js → types/head.types.js} +0 -0
  63. /package/dist/core/{tail.types.js → types/tail.types.js} +0 -0
package/README.md CHANGED
@@ -7,7 +7,9 @@ A lightweight grid state manager for React and TypeScript.
7
7
  ## Why use it?
8
8
 
9
9
  - Reactive cell store with subscriptions
10
+ - Flexible row and column ids with `string`, `number`, `boolean`, or `Date`
10
11
  - Typed grid API for rows, columns, heads, and tails
12
+ - Row-bound and column-bound dimension grids for axis metadata
11
13
  - React hooks for reading and updating state
12
14
  - Row and column reordering helpers
13
15
  - JSON-friendly initialization with typed row, column, and cell records
@@ -22,7 +24,7 @@ npm install zubin-grid react
22
24
 
23
25
  ## Local example app
24
26
 
25
- This repository also includes a small Vite + React playground under `examples/` so you can try the JSON-friendly grid API, persistence, and the demo controls locally.
27
+ This repository also includes a small Vite + React playground under `examples/` so you can try the JSON-friendly grid API, persistence, demo controls, and a Conway's Game of Life reactivity showcase locally.
26
28
 
27
29
  ```bash
28
30
  npm install
@@ -119,10 +121,10 @@ const budgetGrid = grid<BudgetSchema>(
119
121
  )
120
122
 
121
123
  export function BudgetCell(props: {
122
- rowId: BudgetRowId
123
- columnId: BudgetColumnId
124
+ row: number
125
+ col: number
124
126
  }) {
125
- const [value, setValue] = useCell(budgetGrid, props.rowId, props.columnId)
127
+ const [value, setValue] = useCell(budgetGrid, { row: props.row, col: props.col })
126
128
 
127
129
  return (
128
130
  <input
@@ -134,6 +136,8 @@ export function BudgetCell(props: {
134
136
  }
135
137
  ```
136
138
 
139
+ `useCell(grid, { row, col })` returns a React-friendly setter for that cell. For row-bound and column-bound dimension grids, pass `{ row }` or `{ col }` respectively. Outside React, mutate store cells with `grid.upsertCell(...)` or `grid.upsertCells(...)` rather than a store-level `setValue(...)` helper.
140
+
137
141
  ## Working with heads
138
142
 
139
143
  Headers are stored separately from cell values, so labels and order can change without rebuilding the grid.
@@ -306,6 +310,35 @@ const bootstrappedSalesGrid = grid<SalesSchema>({}, {
306
310
  })
307
311
  ```
308
312
 
313
+ ## Flexible row and column ids
314
+
315
+ `zubin-grid` exports `GridId` as `string | number | boolean | Date`.
316
+
317
+ Each row id must still be unique within the row axis, and each column id must be unique within the column axis. `Date` ids are compared by timestamp rather than object identity, so recreating the same date value still points at the same row or column.
318
+
319
+ ```ts
320
+ const april14 = new Date('2026-04-14T00:00:00.000Z')
321
+
322
+ const availabilityGrid = grid({
323
+ rows: [
324
+ { id: true, label: 'Available' },
325
+ { id: false, label: 'Unavailable' },
326
+ ],
327
+ columns: [
328
+ { id: april14, label: 'April 14' },
329
+ ],
330
+ cells: [
331
+ { rowId: true, columnId: april14, value: 'x' },
332
+ ],
333
+ }, {
334
+ rowHeaders: ['id', 'rowId'],
335
+ colHeaders: ['id', 'columnId'],
336
+ })
337
+
338
+ availabilityGrid.getValue(true, new Date('2026-04-14T00:00:00.000Z'))
339
+ // 'x'
340
+ ```
341
+
309
342
  ## Non-reactive snapshots and upserts
310
343
 
311
344
  `grid.getState()` returns a plain snapshot of the current rows, columns, and cells without subscribing React to anything.
@@ -320,6 +353,109 @@ salesGrid.upsertCell({ rowId: 'west', columnId: 'mar', value: 21 })
320
353
 
321
354
  `getValue`, `getRowHead`, and `getColumnHead` are also non-reactive getters when you only need a targeted read.
322
355
 
356
+ ## Dimension grids
357
+
358
+ Use `createDimensionGrid` when you want one reactive cell per row or one reactive cell per column instead of a full row/column matrix. This is handy for statuses, visibility flags, notes, or other metadata attached to a single axis.
359
+
360
+ ```tsx
361
+ import { createDimensionGrid, useCell } from 'zubin-grid'
362
+
363
+ type ShipmentStatus = 'pending' | 'packed' | 'shipped'
364
+
365
+ const rowStatusGrid = createDimensionGrid<ShipmentStatus>(salesGrid, [], 'rows')
366
+ const columnStatusGrid = createDimensionGrid<ShipmentStatus>(
367
+ salesGrid,
368
+ ['pending'],
369
+ 'columns',
370
+ { persist: false },
371
+ )
372
+
373
+ rowStatusGrid.getValue(0)
374
+ rowStatusGrid.setGrid(['packed', 'shipped'], 'update')
375
+
376
+ function RowStatus(props: { row: number }) {
377
+ const [status, setStatus] = useCell(rowStatusGrid, { row: props.row })
378
+
379
+ return (
380
+ <select
381
+ value={status ?? ''}
382
+ onChange={(event) => setStatus(event.target.value as ShipmentStatus)}
383
+ >
384
+ <option value="">Unset</option>
385
+ <option value="pending">Pending</option>
386
+ <option value="packed">Packed</option>
387
+ <option value="shipped">Shipped</option>
388
+ </select>
389
+ )
390
+ }
391
+ ```
392
+
393
+ `createDimensionGrid(parentGrid, initialCells, 'rows' | 'columns', options?)` keeps its size and ordering in sync with the chosen parent axis.
394
+
395
+ - Row dimension grids use `useCell(rowDimensionGrid, { row })`.
396
+ - Column dimension grids use `useCell(columnDimensionGrid, { col })`.
397
+ - `setGrid(...)` accepts either a plain array or `{ dimension, cells }`.
398
+ - Persistence inherits from the parent by default, can be disabled with `persist: false`, or overridden with `persist: ['your-key']`.
399
+
400
+ ## Sub grids
401
+
402
+ Use `createSubGrid` when you want a second grid layer that reuses the parent grid's row and column dimensions, but stores a different cell shape.
403
+
404
+ ```ts
405
+ import { createSubGrid, useCell } from 'zubin-grid'
406
+
407
+ type SalesNoteCell = {
408
+ note: string
409
+ dirty?: boolean
410
+ }
411
+
412
+ const salesNotesGrid = createSubGrid<SalesNoteCell>(salesGrid, [], {
413
+ persist: ['sales-notes'],
414
+ })
415
+
416
+ function SalesNote(props: {
417
+ row: number
418
+ col: number
419
+ }) {
420
+ const [noteCell, setNoteCell] = useCell(salesNotesGrid, {
421
+ row: props.row,
422
+ col: props.col,
423
+ })
424
+
425
+ return (
426
+ <input
427
+ value={noteCell.note}
428
+ onChange={(event) =>
429
+ setNoteCell({
430
+ ...noteCell,
431
+ note: event.target.value,
432
+ dirty: true,
433
+ })
434
+ }
435
+ />
436
+ )
437
+ }
438
+ ```
439
+
440
+ Sub grids behave like normal grids for cell and hook usage, with a few important rules:
441
+
442
+ - They inherit the parent grid's row ids, column ids, row heads, and column heads.
443
+ - Parent row and column changes stay in sync, including upserts, label changes, order changes, `setGrid(...)`, and `clearGrid()`.
444
+ - `useCell`, `useCellValue`, `useGrid`, `useRowHead`, `useColumnHead`, `useRowTail`, and `useColumnTail` all work with sub grids.
445
+ - Persistence inherits from the parent when omitted, can be disabled with `persist: false`, or can use a custom key with `persist: ['your-key']`.
446
+ - Row and column mutations called on a sub grid are forwarded to the parent grid.
447
+ - `clearGrid()` on a sub grid clears the sub grid's own cells while keeping the inherited parent dimensions intact.
448
+
449
+ Pass seeded cells as the second argument and persistence as the optional third argument:
450
+
451
+ ```ts
452
+ const salesFlagsGrid = createSubGrid<SalesNoteCell>(salesGrid, [
453
+ { rowId: 'north', columnId: 'jan', value: { note: 'Review' } },
454
+ ], {
455
+ persist: ['sales-flags'],
456
+ })
457
+ ```
458
+
323
459
  ## Persistence
324
460
 
325
461
  Use `persist` to cache the current grid snapshot under a storage key. A custom adapter can be provided, otherwise `zubin-grid` falls back to a default async browser storage implementation with a runtime cache.
@@ -360,11 +496,15 @@ const persistedWithCustomAdapter = grid<SalesSchema>(initialState, {
360
496
  - `cell(initialValue)` - creates a reactive cell
361
497
  - `grid({ rows, columns, cells }, options)` - creates a grid from JSON-friendly state
362
498
  - `grid(() => ({ rows, columns, cells }), options)` - lazily creates typed grid state
499
+ - `createDimensionGrid(parentGrid, initialCells, dimension, options?)` - creates a row-bound or column-bound grid that stays synced with the parent axis
500
+ - `createSubGrid(parentGrid, initialCells?, options?)` - creates a child grid with its own cells while inheriting the parent grid dimensions
363
501
 
364
502
  ### Cell hooks
365
503
 
366
504
  - `useCell(cell)`
367
- - `useCell(grid, rowId, columnId)`
505
+ - `useCell(grid, { row, col })`
506
+ - `useCell(rowDimensionGrid, { row })`
507
+ - `useCell(columnDimensionGrid, { col })`
368
508
  - `useCellValue(...)`
369
509
 
370
510
  ### Head hooks
@@ -405,6 +545,8 @@ Use the root package for most cases:
405
545
  ```ts
406
546
  import {
407
547
  cell,
548
+ createDimensionGrid,
549
+ createSubGrid,
408
550
  grid,
409
551
  useCell,
410
552
  useCellValue,
@@ -1,12 +1,12 @@
1
- import type { Cell, CellInitializer } from "./cell.types.js";
2
- import type { Grid, GridPosition, GridState } from "./grid.types.js";
3
- import type { GridHead } from "./head.types.js";
4
- export type { Cell, Subscriber, Updater } from "./cell.types.js";
1
+ import type { Cell, CellInitializer } from "./types/cell.types.js";
2
+ import type { DimensionGrid, DimensionGridPosition, Grid, GridCellPosition, GridDimension, GridState } from "./types/grid.types.js";
3
+ import type { GridHead, GridId } from "./types/head.types.js";
4
+ export type { Cell, Subscriber, Updater } from "./types/cell.types.js";
5
5
  export declare function cell<TCell>(initialValue: TCell | CellInitializer<TCell>): Cell<TCell>;
6
6
  export declare function useCell<TCell>(currentCell: Cell<TCell>): readonly [TCell, (newValue: TCell) => void];
7
- export declare function useCell<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, position: GridPosition<TColumnId, TRowId>): readonly [TCell, (newValue: TCell) => void];
8
- export declare function useCell<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, rowId: TRowId, columnId: TColumnId): readonly [TCell, (newValue: TCell) => void];
7
+ export declare function useCell<TCell, TDimension extends GridDimension, TRowId extends GridId, TColumnId extends GridId>(currentGrid: DimensionGrid<TCell, TDimension, TRowId, TColumnId>, position: DimensionGridPosition<TDimension>): readonly [TCell | undefined, (newValue: TCell | undefined) => void];
8
+ export declare function useCell<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, position: GridCellPosition): readonly [TCell, (newValue: TCell) => void];
9
9
  export declare function useCellValue<TCell>(currentCell: Cell<TCell>): TCell;
10
- export declare function useCellValue<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, position: GridPosition<TColumnId, TRowId>): TCell;
11
- export declare function useCellValue<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, rowId: TRowId, columnId: TColumnId): TCell;
10
+ export declare function useCellValue<TCell, TDimension extends GridDimension, TRowId extends GridId, TColumnId extends GridId>(currentGrid: DimensionGrid<TCell, TDimension, TRowId, TColumnId>, position: DimensionGridPosition<TDimension>): TCell | undefined;
11
+ export declare function useCellValue<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, position: GridCellPosition): TCell;
12
12
  //# sourceMappingURL=cell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAuB,MAAM,uBAAuB,CAAC;AACxF,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,IAAI,EACJ,gBAAgB,EAChB,aAAa,EACb,SAAS,EAEV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE9D,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAsBvE,wBAAgB,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAiCrF;AAED,wBAAgB,OAAO,CAAC,KAAK,EAC3B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GACvB,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;AAC/C,wBAAgB,OAAO,CACrB,KAAK,EACL,UAAU,SAAS,aAAa,EAChC,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,MAAM,EAExB,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAChE,QAAQ,EAAE,qBAAqB,CAAC,UAAU,CAAC,GAC1C,SAAS,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC;AACvE,wBAAgB,OAAO,CACrB,KAAK,EACL,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,MAAM,EACxB,QAAQ,SAAS,QAAQ,CAAC,MAAM,CAAC,EACjC,WAAW,SAAS,QAAQ,CAAC,SAAS,CAAC,EACvC,UAAU,EACV,MAAM,SAAS,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,EAE3D,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,EACtF,QAAQ,EAAE,gBAAgB,GACzB,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC;AA6B/C,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AACrE,wBAAgB,YAAY,CAC1B,KAAK,EACL,UAAU,SAAS,aAAa,EAChC,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,MAAM,EAExB,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAChE,QAAQ,EAAE,qBAAqB,CAAC,UAAU,CAAC,GAC1C,KAAK,GAAG,SAAS,CAAC;AACrB,wBAAgB,YAAY,CAC1B,KAAK,EACL,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,MAAM,EACxB,QAAQ,SAAS,QAAQ,CAAC,MAAM,CAAC,EACjC,WAAW,SAAS,QAAQ,CAAC,SAAS,CAAC,EACvC,UAAU,EACV,MAAM,SAAS,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,EAE3D,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,EACtF,QAAQ,EAAE,gBAAgB,GACzB,KAAK,CAAC"}
package/dist/core/cell.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useCallback, useSyncExternalStore } from "react";
1
+ import { useCallback, useMemo, useSyncExternalStore } from "react";
2
2
  export function cell(initialValue) {
3
3
  let value = typeof initialValue === "function" ? null : initialValue;
4
4
  const subscribers = new Set();
@@ -27,49 +27,136 @@ export function cell(initialValue) {
27
27
  _subscribers: () => subscribers.size,
28
28
  };
29
29
  }
30
- export function useCell(cellOrGrid, rowIdOrPosition, columnId) {
31
- const { rowId: resolvedRowId, columnId: resolvedColumnId } = Array.isArray(rowIdOrPosition)
32
- ? {
33
- rowId: rowIdOrPosition[1],
34
- columnId: rowIdOrPosition[0],
35
- }
36
- : {
37
- rowId: rowIdOrPosition,
38
- columnId,
39
- };
40
- const currentCell = resolveCell(cellOrGrid, resolvedRowId, resolvedColumnId);
41
- const subscribe = useCallback((callback) => currentCell.subscribe(callback), [currentCell]);
42
- const getSnapshot = useCallback(() => currentCell.get(), [currentCell]);
43
- const setValue = isGrid(cellOrGrid) && resolvedRowId !== undefined && resolvedColumnId !== undefined
44
- ? (newValue) => cellOrGrid.__setCellValue(resolvedRowId, resolvedColumnId, newValue)
45
- : currentCell.set;
46
- return [useSyncExternalStore(subscribe, getSnapshot), setValue];
30
+ export function useCell(cellOrGrid, position) {
31
+ const currentCellAccess = useMemo(() => resolveCellAccess(cellOrGrid, position), [cellOrGrid, position]);
32
+ const subscribe = useCallback((callback) => subscribeToResolvedCell(currentCellAccess, callback), [currentCellAccess]);
33
+ const getSnapshot = useCallback(() => currentCellAccess.getCell().get(), [currentCellAccess]);
34
+ return [
35
+ useSyncExternalStore(subscribe, getSnapshot),
36
+ currentCellAccess.setValue,
37
+ ];
47
38
  }
48
- export function useCellValue(cellOrGrid, rowIdOrPosition, columnId) {
49
- const { rowId: resolvedRowId, columnId: resolvedColumnId } = Array.isArray(rowIdOrPosition)
50
- ? {
51
- rowId: rowIdOrPosition[1],
52
- columnId: rowIdOrPosition[0],
53
- }
54
- : {
55
- rowId: rowIdOrPosition,
56
- columnId,
57
- };
58
- const currentCell = resolveCell(cellOrGrid, resolvedRowId, resolvedColumnId);
59
- const subscribe = useCallback((callback) => currentCell.subscribe(callback), [currentCell]);
60
- const getSnapshot = useCallback(() => currentCell.get(), [currentCell]);
39
+ export function useCellValue(cellOrGrid, position) {
40
+ const currentCellAccess = useMemo(() => resolveCellAccess(cellOrGrid, position), [cellOrGrid, position]);
41
+ const subscribe = useCallback((callback) => subscribeToResolvedCell(currentCellAccess, callback), [currentCellAccess]);
42
+ const getSnapshot = useCallback(() => currentCellAccess.getCell().get(), [currentCellAccess]);
61
43
  return useSyncExternalStore(subscribe, getSnapshot);
62
44
  }
63
- function resolveCell(cellOrGrid, rowId, columnId) {
64
- if (!isGrid(cellOrGrid)) {
65
- return cellOrGrid;
45
+ function resolveCellAccess(cellOrGrid, position) {
46
+ if (isDimensionGrid(cellOrGrid)) {
47
+ return createDimensionGridCellAccess(cellOrGrid, position);
66
48
  }
67
- if (!rowId || !columnId) {
68
- throw new Error("Grid cell hooks require both rowId and columnId.");
49
+ if (isGrid(cellOrGrid)) {
50
+ return createGridCellAccess(cellOrGrid, position);
69
51
  }
70
- return cellOrGrid.getCell(rowId, columnId);
52
+ return {
53
+ getCell: () => cellOrGrid,
54
+ setValue: (newValue) => {
55
+ cellOrGrid.set(newValue);
56
+ },
57
+ };
71
58
  }
72
59
  function isGrid(value) {
73
- return "getCell" in value;
60
+ return (typeof value === "object" &&
61
+ value !== null &&
62
+ "getCell" in value &&
63
+ "getRowHead" in value &&
64
+ "getColumnHead" in value);
65
+ }
66
+ function isDimensionGrid(value) {
67
+ return (typeof value === "object" &&
68
+ value !== null &&
69
+ "dimension" in value &&
70
+ "size" in value &&
71
+ "subscribeGrid" in value &&
72
+ "getCell" in value &&
73
+ !("getRowHead" in value));
74
+ }
75
+ function createDimensionGridCellAccess(currentGrid, position) {
76
+ const getIndex = () => resolveDimensionGridIndex(currentGrid, position);
77
+ return {
78
+ getCell: () => currentGrid.getCell(getIndex()),
79
+ setValue: (newValue) => {
80
+ currentGrid.__setCellValue(getIndex(), newValue);
81
+ },
82
+ subscribeToPositionChanges: (callback) => currentGrid.subscribeGrid((_updatedGrid, diff) => {
83
+ if (diff.type === "dimension") {
84
+ callback();
85
+ }
86
+ }),
87
+ };
88
+ }
89
+ function createIndexedGridCellAccess(currentGrid, position) {
90
+ const getCoordinates = () => resolveGridCoordinatesFromIndex(currentGrid, position);
91
+ return {
92
+ getCell: () => {
93
+ const { rowId, columnId } = getCoordinates();
94
+ return currentGrid.getCell(rowId, columnId);
95
+ },
96
+ setValue: (newValue) => {
97
+ const { rowId, columnId } = getCoordinates();
98
+ currentGrid.__setCellValue(rowId, columnId, newValue);
99
+ },
100
+ subscribeToPositionChanges: (callback) => currentGrid.subscribeGrid((_updatedGrid, diff) => {
101
+ if (diff.type === "grid" ||
102
+ diff.type === "rows" ||
103
+ diff.type === "columns" ||
104
+ diff.type === "row-head" ||
105
+ diff.type === "column-head") {
106
+ callback();
107
+ }
108
+ }),
109
+ };
110
+ }
111
+ function createGridCellAccess(currentGrid, position) {
112
+ return createIndexedGridCellAccess(currentGrid, position);
113
+ }
114
+ function subscribeToResolvedCell(currentCellAccess, callback) {
115
+ let currentCell = currentCellAccess.getCell();
116
+ let unsubscribeCell = currentCell.subscribe(callback);
117
+ if (!currentCellAccess.subscribeToPositionChanges) {
118
+ return unsubscribeCell;
119
+ }
120
+ const unsubscribePositionChange = currentCellAccess.subscribeToPositionChanges(() => {
121
+ const nextCell = currentCellAccess.getCell();
122
+ if (nextCell !== currentCell) {
123
+ unsubscribeCell();
124
+ currentCell = nextCell;
125
+ unsubscribeCell = currentCell.subscribe(callback);
126
+ }
127
+ callback();
128
+ });
129
+ return () => {
130
+ unsubscribePositionChange();
131
+ unsubscribeCell();
132
+ };
133
+ }
134
+ function resolveDimensionGridIndex(currentGrid, position) {
135
+ if (currentGrid.dimension === "rows") {
136
+ const row = position.row;
137
+ if (typeof row !== "number" || !Number.isInteger(row)) {
138
+ throw new Error("Row position must be an integer.");
139
+ }
140
+ return row;
141
+ }
142
+ const col = position.col;
143
+ if (typeof col !== "number" || !Number.isInteger(col)) {
144
+ throw new Error("Column position must be an integer.");
145
+ }
146
+ return col;
147
+ }
148
+ function resolveGridCoordinatesFromIndex(currentGrid, position) {
149
+ if (!Number.isInteger(position.row) || !Number.isInteger(position.col)) {
150
+ throw new Error("Grid cell position indices must be integers.");
151
+ }
152
+ const rowId = currentGrid.rowHeaders[position.row];
153
+ const columnId = currentGrid.colHeaders[position.col];
154
+ if (rowId === undefined || columnId === undefined) {
155
+ throw new Error(`Grid cell position { row: ${position.row}, col: ${position.col} } is out of bounds.`);
156
+ }
157
+ return {
158
+ rowId,
159
+ columnId,
160
+ };
74
161
  }
75
162
  //# sourceMappingURL=cell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cell.js","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cell.js","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { GridId } from "./types/head.types.js";
2
+ export declare function isGridId(value: unknown): value is GridId;
3
+ export declare function assertGridId(value: unknown, context: string): asserts value is GridId;
4
+ export declare function createGridIdKey(id: GridId): string;
5
+ export declare function areEqualGridIds(left: GridId, right: GridId): boolean;
6
+ export declare function formatGridId(id: GridId): string;
7
+ //# sourceMappingURL=grid-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-id.d.ts","sourceRoot":"","sources":["../../core/grid-id.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAIpD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAOxD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAQrF;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,UAkBzC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,WAE1D;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,UAYtC"}
@@ -0,0 +1,51 @@
1
+ const GRID_ID_DESCRIPTION = "string, number, boolean, or Date";
2
+ export function isGridId(value) {
3
+ return (typeof value === "string" ||
4
+ typeof value === "number" ||
5
+ typeof value === "boolean" ||
6
+ value instanceof Date);
7
+ }
8
+ export function assertGridId(value, context) {
9
+ if (!isGridId(value)) {
10
+ throw new Error(`${context} must be a ${GRID_ID_DESCRIPTION} id.`);
11
+ }
12
+ if (value instanceof Date) {
13
+ readGridDateValue(value, context);
14
+ }
15
+ }
16
+ export function createGridIdKey(id) {
17
+ if (typeof id === "string") {
18
+ return `string:${encodeURIComponent(id)}`;
19
+ }
20
+ if (typeof id === "number") {
21
+ if (Number.isNaN(id)) {
22
+ return "number:NaN";
23
+ }
24
+ return Object.is(id, -0) ? "number:-0" : `number:${id}`;
25
+ }
26
+ if (typeof id === "boolean") {
27
+ return `boolean:${id}`;
28
+ }
29
+ return `date:${readGridDateValue(id, "Grid id")}`;
30
+ }
31
+ export function areEqualGridIds(left, right) {
32
+ return createGridIdKey(left) === createGridIdKey(right);
33
+ }
34
+ export function formatGridId(id) {
35
+ if (typeof id === "string") {
36
+ return id;
37
+ }
38
+ if (typeof id === "number" || typeof id === "boolean") {
39
+ return String(id);
40
+ }
41
+ readGridDateValue(id, "Grid id");
42
+ return id.toISOString();
43
+ }
44
+ function readGridDateValue(id, context) {
45
+ const time = id.getTime();
46
+ if (!Number.isNaN(time)) {
47
+ return time;
48
+ }
49
+ throw new Error(`${context} must be a valid Date id.`);
50
+ }
51
+ //# sourceMappingURL=grid-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-id.js","sourceRoot":"","sources":["../../core/grid-id.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAE/D,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,KAAK,YAAY,IAAI,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,OAAe;IAC1D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,cAAc,mBAAmB,MAAM,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,UAAU,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,OAAO,EAAE,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,WAAW,EAAE,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,QAAQ,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAEjC,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAQ,EAAE,OAAe;IAClD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,2BAA2B,CAAC,CAAC;AACzD,CAAC"}
@@ -1,11 +1,13 @@
1
- import type { Grid, GridAxisIds, GridRecord, GridSchemaOptions, GridState, GridStateInitializer, SchemaCell, SchemaCellValue, SchemaColumn, SchemaColumnHead, SchemaColumnId, SchemaRow, SchemaRowHead, SchemaRowId, SchemaSnapshot, UseGridOptions } from "./grid.types.js";
2
- import type { GridHead } from "./head.types.js";
3
- export type { Grid, GridAxisIds, GridPersistAdapter, GridPersistOption, GridPosition, GridRows, GridSchemaOptions, GridSetMode, GridState, GridStateCell, GridStateInitializer, GridSubscriber, GridUpdateAction, GridUpdateDiff, GridUpdateSource, GridUpdateType, GridUpsertHead, UseGridOptions, } from "./grid.types.js";
4
- type BroadSchemaRowHead<TState extends GridState<GridRecord, GridRecord, GridRecord>> = SchemaRow<TState> & GridHead<string>;
5
- type BroadSchemaColumnHead<TState extends GridState<GridRecord, GridRecord, GridRecord>> = SchemaColumn<TState> & GridHead<string>;
6
- type BroadSchemaSnapshot<TState extends GridState<GridRecord, GridRecord, GridRecord>> = GridState<SchemaCell<TState>, BroadSchemaRowHead<TState>, BroadSchemaColumnHead<TState>>;
7
- export declare function grid<TState extends GridState<GridRecord, GridRecord, GridRecord>>(source: GridStateInitializer<TState>, options: GridSchemaOptions<TState, keyof SchemaRow<TState> & string, keyof SchemaColumn<TState> & string, keyof SchemaCell<TState> & string, keyof SchemaCell<TState> & string, BroadSchemaSnapshot<TState>>): Grid<SchemaCell<TState>, string, string, BroadSchemaRowHead<TState>, BroadSchemaColumnHead<TState>, SchemaCell<TState>, BroadSchemaSnapshot<TState>>;
1
+ import type { AnyGrid, BroadSchemaColumnHead, BroadSchemaRowHead, BroadSchemaSnapshot, Grid, GridAxisIds, GridColumnIdOf, GridDimension, GridRecord, GridRowIdOf, GridSchemaOptions, GridState, GridStateCell, ParentDimensionGrid, ParentDimensionGridOptions, ParentSubGrid, ParentSubGridOptions, GridStateInitializer, SchemaCell, SchemaCellValue, SchemaColumn, SchemaColumnHead, SchemaColumnId, SchemaRow, SchemaRowHead, SchemaRowId, SchemaSnapshot, UseGridOptions } from "./types/grid.types.js";
2
+ import type { GridHead, GridId } from "./types/head.types.js";
3
+ export type { CreateSubGridOptions, DimensionGrid, DimensionGridOptions, DimensionGridPosition, DimensionGridState, DimensionGridSubscriber, DimensionGridUpdateDiff, Grid, GridAxisIds, GridCellPosition, GridDimension, GridPersistAdapter, GridPersistOption, ParentDimensionGrid, ParentDimensionGridOptions, GridSchemaOptions, GridSetMode, GridState, GridStateCell, GridStateInitializer, GridSubscriber, GridUpdateAction, GridUpdateDiff, GridUpdateSource, GridUpdateType, GridUpsertHead, SubGrid, SubGridState, UseGridOptions, } from "./types/grid.types.js";
8
4
  export declare function grid<TState extends GridState<GridRecord, GridRecord, GridRecord>, TRowHeadIdKey extends keyof SchemaRow<TState> & string, TColumnHeadIdKey extends keyof SchemaColumn<TState> & string, TRowCellKey extends keyof SchemaCell<TState> & string, TColumnCellKey extends keyof SchemaCell<TState> & string>(source: GridStateInitializer<TState>, options: GridSchemaOptions<TState, TRowHeadIdKey, TColumnHeadIdKey, TRowCellKey, TColumnCellKey, SchemaSnapshot<TState, TRowHeadIdKey, TColumnHeadIdKey, TRowCellKey, TColumnCellKey>>): Grid<SchemaCellValue<TState, TRowHeadIdKey, TColumnHeadIdKey, TRowCellKey, TColumnCellKey>, SchemaRowId<TState, TRowHeadIdKey>, SchemaColumnId<TState, TColumnHeadIdKey>, SchemaRowHead<TState, TRowHeadIdKey>, SchemaColumnHead<TState, TColumnHeadIdKey>, SchemaCellValue<TState, TRowHeadIdKey, TColumnHeadIdKey, TRowCellKey, TColumnCellKey>, SchemaSnapshot<TState, TRowHeadIdKey, TColumnHeadIdKey, TRowCellKey, TColumnCellKey>>;
9
- export declare function createGridKey(rowId: string, columnId: string): string;
10
- export declare function useGrid<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, options?: UseGridOptions<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>): GridAxisIds<TRowId, TColumnId>;
5
+ export declare function grid<TState extends GridState<GridRecord, GridRecord, GridRecord>>(source: GridStateInitializer<TState>, options: GridSchemaOptions<TState, keyof SchemaRow<TState> & string, keyof SchemaColumn<TState> & string, keyof SchemaCell<TState> & string, keyof SchemaCell<TState> & string, BroadSchemaSnapshot<TState>>): Grid<SchemaCell<TState>, GridId, GridId, BroadSchemaRowHead<TState>, BroadSchemaColumnHead<TState>, SchemaCell<TState>, BroadSchemaSnapshot<TState>>;
6
+ export declare function createDimensionGrid<TCell, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid, initialCells: readonly (TCell | undefined)[], dimension: "rows", options?: ParentDimensionGridOptions<TCell, "rows", TParentGrid>): ParentDimensionGrid<TCell, "rows", TParentGrid>;
7
+ export declare function createDimensionGrid<TCell, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid, initialCells: readonly (TCell | undefined)[], dimension: "columns", options?: ParentDimensionGridOptions<TCell, "columns", TParentGrid>): ParentDimensionGrid<TCell, "columns", TParentGrid>;
8
+ export declare function createDimensionGrid<TCell, TDimension extends GridDimension = GridDimension, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid, initialCells: readonly (TCell | undefined)[], dimension: TDimension, options?: ParentDimensionGridOptions<TCell, TDimension, TParentGrid>): ParentDimensionGrid<TCell, TDimension, TParentGrid>;
9
+ export declare function createSubGrid<TCell, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid): ParentSubGrid<TCell, TParentGrid>;
10
+ export declare function createSubGrid<TCell, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid, initialCells: readonly GridStateCell<TCell, GridRowIdOf<TParentGrid>, GridColumnIdOf<TParentGrid>>[], options?: ParentSubGridOptions<TCell, TParentGrid>): ParentSubGrid<TCell, TParentGrid>;
11
+ export declare function createGridKey(rowId: GridId, columnId: GridId): string;
12
+ export declare function useGrid<TCell, TRowId extends GridId, TColumnId extends GridId, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>, TStateCell, TState extends GridState<TStateCell, TRowHead, TColumnHead>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>, options?: UseGridOptions<TCell, TRowId, TColumnId, TRowHead, TColumnHead, TStateCell, TState>): GridAxisIds<TRowId, TColumnId>;
11
13
  //# sourceMappingURL=grid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../core/grid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../core/grid.ts"],"names":[],"mappings":"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"}