@stackframe/dashboard-ui-components 2.8.84 → 2.8.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/analytics-chart/analytics-chart-pie.d.ts +67 -0
- package/dist/components/analytics-chart/analytics-chart-pie.d.ts.map +1 -0
- package/dist/components/analytics-chart/analytics-chart-pie.js +253 -0
- package/dist/components/analytics-chart/analytics-chart-pie.js.map +1 -0
- package/dist/components/analytics-chart/analytics-chart.d.ts +554 -0
- package/dist/components/analytics-chart/analytics-chart.d.ts.map +1 -0
- package/dist/components/analytics-chart/analytics-chart.js +1021 -0
- package/dist/components/analytics-chart/analytics-chart.js.map +1 -0
- package/dist/components/analytics-chart/default-analytics-chart-tooltip.d.ts +66 -0
- package/dist/components/analytics-chart/default-analytics-chart-tooltip.d.ts.map +1 -0
- package/dist/components/analytics-chart/default-analytics-chart-tooltip.js +179 -0
- package/dist/components/analytics-chart/default-analytics-chart-tooltip.js.map +1 -0
- package/dist/components/analytics-chart/format.d.ts +13 -0
- package/dist/components/analytics-chart/format.d.ts.map +1 -0
- package/dist/components/analytics-chart/format.js +138 -0
- package/dist/components/analytics-chart/format.js.map +1 -0
- package/dist/components/analytics-chart/index.d.ts +8 -0
- package/dist/components/analytics-chart/index.js +184 -0
- package/dist/components/analytics-chart/palette.d.ts +15 -0
- package/dist/components/analytics-chart/palette.d.ts.map +1 -0
- package/dist/components/analytics-chart/palette.js +60 -0
- package/dist/components/analytics-chart/palette.js.map +1 -0
- package/dist/components/analytics-chart/render-data-series.d.ts +28 -0
- package/dist/components/analytics-chart/render-data-series.d.ts.map +1 -0
- package/dist/components/analytics-chart/render-data-series.js +109 -0
- package/dist/components/analytics-chart/render-data-series.js.map +1 -0
- package/dist/components/analytics-chart/state.d.ts +54 -0
- package/dist/components/analytics-chart/state.d.ts.map +1 -0
- package/dist/components/analytics-chart/state.js +142 -0
- package/dist/components/analytics-chart/state.js.map +1 -0
- package/dist/components/analytics-chart/strings.d.ts +33 -0
- package/dist/components/analytics-chart/strings.d.ts.map +1 -0
- package/dist/components/analytics-chart/strings.js +37 -0
- package/dist/components/analytics-chart/strings.js.map +1 -0
- package/dist/components/analytics-chart/types.d.ts +157 -0
- package/dist/components/analytics-chart/types.d.ts.map +1 -0
- package/dist/components/analytics-chart/types.js +21 -0
- package/dist/components/analytics-chart/types.js.map +1 -0
- package/dist/components/badge.d.ts +16 -0
- package/dist/components/badge.d.ts.map +1 -1
- package/dist/components/badge.js +16 -0
- package/dist/components/badge.js.map +1 -1
- package/dist/components/button.d.ts +15 -1
- package/dist/components/button.d.ts.map +1 -1
- package/dist/components/button.js +14 -0
- package/dist/components/button.js.map +1 -1
- package/dist/components/card.d.ts +28 -0
- package/dist/components/card.d.ts.map +1 -1
- package/dist/components/card.js +28 -0
- package/dist/components/card.js.map +1 -1
- package/dist/components/chart-card.d.ts +29 -0
- package/dist/components/chart-card.d.ts.map +1 -1
- package/dist/components/chart-card.js +29 -0
- package/dist/components/chart-card.js.map +1 -1
- package/dist/components/chart-legend.d.ts +1 -2
- package/dist/components/chart-legend.d.ts.map +1 -1
- package/dist/components/chart-legend.js +0 -4
- package/dist/components/chart-legend.js.map +1 -1
- package/dist/components/data-grid/data-grid-sizing.d.ts +11 -0
- package/dist/components/data-grid/data-grid-sizing.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-sizing.js +34 -0
- package/dist/components/data-grid/data-grid-sizing.js.map +1 -0
- package/dist/components/data-grid/data-grid-toolbar.d.ts +31 -0
- package/dist/components/data-grid/data-grid-toolbar.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid-toolbar.js +226 -0
- package/dist/components/data-grid/data-grid-toolbar.js.map +1 -0
- package/dist/components/data-grid/data-grid.d.ts +233 -0
- package/dist/components/data-grid/data-grid.d.ts.map +1 -0
- package/dist/components/data-grid/data-grid.js +871 -0
- package/dist/components/data-grid/data-grid.js.map +1 -0
- package/dist/components/data-grid/index.d.ts +7 -0
- package/dist/components/data-grid/index.js +176 -0
- package/dist/components/data-grid/state.d.ts +91 -0
- package/dist/components/data-grid/state.d.ts.map +1 -0
- package/dist/components/data-grid/state.js +329 -0
- package/dist/components/data-grid/state.js.map +1 -0
- package/dist/components/data-grid/strings.d.ts +8 -0
- package/dist/components/data-grid/strings.d.ts.map +1 -0
- package/dist/components/data-grid/strings.js +42 -0
- package/dist/components/data-grid/strings.js.map +1 -0
- package/dist/components/data-grid/types.d.ts +242 -0
- package/dist/components/data-grid/types.d.ts.map +1 -0
- package/dist/components/data-grid/types.js +0 -0
- package/dist/components/data-grid/use-data-source.d.ts +79 -0
- package/dist/components/data-grid/use-data-source.d.ts.map +1 -0
- package/dist/components/data-grid/use-data-source.js +236 -0
- package/dist/components/data-grid/use-data-source.js.map +1 -0
- package/dist/components/empty-state.d.ts +16 -0
- package/dist/components/empty-state.d.ts.map +1 -1
- package/dist/components/empty-state.js +16 -0
- package/dist/components/empty-state.js.map +1 -1
- package/dist/components/metric-card.d.ts +24 -0
- package/dist/components/metric-card.d.ts.map +1 -1
- package/dist/components/metric-card.js +24 -0
- package/dist/components/metric-card.js.map +1 -1
- package/dist/components/progress-bar.d.ts +10 -0
- package/dist/components/progress-bar.d.ts.map +1 -1
- package/dist/components/progress-bar.js +10 -0
- package/dist/components/progress-bar.js.map +1 -1
- package/dist/components/separator.d.ts +9 -0
- package/dist/components/separator.d.ts.map +1 -1
- package/dist/components/separator.js +9 -0
- package/dist/components/separator.js.map +1 -1
- package/dist/components/skeleton.d.ts +12 -0
- package/dist/components/skeleton.d.ts.map +1 -1
- package/dist/components/skeleton.js +12 -0
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/table.d.ts +25 -0
- package/dist/components/table.d.ts.map +1 -1
- package/dist/components/table.js +25 -0
- package/dist/components/table.js.map +1 -1
- package/dist/dashboard-ui-components.global.js +8607 -2902
- package/dist/dashboard-ui-components.global.js.map +4 -4
- package/dist/esm/components/analytics-chart/analytics-chart-pie.d.ts +67 -0
- package/dist/esm/components/analytics-chart/analytics-chart-pie.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/analytics-chart-pie.js +251 -0
- package/dist/esm/components/analytics-chart/analytics-chart-pie.js.map +1 -0
- package/dist/esm/components/analytics-chart/analytics-chart.d.ts +554 -0
- package/dist/esm/components/analytics-chart/analytics-chart.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/analytics-chart.js +1019 -0
- package/dist/esm/components/analytics-chart/analytics-chart.js.map +1 -0
- package/dist/esm/components/analytics-chart/default-analytics-chart-tooltip.d.ts +66 -0
- package/dist/esm/components/analytics-chart/default-analytics-chart-tooltip.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/default-analytics-chart-tooltip.js +176 -0
- package/dist/esm/components/analytics-chart/default-analytics-chart-tooltip.js.map +1 -0
- package/dist/esm/components/analytics-chart/format.d.ts +13 -0
- package/dist/esm/components/analytics-chart/format.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/format.js +133 -0
- package/dist/esm/components/analytics-chart/format.js.map +1 -0
- package/dist/esm/components/analytics-chart/index.d.ts +8 -0
- package/dist/esm/components/analytics-chart/index.js +9 -0
- package/dist/esm/components/analytics-chart/palette.d.ts +15 -0
- package/dist/esm/components/analytics-chart/palette.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/palette.js +55 -0
- package/dist/esm/components/analytics-chart/palette.js.map +1 -0
- package/dist/esm/components/analytics-chart/render-data-series.d.ts +28 -0
- package/dist/esm/components/analytics-chart/render-data-series.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/render-data-series.js +107 -0
- package/dist/esm/components/analytics-chart/render-data-series.js.map +1 -0
- package/dist/esm/components/analytics-chart/state.d.ts +54 -0
- package/dist/esm/components/analytics-chart/state.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/state.js +126 -0
- package/dist/esm/components/analytics-chart/state.js.map +1 -0
- package/dist/esm/components/analytics-chart/strings.d.ts +33 -0
- package/dist/esm/components/analytics-chart/strings.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/strings.js +34 -0
- package/dist/esm/components/analytics-chart/strings.js.map +1 -0
- package/dist/esm/components/analytics-chart/types.d.ts +157 -0
- package/dist/esm/components/analytics-chart/types.d.ts.map +1 -0
- package/dist/esm/components/analytics-chart/types.js +18 -0
- package/dist/esm/components/analytics-chart/types.js.map +1 -0
- package/dist/esm/components/badge.d.ts +16 -0
- package/dist/esm/components/badge.d.ts.map +1 -1
- package/dist/esm/components/badge.js +16 -0
- package/dist/esm/components/badge.js.map +1 -1
- package/dist/esm/components/button.d.ts +14 -0
- package/dist/esm/components/button.d.ts.map +1 -1
- package/dist/esm/components/button.js +14 -0
- package/dist/esm/components/button.js.map +1 -1
- package/dist/esm/components/card.d.ts +28 -0
- package/dist/esm/components/card.d.ts.map +1 -1
- package/dist/esm/components/card.js +28 -0
- package/dist/esm/components/card.js.map +1 -1
- package/dist/esm/components/chart-card.d.ts +29 -0
- package/dist/esm/components/chart-card.d.ts.map +1 -1
- package/dist/esm/components/chart-card.js +29 -0
- package/dist/esm/components/chart-card.js.map +1 -1
- package/dist/esm/components/chart-legend.d.ts +1 -2
- package/dist/esm/components/chart-legend.d.ts.map +1 -1
- package/dist/esm/components/chart-legend.js +1 -3
- package/dist/esm/components/chart-legend.js.map +1 -1
- package/dist/esm/components/data-grid/data-grid-sizing.d.ts +11 -0
- package/dist/esm/components/data-grid/data-grid-sizing.d.ts.map +1 -0
- package/dist/esm/components/data-grid/data-grid-sizing.js +29 -0
- package/dist/esm/components/data-grid/data-grid-sizing.js.map +1 -0
- package/dist/esm/components/data-grid/data-grid-toolbar.d.ts +31 -0
- package/dist/esm/components/data-grid/data-grid-toolbar.d.ts.map +1 -0
- package/dist/esm/components/data-grid/data-grid-toolbar.js +223 -0
- package/dist/esm/components/data-grid/data-grid-toolbar.js.map +1 -0
- package/dist/esm/components/data-grid/data-grid.d.ts +233 -0
- package/dist/esm/components/data-grid/data-grid.d.ts.map +1 -0
- package/dist/esm/components/data-grid/data-grid.js +868 -0
- package/dist/esm/components/data-grid/data-grid.js.map +1 -0
- package/dist/esm/components/data-grid/index.d.ts +7 -0
- package/dist/esm/components/data-grid/index.js +7 -0
- package/dist/esm/components/data-grid/state.d.ts +91 -0
- package/dist/esm/components/data-grid/state.d.ts.map +1 -0
- package/dist/esm/components/data-grid/state.js +305 -0
- package/dist/esm/components/data-grid/state.js.map +1 -0
- package/dist/esm/components/data-grid/strings.d.ts +8 -0
- package/dist/esm/components/data-grid/strings.d.ts.map +1 -0
- package/dist/esm/components/data-grid/strings.js +39 -0
- package/dist/esm/components/data-grid/strings.js.map +1 -0
- package/dist/esm/components/data-grid/types.d.ts +242 -0
- package/dist/esm/components/data-grid/types.d.ts.map +1 -0
- package/dist/esm/components/data-grid/types.js +1 -0
- package/dist/esm/components/data-grid/use-data-source.d.ts +79 -0
- package/dist/esm/components/data-grid/use-data-source.d.ts.map +1 -0
- package/dist/esm/components/data-grid/use-data-source.js +234 -0
- package/dist/esm/components/data-grid/use-data-source.js.map +1 -0
- package/dist/esm/components/empty-state.d.ts +16 -0
- package/dist/esm/components/empty-state.d.ts.map +1 -1
- package/dist/esm/components/empty-state.js +16 -0
- package/dist/esm/components/empty-state.js.map +1 -1
- package/dist/esm/components/metric-card.d.ts +24 -0
- package/dist/esm/components/metric-card.d.ts.map +1 -1
- package/dist/esm/components/metric-card.js +24 -0
- package/dist/esm/components/metric-card.js.map +1 -1
- package/dist/esm/components/progress-bar.d.ts +10 -0
- package/dist/esm/components/progress-bar.d.ts.map +1 -1
- package/dist/esm/components/progress-bar.js +10 -0
- package/dist/esm/components/progress-bar.js.map +1 -1
- package/dist/esm/components/separator.d.ts +9 -0
- package/dist/esm/components/separator.d.ts.map +1 -1
- package/dist/esm/components/separator.js +9 -0
- package/dist/esm/components/separator.js.map +1 -1
- package/dist/esm/components/skeleton.d.ts +12 -0
- package/dist/esm/components/skeleton.d.ts.map +1 -1
- package/dist/esm/components/skeleton.js +12 -0
- package/dist/esm/components/skeleton.js.map +1 -1
- package/dist/esm/components/table.d.ts +25 -0
- package/dist/esm/components/table.d.ts.map +1 -1
- package/dist/esm/components/table.js +25 -0
- package/dist/esm/components/table.js.map +1 -1
- package/dist/esm/index.d.ts +4 -2
- package/dist/esm/index.js +6 -2
- package/dist/index.d.ts +15 -2
- package/dist/index.js +16 -7
- package/package.json +4 -3
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { DataGridProps } from "./types.js";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/components/data-grid/data-grid.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Interactive table with sorting, quick search, pagination, selection,
|
|
7
|
+
* and virtualization. Handles 10k+ rows smoothly. Pair with
|
|
8
|
+
* `useDataSource` for client-side data; use an async `dataSource`
|
|
9
|
+
* generator for server or infinite-scroll modes.
|
|
10
|
+
*
|
|
11
|
+
* ## Mental model (read this first — everything else depends on it)
|
|
12
|
+
*
|
|
13
|
+
* DataGrid is a **display** component. It does NOT sort, search, or
|
|
14
|
+
* paginate your data directly — you own that, but `useDataSource` does
|
|
15
|
+
* it for you. The `rows` prop is always the already-processed slice to
|
|
16
|
+
* show. The grid tracks user intent in `state` (sort model, quick
|
|
17
|
+
* search text, page index). You feed that state into `useDataSource`,
|
|
18
|
+
* and its output goes back in as `rows`.
|
|
19
|
+
*
|
|
20
|
+
* `useDataSource` IS the processor. Given your full dataset and the
|
|
21
|
+
* grid's state, it returns the searched + sorted + paginated rows
|
|
22
|
+
* ready to pass to DataGrid. This is the ONLY correct pattern for
|
|
23
|
+
* client-side data — do NOT pass a raw array to `rows`.
|
|
24
|
+
*
|
|
25
|
+
* ## Search (client vs async)
|
|
26
|
+
*
|
|
27
|
+
* - **Client mode** (`useDataSource` with `data`): a case-insensitive
|
|
28
|
+
* substring match across every column is applied automatically.
|
|
29
|
+
* Override the matcher with `matchRow` for fuzzy / weighted search,
|
|
30
|
+
* or disable by passing `matchRow: () => true`.
|
|
31
|
+
* - **Async mode** (`useDataSource` with `dataSource`): `state.quickSearch`
|
|
32
|
+
* is forwarded to the generator as `params.quickSearch`. Same
|
|
33
|
+
* mechanism as `params.sorting` — a change triggers a refetch, and
|
|
34
|
+
* the generator is the "matching logic" (typically a WHERE / ILIKE
|
|
35
|
+
* clause in the backend query). The grid does NO client-side
|
|
36
|
+
* filtering in async mode.
|
|
37
|
+
*
|
|
38
|
+
* ## The canonical pattern
|
|
39
|
+
*
|
|
40
|
+
* ```tsx
|
|
41
|
+
* // 1. Columns — define OUTSIDE the component or inside a useMemo. Must be stable.
|
|
42
|
+
* const columns = React.useMemo(() => [
|
|
43
|
+
* { id: "name", header: "Name", accessor: "name", width: 180, type: "string" },
|
|
44
|
+
* { id: "email", header: "Email", accessor: "email", width: 240, type: "string" },
|
|
45
|
+
* { id: "role", header: "Role", accessor: "role", width: 120, type: "singleSelect",
|
|
46
|
+
* valueOptions: [{ value: "admin", label: "Admin" }, { value: "member", label: "Member" }] },
|
|
47
|
+
* { id: "signUps", header: "Sign-ups", accessor: "signUps", width: 120, type: "number", align: "right",
|
|
48
|
+
* renderCell: ({ value }) => <span className="tabular-nums">{Number(value).toLocaleString()}</span> },
|
|
49
|
+
* ], []);
|
|
50
|
+
*
|
|
51
|
+
* // 2. Grid state — one hook, initialized from the columns. NEVER build the state object by hand.
|
|
52
|
+
* const [gridState, setGridState] = React.useState(() => createDefaultDataGridState(columns));
|
|
53
|
+
*
|
|
54
|
+
* // 3. Data source — wires your raw array through the grid state. ALWAYS call this
|
|
55
|
+
* // hook unconditionally at the top level (no if/return before it).
|
|
56
|
+
* const gridData = useDataSource({
|
|
57
|
+
* data: users, // your raw array (can be [] while loading)
|
|
58
|
+
* columns,
|
|
59
|
+
* getRowId: (row) => row.id,
|
|
60
|
+
* sorting: gridState.sorting,
|
|
61
|
+
* quickSearch: gridState.quickSearch,
|
|
62
|
+
* pagination: gridState.pagination,
|
|
63
|
+
* paginationMode: "client", // "client" | "server" | "infinite"
|
|
64
|
+
* });
|
|
65
|
+
*
|
|
66
|
+
* // 4. Render — `rows` comes from gridData.rows, NOT from your raw array.
|
|
67
|
+
* <DataGrid
|
|
68
|
+
* columns={columns}
|
|
69
|
+
* rows={gridData.rows}
|
|
70
|
+
* getRowId={(row) => row.id}
|
|
71
|
+
* totalRowCount={gridData.totalRowCount}
|
|
72
|
+
* isLoading={gridData.isLoading}
|
|
73
|
+
* state={gridState}
|
|
74
|
+
* onChange={setGridState}
|
|
75
|
+
* selectionMode="none" // "none" | "single" | "multiple"
|
|
76
|
+
* maxHeight={480}
|
|
77
|
+
* />
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* ## Iron rules (violating any of these breaks the grid)
|
|
81
|
+
*
|
|
82
|
+
* 1. The prop is `rows`, NOT `data`. There is no `data` prop on DataGrid.
|
|
83
|
+
* `data` belongs on `useDataSource`.
|
|
84
|
+
* 2. `rows` is ALWAYS `gridData.rows`. Never pass your raw array to
|
|
85
|
+
* `rows` — the grid won't search, sort, or paginate it.
|
|
86
|
+
* 3. Columns must be stable across renders. Define them outside the
|
|
87
|
+
* component or wrap in `React.useMemo`. A fresh columns array every
|
|
88
|
+
* render will reset sorting state.
|
|
89
|
+
* 4. Initialize grid state with `createDefaultDataGridState(columns)`.
|
|
90
|
+
* Do NOT spell out the state object manually — you will miss fields
|
|
91
|
+
* and crash.
|
|
92
|
+
* 5. `onChange` takes a `SetStateAction` (the setter you got from
|
|
93
|
+
* `useState`). Pass `setGridState` directly. Do NOT wrap it unless
|
|
94
|
+
* you know exactly what you're doing.
|
|
95
|
+
* 6. Call `useDataSource` ONCE per grid, at the top level, before any
|
|
96
|
+
* early return. It contains hooks.
|
|
97
|
+
* 7. `renderCell` is a PURE function of its context. NEVER call React
|
|
98
|
+
* hooks inside it (no `useState`, `useMemo`, `useEffect`, nothing).
|
|
99
|
+
* If you need derived data per row, compute it BEFORE the render —
|
|
100
|
+
* e.g. build a `Map<rowId, sparklineData>` in a `useMemo` and look
|
|
101
|
+
* it up in `renderCell`.
|
|
102
|
+
* 8. `toolbar` accepts `false` (hide it) or a render function
|
|
103
|
+
* `(ctx) => ReactNode`. Anything else — `true`, `undefined`, a state
|
|
104
|
+
* variable — will either show the default toolbar or crash. If you
|
|
105
|
+
* just want the default toolbar, omit the prop entirely.
|
|
106
|
+
* 9. The toolbar's search input writes to `state.quickSearch`. That
|
|
107
|
+
* value is consumed by `useDataSource` — client mode filters
|
|
108
|
+
* client-side, async mode forwards to the generator. Do NOT wire
|
|
109
|
+
* a separate "controlled" search prop, everything flows through
|
|
110
|
+
* grid state.
|
|
111
|
+
*
|
|
112
|
+
* ## renderCell — what you can and cannot do inside it
|
|
113
|
+
*
|
|
114
|
+
* ```tsx
|
|
115
|
+
* // OK — pure rendering from ctx:
|
|
116
|
+
* renderCell: ({ value }) => <span className="tabular-nums">{Number(value).toLocaleString()}</span>
|
|
117
|
+
* renderCell: ({ row }) => <Badge variant={row.active ? "default" : "outline"}>{row.status}</Badge>
|
|
118
|
+
*
|
|
119
|
+
* // OK — looking up pre-computed data by row id:
|
|
120
|
+
* // BEFORE the return, in the component body:
|
|
121
|
+
* const sparklinesById = React.useMemo(() => {
|
|
122
|
+
* const m = new Map();
|
|
123
|
+
* for (const u of users) {
|
|
124
|
+
* m.set(u.id, u.recentActivity.map((n, i) => ({ ts: i, values: { primary: n } })));
|
|
125
|
+
* }
|
|
126
|
+
* return m;
|
|
127
|
+
* }, [users]);
|
|
128
|
+
* // Then inside the column def:
|
|
129
|
+
* renderCell: ({ rowId }) => <MiniSparkline data={sparklinesById.get(rowId) ?? []} />
|
|
130
|
+
*
|
|
131
|
+
* // NOT OK — hooks inside renderCell:
|
|
132
|
+
* renderCell: ({ row }) => {
|
|
133
|
+
* const [hovered, setHovered] = React.useState(false); // ← crashes the grid
|
|
134
|
+
* const data = React.useMemo(() => ..., []); // ← crashes the grid
|
|
135
|
+
* return ...;
|
|
136
|
+
* }
|
|
137
|
+
*
|
|
138
|
+
* // NOT OK — embedding AnalyticsChart (or any other controlled, stateful chart) per row:
|
|
139
|
+
* // AnalyticsChart owns its own state, tooltips, zoom, and virtualized data
|
|
140
|
+
* // pipeline. Instantiating one per row is expensive and fights the grid's
|
|
141
|
+
* // virtualizer. Don't do it.
|
|
142
|
+
* ```
|
|
143
|
+
*
|
|
144
|
+
* ## Sparklines and mini-charts in cells — use raw Recharts
|
|
145
|
+
*
|
|
146
|
+
* If you want a tiny chart (sparkline, micro bar chart, trend line) inside
|
|
147
|
+
* a cell, drop down to raw `Recharts.*` components — they are lightweight
|
|
148
|
+
* and stateless, so they render cleanly per row without owning any state.
|
|
149
|
+
* Read pre-computed points off the row (or off a `Map<rowId, points>` you
|
|
150
|
+
* built in a `useMemo` above) and pass them directly to the Recharts
|
|
151
|
+
* primitive. Do NOT wrap them in `DesignChartContainer` or
|
|
152
|
+
* `DesignChartCard` inside a cell — those add chrome meant for full-size
|
|
153
|
+
* charts.
|
|
154
|
+
*
|
|
155
|
+
* ```tsx
|
|
156
|
+
* // OK — raw Recharts sparkline per row:
|
|
157
|
+
* renderCell: ({ rowId }) => {
|
|
158
|
+
* const points = sparklinesById.get(rowId) ?? [];
|
|
159
|
+
* return (
|
|
160
|
+
* <Recharts.ResponsiveContainer width="100%" height={28}>
|
|
161
|
+
* <Recharts.LineChart data={points} margin={{ top: 2, right: 2, bottom: 2, left: 2 }}>
|
|
162
|
+
* <Recharts.Line type="monotone" dataKey="v" stroke="currentColor" strokeWidth={1.5} dot={false} isAnimationActive={false} />
|
|
163
|
+
* </Recharts.LineChart>
|
|
164
|
+
* </Recharts.ResponsiveContainer>
|
|
165
|
+
* );
|
|
166
|
+
* }
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* Keep in-cell Recharts configs minimal: no axes, no tooltips, no animation
|
|
170
|
+
* (`isAnimationActive={false}`), tight margins, fixed height. The goal is a
|
|
171
|
+
* visual summary, not an interactive chart.
|
|
172
|
+
*
|
|
173
|
+
* ## State shape (from `createDefaultDataGridState`)
|
|
174
|
+
*
|
|
175
|
+
* ```ts
|
|
176
|
+
* {
|
|
177
|
+
* sorting: [], // { columnId, direction: "asc" | "desc" }[]
|
|
178
|
+
* quickSearch: "", // search input text
|
|
179
|
+
* dateDisplay: "relative", // "relative" | "absolute"
|
|
180
|
+
* columnVisibility: {}, columnWidths: {...},
|
|
181
|
+
* columnPinning: { left: [], right: [] }, columnOrder: [...],
|
|
182
|
+
* pagination: { pageIndex: 0, pageSize: 50 },
|
|
183
|
+
* selection: { selectedIds: new Set(), anchorId: null },
|
|
184
|
+
* }
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* Everything is updated through `setGridState` — the toolbar, header,
|
|
188
|
+
* and footer all call it for you. You do not need to wire any of this
|
|
189
|
+
* manually.
|
|
190
|
+
*
|
|
191
|
+
* ## Height and scrolling
|
|
192
|
+
*
|
|
193
|
+
* DataGrid is NOT a card. It has no border, rounded corners, or shadow of
|
|
194
|
+
* its own. Wrap it in whatever chrome you want — a `DesignCard`, a section,
|
|
195
|
+
* or just raw layout. The grid itself fills its parent's height via
|
|
196
|
+
* `h-full`.
|
|
197
|
+
*
|
|
198
|
+
* How the grid gets its height (pick ONE):
|
|
199
|
+
* 1. Bounded parent — put the grid inside a flex/grid container with a
|
|
200
|
+
* definite height (e.g. `flex-1 min-h-0` inside a page-filling flex
|
|
201
|
+
* column). The grid stretches to that height and scrolls its body.
|
|
202
|
+
* 2. `maxHeight` prop — pass a number (pixels) or CSS string
|
|
203
|
+
* (`"480px"`, `"60vh"`, `"100%"`). The grid caps at that size and
|
|
204
|
+
* scrolls its body.
|
|
205
|
+
* 3. Unbounded — omit `maxHeight` and let the parent grow freely. The
|
|
206
|
+
* grid renders at its full content height and the page scrolls. Fine
|
|
207
|
+
* for small lists; bad UX for thousands of rows.
|
|
208
|
+
*
|
|
209
|
+
* The toolbar, header, and footer are always `shrink-0`; only the body
|
|
210
|
+
* scrolls. You do NOT need to subtract toolbar/footer heights from
|
|
211
|
+
* `maxHeight` — the grid's internal flex layout handles that.
|
|
212
|
+
*
|
|
213
|
+
* ## When to use what
|
|
214
|
+
*
|
|
215
|
+
* - Simple static list, < 20 rows, no interaction → use a plain table component instead.
|
|
216
|
+
* - Interactive table, sortable + searchable, any size → `DataGrid` +
|
|
217
|
+
* `useDataSource` with `paginationMode: "client"`.
|
|
218
|
+
* - Infinite scroll over a huge dataset you fetch in pages → `dataSource` async
|
|
219
|
+
* generator + `paginationMode: "infinite"`. Only reach for this if you actually
|
|
220
|
+
* need pagination over a remote source. For anything that fits in memory,
|
|
221
|
+
* `"client"` is simpler and faster.
|
|
222
|
+
*
|
|
223
|
+
* ## Features you get for free
|
|
224
|
+
*
|
|
225
|
+
* Quick search, sortable columns (shift-click for multi-sort), column
|
|
226
|
+
* visibility toggle, column resize, CSV export, virtualized rendering
|
|
227
|
+
* for 10k+ rows, keyboard navigation, and a relative/absolute date
|
|
228
|
+
* toggle for `date` / `dateTime` columns.
|
|
229
|
+
*/
|
|
230
|
+
declare function DataGrid<TRow>(props: DataGridProps<TRow>): react_jsx_runtime0.JSX.Element;
|
|
231
|
+
//#endregion
|
|
232
|
+
export { DataGrid };
|
|
233
|
+
//# sourceMappingURL=data-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-grid.d.ts","names":[],"sources":["../../../src/components/data-grid/data-grid.tsx"],"mappings":";;;;;;;AA2wBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAgB,QAAA,MAAA,CAAe,KAAA,EAAO,aAAA,CAAc,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|