@invana/tables 0.0.11 → 0.0.13
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 +7 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
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
|
),
|
package/dist/index.cjs.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","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
|
@@ -14,6 +14,14 @@ declare module '@tanstack/react-table' {
|
|
|
14
14
|
editType?: EditType;
|
|
15
15
|
options?: EditOption[];
|
|
16
16
|
align?: 'left' | 'center' | 'right';
|
|
17
|
+
/**
|
|
18
|
+
* Extra class(es) applied to this column's body `<td>`. Use to control
|
|
19
|
+
* padding, vertical alignment, or background when rendering your own
|
|
20
|
+
* always-on controls (Switch/Select/Input) inside `cell()`.
|
|
21
|
+
*/
|
|
22
|
+
cellClassName?: string;
|
|
23
|
+
/** Extra class(es) applied to this column's header `<th>`. */
|
|
24
|
+
headerClassName?: string;
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
27
|
type CellEditHandler<TData> = (args: {
|
|
@@ -36,6 +44,8 @@ interface DataTableProps<TData extends RowData> {
|
|
|
36
44
|
enableColumnPinning?: boolean;
|
|
37
45
|
onCellEdit?: CellEditHandler<TData>;
|
|
38
46
|
toolbar?: React$1.ReactNode;
|
|
47
|
+
/** Content rendered as a sticky summary bar inside the table's bordered container, below the rows. */
|
|
48
|
+
footer?: React$1.ReactNode;
|
|
39
49
|
className?: string;
|
|
40
50
|
emptyState?: React$1.ReactNode;
|
|
41
51
|
/** Server-side mode: skip client pagination — `data` is already the current page. Requires `pageCount` (or `rowCount`). */
|
|
@@ -55,7 +65,7 @@ interface DataTableProps<TData extends RowData> {
|
|
|
55
65
|
/** Show a loading overlay over the table body. */
|
|
56
66
|
loading?: boolean;
|
|
57
67
|
}
|
|
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;
|
|
68
|
+
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_jsx_runtime.JSX.Element;
|
|
59
69
|
|
|
60
70
|
interface DataTablePaginationProps<TData> {
|
|
61
71
|
table: Table<TData>;
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,14 @@ declare module '@tanstack/react-table' {
|
|
|
14
14
|
editType?: EditType;
|
|
15
15
|
options?: EditOption[];
|
|
16
16
|
align?: 'left' | 'center' | 'right';
|
|
17
|
+
/**
|
|
18
|
+
* Extra class(es) applied to this column's body `<td>`. Use to control
|
|
19
|
+
* padding, vertical alignment, or background when rendering your own
|
|
20
|
+
* always-on controls (Switch/Select/Input) inside `cell()`.
|
|
21
|
+
*/
|
|
22
|
+
cellClassName?: string;
|
|
23
|
+
/** Extra class(es) applied to this column's header `<th>`. */
|
|
24
|
+
headerClassName?: string;
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
27
|
type CellEditHandler<TData> = (args: {
|
|
@@ -36,6 +44,8 @@ interface DataTableProps<TData extends RowData> {
|
|
|
36
44
|
enableColumnPinning?: boolean;
|
|
37
45
|
onCellEdit?: CellEditHandler<TData>;
|
|
38
46
|
toolbar?: React$1.ReactNode;
|
|
47
|
+
/** Content rendered as a sticky summary bar inside the table's bordered container, below the rows. */
|
|
48
|
+
footer?: React$1.ReactNode;
|
|
39
49
|
className?: string;
|
|
40
50
|
emptyState?: React$1.ReactNode;
|
|
41
51
|
/** Server-side mode: skip client pagination — `data` is already the current page. Requires `pageCount` (or `rowCount`). */
|
|
@@ -55,7 +65,7 @@ interface DataTableProps<TData extends RowData> {
|
|
|
55
65
|
/** Show a loading overlay over the table body. */
|
|
56
66
|
loading?: boolean;
|
|
57
67
|
}
|
|
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;
|
|
68
|
+
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_jsx_runtime.JSX.Element;
|
|
59
69
|
|
|
60
70
|
interface DataTablePaginationProps<TData> {
|
|
61
71
|
table: Table<TData>;
|
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.
|
|
3
|
+
"version": "0.0.13",
|
|
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.
|
|
44
|
-
"@invana/ui": "0.0.
|
|
45
|
-
"@invana/styling": "0.0.
|
|
43
|
+
"@invana/forms": "0.0.13",
|
|
44
|
+
"@invana/ui": "0.0.13",
|
|
45
|
+
"@invana/styling": "0.0.13"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@dnd-kit/core": "^6.3.1",
|
|
@@ -59,9 +59,9 @@
|
|
|
59
59
|
"react-dom": "^19.2.0",
|
|
60
60
|
"tsup": "^8.3.5",
|
|
61
61
|
"typescript": "~5.9.3",
|
|
62
|
-
"@invana/forms": "0.0.
|
|
63
|
-
"@invana/
|
|
64
|
-
"@invana/
|
|
62
|
+
"@invana/forms": "0.0.13",
|
|
63
|
+
"@invana/ui": "0.0.13",
|
|
64
|
+
"@invana/styling": "0.0.13"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
67
|
"build": "tsup",
|