@navikt/ds-react 8.6.0 → 8.8.0

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 (465) hide show
  1. package/cjs/alert/base-alert/root/BaseAlertRoot.js +1 -2
  2. package/cjs/alert/base-alert/root/BaseAlertRoot.js.map +1 -1
  3. package/cjs/alert/info-card/index.d.ts +2 -2
  4. package/cjs/alert/info-card/index.js +2 -1
  5. package/cjs/alert/info-card/index.js.map +1 -1
  6. package/cjs/alert/info-card/message/InfoCardMessage.d.ts +23 -0
  7. package/cjs/alert/info-card/message/InfoCardMessage.js +73 -0
  8. package/cjs/alert/info-card/message/InfoCardMessage.js.map +1 -0
  9. package/cjs/alert/info-card/root/InfoCardRoot.d.ts +15 -2
  10. package/cjs/alert/info-card/root/InfoCardRoot.js +4 -1
  11. package/cjs/alert/info-card/root/InfoCardRoot.js.map +1 -1
  12. package/cjs/data/drag-and-drop/drag-handler/DataDragAndDropDragHandler.d.ts +21 -0
  13. package/cjs/data/drag-and-drop/drag-handler/DataDragAndDropDragHandler.js +24 -0
  14. package/cjs/data/drag-and-drop/drag-handler/DataDragAndDropDragHandler.js.map +1 -0
  15. package/cjs/data/drag-and-drop/item/DataDragAndDropItem.d.ts +27 -0
  16. package/cjs/data/drag-and-drop/item/DataDragAndDropItem.js +41 -0
  17. package/cjs/data/drag-and-drop/item/DataDragAndDropItem.js.map +1 -0
  18. package/cjs/data/drag-and-drop/root/DataDragAndDrop.context.d.ts +8 -0
  19. package/cjs/data/drag-and-drop/root/DataDragAndDrop.context.js +10 -0
  20. package/cjs/data/drag-and-drop/root/DataDragAndDrop.context.js.map +1 -0
  21. package/cjs/data/drag-and-drop/root/DataDragAndDropRoot.d.ts +34 -0
  22. package/cjs/data/drag-and-drop/root/DataDragAndDropRoot.js +61 -0
  23. package/cjs/data/drag-and-drop/root/DataDragAndDropRoot.js.map +1 -0
  24. package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts +22 -0
  25. package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js +35 -0
  26. package/cjs/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js.map +1 -0
  27. package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.d.ts +27 -0
  28. package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.js +86 -0
  29. package/cjs/data/drag-and-drop-old/item/DataDragAndDropItem.js.map +1 -0
  30. package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.d.ts +5 -0
  31. package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.js +6 -0
  32. package/cjs/data/drag-and-drop-old/root/DataDragAndDrop.context.js.map +1 -0
  33. package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.d.ts +24 -0
  34. package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.js +108 -0
  35. package/cjs/data/drag-and-drop-old/root/DataDragAndDropRoot.js.map +1 -0
  36. package/cjs/data/table/empty-state/DataTableEmptyState.d.ts +5 -0
  37. package/cjs/data/table/empty-state/DataTableEmptyState.js +57 -0
  38. package/cjs/data/table/empty-state/DataTableEmptyState.js.map +1 -0
  39. package/cjs/data/table/helpers/table-focus.js +7 -1
  40. package/cjs/data/table/helpers/table-focus.js.map +1 -1
  41. package/cjs/data/table/helpers/table-keyboard.js +1 -1
  42. package/cjs/data/table/helpers/table-keyboard.js.map +1 -1
  43. package/cjs/data/table/loading-state/DataTableLoadingState.d.ts +5 -0
  44. package/cjs/data/table/loading-state/DataTableLoadingState.js +57 -0
  45. package/cjs/data/table/loading-state/DataTableLoadingState.js.map +1 -0
  46. package/cjs/data/table/root/DataTable.types.d.ts +13 -0
  47. package/cjs/data/table/root/DataTable.types.js +3 -0
  48. package/cjs/data/table/root/DataTable.types.js.map +1 -0
  49. package/cjs/data/table/root/DataTableAuto.d.ts +60 -0
  50. package/cjs/data/table/root/DataTableAuto.js +99 -0
  51. package/cjs/data/table/root/DataTableAuto.js.map +1 -0
  52. package/cjs/data/table/root/DataTableRoot.context.d.ts +9 -0
  53. package/cjs/data/table/root/DataTableRoot.context.js +11 -0
  54. package/cjs/data/table/root/DataTableRoot.context.js.map +1 -0
  55. package/cjs/data/table/root/DataTableRoot.d.ts +30 -3
  56. package/cjs/data/table/root/DataTableRoot.js +12 -4
  57. package/cjs/data/table/root/DataTableRoot.js.map +1 -1
  58. package/cjs/data/table/root/useTableKeyboardNav.js +1 -0
  59. package/cjs/data/table/root/useTableKeyboardNav.js.map +1 -1
  60. package/cjs/data/table/root/useTableSelection.d.ts +55 -0
  61. package/cjs/data/table/root/useTableSelection.js +79 -0
  62. package/cjs/data/table/root/useTableSelection.js.map +1 -0
  63. package/cjs/data/table/td/DataTableTd.d.ts +10 -0
  64. package/cjs/data/table/td/DataTableTd.js +4 -2
  65. package/cjs/data/table/td/DataTableTd.js.map +1 -1
  66. package/cjs/data/table/th/DataTableTh.d.ts +27 -5
  67. package/cjs/data/table/th/DataTableTh.js +49 -22
  68. package/cjs/data/table/th/DataTableTh.js.map +1 -1
  69. package/cjs/data/table/th/useTableColumnResize.d.ts +64 -0
  70. package/cjs/data/table/th/useTableColumnResize.js +144 -0
  71. package/cjs/data/table/th/useTableColumnResize.js.map +1 -0
  72. package/cjs/data/table/thead/DataTableThead.context.d.ts +4 -0
  73. package/cjs/data/table/thead/DataTableThead.context.js +45 -0
  74. package/cjs/data/table/thead/DataTableThead.context.js.map +1 -0
  75. package/cjs/data/table/thead/DataTableThead.js +3 -1
  76. package/cjs/data/table/thead/DataTableThead.js.map +1 -1
  77. package/cjs/data/table/tr/DataTableTr.js +10 -2
  78. package/cjs/data/table/tr/DataTableTr.js.map +1 -1
  79. package/cjs/data/token-filter/AutoSuggest.d.ts +6 -2
  80. package/cjs/data/token-filter/AutoSuggest.js +44 -11
  81. package/cjs/data/token-filter/AutoSuggest.js.map +1 -1
  82. package/cjs/data/token-filter/TokenFilter.d.ts +5 -5
  83. package/cjs/data/token-filter/TokenFilter.js +105 -42
  84. package/cjs/data/token-filter/TokenFilter.js.map +1 -1
  85. package/cjs/data/token-filter/TokenFilter.types.d.ts +51 -33
  86. package/cjs/data/token-filter/helpers/generate-autocomplete-options.d.ts +2 -3
  87. package/cjs/data/token-filter/helpers/generate-autocomplete-options.js +11 -15
  88. package/cjs/data/token-filter/helpers/generate-autocomplete-options.js.map +1 -1
  89. package/cjs/data/token-filter/helpers/operators.d.ts +6 -6
  90. package/cjs/data/token-filter/helpers/operators.js +3 -4
  91. package/cjs/data/token-filter/helpers/operators.js.map +1 -1
  92. package/cjs/data/token-filter/helpers/parse-query-text.d.ts +2 -20
  93. package/cjs/data/token-filter/helpers/parse-query-text.js +1 -1
  94. package/cjs/data/token-filter/helpers/parse-query-text.js.map +1 -1
  95. package/cjs/data/token-filter/helpers/query-builder.d.ts +2 -2
  96. package/cjs/data/token-filter/helpers/query-builder.js.map +1 -1
  97. package/cjs/date/Date.Dialog.d.ts +5 -1
  98. package/cjs/date/Date.Dialog.js +6 -2
  99. package/cjs/date/Date.Dialog.js.map +1 -1
  100. package/cjs/date/Date.Input.js +1 -1
  101. package/cjs/date/Date.Input.js.map +1 -1
  102. package/cjs/date/datepicker/DatePicker.js +3 -2
  103. package/cjs/date/datepicker/DatePicker.js.map +1 -1
  104. package/cjs/date/datepicker/hooks/useDatepicker.d.ts +12 -1
  105. package/cjs/date/datepicker/hooks/useDatepicker.js +5 -2
  106. package/cjs/date/datepicker/hooks/useDatepicker.js.map +1 -1
  107. package/cjs/date/datepicker/hooks/useRangeDatepicker.js +3 -1
  108. package/cjs/date/datepicker/hooks/useRangeDatepicker.js.map +1 -1
  109. package/cjs/date/datepicker/parts/DatePicker.Months.d.ts +2 -1
  110. package/cjs/date/datepicker/parts/DatePicker.Months.js +3 -3
  111. package/cjs/date/datepicker/parts/DatePicker.Months.js.map +1 -1
  112. package/cjs/date/datepicker/parts/DatePicker.RDP.d.ts +5 -1
  113. package/cjs/date/datepicker/parts/DatePicker.RDP.js +2 -2
  114. package/cjs/date/datepicker/parts/DatePicker.RDP.js.map +1 -1
  115. package/cjs/date/monthpicker/MonthPicker.js +3 -2
  116. package/cjs/date/monthpicker/MonthPicker.js.map +1 -1
  117. package/cjs/date/monthpicker/hooks/useMonthPicker.d.ts +11 -1
  118. package/cjs/date/monthpicker/hooks/useMonthPicker.js +3 -1
  119. package/cjs/date/monthpicker/hooks/useMonthPicker.js.map +1 -1
  120. package/cjs/date/monthpicker/parts/MonthPicker.Caption.d.ts +4 -1
  121. package/cjs/date/monthpicker/parts/MonthPicker.Caption.js +3 -2
  122. package/cjs/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -1
  123. package/cjs/dropdown/Toggle.js +5 -12
  124. package/cjs/dropdown/Toggle.js.map +1 -1
  125. package/cjs/form/checkbox/CheckboxGroup.js +1 -1
  126. package/cjs/form/checkbox/CheckboxGroup.js.map +1 -1
  127. package/cjs/form/combobox/Input/Input.js +1 -1
  128. package/cjs/form/combobox/Input/Input.js.map +1 -1
  129. package/cjs/form/fieldset/Fieldset.d.ts +25 -5
  130. package/cjs/form/fieldset/Fieldset.js +19 -2
  131. package/cjs/form/fieldset/Fieldset.js.map +1 -1
  132. package/cjs/form/radio/RadioGroup.js +1 -1
  133. package/cjs/form/radio/RadioGroup.js.map +1 -1
  134. package/cjs/index.d.ts +1 -1
  135. package/cjs/index.js.map +1 -1
  136. package/cjs/inline-message/root/InlineMessage.js +2 -2
  137. package/cjs/inline-message/root/InlineMessage.js.map +1 -1
  138. package/cjs/provider/Provider.d.ts +2 -2
  139. package/cjs/read-more/ReadMore.d.ts +10 -0
  140. package/cjs/read-more/ReadMore.js +4 -6
  141. package/cjs/read-more/ReadMore.js.map +1 -1
  142. package/cjs/tooltip/Tooltip.js +1 -3
  143. package/cjs/tooltip/Tooltip.js.map +1 -1
  144. package/cjs/types/index.d.ts +1 -1
  145. package/cjs/types/index.js +0 -15
  146. package/cjs/types/index.js.map +1 -1
  147. package/cjs/utils/components/HighlightText/HighlightText.d.ts +8 -0
  148. package/cjs/utils/components/HighlightText/HighlightText.js +27 -0
  149. package/cjs/utils/components/HighlightText/HighlightText.js.map +1 -0
  150. package/cjs/utils/components/Listbox/group/ListboxGroup.d.ts +7 -0
  151. package/cjs/utils/components/Listbox/group/ListboxGroup.js +15 -0
  152. package/cjs/utils/components/Listbox/group/ListboxGroup.js.map +1 -0
  153. package/cjs/utils/components/Listbox/input-slot/ListboxInputSlot.d.ts +7 -0
  154. package/cjs/utils/components/Listbox/input-slot/ListboxInputSlot.js +15 -0
  155. package/cjs/utils/components/Listbox/input-slot/ListboxInputSlot.js.map +1 -0
  156. package/cjs/utils/components/Listbox/option/ListboxOption.d.ts +24 -0
  157. package/cjs/utils/components/Listbox/option/ListboxOption.js +33 -0
  158. package/cjs/utils/components/Listbox/option/ListboxOption.js.map +1 -0
  159. package/cjs/utils/components/Listbox/options/ListboxOptions.d.ts +8 -0
  160. package/cjs/utils/components/Listbox/options/ListboxOptions.js +32 -0
  161. package/cjs/utils/components/Listbox/options/ListboxOptions.js.map +1 -0
  162. package/cjs/utils/components/Listbox/root/ListboxRoot.d.ts +20 -0
  163. package/cjs/utils/components/Listbox/root/ListboxRoot.js +84 -0
  164. package/cjs/utils/components/Listbox/root/ListboxRoot.js.map +1 -0
  165. package/cjs/utils/components/Listbox/root/domHelpers.d.ts +3 -0
  166. package/cjs/utils/components/Listbox/root/domHelpers.js +53 -0
  167. package/cjs/utils/components/Listbox/root/domHelpers.js.map +1 -0
  168. package/cjs/utils/components/floating/Floating.d.ts +1 -1
  169. package/cjs/utils/components/floating/Floating.js +1 -1
  170. package/cjs/utils/components/floating/Floating.js.map +1 -1
  171. package/cjs/utils/components/focus-boundary/FocusBoundary.d.ts +0 -1
  172. package/cjs/utils/components/focus-boundary/FocusBoundary.js +9 -64
  173. package/cjs/utils/components/focus-boundary/FocusBoundary.js.map +1 -1
  174. package/cjs/utils/components/link-anchor/LinkAnchor.js +10 -0
  175. package/cjs/utils/components/link-anchor/LinkAnchor.js.map +1 -1
  176. package/cjs/utils/helpers/className.js +1 -1
  177. package/cjs/utils/helpers/className.js.map +1 -1
  178. package/cjs/utils/helpers/focus.d.ts +16 -0
  179. package/cjs/utils/helpers/focus.js +63 -0
  180. package/cjs/utils/helpers/focus.js.map +1 -0
  181. package/cjs/utils/helpers/index.d.ts +9 -9
  182. package/cjs/utils/helpers/index.js +22 -23
  183. package/cjs/utils/helpers/index.js.map +1 -1
  184. package/cjs/utils/hooks/index.d.ts +13 -13
  185. package/cjs/utils/hooks/index.js +31 -28
  186. package/cjs/utils/hooks/index.js.map +1 -1
  187. package/cjs/utils/hooks/useDeferredValue.d.ts +1 -0
  188. package/cjs/utils/hooks/useDeferredValue.js +14 -0
  189. package/cjs/utils/hooks/useDeferredValue.js.map +1 -0
  190. package/cjs/utils/hooks/useScrollLock.js +41 -11
  191. package/cjs/utils/hooks/useScrollLock.js.map +1 -1
  192. package/esm/alert/base-alert/root/BaseAlertRoot.js +1 -2
  193. package/esm/alert/base-alert/root/BaseAlertRoot.js.map +1 -1
  194. package/esm/alert/info-card/index.d.ts +2 -2
  195. package/esm/alert/info-card/index.js +1 -1
  196. package/esm/alert/info-card/index.js.map +1 -1
  197. package/esm/alert/info-card/message/InfoCardMessage.d.ts +23 -0
  198. package/esm/alert/info-card/message/InfoCardMessage.js +37 -0
  199. package/esm/alert/info-card/message/InfoCardMessage.js.map +1 -0
  200. package/esm/alert/info-card/root/InfoCardRoot.d.ts +15 -2
  201. package/esm/alert/info-card/root/InfoCardRoot.js +3 -1
  202. package/esm/alert/info-card/root/InfoCardRoot.js.map +1 -1
  203. package/esm/data/drag-and-drop/drag-handler/DataDragAndDropDragHandler.d.ts +21 -0
  204. package/esm/data/drag-and-drop/drag-handler/DataDragAndDropDragHandler.js +18 -0
  205. package/esm/data/drag-and-drop/drag-handler/DataDragAndDropDragHandler.js.map +1 -0
  206. package/esm/data/drag-and-drop/item/DataDragAndDropItem.d.ts +27 -0
  207. package/esm/data/drag-and-drop/item/DataDragAndDropItem.js +35 -0
  208. package/esm/data/drag-and-drop/item/DataDragAndDropItem.js.map +1 -0
  209. package/esm/data/drag-and-drop/root/DataDragAndDrop.context.d.ts +8 -0
  210. package/esm/data/drag-and-drop/root/DataDragAndDrop.context.js +6 -0
  211. package/esm/data/drag-and-drop/root/DataDragAndDrop.context.js.map +1 -0
  212. package/esm/data/drag-and-drop/root/DataDragAndDropRoot.d.ts +34 -0
  213. package/esm/data/drag-and-drop/root/DataDragAndDropRoot.js +21 -0
  214. package/esm/data/drag-and-drop/root/DataDragAndDropRoot.js.map +1 -0
  215. package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.d.ts +22 -0
  216. package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js +29 -0
  217. package/esm/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.js.map +1 -0
  218. package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.d.ts +27 -0
  219. package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.js +50 -0
  220. package/esm/data/drag-and-drop-old/item/DataDragAndDropItem.js.map +1 -0
  221. package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.d.ts +5 -0
  222. package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.js +3 -0
  223. package/esm/data/drag-and-drop-old/root/DataDragAndDrop.context.js.map +1 -0
  224. package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.d.ts +24 -0
  225. package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.js +68 -0
  226. package/esm/data/drag-and-drop-old/root/DataDragAndDropRoot.js.map +1 -0
  227. package/esm/data/table/empty-state/DataTableEmptyState.d.ts +5 -0
  228. package/esm/data/table/empty-state/DataTableEmptyState.js +21 -0
  229. package/esm/data/table/empty-state/DataTableEmptyState.js.map +1 -0
  230. package/esm/data/table/helpers/table-focus.js +7 -1
  231. package/esm/data/table/helpers/table-focus.js.map +1 -1
  232. package/esm/data/table/helpers/table-keyboard.js +1 -1
  233. package/esm/data/table/helpers/table-keyboard.js.map +1 -1
  234. package/esm/data/table/loading-state/DataTableLoadingState.d.ts +5 -0
  235. package/esm/data/table/loading-state/DataTableLoadingState.js +21 -0
  236. package/esm/data/table/loading-state/DataTableLoadingState.js.map +1 -0
  237. package/esm/data/table/root/DataTable.types.d.ts +13 -0
  238. package/esm/data/table/root/DataTable.types.js +2 -0
  239. package/esm/data/table/root/DataTable.types.js.map +1 -0
  240. package/esm/data/table/root/DataTableAuto.d.ts +60 -0
  241. package/esm/data/table/root/DataTableAuto.js +63 -0
  242. package/esm/data/table/root/DataTableAuto.js.map +1 -0
  243. package/esm/data/table/root/DataTableRoot.context.d.ts +9 -0
  244. package/esm/data/table/root/DataTableRoot.context.js +7 -0
  245. package/esm/data/table/root/DataTableRoot.context.js.map +1 -0
  246. package/esm/data/table/root/DataTableRoot.d.ts +30 -3
  247. package/esm/data/table/root/DataTableRoot.js +10 -4
  248. package/esm/data/table/root/DataTableRoot.js.map +1 -1
  249. package/esm/data/table/root/useTableKeyboardNav.js +1 -0
  250. package/esm/data/table/root/useTableKeyboardNav.js.map +1 -1
  251. package/esm/data/table/root/useTableSelection.d.ts +55 -0
  252. package/esm/data/table/root/useTableSelection.js +77 -0
  253. package/esm/data/table/root/useTableSelection.js.map +1 -0
  254. package/esm/data/table/td/DataTableTd.d.ts +10 -0
  255. package/esm/data/table/td/DataTableTd.js +4 -2
  256. package/esm/data/table/td/DataTableTd.js.map +1 -1
  257. package/esm/data/table/th/DataTableTh.d.ts +27 -5
  258. package/esm/data/table/th/DataTableTh.js +51 -24
  259. package/esm/data/table/th/DataTableTh.js.map +1 -1
  260. package/esm/data/table/th/useTableColumnResize.d.ts +64 -0
  261. package/esm/data/table/th/useTableColumnResize.js +142 -0
  262. package/esm/data/table/th/useTableColumnResize.js.map +1 -0
  263. package/esm/data/table/thead/DataTableThead.context.d.ts +4 -0
  264. package/esm/data/table/thead/DataTableThead.context.js +8 -0
  265. package/esm/data/table/thead/DataTableThead.context.js.map +1 -0
  266. package/esm/data/table/thead/DataTableThead.js +3 -1
  267. package/esm/data/table/thead/DataTableThead.js.map +1 -1
  268. package/esm/data/table/tr/DataTableTr.js +10 -2
  269. package/esm/data/table/tr/DataTableTr.js.map +1 -1
  270. package/esm/data/token-filter/AutoSuggest.d.ts +6 -2
  271. package/esm/data/token-filter/AutoSuggest.js +43 -13
  272. package/esm/data/token-filter/AutoSuggest.js.map +1 -1
  273. package/esm/data/token-filter/TokenFilter.d.ts +5 -5
  274. package/esm/data/token-filter/TokenFilter.js +105 -42
  275. package/esm/data/token-filter/TokenFilter.js.map +1 -1
  276. package/esm/data/token-filter/TokenFilter.types.d.ts +51 -33
  277. package/esm/data/token-filter/helpers/generate-autocomplete-options.d.ts +2 -3
  278. package/esm/data/token-filter/helpers/generate-autocomplete-options.js +11 -15
  279. package/esm/data/token-filter/helpers/generate-autocomplete-options.js.map +1 -1
  280. package/esm/data/token-filter/helpers/operators.d.ts +6 -6
  281. package/esm/data/token-filter/helpers/operators.js +3 -4
  282. package/esm/data/token-filter/helpers/operators.js.map +1 -1
  283. package/esm/data/token-filter/helpers/parse-query-text.d.ts +2 -20
  284. package/esm/data/token-filter/helpers/parse-query-text.js +1 -1
  285. package/esm/data/token-filter/helpers/parse-query-text.js.map +1 -1
  286. package/esm/data/token-filter/helpers/query-builder.d.ts +2 -2
  287. package/esm/data/token-filter/helpers/query-builder.js.map +1 -1
  288. package/esm/date/Date.Dialog.d.ts +5 -1
  289. package/esm/date/Date.Dialog.js +6 -2
  290. package/esm/date/Date.Dialog.js.map +1 -1
  291. package/esm/date/Date.Input.js +1 -1
  292. package/esm/date/Date.Input.js.map +1 -1
  293. package/esm/date/datepicker/DatePicker.js +3 -2
  294. package/esm/date/datepicker/DatePicker.js.map +1 -1
  295. package/esm/date/datepicker/hooks/useDatepicker.d.ts +12 -1
  296. package/esm/date/datepicker/hooks/useDatepicker.js +5 -2
  297. package/esm/date/datepicker/hooks/useDatepicker.js.map +1 -1
  298. package/esm/date/datepicker/hooks/useRangeDatepicker.js +3 -1
  299. package/esm/date/datepicker/hooks/useRangeDatepicker.js.map +1 -1
  300. package/esm/date/datepicker/parts/DatePicker.Months.d.ts +2 -1
  301. package/esm/date/datepicker/parts/DatePicker.Months.js +3 -3
  302. package/esm/date/datepicker/parts/DatePicker.Months.js.map +1 -1
  303. package/esm/date/datepicker/parts/DatePicker.RDP.d.ts +5 -1
  304. package/esm/date/datepicker/parts/DatePicker.RDP.js +2 -2
  305. package/esm/date/datepicker/parts/DatePicker.RDP.js.map +1 -1
  306. package/esm/date/monthpicker/MonthPicker.js +3 -2
  307. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  308. package/esm/date/monthpicker/hooks/useMonthPicker.d.ts +11 -1
  309. package/esm/date/monthpicker/hooks/useMonthPicker.js +3 -1
  310. package/esm/date/monthpicker/hooks/useMonthPicker.js.map +1 -1
  311. package/esm/date/monthpicker/parts/MonthPicker.Caption.d.ts +4 -1
  312. package/esm/date/monthpicker/parts/MonthPicker.Caption.js +3 -2
  313. package/esm/date/monthpicker/parts/MonthPicker.Caption.js.map +1 -1
  314. package/esm/dropdown/Toggle.js +5 -12
  315. package/esm/dropdown/Toggle.js.map +1 -1
  316. package/esm/form/checkbox/CheckboxGroup.js +1 -1
  317. package/esm/form/checkbox/CheckboxGroup.js.map +1 -1
  318. package/esm/form/combobox/Input/Input.js +1 -1
  319. package/esm/form/combobox/Input/Input.js.map +1 -1
  320. package/esm/form/fieldset/Fieldset.d.ts +25 -5
  321. package/esm/form/fieldset/Fieldset.js +19 -2
  322. package/esm/form/fieldset/Fieldset.js.map +1 -1
  323. package/esm/form/radio/RadioGroup.js +1 -1
  324. package/esm/form/radio/RadioGroup.js.map +1 -1
  325. package/esm/index.d.ts +1 -1
  326. package/esm/index.js.map +1 -1
  327. package/esm/inline-message/root/InlineMessage.js +3 -3
  328. package/esm/inline-message/root/InlineMessage.js.map +1 -1
  329. package/esm/provider/Provider.d.ts +2 -2
  330. package/esm/read-more/ReadMore.d.ts +10 -0
  331. package/esm/read-more/ReadMore.js +4 -6
  332. package/esm/read-more/ReadMore.js.map +1 -1
  333. package/esm/tooltip/Tooltip.js +1 -3
  334. package/esm/tooltip/Tooltip.js.map +1 -1
  335. package/esm/types/index.d.ts +1 -1
  336. package/esm/types/index.js +1 -1
  337. package/esm/types/index.js.map +1 -1
  338. package/esm/utils/components/HighlightText/HighlightText.d.ts +8 -0
  339. package/esm/utils/components/HighlightText/HighlightText.js +21 -0
  340. package/esm/utils/components/HighlightText/HighlightText.js.map +1 -0
  341. package/esm/utils/components/Listbox/group/ListboxGroup.d.ts +7 -0
  342. package/esm/utils/components/Listbox/group/ListboxGroup.js +10 -0
  343. package/esm/utils/components/Listbox/group/ListboxGroup.js.map +1 -0
  344. package/esm/utils/components/Listbox/input-slot/ListboxInputSlot.d.ts +7 -0
  345. package/esm/utils/components/Listbox/input-slot/ListboxInputSlot.js +9 -0
  346. package/esm/utils/components/Listbox/input-slot/ListboxInputSlot.js.map +1 -0
  347. package/esm/utils/components/Listbox/option/ListboxOption.d.ts +24 -0
  348. package/esm/utils/components/Listbox/option/ListboxOption.js +27 -0
  349. package/esm/utils/components/Listbox/option/ListboxOption.js.map +1 -0
  350. package/esm/utils/components/Listbox/options/ListboxOptions.d.ts +8 -0
  351. package/esm/utils/components/Listbox/options/ListboxOptions.js +27 -0
  352. package/esm/utils/components/Listbox/options/ListboxOptions.js.map +1 -0
  353. package/esm/utils/components/Listbox/root/ListboxRoot.d.ts +20 -0
  354. package/esm/utils/components/Listbox/root/ListboxRoot.js +79 -0
  355. package/esm/utils/components/Listbox/root/ListboxRoot.js.map +1 -0
  356. package/esm/utils/components/Listbox/root/domHelpers.d.ts +3 -0
  357. package/esm/utils/components/Listbox/root/domHelpers.js +50 -0
  358. package/esm/utils/components/Listbox/root/domHelpers.js.map +1 -0
  359. package/esm/utils/components/floating/Floating.d.ts +1 -1
  360. package/esm/utils/components/floating/Floating.js +1 -1
  361. package/esm/utils/components/floating/Floating.js.map +1 -1
  362. package/esm/utils/components/focus-boundary/FocusBoundary.d.ts +0 -1
  363. package/esm/utils/components/focus-boundary/FocusBoundary.js +9 -64
  364. package/esm/utils/components/focus-boundary/FocusBoundary.js.map +1 -1
  365. package/esm/utils/components/link-anchor/LinkAnchor.js +10 -0
  366. package/esm/utils/components/link-anchor/LinkAnchor.js.map +1 -1
  367. package/esm/utils/helpers/className.js +1 -1
  368. package/esm/utils/helpers/className.js.map +1 -1
  369. package/esm/utils/helpers/focus.d.ts +16 -0
  370. package/esm/utils/helpers/focus.js +60 -0
  371. package/esm/utils/helpers/focus.js.map +1 -0
  372. package/esm/utils/helpers/index.d.ts +9 -9
  373. package/esm/utils/helpers/index.js +9 -9
  374. package/esm/utils/helpers/index.js.map +1 -1
  375. package/esm/utils/hooks/index.d.ts +13 -13
  376. package/esm/utils/hooks/index.js +13 -13
  377. package/esm/utils/hooks/index.js.map +1 -1
  378. package/esm/utils/hooks/useDeferredValue.d.ts +1 -0
  379. package/esm/utils/hooks/useDeferredValue.js +7 -0
  380. package/esm/utils/hooks/useDeferredValue.js.map +1 -0
  381. package/esm/utils/hooks/useScrollLock.js +41 -11
  382. package/esm/utils/hooks/useScrollLock.js.map +1 -1
  383. package/package.json +9 -9
  384. package/src/alert/base-alert/root/BaseAlertRoot.tsx +1 -1
  385. package/src/alert/info-card/index.ts +2 -0
  386. package/src/alert/info-card/message/InfoCardMessage.tsx +48 -0
  387. package/src/alert/info-card/root/InfoCardRoot.tsx +20 -1
  388. package/src/data/drag-and-drop/drag-handler/DataDragAndDropDragHandler.tsx +63 -0
  389. package/src/data/drag-and-drop/item/DataDragAndDropItem.tsx +54 -0
  390. package/src/data/drag-and-drop/root/DataDragAndDrop.context.tsx +14 -0
  391. package/src/data/drag-and-drop/root/DataDragAndDropRoot.tsx +54 -0
  392. package/src/data/drag-and-drop-old/drag-handler/DataDragAndDropDragHandler.tsx +104 -0
  393. package/src/data/drag-and-drop-old/item/DataDragAndDropItem.tsx +74 -0
  394. package/src/data/drag-and-drop-old/root/DataDragAndDrop.context.tsx +11 -0
  395. package/src/data/drag-and-drop-old/root/DataDragAndDropRoot.tsx +96 -0
  396. package/src/data/table/empty-state/DataTableEmptyState.tsx +26 -0
  397. package/src/data/table/helpers/table-focus.ts +10 -1
  398. package/src/data/table/helpers/table-keyboard.ts +1 -1
  399. package/src/data/table/loading-state/DataTableLoadingState.tsx +26 -0
  400. package/src/data/table/root/DataTable.types.ts +16 -0
  401. package/src/data/table/root/DataTableAuto.tsx +182 -0
  402. package/src/data/table/root/DataTableRoot.context.ts +14 -0
  403. package/src/data/table/root/DataTableRoot.tsx +60 -14
  404. package/src/data/table/root/useTableKeyboardNav.ts +1 -0
  405. package/src/data/table/root/useTableSelection.ts +126 -0
  406. package/src/data/table/td/DataTableTd.tsx +14 -1
  407. package/src/data/table/th/DataTableTh.tsx +133 -65
  408. package/src/data/table/th/useTableColumnResize.ts +276 -0
  409. package/src/data/table/thead/DataTableThead.context.ts +10 -0
  410. package/src/data/table/thead/DataTableThead.tsx +8 -5
  411. package/src/data/table/tr/DataTableTr.tsx +18 -2
  412. package/src/data/token-filter/AutoSuggest.tsx +141 -29
  413. package/src/data/token-filter/TokenFilter.tsx +174 -79
  414. package/src/data/token-filter/TokenFilter.types.ts +70 -42
  415. package/src/data/token-filter/helpers/generate-autocomplete-options.test.ts +97 -97
  416. package/src/data/token-filter/helpers/generate-autocomplete-options.ts +31 -38
  417. package/src/data/token-filter/helpers/operators.test.ts +29 -29
  418. package/src/data/token-filter/helpers/operators.ts +16 -16
  419. package/src/data/token-filter/helpers/parse-query-text.test.ts +37 -35
  420. package/src/data/token-filter/helpers/parse-query-text.ts +7 -26
  421. package/src/data/token-filter/helpers/query-builder.ts +2 -2
  422. package/src/date/Date.Dialog.tsx +15 -0
  423. package/src/date/Date.Input.tsx +1 -1
  424. package/src/date/datepicker/DatePicker.tsx +3 -0
  425. package/src/date/datepicker/hooks/useDatepicker.tsx +19 -3
  426. package/src/date/datepicker/hooks/useRangeDatepicker.tsx +5 -1
  427. package/src/date/datepicker/parts/DatePicker.Months.tsx +9 -1
  428. package/src/date/datepicker/parts/DatePicker.RDP.tsx +7 -1
  429. package/src/date/monthpicker/MonthPicker.tsx +3 -1
  430. package/src/date/monthpicker/hooks/useMonthPicker.tsx +16 -2
  431. package/src/date/monthpicker/parts/MonthPicker.Caption.tsx +20 -2
  432. package/src/dropdown/Toggle.tsx +6 -12
  433. package/src/form/checkbox/CheckboxGroup.tsx +1 -1
  434. package/src/form/combobox/Input/Input.tsx +2 -2
  435. package/src/form/fieldset/Fieldset.tsx +31 -7
  436. package/src/form/radio/RadioGroup.tsx +1 -1
  437. package/src/index.ts +1 -0
  438. package/src/inline-message/root/InlineMessage.tsx +5 -5
  439. package/src/provider/Provider.tsx +2 -2
  440. package/src/read-more/ReadMore.tsx +15 -16
  441. package/src/tooltip/Tooltip.tsx +1 -3
  442. package/src/types/index.ts +1 -1
  443. package/src/utils/components/HighlightText/HighlightText.tsx +34 -0
  444. package/src/utils/components/Listbox/group/ListboxGroup.tsx +26 -0
  445. package/src/utils/components/Listbox/input-slot/ListboxInputSlot.tsx +22 -0
  446. package/src/utils/components/Listbox/option/ListboxOption.tsx +57 -0
  447. package/src/utils/components/Listbox/options/ListboxOptions.tsx +38 -0
  448. package/src/utils/components/Listbox/root/ListboxRoot.tsx +104 -0
  449. package/src/utils/components/Listbox/root/domHelpers.ts +60 -0
  450. package/src/utils/components/floating/Floating.tsx +2 -2
  451. package/src/utils/components/focus-boundary/FocusBoundary.tsx +9 -80
  452. package/src/utils/components/link-anchor/LinkAnchor.tsx +11 -0
  453. package/src/utils/helpers/className.ts +1 -1
  454. package/src/utils/helpers/focus.ts +78 -0
  455. package/src/utils/helpers/index.ts +9 -9
  456. package/src/utils/hooks/index.ts +20 -13
  457. package/src/utils/hooks/useDeferredValue.ts +12 -0
  458. package/src/utils/hooks/useScrollLock.ts +57 -13
  459. package/cjs/data/table/th/DataTableThSortHandle.d.ts +0 -6
  460. package/cjs/data/table/th/DataTableThSortHandle.js +0 -82
  461. package/cjs/data/table/th/DataTableThSortHandle.js.map +0 -1
  462. package/esm/data/table/th/DataTableThSortHandle.d.ts +0 -6
  463. package/esm/data/table/th/DataTableThSortHandle.js +0 -47
  464. package/esm/data/table/th/DataTableThSortHandle.js.map +0 -1
  465. package/src/data/table/th/DataTableThSortHandle.tsx +0 -67
@@ -0,0 +1,276 @@
1
+ import { type DOMAttributes, useCallback, useState } from "react";
2
+ import { useControllableState } from "../../../utils/hooks";
3
+ import { useDataTableContext } from "../root/DataTableRoot.context";
4
+
5
+ type ColumnWidth = number | string;
6
+
7
+ type ResizeProps = {
8
+ ref: HTMLTableCellElement | null;
9
+ /**
10
+ * Controlled width of the column.
11
+ *
12
+ * Should only be used to fully control column width state. Otherwise, use `defaultWidth` and let the component handle resizing.
13
+ */
14
+ width?: ColumnWidth;
15
+ /**
16
+ * Initial width of the column. Only used when `width` is not set.
17
+ */
18
+ defaultWidth?: ColumnWidth;
19
+ /**
20
+ * Minimum width of the column.
21
+ *
22
+ * Should be used in conjunction with `width` or `defaultWidth` to set limits when resizing.
23
+ */
24
+ minWidth?: ColumnWidth;
25
+ /**
26
+ * Maximum width of the column.
27
+ *
28
+ * Should be used in conjunction with `width` or `defaultWidth` to set limits when resizing.
29
+ */
30
+ maxWidth?: ColumnWidth;
31
+ /**
32
+ * Called when the column width changes.
33
+ */
34
+ onWidthChange?: (width: ColumnWidth) => void;
35
+ /**
36
+ * Forwarded styles
37
+ */
38
+ style?: React.CSSProperties;
39
+ /**
40
+ * Forwarded colSpan
41
+ */
42
+ colSpan?: number;
43
+ };
44
+
45
+ type TableColumnResizeArgs = ResizeProps & {};
46
+
47
+ type TableColumnResizeResult =
48
+ | {
49
+ style?: React.CSSProperties;
50
+ resizeHandlerProps: {
51
+ onMouseDown: DOMAttributes<HTMLButtonElement>["onMouseDown"];
52
+ onTouchStart: DOMAttributes<HTMLButtonElement>["onTouchStart"];
53
+ onKeyDown: DOMAttributes<HTMLButtonElement>["onKeyDown"];
54
+ onBlur: DOMAttributes<HTMLButtonElement>["onBlur"];
55
+ onDoubleClick: DOMAttributes<HTMLButtonElement>["onDoubleClick"];
56
+ };
57
+ isResizingWithKeyboard: boolean;
58
+ enabled: true;
59
+ }
60
+ | {
61
+ style?: React.CSSProperties;
62
+ enabled: false;
63
+ };
64
+
65
+ /**
66
+ * TODO:
67
+ * - Do we allow % widths?
68
+ * - Auto-width mode is hard now since that might cause layout-shifts on mount. But would be preferable to
69
+ * be able to set "1fr" or similar and have it fill remaining space.
70
+ */
71
+ function useTableColumnResize(
72
+ args: TableColumnResizeArgs,
73
+ ): TableColumnResizeResult {
74
+ const {
75
+ ref,
76
+ width: userWidth,
77
+ defaultWidth,
78
+ onWidthChange,
79
+ maxWidth = Infinity,
80
+ minWidth = 40,
81
+ style,
82
+ colSpan,
83
+ } = args;
84
+
85
+ const tableContext = useDataTableContext();
86
+
87
+ const [width, _setWidth] = useControllableState({
88
+ value: userWidth,
89
+ defaultValue: defaultWidth ?? (colSpan ?? 1) * 140,
90
+ /**
91
+ * TODO:
92
+ * - Potential optimization: Only call when width as "stopped" changing, e.g. on mouse up or after a debounce when resizing with keyboard.
93
+ * Otherwise, this could cause excessive calls when resizing quickly.
94
+ */
95
+ onChange: onWidthChange,
96
+ });
97
+
98
+ const [isResizingWithKeyboard, setIsResizingWithKeyboard] = useState(false);
99
+ const [, setIsResizingWithMouse] = useState(false);
100
+
101
+ const setWidth = useCallback(
102
+ (newWidth: number) => {
103
+ const currentWidth = ref?.offsetWidth;
104
+ if (!currentWidth) {
105
+ return;
106
+ }
107
+
108
+ const min = parseWidth(minWidth) ?? 0;
109
+ const max = parseWidth(maxWidth) ?? Infinity;
110
+ const clamped = Math.min(Math.max(newWidth, min), max);
111
+
112
+ if (newWidth <= currentWidth && newWidth > max) {
113
+ _setWidth(newWidth);
114
+ return;
115
+ }
116
+
117
+ if (newWidth >= currentWidth && newWidth > max) {
118
+ _setWidth(currentWidth);
119
+ return;
120
+ }
121
+
122
+ _setWidth(clamped);
123
+ },
124
+ [minWidth, maxWidth, _setWidth, ref],
125
+ );
126
+
127
+ const handleKeyDown: DOMAttributes<HTMLButtonElement>["onKeyDown"] =
128
+ useCallback(
129
+ (event) => {
130
+ if (event.key === "Enter" || event.key === " ") {
131
+ setIsResizingWithKeyboard((prev) => !prev);
132
+ return;
133
+ }
134
+
135
+ if (!isResizingWithKeyboard) {
136
+ return;
137
+ }
138
+
139
+ if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
140
+ event.preventDefault();
141
+
142
+ const th = (event.target as HTMLElement).closest(
143
+ "th",
144
+ ) as HTMLTableCellElement;
145
+ const startWidth = th.offsetWidth;
146
+
147
+ const delta = event.key === "ArrowRight" ? 20 : -20;
148
+ setWidth(startWidth + delta);
149
+ }
150
+ },
151
+ [isResizingWithKeyboard, setWidth],
152
+ );
153
+
154
+ const startResize = useCallback(
155
+ (th: HTMLTableCellElement, startX: number) => {
156
+ setIsResizingWithMouse(true);
157
+ const startWidth = th.offsetWidth;
158
+
159
+ function onPointerMove(clientX: number) {
160
+ setWidth(startWidth + (clientX - startX));
161
+ }
162
+
163
+ function onMouseMove(e: MouseEvent) {
164
+ onPointerMove(e.clientX);
165
+ }
166
+
167
+ function onTouchMove(e: TouchEvent) {
168
+ e.preventDefault();
169
+ onPointerMove(e.touches[0].clientX);
170
+ }
171
+
172
+ function cleanup() {
173
+ document.removeEventListener("mousemove", onMouseMove);
174
+ document.removeEventListener("touchmove", onTouchMove);
175
+ document.removeEventListener("mouseup", cleanup);
176
+ document.removeEventListener("touchend", cleanup);
177
+ document.removeEventListener("touchcancel", cleanup);
178
+ setIsResizingWithMouse(false);
179
+ }
180
+
181
+ document.addEventListener("mousemove", onMouseMove);
182
+ document.addEventListener("touchmove", onTouchMove, { passive: false });
183
+ document.addEventListener("mouseup", cleanup);
184
+ document.addEventListener("touchend", cleanup);
185
+ document.addEventListener("touchcancel", cleanup);
186
+ },
187
+ [setWidth],
188
+ );
189
+
190
+ const handleMouseDown: DOMAttributes<HTMLButtonElement>["onMouseDown"] =
191
+ useCallback(
192
+ (event) => {
193
+ const th = (event.target as HTMLElement).closest(
194
+ "th",
195
+ ) as HTMLTableCellElement;
196
+ startResize(th, event.clientX);
197
+ },
198
+ [startResize],
199
+ );
200
+
201
+ const handleTouchStart: DOMAttributes<HTMLButtonElement>["onTouchStart"] =
202
+ useCallback(
203
+ (event) => {
204
+ const th = (event.target as HTMLElement).closest(
205
+ "th",
206
+ ) as HTMLTableCellElement;
207
+ startResize(th, event.touches[0].clientX);
208
+ },
209
+ [startResize],
210
+ );
211
+
212
+ /**
213
+ * TODO: Do we even want this?
214
+ * - + 32px padding is hardcoded now, fix this
215
+ * - Need to find widest element in column, not the header itself.
216
+ * - Should doubleclick just reset to defaultWidth? Or add a autoWidth prop.
217
+ */
218
+ const handleDoubleClick: DOMAttributes<HTMLButtonElement>["onDoubleClick"] =
219
+ useCallback(
220
+ (event) => {
221
+ const th = (event.target as HTMLElement).closest(
222
+ "th",
223
+ ) as HTMLTableCellElement;
224
+
225
+ const contentEl = th.getElementsByClassName(
226
+ "aksel-data-table__th-content",
227
+ )[0];
228
+ const range = document.createRange();
229
+ range.selectNodeContents(contentEl);
230
+ const contentWidth = range.getBoundingClientRect().width;
231
+
232
+ setWidth(contentWidth + 32);
233
+ },
234
+ [setWidth],
235
+ );
236
+
237
+ if (tableContext.layout !== "fixed") {
238
+ return {
239
+ style,
240
+ enabled: false,
241
+ };
242
+ }
243
+
244
+ return {
245
+ style: {
246
+ ...style,
247
+ width,
248
+ },
249
+ resizeHandlerProps: {
250
+ onMouseDown: handleMouseDown,
251
+ onTouchStart: handleTouchStart,
252
+ onKeyDown: handleKeyDown,
253
+ onBlur: () => setIsResizingWithKeyboard(false),
254
+ onDoubleClick: handleDoubleClick,
255
+ },
256
+ isResizingWithKeyboard,
257
+ enabled: true,
258
+ };
259
+ }
260
+
261
+ function parseWidth(width: ColumnWidth | undefined): number | undefined {
262
+ if (width == null) {
263
+ return undefined;
264
+ }
265
+ if (typeof width === "number") {
266
+ return width;
267
+ }
268
+ if (typeof width === "string") {
269
+ const parsed = parseInt(width, 10);
270
+ return Number.isNaN(parsed) ? undefined : parsed;
271
+ }
272
+ return undefined;
273
+ }
274
+
275
+ export { useTableColumnResize };
276
+ export type { ResizeProps };
@@ -0,0 +1,10 @@
1
+ import React, { createContext } from "react";
2
+
3
+ const DataTableTheadContext = createContext<boolean>(false);
4
+
5
+ function useDataTableThead(): boolean {
6
+ const context = React.useContext(DataTableTheadContext);
7
+ return context;
8
+ }
9
+
10
+ export { DataTableTheadContext, useDataTableThead };
@@ -1,16 +1,19 @@
1
1
  import React, { forwardRef } from "react";
2
2
  import { cl } from "../../../utils/helpers";
3
+ import { DataTableTheadContext } from "./DataTableThead.context";
3
4
 
4
5
  type DataTableTheadProps = React.HTMLAttributes<HTMLTableSectionElement>;
5
6
 
6
7
  const DataTableThead = forwardRef<HTMLTableSectionElement, DataTableTheadProps>(
7
8
  ({ className, ...rest }, forwardedRef) => {
8
9
  return (
9
- <thead
10
- {...rest}
11
- ref={forwardedRef}
12
- className={cl("aksel-data-table__thead", className)}
13
- />
10
+ <DataTableTheadContext.Provider value={true}>
11
+ <thead
12
+ {...rest}
13
+ ref={forwardedRef}
14
+ className={cl("aksel-data-table__thead", className)}
15
+ />
16
+ </DataTableTheadContext.Provider>
14
17
  );
15
18
  },
16
19
  );
@@ -1,12 +1,17 @@
1
1
  import React, { forwardRef } from "react";
2
2
  import { cl } from "../../../utils/helpers";
3
+ import { useDataTableContext } from "../root/DataTableRoot.context";
3
4
 
4
5
  type DataTableTrProps = React.HTMLAttributes<HTMLTableRowElement> & {
5
6
  selected?: boolean;
6
7
  };
7
8
 
8
9
  const DataTableTr = forwardRef<HTMLTableRowElement, DataTableTrProps>(
9
- ({ className, selected = false, ...rest }, forwardedRef) => {
10
+ ({ className, children, selected = false, ...rest }, forwardedRef) => {
11
+ const { layout } = useDataTableContext();
12
+
13
+ const renderFillerCell = layout === "fixed" && children;
14
+
10
15
  return (
11
16
  <tr
12
17
  {...rest}
@@ -14,7 +19,18 @@ const DataTableTr = forwardRef<HTMLTableRowElement, DataTableTrProps>(
14
19
  className={cl("aksel-data-table__tr", className, {
15
20
  "aksel-data-table__tr--selected": selected,
16
21
  })}
17
- />
22
+ >
23
+ {children}
24
+ {renderFillerCell && (
25
+ /* TODO: Consider chaning between th and td based on context */
26
+ /* using div causes illegal dom structure */
27
+ <td
28
+ aria-hidden
29
+ className="aksel-data-table__th aksel-data-table__filler-cell"
30
+ data-block-keyboard-nav
31
+ />
32
+ )}
33
+ </tr>
18
34
  );
19
35
  },
20
36
  );
@@ -1,47 +1,159 @@
1
- import React, { forwardRef } from "react";
2
- import { Box } from "../../primitives/box";
1
+ import React, { forwardRef, useState } from "react";
2
+ import { Search } from "../../form/search";
3
3
  import { VStack } from "../../primitives/stack";
4
- import { Label } from "../../typography";
4
+ import { Detail, Label } from "../../typography";
5
+ import Listbox from "../../utils/components/Listbox/root/ListboxRoot";
6
+ import { DismissableLayer } from "../../utils/components/dismissablelayer/DismissableLayer";
7
+ import { Floating } from "../../utils/components/floating/Floating";
8
+ import { useMergeRefsN } from "../../utils/hooks";
5
9
  import type { AutoCompleteOption, OptionGroup } from "./AutoSuggest.types";
6
10
 
7
11
  interface AutoSuggestProps {
8
12
  options: OptionGroup<AutoCompleteOption>[];
9
- onSelect: (value: string) => void;
13
+ onSelect: (option: AutoCompleteOption) => boolean;
10
14
  className?: string;
15
+ value: string;
16
+ onChange: (newValue: string) => void;
17
+ open: boolean;
18
+ setOpen: (open: boolean) => void;
11
19
  }
12
20
 
13
- const AutoSuggest = forwardRef<HTMLDivElement, AutoSuggestProps>(
14
- ({ options, onSelect }, ref) => {
21
+ const AutoSuggest = forwardRef<HTMLInputElement, AutoSuggestProps>(
22
+ ({ options, onSelect, value, onChange, open, setOpen }, ref) => {
23
+ const [virtuallyFocusedOptionId, setVirtuallyFocusedOptionId] =
24
+ useState("");
25
+
26
+ const [inputRef, setInputRef] = useState<HTMLInputElement | null>(null);
27
+
28
+ /* Unsure why N version works, but not regular here */
29
+ const mergedRef = useMergeRefsN([setInputRef, ref]);
30
+
31
+ const handleClose = () => {
32
+ setOpen(false);
33
+ };
34
+
35
+ const handleChange = (newValue: string) => {
36
+ onChange(newValue);
37
+ setOpen(true);
38
+ };
39
+
40
+ const handleSelectOption = (option: AutoCompleteOption) => {
41
+ const createdNewToken = onSelect(option);
42
+
43
+ if (createdNewToken) {
44
+ inputRef?.focus();
45
+ setOpen(false);
46
+ }
47
+ };
48
+
49
+ return (
50
+ <Floating>
51
+ <Listbox setVirtuallyFocusedOptionId={setVirtuallyFocusedOptionId}>
52
+ <Floating.Anchor>
53
+ <Listbox.InputSlot>
54
+ <Search
55
+ label="Tabellsøk"
56
+ variant="simple"
57
+ className="aksel-property-filter__input"
58
+ placeholder="Type to filter..."
59
+ ref={mergedRef}
60
+ value={value}
61
+ onChange={handleChange}
62
+ onClick={() => {
63
+ setOpen(true);
64
+ }}
65
+ onFocus={() => setOpen(true)}
66
+ /* onKeyDown={(e) => {
67
+ if (e.key === "Enter") {
68
+ createToken(filterText);
69
+ }
70
+ }} */
71
+ />
72
+ </Listbox.InputSlot>
73
+ </Floating.Anchor>
74
+ {open && (
75
+ <AutoSuggestPopup
76
+ options={options}
77
+ onSelect={handleSelectOption}
78
+ focusedValue={virtuallyFocusedOptionId}
79
+ setFocusedValue={setVirtuallyFocusedOptionId}
80
+ onClose={handleClose}
81
+ safeZoneAnchor={inputRef}
82
+ />
83
+ )}
84
+ </Listbox>
85
+ </Floating>
86
+ );
87
+ },
88
+ );
89
+
90
+ type AutoSuggestPopupProps = {
91
+ options: OptionGroup<AutoCompleteOption>[];
92
+ onSelect: (option: AutoCompleteOption) => void;
93
+ focusedValue: string;
94
+ setFocusedValue: (value: string) => void;
95
+ onClose: () => void;
96
+ safeZoneAnchor: HTMLInputElement | null;
97
+ };
98
+
99
+ const AutoSuggestPopup = forwardRef<HTMLDivElement, AutoSuggestPopupProps>(
100
+ (
101
+ {
102
+ options,
103
+ onSelect,
104
+ focusedValue,
105
+ setFocusedValue,
106
+ onClose,
107
+ safeZoneAnchor,
108
+ },
109
+ ref,
110
+ ) => {
15
111
  return (
16
- <Box ref={ref} padding="space-6">
17
- {options.map((group) => (
18
- <div key={group.label}>
19
- <Label as="div">{group.label}</Label>
20
- <VStack gap="space-4">
21
- {group.options.map((option) => {
22
- return (
23
- <div key={option.value}>
24
- <button
25
- type="button"
26
- onClick={() => onSelect(option.value)}
112
+ <DismissableLayer
113
+ asChild
114
+ onDismiss={onClose}
115
+ safeZone={{ anchor: safeZoneAnchor }}
116
+ >
117
+ <Floating.Content
118
+ ref={ref}
119
+ align="start"
120
+ side="bottom"
121
+ fallbackPlacements={[]}
122
+ sideOffset={8}
123
+ className="aksel-property-filter__popup"
124
+ >
125
+ <div className="aksel-property-filter__popup-inner">
126
+ <Listbox.Options setVirtuallyFocusedOptionId={setFocusedValue}>
127
+ {options.map((group) => (
128
+ <Listbox.Group key={group.label} label={group.label}>
129
+ {group.options.map((item) => (
130
+ <Listbox.Option
131
+ key={item.value}
132
+ id={item.value}
133
+ onClick={() => onSelect(item)}
134
+ hasVirtualFocus={focusedValue === item.value}
27
135
  >
28
- <span>{option.label}</span>
29
- {option.description && <span>{option.description}</span>}
30
- {option.tags && option.tags.length > 0 && (
136
+ <VStack gap="space-0">
137
+ <Label as="div">{item.label}</Label>
138
+ {item.description && (
139
+ <Detail as="div">{item.description}</Detail>
140
+ )}
141
+ </VStack>
142
+ {/* {item.tags && item.tags.length > 0 && (
31
143
  <div>
32
- {option.tags.map((tag) => (
144
+ {item.tags.map((tag) => (
33
145
  <span key={tag}>{tag}</span>
34
146
  ))}
35
147
  </div>
36
- )}
37
- </button>
38
- </div>
39
- );
40
- })}
41
- </VStack>
148
+ )} */}
149
+ </Listbox.Option>
150
+ ))}
151
+ </Listbox.Group>
152
+ ))}
153
+ </Listbox.Options>
42
154
  </div>
43
- ))}
44
- </Box>
155
+ </Floating.Content>
156
+ </DismissableLayer>
45
157
  );
46
158
  },
47
159
  );