@invana/tables 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -305,7 +305,8 @@ function DraggableHeader({
305
305
  },
306
306
  className: ui.cn(
307
307
  "group relative select-none bg-muted/40",
308
- isPinned && "bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]"
308
+ isPinned && "bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]",
309
+ column.columnDef.meta?.headerClassName
309
310
  ),
310
311
  ...attributes,
311
312
  children: [
@@ -363,6 +364,7 @@ function DataTable({
363
364
  enableColumnPinning = false,
364
365
  onCellEdit,
365
366
  toolbar,
367
+ footer,
366
368
  className,
367
369
  emptyState,
368
370
  manualPagination = false,
@@ -537,7 +539,8 @@ function DataTable({
537
539
  className: ui.cn(
538
540
  align === "right" && "text-right",
539
541
  align === "center" && "text-center",
540
- isPinned && "bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]"
542
+ isPinned && "bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]",
543
+ column.columnDef.meta?.cellClassName
541
544
  ),
542
545
  children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext())
543
546
  },
@@ -546,7 +549,8 @@ function DataTable({
546
549
  }) }, row.id)) })
547
550
  ]
548
551
  }
549
- )
552
+ ),
553
+ footer != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky bottom-0 border-t bg-muted/40 px-3 py-2 text-sm text-muted-foreground", children: footer })
550
554
  ] })
551
555
  }
552
556
  ),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data-table-pagination.tsx","../src/data-table-toolbar.tsx","../src/editable-cell.tsx","../src/data-table.tsx"],"names":["jsxs","jsx","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","ChevronsLeft","ChevronLeft","ChevronRight","ChevronsRight","DropdownMenu","DropdownMenuTrigger","Settings2","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","Fragment","React","cn","Input","useSortable","TableHead","CSS","GripVertical","flexRender","ArrowUp","ArrowDown","ChevronsUpDown","React2","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","getPaginationRowModel","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","arrayMove","DndContext","closestCenter","restrictToHorizontalAxis","Table","TableHeader","TableRow","SortableContext","horizontalListSortingStrategy","TableBody","TableCell"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Button } from '@invana/ui';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@invana/forms';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\n\nexport interface DataTablePaginationProps<TData> {\n table: Table<TData>;\n pageSizeOptions?: number[];\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 50, 100],\n}: DataTablePaginationProps<TData>) {\n const { pageIndex, pageSize } = table.getState().pagination;\n const serverRowCount = table.options.rowCount;\n const total =\n typeof serverRowCount === 'number'\n ? serverRowCount\n : table.getFilteredRowModel().rows.length;\n const start = total === 0 ? 0 : pageIndex * pageSize + 1;\n const end = Math.min((pageIndex + 1) * pageSize, total);\n\n return (\n <div className=\"flex items-center justify-between gap-4 px-2 py-2 text-sm\">\n <div className=\"text-muted-foreground\">\n {total === 0 ? 'No rows' : `Showing ${start}–${end} of ${total}`}\n </div>\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(v) => table.setPageSize(Number(v))}\n >\n <SelectTrigger className=\"h-8 w-[72px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((s) => (\n <SelectItem key={s} value={String(s)}>\n {s}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-muted-foreground tabular-nums\">\n Page {pageIndex + 1} of {table.getPageCount() || 1}\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import {\n Button,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@invana/ui';\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\n\nexport interface DataTableToolbarProps<TData> {\n table: Table<TData>;\n enableColumnVisibility?: boolean;\n enableColumnPinning?: boolean;\n children?: React.ReactNode;\n}\n\nexport function DataTableToolbar<TData>({\n table,\n enableColumnVisibility = true,\n enableColumnPinning = false,\n children,\n}: DataTableToolbarProps<TData>) {\n const toggleableCols = table\n .getAllLeafColumns()\n .filter((c) => c.getCanHide());\n\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-2\">\n <div className=\"flex items-center gap-2\">{children}</div>\n <div className=\"flex items-center gap-2\">\n {enableColumnVisibility && toggleableCols.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"h-8\">\n <Settings2 className=\"mr-2 h-4 w-4\" />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {toggleableCols.map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n className=\"capitalize\"\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}\n onSelect={(e) => e.preventDefault()}\n >\n {String(col.columnDef.header ?? col.id)}\n </DropdownMenuCheckboxItem>\n ))}\n {enableColumnPinning && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Pinning</DropdownMenuLabel>\n {table.getAllLeafColumns().map((col) => {\n if (!col.getCanPin()) return null;\n const pinned = col.getIsPinned();\n return (\n <div\n key={col.id}\n className=\"flex items-center justify-between px-2 py-1 text-sm\"\n >\n <span className=\"capitalize truncate\">\n {String(col.columnDef.header ?? col.id)}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() =>\n col.pin(pinned === 'left' ? false : 'left')\n }\n className={`rounded px-1.5 py-0.5 text-xs ${\n pinned === 'left'\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted hover:bg-muted/70'\n }`}\n >\n L\n </button>\n <button\n type=\"button\"\n onClick={() =>\n col.pin(pinned === 'right' ? false : 'right')\n }\n className={`rounded px-1.5 py-0.5 text-xs ${\n pinned === 'right'\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted hover:bg-muted/70'\n }`}\n >\n R\n </button>\n </div>\n </div>\n );\n })}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@invana/ui';\nimport {\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@invana/forms';\nimport type { CellContext } from '@tanstack/react-table';\nimport type { CellEditHandler, EditOption, EditType } from './types';\n\nexport interface EditableCellProps<TData> {\n ctx: CellContext<TData, unknown>;\n editType?: EditType;\n options?: EditOption[];\n align?: 'left' | 'center' | 'right';\n onCellEdit?: CellEditHandler<TData>;\n}\n\nexport function EditableCell<TData>({\n ctx,\n editType = 'text',\n options,\n align = 'left',\n onCellEdit,\n}: EditableCellProps<TData>) {\n const initial = ctx.getValue();\n const [editing, setEditing] = React.useState(false);\n const [draft, setDraft] = React.useState<unknown>(initial);\n\n React.useEffect(() => {\n if (!editing) setDraft(initial);\n }, [initial, editing]);\n\n const commit = (next: unknown) => {\n setEditing(false);\n if (next === initial) return;\n onCellEdit?.({\n rowIndex: ctx.row.index,\n columnId: ctx.column.id,\n value: next,\n row: ctx.row.original,\n });\n };\n\n const alignClass =\n align === 'right'\n ? 'text-right justify-end'\n : align === 'center'\n ? 'text-center justify-center'\n : 'text-left justify-start';\n\n if (!editing) {\n return (\n <button\n type=\"button\"\n onClick={() => setEditing(true)}\n className={cn(\n 'group flex w-full items-center rounded-sm px-1.5 py-1 text-sm hover:bg-muted/60 focus:outline-none focus:ring-2 focus:ring-ring',\n alignClass,\n )}\n title=\"Click to edit\"\n >\n <span className=\"truncate\">\n {initial == null || initial === '' ? (\n <span className=\"text-muted-foreground italic\">empty</span>\n ) : (\n String(initial)\n )}\n </span>\n </button>\n );\n }\n\n if (editType === 'select') {\n return (\n <Select\n defaultValue={initial == null ? undefined : String(initial)}\n onValueChange={(v) => commit(v)}\n open\n onOpenChange={(open) => {\n if (!open) setEditing(false);\n }}\n >\n <SelectTrigger className=\"h-8\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n\n return (\n <Input\n autoFocus\n type={editType === 'number' ? 'number' : 'text'}\n defaultValue={initial == null ? '' : String(initial)}\n onBlur={(e) => {\n const v =\n editType === 'number' ? Number(e.currentTarget.value) : e.currentTarget.value;\n commit(v);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n (e.currentTarget as HTMLInputElement).blur();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setEditing(false);\n }\n }}\n className={cn('h-8', alignClass)}\n />\n );\n}\n","import * as React from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n type Header,\n type OnChangeFn,\n type PaginationState,\n type RowData,\n type SortingState,\n type VisibilityState,\n} from '@tanstack/react-table';\nimport {\n DndContext,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core';\nimport { restrictToHorizontalAxis } from '@dnd-kit/modifiers';\nimport {\n SortableContext,\n arrayMove,\n horizontalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n cn,\n} from '@invana/ui';\nimport { ArrowDown, ArrowUp, ChevronsUpDown, GripVertical } from 'lucide-react';\nimport { DataTablePagination } from './data-table-pagination';\nimport { DataTableToolbar } from './data-table-toolbar';\nimport { EditableCell } from './editable-cell';\nimport type { CellEditHandler } from './types';\n\nexport interface DataTableProps<TData extends RowData> {\n columns: ColumnDef<TData, any>[];\n data: TData[];\n pageSize?: number;\n pageSizeOptions?: number[];\n enableSorting?: boolean;\n enablePagination?: boolean;\n enableColumnVisibility?: boolean;\n enableColumnReordering?: boolean;\n enableColumnResizing?: boolean;\n enableColumnPinning?: boolean;\n onCellEdit?: CellEditHandler<TData>;\n toolbar?: React.ReactNode;\n className?: string;\n emptyState?: React.ReactNode;\n /** Server-side mode: skip client pagination — `data` is already the current page. Requires `pageCount` (or `rowCount`). */\n manualPagination?: boolean;\n /** Server-side mode: skip client sorting — caller refetches when `sorting` changes. */\n manualSorting?: boolean;\n /** Total pages on server (for manualPagination). */\n pageCount?: number;\n /** Total rows on server (drives \"Showing X–Y of Z\" in manual mode). */\n rowCount?: number;\n /** Controlled pagination state. */\n pagination?: PaginationState;\n onPaginationChange?: OnChangeFn<PaginationState>;\n /** Controlled sorting state. */\n sorting?: SortingState;\n onSortingChange?: OnChangeFn<SortingState>;\n /** Show a loading overlay over the table body. */\n loading?: boolean;\n}\n\nfunction getCommonPinStyles<TData>(header: Header<TData, unknown>): React.CSSProperties {\n const isPinned = header.column.getIsPinned();\n if (!isPinned) return {};\n return {\n position: 'sticky',\n left: isPinned === 'left' ? header.column.getStart('left') : undefined,\n right: isPinned === 'right' ? header.column.getAfter('right') : undefined,\n zIndex: 2,\n };\n}\n\ninterface DraggableHeaderProps<TData> {\n header: Header<TData, unknown>;\n enableReordering: boolean;\n enableResizing: boolean;\n enableSorting: boolean;\n}\n\nfunction DraggableHeader<TData>({\n header,\n enableReordering,\n enableResizing,\n enableSorting,\n}: DraggableHeaderProps<TData>) {\n const column = header.column;\n const isPinned = column.getIsPinned();\n const canDrag = enableReordering && !isPinned && column.id !== '__select';\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } =\n useSortable({ id: column.id, disabled: !canDrag });\n\n const sortDir = column.getIsSorted();\n const canSort = enableSorting && column.getCanSort();\n const align = column.columnDef.meta?.align ?? 'left';\n const alignClass =\n align === 'right' ? 'justify-end text-right' : align === 'center' ? 'justify-center text-center' : 'justify-start text-left';\n\n return (\n <TableHead\n ref={setNodeRef}\n colSpan={header.colSpan}\n style={{\n width: header.getSize(),\n transform: CSS.Translate.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n ...getCommonPinStyles(header),\n ...(isPinned ? { backgroundColor: 'hsl(var(--background))' } : {}),\n }}\n className={cn(\n 'group relative select-none bg-muted/40',\n isPinned && 'bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]',\n )}\n {...attributes}\n >\n <div className={cn('flex items-center gap-1', alignClass)}>\n {canDrag && (\n <button\n type=\"button\"\n className=\"cursor-grab text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 active:cursor-grabbing\"\n {...listeners}\n aria-label=\"Drag column\"\n >\n <GripVertical className=\"h-3.5 w-3.5\" />\n </button>\n )}\n {canSort ? (\n <button\n type=\"button\"\n onClick={column.getToggleSortingHandler()}\n className=\"inline-flex items-center gap-1 font-medium hover:text-foreground\"\n >\n {flexRender(column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : sortDir === 'desc' ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronsUpDown className=\"h-3.5 w-3.5 opacity-50\" />\n )}\n </button>\n ) : (\n <span className=\"font-medium\">\n {flexRender(column.columnDef.header, header.getContext())}\n </span>\n )}\n </div>\n {enableResizing && column.getCanResize() && (\n <button\n type=\"button\"\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute right-0 top-0 h-full w-1 cursor-col-resize select-none touch-none bg-transparent hover:bg-border',\n column.getIsResizing() && 'bg-primary',\n )}\n aria-label=\"Resize column\"\n />\n )}\n </TableHead>\n );\n}\n\nexport function DataTable<TData extends RowData>({\n columns,\n data,\n pageSize = 10,\n pageSizeOptions,\n enableSorting = true,\n enablePagination = true,\n enableColumnVisibility = true,\n enableColumnReordering = false,\n enableColumnResizing = false,\n enableColumnPinning = false,\n onCellEdit,\n toolbar,\n className,\n emptyState,\n manualPagination = false,\n manualSorting = false,\n pageCount,\n rowCount,\n pagination: paginationProp,\n onPaginationChange,\n sorting: sortingProp,\n onSortingChange,\n loading = false,\n}: DataTableProps<TData>) {\n const [internalSorting, setInternalSorting] = React.useState<SortingState>([]);\n const sorting = sortingProp ?? internalSorting;\n const setSorting: OnChangeFn<SortingState> = (updater) => {\n if (onSortingChange) onSortingChange(updater);\n if (!sortingProp) setInternalSorting(updater);\n };\n\n const [internalPagination, setInternalPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize,\n });\n const pagination = paginationProp ?? internalPagination;\n const setPagination: OnChangeFn<PaginationState> = (updater) => {\n if (onPaginationChange) onPaginationChange(updater);\n if (!paginationProp) setInternalPagination(updater);\n };\n\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});\n const [columnPinning, setColumnPinning] = React.useState<ColumnPinningState>({\n left: [],\n right: [],\n });\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(() =>\n columns.map((c, i) => (c as any).id ?? (c as any).accessorKey ?? String(i)),\n );\n\n const wrappedColumns = React.useMemo<ColumnDef<TData, any>[]>(() => {\n return columns.map((col) => {\n const meta = col.meta;\n if (meta?.editable && !col.cell) {\n return {\n ...col,\n cell: (ctx) => (\n <EditableCell\n ctx={ctx}\n editType={meta.editType}\n options={meta.options}\n align={meta.align}\n onCellEdit={onCellEdit}\n />\n ),\n };\n }\n return col;\n });\n }, [columns, onCellEdit]);\n\n const table = useReactTable({\n data,\n columns: wrappedColumns,\n state: {\n sorting,\n pagination,\n columnFilters,\n columnVisibility,\n columnPinning,\n columnOrder,\n },\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnPinningChange: setColumnPinning,\n onColumnOrderChange: setColumnOrder,\n enableSorting,\n enableColumnResizing,\n enableColumnPinning,\n manualPagination,\n manualSorting,\n pageCount: pageCount ?? -1,\n rowCount,\n columnResizeMode: 'onChange',\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: enableSorting && !manualSorting ? getSortedRowModel() : undefined,\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel:\n enablePagination && !manualPagination ? getPaginationRowModel() : undefined,\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 4 } }),\n useSensor(TouchSensor, { activationConstraint: { delay: 200, tolerance: 8 } }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n setColumnOrder((prev) => {\n const next = prev.length ? prev : table.getAllLeafColumns().map((c) => c.id);\n const oldIndex = next.indexOf(active.id as string);\n const newIndex = next.indexOf(over.id as string);\n if (oldIndex < 0 || newIndex < 0) return prev;\n return arrayMove(next, oldIndex, newIndex);\n });\n };\n\n const visibleLeafColumnIds = table.getVisibleLeafColumns().map((c) => c.id);\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <DataTableToolbar\n table={table}\n enableColumnVisibility={enableColumnVisibility}\n enableColumnPinning={enableColumnPinning}\n >\n {toolbar}\n </DataTableToolbar>\n\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToHorizontalAxis]}\n onDragEnd={handleDragEnd}\n >\n <div className=\"relative overflow-auto rounded-md border\">\n {loading && (\n <div className=\"pointer-events-none absolute inset-0 z-10 flex items-start justify-center bg-background/60 pt-12 text-sm text-muted-foreground\">\n Loading…\n </div>\n )}\n <Table\n style={{\n width: enableColumnResizing ? table.getTotalSize() : undefined,\n }}\n >\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n <SortableContext\n items={visibleLeafColumnIds}\n strategy={horizontalListSortingStrategy}\n >\n {headerGroup.headers.map((header) => (\n <DraggableHeader\n key={header.id}\n header={header}\n enableReordering={enableColumnReordering}\n enableResizing={enableColumnResizing}\n enableSorting={enableSorting}\n />\n ))}\n </SortableContext>\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={table.getAllLeafColumns().length}\n className=\"h-24 text-center text-muted-foreground\"\n >\n {emptyState ?? 'No results.'}\n </TableCell>\n </TableRow>\n ) : (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => {\n const column = cell.column;\n const isPinned = column.getIsPinned();\n const align = column.columnDef.meta?.align ?? 'left';\n return (\n <TableCell\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n ...(isPinned\n ? {\n position: 'sticky',\n left:\n isPinned === 'left'\n ? column.getStart('left')\n : undefined,\n right:\n isPinned === 'right'\n ? column.getAfter('right')\n : undefined,\n zIndex: 1,\n backgroundColor: 'hsl(var(--background))',\n }\n : {}),\n }}\n className={cn(\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n isPinned &&\n 'bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]',\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n </DndContext>\n\n {enablePagination && (\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/data-table-pagination.tsx","../src/data-table-toolbar.tsx","../src/editable-cell.tsx","../src/data-table.tsx"],"names":["jsxs","jsx","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","ChevronsLeft","ChevronLeft","ChevronRight","ChevronsRight","DropdownMenu","DropdownMenuTrigger","Settings2","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","Fragment","React","cn","Input","useSortable","TableHead","CSS","GripVertical","flexRender","ArrowUp","ArrowDown","ChevronsUpDown","React2","useReactTable","getCoreRowModel","getSortedRowModel","getFilteredRowModel","getPaginationRowModel","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","arrayMove","DndContext","closestCenter","restrictToHorizontalAxis","Table","TableHeader","TableRow","SortableContext","horizontalListSortingStrategy","TableBody","TableCell"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Button } from '@invana/ui';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@invana/forms';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\n\nexport interface DataTablePaginationProps<TData> {\n table: Table<TData>;\n pageSizeOptions?: number[];\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 50, 100],\n}: DataTablePaginationProps<TData>) {\n const { pageIndex, pageSize } = table.getState().pagination;\n const serverRowCount = table.options.rowCount;\n const total =\n typeof serverRowCount === 'number'\n ? serverRowCount\n : table.getFilteredRowModel().rows.length;\n const start = total === 0 ? 0 : pageIndex * pageSize + 1;\n const end = Math.min((pageIndex + 1) * pageSize, total);\n\n return (\n <div className=\"flex items-center justify-between gap-4 px-2 py-2 text-sm\">\n <div className=\"text-muted-foreground\">\n {total === 0 ? 'No rows' : `Showing ${start}–${end} of ${total}`}\n </div>\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(v) => table.setPageSize(Number(v))}\n >\n <SelectTrigger className=\"h-8 w-[72px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((s) => (\n <SelectItem key={s} value={String(s)}>\n {s}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-muted-foreground tabular-nums\">\n Page {pageIndex + 1} of {table.getPageCount() || 1}\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import {\n Button,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@invana/ui';\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\n\nexport interface DataTableToolbarProps<TData> {\n table: Table<TData>;\n enableColumnVisibility?: boolean;\n enableColumnPinning?: boolean;\n children?: React.ReactNode;\n}\n\nexport function DataTableToolbar<TData>({\n table,\n enableColumnVisibility = true,\n enableColumnPinning = false,\n children,\n}: DataTableToolbarProps<TData>) {\n const toggleableCols = table\n .getAllLeafColumns()\n .filter((c) => c.getCanHide());\n\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-2\">\n <div className=\"flex items-center gap-2\">{children}</div>\n <div className=\"flex items-center gap-2\">\n {enableColumnVisibility && toggleableCols.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"h-8\">\n <Settings2 className=\"mr-2 h-4 w-4\" />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {toggleableCols.map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n className=\"capitalize\"\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}\n onSelect={(e) => e.preventDefault()}\n >\n {String(col.columnDef.header ?? col.id)}\n </DropdownMenuCheckboxItem>\n ))}\n {enableColumnPinning && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Pinning</DropdownMenuLabel>\n {table.getAllLeafColumns().map((col) => {\n if (!col.getCanPin()) return null;\n const pinned = col.getIsPinned();\n return (\n <div\n key={col.id}\n className=\"flex items-center justify-between px-2 py-1 text-sm\"\n >\n <span className=\"capitalize truncate\">\n {String(col.columnDef.header ?? col.id)}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() =>\n col.pin(pinned === 'left' ? false : 'left')\n }\n className={`rounded px-1.5 py-0.5 text-xs ${\n pinned === 'left'\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted hover:bg-muted/70'\n }`}\n >\n L\n </button>\n <button\n type=\"button\"\n onClick={() =>\n col.pin(pinned === 'right' ? false : 'right')\n }\n className={`rounded px-1.5 py-0.5 text-xs ${\n pinned === 'right'\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted hover:bg-muted/70'\n }`}\n >\n R\n </button>\n </div>\n </div>\n );\n })}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@invana/ui';\nimport {\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@invana/forms';\nimport type { CellContext } from '@tanstack/react-table';\nimport type { CellEditHandler, EditOption, EditType } from './types';\n\nexport interface EditableCellProps<TData> {\n ctx: CellContext<TData, unknown>;\n editType?: EditType;\n options?: EditOption[];\n align?: 'left' | 'center' | 'right';\n onCellEdit?: CellEditHandler<TData>;\n}\n\nexport function EditableCell<TData>({\n ctx,\n editType = 'text',\n options,\n align = 'left',\n onCellEdit,\n}: EditableCellProps<TData>) {\n const initial = ctx.getValue();\n const [editing, setEditing] = React.useState(false);\n const [draft, setDraft] = React.useState<unknown>(initial);\n\n React.useEffect(() => {\n if (!editing) setDraft(initial);\n }, [initial, editing]);\n\n const commit = (next: unknown) => {\n setEditing(false);\n if (next === initial) return;\n onCellEdit?.({\n rowIndex: ctx.row.index,\n columnId: ctx.column.id,\n value: next,\n row: ctx.row.original,\n });\n };\n\n const alignClass =\n align === 'right'\n ? 'text-right justify-end'\n : align === 'center'\n ? 'text-center justify-center'\n : 'text-left justify-start';\n\n if (!editing) {\n return (\n <button\n type=\"button\"\n onClick={() => setEditing(true)}\n className={cn(\n 'group flex w-full items-center rounded-sm px-1.5 py-1 text-sm hover:bg-muted/60 focus:outline-none focus:ring-2 focus:ring-ring',\n alignClass,\n )}\n title=\"Click to edit\"\n >\n <span className=\"truncate\">\n {initial == null || initial === '' ? (\n <span className=\"text-muted-foreground italic\">empty</span>\n ) : (\n String(initial)\n )}\n </span>\n </button>\n );\n }\n\n if (editType === 'select') {\n return (\n <Select\n defaultValue={initial == null ? undefined : String(initial)}\n onValueChange={(v) => commit(v)}\n open\n onOpenChange={(open) => {\n if (!open) setEditing(false);\n }}\n >\n <SelectTrigger className=\"h-8\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n\n return (\n <Input\n autoFocus\n type={editType === 'number' ? 'number' : 'text'}\n defaultValue={initial == null ? '' : String(initial)}\n onBlur={(e) => {\n const v =\n editType === 'number' ? Number(e.currentTarget.value) : e.currentTarget.value;\n commit(v);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n (e.currentTarget as HTMLInputElement).blur();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setEditing(false);\n }\n }}\n className={cn('h-8', alignClass)}\n />\n );\n}\n","import * as React from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n type Header,\n type OnChangeFn,\n type PaginationState,\n type RowData,\n type SortingState,\n type VisibilityState,\n} from '@tanstack/react-table';\nimport {\n DndContext,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core';\nimport { restrictToHorizontalAxis } from '@dnd-kit/modifiers';\nimport {\n SortableContext,\n arrayMove,\n horizontalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n cn,\n} from '@invana/ui';\nimport { ArrowDown, ArrowUp, ChevronsUpDown, GripVertical } from 'lucide-react';\nimport { DataTablePagination } from './data-table-pagination';\nimport { DataTableToolbar } from './data-table-toolbar';\nimport { EditableCell } from './editable-cell';\nimport type { CellEditHandler } from './types';\n\nexport interface DataTableProps<TData extends RowData> {\n columns: ColumnDef<TData, any>[];\n data: TData[];\n pageSize?: number;\n pageSizeOptions?: number[];\n enableSorting?: boolean;\n enablePagination?: boolean;\n enableColumnVisibility?: boolean;\n enableColumnReordering?: boolean;\n enableColumnResizing?: boolean;\n enableColumnPinning?: boolean;\n onCellEdit?: CellEditHandler<TData>;\n toolbar?: React.ReactNode;\n /** Content rendered as a sticky summary bar inside the table's bordered container, below the rows. */\n footer?: React.ReactNode;\n className?: string;\n emptyState?: React.ReactNode;\n /** Server-side mode: skip client pagination — `data` is already the current page. Requires `pageCount` (or `rowCount`). */\n manualPagination?: boolean;\n /** Server-side mode: skip client sorting — caller refetches when `sorting` changes. */\n manualSorting?: boolean;\n /** Total pages on server (for manualPagination). */\n pageCount?: number;\n /** Total rows on server (drives \"Showing X–Y of Z\" in manual mode). */\n rowCount?: number;\n /** Controlled pagination state. */\n pagination?: PaginationState;\n onPaginationChange?: OnChangeFn<PaginationState>;\n /** Controlled sorting state. */\n sorting?: SortingState;\n onSortingChange?: OnChangeFn<SortingState>;\n /** Show a loading overlay over the table body. */\n loading?: boolean;\n}\n\nfunction getCommonPinStyles<TData>(header: Header<TData, unknown>): React.CSSProperties {\n const isPinned = header.column.getIsPinned();\n if (!isPinned) return {};\n return {\n position: 'sticky',\n left: isPinned === 'left' ? header.column.getStart('left') : undefined,\n right: isPinned === 'right' ? header.column.getAfter('right') : undefined,\n zIndex: 2,\n };\n}\n\ninterface DraggableHeaderProps<TData> {\n header: Header<TData, unknown>;\n enableReordering: boolean;\n enableResizing: boolean;\n enableSorting: boolean;\n}\n\nfunction DraggableHeader<TData>({\n header,\n enableReordering,\n enableResizing,\n enableSorting,\n}: DraggableHeaderProps<TData>) {\n const column = header.column;\n const isPinned = column.getIsPinned();\n const canDrag = enableReordering && !isPinned && column.id !== '__select';\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } =\n useSortable({ id: column.id, disabled: !canDrag });\n\n const sortDir = column.getIsSorted();\n const canSort = enableSorting && column.getCanSort();\n const align = column.columnDef.meta?.align ?? 'left';\n const alignClass =\n align === 'right' ? 'justify-end text-right' : align === 'center' ? 'justify-center text-center' : 'justify-start text-left';\n\n return (\n <TableHead\n ref={setNodeRef}\n colSpan={header.colSpan}\n style={{\n width: header.getSize(),\n transform: CSS.Translate.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n ...getCommonPinStyles(header),\n ...(isPinned ? { backgroundColor: 'hsl(var(--background))' } : {}),\n }}\n className={cn(\n 'group relative select-none bg-muted/40',\n isPinned && 'bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]',\n column.columnDef.meta?.headerClassName,\n )}\n {...attributes}\n >\n <div className={cn('flex items-center gap-1', alignClass)}>\n {canDrag && (\n <button\n type=\"button\"\n className=\"cursor-grab text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 active:cursor-grabbing\"\n {...listeners}\n aria-label=\"Drag column\"\n >\n <GripVertical className=\"h-3.5 w-3.5\" />\n </button>\n )}\n {canSort ? (\n <button\n type=\"button\"\n onClick={column.getToggleSortingHandler()}\n className=\"inline-flex items-center gap-1 font-medium hover:text-foreground\"\n >\n {flexRender(column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : sortDir === 'desc' ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronsUpDown className=\"h-3.5 w-3.5 opacity-50\" />\n )}\n </button>\n ) : (\n <span className=\"font-medium\">\n {flexRender(column.columnDef.header, header.getContext())}\n </span>\n )}\n </div>\n {enableResizing && column.getCanResize() && (\n <button\n type=\"button\"\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute right-0 top-0 h-full w-1 cursor-col-resize select-none touch-none bg-transparent hover:bg-border',\n column.getIsResizing() && 'bg-primary',\n )}\n aria-label=\"Resize column\"\n />\n )}\n </TableHead>\n );\n}\n\nexport function DataTable<TData extends RowData>({\n columns,\n data,\n pageSize = 10,\n pageSizeOptions,\n enableSorting = true,\n enablePagination = true,\n enableColumnVisibility = true,\n enableColumnReordering = false,\n enableColumnResizing = false,\n enableColumnPinning = false,\n onCellEdit,\n toolbar,\n footer,\n className,\n emptyState,\n manualPagination = false,\n manualSorting = false,\n pageCount,\n rowCount,\n pagination: paginationProp,\n onPaginationChange,\n sorting: sortingProp,\n onSortingChange,\n loading = false,\n}: DataTableProps<TData>) {\n const [internalSorting, setInternalSorting] = React.useState<SortingState>([]);\n const sorting = sortingProp ?? internalSorting;\n const setSorting: OnChangeFn<SortingState> = (updater) => {\n if (onSortingChange) onSortingChange(updater);\n if (!sortingProp) setInternalSorting(updater);\n };\n\n const [internalPagination, setInternalPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize,\n });\n const pagination = paginationProp ?? internalPagination;\n const setPagination: OnChangeFn<PaginationState> = (updater) => {\n if (onPaginationChange) onPaginationChange(updater);\n if (!paginationProp) setInternalPagination(updater);\n };\n\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});\n const [columnPinning, setColumnPinning] = React.useState<ColumnPinningState>({\n left: [],\n right: [],\n });\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(() =>\n columns.map((c, i) => (c as any).id ?? (c as any).accessorKey ?? String(i)),\n );\n\n const wrappedColumns = React.useMemo<ColumnDef<TData, any>[]>(() => {\n return columns.map((col) => {\n const meta = col.meta;\n if (meta?.editable && !col.cell) {\n return {\n ...col,\n cell: (ctx) => (\n <EditableCell\n ctx={ctx}\n editType={meta.editType}\n options={meta.options}\n align={meta.align}\n onCellEdit={onCellEdit}\n />\n ),\n };\n }\n return col;\n });\n }, [columns, onCellEdit]);\n\n const table = useReactTable({\n data,\n columns: wrappedColumns,\n state: {\n sorting,\n pagination,\n columnFilters,\n columnVisibility,\n columnPinning,\n columnOrder,\n },\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnPinningChange: setColumnPinning,\n onColumnOrderChange: setColumnOrder,\n enableSorting,\n enableColumnResizing,\n enableColumnPinning,\n manualPagination,\n manualSorting,\n pageCount: pageCount ?? -1,\n rowCount,\n columnResizeMode: 'onChange',\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: enableSorting && !manualSorting ? getSortedRowModel() : undefined,\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel:\n enablePagination && !manualPagination ? getPaginationRowModel() : undefined,\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 4 } }),\n useSensor(TouchSensor, { activationConstraint: { delay: 200, tolerance: 8 } }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n setColumnOrder((prev) => {\n const next = prev.length ? prev : table.getAllLeafColumns().map((c) => c.id);\n const oldIndex = next.indexOf(active.id as string);\n const newIndex = next.indexOf(over.id as string);\n if (oldIndex < 0 || newIndex < 0) return prev;\n return arrayMove(next, oldIndex, newIndex);\n });\n };\n\n const visibleLeafColumnIds = table.getVisibleLeafColumns().map((c) => c.id);\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <DataTableToolbar\n table={table}\n enableColumnVisibility={enableColumnVisibility}\n enableColumnPinning={enableColumnPinning}\n >\n {toolbar}\n </DataTableToolbar>\n\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToHorizontalAxis]}\n onDragEnd={handleDragEnd}\n >\n <div className=\"relative overflow-auto rounded-md border\">\n {loading && (\n <div className=\"pointer-events-none absolute inset-0 z-10 flex items-start justify-center bg-background/60 pt-12 text-sm text-muted-foreground\">\n Loading…\n </div>\n )}\n <Table\n style={{\n width: enableColumnResizing ? table.getTotalSize() : undefined,\n }}\n >\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n <SortableContext\n items={visibleLeafColumnIds}\n strategy={horizontalListSortingStrategy}\n >\n {headerGroup.headers.map((header) => (\n <DraggableHeader\n key={header.id}\n header={header}\n enableReordering={enableColumnReordering}\n enableResizing={enableColumnResizing}\n enableSorting={enableSorting}\n />\n ))}\n </SortableContext>\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={table.getAllLeafColumns().length}\n className=\"h-24 text-center text-muted-foreground\"\n >\n {emptyState ?? 'No results.'}\n </TableCell>\n </TableRow>\n ) : (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => {\n const column = cell.column;\n const isPinned = column.getIsPinned();\n const align = column.columnDef.meta?.align ?? 'left';\n return (\n <TableCell\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n ...(isPinned\n ? {\n position: 'sticky',\n left:\n isPinned === 'left'\n ? column.getStart('left')\n : undefined,\n right:\n isPinned === 'right'\n ? column.getAfter('right')\n : undefined,\n zIndex: 1,\n backgroundColor: 'hsl(var(--background))',\n }\n : {}),\n }}\n className={cn(\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n isPinned &&\n 'bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]',\n column.columnDef.meta?.cellClassName,\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n {footer != null && (\n <div className=\"sticky bottom-0 border-t bg-muted/40 px-3 py-2 text-sm text-muted-foreground\">\n {footer}\n </div>\n )}\n </div>\n </DndContext>\n\n {enablePagination && (\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n )}\n </div>\n );\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,3 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as React$1 from 'react';
3
2
  import { RowData, ColumnDef, PaginationState, OnChangeFn, SortingState, Table, CellContext } from '@tanstack/react-table';
4
3
  export { ColumnDef, ColumnFiltersState, ColumnOrderState, ColumnPinningState, PaginationState, SortingState, VisibilityState } from '@tanstack/react-table';
@@ -14,6 +13,14 @@ declare module '@tanstack/react-table' {
14
13
  editType?: EditType;
15
14
  options?: EditOption[];
16
15
  align?: 'left' | 'center' | 'right';
16
+ /**
17
+ * Extra class(es) applied to this column's body `<td>`. Use to control
18
+ * padding, vertical alignment, or background when rendering your own
19
+ * always-on controls (Switch/Select/Input) inside `cell()`.
20
+ */
21
+ cellClassName?: string;
22
+ /** Extra class(es) applied to this column's header `<th>`. */
23
+ headerClassName?: string;
17
24
  }
18
25
  }
19
26
  type CellEditHandler<TData> = (args: {
@@ -36,6 +43,8 @@ interface DataTableProps<TData extends RowData> {
36
43
  enableColumnPinning?: boolean;
37
44
  onCellEdit?: CellEditHandler<TData>;
38
45
  toolbar?: React$1.ReactNode;
46
+ /** Content rendered as a sticky summary bar inside the table's bordered container, below the rows. */
47
+ footer?: React$1.ReactNode;
39
48
  className?: string;
40
49
  emptyState?: React$1.ReactNode;
41
50
  /** Server-side mode: skip client pagination — `data` is already the current page. Requires `pageCount` (or `rowCount`). */
@@ -55,13 +64,13 @@ interface DataTableProps<TData extends RowData> {
55
64
  /** Show a loading overlay over the table body. */
56
65
  loading?: boolean;
57
66
  }
58
- declare function DataTable<TData extends RowData>({ columns, data, pageSize, pageSizeOptions, enableSorting, enablePagination, enableColumnVisibility, enableColumnReordering, enableColumnResizing, enableColumnPinning, onCellEdit, toolbar, className, emptyState, manualPagination, manualSorting, pageCount, rowCount, pagination: paginationProp, onPaginationChange, sorting: sortingProp, onSortingChange, loading, }: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
67
+ declare function DataTable<TData extends RowData>({ columns, data, pageSize, pageSizeOptions, enableSorting, enablePagination, enableColumnVisibility, enableColumnReordering, enableColumnResizing, enableColumnPinning, onCellEdit, toolbar, footer, className, emptyState, manualPagination, manualSorting, pageCount, rowCount, pagination: paginationProp, onPaginationChange, sorting: sortingProp, onSortingChange, loading, }: DataTableProps<TData>): React$1.JSX.Element;
59
68
 
60
69
  interface DataTablePaginationProps<TData> {
61
70
  table: Table<TData>;
62
71
  pageSizeOptions?: number[];
63
72
  }
64
- declare function DataTablePagination<TData>({ table, pageSizeOptions, }: DataTablePaginationProps<TData>): react_jsx_runtime.JSX.Element;
73
+ declare function DataTablePagination<TData>({ table, pageSizeOptions, }: DataTablePaginationProps<TData>): React$1.JSX.Element;
65
74
 
66
75
  interface DataTableToolbarProps<TData> {
67
76
  table: Table<TData>;
@@ -69,7 +78,7 @@ interface DataTableToolbarProps<TData> {
69
78
  enableColumnPinning?: boolean;
70
79
  children?: React.ReactNode;
71
80
  }
72
- declare function DataTableToolbar<TData>({ table, enableColumnVisibility, enableColumnPinning, children, }: DataTableToolbarProps<TData>): react_jsx_runtime.JSX.Element;
81
+ declare function DataTableToolbar<TData>({ table, enableColumnVisibility, enableColumnPinning, children, }: DataTableToolbarProps<TData>): React$1.JSX.Element;
73
82
 
74
83
  interface EditableCellProps<TData> {
75
84
  ctx: CellContext<TData, unknown>;
@@ -78,6 +87,6 @@ interface EditableCellProps<TData> {
78
87
  align?: 'left' | 'center' | 'right';
79
88
  onCellEdit?: CellEditHandler<TData>;
80
89
  }
81
- declare function EditableCell<TData>({ ctx, editType, options, align, onCellEdit, }: EditableCellProps<TData>): react_jsx_runtime.JSX.Element;
90
+ declare function EditableCell<TData>({ ctx, editType, options, align, onCellEdit, }: EditableCellProps<TData>): React$1.JSX.Element;
82
91
 
83
92
  export { type CellEditHandler, DataTable, DataTablePagination, type DataTableProps, DataTableToolbar, type EditOption, type EditType, EditableCell };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as React$1 from 'react';
3
2
  import { RowData, ColumnDef, PaginationState, OnChangeFn, SortingState, Table, CellContext } from '@tanstack/react-table';
4
3
  export { ColumnDef, ColumnFiltersState, ColumnOrderState, ColumnPinningState, PaginationState, SortingState, VisibilityState } from '@tanstack/react-table';
@@ -14,6 +13,14 @@ declare module '@tanstack/react-table' {
14
13
  editType?: EditType;
15
14
  options?: EditOption[];
16
15
  align?: 'left' | 'center' | 'right';
16
+ /**
17
+ * Extra class(es) applied to this column's body `<td>`. Use to control
18
+ * padding, vertical alignment, or background when rendering your own
19
+ * always-on controls (Switch/Select/Input) inside `cell()`.
20
+ */
21
+ cellClassName?: string;
22
+ /** Extra class(es) applied to this column's header `<th>`. */
23
+ headerClassName?: string;
17
24
  }
18
25
  }
19
26
  type CellEditHandler<TData> = (args: {
@@ -36,6 +43,8 @@ interface DataTableProps<TData extends RowData> {
36
43
  enableColumnPinning?: boolean;
37
44
  onCellEdit?: CellEditHandler<TData>;
38
45
  toolbar?: React$1.ReactNode;
46
+ /** Content rendered as a sticky summary bar inside the table's bordered container, below the rows. */
47
+ footer?: React$1.ReactNode;
39
48
  className?: string;
40
49
  emptyState?: React$1.ReactNode;
41
50
  /** Server-side mode: skip client pagination — `data` is already the current page. Requires `pageCount` (or `rowCount`). */
@@ -55,13 +64,13 @@ interface DataTableProps<TData extends RowData> {
55
64
  /** Show a loading overlay over the table body. */
56
65
  loading?: boolean;
57
66
  }
58
- declare function DataTable<TData extends RowData>({ columns, data, pageSize, pageSizeOptions, enableSorting, enablePagination, enableColumnVisibility, enableColumnReordering, enableColumnResizing, enableColumnPinning, onCellEdit, toolbar, className, emptyState, manualPagination, manualSorting, pageCount, rowCount, pagination: paginationProp, onPaginationChange, sorting: sortingProp, onSortingChange, loading, }: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
67
+ declare function DataTable<TData extends RowData>({ columns, data, pageSize, pageSizeOptions, enableSorting, enablePagination, enableColumnVisibility, enableColumnReordering, enableColumnResizing, enableColumnPinning, onCellEdit, toolbar, footer, className, emptyState, manualPagination, manualSorting, pageCount, rowCount, pagination: paginationProp, onPaginationChange, sorting: sortingProp, onSortingChange, loading, }: DataTableProps<TData>): React$1.JSX.Element;
59
68
 
60
69
  interface DataTablePaginationProps<TData> {
61
70
  table: Table<TData>;
62
71
  pageSizeOptions?: number[];
63
72
  }
64
- declare function DataTablePagination<TData>({ table, pageSizeOptions, }: DataTablePaginationProps<TData>): react_jsx_runtime.JSX.Element;
73
+ declare function DataTablePagination<TData>({ table, pageSizeOptions, }: DataTablePaginationProps<TData>): React$1.JSX.Element;
65
74
 
66
75
  interface DataTableToolbarProps<TData> {
67
76
  table: Table<TData>;
@@ -69,7 +78,7 @@ interface DataTableToolbarProps<TData> {
69
78
  enableColumnPinning?: boolean;
70
79
  children?: React.ReactNode;
71
80
  }
72
- declare function DataTableToolbar<TData>({ table, enableColumnVisibility, enableColumnPinning, children, }: DataTableToolbarProps<TData>): react_jsx_runtime.JSX.Element;
81
+ declare function DataTableToolbar<TData>({ table, enableColumnVisibility, enableColumnPinning, children, }: DataTableToolbarProps<TData>): React$1.JSX.Element;
73
82
 
74
83
  interface EditableCellProps<TData> {
75
84
  ctx: CellContext<TData, unknown>;
@@ -78,6 +87,6 @@ interface EditableCellProps<TData> {
78
87
  align?: 'left' | 'center' | 'right';
79
88
  onCellEdit?: CellEditHandler<TData>;
80
89
  }
81
- declare function EditableCell<TData>({ ctx, editType, options, align, onCellEdit, }: EditableCellProps<TData>): react_jsx_runtime.JSX.Element;
90
+ declare function EditableCell<TData>({ ctx, editType, options, align, onCellEdit, }: EditableCellProps<TData>): React$1.JSX.Element;
82
91
 
83
92
  export { type CellEditHandler, DataTable, DataTablePagination, type DataTableProps, DataTableToolbar, type EditOption, type EditType, EditableCell };
package/dist/index.js CHANGED
@@ -283,7 +283,8 @@ function DraggableHeader({
283
283
  },
284
284
  className: cn(
285
285
  "group relative select-none bg-muted/40",
286
- isPinned && "bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]"
286
+ isPinned && "bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]",
287
+ column.columnDef.meta?.headerClassName
287
288
  ),
288
289
  ...attributes,
289
290
  children: [
@@ -341,6 +342,7 @@ function DataTable({
341
342
  enableColumnPinning = false,
342
343
  onCellEdit,
343
344
  toolbar,
345
+ footer,
344
346
  className,
345
347
  emptyState,
346
348
  manualPagination = false,
@@ -515,7 +517,8 @@ function DataTable({
515
517
  className: cn(
516
518
  align === "right" && "text-right",
517
519
  align === "center" && "text-center",
518
- isPinned && "bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]"
520
+ isPinned && "bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]",
521
+ column.columnDef.meta?.cellClassName
519
522
  ),
520
523
  children: flexRender(cell.column.columnDef.cell, cell.getContext())
521
524
  },
@@ -524,7 +527,8 @@ function DataTable({
524
527
  }) }, row.id)) })
525
528
  ]
526
529
  }
527
- )
530
+ ),
531
+ footer != null && /* @__PURE__ */ jsx("div", { className: "sticky bottom-0 border-t bg-muted/40 px-3 py-2 text-sm text-muted-foreground", children: footer })
528
532
  ] })
529
533
  }
530
534
  ),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data-table-pagination.tsx","../src/data-table-toolbar.tsx","../src/editable-cell.tsx","../src/data-table.tsx"],"names":["jsxs","jsx","Button","React","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","cn"],"mappings":"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","file":"index.js","sourcesContent":["import { Button } from '@invana/ui';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@invana/forms';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\n\nexport interface DataTablePaginationProps<TData> {\n table: Table<TData>;\n pageSizeOptions?: number[];\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 50, 100],\n}: DataTablePaginationProps<TData>) {\n const { pageIndex, pageSize } = table.getState().pagination;\n const serverRowCount = table.options.rowCount;\n const total =\n typeof serverRowCount === 'number'\n ? serverRowCount\n : table.getFilteredRowModel().rows.length;\n const start = total === 0 ? 0 : pageIndex * pageSize + 1;\n const end = Math.min((pageIndex + 1) * pageSize, total);\n\n return (\n <div className=\"flex items-center justify-between gap-4 px-2 py-2 text-sm\">\n <div className=\"text-muted-foreground\">\n {total === 0 ? 'No rows' : `Showing ${start}–${end} of ${total}`}\n </div>\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(v) => table.setPageSize(Number(v))}\n >\n <SelectTrigger className=\"h-8 w-[72px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((s) => (\n <SelectItem key={s} value={String(s)}>\n {s}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-muted-foreground tabular-nums\">\n Page {pageIndex + 1} of {table.getPageCount() || 1}\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import {\n Button,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@invana/ui';\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\n\nexport interface DataTableToolbarProps<TData> {\n table: Table<TData>;\n enableColumnVisibility?: boolean;\n enableColumnPinning?: boolean;\n children?: React.ReactNode;\n}\n\nexport function DataTableToolbar<TData>({\n table,\n enableColumnVisibility = true,\n enableColumnPinning = false,\n children,\n}: DataTableToolbarProps<TData>) {\n const toggleableCols = table\n .getAllLeafColumns()\n .filter((c) => c.getCanHide());\n\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-2\">\n <div className=\"flex items-center gap-2\">{children}</div>\n <div className=\"flex items-center gap-2\">\n {enableColumnVisibility && toggleableCols.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"h-8\">\n <Settings2 className=\"mr-2 h-4 w-4\" />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {toggleableCols.map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n className=\"capitalize\"\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}\n onSelect={(e) => e.preventDefault()}\n >\n {String(col.columnDef.header ?? col.id)}\n </DropdownMenuCheckboxItem>\n ))}\n {enableColumnPinning && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Pinning</DropdownMenuLabel>\n {table.getAllLeafColumns().map((col) => {\n if (!col.getCanPin()) return null;\n const pinned = col.getIsPinned();\n return (\n <div\n key={col.id}\n className=\"flex items-center justify-between px-2 py-1 text-sm\"\n >\n <span className=\"capitalize truncate\">\n {String(col.columnDef.header ?? col.id)}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() =>\n col.pin(pinned === 'left' ? false : 'left')\n }\n className={`rounded px-1.5 py-0.5 text-xs ${\n pinned === 'left'\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted hover:bg-muted/70'\n }`}\n >\n L\n </button>\n <button\n type=\"button\"\n onClick={() =>\n col.pin(pinned === 'right' ? false : 'right')\n }\n className={`rounded px-1.5 py-0.5 text-xs ${\n pinned === 'right'\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted hover:bg-muted/70'\n }`}\n >\n R\n </button>\n </div>\n </div>\n );\n })}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@invana/ui';\nimport {\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@invana/forms';\nimport type { CellContext } from '@tanstack/react-table';\nimport type { CellEditHandler, EditOption, EditType } from './types';\n\nexport interface EditableCellProps<TData> {\n ctx: CellContext<TData, unknown>;\n editType?: EditType;\n options?: EditOption[];\n align?: 'left' | 'center' | 'right';\n onCellEdit?: CellEditHandler<TData>;\n}\n\nexport function EditableCell<TData>({\n ctx,\n editType = 'text',\n options,\n align = 'left',\n onCellEdit,\n}: EditableCellProps<TData>) {\n const initial = ctx.getValue();\n const [editing, setEditing] = React.useState(false);\n const [draft, setDraft] = React.useState<unknown>(initial);\n\n React.useEffect(() => {\n if (!editing) setDraft(initial);\n }, [initial, editing]);\n\n const commit = (next: unknown) => {\n setEditing(false);\n if (next === initial) return;\n onCellEdit?.({\n rowIndex: ctx.row.index,\n columnId: ctx.column.id,\n value: next,\n row: ctx.row.original,\n });\n };\n\n const alignClass =\n align === 'right'\n ? 'text-right justify-end'\n : align === 'center'\n ? 'text-center justify-center'\n : 'text-left justify-start';\n\n if (!editing) {\n return (\n <button\n type=\"button\"\n onClick={() => setEditing(true)}\n className={cn(\n 'group flex w-full items-center rounded-sm px-1.5 py-1 text-sm hover:bg-muted/60 focus:outline-none focus:ring-2 focus:ring-ring',\n alignClass,\n )}\n title=\"Click to edit\"\n >\n <span className=\"truncate\">\n {initial == null || initial === '' ? (\n <span className=\"text-muted-foreground italic\">empty</span>\n ) : (\n String(initial)\n )}\n </span>\n </button>\n );\n }\n\n if (editType === 'select') {\n return (\n <Select\n defaultValue={initial == null ? undefined : String(initial)}\n onValueChange={(v) => commit(v)}\n open\n onOpenChange={(open) => {\n if (!open) setEditing(false);\n }}\n >\n <SelectTrigger className=\"h-8\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n\n return (\n <Input\n autoFocus\n type={editType === 'number' ? 'number' : 'text'}\n defaultValue={initial == null ? '' : String(initial)}\n onBlur={(e) => {\n const v =\n editType === 'number' ? Number(e.currentTarget.value) : e.currentTarget.value;\n commit(v);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n (e.currentTarget as HTMLInputElement).blur();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setEditing(false);\n }\n }}\n className={cn('h-8', alignClass)}\n />\n );\n}\n","import * as React from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n type Header,\n type OnChangeFn,\n type PaginationState,\n type RowData,\n type SortingState,\n type VisibilityState,\n} from '@tanstack/react-table';\nimport {\n DndContext,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core';\nimport { restrictToHorizontalAxis } from '@dnd-kit/modifiers';\nimport {\n SortableContext,\n arrayMove,\n horizontalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n cn,\n} from '@invana/ui';\nimport { ArrowDown, ArrowUp, ChevronsUpDown, GripVertical } from 'lucide-react';\nimport { DataTablePagination } from './data-table-pagination';\nimport { DataTableToolbar } from './data-table-toolbar';\nimport { EditableCell } from './editable-cell';\nimport type { CellEditHandler } from './types';\n\nexport interface DataTableProps<TData extends RowData> {\n columns: ColumnDef<TData, any>[];\n data: TData[];\n pageSize?: number;\n pageSizeOptions?: number[];\n enableSorting?: boolean;\n enablePagination?: boolean;\n enableColumnVisibility?: boolean;\n enableColumnReordering?: boolean;\n enableColumnResizing?: boolean;\n enableColumnPinning?: boolean;\n onCellEdit?: CellEditHandler<TData>;\n toolbar?: React.ReactNode;\n className?: string;\n emptyState?: React.ReactNode;\n /** Server-side mode: skip client pagination — `data` is already the current page. Requires `pageCount` (or `rowCount`). */\n manualPagination?: boolean;\n /** Server-side mode: skip client sorting — caller refetches when `sorting` changes. */\n manualSorting?: boolean;\n /** Total pages on server (for manualPagination). */\n pageCount?: number;\n /** Total rows on server (drives \"Showing X–Y of Z\" in manual mode). */\n rowCount?: number;\n /** Controlled pagination state. */\n pagination?: PaginationState;\n onPaginationChange?: OnChangeFn<PaginationState>;\n /** Controlled sorting state. */\n sorting?: SortingState;\n onSortingChange?: OnChangeFn<SortingState>;\n /** Show a loading overlay over the table body. */\n loading?: boolean;\n}\n\nfunction getCommonPinStyles<TData>(header: Header<TData, unknown>): React.CSSProperties {\n const isPinned = header.column.getIsPinned();\n if (!isPinned) return {};\n return {\n position: 'sticky',\n left: isPinned === 'left' ? header.column.getStart('left') : undefined,\n right: isPinned === 'right' ? header.column.getAfter('right') : undefined,\n zIndex: 2,\n };\n}\n\ninterface DraggableHeaderProps<TData> {\n header: Header<TData, unknown>;\n enableReordering: boolean;\n enableResizing: boolean;\n enableSorting: boolean;\n}\n\nfunction DraggableHeader<TData>({\n header,\n enableReordering,\n enableResizing,\n enableSorting,\n}: DraggableHeaderProps<TData>) {\n const column = header.column;\n const isPinned = column.getIsPinned();\n const canDrag = enableReordering && !isPinned && column.id !== '__select';\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } =\n useSortable({ id: column.id, disabled: !canDrag });\n\n const sortDir = column.getIsSorted();\n const canSort = enableSorting && column.getCanSort();\n const align = column.columnDef.meta?.align ?? 'left';\n const alignClass =\n align === 'right' ? 'justify-end text-right' : align === 'center' ? 'justify-center text-center' : 'justify-start text-left';\n\n return (\n <TableHead\n ref={setNodeRef}\n colSpan={header.colSpan}\n style={{\n width: header.getSize(),\n transform: CSS.Translate.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n ...getCommonPinStyles(header),\n ...(isPinned ? { backgroundColor: 'hsl(var(--background))' } : {}),\n }}\n className={cn(\n 'group relative select-none bg-muted/40',\n isPinned && 'bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]',\n )}\n {...attributes}\n >\n <div className={cn('flex items-center gap-1', alignClass)}>\n {canDrag && (\n <button\n type=\"button\"\n className=\"cursor-grab text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 active:cursor-grabbing\"\n {...listeners}\n aria-label=\"Drag column\"\n >\n <GripVertical className=\"h-3.5 w-3.5\" />\n </button>\n )}\n {canSort ? (\n <button\n type=\"button\"\n onClick={column.getToggleSortingHandler()}\n className=\"inline-flex items-center gap-1 font-medium hover:text-foreground\"\n >\n {flexRender(column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : sortDir === 'desc' ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronsUpDown className=\"h-3.5 w-3.5 opacity-50\" />\n )}\n </button>\n ) : (\n <span className=\"font-medium\">\n {flexRender(column.columnDef.header, header.getContext())}\n </span>\n )}\n </div>\n {enableResizing && column.getCanResize() && (\n <button\n type=\"button\"\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute right-0 top-0 h-full w-1 cursor-col-resize select-none touch-none bg-transparent hover:bg-border',\n column.getIsResizing() && 'bg-primary',\n )}\n aria-label=\"Resize column\"\n />\n )}\n </TableHead>\n );\n}\n\nexport function DataTable<TData extends RowData>({\n columns,\n data,\n pageSize = 10,\n pageSizeOptions,\n enableSorting = true,\n enablePagination = true,\n enableColumnVisibility = true,\n enableColumnReordering = false,\n enableColumnResizing = false,\n enableColumnPinning = false,\n onCellEdit,\n toolbar,\n className,\n emptyState,\n manualPagination = false,\n manualSorting = false,\n pageCount,\n rowCount,\n pagination: paginationProp,\n onPaginationChange,\n sorting: sortingProp,\n onSortingChange,\n loading = false,\n}: DataTableProps<TData>) {\n const [internalSorting, setInternalSorting] = React.useState<SortingState>([]);\n const sorting = sortingProp ?? internalSorting;\n const setSorting: OnChangeFn<SortingState> = (updater) => {\n if (onSortingChange) onSortingChange(updater);\n if (!sortingProp) setInternalSorting(updater);\n };\n\n const [internalPagination, setInternalPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize,\n });\n const pagination = paginationProp ?? internalPagination;\n const setPagination: OnChangeFn<PaginationState> = (updater) => {\n if (onPaginationChange) onPaginationChange(updater);\n if (!paginationProp) setInternalPagination(updater);\n };\n\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});\n const [columnPinning, setColumnPinning] = React.useState<ColumnPinningState>({\n left: [],\n right: [],\n });\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(() =>\n columns.map((c, i) => (c as any).id ?? (c as any).accessorKey ?? String(i)),\n );\n\n const wrappedColumns = React.useMemo<ColumnDef<TData, any>[]>(() => {\n return columns.map((col) => {\n const meta = col.meta;\n if (meta?.editable && !col.cell) {\n return {\n ...col,\n cell: (ctx) => (\n <EditableCell\n ctx={ctx}\n editType={meta.editType}\n options={meta.options}\n align={meta.align}\n onCellEdit={onCellEdit}\n />\n ),\n };\n }\n return col;\n });\n }, [columns, onCellEdit]);\n\n const table = useReactTable({\n data,\n columns: wrappedColumns,\n state: {\n sorting,\n pagination,\n columnFilters,\n columnVisibility,\n columnPinning,\n columnOrder,\n },\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnPinningChange: setColumnPinning,\n onColumnOrderChange: setColumnOrder,\n enableSorting,\n enableColumnResizing,\n enableColumnPinning,\n manualPagination,\n manualSorting,\n pageCount: pageCount ?? -1,\n rowCount,\n columnResizeMode: 'onChange',\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: enableSorting && !manualSorting ? getSortedRowModel() : undefined,\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel:\n enablePagination && !manualPagination ? getPaginationRowModel() : undefined,\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 4 } }),\n useSensor(TouchSensor, { activationConstraint: { delay: 200, tolerance: 8 } }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n setColumnOrder((prev) => {\n const next = prev.length ? prev : table.getAllLeafColumns().map((c) => c.id);\n const oldIndex = next.indexOf(active.id as string);\n const newIndex = next.indexOf(over.id as string);\n if (oldIndex < 0 || newIndex < 0) return prev;\n return arrayMove(next, oldIndex, newIndex);\n });\n };\n\n const visibleLeafColumnIds = table.getVisibleLeafColumns().map((c) => c.id);\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <DataTableToolbar\n table={table}\n enableColumnVisibility={enableColumnVisibility}\n enableColumnPinning={enableColumnPinning}\n >\n {toolbar}\n </DataTableToolbar>\n\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToHorizontalAxis]}\n onDragEnd={handleDragEnd}\n >\n <div className=\"relative overflow-auto rounded-md border\">\n {loading && (\n <div className=\"pointer-events-none absolute inset-0 z-10 flex items-start justify-center bg-background/60 pt-12 text-sm text-muted-foreground\">\n Loading…\n </div>\n )}\n <Table\n style={{\n width: enableColumnResizing ? table.getTotalSize() : undefined,\n }}\n >\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n <SortableContext\n items={visibleLeafColumnIds}\n strategy={horizontalListSortingStrategy}\n >\n {headerGroup.headers.map((header) => (\n <DraggableHeader\n key={header.id}\n header={header}\n enableReordering={enableColumnReordering}\n enableResizing={enableColumnResizing}\n enableSorting={enableSorting}\n />\n ))}\n </SortableContext>\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={table.getAllLeafColumns().length}\n className=\"h-24 text-center text-muted-foreground\"\n >\n {emptyState ?? 'No results.'}\n </TableCell>\n </TableRow>\n ) : (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => {\n const column = cell.column;\n const isPinned = column.getIsPinned();\n const align = column.columnDef.meta?.align ?? 'left';\n return (\n <TableCell\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n ...(isPinned\n ? {\n position: 'sticky',\n left:\n isPinned === 'left'\n ? column.getStart('left')\n : undefined,\n right:\n isPinned === 'right'\n ? column.getAfter('right')\n : undefined,\n zIndex: 1,\n backgroundColor: 'hsl(var(--background))',\n }\n : {}),\n }}\n className={cn(\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n isPinned &&\n 'bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]',\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n </DndContext>\n\n {enablePagination && (\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/data-table-pagination.tsx","../src/data-table-toolbar.tsx","../src/editable-cell.tsx","../src/data-table.tsx"],"names":["jsxs","jsx","Button","React","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","cn"],"mappings":"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","file":"index.js","sourcesContent":["import { Button } from '@invana/ui';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@invana/forms';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\n\nexport interface DataTablePaginationProps<TData> {\n table: Table<TData>;\n pageSizeOptions?: number[];\n}\n\nexport function DataTablePagination<TData>({\n table,\n pageSizeOptions = [10, 20, 50, 100],\n}: DataTablePaginationProps<TData>) {\n const { pageIndex, pageSize } = table.getState().pagination;\n const serverRowCount = table.options.rowCount;\n const total =\n typeof serverRowCount === 'number'\n ? serverRowCount\n : table.getFilteredRowModel().rows.length;\n const start = total === 0 ? 0 : pageIndex * pageSize + 1;\n const end = Math.min((pageIndex + 1) * pageSize, total);\n\n return (\n <div className=\"flex items-center justify-between gap-4 px-2 py-2 text-sm\">\n <div className=\"text-muted-foreground\">\n {total === 0 ? 'No rows' : `Showing ${start}–${end} of ${total}`}\n </div>\n <div className=\"flex items-center gap-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(v) => table.setPageSize(Number(v))}\n >\n <SelectTrigger className=\"h-8 w-[72px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((s) => (\n <SelectItem key={s} value={String(s)}>\n {s}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"text-muted-foreground tabular-nums\">\n Page {pageIndex + 1} of {table.getPageCount() || 1}\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"First page\"\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n aria-label=\"Next page\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n aria-label=\"Last page\"\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import {\n Button,\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@invana/ui';\nimport { Settings2 } from 'lucide-react';\nimport type { Table } from '@tanstack/react-table';\n\nexport interface DataTableToolbarProps<TData> {\n table: Table<TData>;\n enableColumnVisibility?: boolean;\n enableColumnPinning?: boolean;\n children?: React.ReactNode;\n}\n\nexport function DataTableToolbar<TData>({\n table,\n enableColumnVisibility = true,\n enableColumnPinning = false,\n children,\n}: DataTableToolbarProps<TData>) {\n const toggleableCols = table\n .getAllLeafColumns()\n .filter((c) => c.getCanHide());\n\n return (\n <div className=\"flex items-center justify-between gap-2 px-2 py-2\">\n <div className=\"flex items-center gap-2\">{children}</div>\n <div className=\"flex items-center gap-2\">\n {enableColumnVisibility && toggleableCols.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" size=\"sm\" className=\"h-8\">\n <Settings2 className=\"mr-2 h-4 w-4\" />\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-48\">\n <DropdownMenuLabel>Toggle columns</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {toggleableCols.map((col) => (\n <DropdownMenuCheckboxItem\n key={col.id}\n className=\"capitalize\"\n checked={col.getIsVisible()}\n onCheckedChange={(v) => col.toggleVisibility(!!v)}\n onSelect={(e) => e.preventDefault()}\n >\n {String(col.columnDef.header ?? col.id)}\n </DropdownMenuCheckboxItem>\n ))}\n {enableColumnPinning && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Pinning</DropdownMenuLabel>\n {table.getAllLeafColumns().map((col) => {\n if (!col.getCanPin()) return null;\n const pinned = col.getIsPinned();\n return (\n <div\n key={col.id}\n className=\"flex items-center justify-between px-2 py-1 text-sm\"\n >\n <span className=\"capitalize truncate\">\n {String(col.columnDef.header ?? col.id)}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() =>\n col.pin(pinned === 'left' ? false : 'left')\n }\n className={`rounded px-1.5 py-0.5 text-xs ${\n pinned === 'left'\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted hover:bg-muted/70'\n }`}\n >\n L\n </button>\n <button\n type=\"button\"\n onClick={() =>\n col.pin(pinned === 'right' ? false : 'right')\n }\n className={`rounded px-1.5 py-0.5 text-xs ${\n pinned === 'right'\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted hover:bg-muted/70'\n }`}\n >\n R\n </button>\n </div>\n </div>\n );\n })}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n );\n}\n","import * as React from 'react';\nimport { cn } from '@invana/ui';\nimport {\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@invana/forms';\nimport type { CellContext } from '@tanstack/react-table';\nimport type { CellEditHandler, EditOption, EditType } from './types';\n\nexport interface EditableCellProps<TData> {\n ctx: CellContext<TData, unknown>;\n editType?: EditType;\n options?: EditOption[];\n align?: 'left' | 'center' | 'right';\n onCellEdit?: CellEditHandler<TData>;\n}\n\nexport function EditableCell<TData>({\n ctx,\n editType = 'text',\n options,\n align = 'left',\n onCellEdit,\n}: EditableCellProps<TData>) {\n const initial = ctx.getValue();\n const [editing, setEditing] = React.useState(false);\n const [draft, setDraft] = React.useState<unknown>(initial);\n\n React.useEffect(() => {\n if (!editing) setDraft(initial);\n }, [initial, editing]);\n\n const commit = (next: unknown) => {\n setEditing(false);\n if (next === initial) return;\n onCellEdit?.({\n rowIndex: ctx.row.index,\n columnId: ctx.column.id,\n value: next,\n row: ctx.row.original,\n });\n };\n\n const alignClass =\n align === 'right'\n ? 'text-right justify-end'\n : align === 'center'\n ? 'text-center justify-center'\n : 'text-left justify-start';\n\n if (!editing) {\n return (\n <button\n type=\"button\"\n onClick={() => setEditing(true)}\n className={cn(\n 'group flex w-full items-center rounded-sm px-1.5 py-1 text-sm hover:bg-muted/60 focus:outline-none focus:ring-2 focus:ring-ring',\n alignClass,\n )}\n title=\"Click to edit\"\n >\n <span className=\"truncate\">\n {initial == null || initial === '' ? (\n <span className=\"text-muted-foreground italic\">empty</span>\n ) : (\n String(initial)\n )}\n </span>\n </button>\n );\n }\n\n if (editType === 'select') {\n return (\n <Select\n defaultValue={initial == null ? undefined : String(initial)}\n onValueChange={(v) => commit(v)}\n open\n onOpenChange={(open) => {\n if (!open) setEditing(false);\n }}\n >\n <SelectTrigger className=\"h-8\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n\n return (\n <Input\n autoFocus\n type={editType === 'number' ? 'number' : 'text'}\n defaultValue={initial == null ? '' : String(initial)}\n onBlur={(e) => {\n const v =\n editType === 'number' ? Number(e.currentTarget.value) : e.currentTarget.value;\n commit(v);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n (e.currentTarget as HTMLInputElement).blur();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setEditing(false);\n }\n }}\n className={cn('h-8', alignClass)}\n />\n );\n}\n","import * as React from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnOrderState,\n type ColumnPinningState,\n type Header,\n type OnChangeFn,\n type PaginationState,\n type RowData,\n type SortingState,\n type VisibilityState,\n} from '@tanstack/react-table';\nimport {\n DndContext,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core';\nimport { restrictToHorizontalAxis } from '@dnd-kit/modifiers';\nimport {\n SortableContext,\n arrayMove,\n horizontalListSortingStrategy,\n useSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n cn,\n} from '@invana/ui';\nimport { ArrowDown, ArrowUp, ChevronsUpDown, GripVertical } from 'lucide-react';\nimport { DataTablePagination } from './data-table-pagination';\nimport { DataTableToolbar } from './data-table-toolbar';\nimport { EditableCell } from './editable-cell';\nimport type { CellEditHandler } from './types';\n\nexport interface DataTableProps<TData extends RowData> {\n columns: ColumnDef<TData, any>[];\n data: TData[];\n pageSize?: number;\n pageSizeOptions?: number[];\n enableSorting?: boolean;\n enablePagination?: boolean;\n enableColumnVisibility?: boolean;\n enableColumnReordering?: boolean;\n enableColumnResizing?: boolean;\n enableColumnPinning?: boolean;\n onCellEdit?: CellEditHandler<TData>;\n toolbar?: React.ReactNode;\n /** Content rendered as a sticky summary bar inside the table's bordered container, below the rows. */\n footer?: React.ReactNode;\n className?: string;\n emptyState?: React.ReactNode;\n /** Server-side mode: skip client pagination — `data` is already the current page. Requires `pageCount` (or `rowCount`). */\n manualPagination?: boolean;\n /** Server-side mode: skip client sorting — caller refetches when `sorting` changes. */\n manualSorting?: boolean;\n /** Total pages on server (for manualPagination). */\n pageCount?: number;\n /** Total rows on server (drives \"Showing X–Y of Z\" in manual mode). */\n rowCount?: number;\n /** Controlled pagination state. */\n pagination?: PaginationState;\n onPaginationChange?: OnChangeFn<PaginationState>;\n /** Controlled sorting state. */\n sorting?: SortingState;\n onSortingChange?: OnChangeFn<SortingState>;\n /** Show a loading overlay over the table body. */\n loading?: boolean;\n}\n\nfunction getCommonPinStyles<TData>(header: Header<TData, unknown>): React.CSSProperties {\n const isPinned = header.column.getIsPinned();\n if (!isPinned) return {};\n return {\n position: 'sticky',\n left: isPinned === 'left' ? header.column.getStart('left') : undefined,\n right: isPinned === 'right' ? header.column.getAfter('right') : undefined,\n zIndex: 2,\n };\n}\n\ninterface DraggableHeaderProps<TData> {\n header: Header<TData, unknown>;\n enableReordering: boolean;\n enableResizing: boolean;\n enableSorting: boolean;\n}\n\nfunction DraggableHeader<TData>({\n header,\n enableReordering,\n enableResizing,\n enableSorting,\n}: DraggableHeaderProps<TData>) {\n const column = header.column;\n const isPinned = column.getIsPinned();\n const canDrag = enableReordering && !isPinned && column.id !== '__select';\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } =\n useSortable({ id: column.id, disabled: !canDrag });\n\n const sortDir = column.getIsSorted();\n const canSort = enableSorting && column.getCanSort();\n const align = column.columnDef.meta?.align ?? 'left';\n const alignClass =\n align === 'right' ? 'justify-end text-right' : align === 'center' ? 'justify-center text-center' : 'justify-start text-left';\n\n return (\n <TableHead\n ref={setNodeRef}\n colSpan={header.colSpan}\n style={{\n width: header.getSize(),\n transform: CSS.Translate.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n ...getCommonPinStyles(header),\n ...(isPinned ? { backgroundColor: 'hsl(var(--background))' } : {}),\n }}\n className={cn(\n 'group relative select-none bg-muted/40',\n isPinned && 'bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]',\n column.columnDef.meta?.headerClassName,\n )}\n {...attributes}\n >\n <div className={cn('flex items-center gap-1', alignClass)}>\n {canDrag && (\n <button\n type=\"button\"\n className=\"cursor-grab text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 active:cursor-grabbing\"\n {...listeners}\n aria-label=\"Drag column\"\n >\n <GripVertical className=\"h-3.5 w-3.5\" />\n </button>\n )}\n {canSort ? (\n <button\n type=\"button\"\n onClick={column.getToggleSortingHandler()}\n className=\"inline-flex items-center gap-1 font-medium hover:text-foreground\"\n >\n {flexRender(column.columnDef.header, header.getContext())}\n {sortDir === 'asc' ? (\n <ArrowUp className=\"h-3.5 w-3.5\" />\n ) : sortDir === 'desc' ? (\n <ArrowDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronsUpDown className=\"h-3.5 w-3.5 opacity-50\" />\n )}\n </button>\n ) : (\n <span className=\"font-medium\">\n {flexRender(column.columnDef.header, header.getContext())}\n </span>\n )}\n </div>\n {enableResizing && column.getCanResize() && (\n <button\n type=\"button\"\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute right-0 top-0 h-full w-1 cursor-col-resize select-none touch-none bg-transparent hover:bg-border',\n column.getIsResizing() && 'bg-primary',\n )}\n aria-label=\"Resize column\"\n />\n )}\n </TableHead>\n );\n}\n\nexport function DataTable<TData extends RowData>({\n columns,\n data,\n pageSize = 10,\n pageSizeOptions,\n enableSorting = true,\n enablePagination = true,\n enableColumnVisibility = true,\n enableColumnReordering = false,\n enableColumnResizing = false,\n enableColumnPinning = false,\n onCellEdit,\n toolbar,\n footer,\n className,\n emptyState,\n manualPagination = false,\n manualSorting = false,\n pageCount,\n rowCount,\n pagination: paginationProp,\n onPaginationChange,\n sorting: sortingProp,\n onSortingChange,\n loading = false,\n}: DataTableProps<TData>) {\n const [internalSorting, setInternalSorting] = React.useState<SortingState>([]);\n const sorting = sortingProp ?? internalSorting;\n const setSorting: OnChangeFn<SortingState> = (updater) => {\n if (onSortingChange) onSortingChange(updater);\n if (!sortingProp) setInternalSorting(updater);\n };\n\n const [internalPagination, setInternalPagination] = React.useState<PaginationState>({\n pageIndex: 0,\n pageSize,\n });\n const pagination = paginationProp ?? internalPagination;\n const setPagination: OnChangeFn<PaginationState> = (updater) => {\n if (onPaginationChange) onPaginationChange(updater);\n if (!paginationProp) setInternalPagination(updater);\n };\n\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});\n const [columnPinning, setColumnPinning] = React.useState<ColumnPinningState>({\n left: [],\n right: [],\n });\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(() =>\n columns.map((c, i) => (c as any).id ?? (c as any).accessorKey ?? String(i)),\n );\n\n const wrappedColumns = React.useMemo<ColumnDef<TData, any>[]>(() => {\n return columns.map((col) => {\n const meta = col.meta;\n if (meta?.editable && !col.cell) {\n return {\n ...col,\n cell: (ctx) => (\n <EditableCell\n ctx={ctx}\n editType={meta.editType}\n options={meta.options}\n align={meta.align}\n onCellEdit={onCellEdit}\n />\n ),\n };\n }\n return col;\n });\n }, [columns, onCellEdit]);\n\n const table = useReactTable({\n data,\n columns: wrappedColumns,\n state: {\n sorting,\n pagination,\n columnFilters,\n columnVisibility,\n columnPinning,\n columnOrder,\n },\n onSortingChange: setSorting,\n onPaginationChange: setPagination,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnPinningChange: setColumnPinning,\n onColumnOrderChange: setColumnOrder,\n enableSorting,\n enableColumnResizing,\n enableColumnPinning,\n manualPagination,\n manualSorting,\n pageCount: pageCount ?? -1,\n rowCount,\n columnResizeMode: 'onChange',\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: enableSorting && !manualSorting ? getSortedRowModel() : undefined,\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel:\n enablePagination && !manualPagination ? getPaginationRowModel() : undefined,\n });\n\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 4 } }),\n useSensor(TouchSensor, { activationConstraint: { delay: 200, tolerance: 8 } }),\n useSensor(KeyboardSensor),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n setColumnOrder((prev) => {\n const next = prev.length ? prev : table.getAllLeafColumns().map((c) => c.id);\n const oldIndex = next.indexOf(active.id as string);\n const newIndex = next.indexOf(over.id as string);\n if (oldIndex < 0 || newIndex < 0) return prev;\n return arrayMove(next, oldIndex, newIndex);\n });\n };\n\n const visibleLeafColumnIds = table.getVisibleLeafColumns().map((c) => c.id);\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n <DataTableToolbar\n table={table}\n enableColumnVisibility={enableColumnVisibility}\n enableColumnPinning={enableColumnPinning}\n >\n {toolbar}\n </DataTableToolbar>\n\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={[restrictToHorizontalAxis]}\n onDragEnd={handleDragEnd}\n >\n <div className=\"relative overflow-auto rounded-md border\">\n {loading && (\n <div className=\"pointer-events-none absolute inset-0 z-10 flex items-start justify-center bg-background/60 pt-12 text-sm text-muted-foreground\">\n Loading…\n </div>\n )}\n <Table\n style={{\n width: enableColumnResizing ? table.getTotalSize() : undefined,\n }}\n >\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n <SortableContext\n items={visibleLeafColumnIds}\n strategy={horizontalListSortingStrategy}\n >\n {headerGroup.headers.map((header) => (\n <DraggableHeader\n key={header.id}\n header={header}\n enableReordering={enableColumnReordering}\n enableResizing={enableColumnResizing}\n enableSorting={enableSorting}\n />\n ))}\n </SortableContext>\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={table.getAllLeafColumns().length}\n className=\"h-24 text-center text-muted-foreground\"\n >\n {emptyState ?? 'No results.'}\n </TableCell>\n </TableRow>\n ) : (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => {\n const column = cell.column;\n const isPinned = column.getIsPinned();\n const align = column.columnDef.meta?.align ?? 'left';\n return (\n <TableCell\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n ...(isPinned\n ? {\n position: 'sticky',\n left:\n isPinned === 'left'\n ? column.getStart('left')\n : undefined,\n right:\n isPinned === 'right'\n ? column.getAfter('right')\n : undefined,\n zIndex: 1,\n backgroundColor: 'hsl(var(--background))',\n }\n : {}),\n }}\n className={cn(\n align === 'right' && 'text-right',\n align === 'center' && 'text-center',\n isPinned &&\n 'bg-background shadow-[inset_-1px_0_0_0_hsl(var(--border))]',\n column.columnDef.meta?.cellClassName,\n )}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n );\n })}\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n {footer != null && (\n <div className=\"sticky bottom-0 border-t bg-muted/40 px-3 py-2 text-sm text-muted-foreground\">\n {footer}\n </div>\n )}\n </div>\n </DndContext>\n\n {enablePagination && (\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n )}\n </div>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@invana/tables",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Invana Design System - Data table components",
5
5
  "homepage": "https://github.com/invana/design-kit#readme",
6
6
  "type": "module",
@@ -40,9 +40,9 @@
40
40
  "peerDependencies": {
41
41
  "react": "^18 || ^19",
42
42
  "react-dom": "^18 || ^19",
43
- "@invana/forms": "0.0.12",
44
- "@invana/styling": "0.0.12",
45
- "@invana/ui": "0.0.12"
43
+ "@invana/styling": "0.0.14",
44
+ "@invana/ui": "0.0.14",
45
+ "@invana/forms": "0.0.14"
46
46
  },
47
47
  "dependencies": {
48
48
  "@dnd-kit/core": "^6.3.1",
@@ -50,18 +50,18 @@
50
50
  "@dnd-kit/sortable": "^10.0.0",
51
51
  "@dnd-kit/utilities": "^3.2.2",
52
52
  "@tanstack/react-table": "^8.21.3",
53
- "lucide-react": "^0.562.0"
53
+ "lucide-react": "^1.24.0"
54
54
  },
55
55
  "devDependencies": {
56
- "@types/react": "^19.2.5",
56
+ "@types/react": "^19.2.17",
57
57
  "@types/react-dom": "^19.2.3",
58
- "react": "^19.2.0",
59
- "react-dom": "^19.2.0",
60
- "tsup": "^8.3.5",
58
+ "react": "^19.2.7",
59
+ "react-dom": "^19.2.7",
60
+ "tsup": "^8.5.1",
61
61
  "typescript": "~5.9.3",
62
- "@invana/forms": "0.0.12",
63
- "@invana/styling": "0.0.12",
64
- "@invana/ui": "0.0.12"
62
+ "@invana/forms": "0.0.14",
63
+ "@invana/ui": "0.0.14",
64
+ "@invana/styling": "0.0.14"
65
65
  },
66
66
  "scripts": {
67
67
  "build": "tsup",