@structyl/data-table 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/data-table.tsx"],"names":["React","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","getPaginationRowModel","getExpandedRowModel","getGroupedRowModel","getFacetedRowModel","getFacetedUniqueValues","useVirtualizer","cn","ChevronsDown","ChevronsUpDown","Filter","GitBranch","Bookmark","RefreshCw","Printer","Minimize2","Maximize2","HelpCircle","Input","Button","flexRender","ChevronUp","ChevronDown","colIndex","DropdownMenu","row","cells","ChevronRight","Tooltip","_","Select","ChevronsLeft","ChevronLeft","ChevronsRight","Popover","Combobox","Columns3","Checkbox","Drawer","X","BarChart2","XLSX","AlignJustify","Download","FileSpreadsheet","hsvaToHex","ColorPicker","cellMap","pivotValues","rowGroupValues","Trash2"],"mappings":"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","file":"index.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getGroupedRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type Cell,\n type Column,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n type ColumnSizingState,\n type ExpandedState,\n type FilterFn,\n type GroupingState,\n type OnChangeFn,\n type PaginationState,\n type Row,\n type RowSelectionState,\n type SortingState,\n type Table,\n type VisibilityState,\n} from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n AlignJustify,\n BarChart2,\n Bookmark,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n ChevronsDown,\n ChevronsLeft,\n ChevronsRight,\n ChevronsUpDown,\n Columns3,\n Download,\n FileSpreadsheet,\n Filter,\n GitBranch,\n HelpCircle,\n Maximize2,\n Minimize2,\n Printer,\n RefreshCw,\n Trash2,\n X,\n} from '@structyl/icons';\nimport * as XLSX from 'xlsx';\nimport { Button, Checkbox, ColorPicker, Combobox, Drawer, DropdownMenu, Input, Popover, Select, Tooltip } from '@structyl/styled';\nimport { type HsvaColor, hsvaToHex } from '@structyl/primitives';\nimport { cn } from '@structyl/utils';\n\nexport type DataTableColumn<TData, TValue = unknown> = ColumnDef<TData, TValue>;\nexport type DataTableFilterOperator =\n | 'contains'\n | 'equals'\n | 'startsWith'\n | 'endsWith'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'empty'\n | 'notEmpty';\nexport type DataTableFilterLogic = 'and' | 'or';\nexport type DataTableAggregation =\n | 'sum'\n | 'avg'\n | 'min'\n | 'max'\n | 'count'\n | ((values: unknown[], rows: Row<unknown>[]) => React.ReactNode);\nexport type DataTableLoadingVariant = 'text' | 'skeleton' | 'spinner';\n\nexport interface DataTableFilterRule {\n id: string;\n columnId: string;\n operator: DataTableFilterOperator;\n value?: unknown;\n}\n\nexport type DataTableFilterItem = DataTableFilterRule | DataTableFilterGroup;\n\nexport interface DataTableFilterGroup {\n id: string;\n logic: DataTableFilterLogic;\n items: DataTableFilterItem[];\n}\n\nexport interface ServerDataState {\n pagination?: PaginationState;\n sorting?: SortingState;\n filters?: ColumnFiltersState;\n globalFilter?: string;\n advancedFilter?: DataTableFilterGroup;\n rowSelection?: RowSelectionState;\n}\n\nexport interface ServerData<TData> {\n rows: TData[];\n total: number;\n}\n\nexport interface DataTableLocaleText {\n searchPlaceholder: string;\n filters: string;\n filterColumnLabel: string;\n filterOperatorLabel: string;\n filterValueLabel: string;\n filterLogicLabel: string;\n addFilter: string;\n addFilterGroup: string;\n clearFilters: string;\n removeFilter: string;\n removeFilterGroup: string;\n columns: string;\n columnMenu: string;\n sortAsc: string;\n sortDesc: string;\n clearSort: string;\n hideColumn: string;\n pinLeft: string;\n pinRight: string;\n unpin: string;\n groupBy: string;\n ungroup: string;\n selectColumn: string;\n selectedRows: (selected: number, total: number) => string;\n page: (page: number, pageCount: number) => string;\n previous: string;\n next: string;\n noResults: string;\n loading: string;\n loadingMore: string;\n error: string;\n addRow: string;\n cancel: string;\n save: string;\n rowActions: string;\n rowTotal: string;\n pinRowTop: string;\n pinRowBottom: string;\n total: string;\n expandRow: string;\n collapseRow: string;\n expandAll: string;\n collapseAll: string;\n copyRows: string;\n copyRow: string;\n copyColumn: string;\n density: string;\n densityCompact: string;\n densityStandard: string;\n densityComfortable: string;\n refresh: string;\n exportCsv: string;\n exportJson: string;\n noRows: string;\n rowsPerPage: string;\n totalRows: (count: number) => string;\n goToPage: string;\n firstPage: string;\n lastPage: string;\n bulkActionsTitle: (count: number) => string;\n clearSelection: string;\n // Phase 3\n rowNumberHeader: string;\n statusBarRows: (count: number) => string;\n statusBarSelected: (count: number) => string;\n printTitle: string;\n enterFullscreen: string;\n exitFullscreen: string;\n autoSizeColumn: string;\n quickFilterPlaceholder: string;\n lockColumn: string;\n unlockColumn: string;\n // Export\n export?: string;\n exportCSV?: string;\n exportJSON?: string;\n exportSelectedCSV?: string;\n // Conditional formatting\n conditionalFormatting?: string;\n}\n\nexport interface DataTableInlineCreate {\n fields: Array<{\n id: string;\n label?: React.ReactNode;\n type?: 'text' | 'number';\n placeholder?: string;\n }>;\n onAdd: (values: Record<string, string>) => void;\n label?: React.ReactNode;\n}\n\nexport interface DataTableRowTotals<TData> {\n id?: string;\n header?: React.ReactNode;\n columns?: string[];\n format?: (value: number, row: Row<TData>) => React.ReactNode;\n}\n\nexport interface DataTableRowPinningState {\n top?: string[];\n bottom?: string[];\n}\n\nexport type DataTableColumnType =\n | 'string'\n | 'number'\n | 'date'\n | 'dateTime'\n | 'boolean'\n | 'badge'\n | 'progress'\n | 'link'\n | 'avatar'\n | 'currency'\n | 'sparkline'\n | 'rating';\nexport type DataTableDensity = 'compact' | 'standard' | 'comfortable';\n\nexport interface DataTableCellParams<TData, TValue = unknown> {\n row: Row<TData>;\n value: TValue;\n field: string;\n}\n\nexport interface DataTableHeaderParams<TData, TValue = unknown> {\n column: Column<TData, TValue>;\n}\n\nexport interface DataTableToolbarAction<TData = unknown> {\n id: string;\n icon?: React.ReactNode;\n label?: React.ReactNode;\n tooltip?: string;\n onClick?: (table: Table<TData>) => void;\n render?: (table: Table<TData>) => React.ReactNode;\n disabled?: boolean;\n}\n\n/* ─── Slot prop interfaces ─────────────────────────────────────────── */\n\nexport interface DataTableColumnMenuSlotProps<TData> {\n column: Column<TData, unknown>;\n table: Table<TData>;\n}\n\nexport interface DataTableSearchSlotProps {\n value: string;\n onValueChange: (value: string) => void;\n placeholder: string;\n}\n\nexport interface DataTableFilterSlotProps<TData> {\n table: Table<TData>;\n filter?: DataTableFilterGroup;\n onFilterChange: (filter: DataTableFilterGroup | undefined) => void;\n localeText: DataTableLocaleText;\n overlayBoundary?: HTMLDivElement | null;\n}\n\nexport interface DataTableLoadingSkeletonSlotProps {\n rows: number;\n columns: number;\n}\n\nexport interface DataTableLoadingOverlaySlotProps {\n text: string;\n variant: DataTableLoadingVariant;\n}\n\n/** Slot overrides — provide a component to replace any built-in sub-component. */\nexport interface DataTableSlots<TData> {\n /** Replace the entire toolbar section. Receives the live TanStack table instance. */\n Toolbar?: React.ComponentType<{ table: Table<TData>; localeText: DataTableLocaleText }>;\n /** Replace the pagination section. */\n Pagination?: React.ComponentType<{\n table: Table<TData>;\n localeText: DataTableLocaleText;\n pageSizeOptions: number[];\n }>;\n /** Replace the column context menu dropdown. */\n ColumnMenu?: React.ComponentType<DataTableColumnMenuSlotProps<TData>>;\n /** Replace the advanced filter button/panel. */\n Filter?: React.ComponentType<DataTableFilterSlotProps<TData>>;\n /** Replace the global search input. */\n Search?: React.ComponentType<DataTableSearchSlotProps>;\n /** Replace the skeleton loading rows. */\n LoadingSkeleton?: React.ComponentType<DataTableLoadingSkeletonSlotProps>;\n /** Replace the loading overlay (spinner / text). */\n LoadingOverlay?: React.ComponentType<DataTableLoadingOverlaySlotProps>;\n /** Shown when the data source has no rows (before any filter). */\n NoRowsOverlay?: React.ComponentType;\n /** Shown when search / filter produce zero results from a non-empty dataset. */\n NoResultsOverlay?: React.ComponentType;\n}\n\n/* ─── Bulk actions ─────────────────────────────────────────────────── */\n\nexport interface DataTableBulkAction<TData = unknown> {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n tooltip?: string;\n onClick: (selectedRows: Row<TData>[], table: Table<TData>) => void;\n disabled?: boolean | ((selectedRows: Row<TData>[]) => boolean);\n variant?: 'default' | 'destructive';\n}\n\n/* ─── Structured row action items ──────────────────────────────────── */\n\nexport interface DataTableRowActionItem<TData = unknown> {\n id: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n tooltip?: string;\n onClick: (row: Row<TData>) => void;\n disabled?: boolean | ((row: Row<TData>) => boolean);\n /** Hide this item for specific rows. */\n hidden?: boolean | ((row: Row<TData>) => boolean);\n variant?: 'default' | 'destructive';\n /** Insert a visual separator above this item. */\n separator?: boolean;\n}\n\n/**\n * Structyl-extended column definition. All properties are optional so you can use\n * just `field` + `headerName` without satisfying TanStack's union requirements.\n * `normalizeColumnDefs` converts this to a proper TanStack `ColumnDef` before\n * passing it to `useReactTable`.\n */\nexport type DataTableColumnDef<TData, TValue = unknown> = {\n // ── Structyl extensions ─────────────────────────────────────────────────\n /** Field key on the data object — maps to `accessorKey`. */\n field?: string;\n /** Stable DB identifier distinct from the display field. */\n fieldId?: string;\n /** Human-readable header label — maps to `header` when a string. */\n headerName?: string;\n /** Data type — drives alignment, filter operators, and format. */\n type?: DataTableColumnType;\n /** Horizontal alignment for header and cells. */\n align?: 'left' | 'center' | 'right';\n /** Flex grow factor; column fills remaining width proportionally. */\n flex?: number;\n /** Read value from a row — maps to `accessorFn`. */\n valueGetter?: (row: TData) => TValue;\n /** Write an edited value back (used by inline editing). */\n valueSetter?: (row: TData, value: TValue, rowIndex: number) => void;\n /** Validation function for inline editing — return an error message string or undefined. */\n validate?: (value: unknown, row: TData) => string | undefined;\n /** Validation function applied to display-mode cells — return an error message or undefined. */\n displayValidate?: (value: unknown, row: TData) => string | undefined;\n /** Mark column as inline-editable. */\n editable?: boolean;\n // ── Feature 6: Column value formatting ──────────────────────────────\n /** Locale for Intl formatting of this column, e.g. 'en-US', 'de-DE'. Overrides the table-level locale. */\n locale?: string;\n /** DateTimeFormat options for date / dateTime columns. */\n dateFormat?: Intl.DateTimeFormatOptions;\n /** NumberFormat options for number / currency columns. */\n numberFormat?: Intl.NumberFormatOptions;\n /** IANA timezone for dateTime columns, e.g. 'America/New_York'. */\n timezone?: string;\n // ── Extended column type fields ──────────────────────────────────────\n /** Badge map: value → { label?, color?, textColor? }. Used when type='badge'. */\n badgeMap?: Record<string, { label?: string; color?: string; textColor?: string }>;\n /** ISO currency code, e.g. 'USD'. Used when type='currency'. */\n currencyCode?: string;\n /** Locale for Intl.NumberFormat, e.g. 'en-US'. Used when type='currency'. */\n currencyLocale?: string;\n /** Href for link cells. String = static, function = computed from value+row. */\n linkHref?: string | ((value: unknown, row: TData) => string);\n /** Target attribute for link cells. */\n linkTarget?: '_blank' | '_self';\n /** Function returning image URL from value+row. Used when type='avatar'. */\n avatarSrc?: (value: unknown, row: TData) => string;\n /** Function returning number array for sparkline chart. Used when type='sparkline'. */\n sparklineData?: (row: TData) => number[];\n /** Sparkline chart variant. */\n sparklineType?: 'line' | 'bar' | 'area';\n /** Max value for progress bar. Default 100. Used when type='progress'. */\n progressMax?: number;\n /** Max star count for rating. Default 5. Used when type='rating'. */\n ratingMax?: number;\n /** Custom cell renderer — maps to `cell`. */\n renderCell?: (params: DataTableCellParams<TData, TValue>) => React.ReactNode;\n /** Custom header renderer — maps to `header`. */\n renderHeader?: (params: DataTableHeaderParams<TData, TValue>) => React.ReactNode;\n /** Tooltip shown on the column header. */\n description?: string;\n /** Override the default filter operators for this column. */\n filterOperators?: DataTableFilterOperator[];\n // ── TanStack ColumnDef pass-through (all optional) ──────────────────\n id?: string;\n accessorKey?: string;\n accessorFn?: (originalRow: TData, index: number) => TValue;\n header?: ColumnDef<TData, TValue>['header'];\n cell?: ColumnDef<TData, TValue>['cell'];\n footer?: ColumnDef<TData, TValue>['footer'];\n columns?: DataTableColumnDef<TData, TValue>[];\n size?: number;\n minSize?: number;\n maxSize?: number;\n enableSorting?: boolean;\n enableHiding?: boolean;\n enableResizing?: boolean;\n enableColumnFilter?: boolean;\n enableGlobalFilter?: boolean;\n enableGrouping?: boolean;\n enablePinning?: boolean;\n enableMultiSort?: boolean;\n sortDescFirst?: boolean;\n invertSorting?: boolean;\n meta?: object;\n getGroupingValue?: (row: TData) => unknown;\n};\n\nexport interface DataTableConditionalRule {\n id: string;\n columnId: string;\n operator: 'equals' | 'notEquals' | 'contains' | 'gt' | 'gte' | 'lt' | 'lte' | 'empty' | 'notEmpty';\n value?: string;\n backgroundColor?: string;\n textColor?: string;\n}\n\n// ── Round 2 types ────────────────────────────────────────────────────\n\n/** Cell selection range for `enableCellSelection`. */\nexport type DataTableCellSelection = {\n startRowIndex: number;\n startColIndex: number;\n endRowIndex: number;\n endColIndex: number;\n};\n\n// ── Round 3 types ────────────────────────────────────────────────────\n\n/** Pivot table configuration. */\nexport type DataTablePivotConfig = {\n /** Column whose unique values become row headers. */\n rowGroupField: string;\n /** Column whose unique values become column headers. */\n pivotField: string;\n /** Column whose values are aggregated in each cell. */\n valueField: string;\n /** Aggregation function applied to each pivot cell. */\n aggregation: 'count' | 'sum' | 'avg' | 'min' | 'max';\n};\n\n/** A saved snapshot of the table's display state. */\nexport type DataTableSavedView = {\n id: string;\n name: string;\n /** ISO date string. */\n createdAt: string;\n state: {\n sorting?: SortingState;\n columnFilters?: ColumnFiltersState;\n globalFilter?: string;\n columnVisibility?: VisibilityState;\n columnOrder?: ColumnOrderState;\n columnSizing?: ColumnSizingState;\n columnPinning?: ColumnPinningState;\n density?: DataTableDensity;\n grouping?: GroupingState;\n conditionalFormattingRules?: DataTableConditionalRule[];\n };\n};\n\n/** A cell-level validation error produced by `displayValidate`. */\nexport type DataTableValidationError = {\n rowId: string;\n field: string;\n value: unknown;\n message: string;\n};\n\n/** Column statistics computed in the Tool Panel Stats tab. */\nexport type ColumnStats = {\n count: number;\n nullCount: number;\n uniqueCount: number;\n min?: number;\n max?: number;\n mean?: number;\n median?: number;\n sum?: number;\n minLength?: number;\n maxLength?: number;\n avgLength?: number;\n topValues: Array<{ value: string; count: number; pct: number }>;\n};\n\nexport interface DataTableProps<TData, TValue = unknown> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n /** Render rows virtually. Specify estimated row height. */\n virtual?: boolean | { estimatedRowHeight?: number; overscan?: number };\n /** Render leaf columns virtually for wide grids. */\n virtualColumns?: boolean | { estimatedColumnWidth?: number; overscan?: number };\n enableSorting?: boolean;\n enableFiltering?: boolean;\n enableAdvancedFiltering?: boolean;\n enableGlobalSearch?: boolean;\n enableRowSelection?: boolean | 'single';\n enableColumnSelection?: boolean;\n enablePagination?: boolean;\n enableExpanding?: boolean;\n enableGrouping?: boolean;\n enableColumnResizing?: boolean;\n enableColumnReordering?: boolean;\n enableRowReordering?: boolean;\n enableColumnPinning?: boolean;\n enableRowPinning?: boolean;\n enableColumnConfiguration?: boolean;\n pageSize?: number;\n loading?: boolean;\n loadingMore?: boolean;\n loadingVariant?: DataTableLoadingVariant;\n skeletonRows?: number;\n error?: React.ReactNode;\n emptyState?: React.ReactNode;\n className?: string;\n tableClassName?: string;\n toolbar?: React.ReactNode | ((table: Table<TData>) => React.ReactNode);\n toolbarStart?: React.ReactNode;\n toolbarEnd?: React.ReactNode;\n globalFilter?: string;\n defaultGlobalFilter?: string;\n onGlobalFilterChange?: (value: string) => void;\n globalFilterPlaceholder?: string;\n advancedFilter?: DataTableFilterGroup;\n defaultAdvancedFilter?: DataTableFilterGroup;\n onAdvancedFilterChange?: (filter: DataTableFilterGroup | undefined) => void;\n getAdvancedFilterValue?: (row: TData, columnId: string) => unknown;\n rowActions?: (row: Row<TData>) => React.ReactNode;\n inlineCreateRow?: DataTableInlineCreate;\n aggregations?: Record<string, DataTableAggregation>;\n showColumnTotals?: boolean;\n rowTotals?: boolean | DataTableRowTotals<TData>;\n rowPinning?: DataTableRowPinningState;\n defaultRowPinning?: DataTableRowPinningState;\n onRowPinningChange?: (state: DataTableRowPinningState) => void;\n columnSelection?: string[];\n defaultColumnSelection?: string[];\n onColumnSelectionChange?: (columnIds: string[]) => void;\n renderDetailPanel?: (row: Row<TData>) => React.ReactNode;\n getCellColSpan?: (cell: Cell<TData, unknown>, row: Row<TData>) => number | undefined;\n getCellRowSpan?: (cell: Cell<TData, unknown>, row: Row<TData>) => number | undefined;\n getRowClassName?: (row: Row<TData>) => string | undefined;\n getRowStyle?: (row: Row<TData>) => React.CSSProperties | undefined;\n getRowHeight?: (row: Row<TData>) => number | undefined;\n height?: number | string;\n maxHeight?: number | string;\n fullHeight?: boolean;\n autoHeight?: boolean;\n onLoadMore?: () => void;\n hasMore?: boolean;\n loadMoreThreshold?: number;\n onRowOrderChange?: (rows: TData[], rowIds: string[]) => void;\n onColumnOrderChange?: (columnIds: string[]) => void;\n localeText?: Partial<DataTableLocaleText>;\n /** Server-side data adapter. When provided, internal sort/filter/pagination is disabled. */\n serverSide?: {\n state: ServerDataState;\n onStateChange: (state: ServerDataState) => void;\n rowCount: number;\n };\n getRowId?: (row: TData, index: number) => string;\n getSubRows?: (row: TData) => TData[] | undefined;\n onRowSelectionChange?: (state: RowSelectionState) => void;\n onSortingChange?: (state: SortingState) => void;\n /** Imperative ref exposing the underlying TanStack Table instance. */\n tableRef?: React.MutableRefObject<Table<TData> | null>;\n /** Override any built-in sub-component with your own. */\n slots?: DataTableSlots<TData>;\n /** Page size options shown in the rows-per-page selector. */\n pageSizeOptions?: number[];\n /** Show the total row count in the pagination bar. */\n showTotalRows?: boolean;\n /** Overlay shown when the data source has no rows (before any filter/search). */\n noRowsOverlay?: React.ReactNode;\n /** Overlay shown when filters/search produce no results from a non-empty dataset. */\n noResultsOverlay?: React.ReactNode;\n /** Actions shown in the bulk-action bar when one or more rows are selected. */\n bulkActions?: DataTableBulkAction<TData>[];\n /** Structured row action items rendered as a 3-dot dropdown menu in the action column. */\n rowActionMenu?: DataTableRowActionItem<TData>[];\n /** Structured row action items rendered as inline buttons in the action column. */\n rowActionButtons?: DataTableRowActionItem<TData>[];\n /** Ctrl+C on a row also copies that single row (in addition to multi-row copy). */\n enableRowCopy?: boolean;\n /** Add a \"Copy column\" item to the column context menu. */\n enableColumnCopy?: boolean;\n /** Row/cell density. */\n density?: DataTableDensity;\n defaultDensity?: DataTableDensity;\n enableDensityToggle?: boolean;\n onDensityChange?: (density: DataTableDensity) => void;\n /** Enable tree data — adds visual indentation based on row depth (use with `getSubRows`). */\n treeData?: boolean;\n /** Enable Ctrl+C to copy selected rows as TSV. */\n enableCopyPaste?: boolean;\n onCopy?: (rows: Row<TData>[], text: string) => void;\n /** Custom toolbar action buttons rendered in the right toolbar section. */\n toolbarActions?: DataTableToolbarAction<TData>[];\n /** Callback for a Refresh toolbar action. */\n onRefresh?: () => void;\n // ── Phase 3 additions ─────────────────────────────────────────────────\n /** Return extra CSS class(es) for a specific cell based on its value and row. */\n getCellClassName?: (cell: Cell<TData, unknown>, row: Row<TData>) => string | undefined;\n /** Show a fixed row-number column as the first column (1, 2, 3…). */\n enableRowNumbers?: boolean;\n /** Alternate row background color for readability. */\n striped?: boolean;\n /** Show the full cell value as a tooltip when the cell content is truncated. */\n enableCellTooltip?: boolean;\n /**\n * Persist column order/visibility/sizing, sort, filters, and pagination to\n * localStorage under this key. Restored on mount.\n */\n stateKey?: string;\n /** Show a status bar below the table with row and selection counts. */\n enableStatusBar?: boolean;\n /** Expand the grid to fill the viewport when true (controlled fullscreen). */\n fullscreen?: boolean;\n /** Callback when the user toggles fullscreen from the toolbar button. */\n onFullscreenChange?: (fullscreen: boolean) => void;\n /** Show a fullscreen toggle button in the toolbar. */\n enableFullscreen?: boolean;\n /** Row IDs that show a loading spinner (async row action in progress). */\n loadingRowIds?: string[];\n /** Callback for a Print toolbar button / helper — called before window.print(). */\n onPrint?: () => void;\n /** Column IDs whose header should show a quick-filter input below the label. */\n quickFilterColumns?: string[];\n /** Show a right-click context menu on cells/rows. */\n onCellContextMenu?: (cell: Cell<TData, unknown>, row: Row<TData>, event: React.MouseEvent) => void;\n onRowContextMenu?: (row: Row<TData>, event: React.MouseEvent) => void;\n /** Double-click a column resize handle to auto-size to content. */\n enableColumnAutoSize?: boolean;\n /** Column IDs that cannot be hidden, reordered, or resized. */\n lockedColumns?: string[];\n /** Fired when the user locks or unlocks a column via the column menu. */\n onLockedColumnsChange?: (columnIds: string[]) => void;\n /** Render rows as label/value cards below this Tailwind breakpoint. */\n mobileBreakpoint?: 'sm' | 'md' | 'lg';\n /** Built-in Export dropdown (CSV, JSON, and XLSX). Set to true or provide custom options. */\n enableExport?: boolean | { csv?: boolean; json?: boolean; selectedCsv?: boolean; xlsx?: boolean };\n /** Enable the built-in conditional formatting drawer in the toolbar. */\n enableConditionalFormatting?: boolean;\n /** Controlled conditional formatting rules. */\n conditionalFormattingRules?: DataTableConditionalRule[];\n /** Fired when rules change. */\n onConditionalFormattingRulesChange?: (rules: DataTableConditionalRule[]) => void;\n\n // ── Feature 3: Row status indicators ────────────────────────────────\n /** Return a status for a row to show a colored left border. */\n getRowStatus?: (row: Row<TData>) => 'success' | 'warning' | 'error' | 'info' | undefined;\n\n // ── Feature 4: Custom row height ─────────────────────────────────────\n /** Fixed row height (px) or a function returning height per row. */\n rowHeight?: number | ((row: Row<TData>, index: number) => number);\n\n // ── Feature 5: Active filter chips ──────────────────────────────────\n /** Show active column-filter chips above the table. */\n enableFilterChips?: boolean;\n\n // ── Feature 6: Clipboard paste ───────────────────────────────────────\n /** Enable Ctrl+V paste of TSV data into editable cells. */\n enablePaste?: boolean;\n\n // ── Feature 7: RTL support ───────────────────────────────────────────\n /** Text direction for the grid. */\n dir?: 'ltr' | 'rtl';\n\n // ── Feature 8: Keyboard shortcuts modal ──────────────────────────────\n /** Show a keyboard shortcuts modal when ? is pressed. */\n enableKeyboardShortcuts?: boolean;\n\n // ── Feature 9: Excel export (xlsx option inside enableExport) ────────\n // enableExport now also accepts { xlsx?: boolean } in addition to csv/json/selectedCsv\n\n // ── Feature 10: Inline editing undo/redo + validation + dirty tracking\n /** Interaction mode to start inline editing. */\n editMode?: 'click' | 'dblclick';\n /** Callback fired after a cell edit is committed via valueSetter. */\n onCellEditCommit?: (params: { field: string; row: TData; oldValue: unknown; newValue: unknown }) => void;\n /** Enable Ctrl+Z / Ctrl+Y undo-redo for inline edits. */\n enableUndoRedo?: boolean;\n /** Controlled set of row IDs with unsaved changes. */\n dirtyRows?: Set<string>;\n /** Fired when dirty row set changes. */\n onDirtyRowsChange?: (dirtyRows: Set<string>) => void;\n\n // ── Round 2: Feature 1 — Cell Range Selection + Bulk Edit ────────────\n /** Enable cell-range selection. Disables row-selection click behavior on td. */\n enableCellSelection?: boolean;\n /** Fired when cell selection changes. */\n onCellSelectionChange?: (selection: DataTableCellSelection | null) => void;\n\n // ── Round 2: Feature 2 — Tool Panel / Sidebar ────────────────────────\n /** Show the collapsible right-side tool panel. */\n enableToolPanel?: boolean;\n /** Which tab to open by default in the tool panel. */\n defaultToolPanelTab?: 'columns' | 'filters' | 'stats';\n\n // ── Round 2: Feature 3 — Real-time Live Data with Cell Flash ─────────\n /** Enable real-time cell flash when data changes. */\n enableLiveData?: boolean;\n /** Field used as row identity for live-data diffing. Default: 'id'. */\n liveDataKey?: keyof TData;\n /** Fired when live-data diff detects updated rows. */\n onLiveDataUpdate?: (updatedRows: TData[]) => void;\n\n // ── Round 2: Feature 5A — Async Detail Panel ─────────────────────────\n /** Async loader for detail panel content. Cached after first load. */\n loadDetailPanel?: (row: Row<TData>) => Promise<React.ReactNode>;\n /** Maximum number of cached detail panels (LRU). Default: 20. */\n detailPanelCacheSize?: number;\n\n // ── Round 2: Feature 5B — Print-optimized CSS ────────────────────────\n /** Inject @media print styles that hide toolbar/pagination. */\n enablePrintStyles?: boolean;\n\n // ── Round 3: Feature 1 — Pivot Mode ──────────────────────────────────\n /** Enable pivot mode. When true, a Pivot toolbar button appears. */\n enablePivot?: boolean;\n /** Controlled pivot configuration. When set alongside enablePivot, renders pivot view. */\n pivotConfig?: DataTablePivotConfig;\n /** Fired when pivot config changes from the toolbar panel. */\n onPivotConfigChange?: (config: DataTablePivotConfig) => void;\n\n // ── Round 3: Feature 2 — Saved Views ─────────────────────────────────\n /** Enable saved views toolbar button. */\n enableSavedViews?: boolean;\n /** Controlled saved views list. */\n savedViews?: DataTableSavedView[];\n /** Fired when saved views list changes. */\n onSavedViewsChange?: (views: DataTableSavedView[]) => void;\n\n // ── Round 3: Feature 3 — Full ARIA Grid ──────────────────────────────\n /** Accessible label for the grid root element. */\n ariaLabel?: string;\n /** ID of an element that labels the grid. */\n ariaLabelledBy?: string;\n\n // ── Round 3: Feature 4 — Header Stats Row ────────────────────────────\n /** Show an aggregated stats row pinned below column headers. */\n enableHeaderStats?: boolean;\n /** Per-column stat type override. key = columnId, value = stat type. Defaults: sum for number, count for others. */\n headerStatsConfig?: Partial<Record<string, 'count' | 'sum' | 'avg' | 'min' | 'max' | 'nullCount' | 'unique'>>;\n\n // ── Round 3: Feature 5 — Data Schema Validation ───────────────────────\n /** Enable display-mode cell validation using displayValidate on column defs. */\n enableValidation?: boolean;\n /** Fired when validation errors change. */\n onValidationChange?: (errors: DataTableValidationError[]) => void;\n\n // ── Round 3: Feature 6 — Column Value Formatting ──────────────────────\n /** Default locale for all columns (overridden per-column). e.g. 'en-US', 'de-DE'. */\n locale?: string;\n}\n\nconst defaultLocaleText: DataTableLocaleText = {\n searchPlaceholder: 'Search…',\n filters: 'Filters',\n filterColumnLabel: 'Column',\n filterOperatorLabel: 'Operator',\n filterValueLabel: 'Value',\n filterLogicLabel: 'Logic',\n addFilter: 'Add filter',\n addFilterGroup: 'Add group',\n clearFilters: 'Clear filters',\n removeFilter: 'Remove filter',\n removeFilterGroup: 'Remove group',\n columns: 'Columns',\n columnMenu: 'Column menu',\n sortAsc: 'Sort ascending',\n sortDesc: 'Sort descending',\n clearSort: 'Clear sort',\n hideColumn: 'Hide column',\n pinLeft: 'Pin left',\n pinRight: 'Pin right',\n unpin: 'Unpin',\n groupBy: 'Group by',\n ungroup: 'Ungroup',\n selectColumn: 'Select column',\n selectedRows: (selected, total) => `${selected} of ${total} row(s) selected.`,\n page: (page, pageCount) => `Page ${page} of ${pageCount}`,\n previous: 'Previous',\n next: 'Next',\n noResults: 'No results.',\n loading: 'Loading…',\n loadingMore: 'Loading more…',\n error: 'Something went wrong.',\n addRow: 'Add row',\n cancel: 'Cancel',\n save: 'Save',\n rowActions: 'Actions',\n rowTotal: 'Row total',\n pinRowTop: 'Pin top',\n pinRowBottom: 'Pin bottom',\n total: 'Total',\n expandRow: 'Expand row',\n collapseRow: 'Collapse row',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n copyRows: 'Copy rows',\n copyRow: 'Copy row',\n copyColumn: 'Copy column',\n density: 'Density',\n densityCompact: 'Compact',\n densityStandard: 'Standard',\n densityComfortable: 'Comfortable',\n refresh: 'Refresh',\n exportCsv: 'Export CSV',\n exportJson: 'Export JSON',\n noRows: 'No data.',\n rowsPerPage: 'Rows per page',\n totalRows: (count) => `${count.toLocaleString()} rows`,\n goToPage: 'Go to page',\n firstPage: 'First page',\n lastPage: 'Last page',\n bulkActionsTitle: (count) => `${count} selected`,\n clearSelection: 'Clear selection',\n rowNumberHeader: '#',\n statusBarRows: (count) => `${count.toLocaleString()} rows`,\n statusBarSelected: (count) => `${count} selected`,\n printTitle: 'Print',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n autoSizeColumn: 'Auto-size column',\n quickFilterPlaceholder: 'Filter…',\n lockColumn: 'Lock column',\n unlockColumn: 'Unlock column',\n export: 'Export',\n exportCSV: 'Export as CSV',\n exportJSON: 'Export as JSON',\n exportSelectedCSV: 'Export selected rows',\n conditionalFormatting: 'Conditional formatting',\n};\n\n// ── Module-level style injection flags ──────────────────────────────────\nlet liveDataStyleInjected = false;\nlet printStyleInjected = false;\n\nfunction injectLiveDataStyles() {\n if (liveDataStyleInjected || typeof document === 'undefined') return;\n liveDataStyleInjected = true;\n const styleEl = document.createElement('style');\n styleEl.textContent = `\n@keyframes cell-flash {\n 0% { background-color: hsl(var(--primary) / 0.3); }\n 100% { background-color: transparent; }\n}\n@keyframes row-slide-in {\n 0% { opacity: 0; transform: translateX(-12px); }\n 100% { opacity: 1; transform: translateX(0); }\n}\n@keyframes row-fade-out {\n 0% { opacity: 1; background-color: hsl(var(--destructive) / 0.12); }\n 100% { opacity: 0; background-color: hsl(var(--destructive) / 0.12); }\n}\n[data-flash=\"true\"] { animation: cell-flash 1.2s ease-out; }\n[data-new-row=\"true\"] { animation: row-slide-in 0.4s ease-out; }\n[data-removed-row=\"true\"] { animation: row-fade-out 0.6s ease-out forwards; }\n`;\n document.head.appendChild(styleEl);\n}\n\nfunction injectPrintStyles() {\n if (printStyleInjected || typeof document === 'undefined') return;\n printStyleInjected = true;\n const styleEl = document.createElement('style');\n styleEl.textContent = `\n@media print {\n [data-datatable-root] .data-table-toolbar { display: none !important; }\n [data-datatable-root] .data-table-pagination { display: none !important; }\n [data-datatable-root] { overflow: visible !important; height: auto !important; max-height: none !important; }\n [data-datatable-root] table { page-break-inside: auto; width: 100% !important; }\n [data-datatable-root] tr { page-break-inside: avoid; page-break-after: auto; }\n [data-datatable-root] thead { display: table-header-group; }\n [data-datatable-root] tfoot { display: table-footer-group; }\n}\n`;\n document.head.appendChild(styleEl);\n}\n\n// Snapshots current theme CSS variables and injects them for @media print so\n// the printed output matches the active theme (dark or light) exactly.\nfunction applyPrintTheme(): () => void {\n if (typeof document === 'undefined') return () => {};\n const rootStyle = getComputedStyle(document.documentElement);\n const tokens = [\n '--background', '--foreground', '--muted', '--muted-foreground',\n '--border', '--primary', '--primary-foreground', '--secondary',\n '--secondary-foreground', '--accent', '--accent-foreground',\n '--card', '--card-foreground', '--destructive', '--destructive-foreground',\n '--ring', '--radius', '--sidebar', '--sidebar-foreground',\n ];\n const vars = tokens\n .map((t) => { const v = rootStyle.getPropertyValue(t).trim(); return v ? `${t}: ${v};` : ''; })\n .filter(Boolean)\n .join(' ');\n\n const el = document.createElement('style');\n el.setAttribute('data-structyl-print-theme', '');\n el.textContent = `\n@media print {\n :root { ${vars} color-scheme: light dark; }\n *, *::before, *::after { print-color-adjust: exact !important; -webkit-print-color-adjust: exact !important; }\n [data-datatable-root] .data-table-toolbar { display: none !important; }\n [data-datatable-root] .data-table-pagination { display: none !important; }\n [data-datatable-root] { overflow: visible !important; height: auto !important; max-height: none !important; }\n [data-datatable-root] table { page-break-inside: auto; width: 100% !important; }\n [data-datatable-root] tr { page-break-inside: avoid; page-break-after: auto; }\n [data-datatable-root] thead { display: table-header-group; }\n [data-datatable-root] tfoot { display: table-footer-group; }\n}\n`;\n document.head.appendChild(el);\n return () => el.remove();\n}\n\n// ── useDataFlash ─────────────────────────────────────────────────────────\nfunction useDataFlash<TData>(\n data: TData[],\n liveDataKey: keyof TData | undefined,\n enabled: boolean,\n): { flashedCells: Map<string, Set<string>>; newRowIds: Set<string>; removedRowIds: Set<string> } {\n const idKey = liveDataKey ?? ('id' as keyof TData);\n const prevDataRef = React.useRef<Map<string, Record<string, unknown>>>(new Map());\n const [flashedCells, setFlashedCells] = React.useState<Map<string, Set<string>>>(new Map());\n const [newRowIds, setNewRowIds] = React.useState<Set<string>>(new Set());\n const [removedRowIds, setRemovedRowIds] = React.useState<Set<string>>(new Set());\n\n React.useEffect(() => {\n if (!enabled) return;\n const prevMap = prevDataRef.current;\n const currentMap = new Map<string, Record<string, unknown>>();\n const changedCells = new Map<string, Set<string>>();\n const addedIds = new Set<string>();\n\n for (const row of data) {\n const rowId = String(row[idKey] ?? '');\n const rowRecord = row as unknown as Record<string, unknown>;\n currentMap.set(rowId, rowRecord);\n if (!prevMap.has(rowId)) {\n addedIds.add(rowId);\n } else {\n const prevRow = prevMap.get(rowId)!;\n for (const key of Object.keys(rowRecord)) {\n if (rowRecord[key] !== prevRow[key]) {\n if (!changedCells.has(rowId)) changedCells.set(rowId, new Set());\n changedCells.get(rowId)!.add(key);\n }\n }\n }\n }\n\n const removedIds = new Set<string>();\n for (const id of prevMap.keys()) {\n if (!currentMap.has(id)) removedIds.add(id);\n }\n\n prevDataRef.current = currentMap;\n\n let timer: ReturnType<typeof setTimeout> | undefined;\n if (changedCells.size > 0) {\n setFlashedCells(changedCells);\n timer = setTimeout(() => setFlashedCells(new Map()), 1200);\n } else if (addedIds.size > 0) {\n setNewRowIds(addedIds);\n timer = setTimeout(() => setNewRowIds(new Set()), 400);\n } else if (removedIds.size > 0) {\n setRemovedRowIds(removedIds);\n timer = setTimeout(() => setRemovedRowIds(new Set()), 600);\n }\n return () => { if (timer !== undefined) clearTimeout(timer); };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, enabled]);\n\n return { flashedCells, newRowIds, removedRowIds };\n}\n\nexport function DataTable<TData, TValue = unknown>(props: DataTableProps<TData, TValue>) {\n const {\n columns,\n data,\n virtual,\n virtualColumns,\n enableSorting = true,\n enableFiltering = false,\n enableAdvancedFiltering = false,\n enableGlobalSearch = false,\n enableRowSelection = false,\n enableColumnSelection = false,\n enablePagination = false,\n enableExpanding = false,\n enableGrouping = false,\n enableColumnResizing = false,\n enableColumnReordering = false,\n enableRowReordering = false,\n enableColumnPinning = false,\n enableRowPinning = false,\n enableColumnConfiguration = false,\n pageSize = 10,\n loading,\n loadingMore,\n loadingVariant = 'text',\n skeletonRows = 5,\n error,\n emptyState,\n className,\n tableClassName,\n toolbar,\n toolbarStart,\n toolbarEnd,\n globalFilter: globalFilterProp,\n defaultGlobalFilter,\n onGlobalFilterChange,\n globalFilterPlaceholder,\n advancedFilter: advancedFilterProp,\n defaultAdvancedFilter,\n onAdvancedFilterChange,\n getAdvancedFilterValue,\n rowActions,\n inlineCreateRow,\n aggregations,\n showColumnTotals = !!aggregations,\n rowTotals,\n rowPinning: rowPinningProp,\n defaultRowPinning,\n onRowPinningChange,\n columnSelection: columnSelectionProp,\n defaultColumnSelection,\n onColumnSelectionChange,\n renderDetailPanel,\n getCellColSpan,\n getCellRowSpan,\n getRowClassName,\n getRowStyle,\n getRowHeight,\n height,\n maxHeight,\n fullHeight,\n autoHeight,\n onLoadMore,\n hasMore,\n loadMoreThreshold = 96,\n onRowOrderChange,\n onColumnOrderChange,\n localeText,\n serverSide,\n getRowId,\n getSubRows,\n onRowSelectionChange,\n onSortingChange,\n tableRef,\n density: densityProp,\n defaultDensity = 'standard',\n enableDensityToggle = false,\n onDensityChange,\n treeData = false,\n enableCopyPaste = false,\n onCopy,\n toolbarActions,\n onRefresh,\n slots,\n pageSizeOptions = [10, 25, 50, 100],\n showTotalRows = true,\n noRowsOverlay,\n noResultsOverlay,\n bulkActions,\n rowActionMenu,\n rowActionButtons,\n enableRowCopy = false,\n enableColumnCopy = false,\n getCellClassName,\n enableRowNumbers = false,\n striped = false,\n enableCellTooltip = false,\n stateKey,\n enableStatusBar = false,\n fullscreen: fullscreenProp,\n onFullscreenChange,\n enableFullscreen = false,\n loadingRowIds,\n onPrint,\n quickFilterColumns,\n onCellContextMenu,\n onRowContextMenu,\n enableColumnAutoSize = false,\n lockedColumns: lockedColumnsProp,\n onLockedColumnsChange,\n mobileBreakpoint,\n enableExport = false,\n enableConditionalFormatting = false,\n conditionalFormattingRules: conditionalFormattingRulesProp,\n onConditionalFormattingRulesChange,\n // Feature 3\n getRowStatus,\n // Feature 4\n rowHeight,\n // Feature 5\n enableFilterChips = false,\n // Feature 6\n enablePaste = false,\n // Feature 7\n dir,\n // Feature 8\n enableKeyboardShortcuts = false,\n // Feature 10\n editMode: _editMode,\n onCellEditCommit: _onCellEditCommit,\n enableUndoRedo = false,\n dirtyRows: dirtyRowsProp,\n onDirtyRowsChange,\n // Round 2: Feature 1\n enableCellSelection = false,\n onCellSelectionChange,\n // Round 2: Feature 2\n enableToolPanel = false,\n defaultToolPanelTab = 'columns',\n // Round 2: Feature 3\n enableLiveData = false,\n liveDataKey,\n onLiveDataUpdate,\n // Round 2: Feature 5A\n loadDetailPanel,\n detailPanelCacheSize = 20,\n // Round 2: Feature 5B\n enablePrintStyles = false,\n // Round 3: Feature 1\n enablePivot = false,\n pivotConfig: pivotConfigProp,\n onPivotConfigChange,\n // Round 3: Feature 2\n enableSavedViews = false,\n savedViews: savedViewsProp,\n onSavedViewsChange,\n // Round 3: Feature 3\n ariaLabel,\n ariaLabelledBy,\n // Round 3: Feature 4\n enableHeaderStats = false,\n headerStatsConfig,\n // Round 3: Feature 5\n enableValidation = false,\n onValidationChange,\n // Round 3: Feature 6\n locale: propLocale,\n } = props;\n\n const [internalLockedColumns, setInternalLockedColumns] = React.useState<string[]>(\n lockedColumnsProp ?? [],\n );\n const lockedColumns = lockedColumnsProp ?? internalLockedColumns;\n const handleLockedColumnsChange = React.useCallback(\n (cols: string[]) => {\n setInternalLockedColumns(cols);\n onLockedColumnsChange?.(cols);\n },\n [onLockedColumnsChange],\n );\n\n const [internalConditionalRules, setInternalConditionalRules] = React.useState<DataTableConditionalRule[]>(\n conditionalFormattingRulesProp ?? [],\n );\n const conditionalFormattingRules = conditionalFormattingRulesProp ?? internalConditionalRules;\n const handleConditionalRulesChange = React.useCallback(\n (rules: DataTableConditionalRule[]) => {\n setInternalConditionalRules(rules);\n onConditionalFormattingRulesChange?.(rules);\n },\n [onConditionalFormattingRulesChange],\n );\n\n const [cfDrawerOpen, setCfDrawerOpen] = React.useState(false);\n const [cfInitialColumnId, setCfInitialColumnId] = React.useState<string | undefined>();\n const handleOpenCfDrawer = React.useCallback((columnId?: string) => {\n setCfInitialColumnId(columnId);\n setCfDrawerOpen(true);\n }, []);\n\n const text = React.useMemo<DataTableLocaleText>(\n () => ({ ...defaultLocaleText, ...localeText }),\n [localeText],\n );\n\n const [sorting, setSorting] = React.useState<SortingState>(serverSide?.state.sorting ?? []);\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(\n serverSide?.state.filters ?? [],\n );\n const [internalGlobalFilter, setInternalGlobalFilter] = React.useState(\n serverSide?.state.globalFilter ?? defaultGlobalFilter ?? '',\n );\n const [internalAdvancedFilter, setInternalAdvancedFilter] = React.useState<\n DataTableFilterGroup | undefined\n >(serverSide?.state.advancedFilter ?? defaultAdvancedFilter);\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>(\n serverSide?.state.rowSelection ?? {},\n );\n const [expanded, setExpanded] = React.useState<ExpandedState>({});\n const [grouping, setGrouping] = React.useState<GroupingState>([]);\n const [columnSizing, setColumnSizing] = React.useState<ColumnSizingState>({});\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>([]);\n const [columnPinning, setColumnPinning] = React.useState<ColumnPinningState>({});\n const [pagination, setPagination] = React.useState<PaginationState>(\n serverSide?.state.pagination ?? { pageIndex: 0, pageSize },\n );\n const [internalRowPinning, setInternalRowPinning] = React.useState<DataTableRowPinningState>(\n serverSide?.state.rowSelection ? {} : (defaultRowPinning ?? {}),\n );\n const [internalColumnSelection, setInternalColumnSelection] = React.useState<string[]>(\n defaultColumnSelection ?? [],\n );\n const [draggedRowId, setDraggedRowId] = React.useState<string | null>(null);\n const [draggedColumnId, setDraggedColumnId] = React.useState<string | null>(null);\n const [internalDensity, setInternalDensity] = React.useState<DataTableDensity>(\n densityProp ?? defaultDensity,\n );\n const [internalFullscreen, setInternalFullscreen] = React.useState(false);\n\n // Feature 6: paste version counter to trigger re-render\n const [_pasteVersion, setPasteVersion] = React.useState(0);\n\n // Round 3: Feature 1 — Pivot mode\n const [internalPivotConfig, setInternalPivotConfig] = React.useState<DataTablePivotConfig | undefined>();\n const pivotConfig = pivotConfigProp ?? internalPivotConfig;\n const [pivotDrawerOpen, setPivotDrawerOpen] = React.useState(false);\n const handlePivotConfigChange = React.useCallback(\n (config: DataTablePivotConfig) => {\n setInternalPivotConfig(config);\n onPivotConfigChange?.(config);\n },\n [onPivotConfigChange],\n );\n\n // Round 3: Feature 2 — Saved views\n const [internalViews, setInternalViews] = React.useState<DataTableSavedView[]>(savedViewsProp ?? []);\n const savedViews = savedViewsProp ?? internalViews;\n const [savedViewsDrawerOpen, setSavedViewsDrawerOpen] = React.useState(false);\n const handleViewsChange = React.useCallback(\n (views: DataTableSavedView[]) => {\n setInternalViews(views);\n onSavedViewsChange?.(views);\n },\n [onSavedViewsChange],\n );\n\n // Feature 8: keyboard shortcuts modal\n const [shortcutsOpen, setShortcutsOpen] = React.useState(false);\n\n // Round 2: Feature 1 — Cell selection\n const [cellSelection, setCellSelection] = React.useState<DataTableCellSelection | null>(null);\n const [isSelectingCells, setIsSelectingCells] = React.useState(false);\n\n const handleCellSelectionChange = React.useCallback(\n (next: DataTableCellSelection | null) => {\n setCellSelection(next);\n onCellSelectionChange?.(next);\n },\n [onCellSelectionChange],\n );\n\n // Track mouse-up on document to end cell selection drag\n React.useEffect(() => {\n if (!enableCellSelection) return;\n const handleMouseUp = () => setIsSelectingCells(false);\n document.addEventListener('mouseup', handleMouseUp);\n return () => document.removeEventListener('mouseup', handleMouseUp);\n }, [enableCellSelection]);\n\n // Bulk-edit bar state\n const [bulkEditValue, setBulkEditValue] = React.useState('');\n\n // Round 2: Feature 2 — Tool Panel\n const [toolPanelTab, setToolPanelTab] = React.useState<'columns' | 'filters' | 'stats'>(\n defaultToolPanelTab,\n );\n const [toolPanelOpen, setToolPanelOpen] = React.useState(false);\n const [statsColumnId, setStatsColumnId] = React.useState<string | undefined>();\n\n const handleViewStats = React.useCallback((columnId: string) => {\n setStatsColumnId(columnId);\n setToolPanelTab('stats');\n setToolPanelOpen(true);\n }, []);\n\n // Round 2: Feature 5A — Async detail panel cache\n const detailPanelCacheRef = React.useRef<Map<string, React.ReactNode>>(new Map());\n const detailPanelLoadingRef = React.useRef<Set<string>>(new Set());\n const [detailPanelVersion, setDetailPanelVersion] = React.useState(0);\n\n // Feature 10: undo/redo history and dirty rows\n type EditHistoryEntry = { rowId: string; field: string; oldValue: unknown; newValue: unknown };\n const [_editHistory, setEditHistory] = React.useState<EditHistoryEntry[]>([]);\n const [_redoStack, setRedoStack] = React.useState<EditHistoryEntry[]>([]);\n const [internalDirtyRows, setInternalDirtyRows] = React.useState<Set<string>>(new Set());\n const dirtyRows = dirtyRowsProp ?? internalDirtyRows;\n const handleDirtyRowsChange = React.useCallback(\n (next: Set<string>) => {\n setInternalDirtyRows(next);\n onDirtyRowsChange?.(next);\n },\n [onDirtyRowsChange],\n );\n\n const hasMounted = React.useRef(false);\n React.useEffect(() => {\n hasMounted.current = true;\n }, []);\n\n // Round 2: Feature 3 — Live data flash\n const { flashedCells, newRowIds, removedRowIds } = useDataFlash(data, liveDataKey, enableLiveData);\n\n // Fire onLiveDataUpdate when flash cells detected\n React.useEffect(() => {\n if (!enableLiveData || flashedCells.size === 0) return;\n const updatedIds = new Set(flashedCells.keys());\n const updatedRows = data.filter((row) => {\n const id = String(row[liveDataKey ?? ('id' as keyof TData)] ?? '');\n return updatedIds.has(id);\n });\n if (updatedRows.length > 0) onLiveDataUpdate?.(updatedRows);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [flashedCells]);\n\n // Round 2: Feature 3 — Inject live data animation styles\n React.useEffect(() => {\n if (enableLiveData) injectLiveDataStyles();\n }, [enableLiveData]);\n\n // Round 2: Feature 5B — Inject print styles\n React.useEffect(() => {\n if (enablePrintStyles) injectPrintStyles();\n }, [enablePrintStyles]);\n\n // ── stateKey: restore persisted state from localStorage on mount ──────\n React.useEffect(() => {\n if (!stateKey) return;\n try {\n const raw = localStorage.getItem(`structyl-dt:${stateKey}`);\n if (!raw) return;\n const saved = JSON.parse(raw) as {\n sorting?: SortingState;\n columnFilters?: ColumnFiltersState;\n columnVisibility?: VisibilityState;\n columnOrder?: ColumnOrderState;\n columnSizing?: ColumnSizingState;\n pagination?: PaginationState;\n density?: DataTableDensity;\n };\n if (saved.sorting) setSorting(saved.sorting);\n if (saved.columnFilters) setColumnFilters(saved.columnFilters);\n if (saved.columnVisibility) setColumnVisibility(saved.columnVisibility);\n if (saved.columnOrder) setColumnOrder(saved.columnOrder);\n if (saved.columnSizing) setColumnSizing(saved.columnSizing);\n if (saved.pagination) setPagination(saved.pagination);\n if (saved.density) setInternalDensity(saved.density);\n } catch {\n // ignore malformed stored state\n }\n }, [stateKey]);\n\n const globalFilter = globalFilterProp ?? internalGlobalFilter;\n const advancedFilter = advancedFilterProp ?? internalAdvancedFilter;\n const rowPinning = rowPinningProp ?? internalRowPinning;\n const selectedColumnIds = columnSelectionProp ?? internalColumnSelection;\n const density = densityProp ?? internalDensity;\n const isFullscreen = fullscreenProp ?? internalFullscreen;\n\n const handleDensityChange = (next: DataTableDensity) => {\n setInternalDensity(next);\n onDensityChange?.(next);\n };\n\n const handleFullscreenToggle = React.useCallback(() => {\n const el = rootElRef.current;\n const supportsApi = typeof document !== 'undefined' && !!document.fullscreenEnabled && !!el?.requestFullscreen;\n if (supportsApi && el) {\n if (!document.fullscreenElement) {\n el.requestFullscreen().catch(() => {\n setInternalFullscreen(true);\n onFullscreenChange?.(true);\n });\n } else {\n document.exitFullscreen().catch(() => {\n setInternalFullscreen(false);\n onFullscreenChange?.(false);\n });\n }\n } else {\n // CSS fallback for browsers without Fullscreen API\n const next = !isFullscreen;\n setInternalFullscreen(next);\n onFullscreenChange?.(next);\n }\n }, [isFullscreen, onFullscreenChange]);\n\n // Sync internalFullscreen with native fullscreen API events\n React.useEffect(() => {\n if (typeof document === 'undefined') return;\n const onChange = () => {\n const isFull = !!document.fullscreenElement;\n setInternalFullscreen(isFull);\n onFullscreenChange?.(isFull);\n };\n document.addEventListener('fullscreenchange', onChange);\n return () => document.removeEventListener('fullscreenchange', onChange);\n }, [onFullscreenChange]);\n\n // Persist state changes to localStorage whenever state changes\n const persistState = React.useCallback(() => {\n if (!stateKey) return;\n try {\n localStorage.setItem(\n `structyl-dt:${stateKey}`,\n JSON.stringify({\n sorting,\n columnFilters,\n columnVisibility,\n columnOrder,\n columnSizing,\n pagination,\n density,\n }),\n );\n } catch {\n // ignore storage errors (quota, private mode)\n }\n }, [stateKey, sorting, columnFilters, columnVisibility, columnOrder, columnSizing, pagination, density]);\n\n React.useEffect(() => {\n if (hasMounted.current) persistState();\n }, [persistState]);\n\n const globalFilterFn = React.useMemo<FilterFn<TData>>(\n () => (row, columnId, filterValue) => {\n const query = normalizeSearch(filterValue);\n if (!query) return true;\n return normalizeSearch(row.getValue(columnId)).includes(query);\n },\n [],\n );\n\n const advancedFilteredData = React.useMemo(() => {\n if (!advancedFilter || serverSide) return data;\n return data.filter((row) =>\n evaluateFilterGroup(advancedFilter, row, getAdvancedFilterValue ?? getValueByPath),\n );\n }, [advancedFilter, data, getAdvancedFilterValue, serverSide]);\n\n const normalizedColumns = React.useMemo(\n () => normalizeColumnDefs(columns as DataTableColumnDef<TData, TValue>[], propLocale),\n [columns, propLocale],\n );\n\n const tableColumns = React.useMemo<DataTableColumn<TData, unknown>[]>(() => {\n const next: DataTableColumn<TData, unknown>[] = [];\n if (enableRowNumbers) {\n next.push(createRowNumberColumn<TData>(text));\n }\n if (enableRowSelection) {\n next.push(createSelectionColumn<TData>(enableRowSelection === true));\n }\n next.push(...(normalizedColumns as DataTableColumn<TData, unknown>[]));\n if (rowTotals) {\n next.push(createRowTotalColumn(rowTotals, text));\n }\n if (rowActionButtons?.length) {\n next.push(createRowActionButtonsColumn(rowActionButtons as DataTableRowActionItem[], text));\n }\n if (rowActionMenu?.length) {\n next.push(createRowActionMenuColumn(rowActionMenu as DataTableRowActionItem[], text));\n }\n if (rowActions) {\n next.push(createActionColumn(rowActions, text));\n }\n return next;\n }, [normalizedColumns, enableRowSelection, enableRowNumbers, rowActions, rowActionMenu, rowActionButtons, rowTotals, text]);\n\n const handleSorting: OnChangeFn<SortingState> = (updater) => {\n if (!hasMounted.current) return;\n const next = typeof updater === 'function' ? updater(sorting) : updater;\n setSorting(next);\n onSortingChange?.(next);\n serverSide?.onStateChange({ ...serverSide.state, sorting: next });\n };\n const handleSelection: OnChangeFn<RowSelectionState> = (updater) => {\n if (!hasMounted.current) return;\n const next = typeof updater === 'function' ? updater(rowSelection) : updater;\n setRowSelection(next);\n onRowSelectionChange?.(next);\n serverSide?.onStateChange({ ...serverSide.state, rowSelection: next });\n };\n const handlePagination: OnChangeFn<PaginationState> = (updater) => {\n if (!hasMounted.current) return;\n const next = typeof updater === 'function' ? updater(pagination) : updater;\n setPagination(next);\n serverSide?.onStateChange({ ...serverSide.state, pagination: next });\n };\n const handleFilters: OnChangeFn<ColumnFiltersState> = (updater) => {\n if (!hasMounted.current) return;\n const next = typeof updater === 'function' ? updater(columnFilters) : updater;\n setColumnFilters(next);\n serverSide?.onStateChange({ ...serverSide.state, filters: next });\n };\n const handleGlobalFilter = (next: string) => {\n if (!hasMounted.current) return;\n setInternalGlobalFilter(next);\n onGlobalFilterChange?.(next);\n serverSide?.onStateChange({ ...serverSide.state, globalFilter: next });\n };\n const handleAdvancedFilter = (next: DataTableFilterGroup | undefined) => {\n if (!hasMounted.current) return;\n setInternalAdvancedFilter(next);\n onAdvancedFilterChange?.(next);\n serverSide?.onStateChange({ ...serverSide.state, advancedFilter: next });\n };\n const handleRowPinning = (next: DataTableRowPinningState) => {\n setInternalRowPinning(next);\n onRowPinningChange?.(next);\n };\n const handleColumnSelection = (next: string[]) => {\n setInternalColumnSelection(next);\n onColumnSelectionChange?.(next);\n };\n const handleColumnOrder: OnChangeFn<ColumnOrderState> = (updater) => {\n const next = typeof updater === 'function' ? updater(columnOrder) : updater;\n setColumnOrder(next);\n onColumnOrderChange?.(next);\n };\n\n const tableRef2 = React.useRef<Table<TData> | null>(null);\n\n const handleCopyPaste = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const isCtrlOrMeta = event.ctrlKey || event.metaKey;\n\n // Ctrl+C copy\n if (enableCopyPaste && isCtrlOrMeta && event.key === 'c') {\n const t = tableRef2.current;\n if (!t) return;\n const selected = t.getFilteredSelectedRowModel().rows;\n const rowsToCopy = selected.length > 0 ? selected : t.getRowModel().rows.slice(0, 1);\n const cols = t.getVisibleLeafColumns().filter((c) => !c.id.startsWith('__'));\n const tsv = rowsToCopy\n .map((row) => cols.map((col) => String(row.getValue(col.id) ?? '')).join('\\t'))\n .join('\\n');\n navigator.clipboard?.writeText(tsv).catch(() => undefined);\n onCopy?.(rowsToCopy, tsv);\n return;\n }\n\n // Ctrl+V paste\n if (enablePaste && isCtrlOrMeta && event.key === 'v') {\n event.preventDefault();\n const t = tableRef2.current;\n if (!t) return;\n const selectedRows = t.getSelectedRowModel().rows;\n if (selectedRows.length === 0) {\n console.warn('[DataTable] enablePaste: no rows selected — paste skipped');\n return;\n }\n navigator.clipboard?.readText().then((clipText) => {\n const tsvRows = clipText.split('\\n').map((line) => line.split('\\t'));\n const visibleCols = t.getVisibleLeafColumns().filter(\n (c) => !c.id.startsWith('__') && (c.columnDef.meta as Record<string, unknown> | undefined)?._structyl && ((c.columnDef.meta as Record<string, unknown>)._structyl as Record<string, unknown>)?.valueSetter,\n );\n tsvRows.forEach((tsvCols, rowIdx) => {\n const row = selectedRows[rowIdx];\n if (!row) return;\n tsvCols.forEach((cellValue, colIdx) => {\n const col = visibleCols[colIdx];\n if (!col) return;\n const structylMeta = (col.columnDef.meta as Record<string, unknown>)?._structyl as Record<string, unknown> | undefined;\n const vs = structylMeta?.valueSetter as ((row: unknown, value: unknown, idx: number) => void) | undefined;\n if (vs) vs(row.original, cellValue, row.index);\n });\n });\n setPasteVersion((v) => v + 1);\n }).catch(() => undefined);\n return;\n }\n\n // Ctrl+Z undo\n if (enableUndoRedo && isCtrlOrMeta && event.key === 'z') {\n event.preventDefault();\n setEditHistory((prev) => {\n if (prev.length === 0) return prev;\n const last = prev[prev.length - 1];\n if (!last) return prev;\n const t = tableRef2.current;\n if (t) {\n const row = t.getRowModel().rows.find((r) => r.id === last.rowId);\n if (row) {\n const col = t.getColumn(last.field);\n if (col) {\n const structylMeta = (col.columnDef.meta as Record<string, unknown>)?._structyl as Record<string, unknown> | undefined;\n const vs = structylMeta?.valueSetter as ((row: unknown, value: unknown, idx: number) => void) | undefined;\n if (vs) vs(row.original, last.oldValue, row.index);\n }\n }\n }\n setRedoStack((redo) => [...redo, last]);\n // Update dirty rows\n const remaining = prev.slice(0, -1);\n const stillDirty = new Set(remaining.map((e) => e.rowId));\n if (!stillDirty.has(last.rowId)) {\n const next = new Set(dirtyRows);\n next.delete(last.rowId);\n handleDirtyRowsChange(next);\n }\n return remaining;\n });\n return;\n }\n\n // Ctrl+Y redo\n if (enableUndoRedo && isCtrlOrMeta && event.key === 'y') {\n event.preventDefault();\n setRedoStack((prev) => {\n if (prev.length === 0) return prev;\n const last = prev[prev.length - 1];\n if (!last) return prev;\n const t = tableRef2.current;\n if (t) {\n const row = t.getRowModel().rows.find((r) => r.id === last.rowId);\n if (row) {\n const col = t.getColumn(last.field);\n if (col) {\n const structylMeta = (col.columnDef.meta as Record<string, unknown>)?._structyl as Record<string, unknown> | undefined;\n const vs = structylMeta?.valueSetter as ((row: unknown, value: unknown, idx: number) => void) | undefined;\n if (vs) vs(row.original, last.newValue, row.index);\n }\n }\n }\n setEditHistory((history) => [...history, last]);\n const next = new Set(dirtyRows);\n next.add(last.rowId);\n handleDirtyRowsChange(next);\n return prev.slice(0, -1);\n });\n return;\n }\n },\n [enableCopyPaste, onCopy, enablePaste, enableUndoRedo, dirtyRows, handleDirtyRowsChange],\n );\n\n const table = useReactTable({\n data: advancedFilteredData,\n columns: tableColumns,\n state: {\n sorting,\n columnFilters,\n globalFilter,\n columnVisibility,\n rowSelection,\n expanded,\n grouping,\n columnSizing,\n columnOrder,\n columnPinning,\n pagination,\n },\n enableRowSelection: enableRowSelection !== false,\n enableMultiRowSelection: enableRowSelection === true,\n enableSorting,\n enableFilters: enableFiltering || enableAdvancedFiltering || enableGlobalSearch,\n enableGlobalFilter: enableGlobalSearch,\n enableExpanding: enableExpanding || !!renderDetailPanel || treeData,\n enableGrouping,\n enableColumnResizing,\n enableColumnPinning,\n columnResizeMode: 'onChange',\n manualPagination: !!serverSide,\n manualSorting: !!serverSide,\n manualFiltering: !!serverSide,\n rowCount: serverSide?.rowCount,\n globalFilterFn,\n getRowId,\n getSubRows,\n onSortingChange: handleSorting,\n onColumnFiltersChange: handleFilters,\n onGlobalFilterChange: handleGlobalFilter,\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: handleSelection,\n onExpandedChange: setExpanded,\n onGroupingChange: setGrouping,\n onColumnSizingChange: setColumnSizing,\n onColumnOrderChange: handleColumnOrder,\n onColumnPinningChange: setColumnPinning,\n onPaginationChange: handlePagination,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: enableSorting && !serverSide ? getSortedRowModel() : undefined,\n getFilteredRowModel:\n (enableFiltering || enableGlobalSearch) && !serverSide ? getFilteredRowModel() : undefined,\n getPaginationRowModel: enablePagination && !serverSide ? getPaginationRowModel() : undefined,\n getExpandedRowModel:\n enableExpanding || renderDetailPanel || treeData ? getExpandedRowModel() : undefined,\n getGroupedRowModel: enableGrouping ? getGroupedRowModel() : undefined,\n getFacetedRowModel: enableFiltering ? getFacetedRowModel() : undefined,\n getFacetedUniqueValues: enableFiltering ? getFacetedUniqueValues() : undefined,\n });\n\n React.useEffect(() => {\n tableRef2.current = table;\n if (tableRef) tableRef.current = table;\n }, [table, tableRef]);\n\n // Round 3: Feature 5 — Validation errors map\n const validationErrors = React.useMemo<Map<string, Map<string, string>>>(() => {\n const map = new Map<string, Map<string, string>>();\n if (!enableValidation) return map;\n const rows = table.getFilteredRowModel().rows;\n for (const row of rows) {\n for (const cell of row.getVisibleCells()) {\n const structylMeta = getStructylMeta(cell.column);\n const dv = (structylMeta as StructylColumnMeta & { displayValidate?: (v: unknown, r: unknown) => string | undefined }).displayValidate;\n if (!dv) continue;\n const cellValue = cell.getValue();\n const msg = dv(cellValue, row.original);\n if (msg) {\n if (!map.has(row.id)) map.set(row.id, new Map());\n map.get(row.id)!.set(cell.column.id, msg);\n }\n }\n }\n return map;\n }, [enableValidation, table.getFilteredRowModel().rows]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Fire onValidationChange whenever errors change\n React.useEffect(() => {\n if (!enableValidation) return;\n const errors: DataTableValidationError[] = [];\n for (const [rowId, fieldMap] of validationErrors.entries()) {\n for (const [field, message] of fieldMap.entries()) {\n const row = table.getRow(rowId);\n errors.push({ rowId, field, value: row ? row.getValue(field) : undefined, message });\n }\n }\n onValidationChange?.(errors);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [validationErrors]);\n\n // Feature 8: keyboard shortcuts modal — listen for '?' on document\n React.useEffect(() => {\n if (!enableKeyboardShortcuts) return;\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === '?' && !event.ctrlKey && !event.metaKey && !event.altKey) {\n const tag = (event.target as HTMLElement)?.tagName?.toLowerCase();\n if (tag === 'input' || tag === 'textarea') return;\n event.preventDefault();\n setShortcutsOpen((prev) => !prev);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [enableKeyboardShortcuts]);\n\n const tableContainerRef = React.useRef<HTMLDivElement>(null);\n const [overlayBoundary, setOverlayBoundary] = React.useState<HTMLDivElement | null>(null);\n const rootElRef = React.useRef<HTMLDivElement | null>(null);\n const handleRootRef = React.useCallback((node: HTMLDivElement | null) => {\n rootElRef.current = node;\n setOverlayBoundary(node);\n }, []);\n const allRows = table.getRowModel().rows;\n const pinnedRows = splitPinnedRows(allRows, rowPinning);\n const scrollRows = pinnedRows.center;\n const isVirtual = !!virtual;\n const rowVirtualOpts = typeof virtual === 'object' && virtual !== null ? virtual : {};\n const rowVirtualizer = useVirtualizer({\n count: scrollRows.length,\n estimateSize: (index) => {\n const row = scrollRows[index];\n return (row ? getRowHeight?.(row) : undefined) ?? rowVirtualOpts.estimatedRowHeight ?? 44;\n },\n getScrollElement: () => tableContainerRef.current,\n overscan: rowVirtualOpts.overscan ?? 10,\n enabled: isVirtual,\n });\n const virtualRows = isVirtual ? rowVirtualizer.getVirtualItems() : [];\n const fallbackVirtualRows =\n isVirtual && virtualRows.length === 0\n ? scrollRows.slice(0, Math.min(scrollRows.length, Math.max(1, rowVirtualOpts.overscan ?? 10)))\n : [];\n const paddingTop = isVirtual && virtualRows.length > 0 ? (virtualRows[0]?.start ?? 0) : 0;\n const paddingBottom =\n isVirtual && virtualRows.length > 0\n ? rowVirtualizer.getTotalSize() - (virtualRows[virtualRows.length - 1]?.end ?? 0)\n : 0;\n\n const leafColumns = table.getVisibleLeafColumns();\n const isColumnVirtual = !!virtualColumns;\n const columnVirtualOpts =\n typeof virtualColumns === 'object' && virtualColumns !== null ? virtualColumns : {};\n const columnVirtualizer = useVirtualizer({\n count: leafColumns.length,\n estimateSize: (index) =>\n leafColumns[index]?.getSize() ?? columnVirtualOpts.estimatedColumnWidth ?? 160,\n getScrollElement: () => tableContainerRef.current,\n horizontal: true,\n overscan: columnVirtualOpts.overscan ?? 4,\n enabled: isColumnVirtual,\n });\n const virtualColumnItems = isColumnVirtual ? columnVirtualizer.getVirtualItems() : [];\n const fallbackColumnCount = Math.min(\n leafColumns.length,\n Math.max(1, (columnVirtualOpts.overscan ?? 4) * 2 + 4),\n );\n const renderedColumns = isColumnVirtual\n ? virtualColumnItems.length > 0\n ? virtualColumnItems.map((item) => leafColumns[item.index]).filter(isDefined)\n : leafColumns.slice(0, fallbackColumnCount)\n : leafColumns;\n const renderedColumnIds = new Set(renderedColumns.map((column) => column.id));\n const columnPaddingLeft =\n isColumnVirtual && virtualColumnItems.length > 0 ? (virtualColumnItems[0]?.start ?? 0) : 0;\n const columnPaddingRight =\n isColumnVirtual && virtualColumnItems.length > 0\n ? columnVirtualizer.getTotalSize() -\n (virtualColumnItems[virtualColumnItems.length - 1]?.end ?? 0)\n : 0;\n const colSpan = Math.max(\n renderedColumns.length + (columnPaddingLeft ? 1 : 0) + (columnPaddingRight ? 1 : 0),\n 1,\n );\n const showToolbar =\n enableGlobalSearch ||\n enableAdvancedFiltering ||\n enableColumnConfiguration ||\n toolbar ||\n toolbarStart ||\n toolbarEnd ||\n (toolbarActions && toolbarActions.length > 0) ||\n enableDensityToggle ||\n treeData ||\n onRefresh ||\n enableKeyboardShortcuts ||\n enableExport ||\n enableConditionalFormatting ||\n enableFullscreen ||\n onPrint ||\n enablePivot ||\n enableSavedViews;\n\n const densityCellClass =\n density === 'compact' ? 'py-1 px-2' : density === 'comfortable' ? 'py-4 px-4' : 'p-3';\n\n const containerStyle: React.CSSProperties = {\n height: fullHeight ? '100%' : height,\n maxHeight: autoHeight ? undefined : (maxHeight ?? (isVirtual ? 600 : undefined)),\n };\n\n const handleScroll = React.useCallback(\n (event: React.UIEvent<HTMLDivElement>) => {\n if (!onLoadMore || !hasMore || loadingMore) return;\n const element = event.currentTarget;\n const remaining = element.scrollHeight - element.scrollTop - element.clientHeight;\n if (remaining <= loadMoreThreshold) onLoadMore();\n },\n [hasMore, loadMoreThreshold, loadingMore, onLoadMore],\n );\n\n const pinRow = (rowId: string, position: 'top' | 'bottom' | false) => {\n const top = new Set(rowPinning.top ?? []);\n const bottom = new Set(rowPinning.bottom ?? []);\n top.delete(rowId);\n bottom.delete(rowId);\n if (position === 'top') top.add(rowId);\n if (position === 'bottom') bottom.add(rowId);\n handleRowPinning({ top: Array.from(top), bottom: Array.from(bottom) });\n };\n\n const rowStatusBorderColor: Record<string, string> = {\n success: '#22c55e',\n warning: '#f59e0b',\n error: '#ef4444',\n info: '#3b82f6',\n };\n\n // Normalized cell selection (start ≤ end)\n const normalizedCellSelection = React.useMemo<DataTableCellSelection | null>(() => {\n if (!cellSelection) return null;\n return {\n startRowIndex: Math.min(cellSelection.startRowIndex, cellSelection.endRowIndex),\n startColIndex: Math.min(cellSelection.startColIndex, cellSelection.endColIndex),\n endRowIndex: Math.max(cellSelection.startRowIndex, cellSelection.endRowIndex),\n endColIndex: Math.max(cellSelection.startColIndex, cellSelection.endColIndex),\n };\n }, [cellSelection]);\n\n const isCellSelected = React.useCallback(\n (rowIndex: number, colIndex: number): boolean => {\n if (!normalizedCellSelection) return false;\n return (\n rowIndex >= normalizedCellSelection.startRowIndex &&\n rowIndex <= normalizedCellSelection.endRowIndex &&\n colIndex >= normalizedCellSelection.startColIndex &&\n colIndex <= normalizedCellSelection.endColIndex\n );\n },\n [normalizedCellSelection],\n );\n\n const renderDataRow = (row: Row<TData>, rowIndex: number) => {\n const rowIsPinnedTop = rowPinning.top?.includes(row.id) ?? false;\n const rowIsPinnedBottom = rowPinning.bottom?.includes(row.id) ?? false;\n const isRowLoading = loadingRowIds?.includes(row.id) ?? false;\n const rowStatus = getRowStatus?.(row);\n const isDirty = dirtyRows.has(row.id);\n const isNewRow = enableLiveData && newRowIds.has(row.id);\n const isRemovedRow = enableLiveData && removedRowIds.has(row.id);\n const computedRowHeight = rowHeight != null\n ? typeof rowHeight === 'function' ? rowHeight(row, rowIndex) : rowHeight\n : undefined;\n const rowStyle: React.CSSProperties = {\n ...(getRowStyle?.(row)),\n borderLeft: rowStatus\n ? `3px solid ${rowStatusBorderColor[rowStatus] ?? 'transparent'}`\n : isDirty\n ? '3px solid #f59e0b'\n : undefined,\n height: computedRowHeight,\n };\n\n // Async detail panel loader\n const resolveDetailContent = (): React.ReactNode => {\n if (loadDetailPanel) {\n const cache = detailPanelCacheRef.current;\n if (cache.has(row.id)) return cache.get(row.id);\n if (!detailPanelLoadingRef.current.has(row.id)) {\n detailPanelLoadingRef.current.add(row.id);\n loadDetailPanel(row).then((content) => {\n // LRU eviction\n if (cache.size >= detailPanelCacheSize) {\n const firstKey = cache.keys().next().value;\n if (firstKey !== undefined) cache.delete(firstKey);\n }\n cache.set(row.id, content);\n detailPanelLoadingRef.current.delete(row.id);\n setDetailPanelVersion((v) => v + 1);\n }).catch(() => {\n detailPanelLoadingRef.current.delete(row.id);\n });\n }\n return (\n <span className=\"text-muted-foreground inline-flex items-center gap-2 text-sm\">\n <span className=\"border-primary h-4 w-4 animate-spin rounded-full border-2 border-t-transparent\" />\n Loading…\n </span>\n );\n }\n return renderDetailPanel?.(row);\n };\n\n const rowValidationErrors = enableValidation ? (validationErrors.get(row.id) ?? new Map<string, string>()) : new Map<string, string>();\n\n return (\n <React.Fragment key={row.id}>\n <tr\n role=\"row\"\n aria-rowindex={rowIndex + 2}\n aria-selected={enableRowSelection !== false ? row.getIsSelected() : undefined}\n data-state={row.getIsSelected() ? 'selected' : undefined}\n data-pinned={rowIsPinnedTop ? 'top' : rowIsPinnedBottom ? 'bottom' : undefined}\n data-loading={isRowLoading || undefined}\n data-new-row={isNewRow || undefined}\n data-removed-row={isRemovedRow || undefined}\n draggable={enableRowReordering}\n onContextMenu={onRowContextMenu ? (event) => { event.preventDefault(); onRowContextMenu(row, event); } : undefined}\n onDragStart={(event) => {\n if (!enableRowReordering) return;\n setDraggedRowId(row.id);\n event.dataTransfer.effectAllowed = 'move';\n }}\n onDragOver={(event) => {\n if (enableRowReordering) event.preventDefault();\n }}\n onDrop={(event) => {\n if (!enableRowReordering || !draggedRowId) return;\n event.preventDefault();\n const nextRows = reorderRows(scrollRows, draggedRowId, row.id);\n onRowOrderChange?.(\n nextRows.map((item) => item.original),\n nextRows.map((item) => item.id),\n );\n setDraggedRowId(null);\n }}\n style={rowStyle}\n className={cn(\n 'border-border hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors',\n striped && rowIndex % 2 !== 0 && 'bg-muted/30',\n rowIsPinnedTop && 'bg-bg shadow-sm',\n rowIsPinnedBottom && 'bg-bg shadow-sm',\n enableRowReordering && 'cursor-grab active:cursor-grabbing',\n isRowLoading && 'opacity-60 pointer-events-none',\n getRowClassName?.(row),\n )}\n >\n {columnPaddingLeft > 0 ? <td style={{ width: columnPaddingLeft }} /> : null}\n {renderRowCells({\n row,\n rowIndex,\n renderedColumnIds,\n enableExpanding,\n renderDetailPanel,\n getCellColSpan,\n getCellRowSpan,\n enableRowPinning,\n pinRow,\n text,\n overlayBoundary,\n treeData,\n densityCellClass,\n enableRowCopy,\n getCellClassName: getCellClassName as unknown as ((cell: Cell<TData, unknown>, row: Row<TData>) => string | undefined) | undefined,\n enableCellTooltip,\n onCellContextMenu: onCellContextMenu as unknown as ((cell: Cell<TData, unknown>, row: Row<TData>, event: React.MouseEvent) => void) | undefined,\n conditionalFormattingRules,\n enableCellSelection,\n isCellSelected,\n isSelectingCells,\n onCellMouseDown: enableCellSelection ? (ri, ci) => {\n handleCellSelectionChange({ startRowIndex: ri, startColIndex: ci, endRowIndex: ri, endColIndex: ci });\n setIsSelectingCells(true);\n } : undefined,\n onCellMouseEnter: enableCellSelection ? (ri, ci) => {\n if (!isSelectingCells) return;\n setCellSelection((prev) => prev ? { ...prev, endRowIndex: ri, endColIndex: ci } : prev);\n } : undefined,\n flashedCells: enableLiveData ? flashedCells.get(row.id) : undefined,\n onViewStats: enableToolPanel ? handleViewStats : undefined,\n rowValidationErrors,\n })}\n {columnPaddingRight > 0 ? <td style={{ width: columnPaddingRight }} /> : null}\n </tr>\n {(renderDetailPanel || loadDetailPanel) && row.getIsExpanded() ? (\n <tr className=\"border-border bg-muted/20 border-b\">\n <td colSpan={colSpan} className=\"p-4\">\n {/* detailPanelVersion triggers re-render when async content loads */}\n {detailPanelVersion >= 0 ? resolveDetailContent() : null}\n </td>\n </tr>\n ) : null}\n </React.Fragment>\n );\n };\n\n // Unique id for the tbody element (for aria-controls on search)\n const tbodyId = React.useId();\n const tbodyIdAttr = tbodyId ? `datatable-tbody-${tbodyId.replace(/:/g, '')}` : undefined;\n\n // Round 3: Feature 1 — if pivot is active, render pivot view instead\n if (enablePivot && pivotConfig) {\n return (\n <DataTablePivotView\n data={data as unknown[]}\n pivotConfig={pivotConfig}\n columns={columns as DataTableColumnDef<unknown, unknown>[]}\n className={className}\n onClearPivot={() => {\n setInternalPivotConfig(undefined);\n onPivotConfigChange?.({ rowGroupField: '', pivotField: '', valueField: '', aggregation: 'sum' });\n }}\n />\n );\n }\n\n return (\n <div\n ref={handleRootRef}\n data-datatable-root=\"\"\n data-fullscreen={isFullscreen || undefined}\n dir={dir}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n tabIndex={(enableCopyPaste || enablePaste || enableUndoRedo) ? -1 : undefined}\n onKeyDown={(enableCopyPaste || enablePaste || enableUndoRedo) ? handleCopyPaste : undefined}\n className={cn(\n 'relative isolate flex w-full min-w-0 flex-col rounded-lg border border-border',\n isFullscreen ? 'overflow-auto' : 'overflow-hidden',\n fullHeight && 'h-full',\n isFullscreen && 'fixed inset-0 z-50 bg-bg h-screen w-screen rounded-none border-none',\n '[&:fullscreen]:bg-bg [&:fullscreen]:overflow-auto [&:fullscreen]:p-4 [&:fullscreen]:border-none',\n mobileBreakpoint === 'sm' && 'sm:[display:revert]',\n mobileBreakpoint === 'md' && 'md:[display:revert]',\n className,\n )}\n >\n {showToolbar ? (\n slots?.Toolbar ? (\n <slots.Toolbar table={table} localeText={text} />\n ) : (\n <div className=\"data-table-toolbar relative flex flex-wrap items-center justify-between gap-2 border-b border-border px-3 py-2\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {enableGlobalSearch ? (\n slots?.Search ? (\n <slots.Search\n value={globalFilter}\n onValueChange={handleGlobalFilter}\n placeholder={globalFilterPlaceholder ?? text.searchPlaceholder}\n />\n ) : (\n <DataTableGlobalSearch\n value={globalFilter}\n onValueChange={handleGlobalFilter}\n placeholder={globalFilterPlaceholder ?? text.searchPlaceholder}\n />\n )\n ) : null}\n {enableAdvancedFiltering ? (\n slots?.Filter ? (\n <slots.Filter\n table={table}\n filter={advancedFilter}\n onFilterChange={handleAdvancedFilter}\n localeText={text}\n overlayBoundary={overlayBoundary}\n />\n ) : (\n <DataTableAdvancedFilter\n table={table}\n filter={advancedFilter}\n onFilterChange={handleAdvancedFilter}\n localeText={text}\n overlayBoundary={overlayBoundary}\n />\n )\n ) : null}\n {toolbarStart}\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n {typeof toolbar === 'function' ? toolbar(table) : toolbar}\n {treeData ? (\n <>\n <DataTableToolbarButton\n tooltip={text.expandAll}\n onClick={() => table.toggleAllRowsExpanded(true)}\n aria-label={text.expandAll}\n >\n <ChevronsDown className=\"mr-1.5 size-4\" />{text.expandAll}\n </DataTableToolbarButton>\n <DataTableToolbarButton\n tooltip={text.collapseAll}\n onClick={() => table.toggleAllRowsExpanded(false)}\n aria-label={text.collapseAll}\n >\n <ChevronsUpDown className=\"mr-1.5 size-4\" />{text.collapseAll}\n </DataTableToolbarButton>\n </>\n ) : null}\n {toolbarActions?.map((action) =>\n action.render ? (\n <React.Fragment key={action.id}>\n {action.render(table as Table<TData>)}\n </React.Fragment>\n ) : (\n <DataTableToolbarButton\n key={action.id}\n tooltip={action.tooltip}\n disabled={action.disabled}\n onClick={() => action.onClick?.(table as Table<TData>)}\n aria-label={typeof action.label === 'string' ? action.label : action.id}\n >\n {action.icon ?? action.label}\n </DataTableToolbarButton>\n ),\n )}\n {enableDensityToggle ? (\n <DataTableDensityMenu\n density={density}\n onDensityChange={handleDensityChange}\n localeText={text}\n overlayBoundary={overlayBoundary}\n />\n ) : null}\n {enableExport ? (\n <DataTableExportMenu\n table={table as unknown as Table<unknown>}\n localeText={text}\n overlayBoundary={overlayBoundary}\n options={typeof enableExport === 'object' ? enableExport : { csv: true, json: true, selectedCsv: true, xlsx: true }}\n />\n ) : null}\n {enableConditionalFormatting ? (\n <DataTableToolbarButton\n tooltip={text.conditionalFormatting ?? 'Conditional formatting'}\n onClick={() => handleOpenCfDrawer()}\n aria-label={text.conditionalFormatting ?? 'Conditional formatting'}\n >\n <Filter className=\"mr-1.5 size-4\" />Format\n </DataTableToolbarButton>\n ) : null}\n {enablePivot ? (\n <>\n <DataTableToolbarButton\n tooltip=\"Pivot mode\"\n onClick={() => setPivotDrawerOpen(true)}\n aria-label=\"Pivot mode\"\n >\n <GitBranch className=\"mr-1.5 size-4\" />Pivot\n </DataTableToolbarButton>\n {pivotConfig ? (\n <span className=\"bg-primary/10 text-primary border-primary/30 inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium\">\n Pivot active\n <button\n type=\"button\"\n aria-label=\"Clear pivot\"\n className=\"hover:text-destructive ml-0.5 leading-none\"\n onClick={() => {\n setInternalPivotConfig(undefined);\n onPivotConfigChange?.({ rowGroupField: '', pivotField: '', valueField: '', aggregation: 'sum' });\n }}\n >×</button>\n </span>\n ) : null}\n </>\n ) : null}\n {enableSavedViews ? (\n <DataTableToolbarButton\n tooltip=\"Saved views\"\n onClick={() => setSavedViewsDrawerOpen(true)}\n aria-label=\"Saved views\"\n >\n <Bookmark className=\"mr-1.5 size-4\" />Views\n </DataTableToolbarButton>\n ) : null}\n {onRefresh ? (\n <DataTableToolbarButton\n tooltip={text.refresh}\n onClick={onRefresh}\n aria-label={text.refresh}\n >\n <RefreshCw className=\"mr-1.5 size-4\" />{text.refresh}\n </DataTableToolbarButton>\n ) : null}\n {onPrint ? (\n <DataTableToolbarButton\n tooltip={text.printTitle}\n onClick={() => {\n onPrint?.();\n const cleanup = applyPrintTheme();\n window.print();\n window.addEventListener('afterprint', cleanup, { once: true });\n }}\n aria-label={text.printTitle}\n >\n <Printer className=\"mr-1.5 size-4\" />{text.printTitle}\n </DataTableToolbarButton>\n ) : null}\n {enableFullscreen ? (\n <DataTableToolbarButton\n tooltip={isFullscreen ? text.exitFullscreen : text.enterFullscreen}\n onClick={handleFullscreenToggle}\n aria-label={isFullscreen ? text.exitFullscreen : text.enterFullscreen}\n >\n {isFullscreen\n ? <><Minimize2 className=\"mr-1.5 size-4\" />{text.exitFullscreen}</>\n : <><Maximize2 className=\"mr-1.5 size-4\" />{text.enterFullscreen}</>}\n </DataTableToolbarButton>\n ) : null}\n {enableColumnConfiguration ? (\n <DataTableColumnConfiguration\n table={table}\n selectedColumnIds={selectedColumnIds}\n onSelectedColumnIdsChange={handleColumnSelection}\n localeText={text}\n enableColumnSelection={enableColumnSelection}\n enableGrouping={enableGrouping}\n enableColumnPinning={enableColumnPinning}\n overlayBoundary={overlayBoundary}\n />\n ) : null}\n {enableKeyboardShortcuts ? (\n <DataTableToolbarButton\n tooltip=\"Keyboard shortcuts\"\n onClick={() => setShortcutsOpen(true)}\n aria-label=\"Keyboard shortcuts\"\n >\n <HelpCircle className=\"mr-1.5 size-4\" />Shortcuts\n </DataTableToolbarButton>\n ) : null}\n {toolbarEnd}\n </div>\n </div>\n )\n ) : null}\n\n {bulkActions && bulkActions.length > 0 && table.getFilteredSelectedRowModel().rows.length > 0 ? (\n <DataTableBulkActionsBar\n table={table as unknown as Table<unknown>}\n actions={bulkActions as DataTableBulkAction[]}\n localeText={text}\n />\n ) : null}\n\n {/* Round 2: Feature 1 — Cell Selection Bulk Edit Bar */}\n {enableCellSelection && normalizedCellSelection && (() => {\n const rowSpan = normalizedCellSelection.endRowIndex - normalizedCellSelection.startRowIndex + 1;\n const colSpan2 = normalizedCellSelection.endColIndex - normalizedCellSelection.startColIndex + 1;\n const totalCells = rowSpan * colSpan2;\n if (totalCells <= 1) return null;\n return (\n <div className=\"bg-primary/10 border-primary/30 flex flex-wrap items-center gap-3 rounded-md border px-3 py-2 text-sm\">\n <span className=\"text-primary font-medium\">\n {totalCells} cells selected across {rowSpan} rows\n </span>\n <div className=\"flex items-center gap-2\">\n <Input\n value={bulkEditValue}\n onChange={(e) => setBulkEditValue(e.target.value)}\n placeholder=\"Set all to…\"\n className=\"h-7 w-36 text-xs\"\n />\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={() => {\n const visibleLeafCols = table.getVisibleLeafColumns();\n const rowModel = table.getRowModel().rows;\n for (let ri = normalizedCellSelection.startRowIndex; ri <= normalizedCellSelection.endRowIndex; ri++) {\n const row = rowModel[ri];\n if (!row) continue;\n for (let ci = normalizedCellSelection.startColIndex; ci <= normalizedCellSelection.endColIndex; ci++) {\n const col = visibleLeafCols[ci];\n if (!col) continue;\n const structylMeta = getStructylMeta(col);\n if (structylMeta.valueSetter) {\n structylMeta.valueSetter(row.original, bulkEditValue, ri);\n }\n }\n }\n setBulkEditValue('');\n }}\n >\n Apply\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={() => handleCellSelectionChange(null)}\n >\n Clear\n </Button>\n </div>\n </div>\n );\n })()}\n\n {/* Feature 5: Active filter chips */}\n {enableFilterChips && table.getState().columnFilters.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-2 border-b border-border px-3 pb-2 pt-1.5\">\n {table.getState().columnFilters.map((filter) => {\n const col = table.getColumn(filter.id);\n const label = col\n ? typeof col.columnDef.header === 'string'\n ? col.columnDef.header\n : filter.id\n : filter.id;\n return (\n <span\n key={filter.id}\n className=\"border-border bg-muted inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs\"\n >\n <span className=\"font-medium\">{label}:</span>\n <span>{String(filter.value ?? '')}</span>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground ml-0.5 leading-none\"\n aria-label={`Remove ${label} filter`}\n onClick={() => col?.setFilterValue(undefined)}\n >\n ×\n </button>\n </span>\n );\n })}\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2 text-xs\"\n onClick={() => table.resetColumnFilters()}\n >\n Clear filters\n </Button>\n </div>\n ) : null}\n\n {mobileBreakpoint ? (\n <DataTableCardView\n table={table as unknown as Table<unknown>}\n breakpoint={mobileBreakpoint}\n allRows={allRows as Row<unknown>[]}\n />\n ) : null}\n\n {/* Round 2: Feature 2 — Tool Panel wrapper */}\n <div className={cn('flex min-h-0 min-w-0', enableToolPanel && 'flex-1 gap-0', fullHeight && 'flex-1')}>\n <div\n ref={tableContainerRef}\n onScroll={handleScroll}\n style={containerStyle}\n className={cn(\n 'min-w-0',\n !autoHeight && 'overflow-auto',\n fullHeight && 'min-h-0 flex-1',\n enableToolPanel && 'flex-1',\n mobileBreakpoint === 'sm' && 'hidden sm:block',\n mobileBreakpoint === 'md' && 'hidden md:block',\n mobileBreakpoint === 'lg' && 'hidden lg:block',\n tableClassName,\n )}\n >\n {/* Feature 3 ARIA: aria-rowcount, aria-colcount */}\n <table\n className=\"w-full caption-bottom text-sm\"\n role=\"grid\"\n aria-rowcount={serverSide ? serverSide.rowCount : table.getFilteredRowModel().rows.length + 1}\n aria-colcount={table.getVisibleLeafColumns().length}\n >\n <thead className=\"bg-bg [&_tr]:border-border sticky top-0 z-20 [&_tr]:border-b\">\n {isColumnVirtual ? (\n <tr role=\"row\" aria-rowindex={1} className=\"hover:bg-muted/50\">\n {columnPaddingLeft > 0 ? <th style={{ width: columnPaddingLeft }} /> : null}\n {renderedColumns.map((column, colIdx) => (\n <DataTableLeafHeader\n key={column.id}\n column={column}\n colIndex={colIdx}\n table={table}\n enableSorting={enableSorting}\n enableColumnResizing={enableColumnResizing}\n enableColumnReordering={enableColumnReordering}\n enableColumnPinning={enableColumnPinning}\n enableGrouping={enableGrouping}\n enableColumnSelection={enableColumnSelection}\n selectedColumnIds={selectedColumnIds}\n onSelectedColumnIdsChange={handleColumnSelection}\n draggedColumnId={draggedColumnId}\n onDraggedColumnIdChange={setDraggedColumnId}\n onColumnOrderChange={handleColumnOrder}\n localeText={text}\n overlayBoundary={overlayBoundary}\n CustomColumnMenu={slots?.ColumnMenu}\n enableColumnCopy={enableColumnCopy}\n enableColumnAutoSize={enableColumnAutoSize}\n lockedColumns={lockedColumns}\n onLockedColumnsChange={handleLockedColumnsChange}\n quickFilterColumns={quickFilterColumns}\n onOpenConditionalFormatting={enableConditionalFormatting ? handleOpenCfDrawer : undefined}\n onViewStats={enableToolPanel ? handleViewStats : undefined}\n />\n ))}\n {columnPaddingRight > 0 ? <th style={{ width: columnPaddingRight }} /> : null}\n </tr>\n ) : (\n table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id} role=\"row\" aria-rowindex={1} className=\"hover:bg-muted/50\">\n {headerGroup.headers.map((header, colIdx) => (\n <DataTableHeader\n key={header.id}\n header={header}\n colIndex={colIdx}\n table={table}\n enableSorting={enableSorting}\n enableColumnResizing={enableColumnResizing}\n enableColumnReordering={enableColumnReordering}\n enableColumnPinning={enableColumnPinning}\n enableGrouping={enableGrouping}\n enableColumnSelection={enableColumnSelection}\n selectedColumnIds={selectedColumnIds}\n onSelectedColumnIdsChange={handleColumnSelection}\n draggedColumnId={draggedColumnId}\n onDraggedColumnIdChange={setDraggedColumnId}\n onColumnOrderChange={handleColumnOrder}\n localeText={text}\n overlayBoundary={overlayBoundary}\n CustomColumnMenu={slots?.ColumnMenu}\n enableColumnCopy={enableColumnCopy}\n enableColumnAutoSize={enableColumnAutoSize}\n lockedColumns={lockedColumns}\n onLockedColumnsChange={handleLockedColumnsChange}\n quickFilterColumns={quickFilterColumns}\n onOpenConditionalFormatting={enableConditionalFormatting ? handleOpenCfDrawer : undefined}\n onViewStats={enableToolPanel ? handleViewStats : undefined}\n />\n ))}\n </tr>\n ))\n )}\n {/* Feature 4: Header stats row */}\n {enableHeaderStats ? (\n <DataTableHeaderStatsRow\n table={table as unknown as Table<unknown>}\n renderedColumnIds={renderedColumnIds}\n columnPaddingLeft={columnPaddingLeft}\n columnPaddingRight={columnPaddingRight}\n headerStatsConfig={headerStatsConfig}\n />\n ) : null}\n </thead>\n <tbody id={tbodyIdAttr} className=\"[&_tr:last-child]:border-0\">\n {error ? (\n <tr>\n <td colSpan={colSpan} className=\"text-destructive h-24 text-center\">\n {error}\n </td>\n </tr>\n ) : loading ? (\n renderLoadingRows({\n colSpan,\n columns: renderedColumns.length,\n variant: loadingVariant,\n rows: skeletonRows,\n text,\n LoadingSkeleton: slots?.LoadingSkeleton,\n LoadingOverlay: slots?.LoadingOverlay,\n })\n ) : allRows.length === 0 ? (\n <tr>\n <td colSpan={colSpan} className=\"h-24 text-center\">\n {data.length === 0\n ? slots?.NoRowsOverlay\n ? <slots.NoRowsOverlay />\n : (noRowsOverlay ?? emptyState ?? (\n <span className=\"text-muted-foreground\">{text.noRows}</span>\n ))\n : slots?.NoResultsOverlay\n ? <slots.NoResultsOverlay />\n : (noResultsOverlay ?? emptyState ?? (\n <span className=\"text-muted-foreground\">{text.noResults}</span>\n ))}\n </td>\n </tr>\n ) : (\n <>\n {inlineCreateRow ? (\n <DataTableInlineCreateRow\n createRow={inlineCreateRow}\n colSpan={colSpan}\n localeText={text}\n />\n ) : null}\n {pinnedRows.top.map((row, i) => renderDataRow(row, i))}\n {isVirtual ? (\n virtualRows.length > 0 ? (\n <>\n {paddingTop > 0 ? (\n <tr>\n <td style={{ height: paddingTop }} colSpan={colSpan} />\n </tr>\n ) : null}\n {virtualRows.map((virtualRow) => {\n const row = scrollRows[virtualRow.index];\n return row ? renderDataRow(row, virtualRow.index) : null;\n })}\n {paddingBottom > 0 ? (\n <tr>\n <td style={{ height: paddingBottom }} colSpan={colSpan} />\n </tr>\n ) : null}\n </>\n ) : (\n fallbackVirtualRows.map((row, i) => renderDataRow(row, i))\n )\n ) : (\n scrollRows.map((row, i) => renderDataRow(row, i))\n )}\n {pinnedRows.bottom.map((row, i) => renderDataRow(row, scrollRows.length + i))}\n {loadingMore ? (\n <tr>\n <td colSpan={colSpan} className=\"text-muted-foreground h-12 text-center\">\n {text.loadingMore}\n </td>\n </tr>\n ) : null}\n </>\n )}\n </tbody>\n {showColumnTotals && aggregations ? (\n <DataTableFooter\n table={table}\n aggregations={aggregations}\n renderedColumnIds={renderedColumnIds}\n columnPaddingLeft={columnPaddingLeft}\n columnPaddingRight={columnPaddingRight}\n localeText={text}\n />\n ) : null}\n </table>\n </div>\n\n {/* Round 2: Feature 2 — Tool Panel */}\n {enableToolPanel ? (\n <DataTableToolPanel\n table={table as unknown as Table<unknown>}\n open={toolPanelOpen}\n tab={toolPanelTab}\n onTabChange={setToolPanelTab}\n onOpenChange={setToolPanelOpen}\n statsColumnId={statsColumnId}\n onStatsColumnChange={setStatsColumnId}\n />\n ) : null}\n </div>{/* end tool panel wrapper */}\n\n {enablePagination ? (\n <div className=\"data-table-pagination border-t border-border\">\n {slots?.Pagination ? (\n <slots.Pagination table={table} localeText={text} pageSizeOptions={pageSizeOptions} />\n ) : (\n <DataTablePagination\n table={table}\n localeText={text}\n pageSizeOptions={pageSizeOptions}\n showTotalRows={showTotalRows}\n overlayBoundary={overlayBoundary}\n />\n )}\n </div>\n ) : null}\n\n {enableStatusBar ? (\n <DataTableStatusBar\n table={table as unknown as Table<unknown>}\n localeText={text}\n validationErrorCount={enableValidation ? (() => { let count = 0; for (const m of validationErrors.values()) count += m.size; return count; })() : 0}\n />\n ) : null}\n\n {enableConditionalFormatting ? (\n <DataTableConditionalFormattingDrawer\n table={table as unknown as Table<unknown>}\n open={cfDrawerOpen}\n onOpenChange={setCfDrawerOpen}\n initialColumnId={cfInitialColumnId}\n rules={conditionalFormattingRules}\n onRulesChange={handleConditionalRulesChange}\n />\n ) : null}\n\n {/* Feature 8: Keyboard shortcuts modal */}\n {enableKeyboardShortcuts ? (\n <DataTableKeyboardShortcutsModal\n open={shortcutsOpen}\n onOpenChange={setShortcutsOpen}\n enablePaste={enablePaste}\n />\n ) : null}\n\n {/* Round 3: Feature 1 — Pivot config drawer */}\n {enablePivot ? (\n <DataTablePivotConfigPanel\n open={pivotDrawerOpen}\n onOpenChange={setPivotDrawerOpen}\n columns={columns as DataTableColumnDef<unknown, unknown>[]}\n currentConfig={pivotConfig}\n onApply={handlePivotConfigChange}\n onClear={() => {\n setInternalPivotConfig(undefined);\n onPivotConfigChange?.({ rowGroupField: '', pivotField: '', valueField: '', aggregation: 'sum' });\n }}\n />\n ) : null}\n\n {/* Round 3: Feature 2 — Saved views drawer */}\n {enableSavedViews ? (\n <DataTableSavedViewsDrawer\n open={savedViewsDrawerOpen}\n onOpenChange={setSavedViewsDrawerOpen}\n views={savedViews}\n onViewsChange={handleViewsChange}\n table={table as unknown as Table<unknown>}\n density={density}\n setDensity={handleDensityChange}\n conditionalFormattingRules={conditionalFormattingRules}\n handleConditionalRulesChange={handleConditionalRulesChange as (rules: DataTableConditionalRule[]) => void}\n />\n ) : null}\n </div>\n );\n}\n\ninterface DataTableHeaderProps<TData> {\n header: ReturnType<Table<TData>['getHeaderGroups']>[number]['headers'][number];\n table: Table<TData>;\n enableSorting: boolean;\n enableColumnResizing: boolean;\n enableColumnReordering: boolean;\n enableColumnPinning: boolean;\n enableGrouping: boolean;\n enableColumnSelection: boolean;\n selectedColumnIds: string[];\n onSelectedColumnIdsChange: (columnIds: string[]) => void;\n draggedColumnId: string | null;\n onDraggedColumnIdChange: (columnId: string | null) => void;\n onColumnOrderChange: OnChangeFn<ColumnOrderState>;\n localeText: DataTableLocaleText;\n overlayBoundary?: HTMLDivElement | null;\n CustomColumnMenu?: React.ComponentType<DataTableColumnMenuSlotProps<TData>>;\n enableColumnCopy?: boolean;\n enableColumnAutoSize?: boolean;\n lockedColumns?: string[];\n onLockedColumnsChange?: (cols: string[]) => void;\n quickFilterColumns?: string[];\n onOpenConditionalFormatting?: (columnId: string) => void;\n onViewStats?: (columnId: string) => void;\n colIndex?: number;\n}\n\nfunction DataTableHeader<TData>({ header, colIndex, ...props }: DataTableHeaderProps<TData>) {\n if (header.isPlaceholder) {\n return <th colSpan={header.colSpan} aria-colindex={colIndex !== undefined ? colIndex + 1 : undefined} />;\n }\n // Group headers span multiple leaf columns — render as a simple centered label with no interactive controls\n if (header.colSpan > 1) {\n return (\n <th\n colSpan={header.colSpan}\n aria-colindex={colIndex !== undefined ? colIndex + 1 : undefined}\n className=\"border-b border-border bg-muted/30 px-3 py-1.5 text-center text-xs font-semibold tracking-wide text-muted-foreground\"\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </th>\n );\n }\n return (\n <DataTableLeafHeader\n column={header.column}\n colSpan={header.colSpan}\n colIndex={colIndex}\n headerContent={flexRender(header.column.columnDef.header, header.getContext())}\n resizeHandler={header.getResizeHandler()}\n {...props}\n />\n );\n}\n\nfunction getColumnHeaderText<TData>(column: Column<TData, unknown>) {\n return typeof column.columnDef.header === 'string' ? column.columnDef.header : column.id;\n}\n\ninterface DataTableLeafHeaderProps<TData> extends Omit<DataTableHeaderProps<TData>, 'header'> {\n column: Column<TData, unknown>;\n colSpan?: number;\n headerContent?: React.ReactNode;\n resizeHandler?: (event: unknown) => void;\n colIndex?: number;\n}\n\nfunction DataTableLeafHeader<TData>({\n column,\n table,\n colSpan,\n headerContent,\n resizeHandler,\n colIndex,\n enableSorting,\n enableColumnResizing,\n enableColumnReordering,\n enableColumnPinning,\n enableGrouping,\n enableColumnSelection,\n selectedColumnIds,\n onSelectedColumnIdsChange,\n draggedColumnId,\n onDraggedColumnIdChange,\n onColumnOrderChange,\n localeText,\n overlayBoundary,\n CustomColumnMenu,\n enableColumnCopy,\n enableColumnAutoSize,\n lockedColumns,\n onLockedColumnsChange,\n quickFilterColumns,\n onOpenConditionalFormatting,\n onViewStats,\n}: DataTableLeafHeaderProps<TData>) {\n const [quickFilter, setQuickFilter] = React.useState('');\n const isLocked = lockedColumns?.includes(column.id) ?? false;\n const showQuickFilter = quickFilterColumns?.includes(column.id) ?? false;\n const canSort = enableSorting && column.getCanSort();\n const sortDir = column.getIsSorted();\n const isPinned = column.getIsPinned();\n const selected = selectedColumnIds.includes(column.id);\n const structylMeta = getStructylMeta(column);\n const align = structylMeta.align ?? 'left';\n const flex = structylMeta.flex;\n const description = structylMeta.description;\n\n return (\n <th\n scope=\"col\"\n role=\"columnheader\"\n colSpan={colSpan}\n aria-colindex={colIndex !== undefined ? colIndex + 1 : undefined}\n aria-selected={selected || undefined}\n aria-sort={\n sortDir === 'asc'\n ? 'ascending'\n : sortDir === 'desc'\n ? 'descending'\n : canSort\n ? 'none'\n : undefined\n }\n data-pinned={isPinned || undefined}\n data-state={selected ? 'selected' : undefined}\n draggable={enableColumnReordering}\n onDragStart={(event) => {\n if (!enableColumnReordering) return;\n onDraggedColumnIdChange(column.id);\n event.dataTransfer.effectAllowed = 'move';\n }}\n onDragOver={(event) => {\n if (enableColumnReordering) event.preventDefault();\n }}\n onDrop={(event) => {\n if (!enableColumnReordering || !draggedColumnId) return;\n event.preventDefault();\n const ids = table.getAllLeafColumns().map((item) => item.id);\n const next = reorderIds(ids, draggedColumnId, column.id);\n onColumnOrderChange(next);\n onDraggedColumnIdChange(null);\n }}\n style={{\n width: flex ? undefined : column.getSize(),\n minWidth: flex ? column.getSize() : undefined,\n flex: flex ? String(flex) : undefined,\n position: isPinned ? 'sticky' : undefined,\n left: isPinned === 'left' ? column.getStart('left') : undefined,\n right: isPinned === 'right' ? column.getAfter('right') : undefined,\n background: isPinned ? 'inherit' : undefined,\n zIndex: isPinned ? 1 : undefined,\n }}\n className={cn(\n 'text-muted-foreground group relative h-10 whitespace-nowrap px-3 align-middle font-medium',\n align === 'left' && 'text-left',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n canSort && 'cursor-pointer select-none',\n enableColumnReordering && 'cursor-grab active:cursor-grabbing',\n selected && 'bg-muted text-foreground',\n )}\n onClick={canSort ? column.getToggleSortingHandler() : undefined}\n >\n {/* Text + sort icon — column menu is NOT in this flex container so it\n never shifts the text position. Right-aligned cells and headers now\n share the same right edge regardless of whether the menu is visible. */}\n <div\n className={cn(\n 'flex min-w-0 items-center gap-1.5',\n align === 'center' && 'justify-center',\n align === 'right' && 'justify-end',\n )}\n >\n {canSort && align === 'right' ? (\n <span className=\"inline-flex shrink-0 items-center gap-0.5\">\n {sortDir === 'asc' ? (\n <ChevronUp className=\"size-4\" />\n ) : sortDir === 'desc' ? (\n <ChevronDown className=\"size-4\" />\n ) : (\n <ChevronsUpDown className=\"size-4 opacity-50\" />\n )}\n {sortDir && (() => {\n const sortedCols = table.getState().sorting;\n const idx = sortedCols.findIndex((s) => s.id === column.id);\n return sortedCols.length > 1 && idx >= 0 ? (\n <span className=\"text-primary text-[10px] font-bold leading-none\">{idx + 1}</span>\n ) : null;\n })()}\n </span>\n ) : null}\n <span className=\"min-w-0 truncate\" title={description}>\n {headerContent ?? getColumnHeaderText(column)}\n </span>\n {description ? (\n <span\n className=\"text-muted-foreground/60 inline-flex shrink-0 cursor-help\"\n title={description}\n aria-label={description}\n >\n ℹ\n </span>\n ) : null}\n {canSort && align !== 'right' ? (\n <span className=\"inline-flex shrink-0 items-center gap-0.5\">\n {sortDir === 'asc' ? (\n <ChevronUp className=\"size-4\" />\n ) : sortDir === 'desc' ? (\n <ChevronDown className=\"size-4\" />\n ) : (\n <ChevronsUpDown className=\"size-4 opacity-50\" />\n )}\n {sortDir && (() => {\n const sortedCols = table.getState().sorting;\n const idx = sortedCols.findIndex((s) => s.id === column.id);\n return sortedCols.length > 1 && idx >= 0 ? (\n <span className=\"text-primary text-[10px] font-bold leading-none\">{idx + 1}</span>\n ) : null;\n })()}\n </span>\n ) : null}\n </div>\n {/* Column menu absolutely positioned — never affects text alignment */}\n <div\n className=\"absolute right-0 top-0 z-[5] flex h-full items-center px-1 opacity-0 focus-within:opacity-100 group-hover:opacity-100\"\n onClick={(e) => e.stopPropagation()}\n onPointerDown={(e) => e.stopPropagation()}\n >\n {CustomColumnMenu ? (\n <CustomColumnMenu column={column} table={table} />\n ) : (\n <DataTableColumnMenu\n column={column}\n table={table}\n localeText={localeText}\n enableColumnPinning={enableColumnPinning}\n enableGrouping={enableGrouping}\n enableColumnSelection={enableColumnSelection}\n selectedColumnIds={selectedColumnIds}\n onSelectedColumnIdsChange={onSelectedColumnIdsChange}\n overlayBoundary={overlayBoundary}\n enableColumnCopy={enableColumnCopy}\n lockedColumns={lockedColumns}\n onLockedColumnsChange={onLockedColumnsChange}\n onOpenConditionalFormatting={onOpenConditionalFormatting}\n onViewStats={onViewStats}\n />\n )}\n </div>\n {enableColumnResizing && column.getCanResize() && resizeHandler && !isLocked ? (\n <div\n onMouseDown={(event) => resizeHandler(event)}\n onTouchStart={(event) => resizeHandler(event)}\n onDoubleClick={enableColumnAutoSize ? () => {\n // Auto-size: measure the max content width from all visible cells\n const tableEl = document.querySelector('[data-datatable-root] table');\n if (!tableEl) return;\n const colIndex = table.getAllLeafColumns().findIndex((c) => c.id === column.id);\n const cells = tableEl.querySelectorAll<HTMLElement>(`tr td:nth-child(${colIndex + 1}), tr th:nth-child(${colIndex + 1})`);\n let maxWidth = 60;\n cells.forEach((el) => {\n maxWidth = Math.max(maxWidth, el.scrollWidth);\n });\n table.setColumnSizing((prev) => ({ ...prev, [column.id]: maxWidth }));\n } : undefined}\n className={cn(\n 'absolute right-0 top-0 z-10 flex h-full w-3 cursor-col-resize touch-none select-none items-center justify-center',\n 'opacity-0 group-hover:opacity-100',\n column.getIsResizing() && 'opacity-100',\n )}\n title={enableColumnAutoSize ? localeText.autoSizeColumn : undefined}\n >\n <div className={cn(\n 'bg-border h-full w-px',\n column.getIsResizing() && 'bg-primary w-0.5',\n )} />\n </div>\n ) : null}\n {showQuickFilter ? (\n <div\n className=\"px-1 pb-1 pt-0.5\"\n onClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <Input\n value={quickFilter}\n onChange={(event) => {\n setQuickFilter(event.target.value);\n column.setFilterValue(event.target.value || undefined);\n }}\n placeholder={localeText.quickFilterPlaceholder}\n className=\"h-6 text-xs\"\n aria-label={`Filter ${getColumnHeaderText(column)}`}\n />\n </div>\n ) : null}\n </th>\n );\n}\n\ninterface DataTableColumnMenuProps<TData> {\n column: Column<TData, unknown>;\n table: Table<TData>;\n localeText: DataTableLocaleText;\n enableColumnPinning: boolean;\n enableGrouping: boolean;\n enableColumnSelection: boolean;\n selectedColumnIds: string[];\n onSelectedColumnIdsChange: (columnIds: string[]) => void;\n overlayBoundary?: HTMLDivElement | null;\n enableColumnCopy?: boolean;\n lockedColumns?: string[];\n onLockedColumnsChange?: (cols: string[]) => void;\n onOpenConditionalFormatting?: (columnId: string) => void;\n onViewStats?: (columnId: string) => void;\n}\n\nfunction DataTableColumnMenu<TData>({\n column,\n table,\n localeText,\n enableColumnPinning,\n enableGrouping,\n enableColumnSelection,\n selectedColumnIds,\n onSelectedColumnIdsChange,\n overlayBoundary,\n enableColumnCopy,\n lockedColumns,\n onLockedColumnsChange,\n onOpenConditionalFormatting,\n onViewStats,\n}: DataTableColumnMenuProps<TData>) {\n const handleCopyColumn = () => {\n const rows = table.getFilteredRowModel().rows;\n const header = typeof column.columnDef.header === 'string' ? column.columnDef.header : column.id;\n const values = [header, ...rows.map((row) => String(row.getValue(column.id) ?? ''))].join('\\n');\n navigator.clipboard?.writeText(values).catch(() => undefined);\n };\n const isLocked = lockedColumns?.includes(column.id) ?? false;\n const handleToggleLock = () => {\n if (!onLockedColumnsChange) return;\n const current = lockedColumns ?? [];\n onLockedColumnsChange(\n isLocked ? current.filter((id) => id !== column.id) : [...current, column.id],\n );\n };\n return (\n <span className=\"inline-flex\">\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={`${column.id} ${localeText.columnMenu}`}\n className=\"h-7 w-7\"\n >\n ⋮\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n align=\"end\"\n container={overlayBoundary}\n collisionBoundary={overlayBoundary}\n collisionPadding={8}\n strategy=\"absolute\"\n sticky=\"always\"\n className=\"bg-popover relative z-[1000] max-h-[min(45dvh,18rem,var(--structyl-popper-available-height))] min-w-44 overflow-y-auto\"\n >\n <MenuButton onClick={() => column.toggleSorting(false)}>{localeText.sortAsc}</MenuButton>\n <MenuButton onClick={() => column.toggleSorting(true)}>{localeText.sortDesc}</MenuButton>\n <MenuButton\n onClick={() =>\n table.setSorting((state) => state.filter((item) => item.id !== column.id))\n }\n >\n {localeText.clearSort}\n </MenuButton>\n {column.getCanHide() ? (\n <MenuButton onClick={() => column.toggleVisibility(false)}>\n {localeText.hideColumn}\n </MenuButton>\n ) : null}\n {enableColumnPinning ? (\n <>\n <MenuButton onClick={() => column.pin('left')}>{localeText.pinLeft}</MenuButton>\n <MenuButton onClick={() => column.pin('right')}>{localeText.pinRight}</MenuButton>\n <MenuButton onClick={() => column.pin(false)}>{localeText.unpin}</MenuButton>\n </>\n ) : null}\n {enableGrouping && column.getCanGroup() ? (\n <MenuButton onClick={() => column.toggleGrouping()}>\n {column.getIsGrouped() ? localeText.ungroup : localeText.groupBy}\n </MenuButton>\n ) : null}\n {enableColumnSelection ? (\n <MenuButton\n onClick={() => onSelectedColumnIdsChange(toggleId(selectedColumnIds, column.id))}\n >\n {localeText.selectColumn}\n </MenuButton>\n ) : null}\n {enableColumnCopy ? (\n <MenuButton onClick={handleCopyColumn}>{localeText.copyColumn}</MenuButton>\n ) : null}\n {onLockedColumnsChange ? (\n <MenuButton onClick={handleToggleLock}>\n {isLocked ? localeText.unlockColumn : localeText.lockColumn}\n </MenuButton>\n ) : null}\n {onOpenConditionalFormatting ? (\n <MenuButton onClick={() => onOpenConditionalFormatting(column.id)}>\n {localeText.conditionalFormatting ?? 'Conditional formatting'}\n </MenuButton>\n ) : null}\n {onViewStats ? (\n <MenuButton onClick={() => onViewStats(column.id)}>\n View statistics\n </MenuButton>\n ) : null}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </span>\n );\n}\n\nfunction MenuButton({ children, onClick }: { children: React.ReactNode; onClick: () => void }) {\n return (\n <DropdownMenu.Item className=\"cursor-pointer\" onSelect={onClick}>\n {children}\n </DropdownMenu.Item>\n );\n}\n\nfunction renderRowCells<TData>({\n row,\n rowIndex,\n renderedColumnIds,\n enableExpanding,\n renderDetailPanel,\n getCellColSpan,\n getCellRowSpan,\n enableRowPinning,\n pinRow,\n text,\n overlayBoundary,\n treeData,\n densityCellClass,\n enableRowCopy,\n getCellClassName,\n enableCellTooltip,\n onCellContextMenu,\n conditionalFormattingRules,\n enableCellSelection,\n isCellSelected,\n isSelectingCells: _isSelectingCells,\n onCellMouseDown,\n onCellMouseEnter,\n flashedCells,\n onViewStats: _onViewStats,\n rowValidationErrors,\n}: {\n row: Row<TData>;\n rowIndex: number;\n renderedColumnIds: Set<string>;\n enableExpanding: boolean;\n renderDetailPanel?: (row: Row<TData>) => React.ReactNode;\n getCellColSpan?: (cell: Cell<TData, unknown>, row: Row<TData>) => number | undefined;\n getCellRowSpan?: (cell: Cell<TData, unknown>, row: Row<TData>) => number | undefined;\n enableRowPinning: boolean;\n pinRow: (rowId: string, position: 'top' | 'bottom' | false) => void;\n text: DataTableLocaleText;\n overlayBoundary?: HTMLDivElement | null;\n treeData: boolean;\n densityCellClass: string;\n enableRowCopy: boolean;\n getCellClassName?: (cell: Cell<TData, unknown>, row: Row<TData>) => string | undefined;\n enableCellTooltip?: boolean;\n onCellContextMenu?: (cell: Cell<TData, unknown>, row: Row<TData>, event: React.MouseEvent) => void;\n conditionalFormattingRules?: DataTableConditionalRule[];\n enableCellSelection?: boolean;\n isCellSelected?: (rowIndex: number, colIndex: number) => boolean;\n isSelectingCells?: boolean;\n onCellMouseDown?: (rowIndex: number, colIndex: number) => void;\n onCellMouseEnter?: (rowIndex: number, colIndex: number) => void;\n flashedCells?: Set<string>;\n onViewStats?: (columnId: string) => void;\n rowValidationErrors?: Map<string, string>;\n}) {\n const copyRow = (row: Row<TData>) => {\n const cells = row.getVisibleCells().filter((c) => !c.column.id.startsWith('__'));\n const tsv = cells.map((c) => String(c.getValue() ?? '')).join('\\t');\n navigator.clipboard?.writeText(tsv).catch(() => undefined);\n };\n const cells = row.getVisibleCells().filter((cell) => renderedColumnIds.has(cell.column.id));\n let skip = 0;\n return cells.map((cell, index) => {\n if (skip > 0) {\n skip -= 1;\n return null;\n }\n const isPinned = cell.column.getIsPinned();\n const requestedColSpan = Math.max(getCellColSpan?.(cell, row) ?? 1, 1);\n const colSpan = Math.min(requestedColSpan, cells.length - index);\n const rowSpan = Math.max(getCellRowSpan?.(cell, row) ?? 1, 1);\n skip = colSpan - 1;\n const canExpand = (enableExpanding && row.getCanExpand()) || !!renderDetailPanel;\n const structylMeta = getStructylMeta(cell.column);\n const align = structylMeta.align ?? 'left';\n const flex = structylMeta.flex;\n const treeIndent = treeData && index === 0 ? row.depth * 16 : 0;\n const cellIsSelected = isCellSelected ? isCellSelected(rowIndex, index) : false;\n const cellIsFlashed = flashedCells ? flashedCells.has(cell.column.id) : false;\n const validationError = rowValidationErrors?.get(cell.column.id);\n const conditionalRule = conditionalFormattingRules?.find((r) => {\n if (r.columnId !== cell.column.id) return false;\n const v = cell.getValue();\n const sv = String(v ?? '');\n const rv = r.value ?? '';\n switch (r.operator) {\n case 'equals': return sv === rv;\n case 'notEquals': return sv !== rv;\n case 'contains': return sv.toLowerCase().includes(rv.toLowerCase());\n case 'gt': return Number(v) > Number(rv);\n case 'gte': return Number(v) >= Number(rv);\n case 'lt': return Number(v) < Number(rv);\n case 'lte': return Number(v) <= Number(rv);\n case 'empty': return sv === '';\n case 'notEmpty': return sv !== '';\n default: return false;\n }\n });\n\n const tdEl = (\n <td\n key={cell.id}\n role=\"gridcell\"\n aria-colindex={index + 1}\n colSpan={colSpan}\n rowSpan={rowSpan}\n data-pinned={isPinned || undefined}\n data-flash={cellIsFlashed || undefined}\n style={{\n width: flex ? undefined : cell.column.getSize(),\n minWidth: flex ? cell.column.getSize() : undefined,\n flex: flex ? String(flex) : undefined,\n position: isPinned ? 'sticky' : 'relative',\n left: isPinned === 'left' ? cell.column.getStart('left') : undefined,\n right: isPinned === 'right' ? cell.column.getAfter('right') : undefined,\n background: isPinned ? 'hsl(var(--color-bg))' : (conditionalRule?.backgroundColor ?? undefined),\n color: conditionalRule?.textColor ?? undefined,\n zIndex: isPinned ? 1 : undefined,\n paddingLeft: treeIndent > 0 ? treeIndent : undefined,\n }}\n onContextMenu={onCellContextMenu ? (event) => { event.preventDefault(); onCellContextMenu(cell, row, event); } : undefined}\n onMouseDown={enableCellSelection ? (event) => {\n event.preventDefault();\n onCellMouseDown?.(rowIndex, index);\n } : undefined}\n onMouseEnter={enableCellSelection ? () => {\n onCellMouseEnter?.(rowIndex, index);\n } : undefined}\n className={cn(\n densityCellClass,\n 'relative align-middle',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n getCellClassName?.(cell, row),\n cellIsSelected && 'bg-primary/10 outline outline-1 outline-primary',\n enableCellSelection && 'select-none cursor-cell',\n validationError && 'outline outline-1 outline-destructive',\n )}\n >\n {validationError ? (\n <span className=\"absolute top-0.5 right-0.5 h-1.5 w-1.5 rounded-full bg-destructive\" aria-hidden=\"true\" />\n ) : null}\n <div\n className={cn(\n 'flex min-w-0 items-center gap-1',\n align === 'center' && 'justify-center',\n align === 'right' && 'justify-end',\n )}\n >\n {index === 0 && canExpand ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => row.toggleExpanded()}\n className=\"mr-1 h-5 w-5 shrink-0\"\n aria-label={row.getIsExpanded() ? text.collapseRow : text.expandRow}\n >\n {row.getIsExpanded() ? (\n <ChevronDown className=\"size-3.5\" />\n ) : (\n <ChevronRight className=\"size-3.5\" />\n )}\n </Button>\n ) : null}\n {enableRowPinning && index === 0 ? (\n <span\n className=\"mr-1 inline-flex\"\n onClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={text.rowActions}\n className=\"h-5 w-5\"\n >\n ⋮\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n align=\"start\"\n container={overlayBoundary}\n collisionBoundary={overlayBoundary}\n collisionPadding={8}\n strategy=\"absolute\"\n sticky=\"always\"\n className=\"bg-popover relative z-[1000] max-h-[min(45dvh,18rem,var(--structyl-popper-available-height))] min-w-28 overflow-y-auto\"\n >\n <MenuButton onClick={() => pinRow(row.id, 'top')}>{text.pinRowTop}</MenuButton>\n <MenuButton onClick={() => pinRow(row.id, 'bottom')}>\n {text.pinRowBottom}\n </MenuButton>\n <MenuButton onClick={() => pinRow(row.id, false)}>{text.unpin}</MenuButton>\n {enableRowCopy ? (\n <MenuButton onClick={() => copyRow(row)}>{text.copyRow}</MenuButton>\n ) : null}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </span>\n ) : null}\n <span\n className=\"min-w-0 truncate\"\n title={enableCellTooltip ? String(cell.getValue() ?? '') : undefined}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </span>\n </div>\n </td>\n );\n\n if (validationError) {\n return (\n <Tooltip.Provider key={cell.id}>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>{tdEl}</Tooltip.Trigger>\n <Tooltip.Content>{validationError}</Tooltip.Content>\n </Tooltip.Root>\n </Tooltip.Provider>\n );\n }\n return tdEl;\n });\n}\n\nfunction renderLoadingRows({\n colSpan,\n columns,\n variant,\n rows,\n text,\n LoadingSkeleton,\n LoadingOverlay,\n}: {\n colSpan: number;\n columns: number;\n variant: DataTableLoadingVariant;\n rows: number;\n text: DataTableLocaleText;\n LoadingSkeleton?: React.ComponentType<DataTableLoadingSkeletonSlotProps>;\n LoadingOverlay?: React.ComponentType<DataTableLoadingOverlaySlotProps>;\n}) {\n if (LoadingOverlay && variant !== 'skeleton') {\n return (\n <tr>\n <td colSpan={colSpan} className=\"h-24 text-center\">\n <LoadingOverlay text={text.loading} variant={variant} />\n </td>\n </tr>\n );\n }\n if (LoadingSkeleton && variant === 'skeleton') {\n return (\n <tr>\n <td colSpan={colSpan}>\n <LoadingSkeleton rows={rows} columns={columns} />\n </td>\n </tr>\n );\n }\n if (variant === 'spinner') {\n return (\n <tr>\n <td colSpan={colSpan} className=\"text-muted-foreground h-24 text-center\">\n <span className=\"inline-flex items-center gap-2\">\n <span className=\"border-primary h-4 w-4 animate-spin rounded-full border-2 border-t-transparent\" />\n {text.loading}\n </span>\n </td>\n </tr>\n );\n }\n if (variant === 'skeleton') {\n return Array.from({ length: rows }, (_, rowIndex) => (\n <tr key={rowIndex} className=\"border-border border-b\">\n {Array.from({ length: Math.max(columns, 1) }, (_, columnIndex) => (\n <td key={columnIndex} className=\"p-3\">\n <div className=\"bg-muted h-4 w-full animate-pulse rounded\" />\n </td>\n ))}\n </tr>\n ));\n }\n return (\n <tr>\n <td colSpan={colSpan} className=\"text-muted-foreground h-24 text-center\">\n {text.loading}\n </td>\n </tr>\n );\n}\n\ninterface DataTableFooterProps<TData> {\n table: Table<TData>;\n aggregations: Record<string, DataTableAggregation>;\n renderedColumnIds: Set<string>;\n columnPaddingLeft: number;\n columnPaddingRight: number;\n localeText: DataTableLocaleText;\n}\n\nfunction DataTableFooter<TData>({\n table,\n aggregations,\n renderedColumnIds,\n columnPaddingLeft,\n columnPaddingRight,\n localeText,\n}: DataTableFooterProps<TData>) {\n const rows = table.getFilteredRowModel().rows;\n return (\n <tfoot className=\"border-border bg-bg sticky bottom-0 z-10 border-t\">\n <tr>\n {columnPaddingLeft > 0 ? <td style={{ width: columnPaddingLeft }} /> : null}\n {table\n .getVisibleLeafColumns()\n .filter((column) => renderedColumnIds.has(column.id))\n .map((column, index) => {\n const aggregation = aggregations[column.id];\n return (\n <td key={column.id} className=\"p-3 font-medium\">\n {aggregation\n ? aggregateColumn(\n aggregation,\n rows.map((row) => row.getValue(column.id)),\n rows,\n )\n : index === 0\n ? localeText.total\n : null}\n </td>\n );\n })}\n {columnPaddingRight > 0 ? <td style={{ width: columnPaddingRight }} /> : null}\n </tr>\n </tfoot>\n );\n}\n\n/* ─── Pagination ──────────────────────────────────────────────────── */\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>;\n localeText?: DataTableLocaleText;\n pageSizeOptions?: number[];\n showTotalRows?: boolean;\n overlayBoundary?: HTMLDivElement | null;\n}\n\nexport function DataTablePagination<TData>({\n table,\n localeText = defaultLocaleText,\n pageSizeOptions = [10, 25, 50, 100],\n showTotalRows = true,\n overlayBoundary,\n}: DataTablePaginationProps<TData>) {\n const { pageIndex, pageSize } = table.getState().pagination;\n const pageCount = table.getPageCount();\n const totalRows = table.getFilteredRowModel().rows.length;\n\n const pageOptions = Array.from({ length: Math.max(pageCount, 1) }, (_, i) => i + 1);\n\n return (\n <div className=\"flex flex-col gap-3 py-3 sm:flex-row sm:items-center sm:justify-between\">\n {/* Left side: total + rows per page */}\n <div className=\"text-muted-foreground flex flex-wrap items-center gap-4 text-sm\">\n {showTotalRows ? (\n <span className=\"tabular-nums\">{localeText.totalRows(totalRows)}</span>\n ) : null}\n <label className=\"flex items-center gap-2\">\n <span className=\"whitespace-nowrap\">{localeText.rowsPerPage}</span>\n <Select.Root\n value={String(pageSize)}\n onValueChange={(v) => table.setPageSize(Number(v))}\n >\n <Select.Trigger className=\"h-8 w-20\">\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n options={pageSizeOptions.map((s) => ({ value: String(s), label: String(s) }))}\n container={overlayBoundary}\n />\n </Select.Root>\n </label>\n </div>\n\n {/* Right side: page navigation */}\n <div className=\"flex flex-wrap items-center gap-1\">\n <span className=\"text-muted-foreground mr-1 text-sm tabular-nums\">\n {localeText.page(pageIndex + 1, Math.max(pageCount, 1))}\n </span>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label={localeText.firstPage}\n title={localeText.firstPage}\n >\n <ChevronsLeft className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n className=\"h-8 w-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label={localeText.previous}\n title={localeText.previous}\n >\n <ChevronLeft className=\"size-4\" />\n </Button>\n <Select.Root\n value={String(pageIndex + 1)}\n onValueChange={(v) => table.setPageIndex(Number(v) - 1)}\n >\n <Select.Trigger className=\"h-8 w-16\" aria-label={localeText.goToPage}>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n options={pageOptions.map((p) => ({ value: String(p), label: String(p) }))}\n container={overlayBoundary}\n />\n </Select.Root>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n className=\"h-8 w-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label={localeText.next}\n title={localeText.next}\n >\n <ChevronRight className=\"size-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(pageCount - 1)}\n disabled={!table.getCanNextPage()}\n aria-label={localeText.lastPage}\n title={localeText.lastPage}\n >\n <ChevronsRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n );\n}\n\n/* ─── Toolbar ────────────────────────────────────────────────────────── */\n\nexport interface DataTableToolbarProps<TData> {\n table: Table<TData>;\n filterColumnId?: string;\n filterPlaceholder?: string;\n globalFilter?: string;\n onGlobalFilterChange?: (value: string) => void;\n children?: React.ReactNode;\n}\n\nexport function DataTableToolbar<TData>({\n table,\n filterColumnId,\n filterPlaceholder = 'Search…',\n globalFilter,\n onGlobalFilterChange,\n children,\n}: DataTableToolbarProps<TData>) {\n const column = filterColumnId ? table.getColumn(filterColumnId) : null;\n return (\n <div className=\"flex flex-col gap-2 py-2 sm:flex-row sm:items-center sm:justify-between\">\n {onGlobalFilterChange ? (\n <DataTableGlobalSearch\n value={globalFilter ?? ''}\n onValueChange={onGlobalFilterChange}\n placeholder={filterPlaceholder}\n />\n ) : column ? (\n <Input\n type=\"text\"\n value={(column.getFilterValue() as string) ?? ''}\n onChange={(event) => column.setFilterValue(event.target.value)}\n placeholder={filterPlaceholder}\n className=\"min-w-0 sm:w-64\"\n />\n ) : null}\n {children}\n </div>\n );\n}\n\nfunction DataTableGlobalSearch({\n value,\n onValueChange,\n placeholder,\n}: {\n value: string;\n onValueChange: (value: string) => void;\n placeholder: string;\n}) {\n return (\n <Input\n type=\"search\"\n value={value}\n onChange={(event) => onValueChange(event.target.value)}\n placeholder={placeholder}\n className=\"min-w-0 sm:w-64\"\n />\n );\n}\n\ninterface DataTableSelectOption {\n value: string;\n label: React.ReactNode;\n}\n\nfunction DataTableSelect({\n value,\n onValueChange,\n options,\n ariaLabel,\n className,\n searchable,\n overlayBoundary,\n}: {\n value: string;\n onValueChange: (value: string) => void;\n options: DataTableSelectOption[];\n ariaLabel: string;\n className?: string;\n searchable?: boolean;\n overlayBoundary?: HTMLDivElement | null;\n}) {\n const selectedOption = options.find((option) => option.value === value);\n\n return (\n <Select.Root value={value} onValueChange={onValueChange} searchable={searchable}>\n <Select.Trigger aria-label={ariaLabel} className={cn('min-w-0', className)}>\n <Select.Value placeholder={selectedOption?.label ?? value}>\n {selectedOption?.label ?? value}\n </Select.Value>\n </Select.Trigger>\n <Select.Content\n container={overlayBoundary}\n collisionBoundary={overlayBoundary}\n collisionPadding={8}\n strategy=\"absolute\"\n sticky=\"always\"\n showCreateItem={false}\n className=\"bg-popover relative z-[1100] max-h-[min(45dvh,18rem,var(--structyl-popper-available-height))] min-w-44\"\n >\n {options.map((option) => (\n <Select.Item key={option.value} value={option.value}>\n {option.label}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n}\n\n/* ─── Advanced filters ──────────────────────────────────────────────── */\n\nexport interface DataTableAdvancedFilterProps<TData> {\n table: Table<TData>;\n filter?: DataTableFilterGroup;\n onFilterChange: (filter: DataTableFilterGroup | undefined) => void;\n localeText?: DataTableLocaleText;\n overlayBoundary?: HTMLDivElement | null;\n}\n\nexport function DataTableAdvancedFilter<TData>({\n table,\n filter,\n onFilterChange,\n localeText = defaultLocaleText,\n overlayBoundary,\n}: DataTableAdvancedFilterProps<TData>) {\n const columns = table.getAllLeafColumns().filter((column) => column.getCanFilter());\n const group = filter ?? createFilterGroup('root');\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <Button type=\"button\" variant=\"outline\" size=\"sm\">\n <Filter className=\"mr-1.5 size-4\" />{localeText.filters}\n </Button>\n </Popover.Trigger>\n <Popover.Content\n align=\"start\"\n sideOffset={6}\n container={overlayBoundary}\n collisionBoundary={overlayBoundary}\n collisionPadding={12}\n strategy=\"absolute\"\n sticky=\"always\"\n role=\"region\"\n aria-label={localeText.filters}\n data-datatable-filter-panel=\"\"\n className=\"bg-popover relative z-[1000] flex max-h-[min(55dvh,24rem,var(--structyl-popper-available-height))] w-[min(44rem,var(--structyl-popper-available-width),calc(100vw-2rem))] min-w-0 flex-col gap-2 overflow-hidden rounded-md p-3\"\n >\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n <DataTableFilterGroupEditor\n group={group}\n columns={columns}\n localeText={localeText}\n overlayBoundary={overlayBoundary}\n onGroupChange={(next) => onFilterChange(next.items.length ? next : undefined)}\n />\n </div>\n <div className=\"border-border flex justify-end border-t pt-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onFilterChange(undefined)}\n >\n {localeText.clearFilters}\n </Button>\n </div>\n </Popover.Content>\n </Popover.Root>\n );\n}\n\ninterface DataTableFilterGroupEditorProps<TData> {\n group: DataTableFilterGroup;\n columns: Column<TData, unknown>[];\n localeText: DataTableLocaleText;\n overlayBoundary?: HTMLDivElement | null;\n depth?: number;\n onGroupChange: (group: DataTableFilterGroup) => void;\n onRemove?: () => void;\n}\n\nfunction DataTableFilterGroupEditor<TData>({\n group,\n columns,\n localeText,\n overlayBoundary,\n depth = 0,\n onGroupChange,\n onRemove,\n}: DataTableFilterGroupEditorProps<TData>) {\n const addRule = () => {\n const firstColumn = columns[0];\n if (!firstColumn) return;\n onGroupChange({\n ...group,\n items: [...group.items, createFilterRule(firstColumn.id)],\n });\n };\n const addGroup = () => {\n onGroupChange({\n ...group,\n items: [...group.items, createFilterGroup()],\n });\n };\n const updateItem = (item: DataTableFilterItem) => {\n onGroupChange({\n ...group,\n items: group.items.map((current) => (current.id === item.id ? item : current)),\n });\n };\n const removeItem = (itemId: string) => {\n onGroupChange({\n ...group,\n items: group.items.filter((item) => item.id !== itemId),\n });\n };\n\n return (\n <div\n className={cn('border-border grid gap-2 rounded-md border p-2', depth > 0 && 'bg-muted/30')}\n >\n <div className=\"grid gap-2 sm:flex sm:flex-wrap sm:items-end\">\n <div className=\"text-muted-foreground grid gap-1 text-xs font-medium sm:min-w-40\">\n <span>{localeText.filterLogicLabel}</span>\n <DataTableSelect\n value={group.logic}\n onValueChange={(value) =>\n onGroupChange({ ...group, logic: value as DataTableFilterLogic })\n }\n options={[\n { value: 'and', label: 'AND' },\n { value: 'or', label: 'OR' },\n ]}\n ariaLabel={localeText.filterLogicLabel}\n className=\"sm:w-40\"\n overlayBoundary={overlayBoundary}\n />\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full sm:w-auto\"\n onClick={addRule}\n disabled={columns.length === 0}\n >\n {localeText.addFilter}\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full sm:w-auto\"\n onClick={addGroup}\n >\n {localeText.addFilterGroup}\n </Button>\n {onRemove ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full sm:w-auto\"\n onClick={onRemove}\n >\n {localeText.removeFilterGroup}\n </Button>\n ) : null}\n </div>\n {group.items.map((item) =>\n isFilterRule(item) ? (\n <DataTableFilterRuleEditor\n key={item.id}\n rule={item}\n columns={columns}\n localeText={localeText}\n overlayBoundary={overlayBoundary}\n onRuleChange={updateItem}\n onRemove={() => removeItem(item.id)}\n />\n ) : (\n <DataTableFilterGroupEditor\n key={item.id}\n group={item}\n columns={columns}\n localeText={localeText}\n overlayBoundary={overlayBoundary}\n depth={depth + 1}\n onGroupChange={updateItem}\n onRemove={() => removeItem(item.id)}\n />\n ),\n )}\n </div>\n );\n}\n\ninterface DataTableFilterRuleEditorProps<TData> {\n rule: DataTableFilterRule;\n columns: Column<TData, unknown>[];\n localeText: DataTableLocaleText;\n overlayBoundary?: HTMLDivElement | null;\n onRuleChange: (rule: DataTableFilterRule) => void;\n onRemove: () => void;\n}\n\nfunction DataTableFilterRuleEditor<TData>({\n rule,\n columns,\n localeText,\n overlayBoundary,\n onRuleChange,\n onRemove,\n}: DataTableFilterRuleEditorProps<TData>) {\n return (\n <div className=\"grid min-w-0 gap-2\">\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"text-muted-foreground grid gap-1 text-xs font-medium\">\n <span>{localeText.filterColumnLabel}</span>\n <DataTableSelect\n value={rule.columnId}\n onValueChange={(value) => onRuleChange({ ...rule, columnId: value })}\n options={columns.map((column) => ({ value: column.id, label: column.id }))}\n ariaLabel={localeText.filterColumnLabel}\n searchable={columns.length > 8}\n overlayBoundary={overlayBoundary}\n />\n </div>\n <div className=\"text-muted-foreground grid gap-1 text-xs font-medium\">\n <span>{localeText.filterOperatorLabel}</span>\n <DataTableSelect\n value={rule.operator}\n onValueChange={(value) =>\n onRuleChange({ ...rule, operator: value as DataTableFilterOperator })\n }\n options={filterOperators.map((operator) => ({ value: operator, label: operator }))}\n ariaLabel={localeText.filterOperatorLabel}\n overlayBoundary={overlayBoundary}\n />\n </div>\n </div>\n <div className=\"grid grid-cols-[1fr_auto] items-end gap-2\">\n <label className=\"text-muted-foreground grid min-w-0 gap-1 text-xs font-medium\">\n {localeText.filterValueLabel}\n <Input\n value={String(rule.value ?? '')}\n onChange={(event) => onRuleChange({ ...rule, value: event.target.value })}\n className=\"min-w-0\"\n />\n </label>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onRemove}>\n {localeText.removeFilter}\n </Button>\n </div>\n </div>\n );\n}\n\n/* ─── Per-column filter UI ──────────────────────────────────────────── */\n\nexport interface DataTableColumnFilterProps<TData, TValue = unknown> {\n column: Column<TData, TValue>;\n title?: string;\n}\n\nexport function DataTableColumnFilter<TData, TValue = unknown>({\n column,\n title,\n}: DataTableColumnFilterProps<TData, TValue>) {\n const facets = column.getFacetedUniqueValues();\n const filterValue = String(column.getFilterValue() ?? '');\n const options = Array.from(facets.keys())\n .map((option) => String(option))\n .filter((option) => normalizeSearch(option).includes(normalizeSearch(filterValue)))\n .slice(0, 200);\n return (\n <div className=\"flex w-full max-w-sm flex-col gap-1\">\n <span className=\"text-xs font-medium\">{title ?? column.id}</span>\n <Combobox.Root\n inputValue={filterValue}\n onInputValueChange={(value) => column.setFilterValue(value)}\n value={filterValue}\n onValueChange={(value) => column.setFilterValue(value)}\n >\n <Combobox.Input aria-label={title ?? column.id} />\n <Combobox.Content className=\"bg-popover relative z-[1100] max-h-[min(45dvh,18rem)] w-[var(--structyl-popper-anchor-width)]\">\n {options.length ? (\n options.map((option) => (\n <Combobox.Item key={option} value={option}>\n {option}\n </Combobox.Item>\n ))\n ) : (\n <Combobox.Empty>No options</Combobox.Empty>\n )}\n </Combobox.Content>\n </Combobox.Root>\n </div>\n );\n}\n\n/* ─── Column configuration ─────────────────────────────────────────── */\n\nexport interface DataTableColumnVisibilityProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTableColumnVisibility<TData>({ table }: DataTableColumnVisibilityProps<TData>) {\n return <DataTableColumnConfiguration table={table} />;\n}\n\nexport interface DataTableColumnConfigurationProps<TData> {\n table: Table<TData>;\n selectedColumnIds?: string[];\n onSelectedColumnIdsChange?: (columnIds: string[]) => void;\n localeText?: DataTableLocaleText;\n enableColumnSelection?: boolean;\n enableGrouping?: boolean;\n enableColumnPinning?: boolean;\n overlayBoundary?: HTMLDivElement | null;\n}\n\nexport function DataTableColumnConfiguration<TData>({\n table,\n selectedColumnIds = [],\n onSelectedColumnIdsChange,\n localeText = defaultLocaleText,\n enableColumnSelection,\n enableGrouping,\n enableColumnPinning,\n overlayBoundary,\n}: DataTableColumnConfigurationProps<TData>) {\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <Button type=\"button\" variant=\"outline\" size=\"sm\">\n <Columns3 className=\"mr-1.5 size-4\" />{localeText.columns}\n </Button>\n </Popover.Trigger>\n <Popover.Content\n align=\"end\"\n sideOffset={6}\n container={overlayBoundary}\n collisionBoundary={overlayBoundary}\n collisionPadding={8}\n strategy=\"absolute\"\n sticky=\"always\"\n data-datatable-column-panel=\"\"\n className=\"bg-popover relative z-[1000] grid max-h-[min(45dvh,18rem,var(--structyl-popper-available-height))] w-[min(18rem,var(--structyl-popper-available-width),calc(100vw-2rem))] gap-1 overflow-auto rounded-md p-1\"\n >\n {table.getAllLeafColumns().map((column) => (\n <div key={column.id} className=\"hover:bg-accent grid gap-1 rounded-sm px-2 py-1 text-sm\">\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={column.getIsVisible()}\n disabled={!column.getCanHide()}\n onCheckedChange={(checked) => column.toggleVisibility(checked === true)}\n aria-label={`Toggle ${column.id}`}\n />\n <span className=\"min-w-0 flex-1 truncate\">{column.id}</span>\n </label>\n <div className=\"flex flex-wrap gap-1 pl-5\">\n {enableColumnSelection ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={() =>\n onSelectedColumnIdsChange?.(toggleId(selectedColumnIds, column.id))\n }\n >\n {localeText.selectColumn}\n </Button>\n ) : null}\n {enableColumnPinning ? (\n <>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={() => column.pin('left')}\n >\n {localeText.pinLeft}\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={() => column.pin(false)}\n >\n {localeText.unpin}\n </Button>\n </>\n ) : null}\n {enableGrouping && column.getCanGroup() ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={() => column.toggleGrouping()}\n >\n {column.getIsGrouped() ? localeText.ungroup : localeText.groupBy}\n </Button>\n ) : null}\n </div>\n </div>\n ))}\n </Popover.Content>\n </Popover.Root>\n );\n}\n\n/* ─── Inline create ────────────────────────────────────────────────── */\n\nfunction DataTableInlineCreateRow({\n createRow,\n colSpan,\n localeText,\n}: {\n createRow: DataTableInlineCreate;\n colSpan: number;\n localeText: DataTableLocaleText;\n}) {\n const initialValues = React.useMemo(\n () =>\n Object.fromEntries(createRow.fields.map((field) => [field.id, ''])) as Record<string, string>,\n [createRow.fields],\n );\n const [values, setValues] = React.useState<Record<string, string>>(initialValues);\n React.useEffect(() => setValues(initialValues), [initialValues]);\n return (\n <tr className=\"border-border bg-muted/20 border-b\">\n <td colSpan={colSpan} className=\"p-3\">\n <form\n className=\"flex flex-wrap items-end gap-2\"\n onSubmit={(event) => {\n event.preventDefault();\n createRow.onAdd(values);\n setValues(initialValues);\n }}\n >\n {createRow.fields.map((field) => (\n <label key={field.id} className=\"text-muted-foreground grid gap-1 text-xs font-medium\">\n {field.label ?? field.id}\n <Input\n type={field.type ?? 'text'}\n value={values[field.id] ?? ''}\n placeholder={field.placeholder}\n onChange={(event) =>\n setValues((current) => ({ ...current, [field.id]: event.target.value }))\n }\n />\n </label>\n ))}\n <Button type=\"submit\" variant=\"outline\" size=\"sm\">\n {createRow.label ?? localeText.addRow}\n </Button>\n </form>\n </td>\n </tr>\n );\n}\n\n/* ─── Export helpers ───────────────────────────────────────────────── */\n\nexport function exportToCSV<TData>(\n table: Table<TData>,\n filename = 'export.csv',\n options?: { onlySelected?: boolean; includeHidden?: boolean },\n) {\n const cols = options?.includeHidden ? table.getAllLeafColumns() : table.getVisibleLeafColumns();\n const headers = cols.map((column) => column.id);\n const rows = options?.onlySelected\n ? table.getFilteredSelectedRowModel().rows\n : table.getFilteredRowModel().rows;\n const lines = [headers.join(',')];\n for (const row of rows) {\n lines.push(cols.map((column) => escapeCsv(row.getValue(column.id))).join(','));\n }\n download(lines.join('\\n'), filename, 'text/csv;charset=utf-8;');\n}\n\nexport function exportToJSON<TData>(\n table: Table<TData>,\n filename = 'export.json',\n options?: { onlySelected?: boolean },\n) {\n const rows = options?.onlySelected\n ? table.getFilteredSelectedRowModel().rows\n : table.getFilteredRowModel().rows;\n const data = rows.map((row) => row.original);\n download(JSON.stringify(data, null, 2), filename, 'application/json');\n}\n\nfunction download(content: string, filename: string, mime: string) {\n if (typeof document === 'undefined') return;\n const blob = new Blob([content], { type: mime });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = filename;\n anchor.click();\n setTimeout(() => URL.revokeObjectURL(url), 0);\n}\n\n/* ─── Editable Cell helper ─────────────────────────────────────────── */\n\nexport interface EditableCellProps {\n value: unknown;\n onCommit: (next: unknown) => void;\n type?: 'text' | 'number';\n}\n\nexport function EditableCell({ value, onCommit, type = 'text' }: EditableCellProps) {\n const [editing, setEditing] = React.useState(false);\n const [local, setLocal] = React.useState(String(value ?? ''));\n React.useEffect(() => {\n if (!editing) setLocal(String(value ?? ''));\n }, [value, editing]);\n if (!editing) {\n return (\n <span\n tabIndex={0}\n onClick={() => setEditing(true)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') setEditing(true);\n }}\n className=\"hover:bg-accent cursor-text rounded px-1\"\n >\n {String(value ?? '')}\n </span>\n );\n }\n return (\n <Input\n autoFocus\n type={type}\n value={local}\n onChange={(event) => setLocal(event.target.value)}\n onBlur={() => {\n const next = type === 'number' ? Number(local) : local;\n onCommit(next);\n setEditing(false);\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n const next = type === 'number' ? Number(local) : local;\n onCommit(next);\n setEditing(false);\n } else if (event.key === 'Escape') {\n setLocal(String(value ?? ''));\n setEditing(false);\n }\n }}\n className=\"w-full\"\n />\n );\n}\n\n/* ── Mobile card view ──────────────────────────────────────────────── */\nfunction DataTableCardView({\n table,\n breakpoint,\n allRows,\n}: {\n table: Table<unknown>;\n breakpoint: 'sm' | 'md' | 'lg';\n allRows: Row<unknown>[];\n}) {\n const leafColumns = table.getAllLeafColumns().filter(\n (c) => c.getIsVisible() && !c.id.startsWith('__'),\n );\n const hiddenClass =\n breakpoint === 'sm' ? 'sm:hidden' : breakpoint === 'md' ? 'md:hidden' : 'lg:hidden';\n return (\n <div className={cn('grid gap-3', hiddenClass)}>\n {allRows.map((row) => (\n <div\n key={row.id}\n className=\"border-border bg-card rounded-lg border p-4\"\n data-state={row.getIsSelected() ? 'selected' : undefined}\n >\n {leafColumns.map((col) => {\n const cell = row.getAllCells().find((c) => c.column.id === col.id);\n if (!cell) return null;\n const label = typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id;\n return (\n <div key={col.id} className=\"mb-2 flex items-start justify-between gap-2 text-sm last:mb-0\">\n <span className=\"text-muted-foreground shrink-0 font-medium\">{label}</span>\n <span className=\"text-right\">{flexRender(col.columnDef.cell, cell.getContext())}</span>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n}\n\n/* ── Row number column ─────────────────────────────────────────────── */\nfunction createRowNumberColumn<TData>(text: DataTableLocaleText): DataTableColumn<TData, unknown> {\n return {\n id: '__rownum',\n size: 48,\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n header: () => (\n <span className=\"text-muted-foreground text-xs font-medium\">{text.rowNumberHeader}</span>\n ),\n cell: ({ row }) => (\n <span className=\"text-muted-foreground tabular-nums text-xs\">{row.index + 1}</span>\n ),\n };\n}\n\n/* ── Status bar ────────────────────────────────────────────────────── */\nfunction DataTableStatusBar({\n table,\n localeText,\n validationErrorCount = 0,\n}: {\n table: Table<unknown>;\n localeText: DataTableLocaleText;\n validationErrorCount?: number;\n}) {\n const totalRows = table.getFilteredRowModel().rows.length;\n const selectedRows = table.getFilteredSelectedRowModel().rows.length;\n return (\n <div className=\"border-border text-muted-foreground flex items-center gap-4 border-t px-3 py-1.5 text-xs\">\n <span>{localeText.statusBarRows(totalRows)}</span>\n {selectedRows > 0 ? <span>{localeText.statusBarSelected(selectedRows)}</span> : null}\n {validationErrorCount > 0 ? (\n <span className=\"text-destructive\">{validationErrorCount} validation error{validationErrorCount !== 1 ? 's' : ''}</span>\n ) : null}\n </div>\n );\n}\n\nfunction createSelectionColumn<TData>(multi: boolean): DataTableColumn<TData, unknown> {\n return {\n id: '__select',\n size: 42,\n enableSorting: false,\n enableHiding: false,\n header: ({ table }) =>\n multi ? (\n <Checkbox\n aria-label=\"Select all rows\"\n checked={\n table.getIsAllPageRowsSelected()\n ? true\n : table.getIsSomePageRowsSelected()\n ? 'indeterminate'\n : false\n }\n onCheckedChange={(checked) => table.toggleAllPageRowsSelected(checked === true)}\n />\n ) : null,\n cell: ({ row }) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n disabled={!row.getCanSelect()}\n onCheckedChange={(checked) => row.toggleSelected(checked === true)}\n />\n ),\n };\n}\n\nfunction createActionColumn<TData>(\n rowActions: (row: Row<TData>) => React.ReactNode,\n text: DataTableLocaleText,\n): DataTableColumn<TData, unknown> {\n return {\n id: '__actions',\n header: text.rowActions,\n enableSorting: false,\n enableHiding: false,\n cell: ({ row }) => rowActions(row),\n };\n}\n\nfunction createRowTotalColumn<TData>(\n rowTotals: boolean | DataTableRowTotals<TData>,\n text: DataTableLocaleText,\n): DataTableColumn<TData, unknown> {\n const options = typeof rowTotals === 'object' ? rowTotals : {};\n const id = options.id ?? '__row_total';\n return {\n id,\n header: () => options.header ?? text.rowTotal,\n enableSorting: false,\n cell: ({ row, table }) => {\n const columns = options.columns ?? table.getVisibleLeafColumns().map((column) => column.id);\n const total = columns.reduce((sum, columnId) => sum + toNumber(row.getValue(columnId)), 0);\n return options.format?.(total, row) ?? total;\n },\n };\n}\n\n/* ─── Bulk actions bar ─────────────────────────────────────────────── */\n\ninterface DataTableBulkActionsBarProps<TData = unknown> {\n table: Table<TData>;\n actions: DataTableBulkAction<TData>[];\n localeText: DataTableLocaleText;\n}\n\nfunction DataTableBulkActionsBar<TData>({\n table,\n actions,\n localeText,\n}: DataTableBulkActionsBarProps<TData>) {\n const selectedRows = table.getFilteredSelectedRowModel().rows;\n const count = selectedRows.length;\n if (count === 0) return null;\n return (\n <div className=\"bg-primary/10 border-primary/30 flex flex-wrap items-center justify-between gap-2 rounded-md border px-3 py-2\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-primary text-sm font-medium\">\n {localeText.bulkActionsTitle(count)}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-muted-foreground h-7 px-2 text-xs\"\n onClick={() => table.resetRowSelection()}\n >\n {localeText.clearSelection}\n </Button>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n {actions.map((action) => {\n const isDisabled =\n typeof action.disabled === 'function'\n ? action.disabled(selectedRows as Row<TData>[])\n : (action.disabled ?? false);\n return (\n <Button\n key={action.id}\n type=\"button\"\n variant={action.variant === 'destructive' ? 'destructive' : 'outline'}\n size=\"sm\"\n disabled={isDisabled}\n title={action.tooltip}\n aria-label={typeof action.label === 'string' ? action.label : action.id}\n onClick={() => action.onClick(selectedRows as Row<TData>[], table)}\n className=\"h-8\"\n >\n {action.icon ? (\n <span className=\"inline-flex items-center gap-1.5\">\n {action.icon}\n {action.label}\n </span>\n ) : (\n action.label\n )}\n </Button>\n );\n })}\n </div>\n </div>\n );\n}\n\n/* ─── Structured row action columns ────────────────────────────────── */\n\nfunction createRowActionMenuColumn<TData>(\n items: DataTableRowActionItem[],\n text: DataTableLocaleText,\n): DataTableColumn<TData, unknown> {\n return {\n id: '__action_menu',\n header: text.rowActions,\n size: 52,\n enableSorting: false,\n enableHiding: false,\n cell: ({ row }) => {\n const visibleItems = items.filter((item) => {\n const hidden =\n typeof item.hidden === 'function' ? item.hidden(row as Row<unknown>) : (item.hidden ?? false);\n return !hidden;\n });\n if (!visibleItems.length) return null;\n return (\n <span\n className=\"inline-flex\"\n onClick={(e) => e.stopPropagation()}\n onPointerDown={(e) => e.stopPropagation()}\n >\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n aria-label={text.rowActions}\n className=\"h-7 w-7\"\n >\n ⋮\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n align=\"end\"\n strategy=\"absolute\"\n sticky=\"always\"\n className=\"bg-popover relative z-[1000] min-w-36 overflow-hidden\"\n >\n {visibleItems.map((item) => {\n const isDisabled =\n typeof item.disabled === 'function'\n ? item.disabled(row as Row<unknown>)\n : (item.disabled ?? false);\n return (\n <React.Fragment key={item.id}>\n {item.separator ? <DropdownMenu.Separator /> : null}\n <DropdownMenu.Item\n disabled={isDisabled}\n className={cn(\n 'flex cursor-pointer items-center gap-2',\n item.variant === 'destructive' && 'text-destructive',\n isDisabled && 'cursor-not-allowed opacity-50',\n )}\n onSelect={() => item.onClick(row as Row<unknown>)}\n >\n {item.icon ? <span className=\"size-4 shrink-0\">{item.icon}</span> : null}\n {item.label}\n </DropdownMenu.Item>\n </React.Fragment>\n );\n })}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </span>\n );\n },\n };\n}\n\nfunction createRowActionButtonsColumn<TData>(\n items: DataTableRowActionItem[],\n text: DataTableLocaleText,\n): DataTableColumn<TData, unknown> {\n return {\n id: '__action_buttons',\n header: text.rowActions,\n size: Math.max(items.length * 80, 100),\n enableSorting: false,\n enableHiding: false,\n cell: ({ row }) => {\n const visibleItems = items.filter((item) => {\n const hidden =\n typeof item.hidden === 'function' ? item.hidden(row as Row<unknown>) : (item.hidden ?? false);\n return !hidden;\n });\n return (\n <div className=\"flex flex-wrap items-center gap-1\">\n {visibleItems.map((item) => {\n const isDisabled =\n typeof item.disabled === 'function'\n ? item.disabled(row as Row<unknown>)\n : (item.disabled ?? false);\n return (\n <Button\n key={item.id}\n type=\"button\"\n variant={item.variant === 'destructive' ? 'destructive' : 'outline'}\n size=\"sm\"\n disabled={isDisabled}\n title={item.tooltip}\n aria-label={typeof item.label === 'string' ? item.label : item.id}\n onClick={() => item.onClick(row as Row<unknown>)}\n className=\"h-7\"\n >\n {item.icon ? (\n <span className=\"inline-flex items-center gap-1\">\n {item.icon}\n {item.label}\n </span>\n ) : (\n item.label\n )}\n </Button>\n );\n })}\n </div>\n );\n },\n };\n}\n\n/* ─── Built-in cell renderers ──────────────────────────────────────── */\n\ninterface BuiltinCellRendererOptions<TData, _TValue> {\n type: DataTableColumnType;\n badgeMap?: Record<string, { label?: string; color?: string; textColor?: string }>;\n currencyCode?: string;\n currencyLocale?: string;\n linkHref?: string | ((value: unknown, row: TData) => string);\n linkTarget?: '_blank' | '_self';\n avatarSrc?: (value: unknown, row: TData) => string;\n sparklineData?: (row: TData) => number[];\n sparklineType?: 'line' | 'bar' | 'area';\n progressMax?: number;\n ratingMax?: number;\n field: string;\n // Feature 6: formatting\n locale?: string;\n dateFormat?: Intl.DateTimeFormatOptions;\n numberFormat?: Intl.NumberFormatOptions;\n timezone?: string;\n}\n\nfunction SparklineSVG({\n data,\n type = 'line',\n}: {\n data: number[];\n type?: 'line' | 'bar' | 'area';\n}) {\n const width = 60;\n const height = 20;\n if (!data.length) return <svg width={width} height={height} />;\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n const normalize = (v: number) => height - ((v - min) / range) * (height - 2) - 1;\n\n if (type === 'bar') {\n const barW = Math.max(1, (width / data.length) - 1);\n return (\n <svg width={width} height={height} aria-hidden=\"true\">\n {data.map((v, i) => {\n const barH = Math.max(1, ((v - min) / range) * (height - 2));\n return (\n <rect\n key={i}\n x={i * (width / data.length)}\n y={height - barH}\n width={barW}\n height={barH}\n fill=\"hsl(var(--primary))\"\n />\n );\n })}\n </svg>\n );\n }\n\n const points = data.map((v, i) => `${(i / Math.max(data.length - 1, 1)) * width},${normalize(v)}`).join(' ');\n\n if (type === 'area') {\n const firstX = 0;\n const lastX = width;\n const areaPath = `M${firstX},${height} L${points.split(' ').map(p => p).join(' L')} L${lastX},${height} Z`;\n return (\n <svg width={width} height={height} aria-hidden=\"true\">\n <path d={areaPath} fill=\"hsl(var(--primary))\" fillOpacity=\"0.3\" stroke=\"none\" />\n <polyline\n points={points}\n fill=\"none\"\n stroke=\"hsl(var(--primary))\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n }\n\n // line (default)\n return (\n <svg width={width} height={height} aria-hidden=\"true\">\n <polyline\n points={points}\n fill=\"none\"\n stroke=\"hsl(var(--primary))\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n/* eslint-disable react/display-name */\nfunction buildBuiltinCellRenderer<TData, TValue>({\n type,\n badgeMap,\n currencyCode,\n currencyLocale,\n linkHref,\n linkTarget,\n avatarSrc,\n sparklineData,\n sparklineType,\n progressMax = 100,\n ratingMax = 5,\n locale: colLocale,\n dateFormat,\n numberFormat,\n timezone,\n}: BuiltinCellRendererOptions<TData, TValue>): ((ctx: { row: Row<TData>; getValue: () => TValue }) => React.ReactNode) | undefined {\n const resolvedLocale = colLocale ?? 'en-US';\n switch (type) {\n case 'badge':\n return ({ getValue }) => {\n const value = getValue();\n const str = String(value ?? '');\n const spec = badgeMap?.[str];\n const label = spec?.label ?? str;\n const bg = spec?.color ?? '#6b7280';\n const fg = spec?.textColor ?? '#ffffff';\n return (\n <span\n style={{ background: bg, color: fg }}\n className=\"inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium\"\n >\n {label}\n </span>\n );\n };\n\n case 'progress':\n return ({ getValue }) => {\n const value = Number(getValue() ?? 0);\n const percent = Math.min(100, Math.max(0, (value / progressMax) * 100));\n return (\n <div className=\"relative h-4 w-full min-w-12 overflow-hidden rounded bg-muted\">\n <div\n className=\"h-full rounded bg-primary transition-all\"\n style={{ width: `${percent}%` }}\n />\n <span className=\"absolute inset-0 flex items-center justify-center text-[10px] font-medium leading-none\">\n {value}%\n </span>\n </div>\n );\n };\n\n case 'link':\n return ({ getValue, row }) => {\n const value = getValue();\n const str = String(value ?? '');\n const href = typeof linkHref === 'function'\n ? linkHref(value, row.original)\n : (linkHref ?? str);\n return (\n <a\n href={href}\n target={linkTarget ?? '_blank'}\n rel=\"noopener noreferrer\"\n className=\"text-primary underline-offset-2 hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n {str}\n </a>\n );\n };\n\n case 'avatar':\n return ({ getValue, row }) => {\n const value = getValue();\n const str = String(value ?? '');\n const src = avatarSrc ? avatarSrc(value, row.original) : '';\n return (\n <div className=\"flex items-center gap-2\">\n {src ? (\n <img\n src={src}\n alt={str}\n className=\"h-7 w-7 rounded-full object-cover\"\n />\n ) : (\n <span className=\"flex h-7 w-7 items-center justify-center rounded-full bg-muted text-xs font-medium\">\n {str.charAt(0).toUpperCase()}\n </span>\n )}\n <span>{str}</span>\n </div>\n );\n };\n\n case 'date':\n return ({ getValue }) => {\n const raw = getValue();\n if (raw == null || raw === '') return null;\n try {\n const d = new Date(raw as string);\n if (isNaN(d.getTime())) return <span>{String(raw)}</span>;\n return <span>{new Intl.DateTimeFormat(resolvedLocale, dateFormat ?? { year: 'numeric', month: 'short', day: 'numeric' }).format(d)}</span>;\n } catch {\n return <span>{String(raw)}</span>;\n }\n };\n\n case 'dateTime':\n return ({ getValue }) => {\n const raw = getValue();\n if (raw == null || raw === '') return null;\n try {\n const d = new Date(raw as string);\n if (isNaN(d.getTime())) return <span>{String(raw)}</span>;\n const opts: Intl.DateTimeFormatOptions = dateFormat ?? {\n year: 'numeric', month: 'short', day: 'numeric',\n hour: '2-digit', minute: '2-digit',\n ...(timezone ? { timeZone: timezone } : {}),\n };\n return <span>{new Intl.DateTimeFormat(resolvedLocale, opts).format(d)}</span>;\n } catch {\n return <span>{String(raw)}</span>;\n }\n };\n\n case 'number':\n return ({ getValue }) => {\n const raw = getValue();\n if (raw == null || raw === '') return null;\n const num = Number(raw);\n if (!Number.isFinite(num)) return <span>{String(raw)}</span>;\n return <span className=\"tabular-nums\">{new Intl.NumberFormat(resolvedLocale, numberFormat).format(num)}</span>;\n };\n\n case 'currency':\n return ({ getValue }) => {\n const value = Number(getValue() ?? 0);\n const formatted = new Intl.NumberFormat(colLocale ?? currencyLocale ?? 'en-US', {\n style: 'currency',\n currency: currencyCode ?? 'USD',\n ...(numberFormat ?? {}),\n }).format(value);\n return <span className=\"tabular-nums\">{formatted}</span>;\n };\n\n case 'sparkline':\n return ({ row }) => {\n const data = sparklineData ? sparklineData(row.original) : [];\n return <SparklineSVG data={data} type={sparklineType} />;\n };\n\n case 'rating':\n return ({ getValue }) => {\n const value = Number(getValue() ?? 0);\n const stars = Array.from({ length: ratingMax }, (_, i) => i + 1);\n return (\n <span className=\"inline-flex items-center gap-0.5\" aria-label={`${value} out of ${ratingMax} stars`}>\n {stars.map((star) => (\n <span\n key={star}\n className={star <= value ? 'text-yellow-400' : 'text-muted-foreground/30'}\n aria-hidden=\"true\"\n >\n ★\n </span>\n ))}\n </span>\n );\n };\n\n case 'boolean':\n return ({ getValue }) => {\n const value = getValue();\n const isTrue = value === true || value === 'true' || value === 1 || value === '1';\n return isTrue ? (\n <span className=\"text-green-500 font-bold\" aria-label=\"Yes\">✓</span>\n ) : (\n <span className=\"text-muted-foreground\" aria-label=\"No\">✗</span>\n );\n };\n\n default:\n return undefined;\n }\n}\n/* eslint-enable react/display-name */\n\n/* ─── Keyboard shortcuts modal ─────────────────────────────────────── */\n\nfunction DataTableKeyboardShortcutsModal({\n open,\n onOpenChange,\n enablePaste: showPaste,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n enablePaste?: boolean;\n}) {\n const shortcuts: { key: string; action: string; show?: boolean }[] = [\n { key: 'Ctrl+F', action: 'Focus search' },\n { key: 'Ctrl+C', action: 'Copy selected rows' },\n { key: 'Ctrl+V', action: 'Paste (if enablePaste)', show: showPaste },\n { key: 'Shift+Click', action: 'Multi-sort column' },\n { key: 'Space', action: 'Toggle row selection' },\n { key: 'Enter', action: 'Expand / collapse row' },\n { key: '?', action: 'Show this help' },\n { key: 'Escape', action: 'Close panels' },\n { key: 'F11', action: 'Toggle fullscreen' },\n { key: 'Ctrl+Z', action: 'Undo last edit' },\n { key: 'Ctrl+Y', action: 'Redo last edit' },\n ];\n\n const visible = shortcuts.filter((s) => s.show !== false);\n\n return (\n <Drawer.Root open={open} onOpenChange={onOpenChange}>\n <Drawer.Content\n style={\n {\n top: '50%',\n left: '50%',\n right: 'auto',\n bottom: 'auto',\n transform: 'translate(-50%, -50%)',\n height: 'auto',\n maxHeight: '90vh',\n width: '480px',\n maxWidth: '95vw',\n marginTop: 0,\n borderRadius: '0.5rem',\n '--tw-enter-translate-y': '0',\n '--tw-exit-translate-y': '0',\n } as React.CSSProperties\n }\n className=\"flex flex-col overflow-hidden [&>div:first-child]:hidden\"\n >\n <Drawer.Header className=\"border-border flex-shrink-0 border-b px-4 py-3 text-left\">\n <Drawer.Title>Keyboard Shortcuts</Drawer.Title>\n <Drawer.Description>\n All keyboard shortcuts available in the data table.\n </Drawer.Description>\n </Drawer.Header>\n <div className=\"overflow-y-auto p-4\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-border border-b\">\n <th className=\"pb-2 text-left font-medium\">Shortcut</th>\n <th className=\"pb-2 text-left font-medium\">Action</th>\n </tr>\n </thead>\n <tbody>\n {visible.map((s) => (\n <tr key={s.key} className=\"border-border border-b last:border-0\">\n <td className=\"py-2 pr-4\">\n <kbd className=\"bg-muted border-border rounded border px-1.5 py-0.5 font-mono text-xs\">\n {s.key}\n </kbd>\n </td>\n <td className=\"text-muted-foreground py-2\">{s.action}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <div className=\"border-border border-t p-3\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" className=\"w-full\" onClick={() => onOpenChange(false)}>\n Close\n </Button>\n </div>\n </Drawer.Content>\n </Drawer.Root>\n );\n}\n\n/* ─── Tool Panel (Feature 2) ───────────────────────────────────────── */\n\nfunction computeColumnStats(rows: Row<unknown>[], columnId: string): ColumnStats {\n const values = rows.map((row) => row.getValue(columnId));\n const count = values.length;\n const nullCount = values.filter((v) => v == null || v === '').length;\n const uniqueValues = new Set(values.map((v) => String(v ?? '')));\n const uniqueCount = uniqueValues.size;\n\n const numericValues = values\n .map((v) => Number(v))\n .filter((n) => Number.isFinite(n));\n const isNumeric = numericValues.length > 0 && numericValues.length === values.filter((v) => v != null && v !== '').length;\n\n let min: number | undefined;\n let max: number | undefined;\n let mean: number | undefined;\n let median: number | undefined;\n let sum: number | undefined;\n\n if (isNumeric && numericValues.length > 0) {\n min = Math.min(...numericValues);\n max = Math.max(...numericValues);\n sum = numericValues.reduce((a, b) => a + b, 0);\n mean = sum / numericValues.length;\n const sorted = [...numericValues].sort((a, b) => a - b);\n const mid = Math.floor(sorted.length / 2);\n median = sorted.length % 2 === 0\n ? ((sorted[mid - 1] ?? 0) + (sorted[mid] ?? 0)) / 2\n : (sorted[mid] ?? 0);\n }\n\n const stringValues = values.map((v) => String(v ?? ''));\n const minLength = Math.min(...stringValues.map((s) => s.length));\n const maxLength = Math.max(...stringValues.map((s) => s.length));\n const avgLength = stringValues.length > 0\n ? stringValues.reduce((a, s) => a + s.length, 0) / stringValues.length\n : 0;\n\n // Top 5 values by frequency\n const freq = new Map<string, number>();\n for (const sv of stringValues) {\n freq.set(sv, (freq.get(sv) ?? 0) + 1);\n }\n const topValues = [...freq.entries()]\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .map(([value, cnt]) => ({\n value,\n count: cnt,\n pct: count > 0 ? (cnt / count) * 100 : 0,\n }));\n\n return {\n count,\n nullCount,\n uniqueCount,\n min: isNumeric ? min : undefined,\n max: isNumeric ? max : undefined,\n mean: isNumeric ? mean : undefined,\n median: isNumeric ? median : undefined,\n sum: isNumeric ? sum : undefined,\n minLength: !isNumeric ? minLength : undefined,\n maxLength: !isNumeric ? maxLength : undefined,\n avgLength: !isNumeric ? avgLength : undefined,\n topValues,\n };\n}\n\nfunction ColumnStatsPanel({\n table,\n columnId,\n}: {\n table: Table<unknown>;\n columnId: string | undefined;\n}) {\n const col = columnId ? table.getColumn(columnId) : undefined;\n const rows = table.getFilteredRowModel().rows;\n\n const stats = React.useMemo<ColumnStats | null>(() => {\n if (!col) return null;\n return computeColumnStats(rows, col.id);\n }, [col, rows]);\n\n if (!col || !stats) {\n return (\n <p className=\"text-muted-foreground py-6 text-center text-xs\">\n Select a column to view statistics.\n </p>\n );\n }\n\n const colHeader = typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id;\n const isNumeric = stats.min !== undefined;\n\n // Histogram data\n const histData: { label: string; count: number }[] = (() => {\n if (isNumeric) {\n const numVals = rows\n .map((r) => Number(r.getValue(col.id)))\n .filter((n) => Number.isFinite(n));\n if (numVals.length === 0) return [];\n const minV = stats.min ?? 0;\n const maxV = stats.max ?? 0;\n const bucketCount = 8;\n const bucketSize = (maxV - minV) / bucketCount || 1;\n const buckets = Array.from({ length: bucketCount }, (_, i) => ({\n label: (minV + i * bucketSize).toFixed(1),\n count: 0,\n }));\n for (const v of numVals) {\n const idx = Math.min(Math.floor((v - minV) / bucketSize), bucketCount - 1);\n if (buckets[idx]) buckets[idx]!.count++;\n }\n return buckets;\n } else {\n return stats.topValues.slice(0, 8).map((tv) => ({ label: tv.value || '(empty)', count: tv.count }));\n }\n })();\n\n const maxHistCount = Math.max(...histData.map((b) => b.count), 1);\n const svgW = 200;\n const svgH = 60;\n const barW = Math.floor((svgW - (histData.length - 1) * 2) / Math.max(histData.length, 1));\n\n return (\n <div className=\"grid gap-3 p-1\">\n <p className=\"text-xs font-semibold\">{colHeader}</p>\n {/* Key metrics grid */}\n <div className=\"grid grid-cols-2 gap-1 text-xs\">\n {[\n { label: 'Count', value: stats.count },\n { label: 'Nulls', value: stats.nullCount },\n { label: 'Unique', value: stats.uniqueCount },\n ...(isNumeric ? [\n { label: 'Min', value: stats.min?.toFixed(2) },\n { label: 'Max', value: stats.max?.toFixed(2) },\n { label: 'Mean', value: stats.mean?.toFixed(2) },\n { label: 'Median', value: stats.median?.toFixed(2) },\n { label: 'Sum', value: stats.sum?.toFixed(2) },\n ] : [\n { label: 'Min len', value: stats.minLength },\n { label: 'Max len', value: stats.maxLength },\n { label: 'Avg len', value: stats.avgLength?.toFixed(1) },\n ]),\n ].map((metric) => (\n <div key={metric.label} className=\"bg-muted/40 rounded px-2 py-1\">\n <div className=\"text-muted-foreground text-[10px]\">{metric.label}</div>\n <div className=\"font-medium tabular-nums\">{String(metric.value ?? '—')}</div>\n </div>\n ))}\n </div>\n\n {/* Mini histogram */}\n {histData.length > 0 ? (\n <div className=\"grid gap-1\">\n <p className=\"text-muted-foreground text-[10px] font-medium uppercase tracking-wide\">\n Distribution\n </p>\n <svg width={svgW} height={svgH} aria-label=\"Distribution histogram\">\n {histData.map((bucket, i) => {\n const barH = Math.max(2, (bucket.count / maxHistCount) * (svgH - 4));\n return (\n <rect\n key={i}\n x={i * (barW + 2)}\n y={svgH - barH}\n width={barW}\n height={barH}\n fill=\"hsl(var(--primary))\"\n fillOpacity={0.7}\n rx={1}\n >\n <title>{bucket.label}: {bucket.count}</title>\n </rect>\n );\n })}\n </svg>\n </div>\n ) : null}\n\n {/* Top values */}\n {stats.topValues.length > 0 ? (\n <div className=\"grid gap-1\">\n <p className=\"text-muted-foreground text-[10px] font-medium uppercase tracking-wide\">\n Top values\n </p>\n {stats.topValues.map((tv) => (\n <div key={tv.value} className=\"grid gap-0.5\">\n <div className=\"flex items-center justify-between text-[10px]\">\n <span className=\"max-w-[130px] truncate\">{tv.value || '(empty)'}</span>\n <span className=\"text-muted-foreground tabular-nums\">{tv.count}</span>\n </div>\n <div className=\"bg-muted h-1.5 w-full rounded-full\">\n <div\n className=\"bg-primary h-1.5 rounded-full\"\n style={{ width: `${tv.pct.toFixed(1)}%` }}\n />\n </div>\n </div>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface DataTableToolPanelProps {\n table: Table<unknown>;\n open: boolean;\n tab: 'columns' | 'filters' | 'stats';\n onTabChange: (tab: 'columns' | 'filters' | 'stats') => void;\n onOpenChange: (open: boolean) => void;\n statsColumnId?: string;\n onStatsColumnChange?: (columnId: string) => void;\n}\n\nfunction DataTableToolPanel({\n table,\n open,\n tab,\n onTabChange,\n onOpenChange,\n statsColumnId,\n onStatsColumnChange,\n}: DataTableToolPanelProps) {\n const tabTitles: Record<'columns' | 'filters' | 'stats', string> = {\n columns: 'Columns',\n filters: 'Filters',\n stats: 'Statistics',\n };\n\n const handleTabClick = (t: 'columns' | 'filters' | 'stats') => {\n if (open && tab === t) {\n onOpenChange(false);\n } else {\n onTabChange(t);\n onOpenChange(true);\n }\n };\n\n const allColumns = table.getAllLeafColumns().filter((c) => !c.id.startsWith('__'));\n const filterableColumns = allColumns.filter((c) => c.getCanFilter());\n\n return (\n <div className=\"flex\">\n {/* Expanded panel */}\n <div\n className={cn(\n 'border-border bg-bg overflow-hidden border-l transition-all duration-200',\n open ? 'w-64' : 'w-0',\n )}\n aria-hidden={!open}\n >\n {open ? (\n <div className=\"flex h-full w-64 flex-col overflow-hidden\">\n {/* Header */}\n <div className=\"border-border flex items-center justify-between border-b px-3 py-2\">\n <span className=\"text-sm font-semibold\">{tabTitles[tab]}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => onOpenChange(false)}\n aria-label=\"Close panel\"\n className=\"h-6 w-6\"\n >\n <X className=\"size-3.5\" />\n </Button>\n </div>\n {/* Content */}\n <div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n {tab === 'columns' ? (\n <div className=\"grid gap-0.5\">\n <div className=\"mb-1 flex gap-1\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-6 flex-1 px-1 text-xs\"\n onClick={() => table.getAllLeafColumns().forEach((c) => c.toggleVisibility(true))}\n >\n Show all\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-6 flex-1 px-1 text-xs\"\n onClick={() => table.getAllLeafColumns().filter((c) => c.getCanHide()).forEach((c) => c.toggleVisibility(false))}\n >\n Hide all\n </Button>\n </div>\n {allColumns.map((col) => {\n const structylMeta = getStructylMeta(col);\n const label = typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id;\n return (\n <label\n key={col.id}\n className=\"hover:bg-accent flex items-center gap-2 rounded px-2 py-1 text-xs\"\n >\n <Checkbox\n checked={col.getIsVisible()}\n disabled={!col.getCanHide()}\n onCheckedChange={(checked) => col.toggleVisibility(checked === true)}\n aria-label={`Toggle ${label}`}\n />\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {structylMeta.type ? (\n <span className=\"text-muted-foreground bg-muted rounded px-1 py-0.5 font-mono text-[9px]\">\n {structylMeta.type}\n </span>\n ) : null}\n </label>\n );\n })}\n </div>\n ) : tab === 'filters' ? (\n <div className=\"grid gap-2\">\n {filterableColumns.length === 0 ? (\n <p className=\"text-muted-foreground py-4 text-center text-xs\">No filterable columns.</p>\n ) : (\n <>\n {filterableColumns.map((col) => {\n const label = typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id;\n return (\n <label key={col.id} className=\"grid gap-0.5 text-xs\">\n <span className=\"text-muted-foreground font-medium\">{label}</span>\n <Input\n value={String(col.getFilterValue() ?? '')}\n onChange={(e) => col.setFilterValue(e.target.value || undefined)}\n placeholder=\"Filter…\"\n className=\"h-7 text-xs\"\n />\n </label>\n );\n })}\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-1 h-7 text-xs\"\n onClick={() => filterableColumns.forEach((c) => c.setFilterValue(undefined))}\n >\n Clear all\n </Button>\n </>\n )}\n </div>\n ) : (\n <div className=\"grid gap-2\">\n {statsColumnId ? null : (\n <div className=\"grid gap-0.5\">\n <p className=\"text-muted-foreground mb-1 text-xs\">Select column:</p>\n {allColumns.map((col) => {\n const label = typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id;\n return (\n <button\n key={col.id}\n type=\"button\"\n onClick={() => onStatsColumnChange?.(col.id)}\n className={cn(\n 'hover:bg-accent rounded px-2 py-1 text-left text-xs',\n statsColumnId === col.id && 'bg-accent',\n )}\n >\n {label}\n </button>\n );\n })}\n </div>\n )}\n <ColumnStatsPanel table={table} columnId={statsColumnId} />\n {statsColumnId ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 text-xs\"\n onClick={() => onStatsColumnChange?.(undefined as unknown as string)}\n >\n ← Back to column list\n </Button>\n ) : null}\n </div>\n )}\n </div>\n </div>\n ) : null}\n </div>\n\n {/* Icon strip */}\n <div className=\"border-border bg-muted/20 flex flex-col border-l\">\n {([['columns', <Columns3 key=\"c\" className=\"size-4\" />], ['filters', <Filter key=\"f\" className=\"size-4\" />], ['stats', <BarChart2 key=\"s\" className=\"size-4\" />]] as const).map(([t, icon]) => (\n <button\n key={t}\n type=\"button\"\n onClick={() => handleTabClick(t)}\n title={tabTitles[t]}\n aria-label={tabTitles[t]}\n className={cn(\n 'flex h-10 w-8 items-center justify-center transition-colors',\n open && tab === t\n ? 'bg-primary/10 text-primary'\n : 'text-muted-foreground hover:bg-accent hover:text-foreground',\n )}\n >\n {icon}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n/* ─── Excel (XLSX) export ──────────────────────────────────────────── */\n\nexport function exportToXLSX<TData>(\n table: Table<TData>,\n options?: { filename?: string; onlySelected?: boolean; sheetName?: string },\n): void {\n if (typeof document === 'undefined') return;\n const cols = table.getVisibleLeafColumns().filter(\n (c) => !['__select', '__rownum', '__row_actions', '__row_total', '__action_menu', '__action_buttons', '__actions'].includes(c.id),\n );\n const rows = options?.onlySelected\n ? table.getFilteredSelectedRowModel().rows\n : table.getFilteredRowModel().rows;\n\n const headerRow = cols.map((c) =>\n typeof c.columnDef.header === 'string' ? c.columnDef.header : c.id,\n );\n const dataRows = rows.map((row) => cols.map((c) => row.getValue(c.id) ?? ''));\n\n const wsData = [headerRow, ...dataRows];\n const ws = XLSX.utils.aoa_to_sheet(wsData);\n\n // Set column widths based on header length\n ws['!cols'] = headerRow.map((h) => ({ wch: Math.max(String(h).length + 4, 10) }));\n\n const wb = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, options?.sheetName ?? 'Sheet1');\n XLSX.writeFile(wb, options?.filename ?? 'export.xlsx');\n}\n\n/* ─── Column normalization ─────────────────────────────────────────── */\n\ninterface StructylColumnMeta {\n type?: DataTableColumnType;\n align?: 'left' | 'center' | 'right';\n flex?: number;\n fieldId?: string;\n description?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n valueSetter?: (row: any, value: any, rowIndex: number) => void;\n filterOperators?: DataTableFilterOperator[];\n // Extended column type metadata\n badgeMap?: Record<string, { label?: string; color?: string; textColor?: string }>;\n currencyCode?: string;\n currencyLocale?: string;\n linkHref?: string | ((value: unknown, row: unknown) => string);\n linkTarget?: '_blank' | '_self';\n avatarSrc?: (value: unknown, row: unknown) => string;\n sparklineData?: (row: unknown) => number[];\n sparklineType?: 'line' | 'bar' | 'area';\n progressMax?: number;\n ratingMax?: number;\n editable?: boolean;\n validate?: (value: unknown, row: unknown) => string | undefined;\n displayValidate?: (value: unknown, row: unknown) => string | undefined;\n // Feature 6: Formatting\n locale?: string;\n dateFormat?: Intl.DateTimeFormatOptions;\n numberFormat?: Intl.NumberFormatOptions;\n timezone?: string;\n propLocale?: string;\n}\n\nfunction getStructylMeta<TData = unknown, TValue = unknown>(\n column: Column<TData, TValue>,\n): StructylColumnMeta {\n const meta = column.columnDef.meta as Record<string, unknown> | undefined;\n return (meta?._structyl as StructylColumnMeta) ?? {};\n}\n\nfunction getDefaultColumnAlign(type?: DataTableColumnType): 'left' | 'center' | 'right' | undefined {\n if (type === 'number' || type === 'currency') return 'right';\n if (type === 'date' || type === 'dateTime') return 'right';\n if (type === 'boolean' || type === 'rating') return 'center';\n return undefined;\n}\n\nfunction normalizeColumnDefs<TData, TValue>(\n defs: DataTableColumnDef<TData, TValue>[],\n tablePropLocale?: string,\n): DataTableColumn<TData, TValue>[] {\n return defs.map((def) => {\n const {\n field,\n fieldId,\n headerName,\n type,\n align,\n flex,\n valueGetter,\n valueSetter,\n renderCell,\n renderHeader,\n description,\n filterOperators: colFilterOps,\n // Extended column type fields\n badgeMap,\n currencyCode,\n currencyLocale,\n linkHref,\n linkTarget,\n avatarSrc,\n sparklineData,\n sparklineType,\n progressMax,\n ratingMax,\n editable,\n validate,\n displayValidate,\n // Feature 6: formatting\n locale: colLocale,\n dateFormat,\n numberFormat,\n timezone,\n ...rest\n } = def;\n\n // Use a loose record so we can set properties that are union-discriminated\n const col: Record<string, unknown> = { ...(rest as Record<string, unknown>) };\n const restRecord = rest as Record<string, unknown>;\n\n // ── Column groups: if def.columns is present, normalize recursively ──\n if (def.columns && def.columns.length > 0) {\n col.columns = normalizeColumnDefs(def.columns, tablePropLocale);\n if (headerName && !restRecord.header && !renderHeader) col.header = headerName;\n if (renderHeader && !restRecord.header) {\n col.header = (ctx: { column: Column<TData, TValue> }) => renderHeader({ column: ctx.column });\n }\n // Remove accessor fields for group columns\n delete col.accessorKey;\n delete col.accessorFn;\n col.meta = { ...(restRecord.meta as object | undefined) };\n return col as unknown as DataTableColumn<TData, TValue>;\n }\n\n if (fieldId && !restRecord.id) col.id = fieldId;\n if (field && !restRecord.accessorKey && !restRecord.accessorFn) col.accessorKey = field;\n if (valueGetter && !restRecord.accessorFn && !(field ?? restRecord.accessorKey)) {\n col.accessorFn = (row: TData) => valueGetter(row);\n }\n if (headerName && !restRecord.header && !renderHeader) col.header = headerName;\n if (renderHeader && !restRecord.header) {\n col.header = (ctx: { column: Column<TData, TValue> }) => renderHeader({ column: ctx.column });\n }\n if (renderCell && !restRecord.cell) {\n col.cell = (ctx: { row: Row<TData>; getValue: () => TValue }) =>\n renderCell({\n row: ctx.row,\n value: ctx.getValue(),\n field: String(field ?? restRecord.accessorKey ?? restRecord.id ?? ''),\n });\n }\n\n // ── Inject built-in cell renderer based on type ──────────────────\n if (!renderCell && !restRecord.cell && type) {\n col.cell = buildBuiltinCellRenderer<TData, TValue>({\n type,\n badgeMap,\n currencyCode,\n currencyLocale,\n linkHref,\n linkTarget,\n avatarSrc,\n sparklineData,\n sparklineType,\n progressMax,\n ratingMax,\n field: String(field ?? restRecord.accessorKey ?? restRecord.id ?? ''),\n locale: colLocale ?? tablePropLocale,\n dateFormat,\n numberFormat,\n timezone,\n });\n }\n\n col.meta = {\n ...(restRecord.meta as object | undefined),\n _structyl: {\n type,\n align: align ?? getDefaultColumnAlign(type),\n flex,\n fieldId,\n description,\n valueSetter,\n filterOperators: colFilterOps,\n badgeMap,\n currencyCode,\n currencyLocale,\n // Cast TData-specific function types to unknown to satisfy StructylColumnMeta\n linkHref: linkHref as StructylColumnMeta['linkHref'],\n linkTarget,\n avatarSrc: avatarSrc as StructylColumnMeta['avatarSrc'],\n sparklineData: sparklineData as StructylColumnMeta['sparklineData'],\n sparklineType,\n progressMax,\n ratingMax,\n editable,\n validate: validate as StructylColumnMeta['validate'],\n displayValidate: displayValidate as StructylColumnMeta['displayValidate'],\n locale: colLocale,\n dateFormat,\n numberFormat,\n timezone,\n propLocale: tablePropLocale,\n } satisfies StructylColumnMeta,\n };\n\n return col as unknown as DataTableColumn<TData, TValue>;\n });\n}\n\n/* ─── Toolbar button ───────────────────────────────────────────────── */\n\nexport interface DataTableToolbarButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'color'> {\n tooltip?: string;\n}\n\nexport function DataTableToolbarButton({\n tooltip,\n children,\n className,\n ...props\n}: DataTableToolbarButtonProps) {\n const btn = (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={tooltip ?? (typeof children === 'string' ? children : undefined)}\n className={className}\n {...props}\n >\n {children}\n </Button>\n );\n if (!tooltip) return btn;\n return (\n <Tooltip.Provider>\n <Tooltip.Root>\n <Tooltip.Trigger asChild>{btn}</Tooltip.Trigger>\n <Tooltip.Content>{tooltip}</Tooltip.Content>\n </Tooltip.Root>\n </Tooltip.Provider>\n );\n}\n\n/* ─── Density menu ─────────────────────────────────────────────────── */\n\ninterface DataTableDensityMenuProps {\n density: DataTableDensity;\n onDensityChange: (density: DataTableDensity) => void;\n localeText: DataTableLocaleText;\n overlayBoundary?: HTMLDivElement | null;\n}\n\nfunction DataTableDensityMenu({\n density,\n onDensityChange,\n localeText,\n overlayBoundary,\n}: DataTableDensityMenuProps) {\n const options: { value: DataTableDensity; label: string }[] = [\n { value: 'compact', label: localeText.densityCompact },\n { value: 'standard', label: localeText.densityStandard },\n { value: 'comfortable', label: localeText.densityComfortable },\n ];\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" title={localeText.density}>\n <AlignJustify className=\"mr-1.5 size-4\" />{localeText.density}\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n align=\"end\"\n container={overlayBoundary}\n collisionBoundary={overlayBoundary}\n collisionPadding={8}\n strategy=\"absolute\"\n sticky=\"always\"\n className=\"bg-popover relative z-[1000] min-w-36 overflow-hidden\"\n >\n {options.map((option) => (\n <DropdownMenu.Item\n key={option.value}\n className={cn('cursor-pointer', density === option.value && 'font-semibold')}\n onSelect={() => onDensityChange(option.value)}\n >\n {option.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n}\n\n/* ─── Export menu ─────────────────────────────────────────────────── */\n\ninterface DataTableExportMenuProps {\n table: Table<unknown>;\n localeText: DataTableLocaleText;\n overlayBoundary?: HTMLDivElement | null;\n options: { csv?: boolean; json?: boolean; selectedCsv?: boolean; xlsx?: boolean };\n}\n\nfunction DataTableExportMenu({ table, localeText, overlayBoundary, options }: DataTableExportMenuProps) {\n return (\n <Tooltip.Provider>\n <Tooltip.Root>\n <DropdownMenu.Root>\n <Tooltip.Trigger asChild>\n <DropdownMenu.Trigger asChild>\n <Button type=\"button\" variant=\"outline\" size=\"sm\">\n <Download className=\"mr-1.5 size-4\" />\n {localeText.export ?? 'Export'}\n <ChevronDown className=\"ml-1 size-3\" />\n </Button>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n <Tooltip.Content>{localeText.export ?? 'Export data'}</Tooltip.Content>\n <DropdownMenu.Content\n align=\"end\"\n container={overlayBoundary}\n collisionBoundary={overlayBoundary}\n collisionPadding={8}\n strategy=\"absolute\"\n sticky=\"always\"\n className=\"bg-popover relative z-[1000] min-w-40\"\n >\n {options.csv !== false ? (\n <DropdownMenu.Item className=\"cursor-pointer\" onSelect={() => exportToCSV(table, 'export.csv')}>\n {localeText.exportCSV ?? 'Export as CSV'}\n </DropdownMenu.Item>\n ) : null}\n {options.json !== false ? (\n <DropdownMenu.Item className=\"cursor-pointer\" onSelect={() => exportToJSON(table, 'export.json')}>\n {localeText.exportJSON ?? 'Export as JSON'}\n </DropdownMenu.Item>\n ) : null}\n {options.selectedCsv !== false ? (\n <DropdownMenu.Item className=\"cursor-pointer\" onSelect={() => exportToCSV(table, 'selected.csv', { onlySelected: true })}>\n {localeText.exportSelectedCSV ?? 'Export selected rows'}\n </DropdownMenu.Item>\n ) : null}\n {options.xlsx ? (\n <DropdownMenu.Item\n className=\"cursor-pointer flex items-center gap-2\"\n onSelect={() => exportToXLSX(table)}\n >\n <FileSpreadsheet className=\"size-4\" />\n Export as Excel\n </DropdownMenu.Item>\n ) : null}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </Tooltip.Root>\n </Tooltip.Provider>\n );\n}\n\n/* ─── Conditional formatting ───────────────────────────────────────── */\n\nfunction hexToHsva(hex: string): HsvaColor {\n let h = hex.replace('#', '');\n if (h.length === 3) h = h.split('').map((c) => c + c).join('');\n const r = parseInt(h.slice(0, 2), 16) / 255;\n const g = parseInt(h.slice(2, 4), 16) / 255;\n const b = parseInt(h.slice(4, 6), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n let hue = 0;\n if (d !== 0) {\n if (max === r) hue = ((g - b) / d) % 6;\n else if (max === g) hue = (b - r) / d + 2;\n else hue = (r - g) / d + 4;\n hue *= 60;\n if (hue < 0) hue += 360;\n }\n return { h: hue, s: max === 0 ? 0 : d / max, v: max, a: 1 };\n}\n\nconst CF_OPERATORS: { value: DataTableConditionalRule['operator']; label: string }[] = [\n { value: 'equals', label: 'Equals' },\n { value: 'notEquals', label: 'Not equals' },\n { value: 'contains', label: 'Contains' },\n { value: 'gt', label: 'Greater than' },\n { value: 'gte', label: 'Greater than or equal' },\n { value: 'lt', label: 'Less than' },\n { value: 'lte', label: 'Less than or equal' },\n { value: 'empty', label: 'Is empty' },\n { value: 'notEmpty', label: 'Is not empty' },\n];\n\n/* ── Color section sub-component (bg or text) ── */\ninterface ColorSectionProps {\n label: string;\n color?: string;\n onChange: (color: string | undefined) => void;\n}\n\nfunction ColorSection({ label, color, onChange }: ColorSectionProps) {\n const enabled = !!color;\n const [localHex, setLocalHex] = React.useState(color ?? '#3b82f6');\n\n React.useEffect(() => {\n if (color && color !== localHex) setLocalHex(color);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [color]);\n\n const hsva = React.useMemo(() => {\n try { return hexToHsva(localHex); } catch { return { h: 217, s: 0.91, v: 0.96, a: 1 }; }\n }, [localHex]);\n\n const handleHsvaChange = (v: HsvaColor) => {\n const hex = hsvaToHex(v);\n setLocalHex(hex);\n onChange(hex);\n };\n\n const handleHexInput = (raw: string) => {\n const clean = raw.replace(/[^0-9a-fA-F]/g, '').slice(0, 6);\n setLocalHex('#' + clean);\n if (clean.length === 6) onChange('#' + clean);\n };\n\n return (\n <div className=\"grid gap-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium\">{label}</span>\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={() => onChange(undefined)}\n className={cn(\n 'rounded px-2 py-0.5 text-xs transition-colors',\n !enabled ? 'bg-muted text-foreground font-medium' : 'text-muted-foreground hover:bg-muted',\n )}\n >\n None\n </button>\n <button\n type=\"button\"\n onClick={() => { if (!enabled) onChange(localHex || '#3b82f6'); }}\n className={cn(\n 'rounded px-2 py-0.5 text-xs transition-colors',\n enabled ? 'bg-primary text-primary-foreground font-medium' : 'text-muted-foreground hover:bg-muted',\n )}\n >\n Apply\n </button>\n </div>\n </div>\n {enabled ? (\n <div className=\"grid gap-2\">\n <ColorPicker.Root value={hsva} onValueChange={handleHsvaChange} className=\"w-full gap-2 p-0\">\n <ColorPicker.Area className=\"h-28 w-full\" />\n <ColorPicker.HueSlider className=\"h-3 w-full rounded-full\" />\n </ColorPicker.Root>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground font-mono text-xs\">#</span>\n <Input\n value={localHex.replace('#', '')}\n onChange={(e) => handleHexInput(e.target.value)}\n className=\"h-7 flex-1 font-mono text-xs\"\n maxLength={6}\n placeholder=\"ffffff\"\n spellCheck={false}\n />\n <div\n className=\"border-border h-7 w-7 flex-shrink-0 rounded border\"\n style={{ background: color }}\n aria-label=\"Color preview\"\n />\n </div>\n </div>\n ) : (\n <p className=\"text-muted-foreground py-1 text-xs\">No color — click Apply to set.</p>\n )}\n </div>\n );\n}\n\n/* ── Conditional formatting drawer ── */\ninterface DataTableConditionalFormattingDrawerProps {\n table: Table<unknown>;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n initialColumnId?: string;\n rules: DataTableConditionalRule[];\n onRulesChange: (rules: DataTableConditionalRule[]) => void;\n}\n\nfunction DataTableConditionalFormattingDrawer({\n table,\n open,\n onOpenChange,\n initialColumnId,\n rules,\n onRulesChange,\n}: DataTableConditionalFormattingDrawerProps) {\n const columns = table.getAllLeafColumns().filter(\n (col) => !['__select', '__rownum', '__row_actions'].includes(col.id),\n );\n\n const defaultColumnId = initialColumnId ?? columns[0]?.id ?? '';\n\n // Local draft — changes are only committed on Save\n const [draft, setDraft] = React.useState<DataTableConditionalRule[]>(rules);\n\n // Re-initialize draft whenever the drawer opens so stale edits are discarded\n React.useEffect(() => {\n if (open) setDraft(rules);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const addRule = () => {\n setDraft((prev) => [\n ...prev,\n {\n id: Math.random().toString(36).slice(2),\n columnId: defaultColumnId,\n operator: 'equals',\n value: '',\n backgroundColor: '#fef9c3',\n textColor: undefined,\n },\n ]);\n };\n\n const updateRule = (id: string, patch: Partial<DataTableConditionalRule>) => {\n setDraft((prev) => prev.map((r) => (r.id === id ? { ...r, ...patch } : r)));\n };\n\n const removeRule = (id: string) => {\n setDraft((prev) => prev.filter((r) => r.id !== id));\n };\n\n const handleSave = () => {\n onRulesChange(draft);\n onOpenChange(false);\n };\n\n const needsValue = (op: DataTableConditionalRule['operator']) =>\n !['empty', 'notEmpty'].includes(op);\n\n return (\n <Drawer.Root open={open} onOpenChange={onOpenChange}>\n <Drawer.Content\n style={\n {\n // Override bottom-drawer positioning to right-side full-height panel\n top: 0,\n right: 0,\n bottom: 0,\n left: 'auto',\n height: '100%',\n width: '400px',\n maxWidth: '95vw',\n marginTop: 0,\n borderRadius: 0,\n borderTop: 'none',\n borderRight: 'none',\n borderBottom: 'none',\n // Reset vertical slide animation variable so it only slides from right\n '--tw-enter-translate-y': '0',\n '--tw-exit-translate-y': '0',\n } as React.CSSProperties\n }\n className=\"flex flex-col overflow-hidden data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right [&>div:first-child]:hidden\"\n >\n <Drawer.Header className=\"border-border flex-shrink-0 border-b px-4 py-3 text-left\">\n <Drawer.Title>Conditional Formatting</Drawer.Title>\n <Drawer.Description>\n Highlight cells based on column values. Rules are applied top-to-bottom; the first match wins.\n </Drawer.Description>\n </Drawer.Header>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n <div className=\"grid gap-3 p-4\">\n {draft.length === 0 ? (\n <p className=\"text-muted-foreground py-6 text-center text-sm\">\n No rules yet. Click &ldquo;+ Add rule&rdquo; to get started.\n </p>\n ) : null}\n {draft.map((rule, idx) => (\n <div\n key={rule.id}\n className=\"border-border bg-muted/20 grid gap-3 rounded-lg border p-3\"\n >\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground text-xs font-medium\">Rule {idx + 1}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeRule(rule.id)}\n className=\"text-destructive h-6 px-2 text-xs\"\n >\n Remove\n </Button>\n </div>\n\n {/* Column */}\n <div className=\"grid gap-1\">\n <label className=\"text-xs font-medium\">Column</label>\n <Select.Root\n value={rule.columnId}\n onValueChange={(v) => updateRule(rule.id, { columnId: v })}\n >\n <Select.Trigger className=\"h-8 w-full\">\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n options={columns.map((col) => ({\n value: col.id,\n label: typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id,\n }))}\n />\n </Select.Root>\n </div>\n\n {/* Condition */}\n <div className=\"grid gap-1\">\n <label className=\"text-xs font-medium\">Condition</label>\n <Select.Root\n value={rule.operator}\n onValueChange={(v) =>\n updateRule(rule.id, { operator: v as DataTableConditionalRule['operator'] })\n }\n >\n <Select.Trigger className=\"h-8 w-full\">\n <Select.Value />\n </Select.Trigger>\n <Select.Content options={CF_OPERATORS.map((o) => ({ value: o.value, label: o.label }))} />\n </Select.Root>\n </div>\n\n {/* Value */}\n {needsValue(rule.operator) ? (\n <div className=\"grid gap-1\">\n <label className=\"text-xs font-medium\">Value</label>\n <Input\n value={rule.value ?? ''}\n onChange={(e) => updateRule(rule.id, { value: e.target.value })}\n placeholder=\"Enter value…\"\n className=\"h-8\"\n />\n </div>\n ) : null}\n\n {/* Background color */}\n <div className=\"border-border rounded-md border p-2\">\n <ColorSection\n label=\"Background color\"\n color={rule.backgroundColor}\n onChange={(c) => updateRule(rule.id, { backgroundColor: c })}\n />\n </div>\n\n {/* Text color */}\n <div className=\"border-border rounded-md border p-2\">\n <ColorSection\n label=\"Text color\"\n color={rule.textColor}\n onChange={(c) => updateRule(rule.id, { textColor: c })}\n />\n </div>\n\n {/* Live preview */}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground text-xs\">Preview:</span>\n <span\n className=\"rounded px-2 py-0.5 text-xs font-medium\"\n style={{\n backgroundColor: rule.backgroundColor ?? 'transparent',\n color: rule.textColor ?? 'inherit',\n border: '1px solid var(--border)',\n }}\n >\n Cell value\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"border-border flex-shrink-0 border-t p-4\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={addRule} className=\"mb-3 w-full\">\n + Add rule\n </Button>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onOpenChange(false)}\n className=\"flex-1\"\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n onClick={handleSave}\n className=\"flex-1\"\n >\n Save\n </Button>\n </div>\n </div>\n </Drawer.Content>\n </Drawer.Root>\n );\n}\n\nconst filterOperators: DataTableFilterOperator[] = [\n 'contains',\n 'equals',\n 'startsWith',\n 'endsWith',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'empty',\n 'notEmpty',\n];\n\nfunction createFilterRule(columnId: string): DataTableFilterRule {\n return {\n id: `filter-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n columnId,\n operator: 'contains',\n value: '',\n };\n}\n\nfunction createFilterGroup(\n id = `group-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n): DataTableFilterGroup {\n return {\n id,\n logic: 'and',\n items: [],\n };\n}\n\nfunction isFilterRule(item: DataTableFilterItem): item is DataTableFilterRule {\n return 'columnId' in item;\n}\n\nfunction evaluateFilterGroup<TData>(\n group: DataTableFilterGroup,\n row: TData,\n getValue: (row: TData, columnId: string) => unknown,\n): boolean {\n const results = group.items.map((item) =>\n isFilterRule(item)\n ? evaluateFilterRule(item, getValue(row, item.columnId))\n : evaluateFilterGroup(item, row, getValue),\n );\n return group.logic === 'or' ? results.some(Boolean) : results.every(Boolean);\n}\n\nfunction evaluateFilterRule(rule: DataTableFilterRule, value: unknown): boolean {\n const actual = String(value ?? '').toLowerCase();\n const expected = String(rule.value ?? '').toLowerCase();\n const actualNumber = Number(value);\n const expectedNumber = Number(rule.value);\n if (rule.operator === 'contains') return actual.includes(expected);\n if (rule.operator === 'equals') return actual === expected;\n if (rule.operator === 'startsWith') return actual.startsWith(expected);\n if (rule.operator === 'endsWith') return actual.endsWith(expected);\n if (rule.operator === 'empty') return value == null || actual === '';\n if (rule.operator === 'notEmpty') return value != null && actual !== '';\n if (!Number.isFinite(actualNumber) || !Number.isFinite(expectedNumber)) return false;\n if (rule.operator === 'gt') return actualNumber > expectedNumber;\n if (rule.operator === 'gte') return actualNumber >= expectedNumber;\n if (rule.operator === 'lt') return actualNumber < expectedNumber;\n return actualNumber <= expectedNumber;\n}\n\nfunction getValueByPath<TData>(row: TData, columnId: string): unknown {\n let current: unknown = row;\n for (const part of columnId.split('.')) {\n if (typeof current !== 'object' || current === null) return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction normalizeSearch(value: unknown) {\n return String(value ?? '')\n .trim()\n .toLowerCase();\n}\n\nfunction splitPinnedRows<TData>(rows: Row<TData>[], rowPinning: DataTableRowPinningState) {\n const topIds = new Set(rowPinning.top ?? []);\n const bottomIds = new Set(rowPinning.bottom ?? []);\n const top: Row<TData>[] = [];\n const center: Row<TData>[] = [];\n const bottom: Row<TData>[] = [];\n for (const row of rows) {\n if (topIds.has(row.id)) top.push(row);\n else if (bottomIds.has(row.id)) bottom.push(row);\n else center.push(row);\n }\n return { top, center, bottom };\n}\n\nfunction reorderRows<TData>(rows: Row<TData>[], fromId: string, toId: string) {\n const ids = reorderIds(\n rows.map((row) => row.id),\n fromId,\n toId,\n );\n const byId = new Map(rows.map((row) => [row.id, row]));\n return ids.map((id) => byId.get(id)).filter(isDefined);\n}\n\nfunction reorderIds(ids: string[], fromId: string, toId: string) {\n if (fromId === toId) return ids;\n const fromIndex = ids.indexOf(fromId);\n const toIndex = ids.indexOf(toId);\n if (fromIndex < 0 || toIndex < 0) return ids;\n const next = [...ids];\n const [item] = next.splice(fromIndex, 1);\n if (!item) return ids;\n next.splice(toIndex, 0, item);\n return next;\n}\n\nfunction toggleId(ids: string[], id: string) {\n return ids.includes(id) ? ids.filter((item) => item !== id) : [...ids, id];\n}\n\nfunction aggregateColumn<TData>(\n aggregation: DataTableAggregation,\n values: unknown[],\n rows: Row<TData>[],\n) {\n if (typeof aggregation === 'function') {\n return aggregation(values, rows as Row<unknown>[]);\n }\n if (aggregation === 'count') return values.length;\n const numbers = values.map(toNumber).filter((value) => Number.isFinite(value));\n if (!numbers.length) return 0;\n if (aggregation === 'sum') return numbers.reduce((sum, value) => sum + value, 0);\n if (aggregation === 'avg') return numbers.reduce((sum, value) => sum + value, 0) / numbers.length;\n if (aggregation === 'min') return Math.min(...numbers);\n return Math.max(...numbers);\n}\n\nfunction toNumber(value: unknown) {\n if (typeof value === 'number') return value;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction escapeCsv(value: unknown) {\n const stringValue = value == null ? '' : String(value);\n return /[\",\\n]/.test(stringValue) ? `\"${stringValue.replace(/\"/g, '\"\"')}\"` : stringValue;\n}\n\nfunction isDefined<TValue>(value: TValue | undefined): value is TValue {\n return value !== undefined;\n}\n\n/* ─── Round 3: Feature 1 — Pivot View ──────────────────────────────── */\n\nfunction computePivotAgg(\n values: unknown[],\n aggregation: DataTablePivotConfig['aggregation'],\n): number {\n if (aggregation === 'count') return values.length;\n const nums = values.map(Number).filter(Number.isFinite);\n if (!nums.length) return 0;\n if (aggregation === 'sum') return nums.reduce((a, b) => a + b, 0);\n if (aggregation === 'avg') return nums.reduce((a, b) => a + b, 0) / nums.length;\n if (aggregation === 'min') return Math.min(...nums);\n return Math.max(...nums);\n}\n\nfunction DataTablePivotView<TData>({\n data,\n pivotConfig,\n columns,\n className,\n onClearPivot,\n}: {\n data: TData[];\n pivotConfig: DataTablePivotConfig;\n columns: DataTableColumnDef<TData, unknown>[];\n className?: string;\n onClearPivot?: () => void;\n}) {\n const { rowGroupField, pivotField, valueField, aggregation } = pivotConfig;\n\n const { pivotValues, rowGroupValues, cellMap } = React.useMemo(() => {\n const pivotSet = new Set<string>();\n const rowGroupSet = new Set<string>();\n const cellMap = new Map<string, Map<string, unknown[]>>();\n\n for (const row of data) {\n const rec = row as Record<string, unknown>;\n const rv = String(rec[rowGroupField] ?? '');\n const pv = String(rec[pivotField] ?? '');\n const val = rec[valueField];\n rowGroupSet.add(rv);\n pivotSet.add(pv);\n if (!cellMap.has(rv)) cellMap.set(rv, new Map());\n const inner = cellMap.get(rv)!;\n if (!inner.has(pv)) inner.set(pv, []);\n inner.get(pv)!.push(val);\n }\n\n const pivotValues = Array.from(pivotSet).sort();\n const rowGroupValues = Array.from(rowGroupSet).sort();\n return { pivotValues, rowGroupValues, cellMap };\n }, [data, rowGroupField, pivotField, valueField]);\n\n const getColLabel = (fieldId: string) => {\n const col = columns.find((c) => c.field === fieldId || c.fieldId === fieldId || c.id === fieldId);\n return col?.headerName ?? fieldId;\n };\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <div className=\"flex items-center gap-2\">\n <span className=\"bg-primary/10 text-primary border-primary/30 inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium\">\n <GitBranch className=\"size-3\" />\n Pivot mode active: {getColLabel(rowGroupField)} × {getColLabel(pivotField)} ({aggregation})\n </span>\n {onClearPivot ? (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"h-6 px-2 text-xs\" onClick={onClearPivot}>\n Clear pivot\n </Button>\n ) : null}\n </div>\n <div className=\"border-border overflow-auto rounded-md border\">\n <table className=\"w-full caption-bottom text-sm\" role=\"grid\">\n <thead className=\"bg-bg sticky top-0 z-20\">\n <tr role=\"row\">\n <th className=\"text-muted-foreground border-border border-b px-3 py-2 text-left font-medium\">\n {getColLabel(rowGroupField)}\n </th>\n {pivotValues.map((pv) => (\n <th key={pv} className=\"text-muted-foreground border-border border-b px-3 py-2 text-right font-medium whitespace-nowrap\">\n {pv}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rowGroupValues.map((rgv) => (\n <tr key={rgv} className=\"border-border hover:bg-muted/50 border-b\">\n <td className=\"px-3 py-2 font-medium\">{rgv}</td>\n {pivotValues.map((pv) => {\n const vals = cellMap.get(rgv)?.get(pv) ?? [];\n const agg = computePivotAgg(vals, aggregation);\n return (\n <td key={pv} className=\"px-3 py-2 text-right tabular-nums\">\n {agg}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n\n/* ─── Round 3: Feature 1 — Pivot Config Panel (Drawer) ─────────────── */\n\nfunction DataTablePivotConfigPanel({\n open,\n onOpenChange,\n columns,\n currentConfig,\n onApply,\n onClear,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n columns: DataTableColumnDef<unknown, unknown>[];\n currentConfig?: DataTablePivotConfig;\n onApply: (config: DataTablePivotConfig) => void;\n onClear: () => void;\n}) {\n const colOptions = columns\n .filter((c) => c.field ?? c.fieldId ?? c.id)\n .map((c) => ({ value: String(c.field ?? c.fieldId ?? c.id ?? ''), label: c.headerName ?? String(c.field ?? c.id ?? '') }));\n\n const firstColId = colOptions[0]?.value ?? '';\n\n const [rowGroupField, setRowGroupField] = React.useState(currentConfig?.rowGroupField ?? firstColId);\n const [pivotField, setPivotField] = React.useState(currentConfig?.pivotField ?? firstColId);\n const [valueField, setValueField] = React.useState(currentConfig?.valueField ?? firstColId);\n const [aggregation, setAggregation] = React.useState<DataTablePivotConfig['aggregation']>(currentConfig?.aggregation ?? 'sum');\n\n React.useEffect(() => {\n if (open && currentConfig) {\n setRowGroupField(currentConfig.rowGroupField);\n setPivotField(currentConfig.pivotField);\n setValueField(currentConfig.valueField);\n setAggregation(currentConfig.aggregation);\n }\n }, [open, currentConfig]);\n\n const aggOptions: { value: DataTablePivotConfig['aggregation']; label: string }[] = [\n { value: 'count', label: 'Count' },\n { value: 'sum', label: 'Sum' },\n { value: 'avg', label: 'Average' },\n { value: 'min', label: 'Minimum' },\n { value: 'max', label: 'Maximum' },\n ];\n\n return (\n <Drawer.Root open={open} onOpenChange={onOpenChange}>\n <Drawer.Content\n style={{\n top: 0, right: 0, bottom: 0, left: 'auto',\n height: '100%', width: '380px', maxWidth: '95vw',\n marginTop: 0, borderRadius: 0,\n borderTop: 'none', borderRight: 'none', borderBottom: 'none',\n '--tw-enter-translate-y': '0',\n '--tw-exit-translate-y': '0',\n } as React.CSSProperties}\n className=\"flex flex-col overflow-hidden data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right [&>div:first-child]:hidden\"\n >\n <Drawer.Header className=\"border-border flex-shrink-0 border-b px-4 py-3 text-left\">\n <Drawer.Title>Pivot Mode</Drawer.Title>\n <Drawer.Description>Configure pivot table settings.</Drawer.Description>\n </Drawer.Header>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n <div className=\"grid gap-4\">\n <div className=\"grid gap-1\">\n <label className=\"text-xs font-medium\">Group rows by</label>\n <Select.Root value={rowGroupField} onValueChange={setRowGroupField}>\n <Select.Trigger className=\"h-8 w-full\"><Select.Value /></Select.Trigger>\n <Select.Content options={colOptions} />\n </Select.Root>\n </div>\n <div className=\"grid gap-1\">\n <label className=\"text-xs font-medium\">Pivot columns by</label>\n <Select.Root value={pivotField} onValueChange={setPivotField}>\n <Select.Trigger className=\"h-8 w-full\"><Select.Value /></Select.Trigger>\n <Select.Content options={colOptions} />\n </Select.Root>\n </div>\n <div className=\"grid gap-1\">\n <label className=\"text-xs font-medium\">Value field</label>\n <Select.Root value={valueField} onValueChange={setValueField}>\n <Select.Trigger className=\"h-8 w-full\"><Select.Value /></Select.Trigger>\n <Select.Content options={colOptions} />\n </Select.Root>\n </div>\n <div className=\"grid gap-1\">\n <label className=\"text-xs font-medium\">Aggregation</label>\n <Select.Root value={aggregation} onValueChange={(v) => setAggregation(v as DataTablePivotConfig['aggregation'])}>\n <Select.Trigger className=\"h-8 w-full\"><Select.Value /></Select.Trigger>\n <Select.Content options={aggOptions} />\n </Select.Root>\n </div>\n </div>\n </div>\n <div className=\"border-border flex-shrink-0 border-t p-4 grid gap-2\">\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n className=\"w-full\"\n onClick={() => {\n onApply({ rowGroupField, pivotField, valueField, aggregation });\n onOpenChange(false);\n }}\n >\n Apply\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full\"\n onClick={() => {\n onClear();\n onOpenChange(false);\n }}\n >\n Clear pivot\n </Button>\n </div>\n </Drawer.Content>\n </Drawer.Root>\n );\n}\n\n/* ─── Round 3: Feature 2 — Saved Views Drawer ──────────────────────── */\n\nfunction DataTableSavedViewsDrawer({\n open,\n onOpenChange,\n views,\n onViewsChange,\n table,\n density,\n setDensity,\n conditionalFormattingRules,\n handleConditionalRulesChange,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n views: DataTableSavedView[];\n onViewsChange: (views: DataTableSavedView[]) => void;\n table: Table<unknown>;\n density: DataTableDensity;\n setDensity: (d: DataTableDensity) => void;\n conditionalFormattingRules: DataTableConditionalRule[];\n handleConditionalRulesChange: (rules: DataTableConditionalRule[]) => void;\n}) {\n const [newViewName, setNewViewName] = React.useState('');\n\n const captureCurrentState = (): DataTableSavedView['state'] => ({\n sorting: table.getState().sorting,\n columnFilters: table.getState().columnFilters,\n globalFilter: table.getState().globalFilter as string | undefined,\n columnVisibility: table.getState().columnVisibility,\n columnOrder: table.getState().columnOrder,\n columnSizing: table.getState().columnSizing,\n columnPinning: table.getState().columnPinning,\n density,\n grouping: table.getState().grouping,\n conditionalFormattingRules,\n });\n\n const loadView = (view: DataTableSavedView) => {\n table.setSorting(view.state.sorting ?? []);\n table.setColumnFilters(view.state.columnFilters ?? []);\n table.setGlobalFilter(view.state.globalFilter ?? '');\n table.setColumnVisibility(view.state.columnVisibility ?? {});\n table.setColumnOrder(view.state.columnOrder ?? []);\n table.setColumnSizing(view.state.columnSizing ?? {});\n table.setColumnPinning(view.state.columnPinning ?? {});\n if (view.state.density) setDensity(view.state.density);\n if (view.state.grouping) table.setGrouping(view.state.grouping);\n if (view.state.conditionalFormattingRules) handleConditionalRulesChange(view.state.conditionalFormattingRules);\n };\n\n const saveNewView = () => {\n const name = newViewName.trim();\n if (!name) return;\n const newView: DataTableSavedView = {\n id: `view-${Date.now()}-${Math.random().toString(36).slice(2)}`,\n name,\n createdAt: new Date().toISOString(),\n state: captureCurrentState(),\n };\n onViewsChange([...views, newView]);\n setNewViewName('');\n };\n\n const updateView = (id: string) => {\n onViewsChange(views.map((v) => v.id === id ? { ...v, state: captureCurrentState() } : v));\n };\n\n const deleteView = (id: string) => {\n onViewsChange(views.filter((v) => v.id !== id));\n };\n\n return (\n <Drawer.Root open={open} onOpenChange={onOpenChange}>\n <Drawer.Content\n style={{\n top: 0, right: 0, bottom: 0, left: 'auto',\n height: '100%', width: '380px', maxWidth: '95vw',\n marginTop: 0, borderRadius: 0,\n borderTop: 'none', borderRight: 'none', borderBottom: 'none',\n '--tw-enter-translate-y': '0',\n '--tw-exit-translate-y': '0',\n } as React.CSSProperties}\n className=\"flex flex-col overflow-hidden data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right [&>div:first-child]:hidden\"\n >\n <Drawer.Header className=\"border-border flex-shrink-0 border-b px-4 py-3 text-left\">\n <Drawer.Title>Saved Views</Drawer.Title>\n <Drawer.Description>Save and restore table display states.</Drawer.Description>\n </Drawer.Header>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n {/* Save new view */}\n <div className=\"border-border mb-4 rounded-lg border p-3\">\n <p className=\"mb-2 text-xs font-semibold\">Save current view</p>\n <div className=\"flex gap-2\">\n <Input\n value={newViewName}\n onChange={(e) => setNewViewName(e.target.value)}\n placeholder=\"View name…\"\n className=\"flex-1 h-8 text-xs\"\n onKeyDown={(e) => { if (e.key === 'Enter') saveNewView(); }}\n />\n <Button type=\"button\" variant=\"default\" size=\"sm\" className=\"h-8 px-3 text-xs\" onClick={saveNewView}>\n Save\n </Button>\n </div>\n </div>\n {/* View list */}\n {views.length === 0 ? (\n <p className=\"text-muted-foreground py-6 text-center text-sm\">No saved views yet.</p>\n ) : (\n <div className=\"grid gap-2\">\n {views.map((view) => (\n <div key={view.id} className=\"border-border bg-muted/20 rounded-lg border p-3\">\n <div className=\"mb-2 flex items-start justify-between gap-2\">\n <div>\n <p className=\"text-sm font-semibold\">{view.name}</p>\n <p className=\"text-muted-foreground text-[10px]\">\n {new Date(view.createdAt).toLocaleDateString()}\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n className=\"text-destructive h-6 w-6 shrink-0\"\n aria-label={`Delete view ${view.name}`}\n onClick={() => deleteView(view.id)}\n >\n <Trash2 className=\"size-3.5\" />\n </Button>\n </div>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"flex-1 h-7 text-xs\"\n onClick={() => loadView(view)}\n >\n Load\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"flex-1 h-7 text-xs\"\n onClick={() => updateView(view.id)}\n >\n Update\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n <div className=\"border-border flex-shrink-0 border-t p-4\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" className=\"w-full\" onClick={() => onOpenChange(false)}>\n Close\n </Button>\n </div>\n </Drawer.Content>\n </Drawer.Root>\n );\n}\n\n/* ─── Round 3: Feature 4 — Header Stats Row ─────────────────────────── */\n\nfunction computeHeaderStat(\n rows: Row<unknown>[],\n columnId: string,\n statType: 'count' | 'sum' | 'avg' | 'min' | 'max' | 'nullCount' | 'unique',\n): string {\n const values = rows.map((r) => r.getValue(columnId));\n switch (statType) {\n case 'count': return String(values.length);\n case 'nullCount': return String(values.filter((v) => v == null || v === '').length);\n case 'unique': return String(new Set(values.map((v) => String(v ?? ''))).size);\n default: {\n const nums = values.map(Number).filter(Number.isFinite);\n if (!nums.length) return '—';\n if (statType === 'sum') return new Intl.NumberFormat().format(nums.reduce((a, b) => a + b, 0));\n if (statType === 'avg') return new Intl.NumberFormat().format(nums.reduce((a, b) => a + b, 0) / nums.length);\n if (statType === 'min') return new Intl.NumberFormat().format(Math.min(...nums));\n return new Intl.NumberFormat().format(Math.max(...nums));\n }\n }\n}\n\nfunction getDefaultStatType(columnId: string, table: Table<unknown>): 'sum' | 'count' {\n const col = table.getColumn(columnId);\n if (!col) return 'count';\n const structylMeta = getStructylMeta(col);\n if (structylMeta.type === 'number' || structylMeta.type === 'currency') return 'sum';\n return 'count';\n}\n\nfunction DataTableHeaderStatsRow({\n table,\n renderedColumnIds,\n columnPaddingLeft,\n columnPaddingRight,\n headerStatsConfig,\n}: {\n table: Table<unknown>;\n renderedColumnIds: Set<string>;\n columnPaddingLeft: number;\n columnPaddingRight: number;\n headerStatsConfig?: Partial<Record<string, 'count' | 'sum' | 'avg' | 'min' | 'max' | 'nullCount' | 'unique'>>;\n}) {\n const rows = table.getFilteredRowModel().rows;\n const visibleLeafCols = table.getVisibleLeafColumns().filter((c) => renderedColumnIds.has(c.id));\n\n const statsMap = React.useMemo(() => {\n const map = new Map<string, { label: string; value: string }>();\n for (const col of visibleLeafCols) {\n const statType = headerStatsConfig?.[col.id] ?? getDefaultStatType(col.id, table);\n const value = computeHeaderStat(rows, col.id, statType);\n map.set(col.id, { label: statType, value });\n }\n return map;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rows, visibleLeafCols, headerStatsConfig]);\n\n return (\n <tr className=\"bg-muted/40 border-border border-b text-xs text-muted-foreground\">\n {columnPaddingLeft > 0 ? <td style={{ width: columnPaddingLeft }} /> : null}\n {visibleLeafCols.map((col) => {\n const stat = statsMap.get(col.id);\n const structylMeta = getStructylMeta(col);\n const align = structylMeta.align ?? 'left';\n return (\n <td\n key={col.id}\n className={cn(\n 'px-3 py-1',\n align === 'center' && 'text-center',\n align === 'right' && 'text-right',\n )}\n >\n {stat ? (\n <div className=\"flex flex-col\">\n <span className=\"text-[9px] font-medium uppercase tracking-wide opacity-60\">{stat.label}</span>\n <span className=\"tabular-nums\">{stat.value}</span>\n </div>\n ) : null}\n </td>\n );\n })}\n {columnPaddingRight > 0 ? <td style={{ width: columnPaddingRight }} /> : null}\n </tr>\n );\n}\n"]}