@rentnerkev/table 0.0.0-stage → 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 (166) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -2
  3. package/dist/index.d.ts +18 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +13 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/Messages/tableMessages.d.ts +4 -0
  8. package/dist/lib/Messages/tableMessages.d.ts.map +1 -0
  9. package/dist/lib/Messages/tableMessages.js +101 -0
  10. package/dist/lib/Messages/tableMessages.js.map +1 -0
  11. package/dist/lib/Table/events.d.ts +2 -0
  12. package/dist/lib/Table/events.d.ts.map +1 -0
  13. package/dist/lib/Table/events.js +5 -0
  14. package/dist/lib/Table/events.js.map +1 -0
  15. package/dist/lib/Table/filters.d.ts +20 -0
  16. package/dist/lib/Table/filters.d.ts.map +1 -0
  17. package/dist/lib/Table/filters.js +102 -0
  18. package/dist/lib/Table/filters.js.map +1 -0
  19. package/dist/lib/Table/presentation.d.ts +7 -0
  20. package/dist/lib/Table/presentation.d.ts.map +1 -0
  21. package/dist/lib/Table/presentation.js +63 -0
  22. package/dist/lib/Table/presentation.js.map +1 -0
  23. package/dist/lib/Table/rowOrder.d.ts +7 -0
  24. package/dist/lib/Table/rowOrder.d.ts.map +1 -0
  25. package/dist/lib/Table/rowOrder.js +26 -0
  26. package/dist/lib/Table/rowOrder.js.map +1 -0
  27. package/dist/lib/Table/table.d.ts +89 -0
  28. package/dist/lib/Table/table.d.ts.map +1 -0
  29. package/dist/lib/Table/table.js +29 -0
  30. package/dist/lib/Table/table.js.map +1 -0
  31. package/dist/shared/Table/Components/DataTable.d.ts +4 -0
  32. package/dist/shared/Table/Components/DataTable.d.ts.map +1 -0
  33. package/dist/shared/Table/Components/DataTable.js +13 -0
  34. package/dist/shared/Table/Components/DataTable.js.map +1 -0
  35. package/dist/shared/Table/Components/DataTablePagination.d.ts +4 -0
  36. package/dist/shared/Table/Components/DataTablePagination.d.ts.map +1 -0
  37. package/dist/shared/Table/Components/DataTablePagination.js +10 -0
  38. package/dist/shared/Table/Components/DataTablePagination.js.map +1 -0
  39. package/dist/shared/Table/Components/DataTableToolbar.d.ts +4 -0
  40. package/dist/shared/Table/Components/DataTableToolbar.d.ts.map +1 -0
  41. package/dist/shared/Table/Components/DataTableToolbar.js +19 -0
  42. package/dist/shared/Table/Components/DataTableToolbar.js.map +1 -0
  43. package/dist/shared/Table/Components/Table.d.ts +4 -0
  44. package/dist/shared/Table/Components/Table.d.ts.map +1 -0
  45. package/dist/shared/Table/Components/Table.js +18 -0
  46. package/dist/shared/Table/Components/Table.js.map +1 -0
  47. package/dist/shared/Table/Components/TableBody.d.ts +4 -0
  48. package/dist/shared/Table/Components/TableBody.d.ts.map +1 -0
  49. package/dist/shared/Table/Components/TableBody.js +8 -0
  50. package/dist/shared/Table/Components/TableBody.js.map +1 -0
  51. package/dist/shared/Table/Components/TableButton.d.ts +3 -0
  52. package/dist/shared/Table/Components/TableButton.d.ts.map +1 -0
  53. package/dist/shared/Table/Components/TableButton.js +5 -0
  54. package/dist/shared/Table/Components/TableButton.js.map +1 -0
  55. package/dist/shared/Table/Components/TableCheckbox.d.ts +3 -0
  56. package/dist/shared/Table/Components/TableCheckbox.d.ts.map +1 -0
  57. package/dist/shared/Table/Components/TableCheckbox.js +8 -0
  58. package/dist/shared/Table/Components/TableCheckbox.js.map +1 -0
  59. package/dist/shared/Table/Components/TableColumnFilter.d.ts +4 -0
  60. package/dist/shared/Table/Components/TableColumnFilter.d.ts.map +1 -0
  61. package/dist/shared/Table/Components/TableColumnFilter.js +23 -0
  62. package/dist/shared/Table/Components/TableColumnFilter.js.map +1 -0
  63. package/dist/shared/Table/Components/TableDataRow.d.ts +4 -0
  64. package/dist/shared/Table/Components/TableDataRow.d.ts.map +1 -0
  65. package/dist/shared/Table/Components/TableDataRow.js +26 -0
  66. package/dist/shared/Table/Components/TableDataRow.js.map +1 -0
  67. package/dist/shared/Table/Components/TableDateRangeFilter.d.ts +3 -0
  68. package/dist/shared/Table/Components/TableDateRangeFilter.d.ts.map +1 -0
  69. package/dist/shared/Table/Components/TableDateRangeFilter.js +15 -0
  70. package/dist/shared/Table/Components/TableDateRangeFilter.js.map +1 -0
  71. package/dist/shared/Table/Components/TableHead.d.ts +4 -0
  72. package/dist/shared/Table/Components/TableHead.d.ts.map +1 -0
  73. package/dist/shared/Table/Components/TableHead.js +17 -0
  74. package/dist/shared/Table/Components/TableHead.js.map +1 -0
  75. package/dist/shared/Table/Components/TableProvider.d.ts +3 -0
  76. package/dist/shared/Table/Components/TableProvider.d.ts.map +1 -0
  77. package/dist/shared/Table/Components/TableProvider.js +9 -0
  78. package/dist/shared/Table/Components/TableProvider.js.map +1 -0
  79. package/dist/shared/Table/Components/TableReorderProvider.d.ts +3 -0
  80. package/dist/shared/Table/Components/TableReorderProvider.d.ts.map +1 -0
  81. package/dist/shared/Table/Components/TableReorderProvider.js +43 -0
  82. package/dist/shared/Table/Components/TableReorderProvider.js.map +1 -0
  83. package/dist/shared/Table/Components/TableResizeHandle.d.ts +4 -0
  84. package/dist/shared/Table/Components/TableResizeHandle.d.ts.map +1 -0
  85. package/dist/shared/Table/Components/TableResizeHandle.js +13 -0
  86. package/dist/shared/Table/Components/TableResizeHandle.js.map +1 -0
  87. package/dist/shared/Table/Components/TableRowActions.d.ts +3 -0
  88. package/dist/shared/Table/Components/TableRowActions.d.ts.map +1 -0
  89. package/dist/shared/Table/Components/TableRowActions.js +9 -0
  90. package/dist/shared/Table/Components/TableRowActions.js.map +1 -0
  91. package/dist/shared/Table/Components/TableStatus.d.ts +3 -0
  92. package/dist/shared/Table/Components/TableStatus.d.ts.map +1 -0
  93. package/dist/shared/Table/Components/TableStatus.js +18 -0
  94. package/dist/shared/Table/Components/TableStatus.js.map +1 -0
  95. package/dist/shared/Table/Components/TableSurface.d.ts +4 -0
  96. package/dist/shared/Table/Components/TableSurface.d.ts.map +1 -0
  97. package/dist/shared/Table/Components/TableSurface.js +19 -0
  98. package/dist/shared/Table/Components/TableSurface.js.map +1 -0
  99. package/dist/shared/Table/Components/TableViewport.d.ts +4 -0
  100. package/dist/shared/Table/Components/TableViewport.d.ts.map +1 -0
  101. package/dist/shared/Table/Components/TableViewport.js +20 -0
  102. package/dist/shared/Table/Components/TableViewport.js.map +1 -0
  103. package/dist/shared/Table/Hooks/useDataTableLogic.d.ts +4 -0
  104. package/dist/shared/Table/Hooks/useDataTableLogic.d.ts.map +1 -0
  105. package/dist/shared/Table/Hooks/useDataTableLogic.js +201 -0
  106. package/dist/shared/Table/Hooks/useDataTableLogic.js.map +1 -0
  107. package/dist/shared/Table/Hooks/useTableCheckboxLogic.d.ts +3 -0
  108. package/dist/shared/Table/Hooks/useTableCheckboxLogic.d.ts.map +1 -0
  109. package/dist/shared/Table/Hooks/useTableCheckboxLogic.js +10 -0
  110. package/dist/shared/Table/Hooks/useTableCheckboxLogic.js.map +1 -0
  111. package/dist/shared/Table/Hooks/useTableColumnResizeLogic.d.ts +6 -0
  112. package/dist/shared/Table/Hooks/useTableColumnResizeLogic.d.ts.map +1 -0
  113. package/dist/shared/Table/Hooks/useTableColumnResizeLogic.js +40 -0
  114. package/dist/shared/Table/Hooks/useTableColumnResizeLogic.js.map +1 -0
  115. package/dist/shared/Table/Hooks/useTableDragLogic.d.ts +21 -0
  116. package/dist/shared/Table/Hooks/useTableDragLogic.d.ts.map +1 -0
  117. package/dist/shared/Table/Hooks/useTableDragLogic.js +110 -0
  118. package/dist/shared/Table/Hooks/useTableDragLogic.js.map +1 -0
  119. package/dist/shared/Table/Hooks/useTableLogic.d.ts +4 -0
  120. package/dist/shared/Table/Hooks/useTableLogic.d.ts.map +1 -0
  121. package/dist/shared/Table/Hooks/useTableLogic.js +26 -0
  122. package/dist/shared/Table/Hooks/useTableLogic.js.map +1 -0
  123. package/dist/shared/Table/Hooks/useTableOverlay.d.ts +3 -0
  124. package/dist/shared/Table/Hooks/useTableOverlay.d.ts.map +1 -0
  125. package/dist/shared/Table/Hooks/useTableOverlay.js +6 -0
  126. package/dist/shared/Table/Hooks/useTableOverlay.js.map +1 -0
  127. package/dist/shared/Table/Hooks/useTableResizeHandleLogic.d.ts +20 -0
  128. package/dist/shared/Table/Hooks/useTableResizeHandleLogic.d.ts.map +1 -0
  129. package/dist/shared/Table/Hooks/useTableResizeHandleLogic.js +52 -0
  130. package/dist/shared/Table/Hooks/useTableResizeHandleLogic.js.map +1 -0
  131. package/dist/shared/Table/Hooks/useTableRowDragContext.d.ts +5 -0
  132. package/dist/shared/Table/Hooks/useTableRowDragContext.d.ts.map +1 -0
  133. package/dist/shared/Table/Hooks/useTableRowDragContext.js +6 -0
  134. package/dist/shared/Table/Hooks/useTableRowDragContext.js.map +1 -0
  135. package/dist/shared/Table/Hooks/useTableRowEventsLogic.d.ts +12 -0
  136. package/dist/shared/Table/Hooks/useTableRowEventsLogic.d.ts.map +1 -0
  137. package/dist/shared/Table/Hooks/useTableRowEventsLogic.js +25 -0
  138. package/dist/shared/Table/Hooks/useTableRowEventsLogic.js.map +1 -0
  139. package/dist/shared/Table/Hooks/useTableRowOrder.d.ts +11 -0
  140. package/dist/shared/Table/Hooks/useTableRowOrder.d.ts.map +1 -0
  141. package/dist/shared/Table/Hooks/useTableRowOrder.js +19 -0
  142. package/dist/shared/Table/Hooks/useTableRowOrder.js.map +1 -0
  143. package/dist/shared/Table/Types/column.types.d.ts +35 -0
  144. package/dist/shared/Table/Types/column.types.d.ts.map +1 -0
  145. package/dist/shared/Table/Types/column.types.js +2 -0
  146. package/dist/shared/Table/Types/column.types.js.map +1 -0
  147. package/dist/shared/Table/Types/dataTable.types.d.ts +210 -0
  148. package/dist/shared/Table/Types/dataTable.types.d.ts.map +1 -0
  149. package/dist/shared/Table/Types/dataTable.types.js +2 -0
  150. package/dist/shared/Table/Types/dataTable.types.js.map +1 -0
  151. package/dist/shared/Table/Types/interaction.types.d.ts +86 -0
  152. package/dist/shared/Table/Types/interaction.types.d.ts.map +1 -0
  153. package/dist/shared/Table/Types/interaction.types.js +2 -0
  154. package/dist/shared/Table/Types/interaction.types.js.map +1 -0
  155. package/dist/shared/Table/Types/table.types.d.ts +80 -0
  156. package/dist/shared/Table/Types/table.types.d.ts.map +1 -0
  157. package/dist/shared/Table/Types/table.types.js +2 -0
  158. package/dist/shared/Table/Types/table.types.js.map +1 -0
  159. package/dist/types.d.ts +6 -0
  160. package/dist/types.d.ts.map +1 -0
  161. package/dist/types.js +2 -0
  162. package/dist/types.js.map +1 -0
  163. package/docs/usage.md +184 -0
  164. package/package.json +113 -5
  165. package/tailwind.css +7 -0
  166. package/theme.css +40 -0
@@ -0,0 +1,201 @@
1
+ 'use client';
2
+ import { useCallback, useEffect, useId, useMemo, useState } from 'react';
3
+ import { useTable } from '@tanstack/react-table';
4
+ import { rentnerTableFeatures } from '../../../lib/Table/table.js';
5
+ import { getColumnLabel, getTableView, prepareTableColumns, } from '../../../lib/Table/presentation.js';
6
+ import { resolveTableMessages } from '../../../lib/Messages/tableMessages.js';
7
+ import { useTableRowOrder } from './useTableRowOrder.js';
8
+ const defaultPageSizes = [10, 25, 50, 100];
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, }) {
10
+ const id = useId();
11
+ const ordered = useTableRowOrder({
12
+ data,
13
+ getRowId,
14
+ reorderableRows,
15
+ onRowOrderChange,
16
+ });
17
+ const [showFilters, setShowFilters] = useState(initialShowFilters);
18
+ const [root, setRoot] = useState(null);
19
+ const messages = useMemo(() => resolveTableMessages(locale, overrides), [locale, overrides]);
20
+ const preparedColumns = useMemo(() => prepareTableColumns(columns), [columns]);
21
+ const manualPagination = !pagination || tableOptions?.manualPagination === true;
22
+ const table = useTable({
23
+ globalFilterFn: 'text',
24
+ autoResetPageIndex: false,
25
+ autoResetExpanded: reorderableRows ? false : undefined,
26
+ columnResizeMode: 'onChange',
27
+ enableColumnResizing: resizableColumns,
28
+ ...tableOptions,
29
+ defaultColumn: resizableColumns
30
+ ? { minSize: 64, maxSize: 2000, ...tableOptions?.defaultColumn }
31
+ : tableOptions?.defaultColumn,
32
+ features: rentnerTableFeatures,
33
+ data: ordered.state.data,
34
+ columns: preparedColumns,
35
+ getRowId,
36
+ enableRowSelection: selectable,
37
+ getRowCanExpand: tableOptions?.getRowCanExpand ?? (() => Boolean(renderExpandedRow)),
38
+ manualPagination,
39
+ initialState: {
40
+ ...tableOptions?.initialState,
41
+ pagination: {
42
+ pageIndex: 0,
43
+ pageSize,
44
+ ...tableOptions?.initialState?.pagination,
45
+ },
46
+ },
47
+ });
48
+ const currentPageSize = table.state.pagination.pageSize;
49
+ const pageIndex = table.state.pagination.pageIndex;
50
+ const pageCount = table.getPageCount();
51
+ const setPageIndex = table.setPageIndex;
52
+ const firstPage = table.firstPage;
53
+ const { sorting, columnFilters, globalFilter, pagination: paginationState, } = table.atoms;
54
+ const resetOnQueryChange = tableOptions?.autoResetPageIndex !== false;
55
+ const resetPageIfNeeded = useCallback(() => {
56
+ if (pagination && paginationState.get().pageIndex > 0)
57
+ firstPage();
58
+ }, [pagination, paginationState, firstPage]);
59
+ useEffect(() => {
60
+ if (!pagination || !resetOnQueryChange)
61
+ return;
62
+ let previousSorting = sorting.get();
63
+ let previousFilters = columnFilters.get();
64
+ let previousSearch = globalFilter.get();
65
+ const handleQueryChange = () => {
66
+ const nextSorting = sorting.get();
67
+ const nextFilters = columnFilters.get();
68
+ const nextSearch = globalFilter.get();
69
+ const sameSorting = previousSorting.length === nextSorting.length &&
70
+ previousSorting.every((item, index) => item.id === nextSorting[index]?.id &&
71
+ item.desc === nextSorting[index]?.desc);
72
+ const sameFilters = previousFilters.length === nextFilters.length &&
73
+ previousFilters.every((item, index) => item.id === nextFilters[index]?.id &&
74
+ Object.is(item.value, nextFilters[index]?.value));
75
+ const sameSearch = Object.is(previousSearch, nextSearch);
76
+ previousSorting = nextSorting;
77
+ previousFilters = nextFilters;
78
+ previousSearch = nextSearch;
79
+ // Derived atoms can notify on option updates without a query change.
80
+ if (!sameSorting || !sameFilters || !sameSearch)
81
+ resetPageIfNeeded();
82
+ };
83
+ const subscriptions = [sorting, columnFilters, globalFilter].map((atom) => atom.subscribe(handleQueryChange));
84
+ return () => {
85
+ for (const subscription of subscriptions)
86
+ subscription.unsubscribe();
87
+ };
88
+ }, [
89
+ pagination,
90
+ resetOnQueryChange,
91
+ sorting,
92
+ columnFilters,
93
+ globalFilter,
94
+ resetPageIfNeeded,
95
+ ]);
96
+ useEffect(() => {
97
+ if (!manualPagination && pageIndex > Math.max(0, pageCount - 1))
98
+ setPageIndex(Math.max(0, pageCount - 1));
99
+ }, [manualPagination, pageCount, pageIndex, setPageIndex]);
100
+ const allColumns = table.getAllLeafColumns();
101
+ const visibleColumns = table.getVisibleLeafColumns();
102
+ const canHideColumns = tableOptions?.enableHiding !== false;
103
+ const columnItems = useMemo(() => allColumns.map((column) => ({
104
+ id: column.id,
105
+ type: 'checkbox',
106
+ label: getColumnLabel(column),
107
+ checked: column.getIsVisible(),
108
+ closeOnSelect: false,
109
+ disabled: !canHideColumns ||
110
+ !column.getCanHide() ||
111
+ (column.getIsVisible() && visibleColumns.length === 1),
112
+ onCheckedChange: (checked) => column.toggleVisibility(checked),
113
+ })), [allColumns, visibleColumns, canHideColumns]);
114
+ const pageSizes = useMemo(() => [...new Set([...pageSizeOptions, currentPageSize])]
115
+ .toSorted((left, right) => left - right)
116
+ .map((value) => ({ value, label: String(value) })), [pageSizeOptions, currentPageSize]);
117
+ if (!Number.isInteger(currentPageSize) ||
118
+ currentPageSize < 1 ||
119
+ pageSizeOptions.some((size) => !Number.isInteger(size) || size < 1))
120
+ throw new Error('Table page sizes must be positive integers');
121
+ const search = typeof table.state.globalFilter === 'string'
122
+ ? table.state.globalFilter
123
+ : '';
124
+ const selectionEnabled = selectable !== false;
125
+ const selectedRows = selectionEnabled
126
+ ? table.getFilteredSelectedRowModel().rows
127
+ : [];
128
+ const view = getTableView(table, messages, Number(selectionEnabled) +
129
+ Number(Boolean(renderExpandedRow)) +
130
+ Number(reorderableRows));
131
+ const totalRows = tableOptions?.manualPagination
132
+ ? (tableOptions.rowCount ?? null)
133
+ : table.getRowCount();
134
+ const firstRow = view.rows.length > 0
135
+ ? (pagination ? pageIndex * currentPageSize : 0) + 1
136
+ : 0;
137
+ const lastRow = view.rows.length > 0 ? firstRow + view.rows.length - 1 : 0;
138
+ const handleResetFilters = () => {
139
+ table.setGlobalFilter('');
140
+ table.setColumnFilters([]);
141
+ resetPageIfNeeded();
142
+ };
143
+ const handleSearch = (value) => {
144
+ const previous = globalFilter.get();
145
+ table.setGlobalFilter(value);
146
+ if (resetOnQueryChange && !Object.is(previous, value))
147
+ resetPageIfNeeded();
148
+ };
149
+ const handlePageSize = (value) => {
150
+ table.setPageSize(value);
151
+ resetPageIfNeeded();
152
+ };
153
+ return {
154
+ table,
155
+ state: {
156
+ ...view,
157
+ id,
158
+ search,
159
+ showFilters,
160
+ hasFilters: search.trim().length > 0 ||
161
+ table.state.columnFilters.length > 0,
162
+ filterCount: table.state.columnFilters.length,
163
+ filterColumns: visibleColumns,
164
+ columnItems,
165
+ selectedRows,
166
+ selectionCount: selectedRows.length,
167
+ selectionEnabled,
168
+ canSelectPage: selectionEnabled && view.rows.some((row) => row.getCanSelect()),
169
+ allPageSelected: selectionEnabled && table.getIsAllPageRowsSelected(),
170
+ somePageSelected: selectionEnabled && table.getIsSomePageRowsSelected(),
171
+ firstRow,
172
+ lastRow: totalRows === null ? lastRow : Math.min(lastRow, totalRows),
173
+ totalRows,
174
+ totalPages: pageCount < 0 ? null : Math.max(1, pageCount),
175
+ page: pageIndex + 1,
176
+ pageSize: currentPageSize,
177
+ pageSizes,
178
+ canPreviousPage: table.getCanPreviousPage(),
179
+ canNextPage: table.getCanNextPage(),
180
+ portalContainer: portalContainer === undefined ? root : portalContainer,
181
+ },
182
+ handler: {
183
+ handleSearch,
184
+ handleResetFilters,
185
+ handlePageSize,
186
+ handleToggleFilters: () => setShowFilters((current) => !current),
187
+ handleClearSelection: () => table.resetRowSelection(true),
188
+ handleSelectPage: () => table.toggleAllPageRowsSelected(!table.getIsAllPageRowsSelected()),
189
+ handleFirstPage: table.firstPage,
190
+ handlePreviousPage: table.previousPage,
191
+ handleNextPage: table.nextPage,
192
+ handleLastPage: table.lastPage,
193
+ handleRowReorder: (activeId, overId) => {
194
+ if (table.state.sorting.length === 0)
195
+ ordered.handler.handleReorder(activeId, overId);
196
+ },
197
+ },
198
+ refs: { root: setRoot },
199
+ };
200
+ }
201
+ //# sourceMappingURL=useDataTableLogic.js.map
@@ -0,0 +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'\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,3 @@
1
+ import type { TableCheckboxLogicResult } from '../Types/dataTable.types.ts';
2
+ export declare function useTableCheckboxLogic(indeterminate: boolean): TableCheckboxLogicResult;
3
+ //# sourceMappingURL=useTableCheckboxLogic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableCheckboxLogic.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableCheckboxLogic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AAE3E,wBAAgB,qBAAqB,CACjC,aAAa,EAAE,OAAO,GACvB,wBAAwB,CAM1B"}
@@ -0,0 +1,10 @@
1
+ import { useEffect, useRef } from 'react';
2
+ export function useTableCheckboxLogic(indeterminate) {
3
+ const input = useRef(null);
4
+ useEffect(() => {
5
+ if (input.current)
6
+ input.current.indeterminate = indeterminate;
7
+ }, [indeterminate]);
8
+ return { refs: { input } };
9
+ }
10
+ //# sourceMappingURL=useTableCheckboxLogic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableCheckboxLogic.js","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableCheckboxLogic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAGzC,MAAM,UAAU,qBAAqB,CACjC,aAAsB;IAEtB,MAAM,KAAK,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAA;IAC5C,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,KAAK,CAAC,OAAO;YAAE,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,aAAa,CAAA;IAClE,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IACnB,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAA;AAC9B,CAAC","sourcesContent":["import { useEffect, useRef } from 'react'\nimport type { TableCheckboxLogicResult } from '../Types/dataTable.types.ts'\n\nexport function useTableCheckboxLogic(\n indeterminate: boolean,\n): TableCheckboxLogicResult {\n const input = useRef<HTMLInputElement>(null)\n useEffect(() => {\n if (input.current) input.current.indeterminate = indeterminate\n }, [indeterminate])\n return { refs: { input } }\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"}
@@ -0,0 +1,110 @@
1
+ import { useCallback, useMemo, useState } from 'react';
2
+ import { closestCenter, pointerWithin, MouseSensor, TouchSensor, KeyboardSensor, useSensor, useSensors, } from '@dnd-kit/core';
3
+ import { sortableKeyboardCoordinates } from '@dnd-kit/sortable';
4
+ import { isTableEventElement } from '../../../lib/Table/events.js';
5
+ const defaultMoveLabel = (label) => `Move ${label}`;
6
+ function snapshotRow(target) {
7
+ if (!isTableEventElement(target))
8
+ return null;
9
+ const source = target.closest('tbody[data-sortable-row]');
10
+ const table = source?.closest('table');
11
+ if (!source || !table)
12
+ return null;
13
+ const viewport = table.parentElement;
14
+ if (!viewport)
15
+ return null;
16
+ const bounds = source.getBoundingClientRect();
17
+ const viewportBounds = viewport.getBoundingClientRect();
18
+ const left = Math.max(bounds.left, viewportBounds.left + viewport.clientLeft);
19
+ const right = Math.min(bounds.right, viewportBounds.left + viewport.clientLeft + viewport.clientWidth);
20
+ const preview = table.ownerDocument.createElement('table');
21
+ preview.className = table.className;
22
+ preview.dataset.size = table.dataset.size;
23
+ preview.dataset.striped = table.dataset.striped;
24
+ preview.style.width = `${bounds.width}px`;
25
+ preview.style.marginLeft = `${bounds.left - left}px`;
26
+ preview.style.tableLayout = 'fixed';
27
+ preview.style.background = 'var(--rentner-surface, #181a1f)';
28
+ const columns = table.ownerDocument.createElement('colgroup');
29
+ for (const cell of source.firstElementChild?.children ?? []) {
30
+ const column = table.ownerDocument.createElement('col');
31
+ column.style.width = `${cell.getBoundingClientRect().width}px`;
32
+ columns.appendChild(column);
33
+ }
34
+ const clone = source.ownerDocument.importNode(source, true);
35
+ clone.style.transform = '';
36
+ clone.style.transition = '';
37
+ clone.style.opacity = '1';
38
+ clone.removeAttribute('data-dragging');
39
+ for (const element of [clone, ...clone.querySelectorAll('[id], [name]')]) {
40
+ element.removeAttribute('id');
41
+ element.removeAttribute('name');
42
+ }
43
+ preview.append(columns, clone);
44
+ return { element: preview, left, width: Math.max(0, right - left) };
45
+ }
46
+ const detectRow = (args) => args.pointerCoordinates ? pointerWithin(args) : closestCenter(args);
47
+ export function useTableDragLogic({ rows, disabled, disabledReason, getLabel, onReorder, messages, }) {
48
+ const dragOptions = useMemo(() => ({
49
+ disabled,
50
+ reason: disabledReason,
51
+ moveRow: messages.moveRow ?? defaultMoveLabel,
52
+ }), [disabled, disabledReason, messages.moveRow]);
53
+ const [preview, setPreview] = useState(null);
54
+ const items = useMemo(() => rows.map((row) => row.id), [rows]);
55
+ const sensors = useSensors(useSensor(MouseSensor, { activationConstraint: { distance: 6 } }), useSensor(TouchSensor, {
56
+ activationConstraint: { delay: 180, tolerance: 8 },
57
+ }), useSensor(KeyboardSensor, {
58
+ coordinateGetter: sortableKeyboardCoordinates,
59
+ }));
60
+ const handleStart = (event) => {
61
+ if (!disabled)
62
+ setPreview(snapshotRow(event.activatorEvent.target));
63
+ };
64
+ const handleEnd = ({ active, over }) => {
65
+ setPreview(null);
66
+ if (!disabled &&
67
+ typeof active.id === 'string' &&
68
+ typeof over?.id === 'string' &&
69
+ items.includes(active.id) &&
70
+ items.includes(over.id) &&
71
+ active.id !== over.id)
72
+ onReorder?.(active.id, over.id);
73
+ };
74
+ const previewRef = useCallback((element) => {
75
+ if (element)
76
+ element.replaceChildren(...(preview ? [preview.element] : []));
77
+ }, [preview]);
78
+ const announcements = {
79
+ onDragStart: ({ active }) => messages.dragStart?.(getLabel(String(active.id))) ??
80
+ `Moving ${getLabel(String(active.id))}.`,
81
+ onDragOver: ({ active, over }) => over
82
+ ? (messages.dragOver?.(getLabel(String(active.id)), items.indexOf(String(over.id)) + 1, items.length) ??
83
+ `Position ${items.indexOf(String(over.id)) + 1} of ${items.length}.`)
84
+ : undefined,
85
+ onDragEnd: ({ active, over }) => over
86
+ ? (messages.dragEnd?.(getLabel(String(active.id)), items.indexOf(String(over.id)) + 1, items.length) ??
87
+ `Moved to position ${items.indexOf(String(over.id)) + 1}.`)
88
+ : (messages.dragCancel?.(getLabel(String(active.id))) ??
89
+ 'Move cancelled.'),
90
+ onDragCancel: ({ active }) => messages.dragCancel?.(getLabel(String(active.id))) ??
91
+ 'Move cancelled.',
92
+ };
93
+ return {
94
+ state: {
95
+ items,
96
+ sensors,
97
+ preview,
98
+ announcements,
99
+ collisionDetection: detectRow,
100
+ dragOptions,
101
+ },
102
+ handler: {
103
+ handleStart,
104
+ handleEnd,
105
+ handleCancel: () => setPreview(null),
106
+ },
107
+ refs: { preview: previewRef },
108
+ };
109
+ }
110
+ //# sourceMappingURL=useTableDragLogic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableDragLogic.js","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableDragLogic.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from 'react'\nimport {\n closestCenter,\n pointerWithin,\n MouseSensor,\n TouchSensor,\n KeyboardSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core'\nimport type {\n CollisionDetection,\n DragStartEvent,\n DragEndEvent,\n Announcements,\n} from '@dnd-kit/core'\nimport { sortableKeyboardCoordinates } from '@dnd-kit/sortable'\nimport { isTableEventElement } from '../../../lib/Table/events.ts'\nimport type {\n TableReorderProviderProps,\n TableDragOptions,\n TableRowPreview,\n} from '../Types/interaction.types.ts'\n\nconst defaultMoveLabel = (label: string) => `Move ${label}`\n\nfunction snapshotRow(target: EventTarget | null): TableRowPreview | null {\n if (!isTableEventElement(target)) return null\n const source = target.closest<HTMLTableSectionElement>(\n 'tbody[data-sortable-row]',\n )\n const table = source?.closest('table')\n if (!source || !table) return null\n const viewport = table.parentElement\n if (!viewport) return null\n const bounds = source.getBoundingClientRect()\n const viewportBounds = viewport.getBoundingClientRect()\n const left = Math.max(\n bounds.left,\n viewportBounds.left + viewport.clientLeft,\n )\n const right = Math.min(\n bounds.right,\n viewportBounds.left + viewport.clientLeft + viewport.clientWidth,\n )\n const preview = table.ownerDocument.createElement('table')\n preview.className = table.className\n preview.dataset.size = table.dataset.size\n preview.dataset.striped = table.dataset.striped\n preview.style.width = `${bounds.width}px`\n preview.style.marginLeft = `${bounds.left - left}px`\n preview.style.tableLayout = 'fixed'\n preview.style.background = 'var(--rentner-surface, #181a1f)'\n const columns = table.ownerDocument.createElement('colgroup')\n for (const cell of source.firstElementChild?.children ?? []) {\n const column = table.ownerDocument.createElement('col')\n column.style.width = `${cell.getBoundingClientRect().width}px`\n columns.appendChild(column)\n }\n const clone = source.ownerDocument.importNode(source, true)\n clone.style.transform = ''\n clone.style.transition = ''\n clone.style.opacity = '1'\n clone.removeAttribute('data-dragging')\n for (const element of [clone, ...clone.querySelectorAll('[id], [name]')]) {\n element.removeAttribute('id')\n element.removeAttribute('name')\n }\n preview.append(columns, clone)\n return { element: preview, left, width: Math.max(0, right - left) }\n}\n\nconst detectRow: CollisionDetection = (args) =>\n args.pointerCoordinates ? pointerWithin(args) : closestCenter(args)\n\nexport function useTableDragLogic({\n rows,\n disabled,\n disabledReason,\n getLabel,\n onReorder,\n messages,\n}: TableReorderProviderProps) {\n const dragOptions = useMemo(\n (): TableDragOptions => ({\n disabled,\n reason: disabledReason,\n moveRow: messages.moveRow ?? defaultMoveLabel,\n }),\n [disabled, disabledReason, messages.moveRow],\n )\n const [preview, setPreview] = useState<TableRowPreview | null>(null)\n const items = useMemo(() => rows.map((row) => row.id), [rows])\n const sensors = useSensors(\n useSensor(MouseSensor, { activationConstraint: { distance: 6 } }),\n useSensor(TouchSensor, {\n activationConstraint: { delay: 180, tolerance: 8 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n )\n const handleStart = (event: DragStartEvent) => {\n if (!disabled) setPreview(snapshotRow(event.activatorEvent.target))\n }\n const handleEnd = ({ active, over }: DragEndEvent) => {\n setPreview(null)\n if (\n !disabled &&\n typeof active.id === 'string' &&\n typeof over?.id === 'string' &&\n items.includes(active.id) &&\n items.includes(over.id) &&\n active.id !== over.id\n )\n onReorder?.(active.id, over.id)\n }\n const previewRef = useCallback(\n (element: HTMLDivElement | null) => {\n if (element)\n element.replaceChildren(...(preview ? [preview.element] : []))\n },\n [preview],\n )\n const announcements: Announcements = {\n onDragStart: ({ active }) =>\n messages.dragStart?.(getLabel(String(active.id))) ??\n `Moving ${getLabel(String(active.id))}.`,\n onDragOver: ({ active, over }) =>\n over\n ? (messages.dragOver?.(\n getLabel(String(active.id)),\n items.indexOf(String(over.id)) + 1,\n items.length,\n ) ??\n `Position ${items.indexOf(String(over.id)) + 1} of ${items.length}.`)\n : undefined,\n onDragEnd: ({ active, over }) =>\n over\n ? (messages.dragEnd?.(\n getLabel(String(active.id)),\n items.indexOf(String(over.id)) + 1,\n items.length,\n ) ??\n `Moved to position ${items.indexOf(String(over.id)) + 1}.`)\n : (messages.dragCancel?.(getLabel(String(active.id))) ??\n 'Move cancelled.'),\n onDragCancel: ({ active }) =>\n messages.dragCancel?.(getLabel(String(active.id))) ??\n 'Move cancelled.',\n }\n return {\n state: {\n items,\n sensors,\n preview,\n announcements,\n collisionDetection: detectRow,\n dragOptions,\n },\n handler: {\n handleStart,\n handleEnd,\n handleCancel: () => setPreview(null),\n },\n refs: { preview: previewRef },\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { TableLogicOptions, TableLogicResult } from '../Types/table.types.ts';
3
+ export declare function useTableLogic<TData extends RowData>({ data, columns, getRowId, enableSorting, initialSorting, locale, messages, resizableColumns, }: TableLogicOptions<TData>): TableLogicResult<TData>;
4
+ //# sourceMappingURL=useTableLogic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableLogic.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableLogic.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAIpD,OAAO,KAAK,EACR,iBAAiB,EACjB,gBAAgB,EACnB,MAAM,yBAAyB,CAAA;AAEhC,wBAAgB,aAAa,CAAC,KAAK,SAAS,OAAO,EAAE,EACjD,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,aAAoB,EACpB,cAAc,EACd,MAAa,EACb,QAAQ,EACR,gBAAwB,GAC3B,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAmBpD"}
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { useTable } from '@tanstack/react-table';
3
+ import { rentnerTableFeatures } from '../../../lib/Table/table.js';
4
+ import { getTableView } from '../../../lib/Table/presentation.js';
5
+ import { resolveTableMessages } from '../../../lib/Messages/tableMessages.js';
6
+ export function useTableLogic({ data, columns, getRowId, enableSorting = true, initialSorting, locale = 'en', messages, resizableColumns = false, }) {
7
+ const table = useTable({
8
+ features: rentnerTableFeatures,
9
+ data,
10
+ columns,
11
+ getRowId,
12
+ enableSorting,
13
+ enableColumnResizing: resizableColumns,
14
+ columnResizeMode: 'onChange',
15
+ defaultColumn: resizableColumns
16
+ ? { minSize: 64, maxSize: 2000 }
17
+ : undefined,
18
+ manualPagination: true,
19
+ initialState: { sorting: initialSorting ?? [] },
20
+ });
21
+ return {
22
+ table,
23
+ state: getTableView(table, resolveTableMessages(locale, messages)),
24
+ };
25
+ }
26
+ //# sourceMappingURL=useTableLogic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableLogic.js","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableLogic.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAA;AAM7E,MAAM,UAAU,aAAa,CAAwB,EACjD,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,cAAc,EACd,MAAM,GAAG,IAAI,EACb,QAAQ,EACR,gBAAgB,GAAG,KAAK,GACD;IACvB,MAAM,KAAK,GAAG,QAAQ,CAAC;QACnB,QAAQ,EAAE,oBAAoB;QAC9B,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,aAAa;QACb,oBAAoB,EAAE,gBAAgB;QACtC,gBAAgB,EAAE,UAAU;QAC5B,aAAa,EAAE,gBAAgB;YAC3B,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YAChC,CAAC,CAAC,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,YAAY,EAAE,EAAE,OAAO,EAAE,cAAc,IAAI,EAAE,EAAE;KAClD,CAAC,CAAA;IACF,OAAO;QACH,KAAK;QACL,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;KACrE,CAAA;AACL,CAAC","sourcesContent":["'use client'\n\nimport { useTable } from '@tanstack/react-table'\nimport type { RowData } from '@tanstack/react-table'\nimport { rentnerTableFeatures } from '../../../lib/Table/table.ts'\nimport { getTableView } from '../../../lib/Table/presentation.ts'\nimport { resolveTableMessages } from '../../../lib/Messages/tableMessages.ts'\nimport type {\n TableLogicOptions,\n TableLogicResult,\n} from '../Types/table.types.ts'\n\nexport function useTableLogic<TData extends RowData>({\n data,\n columns,\n getRowId,\n enableSorting = true,\n initialSorting,\n locale = 'en',\n messages,\n resizableColumns = false,\n}: TableLogicOptions<TData>): TableLogicResult<TData> {\n const table = useTable({\n features: rentnerTableFeatures,\n data,\n columns,\n getRowId,\n enableSorting,\n enableColumnResizing: resizableColumns,\n columnResizeMode: 'onChange',\n defaultColumn: resizableColumns\n ? { minSize: 64, maxSize: 2000 }\n : undefined,\n manualPagination: true,\n initialState: { sorting: initialSorting ?? [] },\n })\n return {\n table,\n state: getTableView(table, resolveTableMessages(locale, messages)),\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const TableOverlayContext: import("react").Context<DocumentFragment | Element | null | undefined>;
2
+ export declare function useTableOverlay(): DocumentFragment | Element | null | undefined;
3
+ //# sourceMappingURL=useTableOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableOverlay.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableOverlay.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,wEAEpB,CAAA;AAEZ,wBAAgB,eAAe,kDAE9B"}
@@ -0,0 +1,6 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const TableOverlayContext = createContext(undefined);
3
+ export function useTableOverlay() {
4
+ return useContext(TableOverlayContext);
5
+ }
6
+ //# sourceMappingURL=useTableOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableOverlay.js","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAE9C,SAAS,CAAC,CAAA;AAEZ,MAAM,UAAU,eAAe;IAC3B,OAAO,UAAU,CAAC,mBAAmB,CAAC,CAAA;AAC1C,CAAC","sourcesContent":["import { createContext, useContext } from 'react'\n\nexport const TableOverlayContext = createContext<\n Element | DocumentFragment | null | undefined\n>(undefined)\n\nexport function useTableOverlay() {\n return useContext(TableOverlayContext)\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import type { KeyboardEvent, MouseEvent, TouchEvent } from 'react';
2
+ import type { RowData } from '@tanstack/react-table';
3
+ import type { TableColumnResizeHandleProps } from '../Types/interaction.types.ts';
4
+ export declare function useTableResizeHandleLogic<TData extends RowData>({ table, header, messages, disabled, }: TableColumnResizeHandleProps<TData>): {
5
+ state: {
6
+ label: string;
7
+ resetLabel: string;
8
+ min: number;
9
+ max: number;
10
+ size: number;
11
+ isResizing: boolean;
12
+ offset: number;
13
+ };
14
+ handler: {
15
+ handleStart: (event: MouseEvent<HTMLElement> | TouchEvent<HTMLElement>) => void;
16
+ handleReset: () => void;
17
+ handleKeyDown: (event: KeyboardEvent<HTMLElement>) => void;
18
+ };
19
+ };
20
+ //# sourceMappingURL=useTableResizeHandleLogic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableResizeHandleLogic.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Hooks/useTableResizeHandleLogic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAEpD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAA;AAEjF,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,OAAO,EAAE,EAC7D,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,GACX,EAAE,4BAA4B,CAAC,KAAK,CAAC;;;;;;;;;;;6BAQvB,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC;;+BAS9B,aAAa,CAAC,WAAW,CAAC;;EA2C3D"}