@navikt/ds-react 8.9.1 → 8.10.1

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 (408) hide show
  1. package/cjs/alert/base-alert/content/BaseAlertContent.js +4 -1
  2. package/cjs/alert/base-alert/content/BaseAlertContent.js.map +1 -1
  3. package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.d.ts +3 -1
  4. package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +38 -19
  5. package/cjs/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
  6. package/cjs/data/drag-and-drop/item/DragAndDropItem.d.ts +3 -2
  7. package/cjs/data/drag-and-drop/item/DragAndDropItem.js +6 -4
  8. package/cjs/data/drag-and-drop/item/DragAndDropItem.js.map +1 -1
  9. package/cjs/data/drag-and-drop/root/DragAndDrop.context.d.ts +2 -2
  10. package/cjs/data/drag-and-drop/root/DragAndDropRoot.d.ts +7 -32
  11. package/cjs/data/drag-and-drop/root/DragAndDropRoot.js +73 -46
  12. package/cjs/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
  13. package/cjs/data/drag-and-drop/types.d.ts +4 -0
  14. package/cjs/data/table/base-cell/DataTableBaseCell.d.ts +46 -0
  15. package/cjs/data/table/base-cell/DataTableBaseCell.js +63 -0
  16. package/cjs/data/table/base-cell/DataTableBaseCell.js.map +1 -0
  17. package/cjs/data/table/column-header/DataTableColumnHeader.d.ts +31 -0
  18. package/cjs/data/table/column-header/DataTableColumnHeader.js +107 -0
  19. package/cjs/data/table/column-header/DataTableColumnHeader.js.map +1 -0
  20. package/cjs/data/table/column-header/useTableColumnResize.js.map +1 -0
  21. package/cjs/data/table/empty-state/DataTableEmptyState.d.ts +6 -2
  22. package/cjs/data/table/empty-state/DataTableEmptyState.js +2 -2
  23. package/cjs/data/table/empty-state/DataTableEmptyState.js.map +1 -1
  24. package/cjs/data/table/helpers/selection/getMultipleSelectProps.d.ts +7 -7
  25. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js +29 -28
  26. package/cjs/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  27. package/cjs/data/table/helpers/selection/getSingleSelectProps.d.ts +5 -3
  28. package/cjs/data/table/helpers/selection/getSingleSelectProps.js +8 -12
  29. package/cjs/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
  30. package/cjs/data/table/helpers/selection/selection.types.d.ts +39 -16
  31. package/cjs/data/table/helpers/table-keyboard.js +3 -0
  32. package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
  33. package/cjs/data/table/hooks/useColumnOptions.d.ts +19 -0
  34. package/cjs/data/table/hooks/useColumnOptions.js +19 -0
  35. package/cjs/data/table/hooks/useColumnOptions.js.map +1 -0
  36. package/cjs/data/table/hooks/useTableExpansion.d.ts +26 -0
  37. package/cjs/data/table/hooks/useTableExpansion.js +68 -0
  38. package/cjs/data/table/hooks/useTableExpansion.js.map +1 -0
  39. package/cjs/data/table/hooks/useTableKeyboardNav.d.ts +2 -1
  40. package/cjs/data/table/hooks/useTableKeyboardNav.js +3 -1
  41. package/cjs/data/table/hooks/useTableKeyboardNav.js.map +1 -1
  42. package/cjs/data/table/hooks/useTableSelection.d.ts +14 -7
  43. package/cjs/data/table/hooks/useTableSelection.js +40 -27
  44. package/cjs/data/table/hooks/useTableSelection.js.map +1 -1
  45. package/cjs/data/table/hooks/useTableSort.d.ts +37 -0
  46. package/cjs/data/table/hooks/useTableSort.js +49 -0
  47. package/cjs/data/table/hooks/useTableSort.js.map +1 -0
  48. package/cjs/data/table/loading-state/DataTableLoadingState.d.ts +6 -2
  49. package/cjs/data/table/loading-state/DataTableLoadingState.js +2 -2
  50. package/cjs/data/table/loading-state/DataTableLoadingState.js.map +1 -1
  51. package/cjs/data/table/root/DataTable.types.d.ts +55 -4
  52. package/cjs/data/table/root/DataTableAuto.d.ts +97 -1
  53. package/cjs/data/table/root/DataTableAuto.js +92 -39
  54. package/cjs/data/table/root/DataTableAuto.js.map +1 -1
  55. package/cjs/data/table/root/DataTableRoot.context.d.ts +22 -1
  56. package/cjs/data/table/root/DataTableRoot.context.js +7 -1
  57. package/cjs/data/table/root/DataTableRoot.context.js.map +1 -1
  58. package/cjs/data/table/root/DataTableRoot.d.ts +0 -6
  59. package/cjs/data/table/root/DataTableRoot.js +5 -4
  60. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  61. package/cjs/data/table/tbody/DataTableTbody.js +7 -1
  62. package/cjs/data/table/tbody/DataTableTbody.js.map +1 -1
  63. package/cjs/data/table/td/DataTableTd.d.ts +3 -23
  64. package/cjs/data/table/td/DataTableTd.js +3 -7
  65. package/cjs/data/table/td/DataTableTd.js.map +1 -1
  66. package/cjs/data/table/tfoot/DataTableTfoot.js +3 -1
  67. package/cjs/data/table/tfoot/DataTableTfoot.js.map +1 -1
  68. package/cjs/data/table/th/DataTableTh.d.ts +3 -48
  69. package/cjs/data/table/th/DataTableTh.js +3 -57
  70. package/cjs/data/table/th/DataTableTh.js.map +1 -1
  71. package/cjs/data/table/thead/DataTableThead.js +2 -2
  72. package/cjs/data/table/thead/DataTableThead.js.map +1 -1
  73. package/cjs/data/table/tr/DataTableTr.d.ts +8 -0
  74. package/cjs/data/table/tr/DataTableTr.js +131 -9
  75. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  76. package/cjs/date/datepicker/hooks/useRangeDatepicker.js +1 -1
  77. package/cjs/date/datepicker/hooks/useRangeDatepicker.js.map +1 -1
  78. package/cjs/date/datepicker/parts/DatePicker.DayButton.js +3 -1
  79. package/cjs/date/datepicker/parts/DatePicker.DayButton.js.map +1 -1
  80. package/cjs/date/datepicker/parts/DatePicker.RDP.d.ts +1 -1
  81. package/cjs/date/datepicker/parts/DatePicker.RDP.js +26 -11
  82. package/cjs/date/datepicker/parts/DatePicker.RDP.js.map +1 -1
  83. package/cjs/date/monthpicker/parts/MonthPicker.Button.js +7 -5
  84. package/cjs/date/monthpicker/parts/MonthPicker.Button.js.map +1 -1
  85. package/cjs/date/monthpicker/parts/MonthPicker.Standalone.d.ts +1 -1
  86. package/cjs/dialog/popup/DialogPopupInternal.js +1 -1
  87. package/cjs/dialog/popup/DialogPopupInternal.js.map +1 -1
  88. package/cjs/form/checkbox/CheckboxGroup.context.d.ts +6 -0
  89. package/cjs/form/checkbox/CheckboxGroup.context.js +6 -0
  90. package/cjs/form/checkbox/CheckboxGroup.context.js.map +1 -0
  91. package/cjs/form/checkbox/CheckboxGroup.d.ts +0 -6
  92. package/cjs/form/checkbox/CheckboxGroup.js +8 -8
  93. package/cjs/form/checkbox/CheckboxGroup.js.map +1 -1
  94. package/cjs/form/checkbox/useCheckbox.js +2 -2
  95. package/cjs/form/checkbox/useCheckbox.js.map +1 -1
  96. package/cjs/form/combobox/ComboboxWrapper.js +1 -3
  97. package/cjs/form/combobox/ComboboxWrapper.js.map +1 -1
  98. package/cjs/form/error-summary/ErrorSummary.js +1 -3
  99. package/cjs/form/error-summary/ErrorSummary.js.map +1 -1
  100. package/cjs/form/fieldset/Fieldset.d.ts +0 -4
  101. package/cjs/form/fieldset/Fieldset.js +3 -3
  102. package/cjs/form/fieldset/Fieldset.js.map +1 -1
  103. package/cjs/form/fieldset/useFieldset.d.ts +5 -3
  104. package/cjs/form/fieldset/useFieldset.js +9 -4
  105. package/cjs/form/fieldset/useFieldset.js.map +1 -1
  106. package/cjs/form/radio/RadioGroup.context.d.ts +8 -0
  107. package/cjs/form/radio/RadioGroup.context.js +6 -0
  108. package/cjs/form/radio/RadioGroup.context.js.map +1 -0
  109. package/cjs/form/radio/RadioGroup.d.ts +0 -8
  110. package/cjs/form/radio/RadioGroup.js +10 -10
  111. package/cjs/form/radio/RadioGroup.js.map +1 -1
  112. package/cjs/form/radio/useRadio.js +2 -2
  113. package/cjs/form/radio/useRadio.js.map +1 -1
  114. package/cjs/form/search/Search.js +1 -3
  115. package/cjs/form/search/Search.js.map +1 -1
  116. package/cjs/inline-message/root/InlineMessage.js +2 -5
  117. package/cjs/inline-message/root/InlineMessage.js.map +1 -1
  118. package/cjs/modal/Modal.js +4 -6
  119. package/cjs/modal/Modal.js.map +1 -1
  120. package/cjs/modal/ModalUtils.js +1 -1
  121. package/cjs/modal/ModalUtils.js.map +1 -1
  122. package/cjs/modal/types.d.ts +1 -0
  123. package/cjs/primitives/box/Box.d.ts +1 -1
  124. package/cjs/process/Process.js +1 -5
  125. package/cjs/process/Process.js.map +1 -1
  126. package/cjs/tabs/useTabs.js +3 -7
  127. package/cjs/tabs/useTabs.js.map +1 -1
  128. package/cjs/timeline/Timeline.js +25 -62
  129. package/cjs/timeline/Timeline.js.map +1 -1
  130. package/cjs/timeline/TimelineRow.js +10 -14
  131. package/cjs/timeline/TimelineRow.js.map +1 -1
  132. package/cjs/timeline/hooks/TimelineKeyboardNavProvider.d.ts +16 -0
  133. package/cjs/timeline/hooks/TimelineKeyboardNavProvider.js +179 -0
  134. package/cjs/timeline/hooks/TimelineKeyboardNavProvider.js.map +1 -0
  135. package/cjs/timeline/hooks/usePeriodContext.d.ts +0 -1
  136. package/cjs/timeline/hooks/usePeriodContext.js +0 -1
  137. package/cjs/timeline/hooks/usePeriodContext.js.map +1 -1
  138. package/cjs/timeline/hooks/useRowContext.d.ts +0 -1
  139. package/cjs/timeline/hooks/useRowContext.js +0 -1
  140. package/cjs/timeline/hooks/useRowContext.js.map +1 -1
  141. package/cjs/timeline/hooks/useTimelineContext.d.ts +0 -4
  142. package/cjs/timeline/hooks/useTimelineContext.js +0 -4
  143. package/cjs/timeline/hooks/useTimelineContext.js.map +1 -1
  144. package/cjs/timeline/period/ClickablePeriod.js +6 -20
  145. package/cjs/timeline/period/ClickablePeriod.js.map +1 -1
  146. package/cjs/timeline/period/NonClickablePeriod.js +1 -1
  147. package/cjs/timeline/period/NonClickablePeriod.js.map +1 -1
  148. package/cjs/timeline/pin/PinInternal.js +9 -10
  149. package/cjs/timeline/pin/PinInternal.js.map +1 -1
  150. package/cjs/toggle-group/useToggleGroup.js +1 -1
  151. package/cjs/toggle-group/useToggleGroup.js.map +1 -1
  152. package/cjs/utils/components/HighlightText/HighlightText.js +1 -4
  153. package/cjs/utils/components/HighlightText/HighlightText.js.map +1 -1
  154. package/cjs/utils/components/dismissablelayer/DismissableLayer.js +1 -1
  155. package/cjs/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
  156. package/cjs/utils/helpers/create-strict-context.js +1 -1
  157. package/cjs/utils/helpers/create-strict-context.js.map +1 -1
  158. package/cjs/utils/hooks/useEventCallback.js +1 -1
  159. package/cjs/utils/hooks/useEventCallback.js.map +1 -1
  160. package/cjs/utils/hooks/useMedia.js +1 -1
  161. package/cjs/utils/hooks/useMedia.js.map +1 -1
  162. package/esm/alert/base-alert/content/BaseAlertContent.js +4 -1
  163. package/esm/alert/base-alert/content/BaseAlertContent.js.map +1 -1
  164. package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.d.ts +3 -1
  165. package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js +38 -19
  166. package/esm/data/drag-and-drop/drag-handler/DragAndDropDragHandler.js.map +1 -1
  167. package/esm/data/drag-and-drop/item/DragAndDropItem.d.ts +3 -2
  168. package/esm/data/drag-and-drop/item/DragAndDropItem.js +6 -4
  169. package/esm/data/drag-and-drop/item/DragAndDropItem.js.map +1 -1
  170. package/esm/data/drag-and-drop/root/DragAndDrop.context.d.ts +2 -2
  171. package/esm/data/drag-and-drop/root/DragAndDropRoot.d.ts +7 -32
  172. package/esm/data/drag-and-drop/root/DragAndDropRoot.js +74 -47
  173. package/esm/data/drag-and-drop/root/DragAndDropRoot.js.map +1 -1
  174. package/esm/data/drag-and-drop/types.d.ts +4 -0
  175. package/esm/data/table/base-cell/DataTableBaseCell.d.ts +46 -0
  176. package/esm/data/table/base-cell/DataTableBaseCell.js +27 -0
  177. package/esm/data/table/base-cell/DataTableBaseCell.js.map +1 -0
  178. package/esm/data/table/column-header/DataTableColumnHeader.d.ts +31 -0
  179. package/esm/data/table/column-header/DataTableColumnHeader.js +71 -0
  180. package/esm/data/table/column-header/DataTableColumnHeader.js.map +1 -0
  181. package/esm/data/table/column-header/useTableColumnResize.js.map +1 -0
  182. package/esm/data/table/empty-state/DataTableEmptyState.d.ts +6 -2
  183. package/esm/data/table/empty-state/DataTableEmptyState.js +2 -2
  184. package/esm/data/table/empty-state/DataTableEmptyState.js.map +1 -1
  185. package/esm/data/table/helpers/selection/getMultipleSelectProps.d.ts +7 -7
  186. package/esm/data/table/helpers/selection/getMultipleSelectProps.js +29 -28
  187. package/esm/data/table/helpers/selection/getMultipleSelectProps.js.map +1 -1
  188. package/esm/data/table/helpers/selection/getSingleSelectProps.d.ts +5 -3
  189. package/esm/data/table/helpers/selection/getSingleSelectProps.js +8 -12
  190. package/esm/data/table/helpers/selection/getSingleSelectProps.js.map +1 -1
  191. package/esm/data/table/helpers/selection/selection.types.d.ts +39 -16
  192. package/esm/data/table/helpers/table-keyboard.js +3 -0
  193. package/esm/data/table/helpers/table-keyboard.js.map +1 -1
  194. package/esm/data/table/hooks/useColumnOptions.d.ts +19 -0
  195. package/esm/data/table/hooks/useColumnOptions.js +17 -0
  196. package/esm/data/table/hooks/useColumnOptions.js.map +1 -0
  197. package/esm/data/table/hooks/useTableExpansion.d.ts +26 -0
  198. package/esm/data/table/hooks/useTableExpansion.js +31 -0
  199. package/esm/data/table/hooks/useTableExpansion.js.map +1 -0
  200. package/esm/data/table/hooks/useTableKeyboardNav.d.ts +2 -1
  201. package/esm/data/table/hooks/useTableKeyboardNav.js +4 -2
  202. package/esm/data/table/hooks/useTableKeyboardNav.js.map +1 -1
  203. package/esm/data/table/hooks/useTableSelection.d.ts +14 -7
  204. package/esm/data/table/hooks/useTableSelection.js +40 -29
  205. package/esm/data/table/hooks/useTableSelection.js.map +1 -1
  206. package/esm/data/table/hooks/useTableSort.d.ts +37 -0
  207. package/esm/data/table/hooks/useTableSort.js +47 -0
  208. package/esm/data/table/hooks/useTableSort.js.map +1 -0
  209. package/esm/data/table/loading-state/DataTableLoadingState.d.ts +6 -2
  210. package/esm/data/table/loading-state/DataTableLoadingState.js +2 -2
  211. package/esm/data/table/loading-state/DataTableLoadingState.js.map +1 -1
  212. package/esm/data/table/root/DataTable.types.d.ts +55 -4
  213. package/esm/data/table/root/DataTableAuto.d.ts +97 -1
  214. package/esm/data/table/root/DataTableAuto.js +94 -41
  215. package/esm/data/table/root/DataTableAuto.js.map +1 -1
  216. package/esm/data/table/root/DataTableRoot.context.d.ts +22 -1
  217. package/esm/data/table/root/DataTableRoot.context.js +5 -1
  218. package/esm/data/table/root/DataTableRoot.context.js.map +1 -1
  219. package/esm/data/table/root/DataTableRoot.d.ts +0 -6
  220. package/esm/data/table/root/DataTableRoot.js +6 -5
  221. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  222. package/esm/data/table/tbody/DataTableTbody.js +8 -2
  223. package/esm/data/table/tbody/DataTableTbody.js.map +1 -1
  224. package/esm/data/table/td/DataTableTd.d.ts +3 -23
  225. package/esm/data/table/td/DataTableTd.js +3 -7
  226. package/esm/data/table/td/DataTableTd.js.map +1 -1
  227. package/esm/data/table/tfoot/DataTableTfoot.js +3 -1
  228. package/esm/data/table/tfoot/DataTableTfoot.js.map +1 -1
  229. package/esm/data/table/th/DataTableTh.d.ts +3 -48
  230. package/esm/data/table/th/DataTableTh.js +4 -58
  231. package/esm/data/table/th/DataTableTh.js.map +1 -1
  232. package/esm/data/table/thead/DataTableThead.js +2 -2
  233. package/esm/data/table/thead/DataTableThead.js.map +1 -1
  234. package/esm/data/table/tr/DataTableTr.d.ts +8 -0
  235. package/esm/data/table/tr/DataTableTr.js +134 -12
  236. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  237. package/esm/date/datepicker/hooks/useRangeDatepicker.js +1 -1
  238. package/esm/date/datepicker/hooks/useRangeDatepicker.js.map +1 -1
  239. package/esm/date/datepicker/parts/DatePicker.DayButton.js +3 -1
  240. package/esm/date/datepicker/parts/DatePicker.DayButton.js.map +1 -1
  241. package/esm/date/datepicker/parts/DatePicker.RDP.d.ts +1 -1
  242. package/esm/date/datepicker/parts/DatePicker.RDP.js +27 -12
  243. package/esm/date/datepicker/parts/DatePicker.RDP.js.map +1 -1
  244. package/esm/date/monthpicker/parts/MonthPicker.Button.js +7 -5
  245. package/esm/date/monthpicker/parts/MonthPicker.Button.js.map +1 -1
  246. package/esm/date/monthpicker/parts/MonthPicker.Standalone.d.ts +1 -1
  247. package/esm/dialog/popup/DialogPopupInternal.js +1 -1
  248. package/esm/dialog/popup/DialogPopupInternal.js.map +1 -1
  249. package/esm/form/checkbox/CheckboxGroup.context.d.ts +6 -0
  250. package/esm/form/checkbox/CheckboxGroup.context.js +3 -0
  251. package/esm/form/checkbox/CheckboxGroup.context.js.map +1 -0
  252. package/esm/form/checkbox/CheckboxGroup.d.ts +0 -6
  253. package/esm/form/checkbox/CheckboxGroup.js +8 -8
  254. package/esm/form/checkbox/CheckboxGroup.js.map +1 -1
  255. package/esm/form/checkbox/useCheckbox.js +1 -1
  256. package/esm/form/checkbox/useCheckbox.js.map +1 -1
  257. package/esm/form/combobox/ComboboxWrapper.js +1 -3
  258. package/esm/form/combobox/ComboboxWrapper.js.map +1 -1
  259. package/esm/form/error-summary/ErrorSummary.js +1 -3
  260. package/esm/form/error-summary/ErrorSummary.js.map +1 -1
  261. package/esm/form/fieldset/Fieldset.d.ts +0 -4
  262. package/esm/form/fieldset/Fieldset.js +3 -3
  263. package/esm/form/fieldset/Fieldset.js.map +1 -1
  264. package/esm/form/fieldset/useFieldset.d.ts +5 -3
  265. package/esm/form/fieldset/useFieldset.js +10 -5
  266. package/esm/form/fieldset/useFieldset.js.map +1 -1
  267. package/esm/form/radio/RadioGroup.context.d.ts +8 -0
  268. package/esm/form/radio/RadioGroup.context.js +3 -0
  269. package/esm/form/radio/RadioGroup.context.js.map +1 -0
  270. package/esm/form/radio/RadioGroup.d.ts +0 -8
  271. package/esm/form/radio/RadioGroup.js +9 -9
  272. package/esm/form/radio/RadioGroup.js.map +1 -1
  273. package/esm/form/radio/useRadio.js +1 -1
  274. package/esm/form/radio/useRadio.js.map +1 -1
  275. package/esm/form/search/Search.js +1 -3
  276. package/esm/form/search/Search.js.map +1 -1
  277. package/esm/inline-message/root/InlineMessage.js +2 -5
  278. package/esm/inline-message/root/InlineMessage.js.map +1 -1
  279. package/esm/modal/Modal.js +4 -6
  280. package/esm/modal/Modal.js.map +1 -1
  281. package/esm/modal/ModalUtils.js +1 -1
  282. package/esm/modal/ModalUtils.js.map +1 -1
  283. package/esm/modal/types.d.ts +1 -0
  284. package/esm/primitives/box/Box.d.ts +1 -1
  285. package/esm/process/Process.js +1 -5
  286. package/esm/process/Process.js.map +1 -1
  287. package/esm/tabs/useTabs.js +3 -7
  288. package/esm/tabs/useTabs.js.map +1 -1
  289. package/esm/timeline/Timeline.js +26 -63
  290. package/esm/timeline/Timeline.js.map +1 -1
  291. package/esm/timeline/TimelineRow.js +10 -14
  292. package/esm/timeline/TimelineRow.js.map +1 -1
  293. package/esm/timeline/hooks/TimelineKeyboardNavProvider.d.ts +16 -0
  294. package/esm/timeline/hooks/TimelineKeyboardNavProvider.js +141 -0
  295. package/esm/timeline/hooks/TimelineKeyboardNavProvider.js.map +1 -0
  296. package/esm/timeline/hooks/usePeriodContext.d.ts +0 -1
  297. package/esm/timeline/hooks/usePeriodContext.js +0 -1
  298. package/esm/timeline/hooks/usePeriodContext.js.map +1 -1
  299. package/esm/timeline/hooks/useRowContext.d.ts +0 -1
  300. package/esm/timeline/hooks/useRowContext.js +0 -1
  301. package/esm/timeline/hooks/useRowContext.js.map +1 -1
  302. package/esm/timeline/hooks/useTimelineContext.d.ts +0 -4
  303. package/esm/timeline/hooks/useTimelineContext.js +0 -4
  304. package/esm/timeline/hooks/useTimelineContext.js.map +1 -1
  305. package/esm/timeline/period/ClickablePeriod.js +7 -21
  306. package/esm/timeline/period/ClickablePeriod.js.map +1 -1
  307. package/esm/timeline/period/NonClickablePeriod.js +1 -1
  308. package/esm/timeline/period/NonClickablePeriod.js.map +1 -1
  309. package/esm/timeline/pin/PinInternal.js +10 -11
  310. package/esm/timeline/pin/PinInternal.js.map +1 -1
  311. package/esm/toggle-group/useToggleGroup.js +1 -1
  312. package/esm/toggle-group/useToggleGroup.js.map +1 -1
  313. package/esm/utils/components/HighlightText/HighlightText.js +1 -4
  314. package/esm/utils/components/HighlightText/HighlightText.js.map +1 -1
  315. package/esm/utils/components/dismissablelayer/DismissableLayer.js +1 -1
  316. package/esm/utils/components/dismissablelayer/DismissableLayer.js.map +1 -1
  317. package/esm/utils/helpers/create-strict-context.js +1 -1
  318. package/esm/utils/helpers/create-strict-context.js.map +1 -1
  319. package/esm/utils/hooks/useEventCallback.js +1 -1
  320. package/esm/utils/hooks/useEventCallback.js.map +1 -1
  321. package/esm/utils/hooks/useMedia.js +1 -1
  322. package/esm/utils/hooks/useMedia.js.map +1 -1
  323. package/package.json +9 -7
  324. package/src/alert/base-alert/content/BaseAlertContent.tsx +7 -2
  325. package/src/data/drag-and-drop/drag-handler/DragAndDropDragHandler.tsx +69 -29
  326. package/src/data/drag-and-drop/item/DragAndDropItem.tsx +16 -10
  327. package/src/data/drag-and-drop/root/DragAndDrop.context.tsx +2 -2
  328. package/src/data/drag-and-drop/root/DragAndDropRoot.tsx +291 -246
  329. package/src/data/drag-and-drop/types.ts +5 -0
  330. package/src/data/table/base-cell/DataTableBaseCell.tsx +92 -0
  331. package/src/data/table/column-header/DataTableColumnHeader.tsx +180 -0
  332. package/src/data/table/empty-state/DataTableEmptyState.tsx +5 -3
  333. package/src/data/table/helpers/selection/getMultipleSelectProps.ts +47 -43
  334. package/src/data/table/helpers/selection/getSingleSelectProps.ts +13 -14
  335. package/src/data/table/helpers/selection/selection.types.ts +41 -16
  336. package/src/data/table/helpers/table-keyboard.ts +4 -0
  337. package/src/data/table/hooks/__tests__/useTableSelection.test.ts +93 -56
  338. package/src/data/table/hooks/useColumnOptions.ts +48 -0
  339. package/src/data/table/hooks/useTableExpansion.tsx +100 -0
  340. package/src/data/table/hooks/useTableKeyboardNav.ts +7 -5
  341. package/src/data/table/hooks/useTableSelection.ts +77 -46
  342. package/src/data/table/hooks/useTableSort.ts +103 -0
  343. package/src/data/table/loading-state/DataTableLoadingState.tsx +5 -3
  344. package/src/data/table/root/DataTable.types.ts +64 -5
  345. package/src/data/table/root/DataTableAuto.tsx +382 -104
  346. package/src/data/table/root/DataTableRoot.context.ts +30 -1
  347. package/src/data/table/root/DataTableRoot.tsx +14 -11
  348. package/src/data/table/tbody/DataTableTbody.tsx +17 -6
  349. package/src/data/table/td/DataTableTd.tsx +11 -47
  350. package/src/data/table/tfoot/DataTableTfoot.tsx +10 -7
  351. package/src/data/table/th/DataTableTh.tsx +11 -183
  352. package/src/data/table/thead/DataTableThead.tsx +3 -3
  353. package/src/data/table/tr/DataTableTr.tsx +300 -11
  354. package/src/date/datepicker/hooks/useRangeDatepicker.tsx +1 -1
  355. package/src/date/datepicker/parts/DatePicker.DayButton.tsx +2 -1
  356. package/src/date/datepicker/parts/DatePicker.RDP.tsx +34 -15
  357. package/src/date/monthpicker/parts/MonthPicker.Button.tsx +11 -9
  358. package/src/date/monthpicker/parts/MonthPicker.Standalone.tsx +1 -1
  359. package/src/dialog/popup/DialogPopupInternal.tsx +1 -1
  360. package/src/form/checkbox/CheckboxGroup.context.ts +10 -0
  361. package/src/form/checkbox/CheckboxGroup.tsx +18 -28
  362. package/src/form/checkbox/useCheckbox.ts +1 -1
  363. package/src/form/fieldset/Fieldset.tsx +4 -8
  364. package/src/form/fieldset/useFieldset.ts +13 -6
  365. package/src/form/radio/RadioGroup.context.ts +13 -0
  366. package/src/form/radio/RadioGroup.tsx +22 -31
  367. package/src/form/radio/useRadio.ts +1 -1
  368. package/src/inline-message/root/InlineMessage.tsx +3 -13
  369. package/src/modal/Modal.tsx +12 -6
  370. package/src/modal/ModalUtils.ts +1 -1
  371. package/src/modal/types.ts +1 -0
  372. package/src/primitives/box/Box.tsx +1 -1
  373. package/src/tabs/useTabs.ts +3 -7
  374. package/src/timeline/Timeline.tsx +62 -91
  375. package/src/timeline/TimelineRow.tsx +19 -17
  376. package/src/timeline/hooks/TimelineKeyboardNavProvider.tsx +237 -0
  377. package/src/timeline/hooks/usePeriodContext.tsx +0 -2
  378. package/src/timeline/hooks/useRowContext.tsx +0 -2
  379. package/src/timeline/hooks/useTimelineContext.tsx +0 -8
  380. package/src/timeline/period/ClickablePeriod.tsx +8 -19
  381. package/src/timeline/period/NonClickablePeriod.tsx +2 -0
  382. package/src/timeline/pin/PinInternal.tsx +10 -13
  383. package/src/toggle-group/useToggleGroup.ts +1 -1
  384. package/src/utils/components/dismissablelayer/DismissableLayer.tsx +1 -1
  385. package/src/utils/helpers/create-strict-context.tsx +1 -1
  386. package/src/utils/hooks/useEventCallback.ts +1 -1
  387. package/src/utils/hooks/useMedia.ts +1 -1
  388. package/cjs/data/table/th/DataTableThActions.d.ts +0 -5
  389. package/cjs/data/table/th/DataTableThActions.js +0 -23
  390. package/cjs/data/table/th/DataTableThActions.js.map +0 -1
  391. package/cjs/data/table/th/useTableColumnResize.js.map +0 -1
  392. package/cjs/data/table/thead/DataTableThead.context.d.ts +0 -4
  393. package/cjs/data/table/thead/DataTableThead.context.js +0 -45
  394. package/cjs/data/table/thead/DataTableThead.context.js.map +0 -1
  395. package/esm/data/table/th/DataTableThActions.d.ts +0 -5
  396. package/esm/data/table/th/DataTableThActions.js +0 -18
  397. package/esm/data/table/th/DataTableThActions.js.map +0 -1
  398. package/esm/data/table/th/useTableColumnResize.js.map +0 -1
  399. package/esm/data/table/thead/DataTableThead.context.d.ts +0 -4
  400. package/esm/data/table/thead/DataTableThead.context.js +0 -8
  401. package/esm/data/table/thead/DataTableThead.context.js.map +0 -1
  402. package/src/data/table/th/DataTableThActions.tsx +0 -32
  403. package/src/data/table/thead/DataTableThead.context.ts +0 -10
  404. /package/cjs/data/table/{th → column-header}/useTableColumnResize.d.ts +0 -0
  405. /package/cjs/data/table/{th → column-header}/useTableColumnResize.js +0 -0
  406. /package/esm/data/table/{th → column-header}/useTableColumnResize.d.ts +0 -0
  407. /package/esm/data/table/{th → column-header}/useTableColumnResize.js +0 -0
  408. /package/src/data/table/{th → column-header}/useTableColumnResize.ts +0 -0
@@ -0,0 +1,92 @@
1
+ import React, { forwardRef } from "react";
2
+ import { cl } from "../../../utils/helpers";
3
+ import { useDataTableContext } from "../root/DataTableRoot.context";
4
+
5
+ interface DataTableBaseCellProps extends React.HTMLAttributes<HTMLTableCellElement> {
6
+ /**
7
+ * Content alignment inside cell
8
+ * @default "left"
9
+ */
10
+ textAlign?: "left" | "center" | "right";
11
+ /**
12
+ * TODO: Shouldnt be needed to declare these here... But getting type-errors if not
13
+ */
14
+ colSpan?: number;
15
+ rowSpan?: number;
16
+ /**
17
+ * Temp hack to solve overflow and alignment
18
+ */
19
+ UNSAFE_isSelection?: boolean;
20
+ /**
21
+ * When true, clicking this cell will not trigger `onRowClick` on the row.
22
+ * Useful for cells that contain their own interactive content or actions
23
+ * that should be independent of row-level click handling.
24
+ */
25
+ preventRowClick?: boolean;
26
+ /**
27
+ * Sets a max-width on the content wrapper div inside the cell.
28
+ * This is only needed when using `layout="auto"` together with
29
+ * `truncateContent` on `<DataTable>` and you want the cell to be truncated.
30
+ */
31
+ contentMaxWidth?: number | `${number}${string}`;
32
+ /**
33
+ * Makes the cell sticky.
34
+ */
35
+ isSticky?: "start" | "end" | false;
36
+ }
37
+
38
+ /**
39
+ * TODO:
40
+ * - Need a "type" or something that centers content instead of relying on isSelection prop.
41
+ * - Need a separate prop do disabled resizing instead of relying on isSelection prop.
42
+ */
43
+ const DataTableBaseCell = forwardRef<
44
+ HTMLTableCellElement,
45
+ DataTableBaseCellProps & {
46
+ /**
47
+ * Cell type
48
+ */
49
+ as: "th" | "td";
50
+ }
51
+ >(
52
+ (
53
+ {
54
+ className,
55
+ children,
56
+ as: Component,
57
+ textAlign = "left",
58
+ colSpan,
59
+ UNSAFE_isSelection,
60
+ preventRowClick,
61
+ contentMaxWidth,
62
+ rowSpan,
63
+ isSticky,
64
+ ...rest
65
+ },
66
+ forwardedRef,
67
+ ) => {
68
+ const { withKeyboardNav } = useDataTableContext();
69
+
70
+ return (
71
+ <Component
72
+ {...rest}
73
+ ref={forwardedRef}
74
+ className={cl("aksel-data-table__cell", className)}
75
+ tabIndex={withKeyboardNav ? -1 : undefined}
76
+ data-align={textAlign}
77
+ data-selectable={UNSAFE_isSelection}
78
+ data-prevent-row-click={
79
+ preventRowClick || UNSAFE_isSelection || undefined
80
+ }
81
+ data-sticky={isSticky || undefined}
82
+ colSpan={colSpan}
83
+ rowSpan={rowSpan}
84
+ >
85
+ <div style={{ maxWidth: contentMaxWidth }}>{children}</div>
86
+ </Component>
87
+ );
88
+ },
89
+ );
90
+
91
+ export { DataTableBaseCell };
92
+ export type { DataTableBaseCellProps };
@@ -0,0 +1,180 @@
1
+ import React, { forwardRef, useState } from "react";
2
+ import {
3
+ ArrowsUpDownIcon,
4
+ CaretLeftCircleFillIcon,
5
+ CaretRightCircleFillIcon,
6
+ SortDownIcon,
7
+ SortUpIcon,
8
+ } from "@navikt/aksel-icons";
9
+ import { cl } from "../../../utils/helpers";
10
+ import { useMergeRefs } from "../../../utils/hooks";
11
+ import {
12
+ DataTableBaseCell,
13
+ type DataTableBaseCellProps,
14
+ } from "../base-cell/DataTableBaseCell";
15
+ import type { SortDirection } from "../root/DataTable.types";
16
+ import { type ResizeProps, useTableColumnResize } from "./useTableColumnResize";
17
+
18
+ interface DataTableColumnHeaderProps
19
+ extends ResizeProps, DataTableBaseCellProps {
20
+ resizeHandler?: (
21
+ event:
22
+ | React.MouseEvent<HTMLButtonElement>
23
+ | React.TouchEvent<HTMLButtonElement>,
24
+ ) => void;
25
+ /**
26
+ * Makes the column header sortable. The entire header cell content becomes
27
+ * a clickable button when true.
28
+ */
29
+ sortable?: boolean;
30
+ /**
31
+ * Current sort direction. Only relevant when `sortable` is true.
32
+ * Uses values matching the `aria-sort` attribute directly.
33
+ * @default "none"
34
+ */
35
+ sortDirection?: SortDirection;
36
+ /**
37
+ * Called when the user clicks the sortable header.
38
+ * The consumer is responsible for determining and setting the next sort state.
39
+ */
40
+ onSortClick?: (event: React.MouseEvent<HTMLElement>) => void;
41
+ }
42
+
43
+ const SORT_ICON: Record<SortDirection, React.ElementType | null> = {
44
+ asc: SortUpIcon,
45
+ desc: SortDownIcon,
46
+ none: ArrowsUpDownIcon,
47
+ };
48
+
49
+ /**
50
+ * TODO:
51
+ * - Plan for pinning: Move it into "settings" dialog like here: https://cloudscape.design/examples/react/table.html
52
+ * Toggling `data-block-keyboard-nav` does not work since the created "grid" does not update when toggling this attribute.
53
+ */
54
+ const DataTableColumnHeader = forwardRef<
55
+ HTMLTableCellElement,
56
+ DataTableColumnHeaderProps
57
+ >(
58
+ (
59
+ {
60
+ className,
61
+ children,
62
+ sortable = false,
63
+ sortDirection = "none",
64
+ onSortClick,
65
+ style,
66
+ width,
67
+ minWidth,
68
+ maxWidth,
69
+ onWidthChange,
70
+ defaultWidth,
71
+ colSpan,
72
+ rowSpan,
73
+ UNSAFE_isSelection,
74
+ ...rest
75
+ },
76
+ forwardedRef,
77
+ ) => {
78
+ const [isOverflowing, setIsOverflowing] = React.useState(false);
79
+ const contentRef = React.useRef<HTMLDivElement>(null);
80
+ const [thRefState, setThRefState] = useState<HTMLTableCellElement | null>(
81
+ null,
82
+ );
83
+ const mergedRef = useMergeRefs(forwardedRef, setThRefState);
84
+
85
+ const resizeResult = useTableColumnResize({
86
+ ref: thRefState,
87
+ width,
88
+ defaultWidth,
89
+ minWidth,
90
+ maxWidth,
91
+ onWidthChange,
92
+ style,
93
+ colSpan,
94
+ });
95
+
96
+ const SortIcon = sortable ? SORT_ICON[sortDirection] : null;
97
+
98
+ return (
99
+ <DataTableBaseCell
100
+ as="th"
101
+ {...rest}
102
+ ref={mergedRef}
103
+ className={cl("aksel-data-table__column-header", className)}
104
+ data-sortable={sortable}
105
+ style={resizeResult.style}
106
+ aria-sort={sortable ? getAriaSort(sortDirection) : undefined}
107
+ onPointerEnter={() => {
108
+ const el = contentRef.current;
109
+ setIsOverflowing(el ? el.scrollWidth > el.offsetWidth : false);
110
+ console.info("is overflowing", isOverflowing);
111
+ }}
112
+ onPointerLeave={() => setIsOverflowing(false)}
113
+ UNSAFE_isSelection={UNSAFE_isSelection}
114
+ colSpan={colSpan}
115
+ rowSpan={rowSpan}
116
+ >
117
+ {sortable ? (
118
+ <button
119
+ className="aksel-data-table__th-sort-button"
120
+ onClick={onSortClick}
121
+ >
122
+ <div ref={contentRef} className="aksel-data-table__th-content">
123
+ {children}
124
+ </div>
125
+ {SortIcon && (
126
+ <SortIcon
127
+ aria-hidden
128
+ data-sort-direction={sortDirection}
129
+ className="aksel-data-table__th-sort-icon"
130
+ fontSize="1.25rem"
131
+ />
132
+ )}
133
+ </button>
134
+ ) : (
135
+ <div
136
+ ref={contentRef}
137
+ className={cl({
138
+ "aksel-data-table__th-content": !UNSAFE_isSelection,
139
+ })}
140
+ >
141
+ {children}
142
+ </div>
143
+ )}
144
+
145
+ {resizeResult.enabled && !UNSAFE_isSelection && (
146
+ <button
147
+ {...resizeResult.resizeHandlerProps}
148
+ className="aksel-data-table__th-resize-handle"
149
+ data-active={resizeResult.isResizingWithKeyboard}
150
+ data-disable-keyboard-nav={resizeResult.isResizingWithKeyboard}
151
+ data-block-keyboard-nav
152
+ >
153
+ {resizeResult.isResizingWithKeyboard && (
154
+ <>
155
+ <span className="aksel-data-table__th-resize-handle-indicator aksel-data-table__th-resize-handle-indicator--start">
156
+ <CaretLeftCircleFillIcon aria-hidden fontSize="1.5rem" />
157
+ </span>
158
+ <span className="aksel-data-table__th-resize-handle-indicator aksel-data-table__th-resize-handle-indicator--end">
159
+ <CaretRightCircleFillIcon aria-hidden fontSize="1.5rem" />
160
+ </span>
161
+ </>
162
+ )}
163
+ </button>
164
+ )}
165
+ </DataTableBaseCell>
166
+ );
167
+ },
168
+ );
169
+
170
+ function getAriaSort(
171
+ sortDirection: SortDirection | undefined,
172
+ ): "ascending" | "descending" | "none" | undefined {
173
+ if (sortDirection === "asc") return "ascending";
174
+ if (sortDirection === "desc") return "descending";
175
+ if (sortDirection === "none") return "none";
176
+ return undefined;
177
+ }
178
+
179
+ export { DataTableColumnHeader };
180
+ export type { DataTableColumnHeaderProps };
@@ -1,15 +1,17 @@
1
1
  import React, { forwardRef } from "react";
2
2
  import { cl } from "../../../utils/helpers";
3
3
 
4
- type DataTableEmptyStateProps = React.HTMLAttributes<HTMLDivElement>;
4
+ type DataTableEmptyStateProps = React.HTMLAttributes<HTMLDivElement> & {
5
+ colSpan?: number;
6
+ };
5
7
 
6
8
  const DataTableEmptyState = forwardRef<
7
9
  HTMLDivElement,
8
10
  DataTableEmptyStateProps
9
- >(({ className, children, ...rest }, forwardedRef) => {
11
+ >(({ className, children, colSpan = 999, ...rest }, forwardedRef) => {
10
12
  return (
11
13
  <tr>
12
- <td colSpan={999}>
14
+ <td colSpan={colSpan}>
13
15
  <div
14
16
  {...rest}
15
17
  ref={forwardedRef}
@@ -1,69 +1,73 @@
1
1
  import type { CheckboxInputProps } from "../../../../form/checkbox/checkbox-input/CheckboxInput";
2
- import type { SelectionT } from "./selection.types";
3
2
 
4
3
  type GetMultipleSelectPropsArgs = {
5
- selectedKeys: SelectionT;
6
- setSelectedKeys: (keys: SelectionT) => void;
7
- disabledKeys: (string | number)[];
8
- allKeys: (string | number)[];
9
- totalCount: number;
4
+ selectedKeysSet: Set<string | number>;
5
+ selectedKeys: (string | number)[];
6
+ setSelectedKeys: (keys: (string | number)[]) => void;
7
+ disabledKeysSet: Set<string | number>;
8
+ allRowKeys: (string | number)[];
10
9
  };
11
10
 
12
11
  function getMultipleSelectProps({
12
+ selectedKeysSet,
13
13
  selectedKeys,
14
14
  setSelectedKeys,
15
- disabledKeys,
16
- allKeys,
17
- totalCount,
15
+ disabledKeysSet,
16
+ allRowKeys,
18
17
  }: GetMultipleSelectPropsArgs) {
19
- const handleToggleAll = () => {
20
- const allSelected =
21
- selectedKeys === "all" ||
22
- (Array.isArray(selectedKeys) && selectedKeys.length === totalCount);
18
+ const allRowKeysSet = new Set(allRowKeys);
19
+ const selectableKeys = allRowKeys.filter((k) => !disabledKeysSet.has(k));
20
+
21
+ const selectedSelectableCount = selectableKeys.filter((k) =>
22
+ selectedKeysSet.has(k),
23
+ ).length;
24
+
25
+ const allSelectableSelected =
26
+ selectableKeys.length > 0 &&
27
+ selectedSelectableCount === selectableKeys.length;
23
28
 
24
- setSelectedKeys(allSelected ? [] : allKeys);
29
+ const indeterminate =
30
+ selectedSelectableCount > 0 &&
31
+ selectedSelectableCount < selectableKeys.length;
32
+
33
+ const selectedKeysNotInView = selectedKeys.filter(
34
+ (k) => !allRowKeysSet.has(k),
35
+ );
36
+ const disabledSelected = selectedKeys.filter((k) => disabledKeysSet.has(k));
37
+ const preservedKeys = [...selectedKeysNotInView, ...disabledSelected];
38
+
39
+ const handleToggleAll = () => {
40
+ if (allSelectableSelected) {
41
+ setSelectedKeys(preservedKeys);
42
+ } else {
43
+ setSelectedKeys([...new Set([...preservedKeys, ...selectableKeys])]);
44
+ }
25
45
  };
26
46
 
27
47
  const handleToggleRow = (key: string | number) => {
28
- if (selectedKeys === "all") {
29
- setSelectedKeys(allKeys.filter((id) => id !== key));
30
- } else if (selectedKeys.includes(key)) {
48
+ if (disabledKeysSet.has(key)) {
49
+ return;
50
+ }
51
+ if (selectedKeysSet.has(key)) {
31
52
  setSelectedKeys(selectedKeys.filter((k) => k !== key));
32
53
  } else {
33
54
  setSelectedKeys([...selectedKeys, key]);
34
55
  }
35
56
  };
36
57
 
37
- const isChecked = (key: string | number) =>
38
- selectedKeys === "all" ||
39
- (Array.isArray(selectedKeys) && selectedKeys.includes(key));
40
-
41
58
  return {
42
- getTheadCheckboxProps: (): CheckboxInputProps => {
43
- const indeterminate =
44
- Array.isArray(selectedKeys) &&
45
- selectedKeys.length > 0 &&
46
- selectedKeys.length < totalCount;
47
-
48
- return {
49
- /* TODO: Add support for label visuallyhidden */
50
- /* children: "Select all rows", */
51
- onChange: handleToggleAll,
52
- checked:
53
- (selectedKeys === "all" ||
54
- (Array.isArray(selectedKeys) && selectedKeys.length > 0)) &&
55
- !indeterminate,
56
- indeterminate,
57
- disabled: disabledKeys.length === totalCount,
58
- };
59
- },
59
+ getTheadCheckboxProps: (): CheckboxInputProps => ({
60
+ onChange: handleToggleAll,
61
+ checked: allSelectableSelected,
62
+ indeterminate,
63
+ disabled: selectableKeys.length === 0,
64
+ }),
60
65
  getRowCheckboxProps: (key: string | number): CheckboxInputProps => ({
61
- /* TODO: Add support for label visuallyhidden */
62
- /* children: `Select row with id ${key}`, */
63
66
  onChange: () => handleToggleRow(key),
64
- checked: isChecked(key),
65
- disabled: disabledKeys.includes(key),
67
+ checked: selectedKeysSet.has(key),
68
+ disabled: disabledKeysSet.has(key),
66
69
  }),
70
+ toggleSelection: handleToggleRow,
67
71
  };
68
72
  }
69
73
 
@@ -1,35 +1,34 @@
1
1
  import type { RadioInputProps } from "../../../../form/radio/radio-input/RadioInput";
2
2
 
3
3
  type GetSingleSelectPropsArgs = {
4
- selectedKeys: (string | number)[];
4
+ selectedKeysSet: Set<string | number>;
5
5
  setSelectedKeys: (keys: (string | number)[]) => void;
6
- disabledKeys: (string | number)[];
6
+ disabledKeysSet: Set<string | number>;
7
+ name: string;
7
8
  };
8
9
 
9
10
  function getSingleSelectProps({
10
- selectedKeys,
11
+ selectedKeysSet,
11
12
  setSelectedKeys,
12
- disabledKeys,
13
+ disabledKeysSet,
14
+ name,
13
15
  }: GetSingleSelectPropsArgs) {
14
16
  const handleSelectionChange = (key: string | number) => {
15
- if (selectedKeys.includes(key)) {
16
- setSelectedKeys([]);
17
- } else {
18
- setSelectedKeys([key]);
17
+ if (disabledKeysSet.has(key)) {
18
+ return;
19
19
  }
20
+ setSelectedKeys([key]);
20
21
  };
21
22
 
22
23
  return {
23
24
  getRowRadioProps: (key: string | number): RadioInputProps => ({
24
- /* TODO: Add support for label visuallyhidden */
25
- /* children: `Select row with id ${key}`, */
26
- checked: selectedKeys.includes(key),
25
+ checked: selectedKeysSet.has(key),
27
26
  onChange: () => handleSelectionChange(key),
28
- disabled: disabledKeys.includes(key),
27
+ disabled: disabledKeysSet.has(key),
29
28
  value: key,
30
- /* TODO: Make this unique to avoid issue with multipe tables */
31
- name: "data-table-single-select",
29
+ name,
32
30
  }),
31
+ toggleSelection: handleSelectionChange,
33
32
  };
34
33
  }
35
34
 
@@ -1,7 +1,7 @@
1
1
  import type { CheckboxInputProps } from "../../../../form/checkbox/checkbox-input/CheckboxInput";
2
2
  import type { RadioInputProps } from "../../../../form/radio/radio-input/RadioInput";
3
3
 
4
- type SelectionT = (string | number)[] | "all";
4
+ type SelectedKeysT = (string | number)[];
5
5
 
6
6
  type SelectionProps = {
7
7
  /**
@@ -14,43 +14,68 @@ type SelectionProps = {
14
14
  * @default "none"
15
15
  */
16
16
  selectionMode?: "none" | "single" | "multiple";
17
- selectedKeys?: SelectionT;
18
- defaultSelectedKeys?: SelectionT;
19
- onSelectionChange?: (keys: SelectionT) => void;
20
- disabledKeys?: (string | number)[];
17
+ /**
18
+ * Controlled selected keys. Should be used in conjunction with `onSelectionChange`.
19
+ */
20
+ selectedKeys?: SelectedKeysT;
21
+ /**
22
+ * Default selected keys when using uncontrolled selection. Should not be used together with `selectedKeys`.
23
+ */
24
+ defaultSelectedKeys?: SelectedKeysT;
25
+ /**
26
+ * Callback with array of selected keys.
27
+ */
28
+ onSelectionChange?: (keys: SelectedKeysT) => void;
29
+ /**
30
+ * Keys that should be disabled for selection. These keys will not be selectable and will be styled as disabled.
31
+ *
32
+ *
33
+ * TODO: Consider making this optionally a callback with (rowData:T) => boolean, to allow for more dynamic disabling of selection based on row data.
34
+ */
35
+ disabledSelectionKeys?: SelectedKeysT;
36
+ /**
37
+ * If true, stops clicking a row from toggling its selection state. This can be used if you want to only allow selection through the checkboxes/radios, and not have the entire row be clickable for selection.
38
+ *
39
+ * @default false
40
+ */
41
+ disableRowSelectionOnClick?: boolean;
21
42
  };
22
43
 
23
44
  type NoneSelection = {
24
45
  selectionMode: "none";
25
- allKeys: (string | number)[];
26
- selectedKeys: (string | number)[];
27
- disabledKeys: (string | number)[];
46
+ selectedKeys: SelectedKeysT;
47
+ disabledSelectionKeys: SelectedKeysT;
28
48
  };
29
49
 
30
50
  type SingleSelection = {
31
51
  selectionMode: "single";
32
- allKeys: (string | number)[];
33
- selectedKeys: (string | number)[];
34
- disabledKeys: (string | number)[];
52
+ selectedKeys: SelectedKeysT;
53
+ disabledSelectionKeys: SelectedKeysT;
35
54
  getRowRadioProps: (key: string | number) => RadioInputProps;
55
+ toggleSelection: (key: string | number) => void;
36
56
  };
37
57
 
38
58
  type MultipleSelection = {
39
59
  selectionMode: "multiple";
40
- allKeys: (string | number)[];
41
- selectedKeys: SelectionT;
42
- disabledKeys: (string | number)[];
60
+ selectedKeys: SelectedKeysT;
61
+ disabledSelectionKeys: SelectedKeysT;
43
62
  getTheadCheckboxProps: () => CheckboxInputProps;
44
63
  getRowCheckboxProps: (key: string | number) => CheckboxInputProps;
64
+ toggleSelection: (key: string | number) => void;
65
+ };
66
+
67
+ type TableSelectionBase = {
68
+ isRowSelected: (rowId: string | number) => boolean;
45
69
  };
46
70
 
47
- type TableSelection = NoneSelection | SingleSelection | MultipleSelection;
71
+ type TableSelection = TableSelectionBase &
72
+ (NoneSelection | SingleSelection | MultipleSelection);
48
73
 
49
74
  export type {
50
75
  MultipleSelection,
51
76
  NoneSelection,
52
77
  SelectionProps,
53
- SelectionT,
54
78
  SingleSelection,
55
79
  TableSelection,
80
+ SelectedKeysT,
56
81
  };
@@ -64,6 +64,10 @@ function shouldBlockNavigation(event: KeyboardEvent): boolean {
64
64
  return false;
65
65
  }
66
66
 
67
+ if (el.dataset.disableKeyboardNav === "true") {
68
+ return true;
69
+ }
70
+
67
71
  if (el.isContentEditable) {
68
72
  return true;
69
73
  }