zubin-grid 0.4.13 → 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 (47) hide show
  1. package/README.md +100 -19
  2. package/dist/core/cell.d.ts +6 -6
  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 +10 -9
  11. package/dist/core/grid.d.ts.map +1 -1
  12. package/dist/core/grid.js +388 -144
  13. package/dist/core/grid.js.map +1 -1
  14. package/dist/core/head.d.ts +9 -11
  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 +3 -3
  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/persist.d.ts.map +1 -1
  23. package/dist/core/persist.js +42 -41
  24. package/dist/core/persist.js.map +1 -1
  25. package/dist/core/tail.d.ts +7 -9
  26. package/dist/core/tail.d.ts.map +1 -1
  27. package/dist/core/tail.js +17 -19
  28. package/dist/core/tail.js.map +1 -1
  29. package/dist/core/types/grid.types.d.ts +69 -27
  30. package/dist/core/types/grid.types.d.ts.map +1 -1
  31. package/dist/core/types/head.types.d.ts +7 -6
  32. package/dist/core/types/head.types.d.ts.map +1 -1
  33. package/dist/core/types/tail.types.d.ts +3 -2
  34. package/dist/core/types/tail.types.d.ts.map +1 -1
  35. package/dist/index.d.ts +4 -4
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2 -2
  38. package/dist/index.js.map +1 -1
  39. package/package.json +1 -1
  40. package/dist/core/gridPersist.d.ts +0 -3
  41. package/dist/core/gridPersist.d.ts.map +0 -1
  42. package/dist/core/gridPersist.js +0 -2
  43. package/dist/core/gridPersist.js.map +0 -1
  44. package/dist/core/types/gridPersist.types.d.ts +0 -2
  45. package/dist/core/types/gridPersist.types.d.ts.map +0 -1
  46. package/dist/core/types/gridPersist.types.js +0 -2
  47. package/dist/core/types/gridPersist.types.js.map +0 -1
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,7 +136,7 @@ export function BudgetCell(props: {
134
136
  }
135
137
  ```
136
138
 
137
- `useCell(grid, rowId, columnId)` returns a React-friendly setter for that cell. Outside React, mutate store cells with `grid.upsertCell(...)` or `grid.upsertCells(...)` rather than a store-level `setValue(...)` helper.
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.
138
140
 
139
141
  ## Working with heads
140
142
 
@@ -308,6 +310,35 @@ const bootstrappedSalesGrid = grid<SalesSchema>({}, {
308
310
  })
309
311
  ```
310
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
+
311
342
  ## Non-reactive snapshots and upserts
312
343
 
313
344
  `grid.getState()` returns a plain snapshot of the current rows, columns, and cells without subscribing React to anything.
@@ -322,6 +353,50 @@ salesGrid.upsertCell({ rowId: 'west', columnId: 'mar', value: 21 })
322
353
 
323
354
  `getValue`, `getRowHead`, and `getColumnHead` are also non-reactive getters when you only need a targeted read.
324
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
+
325
400
  ## Sub grids
326
401
 
327
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.
@@ -334,17 +409,18 @@ type SalesNoteCell = {
334
409
  dirty?: boolean
335
410
  }
336
411
 
337
- const salesNotesGrid = createSubGrid<SalesNoteCell>(salesGrid, [], ['sales-notes'])
412
+ const salesNotesGrid = createSubGrid<SalesNoteCell>(salesGrid, [], {
413
+ persist: ['sales-notes'],
414
+ })
338
415
 
339
416
  function SalesNote(props: {
340
- rowId: 'north' | 'south'
341
- columnId: 'jan' | 'feb'
417
+ row: number
418
+ col: number
342
419
  }) {
343
- const [noteCell, setNoteCell] = useCell(
344
- salesNotesGrid,
345
- props.rowId,
346
- props.columnId,
347
- )
420
+ const [noteCell, setNoteCell] = useCell(salesNotesGrid, {
421
+ row: props.row,
422
+ col: props.col,
423
+ })
348
424
 
349
425
  return (
350
426
  <input
@@ -366,15 +442,16 @@ Sub grids behave like normal grids for cell and hook usage, with a few important
366
442
  - They inherit the parent grid's row ids, column ids, row heads, and column heads.
367
443
  - Parent row and column changes stay in sync, including upserts, label changes, order changes, `setGrid(...)`, and `clearGrid()`.
368
444
  - `useCell`, `useCellValue`, `useGrid`, `useRowHead`, `useColumnHead`, `useRowTail`, and `useColumnTail` all work with sub grids.
369
- - Persistence is independent, so a sub grid can keep its own snapshot with `persist: ['your-key']`.
445
+ - Persistence inherits from the parent when omitted, can be disabled with `persist: false`, or can use a custom key with `persist: ['your-key']`.
370
446
  - Row and column mutations called on a sub grid are forwarded to the parent grid.
371
447
  - `clearGrid()` on a sub grid clears the sub grid's own cells while keeping the inherited parent dimensions intact.
372
448
 
373
- You can also pass an options object when you want cells plus persistence together in a single argument:
449
+ Pass seeded cells as the second argument and persistence as the optional third argument:
374
450
 
375
451
  ```ts
376
- const salesFlagsGrid = createSubGrid<SalesNoteCell>(salesGrid, {
377
- cells: [{ rowId: 'north', columnId: 'jan', value: { note: 'Review' } }],
452
+ const salesFlagsGrid = createSubGrid<SalesNoteCell>(salesGrid, [
453
+ { rowId: 'north', columnId: 'jan', value: { note: 'Review' } },
454
+ ], {
378
455
  persist: ['sales-flags'],
379
456
  })
380
457
  ```
@@ -419,12 +496,15 @@ const persistedWithCustomAdapter = grid<SalesSchema>(initialState, {
419
496
  - `cell(initialValue)` - creates a reactive cell
420
497
  - `grid({ rows, columns, cells }, options)` - creates a grid from JSON-friendly state
421
498
  - `grid(() => ({ rows, columns, cells }), options)` - lazily creates typed grid state
422
- - `createSubGrid(parentGrid, cellsOrOptions?, persist?)` - creates a child grid with its own cells while inheriting the parent grid dimensions
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
423
501
 
424
502
  ### Cell hooks
425
503
 
426
504
  - `useCell(cell)`
427
- - `useCell(grid, rowId, columnId)`
505
+ - `useCell(grid, { row, col })`
506
+ - `useCell(rowDimensionGrid, { row })`
507
+ - `useCell(columnDimensionGrid, { col })`
428
508
  - `useCellValue(...)`
429
509
 
430
510
  ### Head hooks
@@ -465,6 +545,7 @@ Use the root package for most cases:
465
545
  ```ts
466
546
  import {
467
547
  cell,
548
+ createDimensionGrid,
468
549
  createSubGrid,
469
550
  grid,
470
551
  useCell,
@@ -1,12 +1,12 @@
1
1
  import type { Cell, CellInitializer } from "./types/cell.types.js";
2
- import type { Grid, GridPosition, GridState } from "./types/grid.types.js";
3
- import type { GridHead } from "./types/head.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
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,12 +1,13 @@
1
- import type { AnyGrid, BroadSchemaColumnHead, BroadSchemaRowHead, BroadSchemaSnapshot, Grid, GridAxisIds, GridColumnIdOf, GridPersistOption, GridRecord, GridRowIdOf, GridSchemaOptions, GridState, GridStateCell, ParentSubGrid, ParentSubGridOptions, ParentSubGridState, GridStateInitializer, SchemaCell, SchemaCellValue, SchemaColumn, SchemaColumnHead, SchemaColumnId, SchemaRow, SchemaRowHead, SchemaRowId, SchemaSnapshot, UseGridOptions } from "./types/grid.types.js";
2
- import type { GridHead } from "./types/head.types.js";
3
- export type { CreateSubGridOptions, Grid, GridAxisIds, GridPersistAdapter, GridPersistOption, GridPosition, GridRows, GridSchemaOptions, GridSetMode, GridState, GridStateCell, GridStateInitializer, GridSubscriber, GridUpdateAction, GridUpdateDiff, GridUpdateSource, GridUpdateType, GridUpsertHead, SubGrid, SubGridState, UseGridOptions, } from "./types/grid.types.js";
4
- 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";
5
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>>;
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>;
6
9
  export declare function createSubGrid<TCell, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid): ParentSubGrid<TCell, TParentGrid>;
7
- export declare function createSubGrid<TCell, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid, initialCells: readonly GridStateCell<TCell, GridRowIdOf<TParentGrid>, GridColumnIdOf<TParentGrid>>[], persist?: GridPersistOption<ParentSubGridState<TCell, TParentGrid>>): ParentSubGrid<TCell, TParentGrid>;
8
- export declare function createSubGrid<TCell, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid, persist: GridPersistOption<ParentSubGridState<TCell, TParentGrid>>): ParentSubGrid<TCell, TParentGrid>;
9
- export declare function createSubGrid<TCell, TParentGrid extends AnyGrid = AnyGrid>(parentGrid: TParentGrid, options: ParentSubGridOptions<TCell, TParentGrid>): ParentSubGrid<TCell, TParentGrid>;
10
- export declare function createGridKey(rowId: string, columnId: string): string;
11
- 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>;
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>;
12
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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"}