@navikt/ds-react 8.10.4 → 8.10.6

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 (244) hide show
  1. package/cjs/data/data-grid/index.d.ts +2 -0
  2. package/cjs/data/data-grid/index.js +7 -0
  3. package/cjs/data/data-grid/index.js.map +1 -0
  4. package/cjs/data/data-grid/root/DataGridRoot.context.d.ts +11 -0
  5. package/cjs/data/data-grid/root/DataGridRoot.context.js +11 -0
  6. package/cjs/data/data-grid/root/DataGridRoot.context.js.map +1 -0
  7. package/cjs/data/data-grid/root/DataGridRoot.d.ts +38 -0
  8. package/cjs/data/data-grid/root/DataGridRoot.js +68 -0
  9. package/cjs/data/data-grid/root/DataGridRoot.js.map +1 -0
  10. package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +11 -13
  11. package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
  12. package/cjs/data/drag-and-drop/root/DragAndDrop.context.d.ts +4 -2
  13. package/cjs/data/drag-and-drop/root/DragAndDrop.context.js.map +1 -1
  14. package/cjs/data/drag-and-drop/root/DragAndDropRoot.js +44 -46
  15. package/cjs/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
  16. package/cjs/data/drag-and-drop/types.d.ts +0 -4
  17. package/cjs/data/stories/Data.test-data.d.ts +2 -5
  18. package/cjs/data/stories/Data.test-data.js +30 -39
  19. package/cjs/data/stories/Data.test-data.js.map +1 -1
  20. package/cjs/data/table/base-cell/DataTableBaseCell.d.ts +15 -15
  21. package/cjs/data/table/base-cell/DataTableBaseCell.js +4 -8
  22. package/cjs/data/table/base-cell/DataTableBaseCell.js.map +1 -1
  23. package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +24 -6
  24. package/cjs/data/table/column-header/DataTableColumnHeader.js +22 -27
  25. package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  26. package/cjs/data/table/column-header/useTableColumnResize.d.ts +19 -29
  27. package/cjs/data/table/column-header/useTableColumnResize.js +24 -22
  28. package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -1
  29. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +1 -1
  30. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js +2 -2
  31. package/cjs/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -1
  32. package/cjs/data/table/helpers/collectTableRowEntries.d.ts +9 -7
  33. package/cjs/data/table/helpers/collectTableRowEntries.js +18 -10
  34. package/cjs/data/table/helpers/collectTableRowEntries.js.map +1 -1
  35. package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +13 -11
  36. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +43 -53
  37. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  38. package/cjs/data/table/helpers/selection/getSingleSelectProps.d.ts +9 -8
  39. package/cjs/data/table/helpers/selection/getSingleSelectProps.js +23 -10
  40. package/cjs/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
  41. package/cjs/data/table/helpers/selection/selection.types.d.ts +19 -19
  42. package/cjs/data/table/helpers/selection/selection.utils.d.ts +21 -0
  43. package/cjs/data/table/helpers/selection/selection.utils.js +46 -0
  44. package/cjs/data/table/helpers/selection/selection.utils.js.map +1 -0
  45. package/cjs/data/table/helpers/table-focus.d.ts +0 -3
  46. package/cjs/data/table/helpers/table-focus.js +38 -8
  47. package/cjs/data/table/helpers/table-focus.js.map +1 -1
  48. package/cjs/data/table/hooks/useColumnOptions.d.ts +16 -5
  49. package/cjs/data/table/hooks/useColumnOptions.js +26 -8
  50. package/cjs/data/table/hooks/useColumnOptions.js.map +1 -1
  51. package/cjs/data/table/hooks/useGridCache.js +2 -2
  52. package/cjs/data/table/hooks/useGridCache.js.map +1 -1
  53. package/cjs/data/table/hooks/useTableDetailsPanel.d.ts +10 -13
  54. package/cjs/data/table/hooks/useTableDetailsPanel.js +7 -6
  55. package/cjs/data/table/hooks/useTableDetailsPanel.js.map +1 -1
  56. package/cjs/data/table/hooks/useTableItems.d.ts +31 -17
  57. package/cjs/data/table/hooks/useTableItems.js +10 -20
  58. package/cjs/data/table/hooks/useTableItems.js.map +1 -1
  59. package/cjs/data/table/hooks/useTableKeyboardNav.d.ts +1 -6
  60. package/cjs/data/table/hooks/useTableKeyboardNav.js +6 -5
  61. package/cjs/data/table/hooks/useTableKeyboardNav.js.map +1 -1
  62. package/cjs/data/table/hooks/useTableSelection.d.ts +6 -6
  63. package/cjs/data/table/hooks/useTableSelection.js +13 -13
  64. package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
  65. package/cjs/data/table/hooks/useTableSort.d.ts +2 -2
  66. package/cjs/data/table/hooks/useTableSort.js +4 -5
  67. package/cjs/data/table/hooks/useTableSort.js.map +1 -1
  68. package/cjs/data/table/root/DataTable.types.d.ts +22 -13
  69. package/cjs/data/table/root/DataTableRoot.context.d.ts +13 -7
  70. package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
  71. package/cjs/data/table/root/DataTableRoot.d.ts +49 -72
  72. package/cjs/data/table/root/DataTableRoot.js +56 -72
  73. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  74. package/cjs/data/table/root/DataTableRoot.legacy.d.ts +2 -7
  75. package/cjs/data/table/root/DataTableRoot.legacy.js +17 -3
  76. package/cjs/data/table/root/DataTableRoot.legacy.js.map +1 -1
  77. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js +4 -4
  78. package/cjs/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -1
  79. package/cjs/data/table/tbody/DataTableTbody.js +4 -2
  80. package/cjs/data/table/tbody/DataTableTbody.js.map +1 -1
  81. package/cjs/data/table/tr/DataTableTr.d.ts +5 -3
  82. package/cjs/data/table/tr/DataTableTr.js +36 -23
  83. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  84. package/cjs/table/ColumnHeader.js +2 -1
  85. package/cjs/table/ColumnHeader.js.map +1 -1
  86. package/esm/data/data-grid/index.d.ts +2 -0
  87. package/esm/data/data-grid/index.js +3 -0
  88. package/esm/data/data-grid/index.js.map +1 -0
  89. package/esm/data/data-grid/root/DataGridRoot.context.d.ts +11 -0
  90. package/esm/data/data-grid/root/DataGridRoot.context.js +7 -0
  91. package/esm/data/data-grid/root/DataGridRoot.context.js.map +1 -0
  92. package/esm/data/data-grid/root/DataGridRoot.d.ts +38 -0
  93. package/esm/data/data-grid/root/DataGridRoot.js +32 -0
  94. package/esm/data/data-grid/root/DataGridRoot.js.map +1 -0
  95. package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +11 -13
  96. package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
  97. package/esm/data/drag-and-drop/root/DragAndDrop.context.d.ts +4 -2
  98. package/esm/data/drag-and-drop/root/DragAndDrop.context.js.map +1 -1
  99. package/esm/data/drag-and-drop/root/DragAndDropRoot.js +44 -46
  100. package/esm/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
  101. package/esm/data/drag-and-drop/types.d.ts +0 -4
  102. package/esm/data/stories/Data.test-data.d.ts +2 -5
  103. package/esm/data/stories/Data.test-data.js +30 -39
  104. package/esm/data/stories/Data.test-data.js.map +1 -1
  105. package/esm/data/table/base-cell/DataTableBaseCell.d.ts +15 -15
  106. package/esm/data/table/base-cell/DataTableBaseCell.js +4 -8
  107. package/esm/data/table/base-cell/DataTableBaseCell.js.map +1 -1
  108. package/esm/data/table/column-header/DataTableColumnHeader.d.ts +24 -6
  109. package/esm/data/table/column-header/DataTableColumnHeader.js +23 -28
  110. package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -1
  111. package/esm/data/table/column-header/useTableColumnResize.d.ts +19 -29
  112. package/esm/data/table/column-header/useTableColumnResize.js +24 -22
  113. package/esm/data/table/column-header/useTableColumnResize.js.map +1 -1
  114. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.d.ts +1 -1
  115. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js +2 -2
  116. package/esm/data/table/details-panel-row/DataTableDetailsPanelRow.js.map +1 -1
  117. package/esm/data/table/helpers/collectTableRowEntries.d.ts +9 -7
  118. package/esm/data/table/helpers/collectTableRowEntries.js +18 -10
  119. package/esm/data/table/helpers/collectTableRowEntries.js.map +1 -1
  120. package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +13 -11
  121. package/esm/data/table/helpers/selection/getMultipleSelectProps.js +43 -53
  122. package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  123. package/esm/data/table/helpers/selection/getSingleSelectProps.d.ts +9 -8
  124. package/esm/data/table/helpers/selection/getSingleSelectProps.js +23 -10
  125. package/esm/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
  126. package/esm/data/table/helpers/selection/selection.types.d.ts +19 -19
  127. package/esm/data/table/helpers/selection/selection.utils.d.ts +21 -0
  128. package/esm/data/table/helpers/selection/selection.utils.js +43 -0
  129. package/esm/data/table/helpers/selection/selection.utils.js.map +1 -0
  130. package/esm/data/table/helpers/table-focus.d.ts +0 -3
  131. package/esm/data/table/helpers/table-focus.js +38 -8
  132. package/esm/data/table/helpers/table-focus.js.map +1 -1
  133. package/esm/data/table/hooks/useColumnOptions.d.ts +16 -5
  134. package/esm/data/table/hooks/useColumnOptions.js +26 -8
  135. package/esm/data/table/hooks/useColumnOptions.js.map +1 -1
  136. package/esm/data/table/hooks/useGridCache.js +2 -2
  137. package/esm/data/table/hooks/useGridCache.js.map +1 -1
  138. package/esm/data/table/hooks/useTableDetailsPanel.d.ts +10 -13
  139. package/esm/data/table/hooks/useTableDetailsPanel.js +7 -6
  140. package/esm/data/table/hooks/useTableDetailsPanel.js.map +1 -1
  141. package/esm/data/table/hooks/useTableItems.d.ts +31 -17
  142. package/esm/data/table/hooks/useTableItems.js +11 -18
  143. package/esm/data/table/hooks/useTableItems.js.map +1 -1
  144. package/esm/data/table/hooks/useTableKeyboardNav.d.ts +1 -6
  145. package/esm/data/table/hooks/useTableKeyboardNav.js +7 -6
  146. package/esm/data/table/hooks/useTableKeyboardNav.js.map +1 -1
  147. package/esm/data/table/hooks/useTableSelection.d.ts +6 -6
  148. package/esm/data/table/hooks/useTableSelection.js +13 -13
  149. package/esm/data/table/hooks/useTableSelection.js.map +1 -1
  150. package/esm/data/table/hooks/useTableSort.d.ts +2 -2
  151. package/esm/data/table/hooks/useTableSort.js +4 -5
  152. package/esm/data/table/hooks/useTableSort.js.map +1 -1
  153. package/esm/data/table/root/DataTable.types.d.ts +22 -13
  154. package/esm/data/table/root/DataTableRoot.context.d.ts +13 -7
  155. package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
  156. package/esm/data/table/root/DataTableRoot.d.ts +49 -72
  157. package/esm/data/table/root/DataTableRoot.js +58 -74
  158. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  159. package/esm/data/table/root/DataTableRoot.legacy.d.ts +2 -7
  160. package/esm/data/table/root/DataTableRoot.legacy.js +17 -3
  161. package/esm/data/table/root/DataTableRoot.legacy.js.map +1 -1
  162. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js +4 -4
  163. package/esm/data/table/sub-row-toggle/DataTableSubRowToggle.js.map +1 -1
  164. package/esm/data/table/tbody/DataTableTbody.js +4 -2
  165. package/esm/data/table/tbody/DataTableTbody.js.map +1 -1
  166. package/esm/data/table/tr/DataTableTr.d.ts +5 -3
  167. package/esm/data/table/tr/DataTableTr.js +35 -23
  168. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  169. package/esm/table/ColumnHeader.js +2 -1
  170. package/esm/table/ColumnHeader.js.map +1 -1
  171. package/package.json +8 -7
  172. package/src/data/data-grid/index.ts +3 -0
  173. package/src/data/data-grid/root/DataGridRoot.context.ts +16 -0
  174. package/src/data/data-grid/root/DataGridRoot.tsx +71 -0
  175. package/src/data/drag-and-drop/drag-handler/DragAndDropDragHandler.tsx +11 -17
  176. package/src/data/drag-and-drop/root/DragAndDrop.context.tsx +4 -2
  177. package/src/data/drag-and-drop/root/DragAndDropRoot.tsx +63 -52
  178. package/src/data/drag-and-drop/types.ts +0 -5
  179. package/src/data/stories/Data.test-data.tsx +52 -44
  180. package/src/data/table/agent-component-review.md +175 -0
  181. package/src/data/table/base-cell/DataTableBaseCell.tsx +31 -21
  182. package/src/data/table/column-header/DataTableColumnHeader.tsx +63 -58
  183. package/src/data/table/column-header/useTableColumnResize.ts +55 -71
  184. package/src/data/table/details-panel-row/DataTableDetailsPanelRow.tsx +7 -3
  185. package/src/data/table/helpers/collectTableRowEntries.ts +32 -19
  186. package/src/data/table/helpers/selection/getMultipleSelectProps.ts +65 -85
  187. package/src/data/table/helpers/selection/getSingleSelectProps.ts +35 -17
  188. package/src/data/table/helpers/selection/selection.types.ts +19 -19
  189. package/src/data/table/helpers/selection/selection.utils.test.ts +161 -0
  190. package/src/data/table/helpers/selection/selection.utils.ts +73 -0
  191. package/src/data/table/helpers/table-focus.ts +63 -9
  192. package/src/data/table/hooks/__tests__/useTableItems.test.ts +48 -8
  193. package/src/data/table/hooks/useColumnOptions.ts +48 -14
  194. package/src/data/table/hooks/useGridCache.ts +3 -2
  195. package/src/data/table/hooks/useTableDetailsPanel.tsx +25 -25
  196. package/src/data/table/hooks/useTableItems.ts +51 -42
  197. package/src/data/table/hooks/useTableKeyboardNav.ts +7 -15
  198. package/src/data/table/hooks/useTableSelection.ts +26 -31
  199. package/src/data/table/hooks/useTableSort.ts +10 -9
  200. package/src/data/table/root/DataTable.types.ts +30 -25
  201. package/src/data/table/root/DataTableRoot.context.ts +19 -7
  202. package/src/data/table/root/DataTableRoot.legacy.tsx +22 -14
  203. package/src/data/table/root/DataTableRoot.tsx +271 -320
  204. package/src/data/table/sub-row-toggle/DataTableSubRowToggle.tsx +5 -4
  205. package/src/data/table/tbody/DataTableTbody.tsx +6 -2
  206. package/src/data/table/tr/DataTableTr.tsx +98 -35
  207. package/src/table/ColumnHeader.tsx +2 -1
  208. package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts +0 -22
  209. package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js +0 -35
  210. package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js.map +0 -1
  211. package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.d.ts +0 -27
  212. package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.js +0 -86
  213. package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.js.map +0 -1
  214. package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.d.ts +0 -5
  215. package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.js +0 -6
  216. package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.js.map +0 -1
  217. package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.d.ts +0 -24
  218. package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.js +0 -108
  219. package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.js.map +0 -1
  220. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +0 -46
  221. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js +0 -112
  222. package/cjs/data/table/helpers/selection/SelectionSubtreeHelper.js.map +0 -1
  223. package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts +0 -22
  224. package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js +0 -29
  225. package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js.map +0 -1
  226. package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.d.ts +0 -27
  227. package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.js +0 -50
  228. package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.js.map +0 -1
  229. package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.d.ts +0 -5
  230. package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.js +0 -3
  231. package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.js.map +0 -1
  232. package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.d.ts +0 -24
  233. package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.js +0 -68
  234. package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.js.map +0 -1
  235. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.d.ts +0 -46
  236. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js +0 -109
  237. package/esm/data/table/helpers/selection/SelectionSubtreeHelper.js.map +0 -1
  238. package/src/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.tsx +0 -104
  239. package/src/data/drag-and-drop-old/item/DataDragAndDropItem.tsx +0 -74
  240. package/src/data/drag-and-drop-old/root/DataDragAndDrop.context.tsx +0 -11
  241. package/src/data/drag-and-drop-old/root/DataDragAndDropRoot.tsx +0 -96
  242. package/src/data/table/helpers/selection/SelectionSubtreeHelper.test.ts +0 -66
  243. package/src/data/table/helpers/selection/SelectionSubtreeHelper.ts +0 -162
  244. package/src/data/table/hooks/__tests__/useTableSelection.test.ts +0 -488
@@ -8,35 +8,37 @@ import type {
8
8
  SelectionProps,
9
9
  TableSelection,
10
10
  } from "../helpers/selection/selection.types";
11
+ import type { TableRowEntryId } from "../root/DataTable.types";
12
+ import type { UseTableItemsReturn } from "./useTableItems";
11
13
 
12
- type UseTableSelectionArgs = {
13
- selection?: SelectionProps;
14
- /* Visible rows manage the header checkbox state and render selection cells. */
15
- visibleRowIds: (string | number)[];
16
- /* Direct child ids let selection walk nested rows lazily. */
17
- childRowIdsById?: Map<string | number, (string | number)[]>;
14
+ type UseTableSelectionArgs<T> = {
15
+ selection?: SelectionProps<T>;
16
+ tableItems: UseTableItemsReturn<T>;
18
17
  };
19
18
 
20
19
  type UseTableSelectionReturn = {
21
20
  selection: TableSelection;
22
21
  renderSelection: boolean;
23
- disableRowSelectionOnClick: boolean;
22
+ selectionTrigger: "row" | "control";
24
23
  };
25
24
 
26
- function useTableSelection({
27
- selection = {},
28
- visibleRowIds = [],
29
- childRowIdsById,
30
- }: UseTableSelectionArgs): UseTableSelectionReturn {
25
+ function useTableSelection<T>({
26
+ selection = {
27
+ selectionMode: "none",
28
+ },
29
+ tableItems,
30
+ }: UseTableSelectionArgs<T>): UseTableSelectionReturn {
31
31
  const {
32
- selectionMode = "none",
32
+ selectionMode,
33
33
  defaultSelectedKeys,
34
34
  selectedKeys: selectedKeysProp,
35
35
  onSelectionChange,
36
- disabledSelectionKeys = [],
37
- disableRowSelectionOnClick = false,
36
+ enableRowSelection,
37
+ selectionTrigger = "row",
38
38
  } = selection;
39
39
 
40
+ const { visibleRowIds = [] } = tableItems;
41
+
40
42
  const radioGroupName = useId();
41
43
 
42
44
  const [selectedKeys, setSelectedKeys] = useControllableState<SelectedKeysT>({
@@ -47,17 +49,12 @@ function useTableSelection({
47
49
 
48
50
  const selectedKeysSet = useMemo(() => new Set(selectedKeys), [selectedKeys]);
49
51
 
50
- const disabledKeysSet = useMemo(
51
- () => new Set(disabledSelectionKeys),
52
- [disabledSelectionKeys],
53
- );
54
-
55
52
  const isRowSelected = useCallback(
56
- (rowId: string | number) => selectedKeysSet.has(rowId),
53
+ (rowId: TableRowEntryId) => selectedKeysSet.has(rowId),
57
54
  [selectedKeysSet],
58
55
  );
59
56
 
60
- const baseSelection = { selectedKeys, disabledSelectionKeys, isRowSelected };
57
+ const baseSelection = { selectedKeys, isRowSelected };
61
58
 
62
59
  if (selectionMode === "none") {
63
60
  return {
@@ -66,7 +63,7 @@ function useTableSelection({
66
63
  ...baseSelection,
67
64
  selectedKeys: [],
68
65
  },
69
- disableRowSelectionOnClick,
66
+ selectionTrigger,
70
67
  renderSelection: false,
71
68
  };
72
69
  }
@@ -79,11 +76,11 @@ function useTableSelection({
79
76
  ...getSingleSelectProps({
80
77
  selectedKeysSet,
81
78
  setSelectedKeys,
82
- disabledKeysSet,
83
79
  name: radioGroupName,
80
+ enableRowSelection,
84
81
  }),
85
82
  },
86
- disableRowSelectionOnClick,
83
+ selectionTrigger,
87
84
  renderSelection: visibleRowIds.length !== 0,
88
85
  };
89
86
  }
@@ -96,12 +93,11 @@ function useTableSelection({
96
93
  selectedKeysSet,
97
94
  selectedKeys,
98
95
  setSelectedKeys,
99
- disabledKeysSet,
100
- visibleRowIds,
101
- childRowIdsById,
96
+ enableRowSelection,
97
+ tableItems,
102
98
  }),
103
99
  },
104
- disableRowSelectionOnClick,
100
+ selectionTrigger,
105
101
  renderSelection: visibleRowIds.length !== 0,
106
102
  };
107
103
  }
@@ -113,10 +109,9 @@ const noSelectionState: UseTableSelectionReturn = {
113
109
  selection: {
114
110
  selectionMode: "none",
115
111
  selectedKeys: [],
116
- disabledSelectionKeys: [],
117
112
  isRowSelected: () => false,
118
113
  },
119
- disableRowSelectionOnClick: false,
114
+ selectionTrigger: "row",
120
115
  renderSelection: false,
121
116
  };
122
117
 
@@ -1,4 +1,5 @@
1
1
  import { useCallback } from "react";
2
+ import { consoleWarning } from "../../../utils/helpers/consoleWarning";
2
3
  import { useControllableState } from "../../../utils/hooks";
3
4
  import type { SortChangeDetail, SortEntry } from "../root/DataTable.types";
4
5
 
@@ -40,22 +41,22 @@ type UseTableSortResults = {
40
41
  sortState: SortEntry[];
41
42
  };
42
43
 
43
- function useTableSort(options: TableSortOptions): UseTableSortResults {
44
- const { defaultSort = [], onSortChange, sort: sortOption } = options;
44
+ function useTableSort(options?: TableSortOptions): UseTableSortResults {
45
+ const { defaultSort, onSortChange, sort: sortOption } = options || {};
45
46
 
46
47
  const [sort, setSort] = useControllableState({
47
48
  value: sortOption,
48
- defaultValue: defaultSort,
49
+ defaultValue: defaultSort || [],
49
50
  });
50
51
 
51
52
  const handleSortClick = useCallback(
52
53
  (id: string, event: React.MouseEvent<HTMLElement, MouseEvent>) => {
53
54
  if (id === undefined) {
54
- if (process.env.NODE_ENV === "development") {
55
- console.warn(
56
- `Aksel: Column id is undefined for sort event on target ${event.target}. Make sure your column definitions include an 'id' property.`,
57
- );
58
- }
55
+ consoleWarning(
56
+ "DataTable: Column id is undefined for sort event on target",
57
+ event.target,
58
+ "Make sure your column definitions include an 'id' property.",
59
+ );
59
60
  return;
60
61
  }
61
62
 
@@ -100,4 +101,4 @@ function nextSortEntries(
100
101
  }
101
102
 
102
103
  export { useTableSort };
103
- export type { TableSortOptions };
104
+ export type { TableSortOptions, UseTableSortResults };
@@ -1,4 +1,4 @@
1
- import type { ResizeProps } from "../column-header/useTableColumnResize";
1
+ import type { DataTableColumnHeaderProps } from "../column-header/DataTableColumnHeader";
2
2
 
3
3
  type SortDirection = "asc" | "desc" | "none";
4
4
 
@@ -7,35 +7,24 @@ type SortDirection = "asc" | "desc" | "none";
7
7
  * - Consider "accessorKey" or similar to allow simple column definitions without a cell function.
8
8
  * - Add "align" property for better control over text alignment in cells.
9
9
  */
10
- type ColumnDefinition<T, DetailsT = Record<string, any>> = Pick<
11
- ResizeProps,
12
- | "resizable"
13
- | "width"
14
- | "defaultWidth"
15
- | "autoWidth"
16
- | "minWidth"
17
- | "maxWidth"
18
- | "onWidthChange"
19
- > & {
10
+ type ColumnDefinition<T> = {
20
11
  id: string;
21
12
  /**
22
13
  * Text alignment for cells in this column.
23
14
  *
24
- *
25
15
  * @default "left"
26
16
  */
27
- align?: "left" | "right" | "center";
17
+ align?: "left" | "right" | "center"; // TODO: Pri zero: Use same name as in DataTableColumnHeaderProps (DataTableBaseCellProps) so that we can just Pick<DataTableColumnHeaderProps, "textAlign">
28
18
  /**
29
19
  * Assigned to the cell's `th` element instead of `td` if true.
30
20
  *
31
21
  * Should be used for cells that act as row headers. Each row should have one rowheader, and only have one cell with `isRowHeader: true`,
32
- *
33
- * TODO: Not implemented
34
- * - Add a generic tablecell component that can render either a td or th based on context or this prop.
22
+ * TODO: Better documentation, consider warning if not one column has this set to true.
35
23
  */
36
24
  isRowHeader?: boolean;
37
25
  /**
38
26
  * Renders table header-cell
27
+ * TODO: Pri zero rename to headerCell
39
28
  */
40
29
  header?: React.ReactNode;
41
30
  /**
@@ -44,6 +33,7 @@ type ColumnDefinition<T, DetailsT = Record<string, any>> = Pick<
44
33
  cell: (item: T) => React.ReactNode;
45
34
  /**
46
35
  * Label of header. Renders if header is not provided.
36
+ * TODO: Pri zero consider renaming to header
47
37
  */
48
38
  label: string;
49
39
  /**
@@ -51,16 +41,9 @@ type ColumnDefinition<T, DetailsT = Record<string, any>> = Pick<
51
41
  * Use `sort` and `onSortChange` on the root component to control sort state.
52
42
  */
53
43
  sortable?: boolean;
54
- /**
55
- * Additional metadata that can be used for filtering or other purposes. Not used by the table itself.
56
- */
57
- details?: DetailsT;
58
- };
44
+ } & Pick<DataTableColumnHeaderProps, "width">;
59
45
 
60
- type ColumnDefinitions<T, DetailsT = Record<string, any>> = ColumnDefinition<
61
- T,
62
- DetailsT
63
- >[];
46
+ type ColumnDefinitions<T> = ColumnDefinition<T>[];
64
47
 
65
48
  /**
66
49
  * A single sort entry representing a column's current sort state.
@@ -81,10 +64,32 @@ type SortChangeDetail = {
81
64
  direction: "asc" | "desc" | "none";
82
65
  };
83
66
 
67
+ type DataTableLoadingConfig = {
68
+ isLoading?: boolean;
69
+ } & (
70
+ | {
71
+ variant: "content";
72
+ content: React.ReactNode;
73
+ }
74
+ | {
75
+ variant: "skeleton";
76
+ rows?: number;
77
+ label?: string;
78
+ }
79
+ | {
80
+ variant: "overlay";
81
+ label?: string;
82
+ }
83
+ );
84
+
85
+ type TableRowEntryId = string;
86
+
84
87
  export type {
85
88
  ColumnDefinition,
86
89
  ColumnDefinitions,
90
+ DataTableLoadingConfig,
87
91
  SortDirection,
88
92
  SortEntry,
89
93
  SortChangeDetail,
94
+ TableRowEntryId,
90
95
  };
@@ -1,27 +1,39 @@
1
1
  import { createStrictContext } from "../../../utils/helpers";
2
- import type { UseColumnOptionsResult } from "../hooks/useColumnOptions";
2
+ import type {
3
+ StickyStartState,
4
+ UseColumnOptionsResult,
5
+ } from "../hooks/useColumnOptions";
6
+ import type { UseTableItemsReturn } from "../hooks/useTableItems";
3
7
  import type { UseTableSelectionReturn } from "../hooks/useTableSelection";
8
+ import type { UseTableSortResults } from "../hooks/useTableSort";
9
+ import type {
10
+ DataTableLoadingConfig,
11
+ TableRowEntryId,
12
+ } from "./DataTable.types";
4
13
 
5
14
  type DataTableContextProps<T> = {
6
15
  layout: "fixed" | "auto";
7
16
  withKeyboardNav: boolean;
8
17
  selectionState: UseTableSelectionReturn;
9
- stickySelection: boolean;
18
+ stickyStart: StickyStartState;
10
19
  stickyHeader: boolean;
11
20
  tableId: string;
12
- showLoadingSkeletons: boolean;
21
+ loading: DataTableLoadingConfig | undefined;
13
22
  onRowClick?: (
14
- rowId: string | number,
23
+ rowId: TableRowEntryId,
15
24
  event: React.MouseEvent<HTMLTableRowElement>,
16
25
  ) => void;
17
- isLoading?: boolean;
18
- showLoadingOverlay: boolean;
19
26
  columns: UseColumnOptionsResult<T>["columns"];
20
27
  /**
21
28
  * Used to set exact colspan for detailsPanel, loadingState and emptyState.
22
29
  * This is necessary to ensure that these components span the entire width of the table.
23
30
  */
24
- fullWidthColSpan: number;
31
+ totalColSpan: number;
32
+ /**
33
+ * The current items and related metadata.
34
+ */
35
+ tableItems: UseTableItemsReturn<T>;
36
+ sortingState: UseTableSortResults;
25
37
  };
26
38
 
27
39
  const { Provider: DataTableContextProvider, useContext: useDataTableContext } =
@@ -37,8 +37,7 @@ import {
37
37
  import { DataTableTr, type DataTableTrProps } from "../tr/DataTableTr";
38
38
  import { DataTableContextProvider } from "./DataTableRoot.context";
39
39
 
40
- interface DataTableProps
41
- extends React.HTMLAttributes<HTMLTableElement>, SelectionProps {
40
+ interface DataTableProps extends React.HTMLAttributes<HTMLTableElement> {
42
41
  children: React.ReactNode;
43
42
  /**
44
43
  * Controls vertical cell padding.
@@ -62,12 +61,6 @@ interface DataTableProps
62
61
  * @default false
63
62
  */
64
63
  withKeyboardNav?: boolean;
65
- /**
66
- * Custom callback to determine if navigation should be blocked.
67
- * Called before default blocking logic.
68
- * Requires `withKeyboardNav` to be `true`.
69
- */
70
- shouldBlockNavigation?: (event: KeyboardEvent) => boolean;
71
64
  /**
72
65
  * Controls table layout.
73
66
  *
@@ -83,6 +76,7 @@ interface DataTableProps
83
76
  * @default "fixed"
84
77
  */
85
78
  layout?: "fixed" | "auto";
79
+ selection?: SelectionProps;
86
80
  }
87
81
 
88
82
  interface DataTableRootComponent extends React.ForwardRefExoticComponent<
@@ -212,7 +206,6 @@ const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
212
206
  withKeyboardNav = false,
213
207
  zebraStripes = false,
214
208
  truncateContent = true,
215
- shouldBlockNavigation,
216
209
  layout = "fixed",
217
210
  ...rest
218
211
  },
@@ -220,7 +213,6 @@ const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
220
213
  ) => {
221
214
  const { tabIndex, setTableRef } = useTableKeyboardNav({
222
215
  enabled: withKeyboardNav,
223
- shouldBlockNavigation,
224
216
  });
225
217
 
226
218
  const mergedRef = useMergeRefs(forwardedRef, setTableRef);
@@ -230,14 +222,30 @@ const DataTable = forwardRef<HTMLTableElement, DataTableProps>(
230
222
  layout={layout}
231
223
  withKeyboardNav={withKeyboardNav}
232
224
  selectionState={noSelectionState}
233
- stickySelection={false}
225
+ stickyStart={{
226
+ expansion: false,
227
+ selection: false,
228
+ selectionOffset: 0,
229
+ firstColumnOffset: 0,
230
+ }}
234
231
  stickyHeader={true}
235
232
  tableId={useId()}
236
- showLoadingSkeletons={false}
233
+ loading={undefined}
237
234
  onRowClick={undefined}
238
- showLoadingOverlay={false}
239
235
  columns={[]}
240
- fullWidthColSpan={9999}
236
+ totalColSpan={9999}
237
+ tableItems={{
238
+ childRowIdsById: new Map(),
239
+ visibleRowIds: [],
240
+ itemDetails: new Map(),
241
+ items: [],
242
+ isSubRowExpanded: () => false,
243
+ onExpandedRowIdsChange: () => null,
244
+ }}
245
+ sortingState={{
246
+ onSortClick: () => null,
247
+ sortState: [],
248
+ }}
241
249
  >
242
250
  <DataTableDetailsPanelProvider>
243
251
  <div className="aksel-data-table__border-wrapper">