cursedbelt 5.25.0 → 5.26.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/dist/react/components/Badge.d.ts +6 -6
- package/dist/react/components/Badge.d.ts.map +1 -1
- package/dist/react/components/Badge.js +13 -5
- package/dist/react/components/Badge.js.map +1 -1
- package/dist/react/components/DataTable/DataTable.d.ts +125 -5
- package/dist/react/components/DataTable/DataTable.d.ts.map +1 -1
- package/dist/react/components/DataTable/DataTable.js +335 -121
- package/dist/react/components/DataTable/DataTable.js.map +1 -1
- package/dist/react/components/DataTable/RowActions.d.ts +3 -1
- package/dist/react/components/DataTable/RowActions.d.ts.map +1 -1
- package/dist/react/components/DataTable/RowActions.js +9 -2
- package/dist/react/components/DataTable/RowActions.js.map +1 -1
- package/dist/react/components/DataTable/SortHeader.d.ts +4 -1
- package/dist/react/components/DataTable/SortHeader.d.ts.map +1 -1
- package/dist/react/components/DataTable/SortHeader.js +7 -1
- package/dist/react/components/DataTable/SortHeader.js.map +1 -1
- package/dist/react/components/DataTable/cells/CellRenderer.d.ts.map +1 -1
- package/dist/react/components/DataTable/cells/CellRenderer.js +4 -1
- package/dist/react/components/DataTable/cells/CellRenderer.js.map +1 -1
- package/dist/react/components/DataTable/index.d.ts +2 -2
- package/dist/react/components/DataTable/index.d.ts.map +1 -1
- package/dist/react/components/DataTable/index.js +1 -1
- package/dist/react/components/DataTable/index.js.map +1 -1
- package/dist/react/components/DataTable/lazyPart.d.ts +27 -0
- package/dist/react/components/DataTable/lazyPart.d.ts.map +1 -0
- package/dist/react/components/DataTable/lazyPart.js +46 -0
- package/dist/react/components/DataTable/lazyPart.js.map +1 -0
- package/dist/react/components/DataTable/types.d.ts +106 -0
- package/dist/react/components/DataTable/types.d.ts.map +1 -1
- package/dist/react/components/DataTable/types.js.map +1 -1
- package/dist/react/components/auth/SignInCard.d.ts +49 -0
- package/dist/react/components/auth/SignInCard.d.ts.map +1 -0
- package/dist/react/components/auth/SignInCard.js +21 -0
- package/dist/react/components/auth/SignInCard.js.map +1 -0
- package/dist/react/components/auth/index.d.ts +1 -0
- package/dist/react/components/auth/index.d.ts.map +1 -1
- package/dist/react/components/auth/index.js +1 -0
- package/dist/react/components/auth/index.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/styles-areas/analytics.css +9 -6
- package/dist/styles-areas/core.css +8 -7
- package/dist/styles-areas/data-table.css +8 -5
- package/dist/styles-utilities.css +75 -0
- package/package.json +2 -2
- package/src/react/components/Badge.capsule.spec.ts +178 -0
- package/src/react/components/Badge.tsx +13 -5
- package/src/react/components/DataTable/DataTable.spec.tsx +6 -2
- package/src/react/components/DataTable/DataTable.tsx +518 -104
- package/src/react/components/DataTable/RowActions.tsx +18 -10
- package/src/react/components/DataTable/SortHeader.tsx +19 -0
- package/src/react/components/DataTable/cells/CellRenderer.tsx +2 -0
- package/src/react/components/DataTable/index.ts +10 -1
- package/src/react/components/DataTable/lazyPart.spec.tsx +99 -0
- package/src/react/components/DataTable/lazyPart.tsx +58 -0
- package/src/react/components/DataTable/rowHooks.spec.tsx +289 -0
- package/src/react/components/DataTable/selection.spec.tsx +6 -2
- package/src/react/components/DataTable/tableSystem.spec.tsx +6 -2
- package/src/react/components/DataTable/types.ts +110 -0
- package/src/react/components/DataTable/virtualize.spec.tsx +38 -2
- package/src/react/components/auth/SignInCard.spec.tsx +48 -0
- package/src/react/components/auth/SignInCard.tsx +90 -0
- package/src/react/components/auth/index.ts +1 -0
- package/src/react/index.ts +5 -0
- package/src/styles-areas/analytics.css +9 -6
- package/src/styles-areas/core.css +8 -7
- package/src/styles-areas/data-table.css +8 -5
- package/src/styles-utilities.css +75 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { HTMLAttributes } from 'react';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
readonly
|
|
2
|
+
/** Every tone's classes — exported for `Badge.capsule.spec.ts`, which scores each capsule against the surfaces under it. */
|
|
3
|
+
export declare const BADGE_TONE: {
|
|
4
|
+
readonly default: "bg-muted text-muted-foreground border border-border-strong";
|
|
5
|
+
readonly neutral: "bg-muted text-muted-foreground border border-border-strong";
|
|
5
6
|
readonly primary: "bg-accent-solid text-white";
|
|
6
7
|
readonly accent: "bg-accent/10 text-accent-strong";
|
|
7
8
|
readonly success: "bg-success/15 text-success-strong border border-success/30";
|
|
@@ -10,13 +11,13 @@ declare const BADGE_TONE: {
|
|
|
10
11
|
readonly destructive: "bg-destructive/15 text-destructive-strong border border-destructive/30";
|
|
11
12
|
readonly outline: "bg-muted text-foreground border border-border-strong";
|
|
12
13
|
readonly emerald: "bg-tone-emerald-bg text-tone-emerald-fg";
|
|
13
|
-
readonly sky: "bg-tone-sky-bg text-tone-sky-fg";
|
|
14
|
+
readonly sky: "bg-tone-sky-bg text-tone-sky-fg border border-tone-sky-fg/30";
|
|
14
15
|
readonly cyan: "bg-tone-cyan-bg text-tone-cyan-fg";
|
|
15
16
|
readonly amber: "bg-tone-amber-bg text-tone-amber-fg";
|
|
16
17
|
readonly purple: "bg-tone-purple-bg text-tone-purple-fg";
|
|
17
18
|
readonly rose: "bg-tone-rose-bg text-tone-rose-fg";
|
|
18
19
|
readonly orange: "bg-tone-orange-bg text-tone-orange-fg";
|
|
19
|
-
readonly slate: "bg-tone-slate-bg text-tone-slate-fg";
|
|
20
|
+
readonly slate: "bg-tone-slate-bg text-tone-slate-fg border border-tone-slate-fg/30";
|
|
20
21
|
readonly lime: "bg-tone-lime-bg text-tone-lime-fg";
|
|
21
22
|
readonly teal: "bg-tone-teal-bg text-tone-teal-fg";
|
|
22
23
|
readonly violet: "bg-tone-violet-bg text-tone-violet-fg";
|
|
@@ -28,5 +29,4 @@ export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
|
28
29
|
tone?: BadgeTone;
|
|
29
30
|
}
|
|
30
31
|
export declare function Badge({ tone, className, title, ...props }: BadgeProps): import("react").JSX.Element;
|
|
31
|
-
export {};
|
|
32
32
|
//# sourceMappingURL=Badge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/react/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAmB5C,
|
|
1
|
+
{"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../../src/react/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAmB5C,4HAA4H;AAC5H,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;CAgDb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,UAAU,CAAC;AAEhD,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,eAAe,CAAC;IACjE,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,wBAAgB,KAAK,CAAC,EAAE,IAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BA6BjF"}
|
|
@@ -16,10 +16,15 @@ import { Tooltip } from './Tooltip.js';
|
|
|
16
16
|
* One map → no second copy to drift. Apps map their own category→tone (ca's
|
|
17
17
|
* `toneForCategory`) onto these names instead of redefining the classes.
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
/** Every tone's classes — exported for `Badge.capsule.spec.ts`, which scores each capsule against the surfaces under it. */
|
|
20
|
+
export const BADGE_TONE = {
|
|
20
21
|
// ---- Semantic (token-driven) -------------------------------------------
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
// 🔴 The quiet tones draw an EDGE (task 2286): a bare `--muted` fill is ΔE00 2.3–5.3 from the
|
|
23
|
+
// card under it — on station's raised dark card it read as bare text beside a dot, not a
|
|
24
|
+
// capsule. `Badge.capsule.spec.ts` scores every tone's edge against every surface. `outline`
|
|
25
|
+
// is the same shape with full-strength text; these stay the quieter of the two.
|
|
26
|
+
default: 'bg-muted text-muted-foreground border border-border-strong',
|
|
27
|
+
neutral: 'bg-muted text-muted-foreground border border-border-strong', // alias of default
|
|
23
28
|
primary: 'bg-accent-solid text-white',
|
|
24
29
|
accent: 'bg-accent/10 text-accent-strong', // soft accent tint (vs. primary's solid fill); -strong per cbux-101
|
|
25
30
|
// Text rides the `-strong` step of each status hue: the base hue as text on
|
|
@@ -43,13 +48,16 @@ const BADGE_TONE = {
|
|
|
43
48
|
// The hues now live in theme.css as `--tone-<hue>-bg/-fg`; the paint is
|
|
44
49
|
// identical, the ownership is not. See DESIGN.md §3.
|
|
45
50
|
emerald: 'bg-tone-emerald-bg text-tone-emerald-fg',
|
|
46
|
-
sky:
|
|
51
|
+
// sky and slate carry a hairline in their own hue, like the status tones: their fills sit
|
|
52
|
+
// under the capsule floor on the aurora canvas (sky ΔE00 5.5) and the raised dark card
|
|
53
|
+
// (slate 5.0) — see `Badge.capsule.spec.ts`. The other hues clear it on fill alone.
|
|
54
|
+
sky: 'bg-tone-sky-bg text-tone-sky-fg border border-tone-sky-fg/30',
|
|
47
55
|
cyan: 'bg-tone-cyan-bg text-tone-cyan-fg',
|
|
48
56
|
amber: 'bg-tone-amber-bg text-tone-amber-fg',
|
|
49
57
|
purple: 'bg-tone-purple-bg text-tone-purple-fg',
|
|
50
58
|
rose: 'bg-tone-rose-bg text-tone-rose-fg',
|
|
51
59
|
orange: 'bg-tone-orange-bg text-tone-orange-fg',
|
|
52
|
-
slate: 'bg-tone-slate-bg text-tone-slate-fg',
|
|
60
|
+
slate: 'bg-tone-slate-bg text-tone-slate-fg border border-tone-slate-fg/30',
|
|
53
61
|
// Four more, 2026-08-20 (unit 15) — see theme.css. Eight hues is enough while a tone
|
|
54
62
|
// means a badge and not enough when the hue is an identity CHANNEL (arcade's Crowns
|
|
55
63
|
// tells ten regions apart by colour alone).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../../src/react/components/Badge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,GAAG;
|
|
1
|
+
{"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../../src/react/components/Badge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;;;;;;;;;;;GAcG;AACH,4HAA4H;AAC5H,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,2EAA2E;IAC3E,8FAA8F;IAC9F,yFAAyF;IACzF,6FAA6F;IAC7F,gFAAgF;IAChF,OAAO,EAAE,4DAA4D;IACrE,OAAO,EAAE,4DAA4D,EAAE,mBAAmB;IAC1F,OAAO,EAAE,4BAA4B;IACrC,MAAM,EAAE,iCAAiC,EAAE,oEAAoE;IAC/G,4EAA4E;IAC5E,0EAA0E;IAC1E,6EAA6E;IAC7E,OAAO,EAAE,4DAA4D;IACrE,OAAO,EAAE,4DAA4D;IACrE,KAAK,EAAE,wEAAwE;IAC/E,WAAW,EAAE,wEAAwE,EAAE,iBAAiB;IACxG,gFAAgF;IAChF,2EAA2E;IAC3E,8EAA8E;IAC9E,2EAA2E;IAC3E,mDAAmD;IACnD,OAAO,EAAE,sDAAsD;IAC/D,4EAA4E;IAC5E,yEAAyE;IACzE,6EAA6E;IAC7E,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,qDAAqD;IACrD,OAAO,EAAE,yCAAyC;IAClD,0FAA0F;IAC1F,uFAAuF;IACvF,oFAAoF;IACpF,GAAG,EAAE,8DAA8D;IACnE,IAAI,EAAE,mCAAmC;IACzC,KAAK,EAAE,qCAAqC;IAC5C,MAAM,EAAE,uCAAuC;IAC/C,IAAI,EAAE,mCAAmC;IACzC,MAAM,EAAE,uCAAuC;IAC/C,KAAK,EAAE,oEAAoE;IAC3E,qFAAqF;IACrF,oFAAoF;IACpF,4CAA4C;IAC5C,IAAI,EAAE,mCAAmC;IACzC,IAAI,EAAE,mCAAmC;IACzC,MAAM,EAAE,uCAAuC;IAC/C,OAAO,EAAE,yCAAyC;CAC1C,CAAC;AASX,MAAM,UAAU,KAAK,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,EAAc;IAChF,MAAM,IAAI,GAAG,CACX,eACE,SAAS,EAAE,EAAE,CACX,+EAA+E,EAC/E,UAAU,CAAC,IAAI,CAAC,EAChB,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;IACF,mFAAmF;IACnF,EAAE;IACF,gFAAgF;IAChF,wEAAwE;IACxE,gFAAgF;IAChF,kFAAkF;IAClF,+EAA+E;IAC/E,iFAAiF;IACjF,+EAA+E;IAC/E,gBAAgB;IAChB,EAAE;IACF,+EAA+E;IAC/E,gFAAgF;IAChF,kFAAkF;IAClF,mFAAmF;IACnF,mFAAmF;IACnF,sDAAsD;IACtD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAC,OAAO,IAAC,OAAO,EAAE,KAAK,YAAG,IAAI,GAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { type ColumnFiltersState, type PaginationState, type RowData, type SortingState, useReactTable } from '@tanstack/react-table';
|
|
2
|
-
import type { ReactNode } from 'react';
|
|
2
|
+
import type { MouseEvent, ReactNode } from 'react';
|
|
3
|
+
import { type Ref } from 'react';
|
|
3
4
|
import type { DropdownMenuItem } from '../DropdownMenu.js';
|
|
4
5
|
import { type FilterQuery } from './filterQuery.js';
|
|
5
6
|
import { type RowDragPayload } from './rowDrag.js';
|
|
6
|
-
import type { ColDef, TableViewMode } from './types.js';
|
|
7
|
+
import type { ColDef, DataTableHandle, DataTableRowProps, DataTableSelectAll, DataTableServerWindow, TableViewMode } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Load the table's lazy parts — the toolbar, the pager, the row kebab's menu — now,
|
|
10
|
+
* so every table mounted after this resolves draws them on its first render. For a
|
|
11
|
+
* spec setup that queries them synchronously after `render(…)`, and for an app about
|
|
12
|
+
* to show a table with a toolbar. Never required: without it they arrive a tick late,
|
|
13
|
+
* into a placeholder of their own height.
|
|
14
|
+
*/
|
|
15
|
+
export declare function preloadDataTableParts(): Promise<void>;
|
|
7
16
|
declare module '@tanstack/react-table' {
|
|
8
17
|
interface ColumnMeta<TData extends RowData, TValue> {
|
|
9
18
|
label?: string;
|
|
@@ -12,6 +21,8 @@ declare module '@tanstack/react-table' {
|
|
|
12
21
|
* own `size` is number-only, so proportional tracks ride meta instead. */
|
|
13
22
|
width?: number | string;
|
|
14
23
|
minWidth?: number;
|
|
24
|
+
hideBelow?: 'sm' | 'md' | 'lg';
|
|
25
|
+
leading?: boolean;
|
|
15
26
|
}
|
|
16
27
|
interface TableMeta<TData extends RowData> {
|
|
17
28
|
/** {@link DataTableControls} — see its doc for why it rides on the table. */
|
|
@@ -87,7 +98,7 @@ export interface DataTableProps<TRow extends Record<string, unknown>> {
|
|
|
87
98
|
/** Stable row id (selection/keys). Falls back to the row index. */
|
|
88
99
|
getRowId?: (row: TRow) => string;
|
|
89
100
|
/** Click a row — typically opens the record `Drawer`. */
|
|
90
|
-
onRowClick?: (row: TRow) => void;
|
|
101
|
+
onRowClick?: (row: TRow, event?: MouseEvent<HTMLElement>) => void;
|
|
91
102
|
/** Trailing per-row Edit action (renders the actions column). */
|
|
92
103
|
onRowEdit?: (row: TRow) => void;
|
|
93
104
|
/** Trailing per-row Delete action (renders the actions column). */
|
|
@@ -200,11 +211,62 @@ export interface DataTableProps<TRow extends Record<string, unknown>> {
|
|
|
200
211
|
* row reports its real height back, so a wrapping cell, a `renderExpanded` panel and
|
|
201
212
|
* the `compact` density all work without the caller computing anything. Pass a number
|
|
202
213
|
* to seed a better first estimate for an unusual row height.
|
|
214
|
+
*
|
|
215
|
+
* It virtualizes the rows it is GIVEN. A list whose rows live on a SERVER — a spacer
|
|
216
|
+
* sized from the server's count, pages loading as they scroll into view, a scrollbar
|
|
217
|
+
* that can be dragged to a row nobody has fetched — is {@link serverWindow}, which
|
|
218
|
+
* implies this.
|
|
203
219
|
*/
|
|
204
220
|
virtualize?: boolean | {
|
|
205
221
|
estimateRowHeight?: number;
|
|
206
222
|
overscan?: number;
|
|
207
223
|
};
|
|
224
|
+
/**
|
|
225
|
+
* SERVER-WINDOWED rows: `data` is only a WINDOW of a result set the server holds —
|
|
226
|
+
* rows `[start, start + data.length)` of `total`. Implies {@link virtualize}.
|
|
227
|
+
*
|
|
228
|
+
* ── Why (forge task 2300) ─────────────────────────────────────────────────
|
|
229
|
+
* apps/music's library is 5,409 tracks and its list is the surface the owner "spends
|
|
230
|
+
* all their time in". It pages from the server, and four of its owner-reported bugs
|
|
231
|
+
* were each a way of getting that arithmetic wrong — so the arithmetic lives here once:
|
|
232
|
+
*
|
|
233
|
+
* - The spacer is sized from `total`, so the scrollbar describes the whole result set
|
|
234
|
+
* while only a window is in memory. Rows outside the window render as placeholder
|
|
235
|
+
* rows (`data-cb-placeholder`) of the estimated height.
|
|
236
|
+
* - `onReachEnd` / `onReachStart` fire as the viewport nears either edge of the LOADED
|
|
237
|
+
* window (never of the spacer — measured against `scrollHeight`, a 1,808-row folder
|
|
238
|
+
* stopped paging at row 100 because the trigger sat 1,700 rows past the last real
|
|
239
|
+
* row). `onReachStart` only for a window that does not begin at row 0.
|
|
240
|
+
* - `onNeedWindow(firstVisibleRow)` fires when the viewport comes to REST wholly
|
|
241
|
+
* outside the window — the scrollbar was dragged, or a flick outran paging. Paging
|
|
242
|
+
* cannot catch up from there; the caller fetches ONE window around the row instead.
|
|
243
|
+
* 🔴 Only at rest (`settleMs`): a smooth scroll to a revealed row passes over
|
|
244
|
+
* hundreds of unloaded rows on its way, and acting on each would fetch a window
|
|
245
|
+
* around wherever the animation happened to be.
|
|
246
|
+
*
|
|
247
|
+
* Pair it with {@link handleRef}'s `scrollToIndex` to reveal or follow a row by its
|
|
248
|
+
* row number over the whole result set. Pagination, client-side sort and client-side filtering are off:
|
|
249
|
+
* the server orders and filters, and a window cannot be re-sorted locally.
|
|
250
|
+
*/
|
|
251
|
+
serverWindow?: DataTableServerWindow;
|
|
252
|
+
/**
|
|
253
|
+
* The table's imperative handle — `scrollToIndex(absoluteRow, { align, behavior })`
|
|
254
|
+
* and the `scrollElement` itself (for a scroll-memory hook or a caller telling its
|
|
255
|
+
* own scrolls from the reader's). Only meaningful with {@link virtualize} or
|
|
256
|
+
* {@link serverWindow}, where the table owns the scroll container.
|
|
257
|
+
*/
|
|
258
|
+
handleRef?: Ref<DataTableHandle>;
|
|
259
|
+
/**
|
|
260
|
+
* Classes for the box that SCROLLS — under {@link scrollBody}, {@link virtualize} or
|
|
261
|
+
* {@link serverWindow}, the table's own scroll container; otherwise the same wrapper,
|
|
262
|
+
* which then merely holds the rows. `className` is the OUTER box (toolbar, table and pager).
|
|
263
|
+
*
|
|
264
|
+
* 🔴 Why (forge task 2302): an app's styles and its browser suites address "the list that
|
|
265
|
+
* scrolls" — apps/music measures `.track-list`'s `scrollHeight` against its spacer in eleven
|
|
266
|
+
* places, because that chain is where its worst owner report lived. With the scroller inside
|
|
267
|
+
* the table, only the table can put a name on it.
|
|
268
|
+
*/
|
|
269
|
+
scrollClassName?: string;
|
|
208
270
|
/**
|
|
209
271
|
* Adaptive narrow layouts (container-query based, not viewport — a table inside
|
|
210
272
|
* a narrow split pane or a tablet's sidebar-flanked content area adapts too):
|
|
@@ -233,6 +295,28 @@ export interface DataTableProps<TRow extends Record<string, unknown>> {
|
|
|
233
295
|
/** Initial sort applied before any user interaction (e.g. `[{ id: 'updatedAt', desc: true }]`).
|
|
234
296
|
* Only seeds the initial state — click-to-sort still fully controls `sorting` afterward. */
|
|
235
297
|
defaultSort?: SortingState;
|
|
298
|
+
/**
|
|
299
|
+
* The sort, CONTROLLED. A header click reports the next stack through `onSortingChange` and
|
|
300
|
+
* the table shows whatever comes back here. Omit it and the table owns the sort (seeded by
|
|
301
|
+
* `defaultSort`), exactly as before.
|
|
302
|
+
*
|
|
303
|
+
* For a list the SERVER orders (`serverSide`, `serverWindow`), whose sort lives in the app's
|
|
304
|
+
* query and URL: the header then says what the rows are actually sorted by, never what the
|
|
305
|
+
* table last guessed.
|
|
306
|
+
*/
|
|
307
|
+
sorting?: SortingState;
|
|
308
|
+
/**
|
|
309
|
+
* `false`: a click on the only-remaining sort key flips it back to its first direction
|
|
310
|
+
* instead of removing it — for a list that always HAS an order (a server `ORDER BY`), where
|
|
311
|
+
* "unsorted" is not a state the rows can be in. Default `true` (asc → desc → out).
|
|
312
|
+
*/
|
|
313
|
+
enableSortingRemoval?: boolean;
|
|
314
|
+
/**
|
|
315
|
+
* Sorting is unavailable right now, and this is why — the sortable headers stay VISIBLE but
|
|
316
|
+
* inert, with this sentence on hover (the owner-UI rule: disabled with the reason, never
|
|
317
|
+
* hidden). apps/music: *"The list is in play order — turn shuffle off to sort it."*
|
|
318
|
+
*/
|
|
319
|
+
sortDisabledReason?: string;
|
|
236
320
|
/**
|
|
237
321
|
* Wide-grid row density (design manual, grid-layout/ — "high-density data tables
|
|
238
322
|
* over empty visual widgets"):
|
|
@@ -358,6 +442,31 @@ export interface DataTableProps<TRow extends Record<string, unknown>> {
|
|
|
358
442
|
selectedIds?: ReadonlySet<string>;
|
|
359
443
|
/** The whole next selection (a new Set) after a row or select-all toggle. */
|
|
360
444
|
onSelectionChange?: (next: ReadonlySet<string>) => void;
|
|
445
|
+
/**
|
|
446
|
+
* The header's select-all box, owned by the CALLER — its state, its name, what a press does.
|
|
447
|
+
*
|
|
448
|
+
* 🔴 For a table that holds only part of what "all" means. Under `serverWindow` the table
|
|
449
|
+
* has a window of a hundred rows out of thousands, so its own select-all could only ever tick
|
|
450
|
+
* the hundred — a lie about the list on screen. apps/music's "all" is every track the VIEW
|
|
451
|
+
* matches, fetched as ids from the server; only the caller can know that set, so the caller
|
|
452
|
+
* owns the box. The row boxes are unchanged (`selectedIds` / `onSelectionChange`).
|
|
453
|
+
*/
|
|
454
|
+
selectAll?: DataTableSelectAll;
|
|
455
|
+
/**
|
|
456
|
+
* Attributes and handlers for one body ROW, merged onto it after the table's own —
|
|
457
|
+
* `className` joins, `style` spreads, and a handler the table also sets runs AFTER the
|
|
458
|
+
* table's (a caller can still `preventDefault()`/`stopPropagation()` for everything later).
|
|
459
|
+
*
|
|
460
|
+
* 🔴 Why (forge task 2302): a row is more than its cells. apps/music's track row carries its
|
|
461
|
+
* identity (`data-track-id` — a windowed row's POSITION is not an identity, and every browser
|
|
462
|
+
* suite addresses rows by it), `aria-current` for the playing track, double-click and Enter to
|
|
463
|
+
* play, its own drag payload for the rail, and drop handling to reorder a playlist. None of
|
|
464
|
+
* that is a cell. `rowIndex` is the row's number over the whole result set (a `serverWindow`
|
|
465
|
+
* row's absolute position).
|
|
466
|
+
*
|
|
467
|
+
* Applied to the grid row, the tablet list row and the phone card.
|
|
468
|
+
*/
|
|
469
|
+
getRowProps?: (row: TRow, rowIndex: number) => DataTableRowProps;
|
|
361
470
|
/** `false` renders that row's checkbox DISABLED (still visible) and keeps the
|
|
362
471
|
* row out of select-all. Pair with {@link unselectableReason}. */
|
|
363
472
|
isRowSelectable?: (row: TRow) => boolean;
|
|
@@ -447,7 +556,18 @@ export declare function declaredTrackFloor(columns: readonly {
|
|
|
447
556
|
* been required to be stable since ES2019 and TanStack's sorted row model uses
|
|
448
557
|
* it, so rows that tie on every key in the stack keep the order they arrived in.
|
|
449
558
|
*/
|
|
450
|
-
export declare function nextSortStack(current: SortingState, id: string, multi: boolean
|
|
559
|
+
export declare function nextSortStack(current: SortingState, id: string, multi: boolean, options?: {
|
|
560
|
+
/** The column's FIRST direction is descending (`ColDef.sortDescFirst`). */
|
|
561
|
+
descFirst?: boolean;
|
|
562
|
+
/** `false`: the last click of the cycle flips back instead of removing the key
|
|
563
|
+
* (`enableSortingRemoval`). Default `true`. */
|
|
564
|
+
removable?: boolean;
|
|
565
|
+
}): SortingState;
|
|
566
|
+
/**
|
|
567
|
+
* The table's own props for a row, with the caller's `getRowProps` merged on top: classes join,
|
|
568
|
+
* styles spread, and a handler both set runs the table's first, then the caller's.
|
|
569
|
+
*/
|
|
570
|
+
export declare function mergeRowProps<T extends Record<string, unknown>>(own: T, extra: DataTableRowProps | undefined): T & DataTableRowProps;
|
|
451
571
|
/**
|
|
452
572
|
* The one data-table primitive — a headless TanStack Table v8 instance with our markup.
|
|
453
573
|
* Sorting, global filtering, column visibility, and pagination all live in TanStack
|
|
@@ -461,5 +581,5 @@ export declare function nextSortStack(current: SortingState, id: string, multi:
|
|
|
461
581
|
* full-width accordion detail row that never breaks column alignment, and an automatic
|
|
462
582
|
* stacked-card layout under `sm` so phones are never handed a clipped grid.
|
|
463
583
|
*/
|
|
464
|
-
export declare function DataTable<TRow extends Record<string, unknown>>({ columns, data, getRowId, onRowClick, onRowEdit, onRowDelete, rowMenu, loading, emptyState, toolbar, pageSize, pageSizeOptions, hidePagination, caption, className, stickyHeader, stickyFirstColumn, renderExpanded, expandedRowId, rowClassName, hideEmptyColumns, fixedLayout, minTableWidth, scrollBody, virtualize, mobileCards, serverSide, pageCount, rowCount, onSortingChange, onColumnFiltersChange, onGlobalFilterChange, onPaginationChange, defaultSort, density, viewMode, onViewModeChange, cardMinWidth, searchable, searchPlaceholder, multiSort, filterQuery: filterQueryProp, onFilterQueryChange, getRowDrag, dragSourceId, selectedIds, onSelectionChange, isRowSelectable, unselectableReason, selectionLabel, selectionSummary, }: DataTableProps<TRow>): import("react").JSX.Element;
|
|
584
|
+
export declare function DataTable<TRow extends Record<string, unknown>>({ columns, data, getRowId, onRowClick, onRowEdit, onRowDelete, rowMenu, loading, emptyState, toolbar, pageSize, pageSizeOptions, hidePagination, caption, className, stickyHeader, stickyFirstColumn, renderExpanded, expandedRowId, rowClassName, hideEmptyColumns, fixedLayout, minTableWidth, scrollBody, virtualize, serverWindow, handleRef, scrollClassName, mobileCards, serverSide, pageCount, rowCount, onSortingChange, onColumnFiltersChange, onGlobalFilterChange, onPaginationChange, defaultSort, sorting: sortingProp, enableSortingRemoval, sortDisabledReason, density, viewMode, onViewModeChange, cardMinWidth, searchable, searchPlaceholder, multiSort, filterQuery: filterQueryProp, onFilterQueryChange, getRowDrag, dragSourceId, selectedIds, onSelectionChange, isRowSelectable, unselectableReason, selectionLabel, selectionSummary, selectAll, getRowProps, }: DataTableProps<TRow>): import("react").JSX.Element;
|
|
465
585
|
//# sourceMappingURL=DataTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/react/components/DataTable/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAOvB,KAAK,eAAe,EAEpB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/react/components/DataTable/DataTable.tsx"],"names":[],"mappings":"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"}
|