@rentnerkev/table 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +4 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/Messages/tableMessages.d.ts.map +1 -1
  6. package/dist/lib/Messages/tableMessages.js +20 -0
  7. package/dist/lib/Messages/tableMessages.js.map +1 -1
  8. package/dist/lib/Table/events.d.ts +2 -0
  9. package/dist/lib/Table/events.d.ts.map +1 -0
  10. package/dist/lib/Table/events.js +5 -0
  11. package/dist/lib/Table/events.js.map +1 -0
  12. package/dist/lib/Table/rowOrder.d.ts +7 -0
  13. package/dist/lib/Table/rowOrder.d.ts.map +1 -0
  14. package/dist/lib/Table/rowOrder.js +26 -0
  15. package/dist/lib/Table/rowOrder.js.map +1 -0
  16. package/dist/lib/Table/table.d.ts +2 -0
  17. package/dist/lib/Table/table.d.ts.map +1 -1
  18. package/dist/lib/Table/table.js +2 -1
  19. package/dist/lib/Table/table.js.map +1 -1
  20. package/dist/shared/Table/Components/DataTable.d.ts.map +1 -1
  21. package/dist/shared/Table/Components/DataTable.js +1 -1
  22. package/dist/shared/Table/Components/DataTable.js.map +1 -1
  23. package/dist/shared/Table/Components/Table.d.ts +1 -1
  24. package/dist/shared/Table/Components/Table.d.ts.map +1 -1
  25. package/dist/shared/Table/Components/Table.js +3 -2
  26. package/dist/shared/Table/Components/Table.js.map +1 -1
  27. package/dist/shared/Table/Components/TableBody.d.ts +1 -1
  28. package/dist/shared/Table/Components/TableBody.d.ts.map +1 -1
  29. package/dist/shared/Table/Components/TableBody.js +6 -15
  30. package/dist/shared/Table/Components/TableBody.js.map +1 -1
  31. package/dist/shared/Table/Components/TableDataRow.d.ts +4 -0
  32. package/dist/shared/Table/Components/TableDataRow.d.ts.map +1 -0
  33. package/dist/shared/Table/Components/TableDataRow.js +26 -0
  34. package/dist/shared/Table/Components/TableDataRow.js.map +1 -0
  35. package/dist/shared/Table/Components/TableHead.d.ts +1 -1
  36. package/dist/shared/Table/Components/TableHead.d.ts.map +1 -1
  37. package/dist/shared/Table/Components/TableHead.js +10 -4
  38. package/dist/shared/Table/Components/TableHead.js.map +1 -1
  39. package/dist/shared/Table/Components/TableReorderProvider.d.ts +3 -0
  40. package/dist/shared/Table/Components/TableReorderProvider.d.ts.map +1 -0
  41. package/dist/shared/Table/Components/TableReorderProvider.js +43 -0
  42. package/dist/shared/Table/Components/TableReorderProvider.js.map +1 -0
  43. package/dist/shared/Table/Components/TableResizeHandle.d.ts +4 -0
  44. package/dist/shared/Table/Components/TableResizeHandle.d.ts.map +1 -0
  45. package/dist/shared/Table/Components/TableResizeHandle.js +13 -0
  46. package/dist/shared/Table/Components/TableResizeHandle.js.map +1 -0
  47. package/dist/shared/Table/Components/TableSurface.d.ts +1 -1
  48. package/dist/shared/Table/Components/TableSurface.d.ts.map +1 -1
  49. package/dist/shared/Table/Components/TableSurface.js +16 -8
  50. package/dist/shared/Table/Components/TableSurface.js.map +1 -1
  51. package/dist/shared/Table/Components/TableViewport.d.ts +4 -0
  52. package/dist/shared/Table/Components/TableViewport.d.ts.map +1 -0
  53. package/dist/shared/Table/Components/TableViewport.js +20 -0
  54. package/dist/shared/Table/Components/TableViewport.js.map +1 -0
  55. package/dist/shared/Table/Hooks/useDataTableLogic.d.ts +1 -1
  56. package/dist/shared/Table/Hooks/useDataTableLogic.d.ts.map +1 -1
  57. package/dist/shared/Table/Hooks/useDataTableLogic.js +22 -3
  58. package/dist/shared/Table/Hooks/useDataTableLogic.js.map +1 -1
  59. package/dist/shared/Table/Hooks/useTableColumnResizeLogic.d.ts +6 -0
  60. package/dist/shared/Table/Hooks/useTableColumnResizeLogic.d.ts.map +1 -0
  61. package/dist/shared/Table/Hooks/useTableColumnResizeLogic.js +40 -0
  62. package/dist/shared/Table/Hooks/useTableColumnResizeLogic.js.map +1 -0
  63. package/dist/shared/Table/Hooks/useTableDragLogic.d.ts +21 -0
  64. package/dist/shared/Table/Hooks/useTableDragLogic.d.ts.map +1 -0
  65. package/dist/shared/Table/Hooks/useTableDragLogic.js +110 -0
  66. package/dist/shared/Table/Hooks/useTableDragLogic.js.map +1 -0
  67. package/dist/shared/Table/Hooks/useTableLogic.d.ts +1 -1
  68. package/dist/shared/Table/Hooks/useTableLogic.d.ts.map +1 -1
  69. package/dist/shared/Table/Hooks/useTableLogic.js +6 -1
  70. package/dist/shared/Table/Hooks/useTableLogic.js.map +1 -1
  71. package/dist/shared/Table/Hooks/useTableResizeHandleLogic.d.ts +20 -0
  72. package/dist/shared/Table/Hooks/useTableResizeHandleLogic.d.ts.map +1 -0
  73. package/dist/shared/Table/Hooks/useTableResizeHandleLogic.js +52 -0
  74. package/dist/shared/Table/Hooks/useTableResizeHandleLogic.js.map +1 -0
  75. package/dist/shared/Table/Hooks/useTableRowDragContext.d.ts +5 -0
  76. package/dist/shared/Table/Hooks/useTableRowDragContext.d.ts.map +1 -0
  77. package/dist/shared/Table/Hooks/useTableRowDragContext.js +6 -0
  78. package/dist/shared/Table/Hooks/useTableRowDragContext.js.map +1 -0
  79. package/dist/shared/Table/Hooks/useTableRowEventsLogic.d.ts +12 -0
  80. package/dist/shared/Table/Hooks/useTableRowEventsLogic.d.ts.map +1 -0
  81. package/dist/shared/Table/Hooks/useTableRowEventsLogic.js +25 -0
  82. package/dist/shared/Table/Hooks/useTableRowEventsLogic.js.map +1 -0
  83. package/dist/shared/Table/Hooks/useTableRowOrder.d.ts +11 -0
  84. package/dist/shared/Table/Hooks/useTableRowOrder.d.ts.map +1 -0
  85. package/dist/shared/Table/Hooks/useTableRowOrder.js +19 -0
  86. package/dist/shared/Table/Hooks/useTableRowOrder.js.map +1 -0
  87. package/dist/shared/Table/Types/dataTable.types.d.ts +17 -4
  88. package/dist/shared/Table/Types/dataTable.types.d.ts.map +1 -1
  89. package/dist/shared/Table/Types/dataTable.types.js.map +1 -1
  90. package/dist/shared/Table/Types/interaction.types.d.ts +86 -0
  91. package/dist/shared/Table/Types/interaction.types.d.ts.map +1 -0
  92. package/dist/shared/Table/Types/interaction.types.js +2 -0
  93. package/dist/shared/Table/Types/interaction.types.js.map +1 -0
  94. package/dist/shared/Table/Types/table.types.d.ts +5 -2
  95. package/dist/shared/Table/Types/table.types.d.ts.map +1 -1
  96. package/dist/shared/Table/Types/table.types.js.map +1 -1
  97. package/dist/types.d.ts +1 -0
  98. package/dist/types.d.ts.map +1 -1
  99. package/dist/types.js.map +1 -1
  100. package/docs/usage.md +54 -0
  101. package/package.json +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TableHead.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableHead.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { RowData } from '@tanstack/react-table'\nimport { ChevronRight } from 'lucide-react'\nimport { TableCheckbox } from './TableCheckbox.tsx'\nimport type { TableHeadProps } from '../Types/dataTable.types.ts'\n\nexport function TableHead<TData extends RowData>({\n table,\n view,\n selection,\n onSelectPage,\n renderExpandedRow,\n isLoading,\n filters,\n classNames,\n stickyHeader,\n}: TableHeadProps<TData>) {\n return (\n <thead\n className={`${stickyHeader ? 'sticky top-0 z-10' : ''} border-b-2 border-rentner-accent/80 bg-rentner-control text-xs text-rentner-muted ${classNames?.header ?? ''}`}\n >\n {view.headerGroups.map((group, index) => (\n <tr key={group.id}>\n {index === 0 && selection?.selectionEnabled && (\n <th\n scope=\"col\"\n rowSpan={view.headerGroups.length}\n className=\"w-12 px-4 py-3\"\n >\n <TableCheckbox\n checked={selection.allPageSelected}\n indeterminate={\n selection.somePageSelected &&\n !selection.allPageSelected\n }\n disabled={isLoading || !selection.canSelectPage}\n label={view.messages.selectPage}\n onChange={\n onSelectPage ??\n (() => table.toggleAllPageRowsSelected())\n }\n />\n </th>\n )}\n {index === 0 && renderExpandedRow && (\n <th\n scope=\"col\"\n rowSpan={view.headerGroups.length}\n className=\"w-10 px-2\"\n >\n <span className=\"sr-only\">\n {view.messages.expandRow('')}\n </span>\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-4 opacity-0\"\n />\n </th>\n )}\n {group.headers.map((item) => (\n <th\n key={item.header.id}\n colSpan={item.header.colSpan}\n scope={item.header.colSpan > 1 ? 'colgroup' : 'col'}\n aria-hidden={item.header.isPlaceholder || undefined}\n aria-sort={item.sortDirection}\n data-align={\n item.header.column.columnDef.meta?.align\n }\n style={\n item.header.column.columnDef.size === undefined\n ? undefined\n : { width: item.header.column.getSize() }\n }\n className={`px-4 py-3 font-medium group-data-[size=sm]/table:px-3 group-data-[size=sm]/table:py-2 group-data-[size=lg]/table:px-5 group-data-[size=lg]/table:py-4 data-[align=center]:text-center data-[align=right]:text-right ${item.header.column.columnDef.meta?.headerClassName ?? ''} ${classNames?.headerCell ?? ''}`}\n >\n {item.canSort ? (\n <button\n type=\"button\"\n disabled={isLoading}\n onClick={item.header.column.getToggleSortingHandler()}\n data-align={\n item.header.column.columnDef.meta?.align\n }\n className=\"group/sort relative flex w-full items-center gap-2 rounded-sm text-left motion-safe:transition-colors hover:text-rentner-foreground focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-rentner-accent disabled:cursor-wait disabled:opacity-60 data-[align=center]:justify-center data-[align=center]:text-center data-[align=right]:justify-end data-[align=right]:text-right\"\n >\n <table.FlexRender header={item.header} />\n <span className=\"sr-only\">\n {' '}\n — {item.sortAction}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"ml-auto shrink-0 text-rentner-accent group-data-[align=center]/sort:ml-0 group-data-[align=right]/sort:ml-0\"\n >\n {item.sortIndicator}\n </span>\n </button>\n ) : (\n !item.header.isPlaceholder && (\n <table.FlexRender header={item.header} />\n )\n )}\n </th>\n ))}\n </tr>\n ))}\n {filters}\n </thead>\n )\n}\n"]}
1
+ {"version":3,"file":"TableHead.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableHead.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { RowData } from '@tanstack/react-table'\nimport { ChevronRight } from 'lucide-react'\nimport { TableCheckbox } from './TableCheckbox.tsx'\nimport { TableResizeHandle } from './TableResizeHandle.tsx'\nimport type { TableHeadProps } from '../Types/dataTable.types.ts'\n\nexport function TableHead<TData extends RowData>({\n table,\n view,\n selection,\n onSelectPage,\n renderExpandedRow,\n isLoading,\n filters,\n classNames,\n stickyHeader,\n resizableColumns,\n reorderableRows,\n}: TableHeadProps<TData>) {\n return (\n <thead\n className={`${stickyHeader ? 'sticky top-0 z-10' : ''} border-b-2 border-rentner-accent/80 bg-rentner-control text-xs text-rentner-muted ${classNames?.header ?? ''}`}\n >\n {view.headerGroups.map((group, index) => (\n <tr key={group.id}>\n {index === 0 && reorderableRows && (\n <th\n scope=\"col\"\n rowSpan={view.headerGroups.length}\n className=\"w-12 px-2 py-3\"\n >\n <span className=\"sr-only\">\n {view.messages.moveRows ?? 'Reorder rows'}\n </span>\n </th>\n )}\n {index === 0 && selection?.selectionEnabled && (\n <th\n scope=\"col\"\n rowSpan={view.headerGroups.length}\n className=\"w-12 px-4 py-3\"\n >\n <TableCheckbox\n checked={selection.allPageSelected}\n indeterminate={\n selection.somePageSelected &&\n !selection.allPageSelected\n }\n disabled={isLoading || !selection.canSelectPage}\n label={view.messages.selectPage}\n onChange={\n onSelectPage ??\n (() => table.toggleAllPageRowsSelected())\n }\n />\n </th>\n )}\n {index === 0 && renderExpandedRow && (\n <th\n scope=\"col\"\n rowSpan={view.headerGroups.length}\n className=\"w-10 px-2\"\n >\n <span className=\"sr-only\">\n {view.messages.expandRow('')}\n </span>\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-4 opacity-0\"\n />\n </th>\n )}\n {group.headers.map((item) => (\n <th\n key={item.header.id}\n colSpan={item.header.colSpan}\n scope={item.header.colSpan > 1 ? 'colgroup' : 'col'}\n aria-hidden={item.header.isPlaceholder || undefined}\n aria-sort={item.sortDirection}\n data-column-id={\n !item.header.isPlaceholder\n ? item.header.column.id\n : undefined\n }\n data-align={\n item.header.column.columnDef.meta?.align\n }\n style={\n item.header.column.columnDef.size === undefined\n ? undefined\n : { width: item.header.column.getSize() }\n }\n className={`relative px-4 py-3 font-medium group-data-[size=sm]/table:px-3 group-data-[size=sm]/table:py-2 group-data-[size=lg]/table:px-5 group-data-[size=lg]/table:py-4 data-[align=center]:text-center data-[align=right]:text-right ${item.header.column.columnDef.meta?.headerClassName ?? ''} ${classNames?.headerCell ?? ''}`}\n >\n {item.canSort ? (\n <button\n type=\"button\"\n disabled={isLoading}\n onClick={item.header.column.getToggleSortingHandler()}\n data-align={\n item.header.column.columnDef.meta?.align\n }\n className=\"group/sort relative flex w-full items-center gap-2 rounded-sm text-left motion-safe:transition-colors hover:text-rentner-foreground focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-rentner-accent disabled:cursor-wait disabled:opacity-60 data-[align=center]:justify-center data-[align=center]:text-center data-[align=right]:justify-end data-[align=right]:text-right\"\n >\n <span className=\"min-w-0 truncate\">\n <table.FlexRender\n header={item.header}\n />\n </span>\n <span className=\"sr-only\">\n {' '}\n — {item.sortAction}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"ml-auto shrink-0 text-rentner-accent group-data-[align=center]/sort:ml-0 group-data-[align=right]/sort:ml-0\"\n >\n {item.sortIndicator}\n </span>\n </button>\n ) : (\n !item.header.isPlaceholder && (\n <table.FlexRender header={item.header} />\n )\n )}\n {resizableColumns &&\n !item.header.isPlaceholder &&\n item.header.column.columns.length === 0 &&\n item.header.column.getCanResize() && (\n <TableResizeHandle\n table={table}\n header={item.header}\n messages={view.messages}\n disabled={isLoading}\n />\n )}\n </th>\n ))}\n </tr>\n ))}\n {filters}\n </thead>\n )\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { TableReorderProviderProps } from '../Types/interaction.types.ts';
2
+ export default function TableReorderProvider(props: TableReorderProviderProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=TableReorderProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableReorderProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableReorderProvider.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACR,yBAAyB,EAG5B,MAAM,+BAA+B,CAAA;AAqDtC,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,+BAwD5E"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ import { DndContext, DragOverlay } from '@dnd-kit/core';
4
+ import { SortableContext, useSortable, verticalListSortingStrategy, } from '@dnd-kit/sortable';
5
+ import { restrictToVerticalAxis, restrictToFirstScrollableAncestor, } from '@dnd-kit/modifiers';
6
+ import { CSS } from '@dnd-kit/utilities';
7
+ import { GripVertical } from 'lucide-react';
8
+ import { TableButton } from './TableButton.js';
9
+ import { useTableDragLogic } from '../Hooks/useTableDragLogic.js';
10
+ import { TableRowDragContext } from '../Hooks/useTableRowDragContext.js';
11
+ const DragOptions = createContext({
12
+ disabled: true,
13
+ reason: undefined,
14
+ moveRow: (label) => `Move ${label}`,
15
+ });
16
+ const modifiers = [restrictToFirstScrollableAncestor, restrictToVerticalAxis];
17
+ function SortableRowGroup({ id, label, children }) {
18
+ const options = useContext(DragOptions);
19
+ const { setNodeRef, setActivatorNodeRef, attributes, listeners, transform, transition, isDragging, } = useSortable({ id, disabled: options.disabled });
20
+ return (_jsx("tbody", { ref: setNodeRef, "data-sortable-row": id, "data-dragging": isDragging || undefined, className: "motion-reduce:transition-none!", style: {
21
+ transform: isDragging
22
+ ? undefined
23
+ : CSS.Transform.toString(transform),
24
+ transition: isDragging ? undefined : transition,
25
+ opacity: isDragging ? 0 : undefined,
26
+ }, children: children(_jsx(TableButton, { ...attributes, ...listeners, ref: setActivatorNodeRef, iconOnly: true, "data-row-drag-handle": "", disabled: options.disabled, "aria-label": options.moveRow(label), title: options.reason, className: "touch-none cursor-grab border-transparent bg-transparent active:cursor-grabbing", children: _jsx(GripVertical, { "aria-hidden": "true", className: "size-4" }) })) }));
27
+ }
28
+ export default function TableReorderProvider(props) {
29
+ const { state, handler, refs: { preview: previewRef }, } = useTableDragLogic(props);
30
+ return (_jsx(DragOptions, { value: state.dragOptions, children: _jsxs(DndContext, { sensors: state.sensors, collisionDetection: state.collisionDetection, modifiers: modifiers, onDragStart: handler.handleStart, onDragEnd: handler.handleEnd, onDragCancel: handler.handleCancel, accessibility: {
31
+ screenReaderInstructions: {
32
+ draggable: props.messages.dragInstructions ??
33
+ 'Press Space to pick up a row, arrow keys to move, Space or Enter to drop, and Escape to cancel.',
34
+ },
35
+ announcements: state.announcements,
36
+ }, children: [_jsx(SortableContext, { items: state.items, strategy: verticalListSortingStrategy, children: _jsx(TableRowDragContext, { value: SortableRowGroup, children: props.children }) }), _jsx(DragOverlay, { dropAnimation: null, style: state.preview
37
+ ? {
38
+ left: state.preview.left,
39
+ width: state.preview.width,
40
+ }
41
+ : undefined, children: state.preview && (_jsx("div", { ref: previewRef, "data-rentner-row-preview": "", "aria-hidden": "true", inert: true, className: "pointer-events-none overflow-hidden rounded-lg border border-rentner-accent/60 bg-rentner-surface shadow-2xl" })) })] }) }));
42
+ }
43
+ //# sourceMappingURL=TableReorderProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableReorderProvider.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableReorderProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import { createContext, useContext } from 'react'\nimport { DndContext, DragOverlay } from '@dnd-kit/core'\nimport {\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\nimport {\n restrictToVerticalAxis,\n restrictToFirstScrollableAncestor,\n} from '@dnd-kit/modifiers'\nimport { CSS } from '@dnd-kit/utilities'\nimport { GripVertical } from 'lucide-react'\nimport { TableButton } from './TableButton.tsx'\nimport { useTableDragLogic } from '../Hooks/useTableDragLogic.ts'\nimport { TableRowDragContext } from '../Hooks/useTableRowDragContext.ts'\nimport type {\n TableReorderProviderProps,\n TableDragGroupProps,\n TableDragOptions,\n} from '../Types/interaction.types.ts'\n\nconst DragOptions = createContext<TableDragOptions>({\n disabled: true,\n reason: undefined,\n moveRow: (label: string) => `Move ${label}`,\n})\nconst modifiers = [restrictToFirstScrollableAncestor, restrictToVerticalAxis]\n\nfunction SortableRowGroup({ id, label, children }: TableDragGroupProps) {\n const options = useContext(DragOptions)\n const {\n setNodeRef,\n setActivatorNodeRef,\n attributes,\n listeners,\n transform,\n transition,\n isDragging,\n } = useSortable({ id, disabled: options.disabled })\n return (\n <tbody\n ref={setNodeRef}\n data-sortable-row={id}\n data-dragging={isDragging || undefined}\n className=\"motion-reduce:transition-none!\"\n style={{\n transform: isDragging\n ? undefined\n : CSS.Transform.toString(transform),\n transition: isDragging ? undefined : transition,\n opacity: isDragging ? 0 : undefined,\n }}\n >\n {children(\n <TableButton\n {...attributes}\n {...listeners}\n ref={setActivatorNodeRef}\n iconOnly\n data-row-drag-handle=\"\"\n disabled={options.disabled}\n aria-label={options.moveRow(label)}\n title={options.reason}\n className=\"touch-none cursor-grab border-transparent bg-transparent active:cursor-grabbing\"\n >\n <GripVertical aria-hidden=\"true\" className=\"size-4\" />\n </TableButton>,\n )}\n </tbody>\n )\n}\n\nexport default function TableReorderProvider(props: TableReorderProviderProps) {\n const {\n state,\n handler,\n refs: { preview: previewRef },\n } = useTableDragLogic(props)\n return (\n <DragOptions value={state.dragOptions}>\n <DndContext\n sensors={state.sensors}\n collisionDetection={state.collisionDetection}\n modifiers={modifiers}\n onDragStart={handler.handleStart}\n onDragEnd={handler.handleEnd}\n onDragCancel={handler.handleCancel}\n accessibility={{\n screenReaderInstructions: {\n draggable:\n props.messages.dragInstructions ??\n 'Press Space to pick up a row, arrow keys to move, Space or Enter to drop, and Escape to cancel.',\n },\n announcements: state.announcements,\n }}\n >\n <SortableContext\n items={state.items}\n strategy={verticalListSortingStrategy}\n >\n <TableRowDragContext value={SortableRowGroup}>\n {props.children}\n </TableRowDragContext>\n </SortableContext>\n <DragOverlay\n dropAnimation={null}\n style={\n state.preview\n ? {\n left: state.preview.left,\n width: state.preview.width,\n }\n : undefined\n }\n >\n {state.preview && (\n <div\n ref={previewRef}\n data-rentner-row-preview=\"\"\n aria-hidden=\"true\"\n inert\n className=\"pointer-events-none overflow-hidden rounded-lg border border-rentner-accent/60 bg-rentner-surface shadow-2xl\"\n />\n )}\n </DragOverlay>\n </DndContext>\n </DragOptions>\n )\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { TableColumnResizeHandleProps } from '../Types/interaction.types.ts';
3
+ export declare function TableResizeHandle<TData extends RowData>(props: TableColumnResizeHandleProps<TData>): import("react").JSX.Element;
4
+ //# sourceMappingURL=TableResizeHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableResizeHandle.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableResizeHandle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAA;AAGjF,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,OAAO,EACnD,KAAK,EAAE,4BAA4B,CAAC,KAAK,CAAC,+BA6B7C"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useTableResizeHandleLogic } from '../Hooks/useTableResizeHandleLogic.js';
3
+ export function TableResizeHandle(props) {
4
+ const { state, handler } = useTableResizeHandleLogic(props);
5
+ return (_jsx("hr", { "aria-orientation": "vertical", "aria-label": state.label, title: state.resetLabel, "aria-valuenow": Math.round(state.size), "aria-valuemin": state.min, "aria-valuemax": state.max, "aria-disabled": props.disabled || undefined, tabIndex: props.disabled ? -1 : 0, "data-resizing": state.isResizing || undefined, onMouseDown: handler.handleStart, onTouchStart: handler.handleStart, onDoubleClick: handler.handleReset, onKeyDown: handler.handleKeyDown, style: {
6
+ transform: `translateX(${state.offset}px)`,
7
+ backgroundImage: 'linear-gradient(currentColor, currentColor)',
8
+ backgroundSize: '2px 45%',
9
+ backgroundPosition: 'center',
10
+ backgroundRepeat: 'no-repeat',
11
+ }, className: "absolute inset-y-0 end-0 z-20 m-0 h-full w-3 touch-none cursor-col-resize border-0 text-rentner-border outline-none hover:text-rentner-accent focus-visible:bg-rentner-accent/15 focus-visible:text-rentner-accent data-[resizing=true]:text-rentner-accent aria-disabled:cursor-default" }));
12
+ }
13
+ //# sourceMappingURL=TableResizeHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableResizeHandle.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableResizeHandle.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAA;AAEjF,MAAM,UAAU,iBAAiB,CAC7B,KAA0C;IAE1C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAA;IAC3D,OAAO,CAEH,iCACqB,UAAU,gBACf,KAAK,CAAC,KAAK,EACvB,KAAK,EAAE,KAAK,CAAC,UAAU,mBACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,mBACtB,KAAK,CAAC,GAAG,mBACT,KAAK,CAAC,GAAG,mBACT,KAAK,CAAC,QAAQ,IAAI,SAAS,EAC1C,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAClB,KAAK,CAAC,UAAU,IAAI,SAAS,EAC5C,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,YAAY,EAAE,OAAO,CAAC,WAAW,EACjC,aAAa,EAAE,OAAO,CAAC,WAAW,EAClC,SAAS,EAAE,OAAO,CAAC,aAAa,EAChC,KAAK,EAAE;YACH,SAAS,EAAE,cAAc,KAAK,CAAC,MAAM,KAAK;YAC1C,eAAe,EAAE,6CAA6C;YAC9D,cAAc,EAAE,SAAS;YACzB,kBAAkB,EAAE,QAAQ;YAC5B,gBAAgB,EAAE,WAAW;SAChC,EACD,SAAS,EAAC,0RAA0R,GACtS,CACL,CAAA;AACL,CAAC","sourcesContent":["import type { RowData } from '@tanstack/react-table'\nimport type { TableColumnResizeHandleProps } from '../Types/interaction.types.ts'\nimport { useTableResizeHandleLogic } from '../Hooks/useTableResizeHandleLogic.ts'\n\nexport function TableResizeHandle<TData extends RowData>(\n props: TableColumnResizeHandleProps<TData>,\n) {\n const { state, handler } = useTableResizeHandleLogic(props)\n return (\n // oxlint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- A focusable separator implements the keyboard column-resizing pattern.\n <hr\n aria-orientation=\"vertical\"\n aria-label={state.label}\n title={state.resetLabel}\n aria-valuenow={Math.round(state.size)}\n aria-valuemin={state.min}\n aria-valuemax={state.max}\n aria-disabled={props.disabled || undefined}\n tabIndex={props.disabled ? -1 : 0}\n data-resizing={state.isResizing || undefined}\n onMouseDown={handler.handleStart}\n onTouchStart={handler.handleStart}\n onDoubleClick={handler.handleReset}\n onKeyDown={handler.handleKeyDown}\n style={{\n transform: `translateX(${state.offset}px)`,\n backgroundImage: 'linear-gradient(currentColor, currentColor)',\n backgroundSize: '2px 45%',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n }}\n className=\"absolute inset-y-0 end-0 z-20 m-0 h-full w-3 touch-none cursor-col-resize border-0 text-rentner-border outline-none hover:text-rentner-accent focus-visible:bg-rentner-accent/15 focus-visible:text-rentner-accent data-[resizing=true]:text-rentner-accent aria-disabled:cursor-default\"\n />\n )\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import type { RowData } from '@tanstack/react-table';
2
2
  import type { TableSurfaceProps } from '../Types/dataTable.types.ts';
3
- export declare function TableSurface<TData extends RowData>({ table, view, caption, size, striped, isLoading, emptyState, loadingState, noResultsState, hasFilters, error, onRetry, onResetFilters, containerClassName, embedded, stickyHeader, classNames, rowClassName, selection, onSelectPage, getRowLabel, renderExpandedRow, detailsId, filters, detailedStates, className, ref, ...tableProps }: TableSurfaceProps<TData>): import("react").JSX.Element;
3
+ export declare function TableSurface<TData extends RowData>(props: TableSurfaceProps<TData>): import("react").JSX.Element;
4
4
  //# sourceMappingURL=TableSurface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableSurface.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableSurface.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,wBAAgB,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,EAChD,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAW,EACX,OAAe,EACf,SAAiB,EACjB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,KAAK,EACL,OAAO,EACP,cAAc,EACd,kBAAuB,EACvB,QAAgB,EAChB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,cAAc,EACd,SAAc,EACd,GAAG,EACH,GAAG,UAAU,EAChB,EAAE,iBAAiB,CAAC,KAAK,CAAC,+BA8D1B"}
1
+ {"version":3,"file":"TableSurface.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableSurface.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAKpE,wBAAgB,YAAY,CAAC,KAAK,SAAS,OAAO,EAC9C,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,+BAgClC"}
@@ -1,11 +1,19 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { TableHead } from './TableHead.js';
4
- import { TableBody } from './TableBody.js';
5
- import { TableStatus } from './TableStatus.js';
6
- export function TableSurface({ table, view, caption, size = 'md', striped = false, isLoading = false, emptyState, loadingState, noResultsState, hasFilters, error, onRetry, onResetFilters, containerClassName = '', embedded = false, stickyHeader, classNames, rowClassName, selection, onSelectPage, getRowLabel, renderExpandedRow, detailsId, filters, detailedStates, className = '', ref, ...tableProps }) {
7
- return (_jsx("div", { "data-rentner-table-container": "", className: `relative w-full overflow-auto ${embedded ? '' : 'rounded-rentner-control border border-rentner-border bg-rentner-surface'} ${classNames?.viewport ?? ''} ${containerClassName}`, children: _jsxs("table", { ...tableProps, ref: ref, "aria-busy": isLoading || tableProps['aria-busy'], "data-rentner-table": "", "data-size": size, "data-striped": striped, className: `group/table w-full border-collapse text-left text-sm text-rentner-foreground data-[size=sm]:text-xs data-[size=lg]:text-base data-[striped=true]:[&_tbody_tr:nth-child(even)]:bg-rentner-control/25 ${classNames?.table ?? ''} ${className}`, children: [caption != null && (_jsx("caption", { className: "border-b border-rentner-border px-4 py-3 text-left font-medium text-rentner-muted", children: caption })), _jsx(TableHead, { table: table, view: view, selection: selection, onSelectPage: onSelectPage, renderExpandedRow: renderExpandedRow, isLoading: isLoading, filters: filters, classNames: classNames, stickyHeader: stickyHeader }), (error != null && error !== false) ||
8
- isLoading ||
9
- view.rows.length === 0 ? (_jsx(TableStatus, { view: view, isLoading: isLoading, loadingState: loadingState, emptyState: emptyState, noResultsState: noResultsState, hasFilters: hasFilters, error: error, onRetry: onRetry, onResetFilters: onResetFilters, detailedStates: detailedStates })) : (_jsx(TableBody, { table: table, view: view, selection: selection, renderExpandedRow: renderExpandedRow, getRowLabel: getRowLabel, detailsId: detailsId, classNames: classNames, rowClassName: rowClassName, isLoading: isLoading }))] }) }));
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { lazy, Suspense } from 'react';
4
+ import { TableViewport } from './TableViewport.js';
5
+ const ReorderableTable = lazy(() => import('./TableReorderProvider.js'));
6
+ export function TableSurface(props) {
7
+ return props.reorderableRows ? (_jsx(Suspense, { fallback: _jsx(TableViewport, { ...props }), children: _jsx(ReorderableTable, { rows: props.view.rows, messages: props.view.messages, disabled: Boolean(props.isLoading ||
8
+ (props.error != null && props.error !== false) ||
9
+ props.table.state.sorting.length ||
10
+ !props.onRowReorder), disabledReason: props.table.state.sorting.length
11
+ ? props.view.messages.rowSortingActive
12
+ : undefined, getLabel: (id) => {
13
+ const row = props.view.rows.find((item) => item.id === id);
14
+ return row
15
+ ? (props.getRowLabel?.(row.original) ?? row.id)
16
+ : id;
17
+ }, onReorder: props.onRowReorder, children: _jsx(TableViewport, { ...props }) }) })) : (_jsx(TableViewport, { ...props }));
10
18
  }
11
19
  //# sourceMappingURL=TableSurface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableSurface.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableSurface.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAG/C,MAAM,UAAU,YAAY,CAAwB,EAChD,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,KAAK,EACjB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,KAAK,EACL,OAAO,EACP,cAAc,EACd,kBAAkB,GAAG,EAAE,EACvB,QAAQ,GAAG,KAAK,EAChB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,cAAc,EACd,SAAS,GAAG,EAAE,EACd,GAAG,EACH,GAAG,UAAU,EACU;IACvB,OAAO,CACH,8CACiC,EAAE,EAC/B,SAAS,EAAE,iCAAiC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yEAAyE,IAAI,UAAU,EAAE,QAAQ,IAAI,EAAE,IAAI,kBAAkB,EAAE,YAE3L,oBACQ,UAAU,EACd,GAAG,EAAE,GAAG,eACG,SAAS,IAAI,UAAU,CAAC,WAAW,CAAC,wBAC5B,EAAE,eACV,IAAI,kBACD,OAAO,EACrB,SAAS,EAAE,uMAAuM,UAAU,EAAE,KAAK,IAAI,EAAE,IAAI,SAAS,EAAE,aAEvP,OAAO,IAAI,IAAI,IAAI,CAChB,kBAAS,SAAS,EAAC,mFAAmF,YACjG,OAAO,GACF,CACb,EACD,KAAC,SAAS,IACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,GAC5B,EACD,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC;oBACnC,SAAS;oBACT,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACrB,KAAC,WAAW,IACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,GAChC,CACL,CAAC,CAAC,CAAC,CACA,KAAC,SAAS,IACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GACtB,CACL,IACG,GACN,CACT,CAAA;AACL,CAAC","sourcesContent":["'use client'\n\nimport type { RowData } from '@tanstack/react-table'\nimport { TableHead } from './TableHead.tsx'\nimport { TableBody } from './TableBody.tsx'\nimport { TableStatus } from './TableStatus.tsx'\nimport type { TableSurfaceProps } from '../Types/dataTable.types.ts'\n\nexport function TableSurface<TData extends RowData>({\n table,\n view,\n caption,\n size = 'md',\n striped = false,\n isLoading = false,\n emptyState,\n loadingState,\n noResultsState,\n hasFilters,\n error,\n onRetry,\n onResetFilters,\n containerClassName = '',\n embedded = false,\n stickyHeader,\n classNames,\n rowClassName,\n selection,\n onSelectPage,\n getRowLabel,\n renderExpandedRow,\n detailsId,\n filters,\n detailedStates,\n className = '',\n ref,\n ...tableProps\n}: TableSurfaceProps<TData>) {\n return (\n <div\n data-rentner-table-container=\"\"\n className={`relative w-full overflow-auto ${embedded ? '' : 'rounded-rentner-control border border-rentner-border bg-rentner-surface'} ${classNames?.viewport ?? ''} ${containerClassName}`}\n >\n <table\n {...tableProps}\n ref={ref}\n aria-busy={isLoading || tableProps['aria-busy']}\n data-rentner-table=\"\"\n data-size={size}\n data-striped={striped}\n className={`group/table w-full border-collapse text-left text-sm text-rentner-foreground data-[size=sm]:text-xs data-[size=lg]:text-base data-[striped=true]:[&_tbody_tr:nth-child(even)]:bg-rentner-control/25 ${classNames?.table ?? ''} ${className}`}\n >\n {caption != null && (\n <caption className=\"border-b border-rentner-border px-4 py-3 text-left font-medium text-rentner-muted\">\n {caption}\n </caption>\n )}\n <TableHead\n table={table}\n view={view}\n selection={selection}\n onSelectPage={onSelectPage}\n renderExpandedRow={renderExpandedRow}\n isLoading={isLoading}\n filters={filters}\n classNames={classNames}\n stickyHeader={stickyHeader}\n />\n {(error != null && error !== false) ||\n isLoading ||\n view.rows.length === 0 ? (\n <TableStatus\n view={view}\n isLoading={isLoading}\n loadingState={loadingState}\n emptyState={emptyState}\n noResultsState={noResultsState}\n hasFilters={hasFilters}\n error={error}\n onRetry={onRetry}\n onResetFilters={onResetFilters}\n detailedStates={detailedStates}\n />\n ) : (\n <TableBody\n table={table}\n view={view}\n selection={selection}\n renderExpandedRow={renderExpandedRow}\n getRowLabel={getRowLabel}\n detailsId={detailsId}\n classNames={classNames}\n rowClassName={rowClassName}\n isLoading={isLoading}\n />\n )}\n </table>\n </div>\n )\n}\n"]}
1
+ {"version":3,"file":"TableSurface.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableSurface.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAEnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA4B,CAAC,CAAC,CAAA;AAEzE,MAAM,UAAU,YAAY,CACxB,KAA+B;IAE/B,OAAO,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAC3B,KAAC,QAAQ,IAAC,QAAQ,EAAE,KAAC,aAAa,OAAK,KAAK,GAAI,YAC5C,KAAC,gBAAgB,IACb,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EACrB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAC7B,QAAQ,EAAE,OAAO,CACb,KAAK,CAAC,SAAS;gBACf,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;gBAC9C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;gBAChC,CAAC,KAAK,CAAC,YAAY,CACtB,EACD,cAAc,EACV,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;gBAC5B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB;gBACtC,CAAC,CAAC,SAAS,EAEnB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;gBACb,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC1D,OAAO,GAAG;oBACN,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBAC/C,CAAC,CAAC,EAAE,CAAA;YACZ,CAAC,EACD,SAAS,EAAE,KAAK,CAAC,YAAY,YAE7B,KAAC,aAAa,OAAK,KAAK,GAAI,GACb,GACZ,CACd,CAAC,CAAC,CAAC,CACA,KAAC,aAAa,OAAK,KAAK,GAAI,CAC/B,CAAA;AACL,CAAC","sourcesContent":["'use client'\n\nimport { lazy, Suspense } from 'react'\nimport type { RowData } from '@tanstack/react-table'\nimport type { TableSurfaceProps } from '../Types/dataTable.types.ts'\nimport { TableViewport } from './TableViewport.tsx'\n\nconst ReorderableTable = lazy(() => import('./TableReorderProvider.tsx'))\n\nexport function TableSurface<TData extends RowData>(\n props: TableSurfaceProps<TData>,\n) {\n return props.reorderableRows ? (\n <Suspense fallback={<TableViewport {...props} />}>\n <ReorderableTable\n rows={props.view.rows}\n messages={props.view.messages}\n disabled={Boolean(\n props.isLoading ||\n (props.error != null && props.error !== false) ||\n props.table.state.sorting.length ||\n !props.onRowReorder,\n )}\n disabledReason={\n props.table.state.sorting.length\n ? props.view.messages.rowSortingActive\n : undefined\n }\n getLabel={(id) => {\n const row = props.view.rows.find((item) => item.id === id)\n return row\n ? (props.getRowLabel?.(row.original) ?? row.id)\n : id\n }}\n onReorder={props.onRowReorder}\n >\n <TableViewport {...props} />\n </ReorderableTable>\n </Suspense>\n ) : (\n <TableViewport {...props} />\n )\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { TableSurfaceProps } from '../Types/dataTable.types.ts';
3
+ export declare function TableViewport<TData extends RowData>({ table, view, caption, size, striped, isLoading, emptyState, loadingState, noResultsState, hasFilters, error, onRetry, onResetFilters, containerClassName, embedded, stickyHeader, classNames, rowClassName, selection, onSelectPage, getRowLabel, renderExpandedRow, detailsId, filters, detailedStates, className, ref, resizableColumns, reorderableRows, onRowReorder: _onRowReorder, onRowClick, onRowDoubleClick, onRowContextMenu, onCellClick, onCellDoubleClick, onCellContextMenu, ...tableProps }: TableSurfaceProps<TData>): import("react").JSX.Element;
4
+ //# sourceMappingURL=TableViewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableViewport.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableViewport.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAIpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,wBAAgB,aAAa,CAAC,KAAK,SAAS,OAAO,EAAE,EACjD,KAAK,EACL,IAAI,EACJ,OAAO,EACP,IAAW,EACX,OAAe,EACf,SAAiB,EACjB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,KAAK,EACL,OAAO,EACP,cAAc,EACd,kBAAuB,EACvB,QAAgB,EAChB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,cAAc,EACd,SAAc,EACd,GAAG,EACH,gBAAwB,EACxB,eAAuB,EACvB,YAAY,EAAE,aAAa,EAC3B,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,GAAG,UAAU,EAChB,EAAE,iBAAiB,CAAC,KAAK,CAAC,+BAyG1B"}
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { TableHead } from './TableHead.js';
4
+ import { TableBody } from './TableBody.js';
5
+ import { TableStatus } from './TableStatus.js';
6
+ import { useTableColumnResizeLogic } from '../Hooks/useTableColumnResizeLogic.js';
7
+ export function TableViewport({ table, view, caption, size = 'md', striped = false, isLoading = false, emptyState, loadingState, noResultsState, hasFilters, error, onRetry, onResetFilters, containerClassName = '', embedded = false, stickyHeader, classNames, rowClassName, selection, onSelectPage, getRowLabel, renderExpandedRow, detailsId, filters, detailedStates, className = '', ref, resizableColumns = false, reorderableRows = false, onRowReorder: _onRowReorder, onRowClick, onRowDoubleClick, onRowContextMenu, onCellClick, onCellDoubleClick, onCellContextMenu, ...tableProps }) {
8
+ const { state: sizing, refs: { table: tableRef }, } = useTableColumnResizeLogic(table, resizableColumns, Number(reorderableRows) * 48 +
9
+ Number(Boolean(selection?.selectionEnabled)) * 48 +
10
+ Number(Boolean(renderExpandedRow)) * 40, ref);
11
+ return (_jsx("div", { "data-rentner-table-container": "", className: `relative w-full overflow-auto ${embedded ? '' : 'rounded-rentner-control border border-rentner-border bg-rentner-surface'} ${classNames?.viewport ?? ''} ${containerClassName}`, children: _jsxs("table", { ...tableProps, ref: tableRef, style: {
12
+ ...tableProps.style,
13
+ ...(sizing.fixed
14
+ ? { tableLayout: 'fixed', width: sizing.width }
15
+ : {}),
16
+ }, "aria-busy": isLoading || tableProps['aria-busy'], "data-rentner-table": "", "data-size": size, "data-striped": striped, className: `group/table w-full border-collapse text-left text-sm text-rentner-foreground data-[size=sm]:text-xs data-[size=lg]:text-base [&_tbody:last-of-type>tr:last-child]:border-b-0 ${sizing.fixed ? '[&_td]:overflow-hidden [&_th]:overflow-visible' : ''} ${classNames?.table ?? ''} ${className}`, children: [caption != null && (_jsx("caption", { className: "border-b border-rentner-border px-4 py-3 text-left font-medium text-rentner-muted", children: caption })), sizing.fixed && (_jsxs("colgroup", { children: [reorderableRows && _jsx("col", { style: { width: 48 } }), selection?.selectionEnabled && (_jsx("col", { style: { width: 48 } })), renderExpandedRow && _jsx("col", { style: { width: 40 } }), sizing.widths.map((column) => (_jsx("col", { style: { width: column.width } }, column.id)))] })), _jsx(TableHead, { table: table, view: view, selection: selection, onSelectPage: onSelectPage, renderExpandedRow: renderExpandedRow, isLoading: isLoading, filters: filters, classNames: classNames, stickyHeader: stickyHeader, resizableColumns: resizableColumns, reorderableRows: reorderableRows }), (error != null && error !== false) ||
17
+ isLoading ||
18
+ view.rows.length === 0 ? (_jsx(TableStatus, { view: view, isLoading: isLoading, loadingState: loadingState, emptyState: emptyState, noResultsState: noResultsState, hasFilters: hasFilters, error: error, onRetry: onRetry, onResetFilters: onResetFilters, detailedStates: detailedStates })) : (_jsx(TableBody, { table: table, view: view, selection: selection, renderExpandedRow: renderExpandedRow, getRowLabel: getRowLabel, detailsId: detailsId, classNames: classNames, rowClassName: rowClassName, isLoading: isLoading, striped: striped, resizableColumns: resizableColumns, reorderableRows: reorderableRows, onRowClick: onRowClick, onRowDoubleClick: onRowDoubleClick, onRowContextMenu: onRowContextMenu, onCellClick: onCellClick, onCellDoubleClick: onCellDoubleClick, onCellContextMenu: onCellContextMenu }))] }) }));
19
+ }
20
+ //# sourceMappingURL=TableViewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableViewport.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableViewport.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport type { RowData } from '@tanstack/react-table'\nimport { TableHead } from './TableHead.tsx'\nimport { TableBody } from './TableBody.tsx'\nimport { TableStatus } from './TableStatus.tsx'\nimport type { TableSurfaceProps } from '../Types/dataTable.types.ts'\nimport { useTableColumnResizeLogic } from '../Hooks/useTableColumnResizeLogic.ts'\n\nexport function TableViewport<TData extends RowData>({\n table,\n view,\n caption,\n size = 'md',\n striped = false,\n isLoading = false,\n emptyState,\n loadingState,\n noResultsState,\n hasFilters,\n error,\n onRetry,\n onResetFilters,\n containerClassName = '',\n embedded = false,\n stickyHeader,\n classNames,\n rowClassName,\n selection,\n onSelectPage,\n getRowLabel,\n renderExpandedRow,\n detailsId,\n filters,\n detailedStates,\n className = '',\n ref,\n resizableColumns = false,\n reorderableRows = false,\n onRowReorder: _onRowReorder,\n onRowClick,\n onRowDoubleClick,\n onRowContextMenu,\n onCellClick,\n onCellDoubleClick,\n onCellContextMenu,\n ...tableProps\n}: TableSurfaceProps<TData>) {\n const {\n state: sizing,\n refs: { table: tableRef },\n } = useTableColumnResizeLogic(\n table,\n resizableColumns,\n Number(reorderableRows) * 48 +\n Number(Boolean(selection?.selectionEnabled)) * 48 +\n Number(Boolean(renderExpandedRow)) * 40,\n ref,\n )\n return (\n <div\n data-rentner-table-container=\"\"\n className={`relative w-full overflow-auto ${embedded ? '' : 'rounded-rentner-control border border-rentner-border bg-rentner-surface'} ${classNames?.viewport ?? ''} ${containerClassName}`}\n >\n <table\n {...tableProps}\n ref={tableRef}\n style={{\n ...tableProps.style,\n ...(sizing.fixed\n ? { tableLayout: 'fixed', width: sizing.width }\n : {}),\n }}\n aria-busy={isLoading || tableProps['aria-busy']}\n data-rentner-table=\"\"\n data-size={size}\n data-striped={striped}\n className={`group/table w-full border-collapse text-left text-sm text-rentner-foreground data-[size=sm]:text-xs data-[size=lg]:text-base [&_tbody:last-of-type>tr:last-child]:border-b-0 ${sizing.fixed ? '[&_td]:overflow-hidden [&_th]:overflow-visible' : ''} ${classNames?.table ?? ''} ${className}`}\n >\n {caption != null && (\n <caption className=\"border-b border-rentner-border px-4 py-3 text-left font-medium text-rentner-muted\">\n {caption}\n </caption>\n )}\n {sizing.fixed && (\n <colgroup>\n {reorderableRows && <col style={{ width: 48 }} />}\n {selection?.selectionEnabled && (\n <col style={{ width: 48 }} />\n )}\n {renderExpandedRow && <col style={{ width: 40 }} />}\n {sizing.widths.map((column) => (\n <col\n key={column.id}\n style={{ width: column.width }}\n />\n ))}\n </colgroup>\n )}\n <TableHead\n table={table}\n view={view}\n selection={selection}\n onSelectPage={onSelectPage}\n renderExpandedRow={renderExpandedRow}\n isLoading={isLoading}\n filters={filters}\n classNames={classNames}\n stickyHeader={stickyHeader}\n resizableColumns={resizableColumns}\n reorderableRows={reorderableRows}\n />\n {(error != null && error !== false) ||\n isLoading ||\n view.rows.length === 0 ? (\n <TableStatus\n view={view}\n isLoading={isLoading}\n loadingState={loadingState}\n emptyState={emptyState}\n noResultsState={noResultsState}\n hasFilters={hasFilters}\n error={error}\n onRetry={onRetry}\n onResetFilters={onResetFilters}\n detailedStates={detailedStates}\n />\n ) : (\n <TableBody\n table={table}\n view={view}\n selection={selection}\n renderExpandedRow={renderExpandedRow}\n getRowLabel={getRowLabel}\n detailsId={detailsId}\n classNames={classNames}\n rowClassName={rowClassName}\n isLoading={isLoading}\n striped={striped}\n resizableColumns={resizableColumns}\n reorderableRows={reorderableRows}\n onRowClick={onRowClick}\n onRowDoubleClick={onRowDoubleClick}\n onRowContextMenu={onRowContextMenu}\n onCellClick={onCellClick}\n onCellDoubleClick={onCellDoubleClick}\n onCellContextMenu={onCellContextMenu}\n />\n )}\n </table>\n </div>\n )\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import type { RowData } from '@tanstack/react-table';
2
2
  import type { DataTableLogicOptions, DataTableLogicResult } from '../Types/dataTable.types.ts';
3
- export declare function useDataTableLogic<TData extends RowData>({ data, columns, getRowId, locale, messages: overrides, pagination, pageSize, pageSizeOptions, selectable, renderExpandedRow, initialShowFilters, tableOptions, portalContainer, }: DataTableLogicOptions<TData>): DataTableLogicResult<TData>;
3
+ export declare function useDataTableLogic<TData extends RowData>({ data, columns, getRowId, locale, messages: overrides, pagination, pageSize, pageSizeOptions, selectable, renderExpandedRow, initialShowFilters, tableOptions, portalContainer, resizableColumns, reorderableRows, onRowOrderChange, }: DataTableLogicOptions<TData>): DataTableLogicResult<TData>;
4
4
  //# sourceMappingURL=useDataTableLogic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDataTableLogic.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useDataTableLogic.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AASpD,OAAO,KAAK,EACR,qBAAqB,EACrB,oBAAoB,EACvB,MAAM,6BAA6B,CAAA;AAIpC,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,OAAO,EAAE,EACrD,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,MAAa,EACb,QAAQ,EAAE,SAAS,EACnB,UAAiB,EACjB,QAAa,EACb,eAAkC,EAClC,UAAkB,EAClB,iBAAiB,EACjB,kBAA0B,EAC1B,YAAY,EACZ,eAAe,GAClB,EAAE,qBAAqB,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CA4N5D"}
1
+ {"version":3,"file":"useDataTableLogic.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useDataTableLogic.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AASpD,OAAO,KAAK,EACR,qBAAqB,EACrB,oBAAoB,EACvB,MAAM,6BAA6B,CAAA;AAKpC,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,OAAO,EAAE,EACrD,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,MAAa,EACb,QAAQ,EAAE,SAAS,EACnB,UAAiB,EACjB,QAAa,EACb,eAAkC,EAClC,UAAkB,EAClB,iBAAiB,EACjB,kBAA0B,EAC1B,YAAY,EACZ,eAAe,EACf,gBAAwB,EACxB,eAAuB,EACvB,gBAAgB,GACnB,EAAE,qBAAqB,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CA8O5D"}
@@ -4,9 +4,16 @@ import { useTable } from '@tanstack/react-table';
4
4
  import { rentnerTableFeatures } from '../../../lib/Table/table.js';
5
5
  import { getColumnLabel, getTableView, prepareTableColumns, } from '../../../lib/Table/presentation.js';
6
6
  import { resolveTableMessages } from '../../../lib/Messages/tableMessages.js';
7
+ import { useTableRowOrder } from './useTableRowOrder.js';
7
8
  const defaultPageSizes = [10, 25, 50, 100];
8
- export function useDataTableLogic({ data, columns, getRowId, locale = 'en', messages: overrides, pagination = true, pageSize = 10, pageSizeOptions = defaultPageSizes, selectable = false, renderExpandedRow, initialShowFilters = false, tableOptions, portalContainer, }) {
9
+ export function useDataTableLogic({ data, columns, getRowId, locale = 'en', messages: overrides, pagination = true, pageSize = 10, pageSizeOptions = defaultPageSizes, selectable = false, renderExpandedRow, initialShowFilters = false, tableOptions, portalContainer, resizableColumns = false, reorderableRows = false, onRowOrderChange, }) {
9
10
  const id = useId();
11
+ const ordered = useTableRowOrder({
12
+ data,
13
+ getRowId,
14
+ reorderableRows,
15
+ onRowOrderChange,
16
+ });
10
17
  const [showFilters, setShowFilters] = useState(initialShowFilters);
11
18
  const [root, setRoot] = useState(null);
12
19
  const messages = useMemo(() => resolveTableMessages(locale, overrides), [locale, overrides]);
@@ -15,9 +22,15 @@ export function useDataTableLogic({ data, columns, getRowId, locale = 'en', mess
15
22
  const table = useTable({
16
23
  globalFilterFn: 'text',
17
24
  autoResetPageIndex: false,
25
+ autoResetExpanded: reorderableRows ? false : undefined,
26
+ columnResizeMode: 'onChange',
27
+ enableColumnResizing: resizableColumns,
18
28
  ...tableOptions,
29
+ defaultColumn: resizableColumns
30
+ ? { minSize: 64, maxSize: 2000, ...tableOptions?.defaultColumn }
31
+ : tableOptions?.defaultColumn,
19
32
  features: rentnerTableFeatures,
20
- data,
33
+ data: ordered.state.data,
21
34
  columns: preparedColumns,
22
35
  getRowId,
23
36
  enableRowSelection: selectable,
@@ -112,7 +125,9 @@ export function useDataTableLogic({ data, columns, getRowId, locale = 'en', mess
112
125
  const selectedRows = selectionEnabled
113
126
  ? table.getFilteredSelectedRowModel().rows
114
127
  : [];
115
- const view = getTableView(table, messages, Number(selectionEnabled) + Number(Boolean(renderExpandedRow)));
128
+ const view = getTableView(table, messages, Number(selectionEnabled) +
129
+ Number(Boolean(renderExpandedRow)) +
130
+ Number(reorderableRows));
116
131
  const totalRows = tableOptions?.manualPagination
117
132
  ? (tableOptions.rowCount ?? null)
118
133
  : table.getRowCount();
@@ -175,6 +190,10 @@ export function useDataTableLogic({ data, columns, getRowId, locale = 'en', mess
175
190
  handlePreviousPage: table.previousPage,
176
191
  handleNextPage: table.nextPage,
177
192
  handleLastPage: table.lastPage,
193
+ handleRowReorder: (activeId, overId) => {
194
+ if (table.state.sorting.length === 0)
195
+ ordered.handler.handleReorder(activeId, overId);
196
+ },
178
197
  },
179
198
  refs: { root: setRoot },
180
199
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useDataTableLogic.js","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useDataTableLogic.ts"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport { useCallback, useEffect, useId, useMemo, useState } from 'react'\nimport { useTable } from '@tanstack/react-table'\nimport type { RowData } from '@tanstack/react-table'\nimport type { MenuItem } from '@rentnerkev/menu'\nimport { rentnerTableFeatures } from '../../../lib/Table/table.ts'\nimport {\n getColumnLabel,\n getTableView,\n prepareTableColumns,\n} from '../../../lib/Table/presentation.ts'\nimport { resolveTableMessages } from '../../../lib/Messages/tableMessages.ts'\nimport type {\n DataTableLogicOptions,\n DataTableLogicResult,\n} from '../Types/dataTable.types.ts'\n\nconst defaultPageSizes = [10, 25, 50, 100] as const\n\nexport function useDataTableLogic<TData extends RowData>({\n data,\n columns,\n getRowId,\n locale = 'en',\n messages: overrides,\n pagination = true,\n pageSize = 10,\n pageSizeOptions = defaultPageSizes,\n selectable = false,\n renderExpandedRow,\n initialShowFilters = false,\n tableOptions,\n portalContainer,\n}: DataTableLogicOptions<TData>): DataTableLogicResult<TData> {\n const id = useId()\n const [showFilters, setShowFilters] = useState(initialShowFilters)\n const [root, setRoot] = useState<HTMLElement | null>(null)\n const messages = useMemo(\n () => resolveTableMessages(locale, overrides),\n [locale, overrides],\n )\n const preparedColumns = useMemo(\n () => prepareTableColumns(columns),\n [columns],\n )\n const manualPagination =\n !pagination || tableOptions?.manualPagination === true\n const table = useTable({\n globalFilterFn: 'text',\n autoResetPageIndex: false,\n ...tableOptions,\n features: rentnerTableFeatures,\n data,\n columns: preparedColumns,\n getRowId,\n enableRowSelection: selectable,\n getRowCanExpand:\n tableOptions?.getRowCanExpand ?? (() => Boolean(renderExpandedRow)),\n manualPagination,\n initialState: {\n ...tableOptions?.initialState,\n pagination: {\n pageIndex: 0,\n pageSize,\n ...tableOptions?.initialState?.pagination,\n },\n },\n })\n const currentPageSize = table.state.pagination.pageSize\n const pageIndex = table.state.pagination.pageIndex\n const pageCount = table.getPageCount()\n const setPageIndex = table.setPageIndex\n const firstPage = table.firstPage\n const {\n sorting,\n columnFilters,\n globalFilter,\n pagination: paginationState,\n } = table.atoms\n const resetOnQueryChange = tableOptions?.autoResetPageIndex !== false\n const resetPageIfNeeded = useCallback(() => {\n if (pagination && paginationState.get().pageIndex > 0) firstPage()\n }, [pagination, paginationState, firstPage])\n useEffect(() => {\n if (!pagination || !resetOnQueryChange) return\n let previousSorting = sorting.get()\n let previousFilters = columnFilters.get()\n let previousSearch = globalFilter.get()\n const handleQueryChange = () => {\n const nextSorting = sorting.get()\n const nextFilters = columnFilters.get()\n const nextSearch = globalFilter.get()\n const sameSorting =\n previousSorting.length === nextSorting.length &&\n previousSorting.every(\n (item, index) =>\n item.id === nextSorting[index]?.id &&\n item.desc === nextSorting[index]?.desc,\n )\n const sameFilters =\n previousFilters.length === nextFilters.length &&\n previousFilters.every(\n (item, index) =>\n item.id === nextFilters[index]?.id &&\n Object.is(item.value, nextFilters[index]?.value),\n )\n const sameSearch = Object.is(previousSearch, nextSearch)\n previousSorting = nextSorting\n previousFilters = nextFilters\n previousSearch = nextSearch\n // Derived atoms can notify on option updates without a query change.\n if (!sameSorting || !sameFilters || !sameSearch) resetPageIfNeeded()\n }\n const subscriptions = [sorting, columnFilters, globalFilter].map(\n (atom) => atom.subscribe(handleQueryChange),\n )\n return () => {\n for (const subscription of subscriptions) subscription.unsubscribe()\n }\n }, [\n pagination,\n resetOnQueryChange,\n sorting,\n columnFilters,\n globalFilter,\n resetPageIfNeeded,\n ])\n useEffect(() => {\n if (!manualPagination && pageIndex > Math.max(0, pageCount - 1))\n setPageIndex(Math.max(0, pageCount - 1))\n }, [manualPagination, pageCount, pageIndex, setPageIndex])\n\n const allColumns = table.getAllLeafColumns()\n const visibleColumns = table.getVisibleLeafColumns()\n const canHideColumns = tableOptions?.enableHiding !== false\n const columnItems = useMemo(\n (): MenuItem[] =>\n allColumns.map((column) => ({\n id: column.id,\n type: 'checkbox',\n label: getColumnLabel(column),\n checked: column.getIsVisible(),\n closeOnSelect: false,\n disabled:\n !canHideColumns ||\n !column.getCanHide() ||\n (column.getIsVisible() && visibleColumns.length === 1),\n onCheckedChange: (checked) => column.toggleVisibility(checked),\n })),\n [allColumns, visibleColumns, canHideColumns],\n )\n const pageSizes = useMemo(\n () =>\n [...new Set([...pageSizeOptions, currentPageSize])]\n .toSorted((left, right) => left - right)\n .map((value) => ({ value, label: String(value) })),\n [pageSizeOptions, currentPageSize],\n )\n\n if (\n !Number.isInteger(currentPageSize) ||\n currentPageSize < 1 ||\n pageSizeOptions.some((size) => !Number.isInteger(size) || size < 1)\n )\n throw new Error('Table page sizes must be positive integers')\n const search =\n typeof table.state.globalFilter === 'string'\n ? table.state.globalFilter\n : ''\n const selectionEnabled = selectable !== false\n const selectedRows = selectionEnabled\n ? table.getFilteredSelectedRowModel().rows\n : []\n const view = getTableView(\n table,\n messages,\n Number(selectionEnabled) + Number(Boolean(renderExpandedRow)),\n )\n const totalRows = tableOptions?.manualPagination\n ? (tableOptions.rowCount ?? null)\n : table.getRowCount()\n const firstRow =\n view.rows.length > 0\n ? (pagination ? pageIndex * currentPageSize : 0) + 1\n : 0\n const lastRow = view.rows.length > 0 ? firstRow + view.rows.length - 1 : 0\n const handleResetFilters = () => {\n table.setGlobalFilter('')\n table.setColumnFilters([])\n resetPageIfNeeded()\n }\n const handleSearch = (value: string) => {\n const previous = globalFilter.get()\n table.setGlobalFilter(value)\n if (resetOnQueryChange && !Object.is(previous, value))\n resetPageIfNeeded()\n }\n const handlePageSize = (value: number) => {\n table.setPageSize(value)\n resetPageIfNeeded()\n }\n return {\n table,\n state: {\n ...view,\n id,\n search,\n showFilters,\n hasFilters:\n search.trim().length > 0 ||\n table.state.columnFilters.length > 0,\n filterCount: table.state.columnFilters.length,\n filterColumns: visibleColumns,\n columnItems,\n selectedRows,\n selectionCount: selectedRows.length,\n selectionEnabled,\n canSelectPage:\n selectionEnabled && view.rows.some((row) => row.getCanSelect()),\n allPageSelected:\n selectionEnabled && table.getIsAllPageRowsSelected(),\n somePageSelected:\n selectionEnabled && table.getIsSomePageRowsSelected(),\n firstRow,\n lastRow:\n totalRows === null ? lastRow : Math.min(lastRow, totalRows),\n totalRows,\n totalPages: pageCount < 0 ? null : Math.max(1, pageCount),\n page: pageIndex + 1,\n pageSize: currentPageSize,\n pageSizes,\n canPreviousPage: table.getCanPreviousPage(),\n canNextPage: table.getCanNextPage(),\n portalContainer:\n portalContainer === undefined ? root : portalContainer,\n },\n handler: {\n handleSearch,\n handleResetFilters,\n handlePageSize,\n handleToggleFilters: () => setShowFilters((current) => !current),\n handleClearSelection: () => table.resetRowSelection(true),\n handleSelectPage: () =>\n table.toggleAllPageRowsSelected(\n !table.getIsAllPageRowsSelected(),\n ),\n handleFirstPage: table.firstPage,\n handlePreviousPage: table.previousPage,\n handleNextPage: table.nextPage,\n handleLastPage: table.lastPage,\n },\n refs: { root: setRoot },\n }\n}\n"]}
1
+ {"version":3,"file":"useDataTableLogic.js","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useDataTableLogic.ts"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport { useCallback, useEffect, useId, useMemo, useState } from 'react'\nimport { useTable } from '@tanstack/react-table'\nimport type { RowData } from '@tanstack/react-table'\nimport type { MenuItem } from '@rentnerkev/menu'\nimport { rentnerTableFeatures } from '../../../lib/Table/table.ts'\nimport {\n getColumnLabel,\n getTableView,\n prepareTableColumns,\n} from '../../../lib/Table/presentation.ts'\nimport { resolveTableMessages } from '../../../lib/Messages/tableMessages.ts'\nimport type {\n DataTableLogicOptions,\n DataTableLogicResult,\n} from '../Types/dataTable.types.ts'\nimport { useTableRowOrder } from './useTableRowOrder.ts'\n\nconst defaultPageSizes = [10, 25, 50, 100] as const\n\nexport function useDataTableLogic<TData extends RowData>({\n data,\n columns,\n getRowId,\n locale = 'en',\n messages: overrides,\n pagination = true,\n pageSize = 10,\n pageSizeOptions = defaultPageSizes,\n selectable = false,\n renderExpandedRow,\n initialShowFilters = false,\n tableOptions,\n portalContainer,\n resizableColumns = false,\n reorderableRows = false,\n onRowOrderChange,\n}: DataTableLogicOptions<TData>): DataTableLogicResult<TData> {\n const id = useId()\n const ordered = useTableRowOrder({\n data,\n getRowId,\n reorderableRows,\n onRowOrderChange,\n })\n const [showFilters, setShowFilters] = useState(initialShowFilters)\n const [root, setRoot] = useState<HTMLElement | null>(null)\n const messages = useMemo(\n () => resolveTableMessages(locale, overrides),\n [locale, overrides],\n )\n const preparedColumns = useMemo(\n () => prepareTableColumns(columns),\n [columns],\n )\n const manualPagination =\n !pagination || tableOptions?.manualPagination === true\n const table = useTable({\n globalFilterFn: 'text',\n autoResetPageIndex: false,\n autoResetExpanded: reorderableRows ? false : undefined,\n columnResizeMode: 'onChange',\n enableColumnResizing: resizableColumns,\n ...tableOptions,\n defaultColumn: resizableColumns\n ? { minSize: 64, maxSize: 2000, ...tableOptions?.defaultColumn }\n : tableOptions?.defaultColumn,\n features: rentnerTableFeatures,\n data: ordered.state.data,\n columns: preparedColumns,\n getRowId,\n enableRowSelection: selectable,\n getRowCanExpand:\n tableOptions?.getRowCanExpand ?? (() => Boolean(renderExpandedRow)),\n manualPagination,\n initialState: {\n ...tableOptions?.initialState,\n pagination: {\n pageIndex: 0,\n pageSize,\n ...tableOptions?.initialState?.pagination,\n },\n },\n })\n const currentPageSize = table.state.pagination.pageSize\n const pageIndex = table.state.pagination.pageIndex\n const pageCount = table.getPageCount()\n const setPageIndex = table.setPageIndex\n const firstPage = table.firstPage\n const {\n sorting,\n columnFilters,\n globalFilter,\n pagination: paginationState,\n } = table.atoms\n const resetOnQueryChange = tableOptions?.autoResetPageIndex !== false\n const resetPageIfNeeded = useCallback(() => {\n if (pagination && paginationState.get().pageIndex > 0) firstPage()\n }, [pagination, paginationState, firstPage])\n useEffect(() => {\n if (!pagination || !resetOnQueryChange) return\n let previousSorting = sorting.get()\n let previousFilters = columnFilters.get()\n let previousSearch = globalFilter.get()\n const handleQueryChange = () => {\n const nextSorting = sorting.get()\n const nextFilters = columnFilters.get()\n const nextSearch = globalFilter.get()\n const sameSorting =\n previousSorting.length === nextSorting.length &&\n previousSorting.every(\n (item, index) =>\n item.id === nextSorting[index]?.id &&\n item.desc === nextSorting[index]?.desc,\n )\n const sameFilters =\n previousFilters.length === nextFilters.length &&\n previousFilters.every(\n (item, index) =>\n item.id === nextFilters[index]?.id &&\n Object.is(item.value, nextFilters[index]?.value),\n )\n const sameSearch = Object.is(previousSearch, nextSearch)\n previousSorting = nextSorting\n previousFilters = nextFilters\n previousSearch = nextSearch\n // Derived atoms can notify on option updates without a query change.\n if (!sameSorting || !sameFilters || !sameSearch) resetPageIfNeeded()\n }\n const subscriptions = [sorting, columnFilters, globalFilter].map(\n (atom) => atom.subscribe(handleQueryChange),\n )\n return () => {\n for (const subscription of subscriptions) subscription.unsubscribe()\n }\n }, [\n pagination,\n resetOnQueryChange,\n sorting,\n columnFilters,\n globalFilter,\n resetPageIfNeeded,\n ])\n useEffect(() => {\n if (!manualPagination && pageIndex > Math.max(0, pageCount - 1))\n setPageIndex(Math.max(0, pageCount - 1))\n }, [manualPagination, pageCount, pageIndex, setPageIndex])\n\n const allColumns = table.getAllLeafColumns()\n const visibleColumns = table.getVisibleLeafColumns()\n const canHideColumns = tableOptions?.enableHiding !== false\n const columnItems = useMemo(\n (): MenuItem[] =>\n allColumns.map((column) => ({\n id: column.id,\n type: 'checkbox',\n label: getColumnLabel(column),\n checked: column.getIsVisible(),\n closeOnSelect: false,\n disabled:\n !canHideColumns ||\n !column.getCanHide() ||\n (column.getIsVisible() && visibleColumns.length === 1),\n onCheckedChange: (checked) => column.toggleVisibility(checked),\n })),\n [allColumns, visibleColumns, canHideColumns],\n )\n const pageSizes = useMemo(\n () =>\n [...new Set([...pageSizeOptions, currentPageSize])]\n .toSorted((left, right) => left - right)\n .map((value) => ({ value, label: String(value) })),\n [pageSizeOptions, currentPageSize],\n )\n\n if (\n !Number.isInteger(currentPageSize) ||\n currentPageSize < 1 ||\n pageSizeOptions.some((size) => !Number.isInteger(size) || size < 1)\n )\n throw new Error('Table page sizes must be positive integers')\n const search =\n typeof table.state.globalFilter === 'string'\n ? table.state.globalFilter\n : ''\n const selectionEnabled = selectable !== false\n const selectedRows = selectionEnabled\n ? table.getFilteredSelectedRowModel().rows\n : []\n const view = getTableView(\n table,\n messages,\n Number(selectionEnabled) +\n Number(Boolean(renderExpandedRow)) +\n Number(reorderableRows),\n )\n const totalRows = tableOptions?.manualPagination\n ? (tableOptions.rowCount ?? null)\n : table.getRowCount()\n const firstRow =\n view.rows.length > 0\n ? (pagination ? pageIndex * currentPageSize : 0) + 1\n : 0\n const lastRow = view.rows.length > 0 ? firstRow + view.rows.length - 1 : 0\n const handleResetFilters = () => {\n table.setGlobalFilter('')\n table.setColumnFilters([])\n resetPageIfNeeded()\n }\n const handleSearch = (value: string) => {\n const previous = globalFilter.get()\n table.setGlobalFilter(value)\n if (resetOnQueryChange && !Object.is(previous, value))\n resetPageIfNeeded()\n }\n const handlePageSize = (value: number) => {\n table.setPageSize(value)\n resetPageIfNeeded()\n }\n return {\n table,\n state: {\n ...view,\n id,\n search,\n showFilters,\n hasFilters:\n search.trim().length > 0 ||\n table.state.columnFilters.length > 0,\n filterCount: table.state.columnFilters.length,\n filterColumns: visibleColumns,\n columnItems,\n selectedRows,\n selectionCount: selectedRows.length,\n selectionEnabled,\n canSelectPage:\n selectionEnabled && view.rows.some((row) => row.getCanSelect()),\n allPageSelected:\n selectionEnabled && table.getIsAllPageRowsSelected(),\n somePageSelected:\n selectionEnabled && table.getIsSomePageRowsSelected(),\n firstRow,\n lastRow:\n totalRows === null ? lastRow : Math.min(lastRow, totalRows),\n totalRows,\n totalPages: pageCount < 0 ? null : Math.max(1, pageCount),\n page: pageIndex + 1,\n pageSize: currentPageSize,\n pageSizes,\n canPreviousPage: table.getCanPreviousPage(),\n canNextPage: table.getCanNextPage(),\n portalContainer:\n portalContainer === undefined ? root : portalContainer,\n },\n handler: {\n handleSearch,\n handleResetFilters,\n handlePageSize,\n handleToggleFilters: () => setShowFilters((current) => !current),\n handleClearSelection: () => table.resetRowSelection(true),\n handleSelectPage: () =>\n table.toggleAllPageRowsSelected(\n !table.getIsAllPageRowsSelected(),\n ),\n handleFirstPage: table.firstPage,\n handlePreviousPage: table.previousPage,\n handleNextPage: table.nextPage,\n handleLastPage: table.lastPage,\n handleRowReorder: (activeId, overId) => {\n if (table.state.sorting.length === 0)\n ordered.handler.handleReorder(activeId, overId)\n },\n },\n refs: { root: setRoot },\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { Ref } from 'react';
2
+ import type { RowData } from '@tanstack/react-table';
3
+ import type { RentnerTableInstance } from '../Types/table.types.ts';
4
+ import type { ColumnResizeLogicResult } from '../Types/interaction.types.ts';
5
+ export declare function useTableColumnResizeLogic<TData extends RowData>(table: RentnerTableInstance<TData>, enabled: boolean, extraWidth: number, forwardedRef?: Ref<HTMLTableElement>): ColumnResizeLogicResult;
6
+ //# sourceMappingURL=useTableColumnResizeLogic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableColumnResizeLogic.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableColumnResizeLogic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAE5E,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,OAAO,EAC3D,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAClC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,GACrC,uBAAuB,CAyCzB"}
@@ -0,0 +1,40 @@
1
+ import { useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
2
+ export function useTableColumnResizeLogic(table, enabled, extraWidth, forwardedRef) {
3
+ const element = useRef(null);
4
+ useImperativeHandle(forwardedRef, () => {
5
+ if (!element.current)
6
+ throw new Error('The table must be mounted before accessing its ref');
7
+ return element.current;
8
+ }, []);
9
+ const [ready, setReady] = useState(false);
10
+ const columns = table.getVisibleLeafColumns();
11
+ useLayoutEffect(() => {
12
+ if (!enabled || ready || !element.current)
13
+ return;
14
+ const measured = {};
15
+ for (const row of element.current.tHead?.rows ?? []) {
16
+ for (const header of row.cells) {
17
+ const id = header.dataset.columnId;
18
+ const column = id ? table.getColumn(id) : undefined;
19
+ if (column && column.columns.length === 0)
20
+ measured[column.id] =
21
+ header.getBoundingClientRect().width || column.getSize();
22
+ }
23
+ }
24
+ table.setColumnSizing((current) => ({ ...measured, ...current }));
25
+ setReady(true);
26
+ }, [enabled, ready, table]);
27
+ const widths = columns.map((column) => ({
28
+ id: column.id,
29
+ width: column.getSize(),
30
+ }));
31
+ return {
32
+ state: {
33
+ fixed: enabled && ready,
34
+ width: widths.reduce((sum, column) => sum + column.width, extraWidth),
35
+ widths,
36
+ },
37
+ refs: { table: element },
38
+ };
39
+ }
40
+ //# sourceMappingURL=useTableColumnResizeLogic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableColumnResizeLogic.js","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableColumnResizeLogic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAM9E,MAAM,UAAU,yBAAyB,CACrC,KAAkC,EAClC,OAAgB,EAChB,UAAkB,EAClB,YAAoC;IAEpC,MAAM,OAAO,GAAG,MAAM,CAA0B,IAAI,CAAC,CAAA;IACrD,mBAAmB,CAAC,YAAY,EAAE,GAAG,EAAE;QACnC,IAAI,CAAC,OAAO,CAAC,OAAO;YAChB,MAAM,IAAI,KAAK,CACX,oDAAoD,CACvD,CAAA;QACL,OAAO,OAAO,CAAC,OAAO,CAAA;IAC1B,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAA;IAC7C,eAAe,CAAC,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAM;QACjD,MAAM,QAAQ,GAA2B,EAAE,CAAA;QAC3C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;YAClD,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAA;gBAClC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBACnD,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;oBACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBACf,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAA;YACpE,CAAC;QACL,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;QACjE,QAAQ,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE;KAC1B,CAAC,CAAC,CAAA;IACH,OAAO;QACH,KAAK,EAAE;YACH,KAAK,EAAE,OAAO,IAAI,KAAK;YACvB,KAAK,EAAE,MAAM,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EACnC,UAAU,CACb;YACD,MAAM;SACT;QACD,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KAC3B,CAAA;AACL,CAAC","sourcesContent":["import { useImperativeHandle, useLayoutEffect, useRef, useState } from 'react'\nimport type { Ref } from 'react'\nimport type { RowData } from '@tanstack/react-table'\nimport type { RentnerTableInstance } from '../Types/table.types.ts'\nimport type { ColumnResizeLogicResult } from '../Types/interaction.types.ts'\n\nexport function useTableColumnResizeLogic<TData extends RowData>(\n table: RentnerTableInstance<TData>,\n enabled: boolean,\n extraWidth: number,\n forwardedRef?: Ref<HTMLTableElement>,\n): ColumnResizeLogicResult {\n const element = useRef<HTMLTableElement | null>(null)\n useImperativeHandle(forwardedRef, () => {\n if (!element.current)\n throw new Error(\n 'The table must be mounted before accessing its ref',\n )\n return element.current\n }, [])\n const [ready, setReady] = useState(false)\n const columns = table.getVisibleLeafColumns()\n useLayoutEffect(() => {\n if (!enabled || ready || !element.current) return\n const measured: Record<string, number> = {}\n for (const row of element.current.tHead?.rows ?? []) {\n for (const header of row.cells) {\n const id = header.dataset.columnId\n const column = id ? table.getColumn(id) : undefined\n if (column && column.columns.length === 0)\n measured[column.id] =\n header.getBoundingClientRect().width || column.getSize()\n }\n }\n table.setColumnSizing((current) => ({ ...measured, ...current }))\n setReady(true)\n }, [enabled, ready, table])\n const widths = columns.map((column) => ({\n id: column.id,\n width: column.getSize(),\n }))\n return {\n state: {\n fixed: enabled && ready,\n width: widths.reduce(\n (sum, column) => sum + column.width,\n extraWidth,\n ),\n widths,\n },\n refs: { table: element },\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import type { CollisionDetection, DragStartEvent, DragEndEvent, Announcements } from '@dnd-kit/core';
2
+ import type { TableReorderProviderProps, TableDragOptions, TableRowPreview } from '../Types/interaction.types.ts';
3
+ export declare function useTableDragLogic({ rows, disabled, disabledReason, getLabel, onReorder, messages, }: TableReorderProviderProps): {
4
+ state: {
5
+ items: string[];
6
+ sensors: import("@dnd-kit/core").SensorDescriptor<import("@dnd-kit/core").SensorOptions>[];
7
+ preview: TableRowPreview | null;
8
+ announcements: Announcements;
9
+ collisionDetection: CollisionDetection;
10
+ dragOptions: TableDragOptions;
11
+ };
12
+ handler: {
13
+ handleStart: (event: DragStartEvent) => void;
14
+ handleEnd: ({ active, over }: DragEndEvent) => void;
15
+ handleCancel: () => void;
16
+ };
17
+ refs: {
18
+ preview: (element: HTMLDivElement | null) => void;
19
+ };
20
+ };
21
+ //# sourceMappingURL=useTableDragLogic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableDragLogic.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableDragLogic.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACR,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,aAAa,EAChB,MAAM,eAAe,CAAA;AAGtB,OAAO,KAAK,EACR,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EAClB,MAAM,+BAA+B,CAAA;AAqDtC,wBAAgB,iBAAiB,CAAC,EAC9B,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,SAAS,EACT,QAAQ,GACX,EAAE,yBAAyB;;;;;;;;;;6BAoBI,cAAc;sCAGL,YAAY;;;;QA4DrC,OAAO,YA/CL,cAAc,GAAG,IAAI;;EAiDtC"}