zubin-grid 0.4.11 → 0.4.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 (57) hide show
  1. package/README.md +61 -0
  2. package/dist/core/cell.d.ts +4 -4
  3. package/dist/core/cell.d.ts.map +1 -1
  4. package/dist/core/cell.js.map +1 -1
  5. package/dist/core/grid.d.ts +7 -6
  6. package/dist/core/grid.d.ts.map +1 -1
  7. package/dist/core/grid.js +283 -1
  8. package/dist/core/grid.js.map +1 -1
  9. package/dist/core/gridPersist.d.ts +2 -7
  10. package/dist/core/gridPersist.d.ts.map +1 -1
  11. package/dist/core/gridPersist.js +1 -207
  12. package/dist/core/gridPersist.js.map +1 -1
  13. package/dist/core/head.d.ts +4 -4
  14. package/dist/core/head.d.ts.map +1 -1
  15. package/dist/core/helpers.d.ts +2 -2
  16. package/dist/core/helpers.d.ts.map +1 -1
  17. package/dist/core/persist.d.ts +8 -0
  18. package/dist/core/persist.d.ts.map +1 -0
  19. package/dist/core/persist.js +208 -0
  20. package/dist/core/persist.js.map +1 -0
  21. package/dist/core/tail.d.ts +5 -5
  22. package/dist/core/tail.d.ts.map +1 -1
  23. package/dist/core/types/cell.types.d.ts.map +1 -0
  24. package/dist/core/{cell.types.js.map → types/cell.types.js.map} +1 -1
  25. package/dist/core/{grid.types.d.ts → types/grid.types.d.ts} +26 -1
  26. package/dist/core/types/grid.types.d.ts.map +1 -0
  27. package/dist/core/{grid.types.js.map → types/grid.types.js.map} +1 -1
  28. package/dist/core/types/gridPersist.types.d.ts +2 -0
  29. package/dist/core/types/gridPersist.types.d.ts.map +1 -0
  30. package/dist/core/types/gridPersist.types.js.map +1 -0
  31. package/dist/core/types/head.types.d.ts.map +1 -0
  32. package/dist/core/{head.types.js.map → types/head.types.js.map} +1 -1
  33. package/dist/core/{gridPersist.types.d.ts → types/persist.types.d.ts} +1 -1
  34. package/dist/core/types/persist.types.d.ts.map +1 -0
  35. package/dist/core/types/persist.types.js +2 -0
  36. package/dist/core/types/persist.types.js.map +1 -0
  37. package/dist/core/types/tail.types.d.ts.map +1 -0
  38. package/dist/core/{tail.types.js.map → types/tail.types.js.map} +1 -1
  39. package/dist/index.d.ts +5 -5
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +1 -1
  42. package/dist/index.js.map +1 -1
  43. package/package.json +5 -1
  44. package/dist/core/cell.types.d.ts.map +0 -1
  45. package/dist/core/grid.types.d.ts.map +0 -1
  46. package/dist/core/gridPersist.types.d.ts.map +0 -1
  47. package/dist/core/gridPersist.types.js.map +0 -1
  48. package/dist/core/head.types.d.ts.map +0 -1
  49. package/dist/core/tail.types.d.ts.map +0 -1
  50. /package/dist/core/{cell.types.d.ts → types/cell.types.d.ts} +0 -0
  51. /package/dist/core/{cell.types.js → types/cell.types.js} +0 -0
  52. /package/dist/core/{grid.types.js → types/grid.types.js} +0 -0
  53. /package/dist/core/{gridPersist.types.js → types/gridPersist.types.js} +0 -0
  54. /package/dist/core/{head.types.d.ts → types/head.types.d.ts} +0 -0
  55. /package/dist/core/{head.types.js → types/head.types.js} +0 -0
  56. /package/dist/core/{tail.types.d.ts → types/tail.types.d.ts} +0 -0
  57. /package/dist/core/{tail.types.js → types/tail.types.js} +0 -0
package/README.md CHANGED
@@ -134,6 +134,8 @@ export function BudgetCell(props: {
134
134
  }
135
135
  ```
136
136
 
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.
138
+
137
139
  ## Working with heads
138
140
 
139
141
  Headers are stored separately from cell values, so labels and order can change without rebuilding the grid.
@@ -320,6 +322,63 @@ salesGrid.upsertCell({ rowId: 'west', columnId: 'mar', value: 21 })
320
322
 
321
323
  `getValue`, `getRowHead`, and `getColumnHead` are also non-reactive getters when you only need a targeted read.
322
324
 
325
+ ## Sub grids
326
+
327
+ 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.
328
+
329
+ ```ts
330
+ import { createSubGrid, useCell } from 'zubin-grid'
331
+
332
+ type SalesNoteCell = {
333
+ note: string
334
+ dirty?: boolean
335
+ }
336
+
337
+ const salesNotesGrid = createSubGrid<SalesNoteCell>(salesGrid, [], ['sales-notes'])
338
+
339
+ function SalesNote(props: {
340
+ rowId: 'north' | 'south'
341
+ columnId: 'jan' | 'feb'
342
+ }) {
343
+ const [noteCell, setNoteCell] = useCell(
344
+ salesNotesGrid,
345
+ props.rowId,
346
+ props.columnId,
347
+ )
348
+
349
+ return (
350
+ <input
351
+ value={noteCell.note}
352
+ onChange={(event) =>
353
+ setNoteCell({
354
+ ...noteCell,
355
+ note: event.target.value,
356
+ dirty: true,
357
+ })
358
+ }
359
+ />
360
+ )
361
+ }
362
+ ```
363
+
364
+ Sub grids behave like normal grids for cell and hook usage, with a few important rules:
365
+
366
+ - They inherit the parent grid's row ids, column ids, row heads, and column heads.
367
+ - Parent row and column changes stay in sync, including upserts, label changes, order changes, `setGrid(...)`, and `clearGrid()`.
368
+ - `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']`.
370
+ - Row and column mutations called on a sub grid are forwarded to the parent grid.
371
+ - `clearGrid()` on a sub grid clears the sub grid's own cells while keeping the inherited parent dimensions intact.
372
+
373
+ You can also pass an options object when you want cells plus persistence together in a single argument:
374
+
375
+ ```ts
376
+ const salesFlagsGrid = createSubGrid<SalesNoteCell>(salesGrid, {
377
+ cells: [{ rowId: 'north', columnId: 'jan', value: { note: 'Review' } }],
378
+ persist: ['sales-flags'],
379
+ })
380
+ ```
381
+
323
382
  ## Persistence
324
383
 
325
384
  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,6 +419,7 @@ const persistedWithCustomAdapter = grid<SalesSchema>(initialState, {
360
419
  - `cell(initialValue)` - creates a reactive cell
361
420
  - `grid({ rows, columns, cells }, options)` - creates a grid from JSON-friendly state
362
421
  - `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
363
423
 
364
424
  ### Cell hooks
365
425
 
@@ -405,6 +465,7 @@ Use the root package for most cases:
405
465
  ```ts
406
466
  import {
407
467
  cell,
468
+ createSubGrid,
408
469
  grid,
409
470
  useCell,
410
471
  useCellValue,
@@ -1,7 +1,7 @@
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 { Grid, GridPosition, GridState } from "./types/grid.types.js";
3
+ import type { GridHead } 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
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];
@@ -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":"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"}
@@ -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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"}
@@ -1,11 +1,12 @@
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>>;
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";
7
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>>;
8
5
  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>>;
6
+ 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>;
9
10
  export declare function createGridKey(rowId: string, columnId: string): string;
10
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>;
11
12
  //# sourceMappingURL=grid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../core/grid.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,IAAI,EACJ,WAAW,EAIX,UAAU,EACV,iBAAiB,EAEjB,SAAS,EAGT,oBAAoB,EAIpB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACf,MAAM,iBAAiB,CAAC;AAWzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,YAAY,EACV,IAAI,EACJ,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,KAAK,kBAAkB,CAAC,MAAM,SAAS,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,IAClF,SAAS,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEvC,KAAK,qBAAqB,CAAC,MAAM,SAAS,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,IACrF,YAAY,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAE1C,KAAK,mBAAmB,CAAC,MAAM,SAAS,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,IACnF,SAAS,CACP,UAAU,CAAC,MAAM,CAAC,EAClB,kBAAkB,CAAC,MAAM,CAAC,EAC1B,qBAAqB,CAAC,MAAM,CAAC,CAC9B,CAAC;AAMJ,wBAAgB,IAAI,CAAC,MAAM,SAAS,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAC/E,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,EACpC,OAAO,EAAE,iBAAiB,CACxB,MAAM,EACN,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,EAChC,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,EACnC,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,EACjC,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,EACjC,mBAAmB,CAAC,MAAM,CAAC,CAC5B,GACA,IAAI,CACL,UAAU,CAAC,MAAM,CAAC,EAClB,MAAM,EACN,MAAM,EACN,kBAAkB,CAAC,MAAM,CAAC,EAC1B,qBAAqB,CAAC,MAAM,CAAC,EAC7B,UAAU,CAAC,MAAM,CAAC,EAClB,mBAAmB,CAAC,MAAM,CAAC,CAC5B,CAAC;AAEF,wBAAgB,IAAI,CAClB,MAAM,SAAS,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAC5D,aAAa,SAAS,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,EACtD,gBAAgB,SAAS,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,EAC5D,WAAW,SAAS,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,EACrD,cAAc,SAAS,MAAM,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,EAExD,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,EACpC,OAAO,EAAE,iBAAiB,CACxB,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,CACrF,GACA,IAAI,CACL,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,EACrF,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAClC,cAAc,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,EACpC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC1C,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,EACrF,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,CACrF,CAAC;AAgmCF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAE5D;AAED,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,OAAO,CAAC,EAAE,cAAc,CACtB,KAAK,EACL,MAAM,EACN,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,MAAM,CACP,GACA,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAyChC"}
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../core/grid.ts"],"names":[],"mappings":"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"}
package/dist/core/grid.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { useCallback, useEffect, useRef, useSyncExternalStore } from "react";
2
2
  import { cell } from "./cell.js";
3
- import { createGridPersistController } from "./gridPersist.js";
3
+ import { createGridPersistController, defaultGridPersistAdapter, } from "./gridPersist.js";
4
4
  import { assertHeadId, createHeadCellMap, createHeadOrderIndex, getHeadCell, getOrderedHeads, } from "./head.js";
5
5
  import { createTailCellMap, getTailCell, setTailCellResult } from "./tail.js";
6
6
  export function grid(input, options) {
@@ -13,6 +13,126 @@ export function grid(input, options) {
13
13
  const stateAdapter = createSchemaStateAdapter(rowCellKey, columnCellKey);
14
14
  return createGridStore(normalizedRowHeads, normalizedColumnHeads, createGridInitialCellsFromState(initialState.cells, stateAdapter), stateAdapter, schemaOptions.persist);
15
15
  }
16
+ export function createSubGrid(parentGrid, cellsOrOptionsOrPersist, persist) {
17
+ const { initialCells, persistOption } = resolveCreateSubGridArgs(cellsOrOptionsOrPersist, persist);
18
+ const parentState = parentGrid.getState();
19
+ const stateAdapter = createGridStateCellAdapter();
20
+ const resolvedInitialCells = assertGridStateCellsWithinAxes(initialCells, parentState.rows, parentState.columns, "Sub grid cells");
21
+ const subGridStore = createGridStore(parentState.rows, parentState.columns, createGridInitialCellsFromState(resolvedInitialCells, stateAdapter), stateAdapter, createSubGridPersistOption(parentGrid, persistOption));
22
+ const getSubGridState = () => {
23
+ const nextParentState = parentGrid.getState();
24
+ return createSubGridState(nextParentState.rows, nextParentState.columns, subGridStore.getState().cells);
25
+ };
26
+ const syncAxesFromParent = () => {
27
+ const nextParentState = parentGrid.getState();
28
+ const currentSubGridState = subGridStore.getState();
29
+ const nextCells = filterGridStateCellsToAxes(currentSubGridState.cells, nextParentState.rows, nextParentState.columns);
30
+ if (haveSameHeadSnapshots(currentSubGridState.rows, nextParentState.rows) &&
31
+ haveSameHeadSnapshots(currentSubGridState.columns, nextParentState.columns) &&
32
+ nextCells.length === currentSubGridState.cells.length) {
33
+ return;
34
+ }
35
+ subGridStore.setGrid({
36
+ rows: nextParentState.rows,
37
+ columns: nextParentState.columns,
38
+ cells: nextCells,
39
+ }, "replace");
40
+ };
41
+ void parentGrid.subscribeGrid((_currentParentGrid, diff) => {
42
+ if (diff.type === "row-head" && diff.rows?.length) {
43
+ diff.rows.forEach((rowHead) => {
44
+ subGridStore.updateRowHead(rowHead.id, rowHead);
45
+ });
46
+ return;
47
+ }
48
+ if (diff.type === "column-head" && diff.columns?.length) {
49
+ diff.columns.forEach((columnHead) => {
50
+ subGridStore.updateColumnHead(columnHead.id, columnHead);
51
+ });
52
+ return;
53
+ }
54
+ if (diff.type === "rows" && diff.rows?.length) {
55
+ subGridStore.upsertRows(diff.rows);
56
+ return;
57
+ }
58
+ if (diff.type === "columns" && diff.columns?.length) {
59
+ subGridStore.upsertColumns(diff.columns);
60
+ return;
61
+ }
62
+ if (diff.type === "grid" && didGridDiffAffectAxes(diff)) {
63
+ syncAxesFromParent();
64
+ }
65
+ });
66
+ const subGridApi = Object.create(subGridStore);
67
+ Object.defineProperties(subGridApi, {
68
+ rowHeaders: {
69
+ enumerable: true,
70
+ configurable: true,
71
+ get: () => parentGrid.rowHeaders,
72
+ },
73
+ colHeaders: {
74
+ enumerable: true,
75
+ configurable: true,
76
+ get: () => parentGrid.colHeaders,
77
+ },
78
+ });
79
+ subGridApi.getState = getSubGridState;
80
+ subGridApi.getRowHead = (rowId) => parentGrid.getRowHead(rowId);
81
+ subGridApi.getColumnHead = (columnId) => parentGrid.getColumnHead(columnId);
82
+ subGridApi.updateRowHead = (rowId, nextRowHead) => {
83
+ parentGrid.updateRowHead(rowId, nextRowHead);
84
+ };
85
+ subGridApi.updateColumnHead = (columnId, nextColumnHead) => {
86
+ parentGrid.updateColumnHead(columnId, nextColumnHead);
87
+ };
88
+ subGridApi.upsertRow = (nextRowHead) => {
89
+ parentGrid.upsertRow(nextRowHead);
90
+ };
91
+ subGridApi.upsertRows = (nextRowHeads) => {
92
+ parentGrid.upsertRows(nextRowHeads);
93
+ };
94
+ subGridApi.upsertColumn = (nextColumnHead) => {
95
+ parentGrid.upsertColumn(nextColumnHead);
96
+ };
97
+ subGridApi.upsertColumns = (nextColumnHeads) => {
98
+ parentGrid.upsertColumns(nextColumnHeads);
99
+ };
100
+ subGridApi.subscribeRowHead = (rowId, callback) => parentGrid.subscribeRowHead(rowId, callback);
101
+ subGridApi.subscribeColumnHead = (columnId, callback) => parentGrid.subscribeColumnHead(columnId, callback);
102
+ subGridApi.setGrid = (nextState, mode = "replace") => {
103
+ const patch = normalizeGridStatePatchInput(nextState);
104
+ const currentParentState = parentGrid.getState();
105
+ if (mode === "update") {
106
+ if (patch.rows?.length) {
107
+ parentGrid.upsertRows(patch.rows);
108
+ }
109
+ if (patch.columns?.length) {
110
+ parentGrid.upsertColumns(patch.columns);
111
+ }
112
+ if (patch.cells?.length) {
113
+ subGridStore.setGrid({
114
+ rows: currentParentState.rows,
115
+ columns: currentParentState.columns,
116
+ cells: assertGridStateCellsWithinAxes(patch.cells, currentParentState.rows, currentParentState.columns, "Sub grid cells"),
117
+ }, "update");
118
+ }
119
+ return;
120
+ }
121
+ if ((patch.rows && !haveSameHeadSnapshots(patch.rows, currentParentState.rows)) ||
122
+ (patch.columns && !haveSameHeadSnapshots(patch.columns, currentParentState.columns))) {
123
+ throw new Error("Sub grids inherit rows and columns from their parent. Replace parent dimensions on the parent grid instead.");
124
+ }
125
+ subGridStore.setGrid({
126
+ rows: currentParentState.rows,
127
+ columns: currentParentState.columns,
128
+ cells: assertGridStateCellsWithinAxes(patch.cells ?? [], currentParentState.rows, currentParentState.columns, "Sub grid cells"),
129
+ }, "replace");
130
+ };
131
+ subGridApi.clearGrid = () => {
132
+ subGridStore.clearCells();
133
+ };
134
+ return subGridApi;
135
+ }
16
136
  function createGridStore(initialRows, initialColumns, initialCells, stateAdapter, persist) {
17
137
  assertUniqueHeadIds(initialRows, "row");
18
138
  assertUniqueHeadIds(initialColumns, "column");
@@ -803,6 +923,9 @@ function normalizeGridStateInput(value) {
803
923
  if (!value || typeof value !== "object") {
804
924
  throw new Error("Grid state updates must be objects.");
805
925
  }
926
+ if (Array.isArray(value)) {
927
+ throw new Error("Grid state updates must use { rows, columns, cells } objects, not arrays.");
928
+ }
806
929
  const partialState = value;
807
930
  const { cells = [], rows = [], columns = [] } = partialState;
808
931
  if (!Array.isArray(cells) || !Array.isArray(rows) || !Array.isArray(columns)) {
@@ -818,6 +941,9 @@ function normalizeGridStatePatchInput(value) {
818
941
  if (!value || typeof value !== "object") {
819
942
  throw new Error("Grid state updates must be objects.");
820
943
  }
944
+ if (Array.isArray(value)) {
945
+ throw new Error("Grid state updates must use { rows, columns, cells } objects, not arrays.");
946
+ }
821
947
  const partialState = value;
822
948
  const readOptionalArray = (key, arrayValue) => {
823
949
  if (arrayValue === undefined) {
@@ -886,6 +1012,9 @@ function normalizeGridState(value) {
886
1012
  if (!value || typeof value !== "object") {
887
1013
  throw new Error("Grid state initializer must return an object.");
888
1014
  }
1015
+ if (Array.isArray(value)) {
1016
+ throw new Error("Legacy matrix grid input has been removed. Pass a schema object with rows, columns, and cells instead.");
1017
+ }
889
1018
  const partialState = value;
890
1019
  const { cells = [], rows = [], columns = [] } = partialState;
891
1020
  if (!Array.isArray(cells) || !Array.isArray(rows) || !Array.isArray(columns)) {
@@ -998,4 +1127,157 @@ function readGridHeadLabel(head, id) {
998
1127
  }
999
1128
  return id;
1000
1129
  }
1130
+ function resolveCreateSubGridArgs(cellsOrOptionsOrPersist, persist) {
1131
+ if (persist) {
1132
+ return {
1133
+ initialCells: readCreateSubGridCells(cellsOrOptionsOrPersist),
1134
+ persistOption: persist,
1135
+ };
1136
+ }
1137
+ if (!cellsOrOptionsOrPersist) {
1138
+ return {
1139
+ initialCells: [],
1140
+ persistOption: undefined,
1141
+ };
1142
+ }
1143
+ if (isCreateSubGridOptions(cellsOrOptionsOrPersist)) {
1144
+ const subGridOptions = cellsOrOptionsOrPersist;
1145
+ return {
1146
+ initialCells: subGridOptions.cells ?? [],
1147
+ persistOption: subGridOptions.persist,
1148
+ };
1149
+ }
1150
+ if (isGridPersistOption(cellsOrOptionsOrPersist)) {
1151
+ return {
1152
+ initialCells: [],
1153
+ persistOption: cellsOrOptionsOrPersist,
1154
+ };
1155
+ }
1156
+ return {
1157
+ initialCells: cellsOrOptionsOrPersist,
1158
+ persistOption: undefined,
1159
+ };
1160
+ }
1161
+ function readCreateSubGridCells(value) {
1162
+ if (!value || isGridPersistOption(value)) {
1163
+ return [];
1164
+ }
1165
+ if (isCreateSubGridOptions(value)) {
1166
+ return (value
1167
+ .cells ?? []);
1168
+ }
1169
+ return value;
1170
+ }
1171
+ function isCreateSubGridOptions(value) {
1172
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1173
+ }
1174
+ function isGridPersistOption(value) {
1175
+ return Array.isArray(value) && value.length > 0 && typeof value[0] === "string";
1176
+ }
1177
+ function createGridStateCellAdapter() {
1178
+ return {
1179
+ deserializeCell: (stateCell) => ({
1180
+ rowId: stateCell.rowId,
1181
+ columnId: stateCell.columnId,
1182
+ value: stateCell.value,
1183
+ }),
1184
+ serializeCell: (rowId, columnId, value) => ({
1185
+ rowId,
1186
+ columnId,
1187
+ value,
1188
+ }),
1189
+ };
1190
+ }
1191
+ function createSubGridPersistOption(parentGrid, persist) {
1192
+ if (!persist) {
1193
+ return undefined;
1194
+ }
1195
+ const [storageKey, adapter] = persist;
1196
+ const resolvedAdapter = adapter ??
1197
+ defaultGridPersistAdapter;
1198
+ return [
1199
+ storageKey,
1200
+ {
1201
+ get: async (nextStorageKey) => {
1202
+ const persistedState = await Promise.resolve(resolvedAdapter.get(nextStorageKey));
1203
+ if (persistedState === null) {
1204
+ return null;
1205
+ }
1206
+ try {
1207
+ const normalizedState = normalizeGridStateInput(persistedState);
1208
+ const parentState = parentGrid.getState();
1209
+ return createSubGridState(parentState.rows, parentState.columns, normalizedState.cells);
1210
+ }
1211
+ catch {
1212
+ return null;
1213
+ }
1214
+ },
1215
+ set: (nextStorageKey, nextState) => {
1216
+ const parentState = parentGrid.getState();
1217
+ return resolvedAdapter.set(nextStorageKey, createSubGridState(parentState.rows, parentState.columns, nextState.cells));
1218
+ },
1219
+ remove: (nextStorageKey) => resolvedAdapter.remove(nextStorageKey),
1220
+ },
1221
+ ];
1222
+ }
1223
+ function createSubGridState(rows, columns, cells) {
1224
+ return {
1225
+ rows,
1226
+ columns,
1227
+ cells: filterGridStateCellsToAxes(cells, rows, columns),
1228
+ };
1229
+ }
1230
+ function assertGridStateCellsWithinAxes(cells, rows, columns, contextLabel) {
1231
+ const rowIds = new Set(rows.map((rowHead) => rowHead.id));
1232
+ const columnIds = new Set(columns.map((columnHead) => columnHead.id));
1233
+ cells.forEach((currentCell) => {
1234
+ if (!rowIds.has(currentCell.rowId)) {
1235
+ throw new Error(`${contextLabel} must reference an existing parent row header. Missing row "${currentCell.rowId}".`);
1236
+ }
1237
+ if (!columnIds.has(currentCell.columnId)) {
1238
+ throw new Error(`${contextLabel} must reference an existing parent column header. Missing column "${currentCell.columnId}".`);
1239
+ }
1240
+ });
1241
+ return cells;
1242
+ }
1243
+ function filterGridStateCellsToAxes(cells, rows, columns) {
1244
+ const rowIds = new Set(rows.map((rowHead) => rowHead.id));
1245
+ const columnIds = new Set(columns.map((columnHead) => columnHead.id));
1246
+ return cells.filter((currentCell) => rowIds.has(currentCell.rowId) && columnIds.has(currentCell.columnId));
1247
+ }
1248
+ function didGridDiffAffectAxes(diff) {
1249
+ return (!haveSameHeadSnapshots(diff.rows, diff.previousRows) ||
1250
+ !haveSameHeadSnapshots(diff.columns, diff.previousColumns));
1251
+ }
1252
+ function haveSameHeadSnapshots(leftHeads, rightHeads) {
1253
+ if (leftHeads === rightHeads) {
1254
+ return true;
1255
+ }
1256
+ if (!leftHeads || !rightHeads || leftHeads.length !== rightHeads.length) {
1257
+ return false;
1258
+ }
1259
+ return leftHeads.every((leftHead, index) => {
1260
+ const rightHead = rightHeads[index];
1261
+ if (leftHead === undefined || rightHead === undefined) {
1262
+ return leftHead === rightHead;
1263
+ }
1264
+ return haveSameShallowRecord(leftHead, rightHead);
1265
+ });
1266
+ }
1267
+ function haveSameShallowRecord(leftRecord, rightRecord) {
1268
+ if (Object.is(leftRecord, rightRecord)) {
1269
+ return true;
1270
+ }
1271
+ const leftKeys = Object.keys(leftRecord);
1272
+ const rightKeys = Object.keys(rightRecord);
1273
+ if (leftKeys.length !== rightKeys.length) {
1274
+ return false;
1275
+ }
1276
+ return leftKeys.every((key) => {
1277
+ if (!(key in rightRecord)) {
1278
+ return false;
1279
+ }
1280
+ return Object.is(leftRecord[key], rightRecord[key]);
1281
+ });
1282
+ }
1001
1283
  //# sourceMappingURL=grid.js.map