@datum-cloud/datum-ui 0.10.2 → 1.1.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/components/features/data-table/core/filter-engine.d.ts +5 -2
- package/dist/components/features/data-table/core/filter-engine.d.ts.map +1 -1
- package/dist/components/features/data-table/index.d.ts +4 -0
- package/dist/components/features/data-table/index.d.ts.map +1 -1
- package/dist/components/features/empty-content/empty-content.d.ts +17 -7
- package/dist/components/features/empty-content/empty-content.d.ts.map +1 -1
- package/dist/components/features/grouped-table/components/grouped-skeleton.d.ts +7 -0
- package/dist/components/features/grouped-table/components/grouped-skeleton.d.ts.map +1 -0
- package/dist/components/features/grouped-table/components/grouped-toolbar.d.ts +9 -0
- package/dist/components/features/grouped-table/components/grouped-toolbar.d.ts.map +1 -0
- package/dist/components/features/grouped-table/grouped-table.d.ts +3 -0
- package/dist/components/features/grouped-table/grouped-table.d.ts.map +1 -0
- package/dist/components/features/grouped-table/index.d.ts +3 -0
- package/dist/components/features/grouped-table/index.d.ts.map +1 -0
- package/dist/components/features/grouped-table/lib/bucket-rows.d.ts +14 -0
- package/dist/components/features/grouped-table/lib/bucket-rows.d.ts.map +1 -0
- package/dist/components/features/grouped-table/lib/compose-columns.d.ts +11 -0
- package/dist/components/features/grouped-table/lib/compose-columns.d.ts.map +1 -0
- package/dist/components/features/grouped-table/lib/sort-rows.d.ts +7 -0
- package/dist/components/features/grouped-table/lib/sort-rows.d.ts.map +1 -0
- package/dist/components/features/grouped-table/lib/use-controllable-state.d.ts +8 -0
- package/dist/components/features/grouped-table/lib/use-controllable-state.d.ts.map +1 -0
- package/dist/components/features/grouped-table/types.d.ts +57 -0
- package/dist/components/features/grouped-table/types.d.ts.map +1 -0
- package/dist/components/features/grouped-table/use-grouped-expansion.d.ts +10 -0
- package/dist/components/features/grouped-table/use-grouped-expansion.d.ts.map +1 -0
- package/dist/data-table/index.mjs +2 -1588
- package/dist/data-table-BTIxzB7O.mjs +1588 -0
- package/dist/empty-content/index.mjs +1 -1
- package/dist/{empty-content-CDYMYCKj.mjs → empty-content-C4Z0QVfg.mjs} +45 -31
- package/dist/grouped-table/index.mjs +339 -0
- package/dist/index.mjs +1 -1
- package/package.json +8 -3
|
@@ -13,9 +13,12 @@ interface FilterStrategies {
|
|
|
13
13
|
[key: string]: FilterFn;
|
|
14
14
|
}
|
|
15
15
|
export declare const FILTER_STRATEGIES: FilterStrategies;
|
|
16
|
-
export
|
|
16
|
+
export interface SearchConfig<TData> {
|
|
17
17
|
searchFn?: (row: TData, query: string) => boolean;
|
|
18
18
|
searchableColumns?: string[];
|
|
19
|
-
}
|
|
19
|
+
}
|
|
20
|
+
/** True when a row matches a free-text query (custom fn → columns → all values). */
|
|
21
|
+
export declare function rowMatchesSearch<TData>(row: TData, search: string, config: SearchConfig<TData>): boolean;
|
|
22
|
+
export declare function applyFilters<TData>(data: TData[], filters: Record<string, unknown>, search: string, registeredFilters: Map<string, FilterStrategy>, customFilterFns: Record<string, FilterFn>, searchConfig: SearchConfig<TData>): TData[];
|
|
20
23
|
export {};
|
|
21
24
|
//# sourceMappingURL=filter-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-engine.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/data-table/core/filter-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,KAAK,QAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,KAAK,OAAO,CAAA;AAErE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAW/D;AAED,UAAU,gBAAgB;IACxB,UAAU,EAAE,QAAQ,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,QAAQ,CAAA;IACpB,UAAU,EAAE,QAAQ,CAAA;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CACxB;AAED,eAAO,MAAM,iBAAiB,EAAE,gBAsC/B,CAAA;AAUD,
|
|
1
|
+
{"version":3,"file":"filter-engine.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/data-table/core/filter-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,KAAK,QAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,KAAK,OAAO,CAAA;AAErE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAW/D;AAED,UAAU,gBAAgB;IACxB,UAAU,EAAE,QAAQ,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,QAAQ,CAAA;IACpB,UAAU,EAAE,QAAQ,CAAA;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAA;CACxB;AAED,eAAO,MAAM,iBAAiB,EAAE,gBAsC/B,CAAA;AAUD,MAAM,WAAW,YAAY,CAAC,KAAK;IACjC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACjD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC7B;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,KAAK,EACpC,GAAG,EAAE,KAAK,EACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,GAC1B,OAAO,CAgBT;AAED,wBAAgB,YAAY,CAAC,KAAK,EAChC,IAAI,EAAE,KAAK,EAAE,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAC9C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACzC,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,GAChC,KAAK,EAAE,CA0BT"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export { useNuqsAdapter } from './adapters/nuqs-adapter';
|
|
2
2
|
export type { UseNuqsAdapterOptions } from './adapters/nuqs-adapter';
|
|
3
3
|
export { createSelectionColumn } from './columns/selection-column';
|
|
4
|
+
export { DataTableColumnHeader } from './components/column-header';
|
|
5
|
+
export { DataTableRowActions } from './components/row-actions';
|
|
4
6
|
export { DEFAULT_DEBOUNCE_MS, DEFAULT_LOADING_ROWS, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZES, } from './constants';
|
|
7
|
+
export { resolvePath, rowMatchesSearch } from './core/filter-engine';
|
|
8
|
+
export type { SearchConfig } from './core/filter-engine';
|
|
5
9
|
export { createDataTableStore } from './core/store';
|
|
6
10
|
export { DataTable } from './data-table';
|
|
7
11
|
export { useDataTableFilters, useDataTableInlineContents, useDataTableLoading, useDataTablePagination, useDataTableRows, useDataTableSearch, useDataTableSelection, useDataTableSorting, } from './hooks/use-selectors';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/data-table/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAGlE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAG9B,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/data-table/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAGlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAG9D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEpE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAG9B,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,SAAS,CAAA"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
import type { VariantProps } from 'class-variance-authority';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import type { AnchorHTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
import type { ButtonProps } from '../../base/button/button';
|
|
4
|
+
/** Shared by every action kind: full Button surface + presentation concerns. */
|
|
5
|
+
interface BaseAction extends Omit<ButtonProps, 'asChild' | 'htmlType' | 'children'> {
|
|
4
6
|
label: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/** Tooltip shown on hover/focus — pairs with `disabled` to explain why (RBAC). */
|
|
8
|
+
tooltip?: ReactNode;
|
|
9
|
+
tooltipSide?: 'top' | 'right' | 'bottom' | 'left';
|
|
10
|
+
/** Skip rendering entirely (e.g. no RBAC permission to even see it). */
|
|
11
|
+
hidden?: boolean;
|
|
10
12
|
}
|
|
13
|
+
export interface ButtonAction extends BaseAction {
|
|
14
|
+
as?: 'button';
|
|
15
|
+
}
|
|
16
|
+
export interface LinkAction extends BaseAction, Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | keyof BaseAction> {
|
|
17
|
+
as: 'link' | 'external-link';
|
|
18
|
+
to: string;
|
|
19
|
+
}
|
|
20
|
+
export type EmptyContentAction = ButtonAction | LinkAction;
|
|
11
21
|
declare const containerVariants: (props?: ({
|
|
12
22
|
variant?: "default" | "dashed" | "minimal" | null | undefined;
|
|
13
23
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty-content.d.ts","sourceRoot":"","sources":["../../../../src/components/features/empty-content/empty-content.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"empty-content.d.ts","sourceRoot":"","sources":["../../../../src/components/features/empty-content/empty-content.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAW3D,gFAAgF;AAChF,UAAU,UAAW,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,kFAAkF;IAClF,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;IACjD,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,EAAE,CAAC,EAAE,QAAQ,CAAA;CACd;AAED,MAAM,WAAW,UACf,SAAQ,UAAU,EAClB,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,UAAU,CAAC;IACxE,EAAE,EAAE,MAAM,GAAG,eAAe,CAAA;IAC5B,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,CAAA;AAG1D,QAAA,MAAM,iBAAiB;;;;8EA2BtB,CAAA;AA8FD,MAAM,WAAW,iBAAkB,SAAQ,YAAY,CAAC,OAAO,iBAAiB,CAAC;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC9B,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC1C,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oFAAoF;IACpF,aAAa,CAAC,EAAE,KAAK,CAAC,WAAW,CAAA;CAClC;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAuB,EACvB,QAAQ,EACR,OAAmB,EACnB,IAAW,EACX,SAAS,EACT,OAAY,EACZ,WAAwB,EACxB,OAAkB,EAClB,QAAQ,EACR,aAAa,GACd,EAAE,iBAAiB,+BAqHnB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface GroupedSkeletonProps {
|
|
2
|
+
columns?: number;
|
|
3
|
+
groups?: number;
|
|
4
|
+
rowsPerGroup?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function GroupedSkeleton({ columns, groups, rowsPerGroup }: GroupedSkeletonProps): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=grouped-skeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouped-skeleton.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/grouped-table/components/grouped-skeleton.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,eAAe,CAAC,EAAE,OAAW,EAAE,MAAU,EAAE,YAAgB,EAAE,EAAE,oBAAoB,+BA2BlG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface GroupedToolbarProps {
|
|
2
|
+
search: string;
|
|
3
|
+
onSearchChange: (value: string) => void;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
debounceMs?: number;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function GroupedToolbar({ search, onSearchChange, placeholder, debounceMs, className, }: GroupedToolbarProps): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=grouped-toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouped-toolbar.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/grouped-table/components/grouped-toolbar.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,cAAc,EACd,WAAyB,EACzB,UAAgC,EAChC,SAAS,GACV,EAAE,mBAAmB,+BA2BrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouped-table.d.ts","sourceRoot":"","sources":["../../../../src/components/features/grouped-table/grouped-table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AA+ChD,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,+BA2KlE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/grouped-table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Row } from '@tanstack/react-table';
|
|
2
|
+
interface GroupLike {
|
|
3
|
+
id: string;
|
|
4
|
+
rows: unknown[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Build per-group buckets of `filteredRows`, preserving the filtered order.
|
|
8
|
+
* `coreRows` are the unfiltered rows in group-concatenated order; we use their
|
|
9
|
+
* positions to learn which row id belongs to which group, so bucketing is correct
|
|
10
|
+
* regardless of a custom getRowId.
|
|
11
|
+
*/
|
|
12
|
+
export declare function bucketRows<TData>(groups: GroupLike[], coreRows: Row<TData>[], filteredRows: Row<TData>[]): Map<string, Row<TData>[]>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=bucket-rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bucket-rows.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/grouped-table/lib/bucket-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAEhD,UAAU,SAAS;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,EAAE,CAAA;CAAE;AAEnD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAC9B,MAAM,EAAE,SAAS,EAAE,EACnB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,EACtB,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GACzB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAmB3B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ColumnDef } from '@tanstack/react-table';
|
|
2
|
+
import type { SelectionColumnOptions } from '../../data-table/types';
|
|
3
|
+
import type { ActionItem } from '../../more-actions/types';
|
|
4
|
+
export interface ComposeOptions<TData> {
|
|
5
|
+
enableRowSelection?: boolean | SelectionColumnOptions;
|
|
6
|
+
enableSorting?: boolean;
|
|
7
|
+
rowActions?: (row: TData) => ActionItem<TData>[];
|
|
8
|
+
rowActionsSheetTitle?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function composeColumns<TData>(columns: ColumnDef<TData, unknown>[], options: ComposeOptions<TData>): ColumnDef<TData, unknown>[];
|
|
11
|
+
//# sourceMappingURL=compose-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-columns.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/grouped-table/lib/compose-columns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAG1D,MAAM,WAAW,cAAc,CAAC,KAAK;IACnC,kBAAkB,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAA;IACrD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAA;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAgBD,wBAAgB,cAAc,CAAC,KAAK,EAClC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EACpC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,GAC7B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CA4B7B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Row, SortingState } from '@tanstack/react-table';
|
|
2
|
+
/**
|
|
3
|
+
* Sort a single group's rows by the active sort (first entry; v1 is single-sort).
|
|
4
|
+
* Returns the same reference when there is no sort, so React can skip re-renders.
|
|
5
|
+
*/
|
|
6
|
+
export declare function sortRows<TData>(rows: Row<TData>[], sorting: SortingState): Row<TData>[];
|
|
7
|
+
//# sourceMappingURL=sort-rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-rows.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/grouped-table/lib/sort-rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAc9D;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAQvF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type Updater<T> = T | ((prev: T) => T);
|
|
2
|
+
/**
|
|
3
|
+
* Uncontrolled-by-default state with an optional controlled override.
|
|
4
|
+
* When `controlled` is undefined the hook owns the value; otherwise the prop wins.
|
|
5
|
+
* `onChange` always fires. Accepts TanStack-style updater functions.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useControllableState<T>(controlled: T | undefined, defaultValue: T, onChange?: (value: T) => void): readonly [T, (next: Updater<T>) => void];
|
|
8
|
+
//# sourceMappingURL=use-controllable-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-controllable-state.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/grouped-table/lib/use-controllable-state.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;AAE7C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,UAAU,EAAE,CAAC,GAAG,SAAS,EACzB,YAAY,EAAE,CAAC,EACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAC5B,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAiB1C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { ColumnDef, RowSelectionState, SortingState } from '@tanstack/react-table';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
import type { SelectionColumnOptions } from '../data-table/types';
|
|
4
|
+
import type { ActionItem } from '../more-actions/types';
|
|
5
|
+
export type DefaultExpanded = 'all' | 'none' | string[];
|
|
6
|
+
export interface GroupedTableGroup<TData> {
|
|
7
|
+
/** Stable key used for expand state. */
|
|
8
|
+
id: string;
|
|
9
|
+
/** Group header label. */
|
|
10
|
+
title: ReactNode;
|
|
11
|
+
/** Right-aligned header slot — count, badges, actions. */
|
|
12
|
+
meta?: ReactNode;
|
|
13
|
+
rows: TData[];
|
|
14
|
+
/** Per-group override of the table-level default. */
|
|
15
|
+
defaultOpen?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface GroupedTableProps<TData> {
|
|
18
|
+
/** TanStack column defs. `size` (px) drives the shared grid template; unsized columns flex. */
|
|
19
|
+
columns: ColumnDef<TData, unknown>[];
|
|
20
|
+
groups: GroupedTableGroup<TData>[];
|
|
21
|
+
/** Uncontrolled initial state. Default `'all'`. A string[] opens exactly those ids. */
|
|
22
|
+
defaultExpanded?: DefaultExpanded;
|
|
23
|
+
/** Controlled open ids. When set, the component does not own expansion state. */
|
|
24
|
+
expanded?: string[];
|
|
25
|
+
onExpandedChange?: (openIds: string[]) => void;
|
|
26
|
+
/**
|
|
27
|
+
* Stable row identity, passed through to TanStack. Supply this when consumers
|
|
28
|
+
* reorder rows or groups so React keys stay stable across renders instead of
|
|
29
|
+
* defaulting to the flattened row index.
|
|
30
|
+
*/
|
|
31
|
+
getRowId?: (row: TData, index: number) => string;
|
|
32
|
+
/** Prepend a checkbox column; pass options to customize. */
|
|
33
|
+
enableRowSelection?: boolean | SelectionColumnOptions;
|
|
34
|
+
rowSelection?: RowSelectionState;
|
|
35
|
+
onRowSelectionChange?: (selection: RowSelectionState) => void;
|
|
36
|
+
/** Append a "⋯" actions column. Receives the row to allow conditional actions. */
|
|
37
|
+
rowActions?: (row: TData) => ActionItem<TData>[];
|
|
38
|
+
rowActionsSheetTitle?: string;
|
|
39
|
+
/** Enable sortable headers; sorting is applied within each group. */
|
|
40
|
+
enableSorting?: boolean;
|
|
41
|
+
sorting?: SortingState;
|
|
42
|
+
onSortingChange?: (sorting: SortingState) => void;
|
|
43
|
+
/** Render a built-in debounced search input above the table. */
|
|
44
|
+
enableSearch?: boolean;
|
|
45
|
+
searchPlaceholder?: string;
|
|
46
|
+
searchableColumns?: string[];
|
|
47
|
+
searchFn?: (row: TData, query: string) => boolean;
|
|
48
|
+
search?: string;
|
|
49
|
+
onSearchChange?: (search: string) => void;
|
|
50
|
+
searchDebounceMs?: number;
|
|
51
|
+
/** Render a skeleton instead of rows. */
|
|
52
|
+
isLoading?: boolean;
|
|
53
|
+
/** Rendered when there are no groups, every group is empty, or search clears everything. */
|
|
54
|
+
empty?: ReactNode;
|
|
55
|
+
className?: string;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/features/grouped-table/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;AAEvD,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAA;IACV,0BAA0B;IAC1B,KAAK,EAAE,SAAS,CAAA;IAChB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,IAAI,EAAE,KAAK,EAAE,CAAA;IACb,qDAAqD;IACrD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,+FAA+F;IAC/F,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAA;IACpC,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAA;IAClC,uFAAuF;IACvF,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAEhD,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAA;IACrD,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAE7D,kFAAkF;IAClF,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE,CAAA;IAChD,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAA;IAEjD,gEAAgE;IAChE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DefaultExpanded, GroupedTableGroup } from './types';
|
|
2
|
+
export declare function useGroupedExpansion<TData>(groups: GroupedTableGroup<TData>[], opts: {
|
|
3
|
+
defaultExpanded?: DefaultExpanded;
|
|
4
|
+
expanded?: string[];
|
|
5
|
+
onExpandedChange?: (ids: string[]) => void;
|
|
6
|
+
}): {
|
|
7
|
+
isOpen: (id: string) => boolean;
|
|
8
|
+
toggle: (id: string) => void;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=use-grouped-expansion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-grouped-expansion.d.ts","sourceRoot":"","sources":["../../../../src/components/features/grouped-table/use-grouped-expansion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAajE,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,EAClC,IAAI,EAAE;IAAE,eAAe,CAAC,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CAAE;iBAQ5E,MAAM,KAAG,OAAO;iBAShB,MAAM;EASvC"}
|