@loykin/gridkit 0.0.1-beta.1

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/features/selection/CheckboxColumn.tsx","../src/core/hooks/useTableStore.ts","../src/core/engine/extensions/DataStoreFeature.ts","../src/core/engine/extensions/ColumnFlexFeature.ts","../src/core/engine/extensions/ColumnFilterExtension.ts","../src/core/engine/extensions/RowActionsFeature.ts","../src/core/engine/gridKitFeatures.ts","../src/core/hooks/useDataGridCore.ts","../src/core/hooks/useColumnSizing.ts","../src/core/hooks/useDataGridBase.ts","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/select.tsx","../src/core/DataGridPaginationBar.tsx","../src/core/DataGridToolbar.tsx","../src/components/ui/input.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/popover.tsx","../src/core/ScrollTable.tsx","../src/core/CustomScrollbar.tsx","../src/features/reordering/RowWrapperContext.tsx","../src/core/DataGridTableView.tsx","../src/core/DataGridShell.tsx","../src/DataGrid.tsx","../src/core/hooks/useInfiniteScroll.ts","../src/DataGridInfinity.tsx","../src/features/reordering/RowDragContext.tsx","../src/features/reordering/SortableRow.tsx","../src/DataGridDrag.tsx","../src/core/ColumnVisibilityDropdown.tsx","../src/features/filters/GlobalSearch.tsx","../src/features/filters/ToolbarFilters.tsx","../src/features/expanding/TreeCell.tsx","../src/features/reordering/DragHandleCell.tsx","../src/core/engine/DataStore.ts","../src/core/engine/useDataStore.ts"],"names":["useRef","useEffect","jsx","create","memo","createRow","getMemoOptions","useState","useSyncExternalStore","useReactTable","getCoreRowModel","getExpandedRowModel","getSortedRowModel","getFilteredRowModel","getPaginationRowModel","useCallback","useMemo","twMerge","clsx","cva","ButtonPrimitive","SelectPrimitive","jsxs","ChevronsUpDown","Check","ChevronUp","ChevronDown","ChevronsLeft","ChevronLeft","ChevronRight","ChevronsRight","InputPrimitive","CheckboxPrimitive","PopoverPrimitive","React","useLayoutEffect","e","el","flexRender","ArrowUp","ArrowDown","ArrowUpDown","Filter","X","SlidersHorizontal","MoreHorizontal","useContext","useVirtualizer","Fragment","Loader2","ActionMenu","useSortable","CSS","useSensors","useSensor","PointerSensor","activeRow","arrayMove","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","Columns3","Search","GripVertical"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useEffect, useRef } from 'react'\nimport type { ColumnDef, Row, Table } from '@tanstack/react-table'\nimport type { CheckboxConfig } from '@/types'\n\n// ─── Indeterminate checkbox for the header ───────────────────────────────────\n\ninterface IndeterminateCheckboxProps {\n checked: boolean\n indeterminate: boolean\n onChange: (checked: boolean) => void\n}\n\nfunction IndeterminateCheckbox({ checked, indeterminate, onChange }: IndeterminateCheckboxProps) {\n const ref = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (ref.current) {\n ref.current.indeterminate = indeterminate\n }\n }, [indeterminate])\n\n return (\n <input\n ref={ref}\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => onChange(e.target.checked)}\n className=\"size-4 cursor-pointer rounded border-input accent-primary\"\n />\n )\n}\n\n// ─── Factory ─────────────────────────────────────────────────────────────────\n\nexport function createCheckboxColumn<T extends object>(\n checkboxConfig: CheckboxConfig<T>,\n): ColumnDef<T, unknown> {\n const { getRowId, selectedIds, onSelectAll, onSelectOne } = checkboxConfig\n\n return {\n id: '__select__',\n size: 40,\n enableResizing: false,\n enableSorting: false,\n enableColumnFilter: false,\n header: ({ table }: { table: Table<T> }) => {\n const rows = table.getRowModel().rows\n const allSelected =\n rows.length > 0 && rows.every((r) => selectedIds.has(getRowId(r.original)))\n const someSelected = !allSelected && rows.some((r) => selectedIds.has(getRowId(r.original)))\n\n return (\n <IndeterminateCheckbox\n checked={allSelected}\n indeterminate={someSelected}\n onChange={(checked) => onSelectAll(rows as Row<T>[], checked)}\n />\n )\n },\n cell: ({ row }: { row: Row<T> }) => {\n const id = getRowId(row.original)\n return (\n <input\n type=\"checkbox\"\n checked={selectedIds.has(id)}\n onChange={(e) => onSelectOne(id, e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n className=\"size-4 cursor-pointer rounded border-input accent-primary\"\n />\n )\n },\n }\n}\n","import { create } from 'zustand'\nimport type { PaginationState } from '@tanstack/react-table'\n\ninterface PersistedTableState {\n pagination: PaginationState\n searchTerm: string\n}\n\ninterface TableStoreState {\n tables: Record<string, PersistedTableState>\n register: (key: string, initial?: Partial<PersistedTableState>) => void\n update: (key: string, partial: Partial<PersistedTableState>) => void\n reset: (key: string) => void\n}\n\nconst DEFAULT_STATE: PersistedTableState = {\n pagination: { pageIndex: 0, pageSize: 20 },\n searchTerm: '',\n}\n\nexport const useTableStore = create<TableStoreState>((set, get) => ({\n tables: {},\n\n register: (key, initial) => {\n if (get().tables[key]) return // already registered\n set((s) => ({\n tables: {\n ...s.tables,\n [key]: { ...DEFAULT_STATE, ...initial },\n },\n }))\n },\n\n update: (key, partial) =>\n set((s) => ({\n tables: {\n ...s.tables,\n [key]: { ...(s.tables[key] ?? DEFAULT_STATE), ...partial },\n },\n })),\n\n reset: (key) =>\n set((s) => ({\n tables: { ...s.tables, [key]: { ...DEFAULT_STATE } },\n })),\n}))\n","import {\n createRow,\n memo,\n getMemoOptions,\n type RowData,\n type TableFeature,\n type RowModel,\n type Table,\n type Row,\n} from '@tanstack/react-table'\nimport type { Transaction, DataStore } from '../DataStore'\n\n// ── Declaration merging ───────────────────────────────────────────────────────\ndeclare module '@tanstack/react-table' {\n interface TableOptionsResolved<TData extends RowData> {\n dataStore?: DataStore<TData>\n }\n\n interface Table<TData extends RowData> {\n /** O(1) add/update/delete. Triggers React re-render automatically. */\n applyTransaction: (tx: Transaction<TData>) => void\n /** O(1) row lookup by id */\n getRowNodeById: (id: string) => TData | undefined\n /** Escape hatch — direct access to the internal DataStore */\n _dataStore: DataStore<TData> | undefined\n }\n}\n\n// ── Phase 3: Row-caching getCoreRowModel ──────────────────────────────────────\n/**\n * Drop-in replacement for getCoreRowModel() when a DataStore is used.\n *\n * Differences from the stock implementation:\n * 1. Memo depends on store.getVersion() (a number) instead of table.options.data\n * (an array reference). No unnecessary recomputation between transactions.\n * 2. Row objects are reused across calls. For rows whose `original` reference is\n * unchanged, the row object — and all its memoized cell/visible-cell results —\n * stays stable, letting React.memo skip re-rendering those rows.\n * 3. For rows whose data was updated (new object, same id), `original` is swapped\n * in-place and `_valuesCache` is cleared so getValue() re-evaluates.\n */\nexport function getDataStoreCoreRowModel<T extends RowData>(): (\n table: Table<T>,\n) => () => RowModel<T> {\n return (table: Table<T>) => {\n const rowCache = new Map<string, Row<T>>()\n\n return memo(\n () => {\n const store = table.options.dataStore\n // Version is a plain number — changes only when a transaction is applied\n return [store?.getVersion() ?? -1] as [number]\n },\n () => {\n const store = table.options.dataStore!\n const data = store.getSnapshot()\n\n const rowModel: RowModel<T> = { rows: [], flatRows: [], rowsById: {} }\n const seenIds = new Set<string>()\n\n for (let i = 0; i < data.length; i++) {\n const item = data[i]\n const id = table._getRowId(item, i)\n seenIds.add(id)\n\n let row = rowCache.get(id)\n\n if (row) {\n if (row.original !== item) {\n // Data changed — swap original and bust the accessor value cache\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(row as any).original = item\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(row as any)._valuesCache = {}\n }\n // All memoized row methods (getVisibleCells etc.) remain stable\n } else {\n row = createRow(table, id, item, i, 0)\n rowCache.set(id, row)\n }\n\n rowModel.rows.push(row)\n rowModel.flatRows.push(row)\n rowModel.rowsById[id] = row\n }\n\n // Evict deleted rows\n for (const id of rowCache.keys()) {\n if (!seenIds.has(id)) rowCache.delete(id)\n }\n\n return rowModel\n },\n getMemoOptions(\n table.options,\n 'debugTable',\n 'getRowModel',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n () => (table as any)._autoResetPageIndex?.(),\n ),\n )\n }\n}\n\n// ── Feature ───────────────────────────────────────────────────────────────────\nexport const DataStoreFeature: TableFeature = {\n createTable: (table) => {\n const store = table.options.dataStore\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(table as any)._dataStore = store\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(table as any).applyTransaction = (tx: Transaction<any>) => {\n if (!store) {\n console.warn('[GridKit] applyTransaction called without dataStore')\n return\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n store.applyTransaction(tx as Transaction<any>)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(table as any).getRowNodeById = (id: string) => store?.get(id)\n },\n}\n","import type { ColumnSizingState, RowData, TableFeature, Table } from '@tanstack/react-table'\n\n// ── Declaration merging ───────────────────────────────────────────────────────\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta<TData extends RowData, TValue> {\n /** CSS flex ratio — remaining container width distributed proportionally */\n flex?: number\n /** Auto-fit to content width via canvas text measurement */\n autoSize?: boolean\n minWidth?: number\n maxWidth?: number\n align?: 'left' | 'center' | 'right'\n /** Pin this column to the left or right — fixed at column definition level */\n pin?: 'left' | 'right'\n /**\n * Allow cell content to wrap to multiple lines.\n * Row height adjusts automatically via the virtualizer's measureElement.\n * When false (default) content is truncated with an ellipsis.\n */\n wrap?: boolean\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface Table<TData extends RowData> {\n /** Calculate flex/auto column widths relative to containerWidth */\n getFlexColumnSizing: (containerWidth: number) => ColumnSizingState\n }\n}\n\n// ── Feature ───────────────────────────────────────────────────────────────────\nexport const ColumnFlexFeature: TableFeature = {\n getDefaultColumnDef: () => ({ minSize: 60 }),\n\n createTable: (table) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(table as any).getFlexColumnSizing = (containerWidth: number): ColumnSizingState => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const columns = (table as unknown as Table<any>).getAllLeafColumns()\n const sizing: ColumnSizingState = {}\n\n const flexCols = columns.filter((col) => col.columnDef.meta?.flex != null)\n if (flexCols.length === 0) return sizing\n\n const fixedWidth = columns\n .filter((col) => col.columnDef.meta?.flex == null)\n .reduce((sum, col) => sum + col.getSize(), 0)\n\n const totalFlex = flexCols.reduce((sum, col) => sum + col.columnDef.meta!.flex!, 0)\n const available = Math.max(0, containerWidth - fixedWidth)\n let distributed = 0\n\n flexCols.forEach((col, i) => {\n const flex = col.columnDef.meta!.flex!\n const minW = col.columnDef.meta?.minWidth ?? 60\n const isLast = i === flexCols.length - 1\n const w = isLast\n ? Math.max(minW, available - distributed)\n : Math.max(minW, Math.floor((flex / totalFlex) * available))\n sizing[col.id] = w\n distributed += w\n })\n\n return sizing\n }\n },\n}\n","import type { RowData, TableFeature } from '@tanstack/react-table'\n\n// ── Declaration merging ───────────────────────────────────────────────────────\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta<TData extends RowData, TValue> {\n /**\n * Column-level filter type (renders filter row under the header).\n * - 'text' : free-text contains match (default when enableColumnFilters=true)\n * - 'select' : dropdown of unique values from current data\n * - 'multi-select' : multiple values dropdown\n * - 'number' : numeric range (min / max)\n * - false : disable filter for this column\n */\n filterType?: 'text' | 'select' | 'multi-select' | 'number' | false\n }\n}\n\n// ── Feature ───────────────────────────────────────────────────────────────────\n// Type declaration only — filter rendering is handled in DataGridTableView.\nexport const ColumnFilterExtension: TableFeature = {}\n","import type { RowData, TableFeature } from '@tanstack/react-table'\nimport type React from 'react'\n\n// ── Declaration merging ───────────────────────────────────────────────────────\ndeclare module '@tanstack/react-table' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface ColumnMeta<TData extends RowData, TValue> {\n /**\n * Row action menu items. DataGrid renders a ⋯ trigger button in this\n * column and manages a single shared dropdown at the table level —\n * no per-row dropdown instances, popup survives data refreshes.\n */\n actions?: (row: TData) => Array<{\n label: string\n onClick: (row: TData) => void\n variant?: 'default' | 'destructive'\n disabled?: boolean\n icon?: React.ReactNode\n }>\n }\n}\n\n// ── Feature ───────────────────────────────────────────────────────────────────\n// Type declaration only for now — table.getRowActions() can be added later.\nexport const RowActionsFeature: TableFeature = {}\n","export { DataStoreFeature, getDataStoreCoreRowModel } from './extensions/DataStoreFeature'\nexport { ColumnFlexFeature } from './extensions/ColumnFlexFeature'\nexport { ColumnFilterExtension } from './extensions/ColumnFilterExtension'\nexport { RowActionsFeature } from './extensions/RowActionsFeature'\n\nimport { DataStoreFeature } from './extensions/DataStoreFeature'\nimport { ColumnFlexFeature } from './extensions/ColumnFlexFeature'\nimport { ColumnFilterExtension } from './extensions/ColumnFilterExtension'\nimport { RowActionsFeature } from './extensions/RowActionsFeature'\n\nexport const gridKitFeatures = [\n DataStoreFeature,\n ColumnFlexFeature,\n ColumnFilterExtension,\n RowActionsFeature,\n] as const\n","import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport {\n useReactTable,\n getCoreRowModel,\n getSortedRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getExpandedRowModel,\n type ColumnFiltersState,\n type ColumnPinningState,\n type ColumnSizingState,\n type ExpandedState,\n type FilterFn,\n type PaginationState,\n type SortingState,\n type VisibilityState,\n} from '@tanstack/react-table'\nimport type { DataGridBaseProps, DataGridColumnDef } from '@/types'\nimport { useTableStore } from '@/core/hooks/useTableStore'\nimport { gridKitFeatures, getDataStoreCoreRowModel } from '@/core/engine/gridKitFeatures'\n\n// Stable no-op fallbacks for useSyncExternalStore when dataStore is absent\nconst _noopSubscribe = (_listener: () => void) => () => {}\nconst _noopGetVersion = () => 0\n\nconst defaultGlobalFilterFn: FilterFn<object> = (row, columnId, value: string) =>\n String(row.getValue(columnId) ?? '')\n .toLowerCase()\n .includes(value.toLowerCase())\n\n/** Used for meta.filterType === 'multi-select' — checks row value is in selected array */\nconst multiSelectFilterFn: FilterFn<object> = (row, columnId, value: string[]) =>\n value.includes(String(row.getValue(columnId) ?? ''))\nmultiSelectFilterFn.autoRemove = (val: string[]) => !val || val.length === 0\n\n/** Used for meta.filterType === 'number' — range [min, max] */\nconst betweenFilterFn: FilterFn<object> = (row, columnId, value: [string, string]) => {\n const raw = row.getValue<number>(columnId)\n const [minStr, maxStr] = value\n const min = minStr !== '' ? Number(minStr) : -Infinity\n const max = maxStr !== '' ? Number(maxStr) : Infinity\n return raw >= min && raw <= max\n}\nbetweenFilterFn.autoRemove = (val: [string, string]) => !val || (val[0] === '' && val[1] === '')\n\ninterface UseDataGridCoreOptions<T extends object> extends Pick<\n DataGridBaseProps<T>,\n | 'data'\n | 'dataStore'\n | 'enableSorting'\n | 'initialSorting'\n | 'onSortingChange'\n | 'manualSorting'\n | 'columnFilters'\n | 'globalFilter'\n | 'onGlobalFilterChange'\n | 'searchableColumns'\n | 'enableColumnResizing'\n | 'enableColumnFilters'\n | 'visibilityState'\n | 'initialPinning'\n | 'tableKey'\n | 'syncState'\n | 'onTableReady'\n | 'onColumnSizingChange'\n | 'enableExpanding'\n | 'getSubRows'\n> {\n columns: DataGridColumnDef<T>[]\n getRowId?: (originalRow: T, index: number) => string\n enablePagination?: boolean\n paginationConfig?: { pageSize?: number; initialPageIndex?: number }\n totalCount?: number\n onPageChange?: (pageIndex: number, pageSize: number) => void\n sizing: ColumnSizingState\n setSizing: React.Dispatch<React.SetStateAction<ColumnSizingState>>\n}\n\nexport function useDataGridCore<T extends object>({\n data = [],\n dataStore,\n columns,\n enableSorting = true,\n initialSorting,\n onSortingChange,\n manualSorting = false,\n columnFilters: externalColumnFilters,\n globalFilter: externalGlobalFilter,\n onGlobalFilterChange,\n searchableColumns,\n enableColumnResizing = true,\n enableColumnFilters = false,\n visibilityState,\n initialPinning,\n tableKey,\n syncState = false,\n enablePagination = true,\n paginationConfig,\n totalCount,\n onPageChange,\n onTableReady,\n onColumnSizingChange,\n enableExpanding = false,\n getSubRows,\n getRowId,\n sizing,\n setSizing,\n}: UseDataGridCoreOptions<T>) {\n const { register, update, tables } = useTableStore()\n const persisted = tableKey ? tables[tableKey] : undefined\n\n const [expanded, setExpanded] = useState<ExpandedState>({})\n const [sorting, setSorting] = useState<SortingState>(initialSorting ?? [])\n // Derive pinning from column meta.pin, merged with explicit initialPinning prop\n const [columnPinning] = useState<ColumnPinningState>(() => {\n const fromMeta: ColumnPinningState = { left: [], right: [] }\n for (const col of columns) {\n const pin = col.meta?.pin\n const id = (col as { accessorKey?: string }).accessorKey ?? (col as { id?: string }).id\n if (!pin || !id) continue\n if (pin === 'left') fromMeta.left!.push(id)\n else fromMeta.right!.push(id)\n }\n return {\n left: [...(fromMeta.left ?? []), ...(initialPinning?.left ?? [])],\n right: [...(fromMeta.right ?? []), ...(initialPinning?.right ?? [])],\n }\n })\n const [internalFilters, setInternalFilters] = useState<ColumnFiltersState>([])\n const [internalGlobal, setInternalGlobal] = useState(persisted?.searchTerm ?? '')\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(visibilityState ?? {})\n const [pagination, setPagination] = useState<PaginationState>({\n pageIndex: persisted?.pagination.pageIndex ?? paginationConfig?.initialPageIndex ?? 0,\n pageSize: persisted?.pagination.pageSize ?? paginationConfig?.pageSize ?? 20,\n })\n\n const tableReadyCalled = useRef(false)\n\n // Register for state persistence\n useEffect(() => {\n if (tableKey && syncState) {\n register(tableKey, {\n pagination: {\n pageIndex: paginationConfig?.initialPageIndex ?? 0,\n pageSize: paginationConfig?.pageSize ?? 20,\n },\n })\n }\n }, [tableKey, syncState, register, paginationConfig])\n\n const effectiveGlobalFilter = externalGlobalFilter ?? internalGlobal\n const effectiveColumnFilters = externalColumnFilters ?? internalFilters\n\n // Build search filter for specified columns\n const searchableFilterFn: FilterFn<T> | undefined = searchableColumns?.length\n ? (row, _, value: string) => {\n const search = String(value).toLowerCase()\n return searchableColumns.some((colId) =>\n String(row.getValue(colId) ?? '')\n .toLowerCase()\n .includes(search),\n )\n }\n : undefined\n\n // Inject filterFn into columns that declare meta.filterType\n const enrichedColumns = columns.map((col) => {\n if (col.meta?.filterType === 'number' && !col.filterFn) {\n return { ...col, filterFn: betweenFilterFn as unknown as FilterFn<T> }\n }\n if (col.meta?.filterType === 'multi-select' && !col.filterFn) {\n return { ...col, filterFn: multiSelectFilterFn as unknown as FilterFn<T> }\n }\n return col\n })\n\n // Subscribe to DataStore changes — triggers re-render when a transaction fires.\n // useSyncExternalStore must be called unconditionally, so noop stubs are used\n // when dataStore is absent. The returned version is unused; we only need the\n // subscription to cause the component to re-render so that the custom\n // getCoreRowModel (which reads store.getVersion() internally) can re-evaluate.\n useSyncExternalStore(\n dataStore ? dataStore.subscribe : _noopSubscribe,\n dataStore ? dataStore.getVersion : _noopGetVersion,\n )\n\n const table = useReactTable<T>({\n // When dataStore is active, data is irrelevant — getDataStoreCoreRowModel\n // reads directly from the store. Pass empty array to satisfy the type.\n data: dataStore ? ([] as T[]) : data,\n columns: enrichedColumns,\n getRowId,\n _features: [...gridKitFeatures],\n dataStore,\n state: {\n sorting,\n columnFilters: effectiveColumnFilters,\n globalFilter: effectiveGlobalFilter,\n columnVisibility,\n columnSizing: sizing,\n columnPinning,\n ...(enablePagination ? { pagination } : {}),\n ...(enableExpanding ? { expanded } : {}),\n },\n manualSorting,\n manualPagination: totalCount !== undefined,\n pageCount:\n totalCount !== undefined && pagination.pageSize > 0\n ? Math.ceil(totalCount / pagination.pageSize)\n : undefined,\n\n onSortingChange: (updater) => {\n setSorting((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater\n onSortingChange?.(next)\n return next\n })\n },\n onColumnFiltersChange: externalColumnFilters\n ? undefined\n : (updater) => {\n setInternalFilters((prev) => (typeof updater === 'function' ? updater(prev) : updater))\n },\n onGlobalFilterChange: externalGlobalFilter\n ? undefined\n : (updater) => {\n const next = typeof updater === 'function' ? updater(internalGlobal) : updater\n setInternalGlobal(next as string)\n onGlobalFilterChange?.(next as string)\n },\n onColumnVisibilityChange: (updater) => {\n setColumnVisibility((prev) => (typeof updater === 'function' ? updater(prev) : updater))\n },\n onColumnSizingChange: (updater) => {\n setSizing((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater\n onColumnSizingChange?.(next)\n return next\n })\n },\n onPaginationChange: enablePagination\n ? (updater) => {\n setPagination((prev) => {\n const next = typeof updater === 'function' ? updater(prev) : updater\n if (tableKey && syncState) update(tableKey, { pagination: next })\n onPageChange?.(next.pageIndex, next.pageSize)\n return next\n })\n }\n : undefined,\n\n onExpandedChange: enableExpanding ? setExpanded : undefined,\n getSubRows,\n autoResetExpanded: false,\n // Explicitly derive canExpand from source data so depth-N rows show the\n // toggle button even before their children have been loaded into subRows\n // by the filtered/sorted row models.\n getRowCanExpand: getSubRows\n ? (row) => {\n const subs = getSubRows(row.original as T, row.index)\n return Array.isArray(subs) && subs.length > 0\n }\n : undefined,\n\n // Phase 3: row-caching model when DataStore is present; stock model otherwise\n getCoreRowModel: dataStore ? getDataStoreCoreRowModel<T>() : getCoreRowModel(),\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n getSortedRowModel: manualSorting ? undefined : getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: enablePagination ? getPaginationRowModel() : undefined,\n\n globalFilterFn:\n (searchableFilterFn as FilterFn<T> | undefined) ??\n (defaultGlobalFilterFn as unknown as FilterFn<T>),\n enableColumnResizing,\n columnResizeMode: 'onChange',\n enableSorting,\n enableColumnFilters,\n })\n\n const handleGlobalFilterChange = useCallback(\n (value: string) => {\n table.setGlobalFilter(value)\n if (externalGlobalFilter === undefined) {\n setInternalGlobal(value)\n onGlobalFilterChange?.(value)\n }\n if (tableKey && syncState) update(tableKey, { searchTerm: value })\n },\n [table, externalGlobalFilter, onGlobalFilterChange, tableKey, syncState, update],\n )\n\n useEffect(() => {\n if (!tableReadyCalled.current && onTableReady) {\n tableReadyCalled.current = true\n onTableReady(table)\n }\n }, [table, onTableReady])\n\n return {\n table,\n pagination,\n globalFilter: effectiveGlobalFilter,\n handleGlobalFilterChange,\n }\n}\n","import type React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport type { ColumnSizingState } from '@tanstack/react-table'\nimport type { ColumnSizingMode, DataGridColumnDef } from '@/types'\n\ninterface UseColumnSizingOptions<T extends object> {\n columns: DataGridColumnDef<T>[]\n containerRef: React.RefObject<HTMLDivElement | null>\n mode: ColumnSizingMode\n}\n\ninterface SizingState {\n sizing: ColumnSizingState\n isSized: boolean\n}\n\n/**\n * Row count threshold above which the virtualizer is automatically enabled,\n * when the table has a fixed height (tableHeight is set).\n */\nexport const VIRTUAL_THRESHOLD = 100\n\nexport function useColumnSizing<T extends object>({\n columns,\n containerRef,\n mode,\n}: UseColumnSizingOptions<T>) {\n const userResized = useRef(new Set<string>())\n const lastComputed = useRef<ColumnSizingState>({})\n const lastContainerWidth = useRef<number>(0)\n const lastFlexFixedWidth = useRef<number | null>(null)\n const hasSized = useRef(false)\n const [state, setState] = useState<SizingState>({ sizing: {}, isSized: false })\n\n // Expose a setSizing that matches Dispatch<SetStateAction<ColumnSizingState>>\n // so TanStack's onColumnSizingChange can call it directly.\n const setSizing: React.Dispatch<React.SetStateAction<ColumnSizingState>> = useCallback(\n (updater) => {\n setState((prev) => ({\n ...prev,\n sizing: typeof updater === 'function' ? updater(prev.sizing) : updater,\n }))\n },\n [],\n )\n\n // Stable refs so measure() doesn't need to re-subscribe ResizeObserver\n const columnsRef = useRef(columns)\n columnsRef.current = columns\n const modeRef = useRef(mode)\n modeRef.current = mode\n const sizingRef = useRef(state.sizing)\n sizingRef.current = state.sizing\n\n /**\n * Measure rendered cells via DOM (AG Grid style).\n * Called after each render by DataGridTableView (via onMeasureColumns prop).\n *\n * For 'auto' mode: reads scrollWidth of [data-col-id] cells.\n * - scrollWidth > offsetWidth → content is truncated, column should be wider\n * - Columns only grow, never shrink (maxSeen tracking)\n *\n * For 'flex' mode: distributes remaining container width proportionally.\n * For 'fixed' mode: marks isSized without changing widths.\n */\n const measure = useCallback(() => {\n const container = containerRef.current\n if (!container) return\n\n const containerWidth = container.clientWidth\n if (containerWidth === 0) return\n const prevContainerWidth = lastContainerWidth.current\n lastContainerWidth.current = containerWidth\n\n const cols = columnsRef.current\n const currentSizing = sizingRef.current\n const m = modeRef.current\n\n // ── Detect user drag-overrides ─────────────────────────────────────────\n for (const [colId, currentSize] of Object.entries(currentSizing)) {\n const computed = lastComputed.current[colId]\n if (computed !== undefined && computed !== currentSize) {\n userResized.current.add(colId)\n }\n }\n\n const newSizing: ColumnSizingState = {}\n\n // ── Auto mode: DOM-based measurement ──────────────────────────────────\n // Reads scrollWidth of rendered [data-col-id] cells.\n // scrollWidth returns actual content width even for overflow:hidden elements,\n // so we can detect truncated content without canvas measurement.\n if (m === 'auto') {\n const cells = container.querySelectorAll<HTMLElement>('[data-col-id]')\n cells.forEach((cell) => {\n const colId = cell.dataset.colId\n if (!colId || userResized.current.has(colId)) return\n const w = cell.scrollWidth\n // Only expand, never shrink — take max of current and measured\n const current = newSizing[colId] ?? currentSizing[colId] ?? 0\n if (w > current) newSizing[colId] = w\n })\n }\n\n // ── Flex columns: distribute remaining space ───────────────────────────\n const getColId = (col: DataGridColumnDef<T>) =>\n (col.id ?? (col as { accessorKey?: string }).accessorKey) as string\n\n const flexCols = cols.filter((col) => col.meta?.flex != null)\n if (flexCols.length > 0) {\n const containerWidthChanged = Math.abs(containerWidth - prevContainerWidth) > 1\n const anyUserResized = flexCols.some((col) => userResized.current.has(getColId(col)))\n\n const freeCols = flexCols.filter((col) => !userResized.current.has(getColId(col)))\n const totalFlex = freeCols.reduce((sum, col) => sum + col.meta!.flex!, 0)\n const fixedWidth = cols\n .filter((col) => col.meta?.flex == null)\n .reduce((sum, col) => {\n const colId = getColId(col)\n const colDefSize = typeof col.size === 'number' ? col.size : 150\n return sum + (newSizing[colId] ?? currentSizing[colId] ?? colDefSize)\n }, 0)\n const userResizedFlexWidth = flexCols\n .filter((col) => userResized.current.has(getColId(col)))\n .reduce((sum, col) => sum + (currentSizing[getColId(col)] ?? 0), 0)\n const fixedWidthChanged =\n lastFlexFixedWidth.current !== null && lastFlexFixedWidth.current !== fixedWidth\n\n if (anyUserResized && !containerWidthChanged) {\n // User manually resized a flex column and container unchanged: freeze flex sizes.\n } else if (!containerWidthChanged && hasSized.current && !fixedWidthChanged) {\n // Container unchanged and fixed column sizes stable: skip redistribution.\n } else {\n lastFlexFixedWidth.current = fixedWidth\n const availableWidth = Math.max(0, containerWidth - fixedWidth - userResizedFlexWidth)\n let distributed = 0\n for (let i = 0; i < freeCols.length; i++) {\n const col = freeCols[i]!\n const colId = getColId(col)\n if (!colId) continue\n const flex = col.meta!.flex!\n const minW = col.meta?.minWidth ?? 60\n const isLast = i === freeCols.length - 1\n const w = isLast\n ? Math.max(minW, availableWidth - distributed)\n : Math.max(minW, Math.floor((flex / totalFlex) * availableWidth))\n newSizing[colId] = w\n distributed += w\n }\n }\n }\n\n const sizingChanged =\n Object.keys(newSizing).length > 0 &&\n Object.entries(newSizing).some(([id, w]) => currentSizing[id] !== w)\n const firstTime = !hasSized.current\n\n if (sizingChanged || firstTime) {\n if (sizingChanged) Object.assign(lastComputed.current, newSizing)\n if (firstTime) hasSized.current = true\n setState((prev) => ({\n sizing: sizingChanged ? { ...prev.sizing, ...newSizing } : prev.sizing,\n isSized: true,\n }))\n }\n }, [containerRef])\n\n // ── ResizeObserver: container width changes (debounced) ────────────────\n const roTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n const el = containerRef.current\n if (!el) return\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n const width = entry.contentRect.width\n if (width === 0 || Math.abs(width - lastContainerWidth.current) < 1) return\n if (roTimerRef.current) clearTimeout(roTimerRef.current)\n roTimerRef.current = setTimeout(measure, 150)\n })\n ro.observe(el)\n return () => {\n ro.disconnect()\n if (roTimerRef.current) clearTimeout(roTimerRef.current)\n }\n }, [measure, containerRef])\n\n const resetSizing = useCallback(() => {\n userResized.current.clear()\n lastComputed.current = {}\n lastContainerWidth.current = 0\n lastFlexFixedWidth.current = null\n hasSized.current = false\n setState({ sizing: {}, isSized: false })\n measure()\n }, [measure])\n\n return { sizing: state.sizing, isSized: state.isSized, setSizing, resetSizing, measure }\n}\n","import { useMemo, useRef } from 'react'\nimport type { DataGridBaseProps, DataGridColumnDef } from '@/types'\nimport { createCheckboxColumn } from '@/features/selection/CheckboxColumn'\nimport { useDataGridCore } from '@/core/hooks/useDataGridCore'\nimport { useColumnSizing } from '@/core/hooks/useColumnSizing'\n\ninterface UseDataGridBaseOptions<T extends object> extends DataGridBaseProps<T> {\n columns: DataGridColumnDef<T>[]\n // Pagination options (for DataGrid; Virtual/Infinity pass enablePagination: false)\n enablePagination?: boolean\n paginationConfig?: { pageSize?: number; initialPageIndex?: number }\n totalCount?: number\n onPageChange?: (pageIndex: number, pageSize: number) => void\n // Row identity — required for DataGridDrag stable reordering\n getRowId?: (originalRow: T, index: number) => string\n}\n\nexport function useDataGridBase<T extends object>(options: UseDataGridBaseOptions<T>) {\n const {\n data = [],\n dataStore,\n columns,\n enableSorting = true,\n initialSorting,\n onSortingChange,\n manualSorting,\n columnFilters,\n globalFilter,\n onGlobalFilterChange,\n searchableColumns,\n enableColumnResizing = true,\n enableColumnFilters = false,\n visibilityState,\n initialPinning,\n columnSizingMode = 'flex',\n checkboxConfig,\n enableExpanding,\n getSubRows,\n getRowId,\n tableKey,\n syncState,\n enablePagination = true,\n paginationConfig,\n totalCount,\n onPageChange,\n onTableReady,\n onColumnSizingChange,\n bordered,\n } = options\n\n const wrapperRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const columnsWithCheckbox = useMemo(() => {\n if (!checkboxConfig) return columns\n return [createCheckboxColumn(checkboxConfig), ...columns]\n }, [columns, checkboxConfig])\n\n const { sizing, isSized, setSizing, measure } = useColumnSizing({\n columns,\n containerRef,\n mode: columnSizingMode,\n })\n\n const { table } = useDataGridCore({\n data,\n dataStore,\n columns: columnsWithCheckbox,\n enableSorting,\n initialSorting,\n onSortingChange,\n manualSorting,\n columnFilters,\n globalFilter,\n onGlobalFilterChange,\n searchableColumns,\n enableColumnResizing,\n enableColumnFilters,\n visibilityState,\n initialPinning,\n tableKey,\n syncState,\n enablePagination,\n paginationConfig,\n totalCount,\n onPageChange,\n onTableReady,\n onColumnSizingChange,\n enableExpanding,\n getSubRows,\n getRowId,\n sizing,\n setSizing,\n })\n\n const rows = table.getRowModel().rows\n\n return { wrapperRef, containerRef, table, rows, isSized, bordered, measure }\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { Button as ButtonPrimitive } from '@base-ui/react/button'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '@/lib/utils'\n\nconst buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-none border border-transparent bg-clip-padding text-xs font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',\n outline:\n 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',\n ghost:\n 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',\n destructive:\n 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default:\n 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n xs: \"h-6 gap-1 rounded-none px-2 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-none px-2.5 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',\n icon: 'size-8',\n 'icon-xs': \"size-6 rounded-none [&_svg:not([class*='size-'])]:size-3\",\n 'icon-sm': 'size-7 rounded-none',\n 'icon-lg': 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nfunction Button({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {\n return (\n <ButtonPrimitive\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","'use client'\n\nimport * as React from 'react'\nimport { Select as SelectPrimitive } from '@base-ui/react/select'\nimport { ChevronsUpDown, ChevronUp, ChevronDown, Check } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nconst Select = SelectPrimitive.Root\n\nfunction SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {\n return (\n <SelectPrimitive.Group\n data-slot=\"select-group\"\n className={cn('scroll-my-1', className)}\n {...props}\n />\n )\n}\n\nfunction SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {\n return (\n <SelectPrimitive.Value\n data-slot=\"select-value\"\n className={cn('flex flex-1 text-left', className)}\n {...props}\n />\n )\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: SelectPrimitive.Trigger.Props & {\n size?: 'sm' | 'default'\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"flex w-fit items-center justify-between gap-1.5 rounded-none border border-input bg-transparent py-2 pr-2 pl-2.5 text-xs whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-none *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon\n render={<ChevronsUpDown className=\"pointer-events-none size-4 text-muted-foreground\" />}\n />\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n side = 'bottom',\n sideOffset = 4,\n align = 'center',\n alignOffset = 0,\n alignItemWithTrigger = true,\n ...props\n}: SelectPrimitive.Popup.Props &\n Pick<\n SelectPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset' | 'alignItemWithTrigger'\n >) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Positioner\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n alignItemWithTrigger={alignItemWithTrigger}\n className=\"isolate z-50\"\n >\n <SelectPrimitive.Popup\n data-slot=\"select-content\"\n data-align-trigger={alignItemWithTrigger}\n className={cn(\n 'dark isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-none text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!',\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.List>{children}</SelectPrimitive.List>\n <SelectScrollDownButton />\n </SelectPrimitive.Popup>\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({ className, ...props }: SelectPrimitive.GroupLabel.Props) {\n return (\n <SelectPrimitive.GroupLabel\n data-slot=\"select-label\"\n className={cn('px-2 py-2 text-xs text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({ className, children, ...props }: SelectPrimitive.Item.Props) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"relative flex w-full cursor-default items-center gap-2 rounded-none py-2 pr-8 pl-2 text-xs outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.ItemText className=\"flex flex-1 shrink-0 gap-2 whitespace-nowrap\">\n {children}\n </SelectPrimitive.ItemText>\n <SelectPrimitive.ItemIndicator\n render={\n <span className=\"pointer-events-none absolute right-2 flex size-4 items-center justify-center\" />\n }\n >\n <Check className=\"pointer-events-none size-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({ className, ...props }: SelectPrimitive.Separator.Props) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('pointer-events-none -mx-1 h-px bg-border', className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {\n return (\n <SelectPrimitive.ScrollUpArrow\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <ChevronUp />\n </SelectPrimitive.ScrollUpArrow>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {\n return (\n <SelectPrimitive.ScrollDownArrow\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <ChevronDown />\n </SelectPrimitive.ScrollDownArrow>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import type { Table } from '@tanstack/react-table'\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\n\ninterface DataGridPaginationBarProps<T extends object> {\n table: Table<T>\n pageSizes: number[]\n totalCount?: number\n}\n\nexport function DataGridPaginationBar<T extends object>({\n table,\n pageSizes,\n totalCount,\n}: DataGridPaginationBarProps<T>) {\n const { pageIndex, pageSize } = table.getState().pagination\n const pageCount = table.getPageCount()\n\n const pageSizeItems = pageSizes.map((size) => ({ label: String(size), value: size }))\n\n return (\n <div className=\"flex items-center justify-between gap-4 px-1 py-1 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-2\">\n <span>Rows per page</span>\n <Select\n items={pageSizeItems}\n value={pageSize}\n onValueChange={(val) => table.setPageSize(val as number)}\n >\n <SelectTrigger size=\"sm\" className=\"w-16\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeItems.map((item) => (\n <SelectItem key={item.value} value={item.value}>\n {item.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center gap-1\">\n <span>\n {totalCount !== undefined\n ? `${pageIndex * pageSize + 1}–${Math.min((pageIndex + 1) * pageSize, totalCount)} of ${totalCount}`\n : `Page ${pageIndex + 1} of ${Math.max(pageCount, 1)}`}\n </span>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.firstPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronsLeft />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronLeft />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <ChevronRight />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => table.lastPage()}\n disabled={!table.getCanNextPage()}\n >\n <ChevronsRight />\n </Button>\n </div>\n </div>\n )\n}\n","import type React from 'react'\nimport type { Table } from '@tanstack/react-table'\n\ninterface DataGridToolbarProps<T extends object> {\n table: Table<T>\n leftFilters?: (table: Table<T>) => React.ReactNode\n rightFilters?: (table: Table<T>) => React.ReactNode\n}\n\nexport function DataGridToolbar<T extends object>({\n table,\n leftFilters,\n rightFilters,\n}: DataGridToolbarProps<T>) {\n if (!(leftFilters || rightFilters)) {\n return null\n }\n\n return (\n <div className=\"flex items-center justify-between gap-2 shrink-0\">\n <div className=\"flex items-center gap-2\">{leftFilters?.(table)}</div>\n <div className=\"flex items-center gap-2\">{rightFilters?.(table)}</div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { Input as InputPrimitive } from '@base-ui/react/input'\n\nimport { cn } from '@/lib/utils'\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <InputPrimitive\n type={type}\n data-slot=\"input\"\n className={cn(\n 'h-8 w-full min-w-0 rounded-none border border-input bg-transparent px-2.5 py-1 text-xs transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-xs file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive/20 md:text-xs dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","'use client'\n\nimport { Checkbox as CheckboxPrimitive } from '@base-ui/react/checkbox'\nimport { Check } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nfunction Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer relative flex size-4 shrink-0 items-center justify-center rounded-none border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none [&>svg]:size-3.5\"\n >\n <Check />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","import * as React from 'react'\nimport { Popover as PopoverPrimitive } from '@base-ui/react/popover'\n\nimport { cn } from '@/lib/utils'\n\nfunction Popover({ ...props }: PopoverPrimitive.Root.Props) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({ ...props }: PopoverPrimitive.Trigger.Props) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = 4,\n ...props\n}: PopoverPrimitive.Popup.Props &\n Pick<PopoverPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n 'z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-none bg-popover p-2.5 text-xs text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Positioner>\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn('flex flex-col gap-1 text-xs', className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {\n return (\n <PopoverPrimitive.Title\n data-slot=\"popover-title\"\n className={cn('font-heading text-sm font-medium', className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({ className, ...props }: PopoverPrimitive.Description.Props) {\n return (\n <PopoverPrimitive.Description\n data-slot=\"popover-description\"\n className={cn('text-xs/relaxed text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\nexport { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger }\n","import * as React from 'react'\n\n/**\n * ScrollTable — DataGrid body content wrapper with table semantics.\n *\n * Uses <div role=\"table\"> instead of <table> to support the separated\n * header/body scroll architecture:\n * - Header panel: overflow:hidden, scrollLeft synced via JS\n * - Body panel: overflow:auto, actual scroll container\n *\n * This eliminates the scrollbar-track-over-header problem that occurred\n * when both were inside a single overflow:auto container.\n */\nconst ScrollTable = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"table\"\n className={['text-sm', className].filter(Boolean).join(' ')}\n {...props}\n />\n ),\n)\nScrollTable.displayName = 'ScrollTable'\n\nexport { ScrollTable }\n","import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport { cn } from '@/lib/utils'\n\ninterface CustomScrollbarProps {\n scrollRef: React.RefObject<HTMLDivElement | null>\n direction: 'vertical' | 'horizontal'\n className?: string\n style?: React.CSSProperties\n}\n\nexport function CustomScrollbar({ scrollRef, direction, className, style }: CustomScrollbarProps) {\n const isV = direction === 'vertical'\n const trackRef = useRef<HTMLDivElement>(null)\n\n // Refs for drag calculations (avoid stale closures)\n const scrollSizeRef = useRef(0)\n const clientSizeRef = useRef(0)\n\n // thumbStart/thumbEnd are fractions of track (0..1)\n const [thumbStart, setThumbStart] = useState(0)\n const [thumbEnd, setThumbEnd] = useState(1)\n\n const sync = useCallback(() => {\n const el = scrollRef.current\n if (!el) return\n\n const scrollPos = isV ? el.scrollTop : el.scrollLeft\n const scrollSize = isV ? el.scrollHeight : el.scrollWidth\n const clientSize = isV ? el.clientHeight : el.clientWidth\n\n scrollSizeRef.current = scrollSize\n clientSizeRef.current = clientSize\n\n if (scrollSize <= clientSize) {\n setThumbStart(0)\n setThumbEnd(1)\n return\n }\n\n setThumbStart(scrollPos / scrollSize)\n setThumbEnd((scrollPos + clientSize) / scrollSize)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scrollRef, isV])\n\n // Sync immediately on mount (layout effect avoids flash)\n useLayoutEffect(() => {\n sync()\n }, [sync])\n\n useEffect(() => {\n const el = scrollRef.current\n if (!el) return\n\n el.addEventListener('scroll', sync, { passive: true })\n\n const ro = new ResizeObserver(sync)\n ro.observe(el)\n // Also observe first child so virtualizer total-height changes are detected\n if (el.firstElementChild) ro.observe(el.firstElementChild)\n\n return () => {\n el.removeEventListener('scroll', sync)\n ro.disconnect()\n }\n }, [scrollRef, sync])\n\n const thumbFrac = thumbEnd - thumbStart\n const visible = thumbFrac < 0.9999\n\n const handleThumbMouseDown = (e: React.MouseEvent) => {\n e.preventDefault()\n e.stopPropagation()\n\n const el = scrollRef.current\n if (!el) return\n\n const startMouse = isV ? e.clientY : e.clientX\n const startScroll = isV ? el.scrollTop : el.scrollLeft\n\n const onMove = (e: MouseEvent) => {\n const el = scrollRef.current\n const track = trackRef.current\n if (!el || !track) return\n\n const trackPx = isV ? track.clientHeight : track.clientWidth\n const thumbPx = trackPx * thumbFrac\n const delta = (isV ? e.clientY : e.clientX) - startMouse\n const maxScroll = scrollSizeRef.current - clientSizeRef.current\n const scrollDelta = (delta / (trackPx - thumbPx)) * maxScroll\n\n if (isV) el.scrollTop = startScroll + scrollDelta\n else el.scrollLeft = startScroll + scrollDelta\n }\n\n const onUp = () => {\n window.removeEventListener('mousemove', onMove)\n window.removeEventListener('mouseup', onUp)\n }\n\n window.addEventListener('mousemove', onMove)\n window.addEventListener('mouseup', onUp)\n }\n\n const handleTrackClick = (e: React.MouseEvent) => {\n const track = trackRef.current\n const el = scrollRef.current\n if (!track || !el) return\n\n const rect = track.getBoundingClientRect()\n const clickFrac = isV\n ? (e.clientY - rect.top) / rect.height\n : (e.clientX - rect.left) / rect.width\n\n const targetFrac = Math.max(0, Math.min(1, (clickFrac - thumbFrac / 2) / (1 - thumbFrac)))\n const maxScroll = scrollSizeRef.current - clientSizeRef.current\n\n if (isV) el.scrollTop = targetFrac * maxScroll\n else el.scrollLeft = targetFrac * maxScroll\n }\n\n return (\n <div\n ref={trackRef}\n onClick={handleTrackClick}\n className={cn('relative', !visible && 'hidden', className)}\n style={style}\n >\n <div\n className=\"absolute rounded-full bg-foreground/20 hover:bg-foreground/35 transition-colors cursor-pointer\"\n onMouseDown={handleThumbMouseDown}\n onClick={(e) => e.stopPropagation()}\n style={\n isV\n ? { top: `${thumbStart * 100}%`, bottom: `${(1 - thumbEnd) * 100}%`, left: 2, right: 2 }\n : { left: `${thumbStart * 100}%`, right: `${(1 - thumbEnd) * 100}%`, top: 2, bottom: 2 }\n }\n />\n </div>\n )\n}\n","import React from 'react'\nimport type { Row } from '@tanstack/react-table'\n\n/**\n * Allows variants (e.g. DataGridDrag) to inject a per-row wrapper component\n * without threading props through DataGridShell → DataGridTableView → DataGridFlexBody.\n *\n * DataGridFlexBody reads this context and wraps each row if a wrapper is provided.\n *\n * Row<any> is intentional — this context is generic and doesn't care about TData.\n * Row<unknown> is structurally incompatible due to contravariant accessorFn<TData>.\n */\nexport const RowWrapperContext = React.createContext<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n React.ComponentType<{ row: Row<any>; children: React.ReactNode }> | null\n>(null)\n","import React, { useCallback, useContext, useEffect, useRef, useState } from 'react'\nimport {\n flexRender,\n type Row,\n type Table,\n type Column,\n type HeaderGroup,\n} from '@tanstack/react-table'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport {\n ArrowDown,\n ArrowUp,\n ArrowUpDown,\n Filter,\n Loader2,\n MoreHorizontal,\n SlidersHorizontal,\n X,\n} from 'lucide-react'\nimport type { Virtualizer } from '@tanstack/react-virtual'\nimport { Menu as ActionMenu } from '@base-ui/react/menu'\nimport { cn } from '@/lib/utils'\nimport { Input } from '@/components/ui/input'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { ScrollTable } from '@/core/ScrollTable'\nimport { CustomScrollbar } from '@/core/CustomScrollbar'\nimport { RowWrapperContext } from '@/features/reordering/RowWrapperContext'\nimport type { DataGridClassNames, TableViewConfig, TableWidthMode } from '@/types'\nimport { VIRTUAL_THRESHOLD } from '@/core/hooks/useColumnSizing'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface DataGridTableViewProps<T extends object> extends TableViewConfig<T> {\n table: Table<T>\n rows: Row<T>[]\n containerRef: React.RefObject<HTMLDivElement | null>\n loadMoreRef?: React.RefObject<HTMLDivElement | null>\n isFetchingNextPage?: boolean\n /**\n * Called after each render so the parent can update column auto-sizing\n * based on newly rendered (possibly virtual) rows.\n */\n onMeasureColumns?: () => void\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Utility\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction colStyle<T extends object>(col: Column<T>): React.CSSProperties {\n const pinned = col.getIsPinned()\n return {\n width: col.getSize(),\n flexShrink: 0,\n ...(pinned === 'left' && {\n position: 'sticky',\n left: col.getStart('left'),\n zIndex: 1,\n }),\n ...(pinned === 'right' && {\n position: 'sticky',\n right: col.getAfter('right'),\n zIndex: 1,\n }),\n }\n}\n\nfunction isPinnedEdge<T extends object>(\n col: Column<T>,\n table: Table<T>,\n): 'left-edge' | 'right-edge' | false {\n const pinned = col.getIsPinned()\n if (pinned === 'left') {\n const leftCols = table.getLeftLeafColumns()\n return leftCols[leftCols.length - 1]?.id === col.id ? 'left-edge' : false\n }\n if (pinned === 'right') {\n const rightCols = table.getRightLeafColumns()\n return rightCols[0]?.id === col.id ? 'right-edge' : false\n }\n return false\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DataGridHeaderRow\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface DataGridHeaderRowProps<T extends object> extends Pick<\n TableViewConfig<T>,\n 'enableColumnResizing' | 'bordered' | 'enableColumnFilters' | 'filterDisplay'\n> {\n headerGroup: HeaderGroup<T>\n table: Table<T>\n virtual: boolean\n tableWidthMode?: TableWidthMode\n classNames?: DataGridClassNames\n}\n\nfunction DataGridHeaderRow<T extends object>({\n headerGroup,\n table,\n enableColumnResizing,\n virtual,\n bordered,\n tableWidthMode = 'spacer',\n enableColumnFilters,\n filterDisplay = 'row',\n classNames,\n}: DataGridHeaderRowProps<T>) {\n const headers = headerGroup.headers\n return (\n <div\n role=\"row\"\n className=\"border-b border-border\"\n style={{ display: 'flex', width: '100%', height: '36px' }}\n >\n {headers.map((header, idx) => {\n const edge = isPinnedEdge(header.column, table)\n const isLast = idx === headers.length - 1\n const isFillLast = tableWidthMode === 'fill-last' && isLast\n return (\n <div\n role=\"columnheader\"\n key={header.id}\n data-col-id={header.column.id}\n className={cn(\n 'relative px-3 text-xs font-medium h-full bg-muted',\n 'text-muted-foreground whitespace-normal',\n 'select-none group',\n header.column.getCanSort() && 'cursor-pointer',\n bordered && 'border-r border-border',\n edge === 'left-edge' && 'shadow-[1px_0_0_0_hsl(var(--border))]',\n edge === 'right-edge' && 'shadow-[-1px_0_0_0_hsl(var(--border))]',\n classNames?.headerCell,\n )}\n style={\n virtual\n ? {\n display: 'flex',\n alignItems: 'center',\n width: isFillLast ? undefined : header.getSize(),\n ...(isFillLast && { flex: 1, minWidth: header.getSize() }),\n }\n : {\n ...colStyle(header.column),\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n ...(isFillLast && { flex: 1, width: 'auto' }),\n }\n }\n onClick={\n header.column.getCanSort() ? header.column.getToggleSortingHandler() : undefined\n }\n >\n <span className=\"flex items-center gap-1 min-w-0 overflow-hidden flex-1\">\n <span className=\"truncate\">\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </span>\n {header.column.getCanSort() && (\n <span className=\"ml-1 shrink-0\">\n {header.column.getIsSorted() === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : header.column.getIsSorted() === 'desc' ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ArrowUpDown className=\"h-3.5 w-3.5 opacity-40 group-hover:opacity-100\" />\n )}\n </span>\n )}\n </span>\n\n {enableColumnFilters && filterDisplay === 'icon' && (\n <HeaderFilterPopover col={header.column} table={table} />\n )}\n\n {enableColumnResizing && header.column.getCanResize() && (\n <div\n onMouseDown={(e) => {\n e.stopPropagation()\n header.getResizeHandler()(e)\n }}\n onTouchStart={(e) => {\n e.stopPropagation()\n header.getResizeHandler()(e)\n }}\n onClick={(e) => e.stopPropagation()}\n className=\"absolute right-0 top-0 h-full w-3 cursor-col-resize select-none touch-none\"\n >\n <div\n className={cn(\n 'absolute right-1.5 top-2 bottom-2 w-px rounded-full transition-colors',\n 'opacity-0 group-hover:opacity-100',\n header.column.getIsResizing()\n ? 'opacity-100 bg-primary'\n : 'bg-border hover:bg-primary',\n )}\n />\n </div>\n )}\n </div>\n )\n })}\n {!virtual && tableWidthMode === 'spacer' && (\n <div\n role=\"columnheader\"\n style={{ flex: 1, minWidth: 0, padding: 0 }}\n className=\"bg-muted\"\n />\n )}\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// HeaderFilterPopover — icon mode filter trigger inside header cell\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction HeaderFilterPopover<T extends object>({\n col,\n table,\n}: {\n col: Column<T>\n table: Table<T>\n}) {\n const [open, setOpen] = useState(false)\n // Stable ref callback via useCallback — an inline arrow would create a new reference\n // on every render, causing React to call it as null→el each time, re-triggering focus()\n const focusRef = useCallback((el: HTMLInputElement | null) => {\n el?.focus({ preventScroll: true })\n }, [])\n const ft = col.columnDef.meta?.filterType\n if (ft === false || ft === undefined) return null\n\n const hasFilter = col.getIsFiltered()\n const filterValue = (col.getFilterValue() ?? '') as string\n const numFilter = col.getFilterValue() as [string, string] | undefined\n const min = numFilter?.[0] ?? ''\n const max = numFilter?.[1] ?? ''\n\n return (\n <div onClick={(e) => e.stopPropagation()}>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n render={(props) => (\n <Button\n {...props}\n variant=\"ghost\"\n size=\"icon-xs\"\n className={cn(\n 'h-5 w-5 shrink-0',\n hasFilter ? 'text-primary opacity-100' : 'opacity-0 group-hover:opacity-60',\n )}\n >\n <Filter className=\"h-3 w-3\" />\n </Button>\n )}\n />\n <PopoverContent side=\"bottom\" align=\"start\" className=\"w-52\">\n {ft === 'select' ? (\n <SelectFilterCell col={col} table={table} onSelect={() => setOpen(false)} />\n ) : ft === 'multi-select' ? (\n <MultiSelectContent col={col} table={table} />\n ) : ft === 'number' ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs text-muted-foreground\">Min</span>\n <Input\n type=\"number\"\n placeholder=\"Min\"\n value={min}\n onChange={(e) =>\n col.setFilterValue((old: [string, string] = ['', '']) => [\n e.target.value,\n old[1],\n ])\n }\n className=\"h-7 text-xs\"\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs text-muted-foreground\">Max</span>\n <Input\n type=\"number\"\n placeholder=\"Max\"\n value={max}\n onChange={(e) =>\n col.setFilterValue((old: [string, string] = ['', '']) => [\n old[0],\n e.target.value,\n ])\n }\n className=\"h-7 text-xs\"\n />\n </div>\n {hasFilter && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => col.setFilterValue(undefined)}\n >\n Clear\n </Button>\n )}\n </div>\n ) : (\n <div className=\"relative\">\n <Input\n type=\"text\"\n placeholder=\"Filter…\"\n value={filterValue}\n onChange={(e) => col.setFilterValue(e.target.value || undefined)}\n className=\"h-7 text-xs pr-6\"\n ref={focusRef}\n />\n {filterValue && (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => col.setFilterValue(undefined)}\n className=\"absolute right-0.5 top-1/2 -translate-y-1/2\"\n >\n <X />\n </Button>\n )}\n </div>\n )}\n </PopoverContent>\n </Popover>\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// NumberFilterPopover\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction NumberFilterPopover<T extends object>({ col }: { col: Column<T> }) {\n const numFilter = col.getFilterValue() as [string, string] | undefined\n const min = numFilter?.[0] ?? ''\n const max = numFilter?.[1] ?? ''\n const hasFilter = min !== '' || max !== ''\n\n const label = hasFilter\n ? [min && `≥${min}`, max && `≤${max}`].filter(Boolean).join(' ')\n : 'Filter…'\n\n return (\n <Popover>\n <PopoverTrigger\n render={(props) => (\n <Button\n {...props}\n variant={hasFilter ? 'outline' : 'ghost'}\n size=\"sm\"\n className=\"h-7 w-full justify-start text-xs font-normal\"\n >\n <SlidersHorizontal className=\"h-3 w-3 shrink-0\" />\n <span className=\"truncate\">{label}</span>\n </Button>\n )}\n />\n <PopoverContent side=\"bottom\" align=\"start\" className=\"w-48\">\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs text-muted-foreground\">Min</span>\n <Input\n type=\"number\"\n placeholder=\"Min\"\n value={min}\n onChange={(e) =>\n col.setFilterValue((old: [string, string] = ['', '']) => [e.target.value, old[1]])\n }\n className=\"h-7 text-xs\"\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs text-muted-foreground\">Max</span>\n <Input\n type=\"number\"\n placeholder=\"Max\"\n value={max}\n onChange={(e) =>\n col.setFilterValue((old: [string, string] = ['', '']) => [old[0], e.target.value])\n }\n className=\"h-7 text-xs\"\n />\n </div>\n {hasFilter && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => col.setFilterValue(undefined)}\n >\n Clear\n </Button>\n )}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// SelectFilterCell — lazily scans rows on first open\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction SelectFilterCell<T extends object>({\n col,\n table,\n onSelect,\n}: {\n col: Column<T>\n table: Table<T>\n onSelect?: () => void\n}) {\n const [options, setOptions] = useState<{ label: string; value: string | null }[] | null>(null)\n const filterValue = (col.getFilterValue() ?? '') as string\n\n const handleOpenChange = (open: boolean) => {\n if (open && options === null) {\n const vals = new Set<string>()\n table.getCoreRowModel().rows.forEach((row) => {\n const v = row.getValue(col.id)\n if (v != null) vals.add(String(v))\n })\n const sorted = Array.from(vals).sort()\n setOptions([{ label: 'All', value: null }, ...sorted.map((v) => ({ label: v, value: v }))])\n }\n }\n\n const items = options ?? []\n\n return (\n <Select\n items={items}\n value={filterValue || null}\n onValueChange={(val) => {\n col.setFilterValue(val ?? undefined)\n onSelect?.()\n }}\n onOpenChange={handleOpenChange}\n >\n <SelectTrigger size=\"sm\" className=\"h-7 w-full text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {items.map((item) => (\n <SelectItem key={item.value ?? '__all__'} value={item.value}>\n {item.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MultiSelectContent — shared checkbox list for multi-select filter\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction MultiSelectContent<T extends object>({ col, table }: { col: Column<T>; table: Table<T> }) {\n const [options, setOptions] = useState<string[] | null>(null)\n const selected = (col.getFilterValue() as string[] | undefined) ?? []\n\n useEffect(() => {\n const vals = new Set<string>()\n table.getCoreRowModel().rows.forEach((row) => {\n const v = row.getValue(col.id)\n if (v != null) vals.add(String(v))\n })\n setOptions(Array.from(vals).sort())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const toggle = (val: string) => {\n const next = selected.includes(val) ? selected.filter((v) => v !== val) : [...selected, val]\n col.setFilterValue(next.length > 0 ? next : undefined)\n }\n\n return (\n <div className=\"flex flex-col gap-0.5\">\n <div className=\"max-h-48 overflow-y-auto flex flex-col gap-0.5\">\n {(options ?? []).map((opt) => (\n <label\n key={opt}\n className=\"flex items-center gap-2 px-1 py-1 cursor-pointer hover:bg-muted rounded-sm text-xs select-none\"\n >\n <Checkbox\n checked={selected.includes(opt)}\n onCheckedChange={() => toggle(opt)}\n className=\"shrink-0\"\n />\n <span className=\"truncate\">{opt}</span>\n </label>\n ))}\n </div>\n {selected.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 text-xs mt-1\"\n onClick={() => col.setFilterValue(undefined)}\n >\n Clear ({selected.length})\n </Button>\n )}\n </div>\n )\n}\n\n// Multi-select trigger button for filter row mode\nfunction MultiSelectFilterCell<T extends object>({\n col,\n table,\n}: {\n col: Column<T>\n table: Table<T>\n}) {\n const selected = (col.getFilterValue() as string[] | undefined) ?? []\n const label = selected.length > 0 ? `${selected.length} selected` : 'Filter…'\n\n return (\n <Popover>\n <PopoverTrigger\n render={(props) => (\n <Button\n {...props}\n variant={selected.length > 0 ? 'outline' : 'ghost'}\n size=\"sm\"\n className=\"h-7 w-full justify-start text-xs font-normal\"\n >\n <span className=\"truncate\">{label}</span>\n </Button>\n )}\n />\n <PopoverContent side=\"bottom\" align=\"start\" className=\"w-48\">\n <MultiSelectContent col={col} table={table} />\n </PopoverContent>\n </Popover>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DataGridFilterRow\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface DataGridFilterRowProps<T extends object> extends Pick<TableViewConfig<T>, 'bordered'> {\n visibleLeafColumns: Column<T>[]\n table: Table<T>\n virtual: boolean\n tableWidthMode?: TableWidthMode\n}\n\nfunction DataGridFilterRow<T extends object>({\n visibleLeafColumns,\n table,\n virtual,\n bordered,\n tableWidthMode = 'spacer',\n}: DataGridFilterRowProps<T>) {\n return (\n <div\n role=\"row\"\n className=\"border-b border-border bg-muted\"\n style={{ display: 'flex', width: '100%', height: '36px' }}\n >\n {visibleLeafColumns.map((col) => {\n const ft = col.columnDef.meta?.filterType\n const filterValue = (col.getFilterValue() ?? '') as string\n const cellStyle: React.CSSProperties = virtual\n ? { display: 'flex', alignItems: 'center', width: col.getSize() }\n : { ...colStyle(col), display: 'flex', alignItems: 'center' }\n\n if (ft === false) {\n return (\n <div\n role=\"columnheader\"\n key={col.id}\n className={cn('px-2 py-1', bordered && 'border-r border-border')}\n style={cellStyle}\n />\n )\n }\n\n return (\n <div\n role=\"columnheader\"\n key={col.id}\n className={cn('px-2 py-1 font-normal', bordered && 'border-r border-border')}\n style={cellStyle}\n >\n {ft === 'select' ? (\n <SelectFilterCell col={col} table={table} />\n ) : ft === 'multi-select' ? (\n <MultiSelectFilterCell col={col} table={table} />\n ) : ft === 'number' ? (\n <NumberFilterPopover col={col} />\n ) : (\n <div className=\"relative w-full\">\n <Input\n type=\"text\"\n placeholder=\"Filter…\"\n value={filterValue}\n onChange={(e) => col.setFilterValue(e.target.value || undefined)}\n className=\"h-7 text-xs pr-6\"\n />\n {filterValue && (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => col.setFilterValue(undefined)}\n className=\"absolute right-0.5 top-1/2 -translate-y-1/2\"\n >\n <X />\n </Button>\n )}\n </div>\n )}\n </div>\n )\n })}\n {!virtual && tableWidthMode === 'spacer' && (\n <div\n role=\"columnheader\"\n style={{ flex: 1, minWidth: 0, padding: 0 }}\n className=\"bg-muted\"\n />\n )}\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DataGridBodyRow\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface DataGridBodyRowProps<T extends object> extends Pick<\n TableViewConfig<T>,\n 'onRowClick' | 'rowCursor' | 'bordered'\n> {\n row: Row<T>\n table: Table<T>\n style?: React.CSSProperties\n dataIndex?: number\n measureRef?: (node: Element | null) => void\n showSpacer?: boolean\n fillLast?: boolean\n rowHeight?: number\n onActionTrigger?: (row: T, el: HTMLElement) => void\n classNames?: DataGridClassNames\n}\n\nfunction DataGridBodyRow<T extends object>({\n row,\n table,\n onRowClick,\n rowCursor,\n style,\n dataIndex,\n measureRef,\n showSpacer = false,\n fillLast = false,\n bordered = false,\n rowHeight,\n onActionTrigger,\n classNames,\n}: DataGridBodyRowProps<T>) {\n const visibleCells = row.getVisibleCells()\n return (\n <div\n role=\"row\"\n data-index={dataIndex}\n ref={measureRef}\n onClick={onRowClick ? () => onRowClick(row.original) : undefined}\n className={cn(\n 'flex w-full border-b border-border transition-colors',\n onRowClick || rowCursor ? 'cursor-pointer hover:bg-muted/50' : 'hover:bg-muted/30',\n classNames?.row,\n )}\n style={{ minHeight: rowHeight, ...style }}\n >\n {visibleCells.map((cell, idx) => {\n const meta = cell.column.columnDef.meta\n const edge = isPinnedEdge(cell.column, table)\n const isLast = idx === visibleCells.length - 1\n const isFillCell = fillLast && isLast\n return (\n <div\n role=\"gridcell\"\n key={cell.id}\n data-col-id={cell.column.id}\n className={cn(\n 'flex items-center px-3 py-1 overflow-hidden bg-background',\n meta?.align === 'right' && 'justify-end',\n meta?.align === 'center' && 'justify-center',\n meta?.wrap && 'items-start whitespace-normal',\n bordered && 'border-r border-border',\n edge === 'left-edge' && 'shadow-[1px_0_0_0_hsl(var(--border))]',\n edge === 'right-edge' && 'shadow-[-1px_0_0_0_hsl(var(--border))]',\n classNames?.cell,\n )}\n style={{ ...colStyle(cell.column), ...(isFillCell && { flex: 1, width: 'auto' }) }}\n >\n {meta?.actions != null ? (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n className=\"h-6 w-6\"\n onClick={(e) => {\n e.stopPropagation()\n onActionTrigger?.(row.original, e.currentTarget as HTMLElement)\n }}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n ) : (\n flexRender(cell.column.columnDef.cell, cell.getContext())\n )}\n </div>\n )\n })}\n {showSpacer && (\n <div\n role=\"gridcell\"\n style={{ flex: 1, minWidth: 0, padding: 0 }}\n className=\"bg-background\"\n />\n )}\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DataGridVirtualBody\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface DataGridVirtualBodyProps<T extends object> extends Pick<\n TableViewConfig<T>,\n 'onRowClick' | 'rowCursor' | 'bordered' | 'rowHeight'\n> {\n rows: Row<T>[]\n table: Table<T>\n rowVirtualizer: Virtualizer<HTMLDivElement, Element>\n onActionTrigger?: (row: T, el: HTMLElement) => void\n tableWidthMode?: TableWidthMode\n classNames?: DataGridClassNames\n}\n\nfunction DataGridVirtualBody<T extends object>({\n rows,\n table,\n rowVirtualizer,\n onRowClick,\n rowCursor,\n bordered,\n rowHeight,\n onActionTrigger,\n tableWidthMode = 'spacer',\n classNames,\n}: DataGridVirtualBodyProps<T>) {\n const virtualItems = rowVirtualizer.getVirtualItems()\n const totalSize = rowVirtualizer.getTotalSize()\n\n return (\n <div role=\"rowgroup\" style={{ display: 'block', height: totalSize, position: 'relative' }}>\n {virtualItems.map((virtualRow) => {\n const row = rows[virtualRow.index]!\n return (\n <DataGridBodyRow\n key={row.id}\n row={row}\n table={table}\n onRowClick={onRowClick}\n rowCursor={rowCursor}\n bordered={bordered}\n rowHeight={rowHeight}\n dataIndex={virtualRow.index}\n measureRef={rowVirtualizer.measureElement}\n style={{\n position: 'absolute',\n width: '100%',\n transform: `translateY(${virtualRow.start}px)`,\n }}\n onActionTrigger={onActionTrigger}\n fillLast={tableWidthMode === 'fill-last'}\n classNames={classNames}\n />\n )\n })}\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DataGridFlexBody\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface DataGridFlexBodyProps<T extends object> extends Pick<\n TableViewConfig<T>,\n | 'isLoading'\n | 'emptyMessage'\n | 'emptyContent'\n | 'onRowClick'\n | 'rowCursor'\n | 'bordered'\n | 'rowHeight'\n> {\n rows: Row<T>[]\n table: Table<T>\n visibleLeafColumns: Column<T>[]\n onActionTrigger?: (row: T, el: HTMLElement) => void\n tableWidthMode?: TableWidthMode\n classNames?: DataGridClassNames\n}\n\nfunction DataGridFlexBody<T extends object>({\n rows,\n table,\n visibleLeafColumns,\n isLoading,\n emptyMessage,\n emptyContent,\n onRowClick,\n rowCursor,\n bordered,\n rowHeight,\n onActionTrigger,\n tableWidthMode = 'spacer',\n classNames,\n}: DataGridFlexBodyProps<T>) {\n const showSpacer = tableWidthMode === 'spacer'\n const fillLast = tableWidthMode === 'fill-last'\n const RowWrapper = useContext(RowWrapperContext)\n\n if (isLoading) {\n return (\n <div role=\"rowgroup\" style={{ display: 'block' }} className=\"[&>div:last-child]:border-b-0\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div\n role=\"row\"\n key={i}\n className=\"flex w-full border-b border-border\"\n style={{ minHeight: rowHeight }}\n >\n {visibleLeafColumns.map((col, colIdx) => {\n const isLast = colIdx === visibleLeafColumns.length - 1\n return (\n <div\n role=\"gridcell\"\n key={col.id}\n data-col-id={col.id}\n className={cn(\n 'flex items-center px-3 py-1',\n bordered && 'border-r border-border',\n )}\n style={{\n ...colStyle(col),\n ...(fillLast && isLast && { flex: 1, width: 'auto' }),\n }}\n >\n <div className=\"h-4 w-full animate-pulse rounded bg-muted\" />\n </div>\n )\n })}\n {showSpacer && <div role=\"gridcell\" style={{ flex: 1, minWidth: 0, padding: 0 }} />}\n </div>\n ))}\n </div>\n )\n }\n\n if (rows.length === 0) {\n return (\n <div role=\"rowgroup\" style={{ display: 'block' }}>\n <div role=\"row\" className=\"flex w-full\">\n <div role=\"gridcell\" className=\"flex-1\">\n {emptyContent ?? (\n <div className=\"py-12 text-center text-muted-foreground text-sm\">{emptyMessage}</div>\n )}\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div role=\"rowgroup\" style={{ display: 'block' }} className=\"[&>div:last-child]:border-b-0\">\n {rows.map((row) => {\n const bodyRow = (\n <DataGridBodyRow\n row={row}\n table={table}\n onRowClick={onRowClick}\n rowCursor={rowCursor}\n bordered={bordered}\n rowHeight={rowHeight}\n showSpacer={showSpacer}\n fillLast={fillLast}\n onActionTrigger={onActionTrigger}\n classNames={classNames}\n />\n )\n if (RowWrapper) {\n return (\n <RowWrapper key={row.id} row={row}>\n {bodyRow}\n </RowWrapper>\n )\n }\n return <React.Fragment key={row.id}>{bodyRow}</React.Fragment>\n })}\n </div>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// DataGridTableView (main)\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function DataGridTableView<T extends object>({\n table,\n rows,\n containerRef,\n isLoading,\n emptyMessage = 'No data',\n emptyContent,\n showHeader = true,\n onRowClick,\n rowCursor,\n enableColumnResizing = true,\n enableColumnFilters = false,\n filterDisplay = 'row',\n tableHeight,\n tableWidthMode = 'spacer',\n rowHeight,\n estimateRowHeight,\n overscan = 10,\n loadMoreRef,\n isFetchingNextPage,\n bordered = false,\n onMeasureColumns,\n classNames,\n}: DataGridTableViewProps<T>) {\n const effectiveEstimate = estimateRowHeight ?? rowHeight ?? 33\n\n // ── Action menu state ──────────────────────────────────────────────────────\n const [actionMenuOpen, setActionMenuOpen] = useState(false)\n const [activeRow, setActiveRow] = useState<T | null>(null)\n const anchorRef = useRef<{ getBoundingClientRect: () => DOMRect } | null>(null)\n\n const handleActionTrigger = useCallback((row: T, el: HTMLElement) => {\n const rect = el.getBoundingClientRect()\n anchorRef.current = { getBoundingClientRect: () => rect }\n setActiveRow(row)\n setActionMenuOpen(true)\n }, [])\n\n const headerGroups = table.getHeaderGroups()\n const visibleLeafColumns = table.getVisibleLeafColumns()\n\n const actionCol = visibleLeafColumns.find((col) => col.columnDef.meta?.actions != null)\n const actionItems = actionCol && activeRow ? actionCol.columnDef.meta!.actions!(activeRow) : []\n\n const hasFixedHeight = tableHeight != null && tableHeight !== 'auto'\n const virtual = hasFixedHeight && rows.length >= VIRTUAL_THRESHOLD\n\n // ── After each render, trigger column auto-measurement ─────────────────────\n useEffect(() => {\n if (!table.getState().columnSizingInfo.isResizingColumn) {\n onMeasureColumns?.()\n }\n })\n\n // ── Separated header/body scroll refs ──────────────────────────────────────\n // headerScrollRef: overflow:hidden panel — scrollLeft is synced from body\n // bodyScrollRef: actual scroll container — drives virtualizer + scroll events\n // containerRef: outer wrapper — used by useColumnSizing (clientWidth + DOM query)\n const headerScrollRef = useRef<HTMLDivElement>(null)\n const bodyScrollRef = useRef<HTMLDivElement>(null)\n\n const syncScroll = useCallback((e: React.UIEvent<HTMLDivElement>) => {\n if (headerScrollRef.current) {\n headerScrollRef.current.scrollLeft = e.currentTarget.scrollLeft\n }\n }, [])\n\n const rowVirtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => bodyScrollRef.current,\n estimateSize: () => effectiveEstimate,\n overscan,\n enabled: virtual,\n })\n\n // Body wrapper: fixed height when tableHeight is set so hscroll stays inside\n const bodyWrapperStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n ...(tableHeight && tableHeight !== 'auto' ? { height: tableHeight as string | number } : {}),\n }\n\n // Body scroll element: fills remaining space after hscroll takes its height\n const bodyStyle: React.CSSProperties = {\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n }\n\n const innerWidth = table.getTotalSize()\n\n return (\n <>\n {/*\n Outer wrapper — containerRef:\n - ResizeObserver target for useColumnSizing\n - querySelectorAll('[data-col-id]') finds cells in both header and body\n */}\n <div\n ref={containerRef}\n style={{\n position: 'relative',\n width: '100%',\n minWidth: 0,\n isolation: 'isolate',\n // Limit reflow scope to this subtree.\n // 'layout paint' isolates layout and paint without size containment,\n // which is required since the outer div's height is determined by its children.\n contain: 'layout paint',\n }}\n className={cn('rounded-md border border-border', classNames?.container)}\n >\n {/* Header panel — conditionally rendered, overflow:hidden, scrollLeft mirrors body */}\n {showHeader && (\n <div ref={headerScrollRef} style={{ overflow: 'hidden' }} className={cn('bg-muted', classNames?.header)}>\n <div style={{ width: innerWidth, minWidth: '100%' }}>\n {headerGroups.map((headerGroup) => (\n <DataGridHeaderRow\n key={headerGroup.id}\n headerGroup={headerGroup}\n table={table}\n enableColumnResizing={enableColumnResizing}\n enableColumnFilters={enableColumnFilters}\n filterDisplay={filterDisplay}\n virtual={virtual}\n bordered={bordered}\n tableWidthMode={tableWidthMode}\n classNames={classNames}\n />\n ))}\n {enableColumnFilters && filterDisplay !== 'icon' && (\n <DataGridFilterRow\n visibleLeafColumns={visibleLeafColumns}\n table={table}\n virtual={virtual}\n bordered={bordered}\n tableWidthMode={tableWidthMode}\n />\n )}\n </div>\n </div>\n )}\n\n {/* Body scroll container + scrollbars */}\n <div style={bodyWrapperStyle}>\n <div\n ref={bodyScrollRef}\n style={bodyStyle}\n onScroll={syncScroll}\n className=\"scrollbar-none\"\n >\n <ScrollTable style={{ width: innerWidth, minWidth: '100%' }}>\n {virtual ? (\n <DataGridVirtualBody\n rows={rows}\n table={table}\n rowVirtualizer={rowVirtualizer}\n onRowClick={onRowClick}\n rowCursor={rowCursor}\n bordered={bordered}\n rowHeight={rowHeight}\n onActionTrigger={actionCol ? handleActionTrigger : undefined}\n tableWidthMode={tableWidthMode}\n classNames={classNames}\n />\n ) : (\n <DataGridFlexBody\n rows={rows}\n table={table}\n visibleLeafColumns={visibleLeafColumns}\n isLoading={isLoading}\n emptyMessage={emptyMessage}\n emptyContent={emptyContent}\n onRowClick={onRowClick}\n rowCursor={rowCursor}\n bordered={bordered}\n rowHeight={rowHeight}\n onActionTrigger={actionCol ? handleActionTrigger : undefined}\n tableWidthMode={tableWidthMode}\n classNames={classNames}\n />\n )}\n </ScrollTable>\n\n {loadMoreRef && (\n <div ref={loadMoreRef} className=\"py-2 flex justify-center\">\n {isFetchingNextPage && (\n <Loader2 className=\"h-5 w-5 animate-spin text-muted-foreground\" />\n )}\n </div>\n )}\n </div>\n\n {/* Vertical custom scrollbar — overlays body right edge */}\n <CustomScrollbar\n scrollRef={bodyScrollRef}\n direction=\"vertical\"\n className=\"absolute right-0 top-0 bottom-0\"\n style={{ width: 8 }}\n />\n\n {/* Horizontal scrollbar — flex item, pushes rows up from inside */}\n <CustomScrollbar scrollRef={bodyScrollRef} direction=\"horizontal\" style={{ height: 8 }} />\n </div>\n </div>\n\n {/* Single shared action menu — anchored to the clicked trigger button */}\n {actionCol && (\n <ActionMenu.Root open={actionMenuOpen} onOpenChange={setActionMenuOpen}>\n <ActionMenu.Portal>\n <ActionMenu.Positioner\n anchor={anchorRef.current}\n side=\"bottom\"\n align=\"end\"\n sideOffset={4}\n className=\"isolate z-50 outline-none\"\n >\n <ActionMenu.Popup className=\"min-w-32 origin-(--transform-origin) overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\">\n {actionItems.map((item, i) => (\n <ActionMenu.Item\n key={i}\n disabled={item.disabled}\n data-variant={item.variant ?? 'default'}\n onClick={() => {\n item.onClick(activeRow!)\n setActionMenuOpen(false)\n }}\n className=\"relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n {item.icon}\n {item.label}\n </ActionMenu.Item>\n ))}\n </ActionMenu.Popup>\n </ActionMenu.Positioner>\n </ActionMenu.Portal>\n </ActionMenu.Root>\n )}\n </>\n )\n}\n","import type React from 'react'\nimport type { Table, Row } from '@tanstack/react-table'\nimport { cn } from '@/lib/utils'\nimport { DataGridToolbar } from '@/core/DataGridToolbar'\nimport { DataGridTableView } from '@/core/DataGridTableView'\nimport type { TableViewConfig } from '@/types'\n\ninterface DataGridShellProps<T extends object> extends TableViewConfig<T> {\n wrapperRef: React.RefObject<HTMLDivElement | null>\n containerRef: React.RefObject<HTMLDivElement | null>\n table: Table<T>\n rows: Row<T>[]\n isSized: boolean\n measure: () => void\n error?: Error | null\n leftFilters?: (table: Table<T>) => React.ReactNode\n rightFilters?: (table: Table<T>) => React.ReactNode\n loadMoreRef?: React.RefObject<HTMLDivElement | null>\n isFetchingNextPage?: boolean\n footer?: React.ReactNode\n}\n\nexport function DataGridShell<T extends object>({\n wrapperRef,\n containerRef,\n table,\n rows,\n isSized,\n measure,\n error,\n leftFilters,\n rightFilters,\n loadMoreRef,\n isFetchingNextPage,\n footer,\n ...viewConfig\n}: DataGridShellProps<T>) {\n if (error) {\n return (\n <div className=\"flex items-center justify-center py-12 text-sm text-destructive\">\n {error.message}\n </div>\n )\n }\n\n return (\n <div ref={wrapperRef} className=\"flex flex-col gap-3 w-full min-w-0 overflow-hidden\">\n <DataGridToolbar table={table} leftFilters={leftFilters} rightFilters={rightFilters} />\n\n <div className={cn('min-w-0', !isSized && 'invisible')}>\n <DataGridTableView\n table={table}\n rows={rows}\n containerRef={containerRef}\n loadMoreRef={loadMoreRef}\n isFetchingNextPage={isFetchingNextPage}\n onMeasureColumns={measure}\n {...viewConfig}\n />\n </div>\n\n {footer}\n </div>\n )\n}\n","import { useEffect } from 'react'\nimport type { Table } from '@tanstack/react-table'\nimport type { DataGridProps } from '@/types'\nimport { useDataGridBase } from '@/core/hooks/useDataGridBase'\nimport { DataGridPaginationBar } from '@/core/DataGridPaginationBar'\nimport { DataGridShell } from '@/core/DataGridShell'\n\ninterface DataGridPropsWithRef<T extends object> extends DataGridProps<T> {\n /** Ref populated with the TanStack Table instance after first render */\n tableRef?: React.RefObject<Table<T> | null>\n}\n\nexport function DataGrid<T extends object>(props: DataGridPropsWithRef<T>) {\n const {\n error,\n leftFilters,\n rightFilters,\n enablePagination = true,\n pageSizes = [10, 20, 50, 100],\n totalCount,\n tableRef,\n } = props\n\n const { wrapperRef, containerRef, table, rows, isSized, measure } = useDataGridBase(props)\n\n useEffect(() => {\n if (tableRef) {\n ;(tableRef as React.MutableRefObject<Table<T> | null>).current = table\n return () => {\n ;(tableRef as React.MutableRefObject<Table<T> | null>).current = null\n }\n }\n }, [table, tableRef])\n\n return (\n <DataGridShell\n {...props}\n wrapperRef={wrapperRef}\n containerRef={containerRef}\n table={table}\n rows={rows}\n isSized={isSized}\n measure={measure}\n error={error}\n leftFilters={leftFilters}\n rightFilters={rightFilters}\n footer={\n enablePagination ? (\n <DataGridPaginationBar table={table} pageSizes={pageSizes} totalCount={totalCount} />\n ) : null\n }\n />\n )\n}\n","import { useEffect, useRef } from 'react'\n\ninterface UseInfiniteScrollOptions {\n hasNextPage?: boolean\n isFetchingNextPage?: boolean\n fetchNextPage?: () => void\n rootMargin?: string\n enabled?: boolean\n}\n\n/**\n * Attach an IntersectionObserver to a sentinel element.\n * When the sentinel enters the viewport, triggers fetchNextPage.\n */\nexport function useInfiniteScroll({\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n rootMargin = '100px',\n enabled = true,\n}: UseInfiniteScrollOptions) {\n const loadMoreRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!enabled || !loadMoreRef.current) return\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry?.isIntersecting && hasNextPage && !isFetchingNextPage) {\n fetchNextPage?.()\n }\n },\n { rootMargin },\n )\n\n observer.observe(loadMoreRef.current)\n return () => observer.disconnect()\n }, [hasNextPage, isFetchingNextPage, fetchNextPage, rootMargin, enabled])\n\n return { loadMoreRef }\n}\n","import type { DataGridInfinityProps } from '@/types'\nimport { useDataGridBase } from '@/core/hooks/useDataGridBase'\nimport { useInfiniteScroll } from '@/core/hooks/useInfiniteScroll'\nimport { DataGridShell } from '@/core/DataGridShell'\n\nexport function DataGridInfinity<T extends object>(props: DataGridInfinityProps<T>) {\n const {\n error,\n leftFilters,\n rightFilters,\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n rootMargin = '100px',\n isLoading,\n } = props\n\n const { wrapperRef, containerRef, table, rows, isSized, measure } = useDataGridBase({\n ...props,\n enablePagination: false,\n })\n\n const { loadMoreRef } = useInfiniteScroll({\n hasNextPage,\n isFetchingNextPage,\n fetchNextPage,\n rootMargin,\n enabled: !isLoading,\n })\n\n return (\n <DataGridShell\n {...props}\n wrapperRef={wrapperRef}\n containerRef={containerRef}\n table={table}\n rows={rows}\n isSized={isSized}\n measure={measure}\n error={error}\n leftFilters={leftFilters}\n rightFilters={rightFilters}\n loadMoreRef={loadMoreRef}\n isFetchingNextPage={isFetchingNextPage}\n />\n )\n}\n","import React from 'react'\nimport type { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core'\n\nexport interface RowDragContextValue {\n listeners: DraggableSyntheticListeners | undefined\n attributes: DraggableAttributes\n isDragging: boolean\n}\n\n/**\n * Provides drag handle listeners/attributes to DragHandleCell.\n * Set by SortableRow for each row — DragHandleCell reads it via useContext.\n */\nexport const RowDragContext = React.createContext<RowDragContextValue | null>(null)\n","import React from 'react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport type { Row } from '@tanstack/react-table'\nimport { RowDragContext } from '@/features/reordering/RowDragContext'\n\ninterface SortableRowProps {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n row: Row<any>\n children: React.ReactNode\n}\n\n/**\n * Wraps a DataGridBodyRow with dnd-kit sortable behaviour.\n * Provides RowDragContext so DragHandleCell can attach listeners without props.\n */\nexport function SortableRow({ row, children }: SortableRowProps) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: row.id,\n })\n\n return (\n <RowDragContext.Provider value={{ listeners, attributes, isDragging }}>\n <div\n ref={setNodeRef}\n style={{\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.4 : 1,\n position: 'relative',\n zIndex: isDragging ? 1 : 0,\n }}\n >\n {children}\n </div>\n </RowDragContext.Provider>\n )\n}\n","import { useState } from 'react'\nimport {\n DndContext,\n closestCenter,\n PointerSensor,\n useSensor,\n useSensors,\n DragOverlay,\n type DragEndEvent,\n type DragStartEvent,\n} from '@dnd-kit/core'\nimport { SortableContext, verticalListSortingStrategy, arrayMove } from '@dnd-kit/sortable'\nimport type { DataGridDragProps } from '@/types'\nimport { useDataGridBase } from '@/core/hooks/useDataGridBase'\nimport { DataGridShell } from '@/core/DataGridShell'\nimport { RowWrapperContext } from '@/features/reordering/RowWrapperContext'\nimport { SortableRow } from '@/features/reordering/SortableRow'\n\nexport function DataGridDrag<T extends object>(props: DataGridDragProps<T>) {\n const { data = [], onRowReorder, getRowId } = props\n\n const { wrapperRef, containerRef, table, rows, isSized, measure } = useDataGridBase({\n ...props,\n // Sorting changes visual order — incompatible with manual row reordering\n enableSorting: false,\n // Pagination splits data — reorder applies within the loaded set only\n enablePagination: false,\n getRowId,\n })\n\n const [activeRowId, setActiveRowId] = useState<string | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n // Require a small move before drag starts — prevents click from triggering drag\n activationConstraint: { distance: 5 },\n }),\n )\n\n const rowIds = rows.map((r) => r.id)\n\n const handleDragStart = ({ active }: DragStartEvent) => {\n setActiveRowId(String(active.id))\n }\n\n const handleDragEnd = ({ active, over }: DragEndEvent) => {\n setActiveRowId(null)\n if (!over || active.id === over.id) return\n\n const activeRow = rows.find((r) => r.id === String(active.id))\n const overRow = rows.find((r) => r.id === String(over.id))\n if (!activeRow || !overRow) return\n\n const fromIdx = data.indexOf(activeRow.original)\n const toIdx = data.indexOf(overRow.original)\n if (fromIdx === -1 || toIdx === -1) return\n\n onRowReorder(arrayMove(data, fromIdx, toIdx))\n }\n\n const activeRow = activeRowId ? rows.find((r) => r.id === activeRowId) : null\n\n return (\n <RowWrapperContext.Provider value={SortableRow}>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={rowIds} strategy={verticalListSortingStrategy}>\n <DataGridShell\n {...props}\n wrapperRef={wrapperRef}\n containerRef={containerRef}\n table={table}\n rows={rows}\n isSized={isSized}\n measure={measure}\n footer={null}\n />\n </SortableContext>\n\n {/* Portal overlay — renders outside scroll container so it's never clipped */}\n <DragOverlay>\n {activeRow && (\n <div\n className=\"rounded border border-primary/40 bg-primary/5 shadow-xl ring-1 ring-primary/20\"\n style={{ height: props.rowHeight ?? 36 }}\n />\n )}\n </DragOverlay>\n </DndContext>\n </RowWrapperContext.Provider>\n )\n}\n","import type { Table } from '@tanstack/react-table'\nimport { Columns3 } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\n\ninterface Props<T extends object> {\n table: Table<T>\n}\n\nexport function ColumnVisibilityDropdown<T extends object>({ table }: Props<T>) {\n return (\n <Popover>\n <PopoverTrigger\n render={(props) => (\n <Button {...props} variant=\"outline\" size=\"sm\" className=\"gap-1.5\">\n <Columns3 className=\"h-4 w-4\" />\n Columns\n </Button>\n )}\n />\n <PopoverContent align=\"end\" className=\"w-48\">\n <div className=\"flex flex-col gap-1.5\">\n {table\n .getAllLeafColumns()\n .filter((col) => col.id !== '__select__')\n .map((col) => (\n <label key={col.id} className=\"flex items-center gap-2 cursor-pointer text-sm\">\n <Checkbox checked={col.getIsVisible()} onCheckedChange={col.toggleVisibility} />\n <span className=\"truncate\">\n {typeof col.columnDef.header === 'string' ? col.columnDef.header : col.id}\n </span>\n </label>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n","import { useEffect, useState } from 'react'\nimport type { Table } from '@tanstack/react-table'\nimport { Search, X } from 'lucide-react'\nimport { Input } from '@/components/ui/input'\nimport { Button } from '@/components/ui/button'\nimport { cn } from '@/lib/utils'\n\ninterface Props<T extends object> {\n table: Table<T>\n placeholder?: string\n className?: string\n}\n\nexport function GlobalSearch<T extends object>({\n table,\n placeholder = 'Search…',\n className,\n}: Props<T>) {\n const [value, setValue] = useState(String(table.getState().globalFilter ?? ''))\n\n useEffect(() => {\n const timeout = setTimeout(() => table.setGlobalFilter(value || undefined), 200)\n return () => clearTimeout(timeout)\n }, [value, table])\n\n return (\n <div className={cn('relative', className)}>\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground pointer-events-none\" />\n <Input\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder={placeholder}\n className=\"h-8 pl-8 pr-7 text-xs w-52\"\n />\n {value && (\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => {\n setValue('')\n table.setGlobalFilter(undefined)\n }}\n className=\"absolute right-0.5 top-1/2 -translate-y-1/2\"\n >\n <X className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\nimport type { Table } from '@tanstack/react-table'\nimport { Check, ChevronDown, X } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { cn } from '@/lib/utils'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// SelectFilter — single value dropdown for toolbar\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface SelectFilterProps<T extends object> {\n table: Table<T>\n columnId: string\n label: string\n}\n\nexport function SelectFilter<T extends object>({ table, columnId, label }: SelectFilterProps<T>) {\n const [options, setOptions] = useState<string[] | null>(null)\n const col = table.getColumn(columnId)\n const value = (col?.getFilterValue() ?? '') as string\n\n const handleOpenChange = (open: boolean) => {\n if (open && options === null) {\n const vals = new Set<string>()\n table.getCoreRowModel().rows.forEach((row) => {\n const v = row.getValue(columnId)\n if (v != null) vals.add(String(v))\n })\n setOptions(Array.from(vals).sort())\n }\n }\n\n if (!col) return null\n\n return (\n <Popover onOpenChange={handleOpenChange}>\n <PopoverTrigger\n render={(props) => (\n <Button\n {...props}\n variant={value ? 'secondary' : 'outline'}\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs\"\n >\n {value ? (\n <>\n <span className=\"font-normal text-muted-foreground\">{label}:</span> {value}\n </>\n ) : (\n label\n )}\n <ChevronDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </Button>\n )}\n />\n <PopoverContent align=\"start\" className=\"w-44 p-1\">\n <div className=\"flex flex-col\">\n {value && (\n <button\n onClick={() => col.setFilterValue(undefined)}\n className=\"flex items-center gap-2 px-2 py-1.5 text-xs rounded-sm hover:bg-muted text-muted-foreground\"\n >\n <X className=\"h-3 w-3\" /> Clear\n </button>\n )}\n {(options ?? []).map((opt) => (\n <button\n key={opt}\n onClick={() => col.setFilterValue(opt === value ? undefined : opt)}\n className=\"flex items-center gap-2 px-2 py-1.5 text-xs rounded-sm hover:bg-muted\"\n >\n <Check className={cn('h-3 w-3', opt === value ? 'opacity-100' : 'opacity-0')} />\n {opt}\n </button>\n ))}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MultiSelectFilter — multi-value checkbox dropdown for toolbar\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface MultiSelectFilterProps<T extends object> {\n table: Table<T>\n columnId: string\n label: string\n}\n\nexport function MultiSelectFilter<T extends object>({\n table,\n columnId,\n label,\n}: MultiSelectFilterProps<T>) {\n const [options, setOptions] = useState<string[] | null>(null)\n const col = table.getColumn(columnId)\n const selected = (col?.getFilterValue() as string[] | undefined) ?? []\n\n useEffect(() => {\n const vals = new Set<string>()\n table.getCoreRowModel().rows.forEach((row) => {\n const v = row.getValue(columnId)\n if (v != null) vals.add(String(v))\n })\n setOptions(Array.from(vals).sort())\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const toggle = (val: string) => {\n if (!col) return\n const next = selected.includes(val) ? selected.filter((v) => v !== val) : [...selected, val]\n col.setFilterValue(next.length > 0 ? next : undefined)\n }\n\n if (!col) return null\n\n return (\n <Popover>\n <PopoverTrigger\n render={(props) => (\n <Button\n {...props}\n variant={selected.length > 0 ? 'secondary' : 'outline'}\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs\"\n >\n {selected.length > 0 ? (\n <>\n <span className=\"font-normal text-muted-foreground\">{label}:</span>{' '}\n {selected.length} selected\n </>\n ) : (\n label\n )}\n <ChevronDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </Button>\n )}\n />\n <PopoverContent align=\"start\" className=\"w-48\">\n <div className=\"flex flex-col gap-0.5\">\n <div className=\"max-h-52 overflow-y-auto flex flex-col gap-0.5\">\n {(options ?? []).map((opt) => (\n <label\n key={opt}\n className=\"flex items-center gap-2 px-1 py-1 cursor-pointer hover:bg-muted rounded-sm text-xs select-none\"\n >\n <Checkbox\n checked={selected.includes(opt)}\n onCheckedChange={() => toggle(opt)}\n className=\"shrink-0\"\n />\n <span className=\"truncate\">{opt}</span>\n </label>\n ))}\n </div>\n {selected.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 text-xs mt-1\"\n onClick={() => col.setFilterValue(undefined)}\n >\n Clear ({selected.length})\n </Button>\n )}\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n","import React from 'react'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport type { Row } from '@tanstack/react-table'\n\ninterface TreeCellProps {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n row: Row<any>\n /** Indent per depth level in px (default: 16) */\n indentSize?: number\n children: React.ReactNode\n}\n\n/**\n * Wraps cell content with a depth-aware indent and expand/collapse toggle.\n * Drop this into whichever column should act as the tree \"name\" column.\n *\n * Usage:\n * cell: ({ row }) => (\n * <TreeCell row={row} indentSize={20}>\n * <Icon /> <span>{row.original.name}</span>\n * </TreeCell>\n * )\n */\nexport function TreeCell({ row, indentSize = 16, children }: TreeCellProps) {\n const canExpand = row.getCanExpand()\n const indent = row.depth * indentSize\n\n return (\n <div style={{ paddingLeft: indent }} className=\"flex items-center gap-1 min-w-0\">\n {canExpand ? (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n row.toggleExpanded()\n }}\n className=\"flex items-center justify-center w-5 h-5 shrink-0 rounded hover:bg-black/10 dark:hover:bg-white/10 transition-colors\"\n >\n {row.getIsExpanded() ? (\n <ChevronDown className=\"h-3.5 w-3.5 text-foreground/60\" />\n ) : (\n <ChevronRight className=\"h-3.5 w-3.5 text-foreground/60\" />\n )}\n </button>\n ) : (\n // Leaf or non-expandable: spacer keeps content aligned with siblings\n <span className=\"w-5 h-5 shrink-0\" />\n )}\n {children}\n </div>\n )\n}\n","import { useContext } from 'react'\nimport { GripVertical } from 'lucide-react'\nimport { RowDragContext } from '@/features/reordering/RowDragContext'\n\n/**\n * Drag handle cell — place in whichever column should act as the grab handle.\n * Reads listeners/attributes from RowDragContext set by SortableRow.\n * Only works inside DataGridDrag.\n *\n * Usage:\n * { id: 'drag', size: 36, enableResizing: false,\n * cell: () => <DragHandleCell /> }\n */\nexport function DragHandleCell() {\n const ctx = useContext(RowDragContext)\n\n return (\n <button\n type=\"button\"\n {...ctx?.listeners}\n {...ctx?.attributes}\n className=\"flex items-center justify-center w-full h-full cursor-grab active:cursor-grabbing text-muted-foreground/40 hover:text-muted-foreground transition-colors\"\n style={{ touchAction: 'none' }}\n >\n <GripVertical className=\"h-4 w-4\" />\n </button>\n )\n}\n","export interface Transaction<T> {\n add?: T[]\n update?: Array<{ id: string; data: Partial<T> }>\n remove?: string[]\n}\n\nexport interface DataStore<T> {\n get(id: string): T | undefined\n /** Returns a stable array reference — same reference until the next transaction */\n getSnapshot(): T[]\n /** Monotonically increasing integer — increments on every transaction */\n getVersion(): number\n applyTransaction(tx: Transaction<T>): void\n /** useSyncExternalStore compatible subscribe */\n subscribe(listener: () => void): () => void\n}\n\nexport function createDataStore<T>(getRowId: (item: T, index: number) => string): DataStore<T> {\n const map = new Map<string, T>()\n const orderedIds: string[] = []\n const listeners = new Set<() => void>()\n let version = 0\n\n // Stable snapshot — recreated only when version changes\n let cachedSnapshot: T[] = []\n let cachedSnapshotVersion = -1\n\n function notify() {\n version++\n listeners.forEach((fn) => fn())\n }\n\n return {\n get: (id) => map.get(id),\n\n getSnapshot: () => {\n if (cachedSnapshotVersion !== version) {\n cachedSnapshot = orderedIds.map((id) => map.get(id)!)\n cachedSnapshotVersion = version\n }\n return cachedSnapshot\n },\n\n getVersion: () => version,\n\n subscribe: (listener) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n\n applyTransaction: (tx) => {\n let changed = false\n\n tx.add?.forEach((item, i) => {\n const id = getRowId(item, map.size + i)\n if (!map.has(id)) {\n map.set(id, item)\n orderedIds.push(id)\n changed = true\n }\n })\n\n tx.update?.forEach(({ id, data }) => {\n if (map.has(id)) {\n map.set(id, { ...map.get(id)!, ...data })\n changed = true\n }\n })\n\n tx.remove?.forEach((id) => {\n if (map.delete(id)) {\n const idx = orderedIds.indexOf(id)\n if (idx !== -1) orderedIds.splice(idx, 1)\n changed = true\n }\n })\n\n if (changed) notify()\n },\n }\n}\n","import { useMemo } from 'react'\nimport { createDataStore, type DataStore } from './DataStore'\n\ninterface UseDataStoreOptions<T> {\n getRowId: (item: T, index: number) => string\n}\n\n/**\n * Creates and memoizes a DataStore instance for use with <DataGrid dataStore={store} />.\n *\n * The store is stable for the lifetime of the component — pass a stable `getRowId`\n * callback (e.g. defined outside render or wrapped in useCallback).\n *\n * @example\n * const store = useDataStore<Pod>({ getRowId: p => p.name })\n *\n * useEffect(() => {\n * const watcher = watchPods(namespace, {\n * onAdded: pod => store.applyTransaction({ add: [pod] }),\n * onModified: pod => store.applyTransaction({ update: [{ id: pod.name, data: pod }] }),\n * onDeleted: name => store.applyTransaction({ remove: [name] }),\n * })\n * return () => watcher.stop()\n * }, [namespace])\n */\nexport function useDataStore<T>(options: UseDataStoreOptions<T>): DataStore<T> {\n const { getRowId } = options\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => createDataStore<T>(getRowId), [])\n}\n"]}