yk-grid 0.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.
Files changed (38) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +355 -0
  3. package/dist/server.cjs +88 -0
  4. package/dist/server.mjs +3144 -0
  5. package/dist/types/DataGrid.d.ts +5 -0
  6. package/dist/types/ai/aiClient.d.ts +3 -0
  7. package/dist/types/ai/applyCommand.d.ts +3 -0
  8. package/dist/types/ai/schema.d.ts +28 -0
  9. package/dist/types/index.d.ts +2 -0
  10. package/dist/types/server/gridAiRoute.d.ts +47 -0
  11. package/dist/types/server/index.d.ts +1 -0
  12. package/dist/types/server/providers/anthropic.d.ts +7 -0
  13. package/dist/types/server/providers/openai.d.ts +7 -0
  14. package/dist/types/server/providers/types.d.ts +3 -0
  15. package/dist/types/server/schema.d.ts +28 -0
  16. package/dist/types/state/aggregations.d.ts +2 -0
  17. package/dist/types/state/exportCsv.d.ts +3 -0
  18. package/dist/types/state/gridReducer.d.ts +43 -0
  19. package/dist/types/state/paginate.d.ts +3 -0
  20. package/dist/types/state/processRows.d.ts +5 -0
  21. package/dist/types/state/selection.d.ts +1 -0
  22. package/dist/types/state/useGridState.d.ts +8 -0
  23. package/dist/types/types.d.ts +106 -0
  24. package/dist/types/ui/AiBar.d.ts +13 -0
  25. package/dist/types/ui/Cell.d.ts +13 -0
  26. package/dist/types/ui/ColumnMenu.d.ts +10 -0
  27. package/dist/types/ui/FilterPanel.d.ts +11 -0
  28. package/dist/types/ui/GroupRow.d.ts +9 -0
  29. package/dist/types/ui/HeaderCell.d.ts +21 -0
  30. package/dist/types/ui/NumberFilter.d.ts +9 -0
  31. package/dist/types/ui/Pagination.d.ts +10 -0
  32. package/dist/types/ui/Row.d.ts +20 -0
  33. package/dist/types/ui/SelectionCell.d.ts +10 -0
  34. package/dist/types/ui/Toolbar.d.ts +21 -0
  35. package/dist/yk-grid.cjs.js +8 -0
  36. package/dist/yk-grid.css +2 -0
  37. package/dist/yk-grid.es.js +1973 -0
  38. package/package.json +90 -0
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { DataGridProps, GridRef } from './types';
3
+ export declare const DataGrid: <T>(props: DataGridProps<T> & {
4
+ ref?: React.Ref<GridRef<T>>;
5
+ }) => React.ReactElement;
@@ -0,0 +1,3 @@
1
+ import { AiCommand } from './schema';
2
+ import { ColumnDef, GridState } from '../types';
3
+ export declare function fetchAiCommand<T>(endpoint: string, prompt: string, columns: ColumnDef<T>[], currentState: GridState, signal?: AbortSignal): Promise<AiCommand>;
@@ -0,0 +1,3 @@
1
+ import { AiCommand } from './schema';
2
+ import { GridAction } from '../state/gridReducer';
3
+ export declare function applyCommand(command: AiCommand, knownColumnIds: Set<string>): GridAction[];
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ export declare const AiCommandSchema: z.ZodObject<{
3
+ sorts: z.ZodOptional<z.ZodArray<z.ZodObject<{
4
+ columnId: z.ZodString;
5
+ direction: z.ZodEnum<{
6
+ asc: "asc";
7
+ desc: "desc";
8
+ }>;
9
+ }, z.core.$strip>>>;
10
+ filters: z.ZodOptional<z.ZodArray<z.ZodObject<{
11
+ columnId: z.ZodString;
12
+ operator: z.ZodEnum<{
13
+ eq: "eq";
14
+ contains: "contains";
15
+ gt: "gt";
16
+ gte: "gte";
17
+ lt: "lt";
18
+ lte: "lte";
19
+ between: "between";
20
+ in: "in";
21
+ }>;
22
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
23
+ }, z.core.$strip>>>;
24
+ grouping: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ reset: z.ZodOptional<z.ZodBoolean>;
26
+ explanation: z.ZodString;
27
+ }, z.core.$strip>;
28
+ export type AiCommand = z.infer<typeof AiCommandSchema>;
@@ -0,0 +1,2 @@
1
+ export { DataGrid } from './DataGrid';
2
+ export type { ColumnDef, DataGridProps, GridRef, GridState, SortEntry, FilterEntry, PaginationState, DisplayRow, GroupHeaderRow, DataDisplayRow, ToolbarCtx, } from './types';
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Framework-agnostic AI route handler for the grid.
3
+ *
4
+ * Usage with Express:
5
+ * import express from 'express'
6
+ * import { handleGridAiRequest } from './gridAiRoute'
7
+ * const app = express()
8
+ * app.use(express.json())
9
+ * app.post('/api/grid-ai', async (req, res) => {
10
+ * const result = await handleGridAiRequest(req.body)
11
+ * res.json(result)
12
+ * })
13
+ *
14
+ * Usage with Next.js App Router:
15
+ * import { handleGridAiRequest } from '@/server/gridAiRoute'
16
+ * export async function POST(req: Request) {
17
+ * const body = await req.json()
18
+ * const result = await handleGridAiRequest(body)
19
+ * return Response.json(result)
20
+ * }
21
+ *
22
+ * Set LLM_PROVIDER=openai to use OpenAI; defaults to Anthropic.
23
+ * Set ANTHROPIC_API_KEY or OPENAI_API_KEY in your environment.
24
+ */
25
+ interface ColumnMeta {
26
+ id: string;
27
+ header: string;
28
+ filterType?: string;
29
+ }
30
+ interface GridAiRequestBody {
31
+ prompt: string;
32
+ columns: ColumnMeta[];
33
+ currentState: {
34
+ sorts?: Array<{
35
+ columnId: string;
36
+ direction: string;
37
+ }>;
38
+ filters?: Array<{
39
+ columnId: string;
40
+ operator: string;
41
+ value: unknown;
42
+ }>;
43
+ grouping?: string[];
44
+ };
45
+ }
46
+ export declare function handleGridAiRequest(body: GridAiRequestBody): Promise<unknown>;
47
+ export {};
@@ -0,0 +1 @@
1
+ export { handleGridAiRequest } from './gridAiRoute';
@@ -0,0 +1,7 @@
1
+ import { LlmProvider } from './types';
2
+ export declare class AnthropicProvider implements LlmProvider {
3
+ private readonly apiKey;
4
+ private readonly model;
5
+ constructor(apiKey?: string, model?: string);
6
+ complete(system: string, user: string): Promise<string>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { LlmProvider } from './types';
2
+ export declare class OpenAiProvider implements LlmProvider {
3
+ private readonly apiKey;
4
+ private readonly model;
5
+ constructor(apiKey?: string, model?: string);
6
+ complete(system: string, user: string): Promise<string>;
7
+ }
@@ -0,0 +1,3 @@
1
+ export interface LlmProvider {
2
+ complete(system: string, user: string): Promise<string>;
3
+ }
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ export declare const AiCommandSchema: z.ZodObject<{
3
+ sorts: z.ZodOptional<z.ZodArray<z.ZodObject<{
4
+ columnId: z.ZodString;
5
+ direction: z.ZodEnum<{
6
+ asc: "asc";
7
+ desc: "desc";
8
+ }>;
9
+ }, z.core.$strip>>>;
10
+ filters: z.ZodOptional<z.ZodArray<z.ZodObject<{
11
+ columnId: z.ZodString;
12
+ operator: z.ZodEnum<{
13
+ eq: "eq";
14
+ contains: "contains";
15
+ gt: "gt";
16
+ gte: "gte";
17
+ lt: "lt";
18
+ lte: "lte";
19
+ between: "between";
20
+ in: "in";
21
+ }>;
22
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
23
+ }, z.core.$strip>>>;
24
+ grouping: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ reset: z.ZodOptional<z.ZodBoolean>;
26
+ explanation: z.ZodString;
27
+ }, z.core.$strip>;
28
+ export type AiCommand = z.infer<typeof AiCommandSchema>;
@@ -0,0 +1,2 @@
1
+ export type AggregationType = 'sum' | 'avg' | 'count' | 'min' | 'max';
2
+ export declare function aggregate(values: number[], type: AggregationType): number | null;
@@ -0,0 +1,3 @@
1
+ import { ColumnDef } from '../types';
2
+ export declare function exportCsv<T>(rows: T[], columns: ColumnDef<T>[]): string;
3
+ export declare function triggerCsvDownload(csv: string, filename: string): void;
@@ -0,0 +1,43 @@
1
+ import { GridState, SortEntry, FilterEntry } from '../types';
2
+ export type GridAction = {
3
+ type: 'SET_SORT';
4
+ sorts: SortEntry[];
5
+ } | {
6
+ type: 'SET_FILTER';
7
+ filters: FilterEntry[];
8
+ } | {
9
+ type: 'SET_GROUPING';
10
+ grouping: string[];
11
+ } | {
12
+ type: 'SET_PAGE';
13
+ pageIndex: number;
14
+ } | {
15
+ type: 'SET_PAGE_SIZE';
16
+ pageSize: number;
17
+ } | {
18
+ type: 'SET_COLUMN_SIZE';
19
+ columnId: string;
20
+ width: number;
21
+ } | {
22
+ type: 'SET_COLUMN_VISIBILITY';
23
+ columnId: string;
24
+ visible: boolean;
25
+ } | {
26
+ type: 'TOGGLE_SELECT';
27
+ rowId: string;
28
+ mode: 'single' | 'multiple';
29
+ } | {
30
+ type: 'SELECT_ALL';
31
+ rowIds: string[];
32
+ } | {
33
+ type: 'CLEAR_SELECTION';
34
+ } | {
35
+ type: 'TOGGLE_EXPAND';
36
+ groupId: string;
37
+ } | {
38
+ type: 'APPLY_AI';
39
+ partial: Partial<Pick<GridState, 'sorts' | 'filters' | 'grouping'>>;
40
+ } | {
41
+ type: 'RESET';
42
+ };
43
+ export declare function gridReducer(state: GridState, action: GridAction): GridState;
@@ -0,0 +1,3 @@
1
+ import { PaginationState } from '../types';
2
+ export declare function paginateRows<T>(rows: T[], pagination: PaginationState): T[];
3
+ export declare function pageCount(totalRows: number, pageSize: number): number;
@@ -0,0 +1,5 @@
1
+ import { ColumnDef, DisplayRow, FilterEntry, GridState } from '../types';
2
+ export type CellValue = string | number | Date | null;
3
+ export declare function filterSourceRows<T>(rows: T[], columns: ColumnDef<T>[], filters: FilterEntry[]): T[];
4
+ export declare function processRows<T>(rows: T[], columns: ColumnDef<T>[], state: Pick<GridState, 'sorts' | 'filters' | 'grouping' | 'expanded'>): DisplayRow<T>[];
5
+ export declare function extractDataRows<T>(displayRows: DisplayRow<T>[]): T[];
@@ -0,0 +1 @@
1
+ export declare function resolveSelection<T>(ids: Set<string>, rows: T[], getRowId: (row: T) => string): T[];
@@ -0,0 +1,8 @@
1
+ import { GridState, GridRef } from '../types';
2
+ import { GridAction } from './gridReducer';
3
+ export declare function buildInitialState(initial: Partial<GridState> | undefined, pageSize: number): GridState;
4
+ export declare function useGridState(initialState: GridState): {
5
+ state: GridState;
6
+ dispatch: (action: GridAction) => void;
7
+ };
8
+ export type { GridRef };
@@ -0,0 +1,106 @@
1
+ import React from 'react';
2
+ export interface ColumnDef<T> {
3
+ id: string;
4
+ header: string;
5
+ accessor: (row: T) => string | number | Date | null;
6
+ cell?: (value: unknown, row: T) => React.ReactNode;
7
+ exportValue?: (row: T) => string | number;
8
+ sortable?: boolean;
9
+ filterable?: boolean;
10
+ groupable?: boolean;
11
+ aggregation?: 'sum' | 'avg' | 'count' | 'min' | 'max';
12
+ filterType?: 'text' | 'number' | 'select' | 'date';
13
+ filterOptions?: string[];
14
+ width?: number;
15
+ minWidth?: number;
16
+ resizable?: boolean;
17
+ hideable?: boolean;
18
+ defaultHidden?: boolean;
19
+ editable?: boolean;
20
+ }
21
+ export interface SortEntry {
22
+ columnId: string;
23
+ direction: 'asc' | 'desc';
24
+ }
25
+ export interface FilterEntry {
26
+ columnId: string;
27
+ operator: 'eq' | 'contains' | 'gt' | 'gte' | 'lt' | 'lte' | 'between' | 'in';
28
+ value: string | number | Array<string | number>;
29
+ }
30
+ export interface PaginationState {
31
+ pageIndex: number;
32
+ pageSize: number;
33
+ }
34
+ export interface GridState {
35
+ sorts: SortEntry[];
36
+ filters: FilterEntry[];
37
+ grouping: string[];
38
+ expanded: Set<string>;
39
+ selection: Set<string>;
40
+ pagination: PaginationState;
41
+ columnSizing: Record<string, number>;
42
+ columnVisibility: Record<string, boolean>;
43
+ }
44
+ export interface DataGridProps<T> {
45
+ data: T[];
46
+ columns: ColumnDef<T>[];
47
+ getRowId: (row: T) => string;
48
+ onRowClick?: (row: T, index: number, e: React.MouseEvent) => void;
49
+ onCellClick?: (value: unknown, row: T, column: ColumnDef<T>, e: React.MouseEvent) => void;
50
+ dataMode?: 'client' | 'server';
51
+ pageSize?: number;
52
+ rowCount?: number;
53
+ loading?: boolean;
54
+ onStateChange?: (state: GridState) => void;
55
+ selectionMode?: 'none' | 'single' | 'multiple';
56
+ selectAllScope?: 'page' | 'filtered';
57
+ onSelectionChange?: (rows: T[], ids: string[]) => void;
58
+ enableCsvExport?: boolean;
59
+ csvFilename?: string;
60
+ enableColumnResize?: boolean;
61
+ enableColumnVisibility?: boolean;
62
+ toolbarActions?: (ctx: ToolbarCtx<T>) => React.ReactNode;
63
+ fetchFilterOptions?: (columnId: string) => Promise<string[]>;
64
+ ai?: {
65
+ endpoint: string;
66
+ placeholder?: string;
67
+ };
68
+ height?: number | string;
69
+ estimatedRowHeight?: number;
70
+ onCellEdit?: (newValue: string | number, row: T, column: ColumnDef<T>) => void;
71
+ initialState?: Partial<GridState>;
72
+ emptyState?: React.ReactNode;
73
+ className?: string;
74
+ }
75
+ export interface GroupHeaderRow {
76
+ _type: 'group';
77
+ id: string;
78
+ columnId: string;
79
+ value: string | number | Date | null;
80
+ depth: number;
81
+ childCount: number;
82
+ aggregates: Record<string, number | null>;
83
+ isExpanded: boolean;
84
+ }
85
+ export interface DataDisplayRow<T> {
86
+ _type: 'data';
87
+ row: T;
88
+ }
89
+ export type DisplayRow<T> = GroupHeaderRow | DataDisplayRow<T>;
90
+ export interface ToolbarCtx<T> {
91
+ selectedRows: T[];
92
+ selectedIds: string[];
93
+ processedRows: T[];
94
+ gridState: GridState;
95
+ clearSelection: () => void;
96
+ }
97
+ export interface GridRef<T> {
98
+ getSelectedRows: () => T[];
99
+ getProcessedRows: () => T[];
100
+ getGridState: () => GridState;
101
+ clearSelection: () => void;
102
+ exportCsv: (opts?: {
103
+ selectedOnly?: boolean;
104
+ }) => void;
105
+ setState: (partial: Partial<GridState>) => void;
106
+ }
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { AiCommand } from '../ai/schema';
3
+ import { ColumnDef, GridState } from '../types';
4
+ interface Props<T> {
5
+ endpoint: string;
6
+ placeholder?: string;
7
+ columns: ColumnDef<T>[];
8
+ gridState: GridState;
9
+ onCommand: (command: AiCommand) => void;
10
+ onReset: () => void;
11
+ }
12
+ export declare function AiBar<T>({ endpoint, placeholder, columns, gridState, onCommand, onReset }: Props<T>): React.JSX.Element;
13
+ export {};
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { ColumnDef } from '../types';
3
+ interface Props<T> {
4
+ column: ColumnDef<T>;
5
+ row: T;
6
+ onCellClick?: (value: unknown, row: T, column: ColumnDef<T>, e: React.MouseEvent) => void;
7
+ isEditing?: boolean;
8
+ onStartEdit?: () => void;
9
+ onCommitEdit?: (newValue: string | number, row: T, column: ColumnDef<T>) => void;
10
+ onCancelEdit?: () => void;
11
+ }
12
+ export declare function Cell<T>({ column, row, onCellClick, isEditing, onStartEdit, onCommitEdit, onCancelEdit, }: Props<T>): React.JSX.Element;
13
+ export {};
@@ -0,0 +1,10 @@
1
+ import { ColumnDef } from '../types';
2
+ interface Props<T> {
3
+ columns: ColumnDef<T>[];
4
+ columnVisibility: Record<string, boolean>;
5
+ anchorRect: DOMRect;
6
+ onToggleColumn: (columnId: string, visible: boolean) => void;
7
+ onClose: () => void;
8
+ }
9
+ export declare function ColumnMenu<T>({ columns, columnVisibility, anchorRect, onToggleColumn, onClose }: Props<T>): import("react").ReactPortal;
10
+ export {};
@@ -0,0 +1,11 @@
1
+ import { ColumnDef, FilterEntry } from '../types';
2
+ interface Props<T> {
3
+ column: ColumnDef<T>;
4
+ filterEntry: FilterEntry | undefined;
5
+ filterOptions?: string[];
6
+ anchorRect: DOMRect;
7
+ onClose: () => void;
8
+ onChange: (value: FilterEntry['value'] | null, operator: FilterEntry['operator']) => void;
9
+ }
10
+ export declare function FilterPanel<T>({ column, filterEntry, filterOptions, anchorRect, onClose, onChange, }: Props<T>): import("react").ReactPortal;
11
+ export {};
@@ -0,0 +1,9 @@
1
+ import { ColumnDef, GroupHeaderRow } from '../types';
2
+ interface Props<T> {
3
+ row: GroupHeaderRow;
4
+ columns: ColumnDef<T>[];
5
+ visibleColumnIds: Set<string>;
6
+ onToggle: () => void;
7
+ }
8
+ export declare function GroupRow<T>({ row, columns, visibleColumnIds, onToggle }: Props<T>): import("react").JSX.Element;
9
+ export {};
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { ColumnDef, SortEntry } from '../types';
3
+ interface Props<T> {
4
+ column: ColumnDef<T>;
5
+ sortEntry?: SortEntry;
6
+ sortIndex: number;
7
+ totalSorts: number;
8
+ width?: number;
9
+ onSort?: (columnId: string, multi: boolean) => void;
10
+ enableResize?: boolean;
11
+ onResize?: (columnId: string, width: number) => void;
12
+ enableMenu?: boolean;
13
+ menuOpen?: boolean;
14
+ onToggleMenu?: (columnId: string, anchorRect: DOMRect) => void;
15
+ columnMenuSlot?: React.ReactNode;
16
+ filterActive?: boolean;
17
+ filterPanelOpen?: boolean;
18
+ onToggleFilter?: (columnId: string, anchorRect: DOMRect) => void;
19
+ }
20
+ export declare function HeaderCell<T>({ column, sortEntry, sortIndex, totalSorts, width, onSort, enableResize, onResize, enableMenu, menuOpen, onToggleMenu, columnMenuSlot, filterActive, filterPanelOpen, onToggleFilter, }: Props<T>): React.JSX.Element;
21
+ export {};
@@ -0,0 +1,9 @@
1
+ import { FilterEntry } from '../types';
2
+ interface Props {
3
+ columnHeader: string;
4
+ value: FilterEntry['value'] | null;
5
+ operator: FilterEntry['operator'] | null;
6
+ onChange: (value: FilterEntry['value'] | null, operator: FilterEntry['operator']) => void;
7
+ }
8
+ export declare function NumberFilter({ columnHeader, value, operator: externalOperator, onChange }: Props): import("react").JSX.Element;
9
+ export {};
@@ -0,0 +1,10 @@
1
+ interface Props {
2
+ pageIndex: number;
3
+ pageCount: number;
4
+ pageSize: number;
5
+ totalRows: number;
6
+ onPageChange: (page: number) => void;
7
+ onPageSizeChange: (size: number) => void;
8
+ }
9
+ export declare function Pagination({ pageIndex, pageCount, pageSize, totalRows, onPageChange, onPageSizeChange }: Props): import("react").JSX.Element;
10
+ export {};
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { ColumnDef } from '../types';
3
+ interface Props<T> {
4
+ row: T;
5
+ rowIndex: number;
6
+ rowId: string;
7
+ columns: ColumnDef<T>[];
8
+ visibleColumnIds: Set<string>;
9
+ selectionMode?: 'none' | 'single' | 'multiple';
10
+ isSelected?: boolean;
11
+ onToggleSelect?: (rowId: string) => void;
12
+ onRowClick?: (row: T, index: number, e: React.MouseEvent) => void;
13
+ onCellClick?: (value: unknown, row: T, column: ColumnDef<T>, e: React.MouseEvent) => void;
14
+ editingColumnId?: string;
15
+ onStartEdit?: (rowId: string, columnId: string) => void;
16
+ onCommitEdit?: (newValue: string | number, row: T, column: ColumnDef<T>) => void;
17
+ onCancelEdit?: () => void;
18
+ }
19
+ export declare function Row<T>({ row, rowIndex, rowId, columns, visibleColumnIds, selectionMode, isSelected, onToggleSelect, onRowClick, onCellClick, editingColumnId, onStartEdit, onCommitEdit, onCancelEdit, }: Props<T>): React.JSX.Element;
20
+ export {};
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ checked: boolean;
4
+ indeterminate?: boolean;
5
+ onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
6
+ ariaLabel: string;
7
+ isHeader?: boolean;
8
+ }
9
+ export declare function SelectionCell({ checked, indeterminate, onChange, ariaLabel, isHeader }: Props): React.JSX.Element;
10
+ export {};
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { GridState, ColumnDef } from '../types';
3
+ interface Props<T> {
4
+ selectedRows: T[];
5
+ selectedIds: string[];
6
+ processedRows: T[];
7
+ gridState: GridState;
8
+ clearSelection: () => void;
9
+ enableCsvExport?: boolean;
10
+ onExport?: () => void;
11
+ toolbarActions?: (ctx: {
12
+ selectedRows: T[];
13
+ selectedIds: string[];
14
+ processedRows: T[];
15
+ gridState: GridState;
16
+ clearSelection: () => void;
17
+ }) => React.ReactNode;
18
+ columns: ColumnDef<T>[];
19
+ }
20
+ export declare function Toolbar<T>({ selectedRows, selectedIds, processedRows, gridState, clearSelection, enableCsvExport, onExport, toolbarActions, columns: _columns, }: Props<T>): React.JSX.Element | null;
21
+ export {};
@@ -0,0 +1,8 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let l=require("react");l=c(l);let u=require("@tanstack/react-virtual"),d=require("react-dom"),f=require("zod");function p(e,t){switch(t.type){case`SET_SORT`:return{...e,sorts:t.sorts};case`SET_FILTER`:return{...e,filters:t.filters,pagination:{...e.pagination,pageIndex:0}};case`SET_GROUPING`:return{...e,grouping:t.grouping,pagination:{...e.pagination,pageIndex:0}};case`SET_PAGE`:return{...e,pagination:{...e.pagination,pageIndex:t.pageIndex}};case`SET_PAGE_SIZE`:return{...e,pagination:{...e.pagination,pageSize:t.pageSize,pageIndex:0}};case`SET_COLUMN_SIZE`:return{...e,columnSizing:{...e.columnSizing,[t.columnId]:t.width}};case`SET_COLUMN_VISIBILITY`:return{...e,columnVisibility:{...e.columnVisibility,[t.columnId]:t.visible}};case`TOGGLE_SELECT`:{let n=new Set(e.selection);return t.mode===`single`?n.has(t.rowId)?n.clear():(n.clear(),n.add(t.rowId)):n.has(t.rowId)?n.delete(t.rowId):n.add(t.rowId),{...e,selection:n}}case`SELECT_ALL`:return{...e,selection:new Set(t.rowIds)};case`CLEAR_SELECTION`:return{...e,selection:new Set};case`TOGGLE_EXPAND`:{let n=new Set(e.expanded);return n.has(t.groupId)?n.delete(t.groupId):n.add(t.groupId),{...e,expanded:n}}case`APPLY_AI`:return{...e,...t.partial.sorts!==void 0&&{sorts:t.partial.sorts},...t.partial.filters!==void 0&&{filters:t.partial.filters},...t.partial.grouping!==void 0&&{grouping:t.partial.grouping},pagination:{...e.pagination,pageIndex:0}};case`RESET`:return{...e,sorts:[],filters:[],grouping:[],pagination:{...e.pagination,pageIndex:0}};default:return e}}var m={sorts:[],filters:[],grouping:[],expanded:new Set,selection:new Set,pagination:{pageIndex:0,pageSize:20},columnSizing:{},columnVisibility:{}};function h(e,t){return{...m,...e,pagination:{pageIndex:0,pageSize:t,...e?.pagination}}}function g(e){let[t,n]=(0,l.useReducer)(p,e);return{state:t,dispatch:(0,l.useCallback)(e=>{n(e)},[])}}function _(e,t){if(t===`count`)return e.length;if(e.length===0)return null;switch(t){case`sum`:return e.reduce((e,t)=>e+t,0);case`avg`:return e.reduce((e,t)=>e+t,0)/e.length;case`min`:return Math.min(...e);case`max`:return Math.max(...e)}}function v(e,t){return e instanceof Date&&t instanceof Date?e.valueOf()-t.valueOf():typeof e==`number`&&typeof t==`number`?e-t:String(e).localeCompare(String(t),void 0,{numeric:!0,sensitivity:`base`})}function y(e){if(typeof e==`number`)return e;let t=new Date(e);return isNaN(t.valueOf())?NaN:t.valueOf()}function b(e,t){if(e===null)return!1;let{operator:n,value:r}=t;switch(n){case`eq`:return e instanceof Date?e.toISOString().startsWith(String(r)):typeof e==`number`?e===Number(r):String(e).toLowerCase()===String(r).toLowerCase();case`contains`:return String(e).toLowerCase().includes(String(r).toLowerCase());case`gt`:return e instanceof Date?e.valueOf()>y(r):typeof e==`number`?e>Number(r):String(e).localeCompare(String(r))>0;case`gte`:return e instanceof Date?e.valueOf()>=y(r):typeof e==`number`?e>=Number(r):String(e).localeCompare(String(r))>=0;case`lt`:return e instanceof Date?e.valueOf()<y(r):typeof e==`number`?e<Number(r):String(e).localeCompare(String(r))<0;case`lte`:return e instanceof Date?e.valueOf()<=y(r):typeof e==`number`?e<=Number(r):String(e).localeCompare(String(r))<=0;case`between`:{if(!Array.isArray(r)||r.length<2)return!0;let[t,n]=r;if(e instanceof Date){let r=e.valueOf();return r>=y(t)&&r<=y(n)}if(typeof e==`number`)return e>=Number(t)&&e<=Number(n);let i=String(e).toLowerCase();return i>=String(t).toLowerCase()&&i<=String(n).toLowerCase()}case`in`:return(Array.isArray(r)?r:[r]).some(t=>String(e).toLowerCase()===String(t).toLowerCase())}}function x(e,t,n){return n.length===0?e:[...e].sort((e,r)=>{for(let{columnId:i,direction:a}of n){let n=t.get(i);if(!n)continue;let o=n.accessor(e),s=n.accessor(r);if(o===null&&s===null)continue;if(o===null)return 1;if(s===null)return-1;let c=v(o,s);if(c!==0)return a===`asc`?c:-c}return 0})}function S(e,t,n,r,i,a){let o=n.grouping[i],s=t.get(o);if(!s)return e.map(e=>({_type:`data`,row:e}));let c=[],l=new Map;for(let t of e){let e=s.accessor(t),n=e===null?`\0null`:e instanceof Date?e.toISOString():String(e);l.has(n)||(l.set(n,c.length),c.push({key:n,value:e,rows:[]})),c[l.get(n)].rows.push(t)}let u=n.sorts.find(e=>e.columnId===o);u&&c.sort((e,t)=>{if(e.value===null&&t.value===null)return 0;if(e.value===null)return 1;if(t.value===null)return-1;let n=v(e.value,t.value);return u.direction===`asc`?n:-n});let d=[];for(let e of c){let s={};for(let[n,r]of t)r.aggregation&&(s[n]=_(r.aggregation===`count`?Array.from({length:e.rows.length},()=>1):e.rows.map(e=>r.accessor(e)).filter(e=>typeof e==`number`),r.aggregation));let c=a?`${a}|${o}:${e.key}`:`${o}:${e.key}`,l=n.expanded.has(c),u={_type:`group`,id:c,columnId:o,value:e.value,depth:r,childCount:e.rows.length,aggregates:s,isExpanded:l};if(d.push(u),l)if(i+1<n.grouping.length)d.push(...S(e.rows,t,n,r+1,i+1,c));else{let r=n.sorts.filter(e=>!n.grouping.includes(e.columnId)),i=x(e.rows,t,r);d.push(...i.map(e=>({_type:`data`,row:e})))}}return d}function ee(e,t,n){if(n.length===0)return e;let r=new Map(t.map(e=>[e.id,e]));return e.filter(e=>n.every(t=>{let n=r.get(t.columnId);return n?b(n.accessor(e),t):!0}))}function te(e,t,n){let r=new Map(t.map(e=>[e.id,e])),i=ee(e,t,n.filters);return n.grouping.length===0?x(i,r,n.sorts).map(e=>({_type:`data`,row:e})):S(i,r,n,0,0,``)}function ne(e,t){let{pageIndex:n,pageSize:r}=t,i=n*r;return e.slice(i,i+r)}function C(e,t){return Math.max(1,Math.ceil(e/t))}function w(e,t,n){return e.size===0?[]:t.filter(t=>e.has(n(t)))}function T(e){if(e==null)return``;let t=String(e),n=/^[=+\-@\t\r]/.test(t)?`\t${t}`:t;return n.includes(`,`)||n.includes(`
2
+ `)||n.includes(`"`)?`"${n.replace(/"/g,`""`)}"`:n}function E(e,t){let n=t.filter(e=>e.hideable!==!0||e.defaultHidden!==!0);return[n.map(e=>T(e.header)).join(`,`),...e.map(e=>n.map(t=>{let n=t.exportValue?t.exportValue(e):t.accessor(e);return T(n instanceof Date?n.toISOString():n)}).join(`,`))].join(`
3
+ `)}function re(e,t){let n=new Blob([e],{type:`text/csv;charset=utf-8;`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t,i.click(),URL.revokeObjectURL(r)}function ie(e,t){if(e.reset)return[{type:`RESET`}];let n={};return e.filters&&(n.filters=e.filters.filter(e=>t.has(e.columnId))),e.sorts&&(n.sorts=e.sorts.filter(e=>t.has(e.columnId))),e.grouping&&(n.grouping=e.grouping.filter(e=>t.has(e))),[{type:`APPLY_AI`,partial:n}]}var D={th:`_th_b545v_1`,content:`_content_b545v_6`,label:`_label_b545v_14`,indicators:`_indicators_b545v_23`,arrow:`_arrow_b545v_38`,arrowIdle:`_arrowIdle_b545v_42`,sortIndex:`_sortIndex_b545v_47`,headerActions:`_headerActions_b545v_56`,headerActionsVisible:`_headerActionsVisible_b545v_65`,menuBtnOpen:`_menuBtnOpen_b545v_68`,filterBtnActive:`_filterBtnActive_b545v_69`,filterBtn:`_filterBtn_b545v_69`,menuBtn:`_menuBtn_b545v_68`,resizeHandle:`_resizeHandle_b545v_115`,sortable:`_sortable_b545v_132`},O=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),k=o((e=>{process.env.NODE_ENV!==`production`&&(function(){function t(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===T?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case _:return`Fragment`;case y:return`Profiler`;case v:return`StrictMode`;case ee:return`Suspense`;case te:return`SuspenseList`;case w:return`Activity`}if(typeof e==`object`)switch(typeof e.tag==`number`&&console.error(`Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.`),e.$$typeof){case g:return`Portal`;case x:return e.displayName||`Context`;case b:return(e._context.displayName||`Context`)+`.Consumer`;case S:var n=e.render;return e=e.displayName,e||=(e=n.displayName||n.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case ne:return n=e.displayName||null,n===null?t(e.type)||`Memo`:n;case C:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function n(e){return``+e}function r(e){try{n(e);var t=!1}catch{t=!0}if(t){t=console;var r=t.error,i=typeof Symbol==`function`&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||`Object`;return r.call(t,`The provided key is an unsupported type %s. This value must be coerced to a string before using it here.`,i),n(e)}}function i(e){if(e===_)return`<>`;if(typeof e==`object`&&e&&e.$$typeof===C)return`<...>`;try{var n=t(e);return n?`<`+n+`>`:`<...>`}catch{return`<...>`}}function a(){var e=E.A;return e===null?null:e.getOwner()}function o(){return Error(`react-stack-top-frame`)}function s(e){if(re.call(e,`key`)){var t=Object.getOwnPropertyDescriptor(e,`key`).get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function c(e,t){function n(){O||(O=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",t))}n.isReactWarning=!0,Object.defineProperty(e,"key",{get:n,configurable:!0})}function l(){var e=t(this.type);return k[e]||(k[e]=!0,console.error(`Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.`)),e=this.props.ref,e===void 0?null:e}function u(e,t,n,r,i,a){var o=n.ref;return e={$$typeof:h,type:e,key:t,props:n,_owner:r},(o===void 0?null:o)===null?Object.defineProperty(e,"ref",{enumerable:!1,value:null}):Object.defineProperty(e,"ref",{enumerable:!1,get:l}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:i}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:a}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function d(e,n,i,o,l,d){var p=n.children;if(p!==void 0)if(o)if(ie(p)){for(o=0;o<p.length;o++)f(p[o]);Object.freeze&&Object.freeze(p)}else console.error(`React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.`);else f(p);if(re.call(n,`key`)){p=t(e);var m=Object.keys(n).filter(function(e){return e!==`key`});o=0<m.length?`{key: someKey, `+m.join(`: ..., `)+`: ...}`:`{key: someKey}`,M[p+o]||(m=0<m.length?`{`+m.join(`: ..., `)+`: ...}`:`{}`,console.error(`A props object containing a "key" prop is being spread into JSX:
4
+ let props = %s;
5
+ <%s {...props} />
6
+ React keys must be passed directly to JSX without using spread:
7
+ let props = %s;
8
+ <%s key={someKey} {...props} />`,o,p,m,p),M[p+o]=!0)}if(p=null,i!==void 0&&(r(i),p=``+i),s(n)&&(r(n.key),p=``+n.key),`key`in n)for(var h in i={},n)h!==`key`&&(i[h]=n[h]);else i=n;return p&&c(i,typeof e==`function`?e.displayName||e.name||`Unknown`:e),u(e,p,i,a(),l,d)}function f(e){p(e)?e._store&&(e._store.validated=1):typeof e==`object`&&e&&e.$$typeof===C&&(e._payload.status===`fulfilled`?p(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function p(e){return typeof e==`object`&&!!e&&e.$$typeof===h}var m=require("react"),h=Symbol.for(`react.transitional.element`),g=Symbol.for(`react.portal`),_=Symbol.for(`react.fragment`),v=Symbol.for(`react.strict_mode`),y=Symbol.for(`react.profiler`),b=Symbol.for(`react.consumer`),x=Symbol.for(`react.context`),S=Symbol.for(`react.forward_ref`),ee=Symbol.for(`react.suspense`),te=Symbol.for(`react.suspense_list`),ne=Symbol.for(`react.memo`),C=Symbol.for(`react.lazy`),w=Symbol.for(`react.activity`),T=Symbol.for(`react.client.reference`),E=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,re=Object.prototype.hasOwnProperty,ie=Array.isArray,D=console.createTask?console.createTask:function(){return null};m={react_stack_bottom_frame:function(e){return e()}};var O,k={},A=m.react_stack_bottom_frame.bind(m,o)(),j=D(i(o)),M={};e.Fragment=_,e.jsx=function(e,t,n){var r=1e4>E.recentlyCreatedOwnerStacks++;return d(e,t,n,!1,r?Error(`react-stack-top-frame`):A,r?D(i(e)):j)},e.jsxs=function(e,t,n){var r=1e4>E.recentlyCreatedOwnerStacks++;return d(e,t,n,!0,r?Error(`react-stack-top-frame`):A,r?D(i(e)):j)}})()})),A=o(((e,t)=>{process.env.NODE_ENV===`production`?t.exports=O():t.exports=k()}))(),j={asc:`ascending`,desc:`descending`};function M({filled:e}){return(0,A.jsx)(`svg`,{width:`10`,height:`10`,viewBox:`0 0 10 10`,fill:`none`,"aria-hidden":`true`,children:e?(0,A.jsx)(`path`,{d:`M1 1h8L6 5v3.5L4 7.5V5L1 1z`,fill:`currentColor`}):(0,A.jsx)(`path`,{d:`M1 1h8L6 5v3.5L4 7.5V5L1 1z`,stroke:`currentColor`,strokeWidth:`1`,fill:`none`})})}function ae({column:e,sortEntry:t,sortIndex:n,totalSorts:r,width:i,onSort:a,enableResize:o,onResize:s,enableMenu:c,menuOpen:l,onToggleMenu:u,columnMenuSlot:d,filterActive:f=!1,filterPanelOpen:p=!1,onToggleFilter:m}){let h=e.sortable!==!1&&!!a,g=o&&e.resizable!==!1&&!!s,_=t?.direction;function v(t){h&&a(e.id,t.shiftKey)}function y(t){h&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),a(e.id,t.shiftKey))}function b(t){t.preventDefault(),t.stopPropagation();let n=t.clientX,r=t.target.closest(`th`).getBoundingClientRect().width;function i(t){let i=t.clientX-n,a=Math.max(e.minWidth??50,r+i);s(e.id,Math.round(a))}function a(){document.removeEventListener(`mousemove`,i),document.removeEventListener(`mouseup`,a)}document.addEventListener(`mousemove`,i),document.addEventListener(`mouseup`,a)}let x=_?j[_]:h?`none`:void 0;return(0,A.jsxs)(`th`,{style:{width:i??e.width,position:`relative`},"aria-sort":x,onClick:h?v:void 0,onKeyDown:h?y:void 0,tabIndex:h?0:void 0,role:h?`columnheader`:void 0,className:[D.th,h&&D.sortable].filter(Boolean).join(` `),children:[(0,A.jsxs)(`span`,{className:D.content,children:[(0,A.jsx)(`span`,{className:D.label,children:e.header}),h&&(0,A.jsxs)(`span`,{className:D.indicators,"aria-hidden":`true`,children:[_===`asc`&&(0,A.jsx)(`span`,{className:D.arrow,children:`↑`}),_===`desc`&&(0,A.jsx)(`span`,{className:D.arrow,children:`↓`}),!_&&(0,A.jsx)(`span`,{className:D.arrowIdle,children:`↕`}),r>1&&n>=0&&(0,A.jsx)(`span`,{className:D.sortIndex,children:n+1})]}),(0,A.jsxs)(`span`,{className:[D.headerActions,m&&D.headerActionsVisible].filter(Boolean).join(` `),children:[m&&(0,A.jsx)(`button`,{type:`button`,className:[D.filterBtn,(f||p)&&D.filterBtnActive].filter(Boolean).join(` `),onClick:t=>{t.stopPropagation(),m(e.id,t.currentTarget.getBoundingClientRect())},"aria-label":`Filter ${e.header}`,"aria-haspopup":`dialog`,"aria-expanded":p,tabIndex:-1,children:(0,A.jsx)(M,{filled:f})}),c&&e.hideable!==!1&&(0,A.jsx)(`button`,{type:`button`,className:[D.menuBtn,l&&D.menuBtnOpen].filter(Boolean).join(` `),onClick:t=>{t.stopPropagation(),u?.(e.id,t.currentTarget.getBoundingClientRect())},"aria-label":`Column options for ${e.header}`,"aria-expanded":l,tabIndex:-1,children:`⋮`})]})]}),g&&(0,A.jsx)(`span`,{className:D.resizeHandle,onMouseDown:b,role:`separator`,"aria-label":`Resize ${e.header}`,"aria-orientation":`vertical`}),d]})}var N={panel:`_panel_l8qj5_1`,heading:`_heading_l8qj5_13`,section:`_section_l8qj5_24`,field:`_field_l8qj5_33`,label:`_label_l8qj5_39`,select:`_select_l8qj5_45`,input:`_input_l8qj5_65`,rangeRow:`_rangeRow_l8qj5_100`,rangeSep:`_rangeSep_l8qj5_110`,searchRow:`_searchRow_l8qj5_118`,searchIcon:`_searchIcon_l8qj5_124`,searchInput:`_searchInput_l8qj5_132`,checkboxList:`_checkboxList_l8qj5_163`,checkboxItem:`_checkboxItem_l8qj5_175`,checkbox:`_checkbox_l8qj5_163`,checkboxLabel:`_checkboxLabel_l8qj5_203`,noResults:`_noResults_l8qj5_211`,clearBtn:`_clearBtn_l8qj5_221`,srOnly:`_srOnly_l8qj5_248`},oe=[{value:`eq`,label:`Equals`,symbol:`=`},{value:`gt`,label:`Greater than`,symbol:`>`},{value:`gte`,label:`Greater than or equal`,symbol:`≥`},{value:`lt`,label:`Less than`,symbol:`<`},{value:`lte`,label:`Less than or equal`,symbol:`≤`},{value:`between`,label:`Between`,symbol:`↔`}];function P(e){return e===`gt`||e===`gte`||e===`lt`||e===`lte`||e===`between`?e:`eq`}function F(e){let t=e.trim();if(t===``)return null;let n=Number(t);return isNaN(n)?null:n}var I=300;function se({column:e,filterEntry:t,filterOptions:n,anchorRect:r,onClose:i,onChange:a}){let o=(0,l.useRef)(null),s=(0,l.useId)(),c=Math.min(r.left,typeof window<`u`?window.innerWidth-252:r.left),u={top:r.bottom+6,left:Math.max(4,c)};(0,l.useEffect)(()=>{function e(e){o.current&&!o.current.contains(e.target)&&i()}function t(e){e.key===`Escape`&&i()}function n(){i()}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),window.addEventListener(`scroll`,n,{capture:!0,passive:!0}),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t),window.removeEventListener(`scroll`,n,{capture:!0})}},[i]);let f=e.filterType??`text`;return(0,d.createPortal)((0,A.jsxs)(`div`,{ref:o,className:N.panel,style:u,role:`dialog`,"aria-labelledby":s,"aria-modal":`false`,children:[(0,A.jsxs)(`p`,{id:s,className:N.heading,children:[`Filter `,e.header]}),f===`number`&&(0,A.jsx)(ce,{columnHeader:e.header,filterEntry:t,onChange:a}),(f===`text`||f===`date`)&&(0,A.jsx)(le,{columnHeader:e.header,filterType:f,filterEntry:t,onChange:a}),f===`select`&&(0,A.jsx)(ue,{columnHeader:e.header,options:n??e.filterOptions??[],filterEntry:t,onChange:a})]}),document.body)}function ce({columnHeader:e,filterEntry:t,onChange:n}){let r=(0,l.useId)(),i=(0,l.useId)(),[a,o]=(0,l.useState)(()=>P(t?.operator??null)),[s,c]=(0,l.useState)(()=>{let e=t?.value;return e==null?``:Array.isArray(e)?e[0]===void 0?``:String(e[0]):String(e)}),[u,d]=(0,l.useState)(()=>{let e=t?.value;return Array.isArray(e)?e[1]===void 0?``:String(e[1]):``}),f=(0,l.useRef)(null);function p(e,t,r){f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{if(e===`between`){let e=F(t),i=F(r);n(e!==null&&i!==null?[e,i]:null,`between`)}else n(F(t),e)},I)}let m=s!==``||u!==``;return(0,A.jsxs)(`div`,{className:N.section,children:[(0,A.jsxs)(`div`,{className:N.field,children:[(0,A.jsx)(`label`,{htmlFor:r,className:N.label,children:`Operator`}),(0,A.jsx)(`select`,{id:r,className:N.select,value:a,onChange:e=>{let t=e.target.value;o(t),p(t,s,u)},children:oe.map(e=>(0,A.jsxs)(`option`,{value:e.value,children:[e.symbol,` `,e.label]},e.value))})]}),a===`between`?(0,A.jsxs)(`div`,{className:N.field,children:[(0,A.jsx)(`label`,{className:N.label,children:`Range`}),(0,A.jsxs)(`div`,{className:N.rangeRow,children:[(0,A.jsx)(`input`,{type:`number`,className:N.input,value:s,placeholder:`Min`,onChange:e=>{c(e.target.value),p(a,e.target.value,u)},"aria-label":`Minimum value for ${e}`,style:{fontVariantNumeric:`tabular-nums`},autoFocus:!0}),(0,A.jsx)(`span`,{className:N.rangeSep,"aria-hidden":`true`,children:`–`}),(0,A.jsx)(`input`,{type:`number`,className:N.input,value:u,placeholder:`Max`,onChange:e=>{d(e.target.value),p(a,s,e.target.value)},"aria-label":`Maximum value for ${e}`,style:{fontVariantNumeric:`tabular-nums`}})]})]}):(0,A.jsxs)(`div`,{className:N.field,children:[(0,A.jsx)(`label`,{htmlFor:i,className:N.label,children:`Value`}),(0,A.jsx)(`input`,{id:i,type:`number`,className:N.input,value:s,placeholder:`Enter value…`,onChange:e=>{c(e.target.value),p(a,e.target.value,u)},"aria-label":`Filter value for ${e}`,style:{fontVariantNumeric:`tabular-nums`},autoFocus:!0})]}),m&&(0,A.jsx)(`button`,{type:`button`,className:N.clearBtn,onClick:()=>{f.current&&clearTimeout(f.current),c(``),d(``),n(null,a)},children:`Clear filter`})]})}function le({columnHeader:e,filterType:t,filterEntry:n,onChange:r}){let i=(0,l.useId)(),a=t===`date`?`eq`:`contains`,[o,s]=(0,l.useState)(n?.value==null?``:String(n.value)),c=(0,l.useRef)(null);function u(e){c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{r(e.trim()===``?null:e.trim(),a)},I)}return(0,A.jsxs)(`div`,{className:N.section,children:[(0,A.jsxs)(`div`,{className:N.field,children:[(0,A.jsx)(`label`,{htmlFor:i,className:N.label,children:t===`date`?`Date`:`Contains`}),(0,A.jsx)(`input`,{id:i,type:t===`date`?`date`:`text`,className:N.input,value:o,placeholder:t===`date`?void 0:`Filter…`,onChange:e=>{s(e.target.value),u(e.target.value)},"aria-label":`Filter ${e}`,autoFocus:!0})]}),o!==``&&(0,A.jsx)(`button`,{type:`button`,className:N.clearBtn,onClick:()=>{c.current&&clearTimeout(c.current),s(``),r(null,a)},children:`Clear filter`})]})}function L(e){if(!e)return new Set;let{value:t}=e;return Array.isArray(t)?new Set(t.map(String)):t!=null&&String(t)!==``?new Set([String(t)]):new Set}function ue({columnHeader:e,options:t,filterEntry:n,onChange:r}){let i=(0,l.useId)(),[a,o]=(0,l.useState)(``),[s,c]=(0,l.useState)(()=>L(n)),u=t.filter(e=>e.toLowerCase().includes(a.toLowerCase())),d=u.length>0&&u.every(e=>s.has(e)),f=u.some(e=>s.has(e)),p=(0,l.useRef)(null);(0,l.useEffect)(()=>{p.current&&(p.current.indeterminate=f&&!d)},[f,d]);let m=(0,l.useCallback)(e=>{c(e),r(e.size>0?Array.from(e):null,`in`)},[r]);function h(){if(d){let e=new Set(s);u.forEach(t=>e.delete(t)),m(e)}else{let e=new Set(s);u.forEach(t=>e.add(t)),m(e)}}function g(e){let t=new Set(s);t.has(e)?t.delete(e):t.add(e),m(t)}return(0,A.jsxs)(`div`,{className:N.section,children:[(0,A.jsxs)(`div`,{className:N.searchRow,children:[(0,A.jsxs)(`label`,{htmlFor:i,className:N.srOnly,children:[`Search `,e,` options`]}),(0,A.jsx)(`span`,{className:N.searchIcon,"aria-hidden":`true`,children:(0,A.jsx)(de,{})}),(0,A.jsx)(`input`,{id:i,type:`search`,className:N.searchInput,value:a,placeholder:`Search…`,onChange:e=>o(e.target.value),autoFocus:!0})]}),(0,A.jsxs)(`div`,{className:N.checkboxList,role:`group`,"aria-label":`Filter ${e} by value`,children:[t.length>0&&(0,A.jsxs)(`label`,{className:N.checkboxItem,children:[(0,A.jsx)(`input`,{ref:p,type:`checkbox`,className:N.checkbox,checked:d,onChange:h,"aria-label":`Select all`}),(0,A.jsx)(`span`,{className:N.checkboxLabel,children:`(Select All)`})]}),u.length===0&&(0,A.jsx)(`p`,{className:N.noResults,children:`No matching options`}),u.map(e=>(0,A.jsxs)(`label`,{className:N.checkboxItem,children:[(0,A.jsx)(`input`,{type:`checkbox`,className:N.checkbox,checked:s.has(e),onChange:()=>g(e),"aria-label":e}),(0,A.jsx)(`span`,{className:N.checkboxLabel,children:e})]},e))]}),s.size>0&&(0,A.jsx)(`button`,{type:`button`,className:N.clearBtn,onClick:()=>m(new Set),children:`Clear filter`})]})}function de(){return(0,A.jsxs)(`svg`,{width:`12`,height:`12`,viewBox:`0 0 12 12`,"aria-hidden":`true`,style:{display:`block`},children:[(0,A.jsx)(`circle`,{cx:`5`,cy:`5`,r:`3.5`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.3`}),(0,A.jsx)(`line`,{x1:`7.8`,y1:`7.8`,x2:`11`,y2:`11`,stroke:`currentColor`,strokeWidth:`1.3`,strokeLinecap:`round`})]})}var R={groupRow:`_groupRow_16hmo_1`,labelCell:`_labelCell_16hmo_10`,toggleBtn:`_toggleBtn_16hmo_18`,colHeader:`_colHeader_16hmo_45`,groupValue:`_groupValue_16hmo_53`,childCount:`_childCount_16hmo_58`,aggregateCell:`_aggregateCell_16hmo_63`};function z(e){return e===null?`(empty)`:e instanceof Date?e.toLocaleDateString():String(e)}function fe(e,t){return e===null?null:t===`avg`?e.toFixed(2):t===`count`?String(e):e.toLocaleString()}function pe({row:e,columns:t,visibleColumnIds:n,onToggle:r}){let i=t.filter(e=>n.has(e.id)),a=t.find(t=>t.id===e.columnId);return(0,A.jsx)(`tr`,{className:R.groupRow,"aria-level":e.depth+1,children:i.map((t,n)=>{if(n===0)return(0,A.jsxs)(`td`,{className:R.labelCell,style:{paddingLeft:`${e.depth*1.5+.5}rem`},colSpan:1,children:[(0,A.jsx)(`button`,{className:R.toggleBtn,onClick:r,"aria-expanded":e.isExpanded,"aria-label":`${e.isExpanded?`Collapse`:`Expand`} group ${z(e.value)}`,type:`button`,children:e.isExpanded?`▼`:`▶`}),(0,A.jsxs)(`span`,{className:R.colHeader,children:[a?.header??e.columnId,`:`]}),(0,A.jsx)(`span`,{className:R.groupValue,children:z(e.value)}),(0,A.jsxs)(`span`,{className:R.childCount,children:[`(`,e.childCount,`)`]})]},t.id);let i=e.aggregates[t.id],o=t.aggregation;return(0,A.jsx)(`td`,{className:R.aggregateCell,children:o&&i!==void 0?fe(i,o):null},t.id)})})}var me={td:`_td_13y42_1`,editable:`_editable_13y42_5`,editInput:`_editInput_13y42_13`};function he({column:e,row:t,onCellClick:n,isEditing:r=!1,onStartEdit:i,onCommitEdit:a,onCancelEdit:o}){let s=e.accessor(t),[c,u]=(0,l.useState)(``),d=(0,l.useRef)(!1),f=(0,l.useRef)(!1);(0,l.useEffect)(()=>{r&&(u(s===null?``:String(s)),d.current=!1,f.current=!1)},[r,s]);let p=()=>{if(f.current||d.current)return;d.current=!0;let n=e.filterType===`number`||typeof s==`number`?parseFloat(c)||0:c;a?.(n,t,e),o?.()},m=()=>{f.current=!0,o?.()};if(r){let t=e.filterType===`number`||typeof s==`number`;return(0,A.jsx)(`td`,{children:(0,A.jsx)(`input`,{className:me.editInput,type:t?`number`:`text`,value:c,"aria-label":`Edit ${e.header}`,autoFocus:!0,onChange:e=>u(e.target.value),onKeyDown:e=>{e.key===`Enter`||e.key===`Tab`?(e.preventDefault(),p()):e.key===`Escape`&&m()},onBlur:p})})}let h=!!n,g=!!e.editable&&!!i,_=e.cell?e.cell(s,t):String(s??``);return(0,A.jsx)(`td`,{className:g?me.editable:void 0,onClick:h?r=>{r.stopPropagation(),n(s,t,e,r)}:void 0,onDoubleClick:g?i:void 0,style:h?{cursor:`pointer`}:void 0,children:_})}var ge={selectionCell:`_selectionCell_1237t_1`,checkbox:`_checkbox_1237t_12`},_e={width:40,minWidth:40,maxWidth:40};function ve({checked:e,indeterminate:t,onChange:n,ariaLabel:r,isHeader:i=!1}){let a=l.default.useRef(null);return l.default.useEffect(()=>{a.current&&(a.current.indeterminate=!!t)},[t]),(0,A.jsx)(i?`th`:`td`,{className:ge.selectionCell,role:i?`columnheader`:`gridcell`,style:_e,children:(0,A.jsx)(`input`,{ref:a,type:`checkbox`,className:ge.checkbox,checked:e,onChange:n,"aria-label":r})})}function ye({row:e,rowIndex:t,rowId:n,columns:r,visibleColumnIds:i,selectionMode:a=`none`,isSelected:o=!1,onToggleSelect:s,onRowClick:c,onCellClick:l,editingColumnId:u,onStartEdit:d,onCommitEdit:f,onCancelEdit:p}){let m=!!c,h=u!==void 0;return(0,A.jsxs)(`tr`,{"aria-selected":a===`none`?void 0:o,onClick:m?n=>{h||c(e,t,n)}:void 0,onKeyDown:m?n=>{h||(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),c(e,t,n))}:void 0,role:m?`button`:void 0,tabIndex:m?0:void 0,style:m?{cursor:`pointer`}:void 0,children:[a!==`none`&&(0,A.jsx)(ve,{checked:o,onChange:()=>s?.(n),ariaLabel:o?`Deselect row`:`Select row`}),r.filter(e=>i.has(e.id)).map(t=>(0,A.jsx)(he,{column:t,row:e,onCellClick:l,isEditing:u===t.id,onStartEdit:d?()=>d(n,t.id):void 0,onCommitEdit:f,onCancelEdit:p},t.id))]})}var B={wrapper:`_wrapper_1x1x3_16`,tableContainer:`_tableContainer_1x1x3_26`,loadingOverlay:`_loadingOverlay_1x1x3_32`,spinner:`_spinner_1x1x3_42`,spin:`_spin_1x1x3_42`,table:`_table_1x1x3_26`,vsOuter:`_vsOuter_1x1x3_96`,vsBody:`_vsBody_1x1x3_101`,emptyState:`_emptyState_1x1x3_105`,toolbar:`_toolbar_1x1x3_112`,pagination:`_pagination_1x1x3_122`,paginationControls:`_paginationControls_1x1x3_132`,paginationBtn:`_paginationBtn_1x1x3_138`,paginationInfo:`_paginationInfo_1x1x3_166`,pageSizeLabel:`_pageSizeLabel_1x1x3_173`,pageSizeSelect:`_pageSizeSelect_1x1x3_181`},V=[10,20,50,100];function be({pageIndex:e,pageCount:t,pageSize:n,totalRows:r,onPageChange:i,onPageSizeChange:a}){let o=r===0?0:e*n+1,s=Math.min((e+1)*n,r);return(0,A.jsxs)(`div`,{className:B.pagination,role:`navigation`,"aria-label":`Pagination`,children:[(0,A.jsx)(`span`,{className:B.paginationInfo,children:r===0?`No results`:`${o}–${s} of ${r}`}),(0,A.jsxs)(`div`,{className:B.paginationControls,children:[(0,A.jsxs)(`label`,{className:B.pageSizeLabel,children:[`Rows`,(0,A.jsx)(`select`,{className:B.pageSizeSelect,value:n,onChange:e=>a(Number(e.target.value)),"aria-label":`Rows per page`,children:V.map(e=>(0,A.jsx)(`option`,{value:e,children:e},e))})]}),(0,A.jsx)(`button`,{className:B.paginationBtn,disabled:e===0,onClick:()=>i(0),"aria-label":`First page`,children:`«`}),(0,A.jsx)(`button`,{className:B.paginationBtn,disabled:e===0,onClick:()=>i(e-1),"aria-label":`Previous page`,children:`‹`}),(0,A.jsxs)(`span`,{className:B.paginationInfo,"aria-current":`page`,children:[e+1,` / `,t]}),(0,A.jsx)(`button`,{className:B.paginationBtn,disabled:e>=t-1,onClick:()=>i(e+1),"aria-label":`Next page`,children:`›`}),(0,A.jsx)(`button`,{className:B.paginationBtn,disabled:e>=t-1,onClick:()=>i(t-1),"aria-label":`Last page`,children:`»`})]})]})}var H={toolbar:`_toolbar_12gxd_1`,selectionCount:`_selectionCount_12gxd_12`,clearBtn:`_clearBtn_12gxd_21`,exportBtn:`_exportBtn_12gxd_36`};function xe({selectedRows:e,selectedIds:t,processedRows:n,gridState:r,clearSelection:i,enableCsvExport:a,onExport:o,toolbarActions:s,columns:c}){if(!(a||s||e.length>0))return null;let l={selectedRows:e,selectedIds:t,processedRows:n,gridState:r,clearSelection:i};return(0,A.jsxs)(`div`,{className:H.toolbar,role:`toolbar`,"aria-label":`Grid toolbar`,children:[e.length>0&&(0,A.jsxs)(`span`,{className:H.selectionCount,"aria-live":`polite`,"aria-atomic":`true`,children:[e.length,` row`,e.length===1?``:`s`,` selected`,(0,A.jsx)(`button`,{type:`button`,className:H.clearBtn,onClick:i,"aria-label":`Clear selection`,children:`×`})]}),s?.(l),a&&(0,A.jsx)(`button`,{type:`button`,className:H.exportBtn,onClick:o,"aria-label":`Export to CSV`,children:`Export CSV`})]})}var U={menu:`_menu_1efgk_1`,heading:`_heading_1efgk_12`,list:`_list_1efgk_22`,item:`_item_1efgk_28`,label:`_label_1efgk_32`,checkbox:`_checkbox_1efgk_46`};function Se({columns:e,columnVisibility:t,anchorRect:n,onToggleColumn:r,onClose:i}){let a=(0,l.useRef)(null);(0,l.useEffect)(()=>{function e(e){a.current&&!a.current.contains(e.target)&&i()}function t(e){e.key===`Escape`&&i()}function n(){i()}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),window.addEventListener(`scroll`,n,{capture:!0,passive:!0}),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t),window.removeEventListener(`scroll`,n,{capture:!0})}},[i]);let o=e.filter(e=>e.hideable!==!1);return(0,d.createPortal)((0,A.jsxs)(`div`,{ref:a,className:U.menu,style:{top:n.bottom+2,left:n.left},role:`dialog`,"aria-label":`Column visibility`,children:[(0,A.jsx)(`p`,{className:U.heading,children:`Columns`}),(0,A.jsx)(`ul`,{className:U.list,role:`list`,children:o.map(e=>{let n=t[e.id]!==!1&&!(e.defaultHidden&&t[e.id]===void 0);return(0,A.jsx)(`li`,{className:U.item,children:(0,A.jsxs)(`label`,{className:U.label,children:[(0,A.jsx)(`input`,{type:`checkbox`,className:U.checkbox,checked:n,onChange:()=>r(e.id,!n)}),e.header]})},e.id)})})]}),document.body)}var Ce=f.z.object({sorts:f.z.array(f.z.object({columnId:f.z.string(),direction:f.z.enum([`asc`,`desc`])})).optional(),filters:f.z.array(f.z.object({columnId:f.z.string(),operator:f.z.enum([`eq`,`contains`,`gt`,`gte`,`lt`,`lte`,`between`,`in`]),value:f.z.union([f.z.string(),f.z.number(),f.z.array(f.z.union([f.z.string(),f.z.number()]))])})).optional(),grouping:f.z.array(f.z.string()).optional(),reset:f.z.boolean().optional(),explanation:f.z.string()});async function W(e,t,n,r,i){let a=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:t,columns:n.map(e=>({id:e.id,header:e.header,filterType:e.filterType})),currentState:r}),signal:i});if(!a.ok){let e=await a.text().catch(()=>``),t=e;try{t=JSON.parse(e).error??e}catch{}throw Error(t||`Request failed: ${a.status}`)}let o=await a.json();return Ce.parse(o)}var G={aiBar:`_aiBar_13i5a_1`,form:`_form_13i5a_10`,icon:`_icon_13i5a_16`,input:`_input_13i5a_24`,submitBtn:`_submitBtn_13i5a_54`,spinner:`_spinner_13i5a_82`,spin:`_spin_13i5a_82`,resultRow:`_resultRow_13i5a_96`,explanation:`_explanation_13i5a_103`,clearBtn:`_clearBtn_13i5a_111`,error:`_error_13i5a_130`};function we({endpoint:e,placeholder:t,columns:n,gridState:r,onCommand:i,onReset:a}){let[o,s]=(0,l.useState)(``),[c,u]=(0,l.useState)(`idle`),[d,f]=(0,l.useState)(null),[p,m]=(0,l.useState)(null),h=(0,l.useRef)(null),g=(0,l.useCallback)(async t=>{t.preventDefault();let a=o.trim();if(!a||c===`loading`)return;h.current?.abort();let l=new AbortController;h.current=l,u(`loading`),f(null),m(null);try{let t=await W(e,a,n,r,l.signal);i(t),f(t.explanation),u(`idle`),s(``)}catch(e){if(e.name===`AbortError`)return;m(e.message??`Request failed`),u(`error`)}},[o,c,e,n,r,i]);return(0,A.jsxs)(`div`,{className:G.aiBar,children:[(0,A.jsxs)(`form`,{className:G.form,onSubmit:g,role:`search`,children:[(0,A.jsx)(`span`,{className:G.icon,"aria-hidden":`true`,children:`✦`}),(0,A.jsx)(`input`,{className:G.input,type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:t??`Ask the grid… e.g. "show completed orders over £500"`,disabled:c===`loading`,"aria-label":`AI grid command`,autoComplete:`off`,spellCheck:!1}),(0,A.jsx)(`button`,{type:`submit`,className:G.submitBtn,disabled:!o.trim()||c===`loading`,"aria-label":`Send AI command`,children:c===`loading`?(0,A.jsx)(`span`,{className:G.spinner,"aria-hidden":`true`}):`Ask`})]}),d&&c===`idle`&&(0,A.jsxs)(`div`,{className:G.resultRow,children:[(0,A.jsx)(`p`,{className:G.explanation,role:`status`,"aria-live":`polite`,children:d}),(0,A.jsx)(`button`,{type:`button`,className:G.clearBtn,onClick:()=>{f(null),a()},children:`Clear`})]}),p&&c===`error`&&(0,A.jsx)(`p`,{className:G.error,role:`alert`,children:p})]})}function K({data:e,columns:t,getRowId:n,onRowClick:r,onCellClick:i,dataMode:a=`server`,pageSize:o=20,rowCount:s,loading:c,onStateChange:d,selectionMode:f=`none`,selectAllScope:p=`page`,onSelectionChange:m,enableCsvExport:_,csvFilename:v=`export.csv`,enableColumnResize:y,enableColumnVisibility:b,toolbarActions:x,emptyState:S,className:T,initialState:D,fetchFilterOptions:O,ai:k,height:j,estimatedRowHeight:M=41,onCellEdit:N},oe){let{state:P,dispatch:F}=g((0,l.useMemo)(()=>h(D,o),[])),[I,ce]=(0,l.useState)(null),[le,L]=(0,l.useState)(null),[ue,de]=(0,l.useState)(null),[R,z]=(0,l.useState)(null),fe=(0,l.useCallback)((e,t)=>{ce(n=>n===e?(L(null),null):(L(t),e))},[]),me=(0,l.useCallback)((e,t)=>{de(n=>n===e?(z(null),null):(z(t),e))},[]),he=(0,l.useCallback)((e,t)=>{F({type:`SET_COLUMN_VISIBILITY`,columnId:e,visible:t})},[F]),ge=(0,l.useCallback)((e,t,n)=>{let r=t===null||t===``||Array.isArray(t)&&t.length===0,i;if(r)i=P.filters.filter(t=>t.columnId!==e);else{let r={columnId:e,operator:n,value:t},a=P.filters.findIndex(t=>t.columnId===e);i=a>=0?P.filters.map((e,t)=>t===a?r:e):[...P.filters,r]}F({type:`SET_FILTER`,filters:i})},[P.filters,F]),_e=(0,l.useCallback)((e,t)=>{let n=P.sorts.find(t=>t.columnId===e),r;if(n)r=n.direction===`asc`?P.sorts.map(t=>t.columnId===e?{...t,direction:`desc`}:t):P.sorts.filter(t=>t.columnId!==e);else{let n={columnId:e,direction:`asc`};r=t?[...P.sorts,n]:[n]}F({type:`SET_SORT`,sorts:r})},[P.sorts,F]),V=(0,l.useMemo)(()=>{let e=new Set;for(let n of t){let t=P.columnVisibility[n.id]===!1,r=n.defaultHidden&&P.columnVisibility[n.id]===void 0;!t&&!r&&e.add(n.id)}return e},[t,P.columnVisibility]),H=(0,l.useMemo)(()=>{if(a!==`client`)return{};let n={};for(let r of t)if(r.filterType===`select`&&!r.filterOptions){let t=new Set;for(let n of e){let e=r.accessor(n);e!=null&&e!==``&&t.add(String(e))}n[r.id]=Array.from(t).sort()}return n},[e,t,a]),[U,Ce]=(0,l.useState)({});(0,l.useEffect)(()=>{if(!O)return;let e=t.filter(e=>e.filterable===!0&&e.filterType===`select`&&!e.filterOptions);for(let t of e)O(t.id).then(e=>{Ce(n=>({...n,[t.id]:e}))}).catch(()=>{})},[O]);let W=(0,l.useMemo)(()=>a===`server`?e:ee(e,t,P.filters),[e,t,P.filters,a]),G=(0,l.useMemo)(()=>a===`server`?e.map(e=>({_type:`data`,row:e})):te(e,t,P),[e,t,P,a]),K=(0,l.useMemo)(()=>a===`server`?G:ne(G,P.pagination),[G,P.pagination,a]),Te=a===`server`?s??0:G.length,Ee=C(Te,P.pagination.pageSize),De=(0,l.useMemo)(()=>w(P.selection,e,n),[P.selection,e,n]),Oe=(0,l.useMemo)(()=>f===`none`?[]:K.flatMap(e=>e._type===`data`?[n(e.row)]:[]),[K,f,n]),ke=(0,l.useMemo)(()=>f===`none`?[]:W.map(n),[W,f,n]),q=p===`filtered`?ke:Oe,J=q.length>0&&q.every(e=>P.selection.has(e)),Ae=!J&&q.some(e=>P.selection.has(e)),je=(0,l.useCallback)(()=>{F(J?{type:`CLEAR_SELECTION`}:{type:`SELECT_ALL`,rowIds:q})},[J,q,F]),Me=(0,l.useCallback)(e=>{F({type:`TOGGLE_SELECT`,rowId:e,mode:f===`single`?`single`:`multiple`})},[f,F]),Ne=(0,l.useRef)(m);(0,l.useEffect)(()=>{Ne.current=m},[m]);let Pe=(0,l.useRef)(``);(0,l.useEffect)(()=>{let t=JSON.stringify(Array.from(P.selection).sort());if(t!==Pe.current&&(Pe.current=t,Ne.current)){let t=w(P.selection,e,n);Ne.current(t,Array.from(P.selection))}},[P.selection,e,n]);let Fe=(0,l.useRef)(d);(0,l.useEffect)(()=>{Fe.current=d},[d]);let Ie=(0,l.useRef)(null);(0,l.useEffect)(()=>{if(a!==`server`)return;let e=JSON.stringify({sorts:P.sorts,filters:P.filters,grouping:P.grouping,pagination:P.pagination});e!==Ie.current&&(Ie.current=e,Fe.current?.(P))},[P,a]);let Le=(0,l.useCallback)(r=>{re(E(r?.selectedOnly?w(P.selection,e,n):W,t),v)},[P.selection,e,n,W,t,v]),Re=(0,l.useMemo)(()=>new Set(t.map(e=>e.id)),[t]),ze=(0,l.useCallback)(e=>{ie(e,Re).forEach(e=>F(e))},[Re,F]),[Y,Be]=(0,l.useState)(null),Ve=(0,l.useCallback)((e,t)=>{Be({rowId:e,columnId:t})},[]),He=(0,l.useCallback)((e,t,n)=>{N?.(e,t,n),Be(null)},[N]),Ue=(0,l.useCallback)(()=>{Be(null)},[]);(0,l.useImperativeHandle)(oe,()=>({getSelectedRows:()=>w(P.selection,e,n),getProcessedRows:()=>W,getGridState:()=>P,clearSelection:()=>F({type:`CLEAR_SELECTION`}),exportCsv:Le,setState:e=>{e.sorts&&F({type:`SET_SORT`,sorts:e.sorts}),e.filters&&F({type:`SET_FILTER`,filters:e.filters}),e.grouping&&F({type:`SET_GROUPING`,grouping:e.grouping})}}));let X=t.filter(e=>V.has(e.id)),Z=j!==void 0,We=(0,l.useRef)(null),Ge=(0,u.useVirtualizer)({count:Z?K.length:0,getScrollElement:()=>Z?We.current:null,estimateSize:()=>M,overscan:8}),Q=Ge.getVirtualItems(),$=(0,l.useMemo)(()=>{let e=[];f!==`none`&&e.push(40);for(let t of X)e.push(P.columnSizing[t.id]??t.width??150);return e},[X,f,P.columnSizing]),Ke=(0,l.useMemo)(()=>$.reduce((e,t)=>e+t,0),[$]),qe=(0,l.useMemo)(()=>({minWidth:Ke}),[Ke]),Je=(0,A.jsxs)(`colgroup`,{children:[f!==`none`&&(0,A.jsx)(`col`,{style:{width:40,minWidth:40,maxWidth:40}}),X.map((e,t)=>{let n=P.columnSizing[e.id]??e.width??150;return(0,A.jsx)(`col`,{style:t===X.length-1?void 0:{width:n}},e.id)})]}),Ye=(0,A.jsxs)(`tr`,{children:[f!==`none`&&(0,A.jsx)(ve,{checked:J,indeterminate:Ae,onChange:je,ariaLabel:J?`Deselect all`:`Select all`,isHeader:!0}),X.map(e=>{let n=P.sorts.findIndex(t=>t.columnId===e.id),r=ue===e.id,i=P.filters.some(t=>t.columnId===e.id),a=I===e.id;return(0,A.jsx)(ae,{column:e,sortEntry:n>=0?P.sorts[n]:void 0,sortIndex:n,totalSorts:P.sorts.length,width:P.columnSizing[e.id],onSort:_e,enableResize:y,onResize:(e,t)=>F({type:`SET_COLUMN_SIZE`,columnId:e,width:t}),enableMenu:b,menuOpen:r,onToggleMenu:me,filterActive:i,filterPanelOpen:a,onToggleFilter:e.filterable===!0?fe:void 0,columnMenuSlot:b&&r&&R?(0,A.jsx)(Se,{columns:t,columnVisibility:P.columnVisibility,anchorRect:R,onToggleColumn:he,onClose:()=>de(null)}):null},e.id)})]}),Xe=()=>{if(K.length===0)return(0,A.jsx)(`tr`,{children:(0,A.jsx)(`td`,{colSpan:X.length+(f===`none`?0:1),children:(0,A.jsx)(`div`,{className:B.emptyState,children:S??`No data`})})});if(!Z)return K.map((e,a)=>{if(e._type===`group`)return(0,A.jsx)(pe,{row:e,columns:t,visibleColumnIds:V,onToggle:()=>F({type:`TOGGLE_EXPAND`,groupId:e.id})},e.id);let o=n(e.row);return(0,A.jsx)(ye,{row:e.row,rowIndex:a,rowId:o,columns:t,visibleColumnIds:V,selectionMode:f,isSelected:P.selection.has(o),onToggleSelect:Me,onRowClick:r,onCellClick:i,editingColumnId:Y?.rowId===o?Y.columnId:void 0,onStartEdit:N?Ve:void 0,onCommitEdit:N?He:void 0,onCancelEdit:Ue},o)});let e=Q.length>0?Q[0]?.start??0:0,a=Q.length>0?Ge.getTotalSize()-(Q[Q.length-1]?.end??0):0;return(0,A.jsxs)(A.Fragment,{children:[e>0&&(0,A.jsx)(`tr`,{children:(0,A.jsx)(`td`,{style:{height:e,padding:0,border:`none`},colSpan:$.length})}),Q.map(e=>{let a=K[e.index];if(a._type===`group`)return(0,A.jsx)(pe,{row:a,columns:t,visibleColumnIds:V,onToggle:()=>F({type:`TOGGLE_EXPAND`,groupId:a.id})},a.id);let o=n(a.row);return(0,A.jsx)(ye,{row:a.row,rowIndex:e.index,rowId:o,columns:t,visibleColumnIds:V,selectionMode:f,isSelected:P.selection.has(o),onToggleSelect:Me,onRowClick:r,onCellClick:i,editingColumnId:Y?.rowId===o?Y.columnId:void 0,onStartEdit:N?Ve:void 0,onCommitEdit:N?He:void 0,onCancelEdit:Ue},o)}),a>0&&(0,A.jsx)(`tr`,{children:(0,A.jsx)(`td`,{style:{height:a,padding:0,border:`none`},colSpan:$.length})})]})},Ze=typeof j==`number`?`${j}px`:j;return(0,A.jsxs)(`div`,{className:[B.wrapper,T].filter(Boolean).join(` `),children:[(0,A.jsx)(xe,{selectedRows:De,selectedIds:Array.from(P.selection),processedRows:W,gridState:P,clearSelection:()=>F({type:`CLEAR_SELECTION`}),enableCsvExport:_,onExport:()=>Le(),toolbarActions:x,columns:t}),k&&(0,A.jsx)(we,{endpoint:k.endpoint,placeholder:k.placeholder,columns:t,gridState:P,onCommand:ze,onReset:()=>F({type:`RESET`})}),c&&(0,A.jsx)(`div`,{className:B.loadingOverlay,role:`status`,"aria-label":`Loading`,children:(0,A.jsx)(`div`,{className:B.spinner})}),Z?(0,A.jsxs)(`div`,{className:B.vsOuter,children:[(0,A.jsxs)(`table`,{className:B.table,style:qe,children:[Je,(0,A.jsx)(`thead`,{children:Ye})]}),(0,A.jsx)(`div`,{ref:We,className:B.vsBody,style:{height:Ze,overflowY:`auto`,overflowX:`clip`,minWidth:Ke},children:(0,A.jsxs)(`table`,{className:B.table,role:`grid`,style:qe,children:[Je,(0,A.jsx)(`tbody`,{children:Xe()})]})})]}):(0,A.jsx)(`div`,{className:B.tableContainer,children:(0,A.jsxs)(`table`,{className:B.table,role:`grid`,style:qe,children:[Je,(0,A.jsx)(`thead`,{children:Ye}),(0,A.jsx)(`tbody`,{children:Xe()})]})}),I!==null&&le!==null&&(()=>{let e=t.find(e=>e.id===I);return e?(0,A.jsx)(se,{column:e,anchorRect:le,filterEntry:P.filters.find(e=>e.columnId===I),filterOptions:H[I]??U[I],onChange:(e,t)=>ge(I,e,t),onClose:()=>{ce(null),L(null)}}):null})(),(0,A.jsx)(be,{pageIndex:P.pagination.pageIndex,pageCount:Ee,pageSize:P.pagination.pageSize,totalRows:Te,onPageChange:e=>F({type:`SET_PAGE`,pageIndex:e}),onPageSizeChange:e=>F({type:`SET_PAGE_SIZE`,pageSize:e})})]})}var Te=(0,l.forwardRef)(K);exports.DataGrid=Te;