zubin-grid 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -24
- package/dist/core/cell.d.ts +8 -16
- package/dist/core/cell.d.ts.map +1 -1
- package/dist/core/cell.js.map +1 -1
- package/dist/core/cell.types.d.ts +10 -0
- package/dist/core/cell.types.d.ts.map +1 -0
- package/dist/core/cell.types.js +2 -0
- package/dist/core/cell.types.js.map +1 -0
- package/dist/core/grid.d.ts +11 -53
- package/dist/core/grid.d.ts.map +1 -1
- package/dist/core/grid.js +397 -93
- package/dist/core/grid.js.map +1 -1
- package/dist/core/grid.types.d.ts +93 -0
- package/dist/core/grid.types.d.ts.map +1 -0
- package/dist/core/grid.types.js +2 -0
- package/dist/core/grid.types.js.map +1 -0
- package/dist/core/gridPersist.d.ts +8 -0
- package/dist/core/gridPersist.d.ts.map +1 -0
- package/dist/core/gridPersist.js +208 -0
- package/dist/core/gridPersist.js.map +1 -0
- package/dist/core/gridPersist.types.d.ts +19 -0
- package/dist/core/gridPersist.types.d.ts.map +1 -0
- package/dist/core/gridPersist.types.js +2 -0
- package/dist/core/gridPersist.types.js.map +1 -0
- package/dist/core/head.d.ts +8 -26
- package/dist/core/head.d.ts.map +1 -1
- package/dist/core/head.js.map +1 -1
- package/dist/core/head.types.d.ts +22 -0
- package/dist/core/head.types.d.ts.map +1 -0
- package/dist/core/head.types.js +2 -0
- package/dist/core/head.types.js.map +1 -0
- package/dist/core/tail.d.ts +9 -21
- package/dist/core/tail.d.ts.map +1 -1
- package/dist/core/tail.js.map +1 -1
- package/dist/core/tail.types.d.ts +15 -0
- package/dist/core/tail.types.d.ts.map +1 -0
- package/dist/core/tail.types.js +2 -0
- package/dist/core/tail.types.js.map +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +11 -3
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ A lightweight grid state manager for React and TypeScript.
|
|
|
10
10
|
- Typed grid API for rows, columns, heads, and tails
|
|
11
11
|
- React hooks for reading and updating state
|
|
12
12
|
- Row and column reordering helpers
|
|
13
|
-
- Support for
|
|
13
|
+
- Support for matrix-style input and JSON-friendly state
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
@@ -20,6 +20,22 @@ npm install zubin-grid react
|
|
|
20
20
|
|
|
21
21
|
> `react` is a peer dependency. Hooks are designed for React 18+.
|
|
22
22
|
|
|
23
|
+
## Local example app
|
|
24
|
+
|
|
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.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install
|
|
29
|
+
npm run example
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Useful companion scripts:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm run example:check
|
|
36
|
+
npm run example:build
|
|
37
|
+
```
|
|
38
|
+
|
|
23
39
|
## Quick start
|
|
24
40
|
|
|
25
41
|
Create a grid from a 2D array of cells:
|
|
@@ -149,33 +165,108 @@ export function GridToolbar() {
|
|
|
149
165
|
}
|
|
150
166
|
```
|
|
151
167
|
|
|
152
|
-
## Creating a grid from
|
|
168
|
+
## Creating a grid from JSON-friendly state
|
|
153
169
|
|
|
154
|
-
If your data already exists as records, you can
|
|
170
|
+
If your data already exists as JSON-like records, you can create the grid from a single schema object.
|
|
155
171
|
|
|
156
172
|
```ts
|
|
157
173
|
import { grid } from 'zubin-grid'
|
|
158
174
|
|
|
159
|
-
|
|
160
|
-
{ id:
|
|
161
|
-
{ id:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
type SalesSchema = {
|
|
176
|
+
rows: Array<{ id: string; label: string }>
|
|
177
|
+
columns: Array<{ id: string; label: string }>
|
|
178
|
+
cells: Array<{ rowId: string; columnId: string; value: number }>
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const initialState: SalesSchema = {
|
|
182
|
+
rows: [
|
|
183
|
+
{ id: 'north', label: 'North' },
|
|
184
|
+
{ id: 'south', label: 'South' },
|
|
185
|
+
],
|
|
186
|
+
columns: [
|
|
187
|
+
{ id: 'jan', label: 'January' },
|
|
188
|
+
{ id: 'feb', label: 'February' },
|
|
189
|
+
],
|
|
190
|
+
cells: [
|
|
191
|
+
{ rowId: 'north', columnId: 'jan', value: 12 },
|
|
192
|
+
{ rowId: 'north', columnId: 'feb', value: 9 },
|
|
193
|
+
{ rowId: 'south', columnId: 'jan', value: 7 },
|
|
194
|
+
{ rowId: 'south', columnId: 'feb', value: 15 },
|
|
195
|
+
],
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const salesGrid = grid<SalesSchema>(initialState, {
|
|
199
|
+
rowHeaders: ['id', 'rowId'],
|
|
200
|
+
colHeaders: ['id', 'columnId'],
|
|
201
|
+
})
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
You can also lazily create that state with a function, which is handy when you want explicit typing during bootstrap:
|
|
205
|
+
|
|
206
|
+
```ts
|
|
207
|
+
const emptySalesGrid = grid<SalesSchema>(() => ({
|
|
208
|
+
rows: [],
|
|
209
|
+
columns: [],
|
|
210
|
+
cells: [],
|
|
211
|
+
}), {
|
|
212
|
+
rowHeaders: ['id', 'rowId'],
|
|
213
|
+
colHeaders: ['id', 'columnId'],
|
|
214
|
+
})
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
You can keep the initializer even lighter and let missing arrays default to `[]`:
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
const bootstrappedSalesGrid = grid<SalesSchema>({}, {
|
|
221
|
+
rowHeaders: ['id', 'rowId'],
|
|
222
|
+
colHeaders: ['id', 'columnId'],
|
|
223
|
+
})
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Non-reactive snapshots and upserts
|
|
227
|
+
|
|
228
|
+
`grid.getState()` returns a plain snapshot of the current rows, columns, and cells without subscribing React to anything.
|
|
229
|
+
|
|
230
|
+
```ts
|
|
231
|
+
const snapshot = salesGrid.getState()
|
|
232
|
+
|
|
233
|
+
salesGrid.upsertRow({ id: 'west', label: 'West' })
|
|
234
|
+
salesGrid.upsertColumn({ id: 'mar', label: 'March' })
|
|
235
|
+
salesGrid.upsertCell({ rowId: 'west', columnId: 'mar', value: 21 })
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
`getValue`, `getRowHead`, and `getColumnHead` are also non-reactive getters when you only need a targeted read.
|
|
239
|
+
|
|
240
|
+
## Persistence
|
|
241
|
+
|
|
242
|
+
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.
|
|
243
|
+
|
|
244
|
+
```ts
|
|
245
|
+
const persistedSalesGrid = grid<SalesSchema>(initialState, {
|
|
246
|
+
rowHeaders: ['id', 'rowId'],
|
|
247
|
+
colHeaders: ['id', 'columnId'],
|
|
248
|
+
persist: ['sales-grid'],
|
|
249
|
+
})
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Custom adapters receive `get`, `set`, and `remove` methods:
|
|
253
|
+
|
|
254
|
+
```ts
|
|
255
|
+
const persistedWithCustomAdapter = grid<SalesSchema>(initialState, {
|
|
256
|
+
rowHeaders: ['id', 'rowId'],
|
|
257
|
+
colHeaders: ['id', 'columnId'],
|
|
258
|
+
persist: [
|
|
259
|
+
'sales-grid',
|
|
260
|
+
{
|
|
261
|
+
get: async (key) => window.myStore.get(key) ?? null,
|
|
262
|
+
set: async (key, value) => {
|
|
263
|
+
await window.myStore.set(key, value)
|
|
264
|
+
},
|
|
265
|
+
remove: async (key) => {
|
|
266
|
+
await window.myStore.remove(key)
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
],
|
|
179
270
|
})
|
|
180
271
|
```
|
|
181
272
|
|
|
@@ -184,7 +275,9 @@ const salesGrid = grid(records, {
|
|
|
184
275
|
### Store creators
|
|
185
276
|
|
|
186
277
|
- `cell(initialValue)` - creates a reactive cell
|
|
187
|
-
- `grid(cells, options)` - creates a grid from a 2D matrix
|
|
278
|
+
- `grid(cells, options)` - creates a grid from a 2D matrix
|
|
279
|
+
- `grid({ rows, columns, cells }, options)` - creates a grid from JSON-friendly state
|
|
280
|
+
- `grid(() => ({ rows, columns, cells }), options)` - lazily creates typed grid state
|
|
188
281
|
|
|
189
282
|
### Cell hooks
|
|
190
283
|
|
|
@@ -206,6 +299,11 @@ const salesGrid = grid(records, {
|
|
|
206
299
|
|
|
207
300
|
- `useGrid(grid)`
|
|
208
301
|
- `createGridKey(rowId, columnId)`
|
|
302
|
+
- `grid.getState()`
|
|
303
|
+
- `grid.upsertRow(...)`
|
|
304
|
+
- `grid.upsertColumn(...)`
|
|
305
|
+
- `grid.upsertCell(...)`
|
|
306
|
+
- `grid.upsertCells(...)`
|
|
209
307
|
|
|
210
308
|
## Imports
|
|
211
309
|
|
package/dist/core/cell.d.ts
CHANGED
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
type
|
|
5
|
-
export type Updater<TValue> = TValue | ((currentValue: TValue) => TValue);
|
|
6
|
-
export interface Cell<TCell> {
|
|
7
|
-
get: () => TCell;
|
|
8
|
-
set: (newValue: TCell) => void;
|
|
9
|
-
subscribe: (callback: Subscriber) => () => void;
|
|
10
|
-
_subscribers: () => number;
|
|
11
|
-
}
|
|
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";
|
|
12
5
|
export declare function cell<TCell>(initialValue: TCell | CellInitializer<TCell>): Cell<TCell>;
|
|
13
6
|
export declare function useCell<TCell>(currentCell: Cell<TCell>): readonly [TCell, (newValue: TCell) => void];
|
|
14
|
-
export declare function useCell<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead>, position: GridPosition<TColumnId, TRowId>): readonly [TCell, (newValue: TCell) => void];
|
|
15
|
-
export declare function useCell<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead>, rowId: TRowId, columnId: TColumnId): 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];
|
|
16
9
|
export declare function useCellValue<TCell>(currentCell: Cell<TCell>): TCell;
|
|
17
|
-
export declare function useCellValue<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead>, position: GridPosition<TColumnId, TRowId>): TCell;
|
|
18
|
-
export declare function useCellValue<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead>, rowId: TRowId, columnId: TColumnId): TCell;
|
|
19
|
-
export {};
|
|
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;
|
|
20
12
|
//# sourceMappingURL=cell.d.ts.map
|
package/dist/core/cell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"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"}
|
package/dist/core/cell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell.js","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cell.js","sourceRoot":"","sources":["../../core/cell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type Subscriber = () => void;
|
|
2
|
+
export type CellInitializer<TCell> = () => TCell | Promise<TCell>;
|
|
3
|
+
export type Updater<TValue> = TValue | ((currentValue: TValue) => TValue);
|
|
4
|
+
export interface Cell<TCell> {
|
|
5
|
+
get: () => TCell;
|
|
6
|
+
set: (newValue: TCell) => void;
|
|
7
|
+
subscribe: (callback: Subscriber) => () => void;
|
|
8
|
+
_subscribers: () => number;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=cell.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell.types.d.ts","sourceRoot":"","sources":["../../core/cell.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC;AAEpC,MAAM,MAAM,eAAe,CAAC,KAAK,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAElE,MAAM,MAAM,OAAO,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;AAE1E,MAAM,WAAW,IAAI,CAAC,KAAK;IACzB,GAAG,EAAE,MAAM,KAAK,CAAC;IACjB,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,KAAK,MAAM,IAAI,CAAC;IAChD,YAAY,EAAE,MAAM,MAAM,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell.types.js","sourceRoot":"","sources":["../../core/cell.types.ts"],"names":[],"mappings":""}
|
package/dist/core/grid.d.ts
CHANGED
|
@@ -1,55 +1,13 @@
|
|
|
1
|
-
import type { Cell
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
export type GridCollectionInput<THead extends GridRecord, THeadIdKey extends keyof THead & string, TCell extends GridRecord, TCellKey extends keyof TCell & string> = readonly [heads: readonly THead[], headIdKey: THeadIdKey, cellKey: TCellKey];
|
|
12
|
-
export interface GridCollectionOptions<TCell extends GridRecord, TRowHead extends GridRecord, TColumnHead extends GridRecord, TRowHeadIdKey extends keyof TRowHead & string, TColumnHeadIdKey extends keyof TColumnHead & string, TRowCellKey extends keyof TCell & string, TColumnCellKey extends keyof TCell & string> {
|
|
13
|
-
rowHeaders: GridCollectionInput<TRowHead, TRowHeadIdKey, TCell, TRowCellKey>;
|
|
14
|
-
colHeaders: GridCollectionInput<TColumnHead, TColumnHeadIdKey, TCell, TColumnCellKey>;
|
|
15
|
-
}
|
|
16
|
-
export interface Grid<TCell, TRowId extends string = string, TColumnId extends string = string, TRowHead extends GridHead<TRowId> = GridHead<TRowId>, TColumnHead extends GridHead<TColumnId> = GridHead<TColumnId>> {
|
|
17
|
-
readonly rowHeaders: readonly TRowId[];
|
|
18
|
-
readonly colHeaders: readonly TColumnId[];
|
|
19
|
-
getCell: (rowId: TRowId, columnId: TColumnId) => Cell<TCell>;
|
|
20
|
-
getValue: (rowId: TRowId, columnId: TColumnId) => TCell;
|
|
21
|
-
setValue: (rowId: TRowId, columnId: TColumnId, newValue: TCell) => void;
|
|
22
|
-
hasCell: (rowId: TRowId, columnId: TColumnId) => boolean;
|
|
23
|
-
getRowHead: (rowId: TRowId) => TRowHead;
|
|
24
|
-
getColumnHead: (columnId: TColumnId) => TColumnHead;
|
|
25
|
-
updateRowHead: (rowId: TRowId, nextRowHead: Updater<TRowHead>) => void;
|
|
26
|
-
updateColumnHead: (columnId: TColumnId, nextColumnHead: Updater<TColumnHead>) => void;
|
|
27
|
-
subscribeRowHead: (rowId: TRowId, callback: Subscriber) => () => void;
|
|
28
|
-
subscribeColumnHead: (columnId: TColumnId, callback: Subscriber) => () => void;
|
|
29
|
-
getRowCells: (rowId: TRowId) => readonly GridAxisCell<TCell, TRowId, TColumnId>[];
|
|
30
|
-
getColumnCells: (columnId: TColumnId) => readonly GridAxisCell<TCell, TRowId, TColumnId>[];
|
|
31
|
-
getRowTailState: <TTail>(rowId: TRowId) => GridTailState<TTail>;
|
|
32
|
-
getColumnTailState: <TTail>(columnId: TColumnId) => GridTailState<TTail>;
|
|
33
|
-
getRowTail: <TTail>(rowId: TRowId) => TTail | null;
|
|
34
|
-
getColumnTail: <TTail>(columnId: TColumnId) => TTail | null;
|
|
35
|
-
updateRowTail: (rowId: TRowId, nextRowTail: Updater<unknown | null>) => void;
|
|
36
|
-
updateColumnTail: (columnId: TColumnId, nextColumnTail: Updater<unknown | null>) => void;
|
|
37
|
-
subscribeRowTail: (rowId: TRowId, callback: Subscriber) => () => void;
|
|
38
|
-
subscribeColumnTail: (columnId: TColumnId, callback: Subscriber) => () => void;
|
|
39
|
-
registerRowTail: <TTail>(rowId: TRowId, onRowUpdate: GridAxisTailUpdater<TCell, TRowId, TColumnId, TTail>) => () => void;
|
|
40
|
-
registerColumnTail: <TTail>(columnId: TColumnId, onColumnUpdate: GridAxisTailUpdater<TCell, TRowId, TColumnId, TTail>) => () => void;
|
|
41
|
-
recomputeRowTail: (rowId: TRowId) => void;
|
|
42
|
-
recomputeColumnTail: (columnId: TColumnId) => void;
|
|
43
|
-
}
|
|
44
|
-
export interface GridAxisIds<TRowId extends string, TColumnId extends string> {
|
|
45
|
-
rows: readonly TRowId[];
|
|
46
|
-
cols: readonly TColumnId[];
|
|
47
|
-
reorderRow: (activeRowId: TRowId | string, overRowId: TRowId | string) => boolean;
|
|
48
|
-
reorderColumn: (activeColumnId: TColumnId | string, overColumnId: TColumnId | string) => boolean;
|
|
49
|
-
}
|
|
50
|
-
export declare function grid<TCell, TRowHeadInput extends GridHeadInput, TColumnHeadInput extends GridHeadInput>(cells: Cell<TCell>[][], { colHeaders, rowHeaders }: GridOptions<TRowHeadInput, TColumnHeadInput>): Grid<TCell, GridHeadId<TRowHeadInput>, GridHeadId<TColumnHeadInput>, ResolvedGridHead<TRowHeadInput>, ResolvedGridHead<TColumnHeadInput>>;
|
|
51
|
-
export declare function grid<TCell extends GridRecord, TRowHead extends GridRecord, TColumnHead extends GridRecord, TRowHeadIdKey extends keyof TRowHead & string, TColumnHeadIdKey extends keyof TColumnHead & string, TRowCellKey extends keyof TCell & string, TColumnCellKey extends keyof TCell & string>(cells: readonly (TCell & Record<TRowCellKey, Extract<TRowHead[TRowHeadIdKey], string>> & Record<TColumnCellKey, Extract<TColumnHead[TColumnHeadIdKey], string>>)[], { rowHeaders, colHeaders, }: GridCollectionOptions<TCell, TRowHead, TColumnHead, TRowHeadIdKey, TColumnHeadIdKey, TRowCellKey, TColumnCellKey>): Grid<TCell & Record<TRowCellKey, Extract<TRowHead[TRowHeadIdKey], string>> & Record<TColumnCellKey, Extract<TColumnHead[TColumnHeadIdKey], string>>, Extract<TRowHead[TRowHeadIdKey], string>, Extract<TColumnHead[TColumnHeadIdKey], string>, TRowHead & GridHead<Extract<TRowHead[TRowHeadIdKey], string>>, TColumnHead & GridHead<Extract<TColumnHead[TColumnHeadIdKey], string>>>;
|
|
1
|
+
import type { Cell } from "./cell.types.js";
|
|
2
|
+
import type { Grid, GridAxisIds, GridMatrixSnapshot, GridOptions, GridRecord, GridSchemaOptions, GridState, GridStateCell, GridStateInitializer, SchemaCell, SchemaCellValue, SchemaColumn, SchemaColumnHead, SchemaColumnId, SchemaRow, SchemaRowHead, SchemaRowId, SchemaSnapshot } from "./grid.types.js";
|
|
3
|
+
import type { GridHead, GridHeadId, GridHeadInput, ResolvedGridHead } from "./head.types.js";
|
|
4
|
+
export type { Grid, GridAxisIds, GridOptions, GridPersistAdapter, GridPersistOption, GridPosition, GridRows, GridSchemaOptions, GridState, GridStateCell, GridStateInitializer, GridUpsertHead, } from "./grid.types.js";
|
|
5
|
+
type BroadSchemaRowHead<TState extends GridState<GridRecord, GridRecord, GridRecord>> = SchemaRow<TState> & GridHead<string>;
|
|
6
|
+
type BroadSchemaColumnHead<TState extends GridState<GridRecord, GridRecord, GridRecord>> = SchemaColumn<TState> & GridHead<string>;
|
|
7
|
+
type BroadSchemaSnapshot<TState extends GridState<GridRecord, GridRecord, GridRecord>> = GridState<SchemaCell<TState>, BroadSchemaRowHead<TState>, BroadSchemaColumnHead<TState>>;
|
|
8
|
+
export declare function grid<TCell, TRowHeadInput extends GridHeadInput, TColumnHeadInput extends GridHeadInput>(cells: Cell<TCell>[][], options: GridOptions<TRowHeadInput, TColumnHeadInput, GridMatrixSnapshot<TCell, TRowHeadInput, TColumnHeadInput>>): Grid<TCell, GridHeadId<TRowHeadInput>, GridHeadId<TColumnHeadInput>, ResolvedGridHead<TRowHeadInput>, ResolvedGridHead<TColumnHeadInput>, GridStateCell<TCell, GridHeadId<TRowHeadInput>, GridHeadId<TColumnHeadInput>>, GridMatrixSnapshot<TCell, TRowHeadInput, TColumnHeadInput>>;
|
|
9
|
+
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>>;
|
|
10
|
+
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>>;
|
|
52
11
|
export declare function createGridKey(rowId: string, columnId: string): string;
|
|
53
|
-
export declare function useGrid<TCell, TRowId extends string, TColumnId extends string, TRowHead extends GridHead<TRowId>, TColumnHead extends GridHead<TColumnId>>(currentGrid: Grid<TCell, TRowId, TColumnId, TRowHead, TColumnHead>): GridAxisIds<TRowId, TColumnId>;
|
|
54
|
-
export {};
|
|
12
|
+
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>): GridAxisIds<TRowId, TColumnId>;
|
|
55
13
|
//# sourceMappingURL=grid.d.ts.map
|
package/dist/core/grid.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../core/grid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../core/grid.ts"],"names":[],"mappings":"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"}
|