@navikt/ds-react 6.12.0 → 6.14.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 (279) hide show
  1. package/cjs/accordion/AccordionContext.d.ts +0 -1
  2. package/cjs/alert/Alert.d.ts +4 -4
  3. package/cjs/collapsible/Collapsible.context.d.ts +0 -1
  4. package/cjs/date/context/useDateInputContext.d.ts +0 -1
  5. package/cjs/date/datepicker/parts/HeadRow.d.ts +0 -1
  6. package/cjs/date/datepicker/parts/HeadRow.js +2 -3
  7. package/cjs/date/datepicker/parts/HeadRow.js.map +1 -1
  8. package/cjs/date/datepicker/parts/Row.d.ts +0 -1
  9. package/cjs/date/datepicker/parts/TableHead.d.ts +0 -1
  10. package/cjs/date/datepicker/parts/WeekNumber.d.ts +0 -1
  11. package/cjs/date/datepicker/types.d.ts +0 -1
  12. package/cjs/date/monthpicker/types.d.ts +0 -1
  13. package/cjs/date/utils/check-dates.js +2 -2
  14. package/cjs/date/utils/check-dates.js.map +1 -1
  15. package/cjs/date/utils/get-initial-year.js +1 -2
  16. package/cjs/date/utils/get-initial-year.js.map +1 -1
  17. package/cjs/date/utils/get-month-weeks.js +2 -3
  18. package/cjs/date/utils/get-month-weeks.js.map +1 -1
  19. package/cjs/date/utils/is-match.js +2 -3
  20. package/cjs/date/utils/is-match.js.map +1 -1
  21. package/cjs/dropdown/Menu/index.d.ts +1 -1
  22. package/cjs/dropdown/context.d.ts +0 -1
  23. package/cjs/expansion-card/context.d.ts +0 -1
  24. package/cjs/form/checkbox/useCheckbox.d.ts +3 -3
  25. package/cjs/form/combobox/Combobox.d.ts +1 -1
  26. package/cjs/form/combobox/Combobox.js.map +1 -1
  27. package/cjs/form/combobox/ComboboxProvider.js +3 -1
  28. package/cjs/form/combobox/ComboboxProvider.js.map +1 -1
  29. package/cjs/form/combobox/FilteredOptions/filtered-options-util.d.ts +1 -0
  30. package/cjs/form/combobox/FilteredOptions/filtered-options-util.js +6 -1
  31. package/cjs/form/combobox/FilteredOptions/filtered-options-util.js.map +1 -1
  32. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +5 -5
  33. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  34. package/cjs/form/combobox/Input/Input.context.d.ts +20 -7
  35. package/cjs/form/combobox/Input/Input.context.js +6 -12
  36. package/cjs/form/combobox/Input/Input.context.js.map +1 -1
  37. package/cjs/form/combobox/Input/Input.d.ts +1 -1
  38. package/cjs/form/combobox/Input/Input.js +42 -18
  39. package/cjs/form/combobox/Input/Input.js.map +1 -1
  40. package/cjs/form/combobox/Input/InputController.d.ts +1 -1
  41. package/cjs/form/combobox/Input/InputController.js.map +1 -1
  42. package/cjs/form/combobox/types.d.ts +8 -4
  43. package/cjs/form/fieldset/context.d.ts +0 -1
  44. package/cjs/form/fieldset/useFieldset.d.ts +1 -1
  45. package/cjs/form/file-upload/FileUpload.context.d.ts +0 -1
  46. package/cjs/form/file-upload/parts/dropzone/dropzone.types.d.ts +0 -1
  47. package/cjs/form/file-upload/parts/item/utils/format-file-size.js +1 -2
  48. package/cjs/form/file-upload/parts/item/utils/format-file-size.js.map +1 -1
  49. package/cjs/form/file-upload/useFileUpload.d.ts +1 -2
  50. package/cjs/form/file-upload/utils/is-accepted-file-type.js +1 -2
  51. package/cjs/form/file-upload/utils/is-accepted-file-type.js.map +1 -1
  52. package/cjs/form/file-upload/utils/is-accepted-size.js +1 -2
  53. package/cjs/form/file-upload/utils/is-accepted-size.js.map +1 -1
  54. package/cjs/form/radio/useRadio.d.ts +3 -3
  55. package/cjs/form/search/context.d.ts +0 -1
  56. package/cjs/layout/base/PrimitiveAsChildProps.d.ts +0 -1
  57. package/cjs/layout/grid/HGrid.js +4 -1
  58. package/cjs/layout/grid/HGrid.js.map +1 -1
  59. package/cjs/layout/stack/Stack.js +7 -2
  60. package/cjs/layout/stack/Stack.js.map +1 -1
  61. package/cjs/layout/utilities/css.js +2 -3
  62. package/cjs/layout/utilities/css.js.map +1 -1
  63. package/cjs/list/context.d.ts +0 -1
  64. package/cjs/list/types.d.ts +0 -1
  65. package/cjs/modal/Modal.js +3 -2
  66. package/cjs/modal/Modal.js.map +1 -1
  67. package/cjs/modal/ModalUtils.js +3 -3
  68. package/cjs/modal/ModalUtils.js.map +1 -1
  69. package/cjs/modal/types.d.ts +5 -1
  70. package/cjs/overlays/dismissablelayer/DismissableLayer.d.ts +1 -1
  71. package/cjs/overlays/dismissablelayer/util/dispatchCustomEvent.js +2 -2
  72. package/cjs/overlays/dismissablelayer/util/dispatchCustomEvent.js.map +1 -1
  73. package/cjs/overlays/dismissablelayer/util/useEscapeKeydown.js +1 -2
  74. package/cjs/overlays/dismissablelayer/util/useEscapeKeydown.js.map +1 -1
  75. package/cjs/overlays/dismissablelayer/util/useFocusOutside.js +1 -2
  76. package/cjs/overlays/dismissablelayer/util/useFocusOutside.js.map +1 -1
  77. package/cjs/overlays/dismissablelayer/util/usePointerDownOutside.js +1 -2
  78. package/cjs/overlays/dismissablelayer/util/usePointerDownOutside.js.map +1 -1
  79. package/cjs/overlays/floating/Floating.utils.js +2 -3
  80. package/cjs/overlays/floating/Floating.utils.js.map +1 -1
  81. package/cjs/slot/merge-props.js +1 -2
  82. package/cjs/slot/merge-props.js.map +1 -1
  83. package/cjs/stepper/context.d.ts +0 -1
  84. package/cjs/table/context.d.ts +0 -1
  85. package/cjs/tabs/Tabs.context.d.ts +1 -2
  86. package/cjs/tabs/parts/tab/useTab.d.ts +1 -2
  87. package/cjs/tabs/parts/tab/useTab.js +1 -2
  88. package/cjs/tabs/parts/tab/useTab.js.map +1 -1
  89. package/cjs/tabs/parts/tablist/useScrollButtons.d.ts +0 -1
  90. package/cjs/tabs/parts/tablist/useScrollButtons.js +1 -2
  91. package/cjs/tabs/parts/tablist/useScrollButtons.js.map +1 -1
  92. package/cjs/tabs/parts/tablist/useTabList.js +3 -3
  93. package/cjs/tabs/parts/tablist/useTabList.js.map +1 -1
  94. package/cjs/tabs/parts/tabpanel/useTabPanel.js +1 -2
  95. package/cjs/tabs/parts/tabpanel/useTabPanel.js.map +1 -1
  96. package/cjs/tabs/useTabs.d.ts +0 -1
  97. package/cjs/tabs/useTabs.js +1 -2
  98. package/cjs/tabs/useTabs.js.map +1 -1
  99. package/cjs/timeline/hooks/usePeriodContext.d.ts +0 -1
  100. package/cjs/timeline/hooks/useRowContext.d.ts +0 -1
  101. package/cjs/timeline/hooks/useTimelineContext.d.ts +0 -1
  102. package/cjs/timeline/period/types.d.ts +0 -1
  103. package/cjs/timeline/zoom/index.d.ts +1 -1
  104. package/cjs/toggle-group/ToggleGroup.context.d.ts +1 -2
  105. package/cjs/toggle-group/parts/useToggleItem.d.ts +1 -2
  106. package/cjs/toggle-group/parts/useToggleItem.js +3 -3
  107. package/cjs/toggle-group/parts/useToggleItem.js.map +1 -1
  108. package/cjs/toggle-group/useToggleGroup.d.ts +0 -1
  109. package/cjs/toggle-group/useToggleGroup.js +1 -2
  110. package/cjs/toggle-group/useToggleGroup.js.map +1 -1
  111. package/cjs/util/composeEventHandlers.d.ts +0 -1
  112. package/cjs/util/composeEventHandlers.js +1 -2
  113. package/cjs/util/composeEventHandlers.js.map +1 -1
  114. package/cjs/util/copy.js +1 -1
  115. package/cjs/util/copy.js.map +1 -1
  116. package/cjs/util/create-context.js +1 -2
  117. package/cjs/util/create-context.js.map +1 -1
  118. package/cjs/util/debounce.js +1 -1
  119. package/cjs/util/debounce.js.map +1 -1
  120. package/cjs/util/hooks/descendants/useDescendant.d.ts +1 -1
  121. package/cjs/util/hooks/descendants/useDescendant.js +1 -2
  122. package/cjs/util/hooks/descendants/useDescendant.js.map +1 -1
  123. package/cjs/util/hooks/descendants/utils.js +4 -4
  124. package/cjs/util/hooks/descendants/utils.js.map +1 -1
  125. package/cjs/util/hooks/useCallbackRef.d.ts +0 -1
  126. package/cjs/util/hooks/useCallbackRef.js +1 -2
  127. package/cjs/util/hooks/useCallbackRef.js.map +1 -1
  128. package/cjs/util/hooks/useControllableState.js +1 -2
  129. package/cjs/util/hooks/useControllableState.js.map +1 -1
  130. package/cjs/util/hooks/useId.js +1 -2
  131. package/cjs/util/hooks/useId.js.map +1 -1
  132. package/cjs/util/hooks/useMergeRefs.d.ts +1 -1
  133. package/cjs/util/hooks/useMergeRefs.js +2 -3
  134. package/cjs/util/hooks/useMergeRefs.js.map +1 -1
  135. package/cjs/util/i18n/get.js +1 -2
  136. package/cjs/util/i18n/get.js.map +1 -1
  137. package/cjs/util/i18n/i18n.context.d.ts +0 -1
  138. package/cjs/util/i18n/i18n.context.js +2 -2
  139. package/cjs/util/i18n/i18n.context.js.map +1 -1
  140. package/cjs/util/i18n/merge.js +1 -2
  141. package/cjs/util/i18n/merge.js.map +1 -1
  142. package/cjs/util/omit.js +1 -2
  143. package/cjs/util/omit.js.map +1 -1
  144. package/cjs/util/types/AsChild.d.ts +0 -1
  145. package/cjs/util/types/AsChildProps.d.ts +0 -1
  146. package/cjs/util/virtualfocus/Context.d.ts +43 -0
  147. package/cjs/util/virtualfocus/Context.js +9 -0
  148. package/cjs/util/virtualfocus/Context.js.map +1 -0
  149. package/cjs/util/virtualfocus/SlottedDivElement.d.ts +7 -0
  150. package/cjs/util/virtualfocus/SlottedDivElement.js +46 -0
  151. package/cjs/util/virtualfocus/SlottedDivElement.js.map +1 -0
  152. package/cjs/util/virtualfocus/VirtualFocus.d.ts +62 -0
  153. package/cjs/util/virtualfocus/VirtualFocus.js +90 -0
  154. package/cjs/util/virtualfocus/VirtualFocus.js.map +1 -0
  155. package/cjs/util/virtualfocus/parts/VirtualFocusAnchor.d.ts +33 -0
  156. package/cjs/util/virtualfocus/parts/VirtualFocusAnchor.js +80 -0
  157. package/cjs/util/virtualfocus/parts/VirtualFocusAnchor.js.map +1 -0
  158. package/cjs/util/virtualfocus/parts/VirtualFocusContent.d.ts +4 -0
  159. package/cjs/util/virtualfocus/parts/VirtualFocusContent.js +45 -0
  160. package/cjs/util/virtualfocus/parts/VirtualFocusContent.js.map +1 -0
  161. package/cjs/util/virtualfocus/parts/VirtualFocusItem.d.ts +18 -0
  162. package/cjs/util/virtualfocus/parts/VirtualFocusItem.js +64 -0
  163. package/cjs/util/virtualfocus/parts/VirtualFocusItem.js.map +1 -0
  164. package/esm/accordion/AccordionContext.d.ts +0 -1
  165. package/esm/alert/Alert.d.ts +4 -4
  166. package/esm/collapsible/Collapsible.context.d.ts +0 -1
  167. package/esm/date/context/useDateInputContext.d.ts +0 -1
  168. package/esm/date/datepicker/parts/HeadRow.d.ts +0 -1
  169. package/esm/date/datepicker/parts/Row.d.ts +0 -1
  170. package/esm/date/datepicker/parts/TableHead.d.ts +0 -1
  171. package/esm/date/datepicker/parts/WeekNumber.d.ts +0 -1
  172. package/esm/date/datepicker/types.d.ts +0 -1
  173. package/esm/date/monthpicker/types.d.ts +0 -1
  174. package/esm/dropdown/Menu/index.d.ts +1 -1
  175. package/esm/dropdown/context.d.ts +0 -1
  176. package/esm/expansion-card/context.d.ts +0 -1
  177. package/esm/form/checkbox/useCheckbox.d.ts +3 -3
  178. package/esm/form/combobox/Combobox.d.ts +1 -1
  179. package/esm/form/combobox/Combobox.js.map +1 -1
  180. package/esm/form/combobox/ComboboxProvider.js +3 -1
  181. package/esm/form/combobox/ComboboxProvider.js.map +1 -1
  182. package/esm/form/combobox/FilteredOptions/filtered-options-util.d.ts +1 -0
  183. package/esm/form/combobox/FilteredOptions/filtered-options-util.js +6 -1
  184. package/esm/form/combobox/FilteredOptions/filtered-options-util.js.map +1 -1
  185. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +5 -5
  186. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  187. package/esm/form/combobox/Input/Input.context.d.ts +20 -7
  188. package/esm/form/combobox/Input/Input.context.js +7 -13
  189. package/esm/form/combobox/Input/Input.context.js.map +1 -1
  190. package/esm/form/combobox/Input/Input.d.ts +1 -1
  191. package/esm/form/combobox/Input/Input.js +43 -19
  192. package/esm/form/combobox/Input/Input.js.map +1 -1
  193. package/esm/form/combobox/Input/InputController.d.ts +1 -1
  194. package/esm/form/combobox/Input/InputController.js.map +1 -1
  195. package/esm/form/combobox/types.d.ts +8 -4
  196. package/esm/form/fieldset/context.d.ts +0 -1
  197. package/esm/form/fieldset/useFieldset.d.ts +1 -1
  198. package/esm/form/file-upload/FileUpload.context.d.ts +0 -1
  199. package/esm/form/file-upload/parts/dropzone/dropzone.types.d.ts +0 -1
  200. package/esm/form/file-upload/useFileUpload.d.ts +1 -2
  201. package/esm/form/radio/useRadio.d.ts +3 -3
  202. package/esm/form/search/context.d.ts +0 -1
  203. package/esm/layout/base/PrimitiveAsChildProps.d.ts +0 -1
  204. package/esm/layout/grid/HGrid.js +4 -1
  205. package/esm/layout/grid/HGrid.js.map +1 -1
  206. package/esm/layout/stack/Stack.js +7 -2
  207. package/esm/layout/stack/Stack.js.map +1 -1
  208. package/esm/list/context.d.ts +0 -1
  209. package/esm/list/types.d.ts +0 -1
  210. package/esm/modal/Modal.js +3 -2
  211. package/esm/modal/Modal.js.map +1 -1
  212. package/esm/modal/types.d.ts +5 -1
  213. package/esm/overlays/dismissablelayer/DismissableLayer.d.ts +1 -1
  214. package/esm/stepper/context.d.ts +0 -1
  215. package/esm/table/context.d.ts +0 -1
  216. package/esm/tabs/Tabs.context.d.ts +1 -2
  217. package/esm/tabs/parts/tab/useTab.d.ts +1 -2
  218. package/esm/tabs/parts/tablist/useScrollButtons.d.ts +0 -1
  219. package/esm/tabs/parts/tablist/useTabList.js +2 -1
  220. package/esm/tabs/parts/tablist/useTabList.js.map +1 -1
  221. package/esm/tabs/useTabs.d.ts +0 -1
  222. package/esm/timeline/hooks/usePeriodContext.d.ts +0 -1
  223. package/esm/timeline/hooks/useRowContext.d.ts +0 -1
  224. package/esm/timeline/hooks/useTimelineContext.d.ts +0 -1
  225. package/esm/timeline/period/types.d.ts +0 -1
  226. package/esm/timeline/zoom/index.d.ts +1 -1
  227. package/esm/toggle-group/ToggleGroup.context.d.ts +1 -2
  228. package/esm/toggle-group/parts/useToggleItem.d.ts +1 -2
  229. package/esm/toggle-group/parts/useToggleItem.js +2 -1
  230. package/esm/toggle-group/parts/useToggleItem.js.map +1 -1
  231. package/esm/toggle-group/useToggleGroup.d.ts +0 -1
  232. package/esm/util/composeEventHandlers.d.ts +0 -1
  233. package/esm/util/hooks/descendants/useDescendant.d.ts +1 -1
  234. package/esm/util/hooks/useCallbackRef.d.ts +0 -1
  235. package/esm/util/hooks/useMergeRefs.d.ts +1 -1
  236. package/esm/util/i18n/i18n.context.d.ts +0 -1
  237. package/esm/util/types/AsChild.d.ts +0 -1
  238. package/esm/util/types/AsChildProps.d.ts +0 -1
  239. package/esm/util/virtualfocus/Context.d.ts +43 -0
  240. package/esm/util/virtualfocus/Context.js +5 -0
  241. package/esm/util/virtualfocus/Context.js.map +1 -0
  242. package/esm/util/virtualfocus/SlottedDivElement.d.ts +7 -0
  243. package/esm/util/virtualfocus/SlottedDivElement.js +20 -0
  244. package/esm/util/virtualfocus/SlottedDivElement.js.map +1 -0
  245. package/esm/util/virtualfocus/VirtualFocus.d.ts +62 -0
  246. package/esm/util/virtualfocus/VirtualFocus.js +63 -0
  247. package/esm/util/virtualfocus/VirtualFocus.js.map +1 -0
  248. package/esm/util/virtualfocus/parts/VirtualFocusAnchor.d.ts +33 -0
  249. package/esm/util/virtualfocus/parts/VirtualFocusAnchor.js +54 -0
  250. package/esm/util/virtualfocus/parts/VirtualFocusAnchor.js.map +1 -0
  251. package/esm/util/virtualfocus/parts/VirtualFocusContent.d.ts +4 -0
  252. package/esm/util/virtualfocus/parts/VirtualFocusContent.js +19 -0
  253. package/esm/util/virtualfocus/parts/VirtualFocusContent.js.map +1 -0
  254. package/esm/util/virtualfocus/parts/VirtualFocusItem.d.ts +18 -0
  255. package/esm/util/virtualfocus/parts/VirtualFocusItem.js +38 -0
  256. package/esm/util/virtualfocus/parts/VirtualFocusItem.js.map +1 -0
  257. package/package.json +3 -3
  258. package/src/alert/Alert.tsx +4 -4
  259. package/src/form/combobox/Combobox.tsx +4 -1
  260. package/src/form/combobox/ComboboxProvider.tsx +3 -0
  261. package/src/form/combobox/FilteredOptions/filtered-options-util.ts +9 -1
  262. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +8 -5
  263. package/src/form/combobox/Input/Input.context.tsx +27 -25
  264. package/src/form/combobox/Input/Input.tsx +56 -27
  265. package/src/form/combobox/Input/InputController.tsx +1 -0
  266. package/src/form/combobox/__tests__/combobox.test.tsx +174 -66
  267. package/src/form/combobox/types.ts +11 -7
  268. package/src/layout/grid/HGrid.tsx +4 -1
  269. package/src/layout/stack/Stack.tsx +6 -2
  270. package/src/modal/Modal.tsx +3 -1
  271. package/src/modal/types.ts +5 -0
  272. package/src/tabs/parts/tablist/useTabList.ts +4 -1
  273. package/src/toggle-group/parts/useToggleItem.ts +4 -1
  274. package/src/util/virtualfocus/Context.tsx +27 -0
  275. package/src/util/virtualfocus/SlottedDivElement.tsx +17 -0
  276. package/src/util/virtualfocus/VirtualFocus.tsx +89 -0
  277. package/src/util/virtualfocus/parts/VirtualFocusAnchor.tsx +102 -0
  278. package/src/util/virtualfocus/parts/VirtualFocusContent.tsx +17 -0
  279. package/src/util/virtualfocus/parts/VirtualFocusItem.tsx +60 -0
@@ -10,5 +10,5 @@ export declare function createDescendantContext<T extends HTMLElement = HTMLElem
10
10
  descendants: DescendantsManager<T, K>;
11
11
  index: number;
12
12
  enabledIndex: number;
13
- register: (instance: T | null) => void;
13
+ register: (instance: T | null) => void | React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES];
14
14
  }];
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  /**
3
2
  * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a
4
3
  * prop or avoid re-executing effects when passed as a dependency
@@ -11,5 +11,5 @@ export declare function mergeRefs<T>(refs: PossibleRef<T>[]): React.RefCallback<
11
11
  * @param ...refs: React.Ref<T> | undefined
12
12
  * @returns React.useCallback(mergeRefs(refs), refs)
13
13
  */
14
- export declare function useMergeRefs<T>(...refs: PossibleRef<T>[]): (instance: T | null) => void;
14
+ export declare function useMergeRefs<T>(...refs: PossibleRef<T>[]): (instance: T | null) => void | React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof React.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES];
15
15
  export {};
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Component, ComponentTranslation, TranslationDictionary } from "./i18n.types.js";
3
2
  import nb from "./locales/nb.js";
4
3
  export declare const I18nContext: import("react").Context<TranslationDictionary | TranslationDictionary[]>;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export type AsChild = {
3
2
  children: React.ReactElement;
4
3
  /**
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export type AsChildProps = {
3
2
  children: React.ReactElement | false | null;
4
3
  /**
@@ -0,0 +1,43 @@
1
+ import { Dispatch, SetStateAction } from "react";
2
+ export declare const VirtualFocusDescendantsProvider: import("react").Provider<import("../hooks/descendants/descendant.js").DescendantsManager<HTMLDivElement, {
3
+ handleOnSelect: () => void;
4
+ handleOnActive: () => void;
5
+ }>>, useVirtualFocusDescendantsContext: <S extends boolean = true>(strict?: S) => S extends true ? import("../hooks/descendants/descendant.js").DescendantsManager<HTMLDivElement, {
6
+ handleOnSelect: () => void;
7
+ handleOnActive: () => void;
8
+ }> : import("../hooks/descendants/descendant.js").DescendantsManager<HTMLDivElement, {
9
+ handleOnSelect: () => void;
10
+ handleOnActive: () => void;
11
+ }> | undefined, useVirtualFocusDescendantInitializer: () => import("../hooks/descendants/descendant.js").DescendantsManager<HTMLDivElement, {
12
+ handleOnSelect: () => void;
13
+ handleOnActive: () => void;
14
+ }>, useVirtualFocusDescendant: (options?: import("../hooks/descendants/descendant.js").DescendantOptions<{
15
+ handleOnSelect: () => void;
16
+ handleOnActive: () => void;
17
+ }> | undefined) => {
18
+ descendants: import("../hooks/descendants/descendant.js").DescendantsManager<HTMLDivElement, {
19
+ handleOnSelect: () => void;
20
+ handleOnActive: () => void;
21
+ }>;
22
+ index: number;
23
+ enabledIndex: number;
24
+ register: (instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES];
25
+ };
26
+ export declare const VirtualFocusInternalContextProvider: import("react").ForwardRefExoticComponent<{
27
+ virtualFocusIdx: number;
28
+ setVirtualFocusIdx: Dispatch<SetStateAction<number>>;
29
+ loop: boolean;
30
+ uniqueId: string;
31
+ } & {
32
+ children: import("react").ReactNode;
33
+ } & import("react").RefAttributes<unknown>>, useVirtualFocusInternalContext: <S extends boolean = true>(strict?: S) => S extends true ? {
34
+ virtualFocusIdx: number;
35
+ setVirtualFocusIdx: Dispatch<SetStateAction<number>>;
36
+ loop: boolean;
37
+ uniqueId: string;
38
+ } : {
39
+ virtualFocusIdx: number;
40
+ setVirtualFocusIdx: Dispatch<SetStateAction<number>>;
41
+ loop: boolean;
42
+ uniqueId: string;
43
+ } | undefined;
@@ -0,0 +1,5 @@
1
+ import { createContext } from "../create-context.js";
2
+ import { createDescendantContext } from "../hooks/descendants/useDescendant.js";
3
+ export const [VirtualFocusDescendantsProvider, useVirtualFocusDescendantsContext, useVirtualFocusDescendantInitializer, useVirtualFocusDescendant,] = createDescendantContext();
4
+ export const [VirtualFocusInternalContextProvider, useVirtualFocusInternalContext,] = createContext();
5
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../src/util/virtualfocus/Context.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAG7E,MAAM,CAAC,MAAM,CACX,+BAA+B,EAC/B,iCAAiC,EACjC,oCAAoC,EACpC,yBAAyB,EAC1B,GAAG,uBAAuB,EAMxB,CAAC;AAEJ,MAAM,CAAC,MAAM,CACX,mCAAmC,EACnC,8BAA8B,EAC/B,GAAG,aAAa,EAKb,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ interface SlottedDivProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ asChild?: boolean;
4
+ }
5
+ declare const SlottedDivElement: React.ForwardRefExoticComponent<SlottedDivProps & React.RefAttributes<HTMLDivElement>>;
6
+ type SlottedDivElementRef = React.ElementRef<typeof SlottedDivElement>;
7
+ export { SlottedDivElement, type SlottedDivElementRef, type SlottedDivProps };
@@ -0,0 +1,20 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { forwardRef } from "react";
13
+ import { Slot } from "../../slot/Slot.js";
14
+ const SlottedDivElement = forwardRef((_a, forwardedRef) => {
15
+ var { asChild } = _a, rest = __rest(_a, ["asChild"]);
16
+ const Comp = asChild ? Slot : "div";
17
+ return React.createElement(Comp, Object.assign({}, rest, { ref: forwardedRef }));
18
+ });
19
+ export { SlottedDivElement };
20
+ //# sourceMappingURL=SlottedDivElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlottedDivElement.js","sourceRoot":"","sources":["../../../src/util/virtualfocus/SlottedDivElement.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAMvC,MAAM,iBAAiB,GAAG,UAAU,CAClC,CAAC,EAAoB,EAAE,YAAY,EAAE,EAAE;QAAtC,EAAE,OAAO,OAAW,EAAN,IAAI,cAAlB,WAAoB,CAAF;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,OAAO,oBAAC,IAAI,oBAAK,IAAI,IAAE,GAAG,EAAE,YAAY,IAAI,CAAC;AAC/C,CAAC,CACF,CAAC;AAIF,OAAO,EAAE,iBAAiB,EAAmD,CAAC"}
@@ -0,0 +1,62 @@
1
+ import React from "react";
2
+ type VirtualFocusProps = {
3
+ children: React.ReactNode;
4
+ /**
5
+ * Whether to cause focus to loop around when it hits the first or last element
6
+ * @default false
7
+ **/
8
+ loop?: boolean;
9
+ };
10
+ /**
11
+ * A component that manages a virtual focus using the 'up' and 'down'
12
+ * arrow keys as well as selection with 'Return'.
13
+ *
14
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/virtualfocus)
15
+ * @see 🏷️ {@link AccordionProps}
16
+ *
17
+ * @example
18
+ * ```jsx
19
+ * <VirtualFocus>
20
+ * <VirtualFocus.Anchor
21
+ * role="combobox"
22
+ * onSelect={() => {
23
+ * console.log("you selected the anchor");
24
+ * }}
25
+ * onActive={() => {
26
+ * console.log("the anchor is now virtually focused");
27
+ * }}
28
+ * >
29
+ * <input type="text" />
30
+ * </VirtualFocus.Anchor>
31
+ * <VirtualFocus.Content>
32
+ * <VirtualFocus.Item
33
+ * onSelect={() => {
34
+ * console.log("you selected the item");
35
+ * }}
36
+ * onActive={() => {
37
+ * console.log("the item is now virtually focused");
38
+ * }}
39
+ * >
40
+ * <p>item 1</p>
41
+ * </VirtualFocus.Item>
42
+ * <VirtualFocus.Item
43
+ * onSelect={() => {
44
+ * console.log("you selected the item");
45
+ * }}
46
+ * onActive={() => {
47
+ * console.log("the item is now virtually focused");
48
+ * }}
49
+ * >
50
+ * <p>item 2</p>
51
+ * </VirtualFocus.Item>
52
+ * </VirtualFocus.Content>
53
+ * </VirtualFocus>
54
+ * ```
55
+ */
56
+ export declare const VirtualFocus: {
57
+ ({ children, loop }: VirtualFocusProps): React.JSX.Element;
58
+ Anchor: React.ForwardRefExoticComponent<import("./parts/VirtualFocusAnchor.js").VirtualFocusAnchorProps & React.RefAttributes<HTMLInputElement>>;
59
+ Item: React.ForwardRefExoticComponent<import("./parts/VirtualFocusItem.js").VirtualFocusItemProps & React.RefAttributes<HTMLElement>>;
60
+ Content: React.ForwardRefExoticComponent<import("./parts/VirtualFocusContent.js").VirtualFocusContentProps & React.RefAttributes<HTMLDivElement>>;
61
+ };
62
+ export default VirtualFocus;
@@ -0,0 +1,63 @@
1
+ import React, { useState } from "react";
2
+ import { useId } from "../../util/hooks/index.js";
3
+ import { VirtualFocusDescendantsProvider, VirtualFocusInternalContextProvider, useVirtualFocusDescendantInitializer, } from "./Context.js";
4
+ import { VirtualFocusAnchor } from "./parts/VirtualFocusAnchor.js";
5
+ import { VirtualFocusContent } from "./parts/VirtualFocusContent.js";
6
+ import { VirtualFocusItem } from "./parts/VirtualFocusItem.js";
7
+ /**
8
+ * A component that manages a virtual focus using the 'up' and 'down'
9
+ * arrow keys as well as selection with 'Return'.
10
+ *
11
+ * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/virtualfocus)
12
+ * @see 🏷️ {@link AccordionProps}
13
+ *
14
+ * @example
15
+ * ```jsx
16
+ * <VirtualFocus>
17
+ * <VirtualFocus.Anchor
18
+ * role="combobox"
19
+ * onSelect={() => {
20
+ * console.log("you selected the anchor");
21
+ * }}
22
+ * onActive={() => {
23
+ * console.log("the anchor is now virtually focused");
24
+ * }}
25
+ * >
26
+ * <input type="text" />
27
+ * </VirtualFocus.Anchor>
28
+ * <VirtualFocus.Content>
29
+ * <VirtualFocus.Item
30
+ * onSelect={() => {
31
+ * console.log("you selected the item");
32
+ * }}
33
+ * onActive={() => {
34
+ * console.log("the item is now virtually focused");
35
+ * }}
36
+ * >
37
+ * <p>item 1</p>
38
+ * </VirtualFocus.Item>
39
+ * <VirtualFocus.Item
40
+ * onSelect={() => {
41
+ * console.log("you selected the item");
42
+ * }}
43
+ * onActive={() => {
44
+ * console.log("the item is now virtually focused");
45
+ * }}
46
+ * >
47
+ * <p>item 2</p>
48
+ * </VirtualFocus.Item>
49
+ * </VirtualFocus.Content>
50
+ * </VirtualFocus>
51
+ * ```
52
+ */
53
+ export const VirtualFocus = ({ children, loop = false }) => {
54
+ const descendants = useVirtualFocusDescendantInitializer();
55
+ const [virtualFocusIdx, setVirtualFocusIdx] = useState(0);
56
+ return (React.createElement(VirtualFocusInternalContextProvider, { virtualFocusIdx: virtualFocusIdx, setVirtualFocusIdx: setVirtualFocusIdx, loop: loop, uniqueId: useId() },
57
+ React.createElement(VirtualFocusDescendantsProvider, { value: descendants }, children)));
58
+ };
59
+ VirtualFocus.Anchor = VirtualFocusAnchor;
60
+ VirtualFocus.Item = VirtualFocusItem;
61
+ VirtualFocus.Content = VirtualFocusContent;
62
+ export default VirtualFocus;
63
+ //# sourceMappingURL=VirtualFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualFocus.js","sourceRoot":"","sources":["../../../src/util/virtualfocus/VirtualFocus.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EACL,+BAA+B,EAC/B,mCAAmC,EACnC,oCAAoC,GACrC,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAW5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,KAAK,EAAqB,EAAE,EAAE;IAC5E,MAAM,WAAW,GAAG,oCAAoC,EAAE,CAAC;IAC3D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1D,OAAO,CACL,oBAAC,mCAAmC,IAClC,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,KAAK,EAAE;QAEjB,oBAAC,+BAA+B,IAAC,KAAK,EAAE,WAAW,IAChD,QAAQ,CACuB,CACE,CACvC,CAAC;AACJ,CAAC,CAAC;AAEF,YAAY,CAAC,MAAM,GAAG,kBAAkB,CAAC;AACzC,YAAY,CAAC,IAAI,GAAG,gBAAgB,CAAC;AACrC,YAAY,CAAC,OAAO,GAAG,mBAAmB,CAAC;AAE3C,eAAe,YAAY,CAAC"}
@@ -0,0 +1,33 @@
1
+ import React from "react";
2
+ export interface VirtualFocusAnchorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "id"> {
3
+ /**
4
+ * The role of the container. This is a limited subset of roles that
5
+ * require manual focus management.
6
+ *
7
+ * Children that are to get focus inside this container element shall be
8
+ * pointed to by `aria-activedescendant`.
9
+ **/
10
+ role: "combobox" | "grid" | "listbox" | "menu" | "menubar" | "radiogroup" | "tree" | "treegrid" | "tablist";
11
+ /**
12
+ * The function that is run when the focused element
13
+ * is to be selected (eg. do an actual search, change route... etc)
14
+ */
15
+ onSelect: () => void;
16
+ /**
17
+ * The function that is run when the element gets
18
+ * virtual focus set to it.
19
+ */
20
+ onActive: () => void;
21
+ children: React.ReactElement;
22
+ /**
23
+ * Set this to `0` if you want the Anchor itself
24
+ * to be focusable. Since this Anchor is hoisted & merged with
25
+ * its first child, you most likely want to keep this as `0`.
26
+ * @default 0
27
+ */
28
+ tabIndex?: number;
29
+ }
30
+ /**
31
+ * Must have a single child that is an input element.
32
+ */
33
+ export declare const VirtualFocusAnchor: React.ForwardRefExoticComponent<VirtualFocusAnchorProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,54 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { forwardRef } from "react";
13
+ import { Slot } from "../../../slot/Slot.js";
14
+ import { composeEventHandlers } from "../../composeEventHandlers.js";
15
+ import { useMergeRefs } from "../../hooks/index.js";
16
+ import { useVirtualFocusDescendant, useVirtualFocusInternalContext, } from "../Context.js";
17
+ /**
18
+ * Must have a single child that is an input element.
19
+ */
20
+ export const VirtualFocusAnchor = forwardRef((_a, ref) => {
21
+ var { onSelect, onActive, children } = _a, rest = __rest(_a, ["onSelect", "onActive", "children"]);
22
+ const { virtualFocusIdx, setVirtualFocusIdx, loop, uniqueId } = useVirtualFocusInternalContext();
23
+ const { register, descendants, index } = useVirtualFocusDescendant({
24
+ handleOnActive: () => {
25
+ setVirtualFocusIdx(0);
26
+ onActive();
27
+ },
28
+ handleOnSelect: onSelect,
29
+ });
30
+ const mergedRefs = useMergeRefs(ref, register);
31
+ return (React.createElement(Slot, Object.assign({ ref: mergedRefs, tabIndex: 0 }, rest, { id: `virtualfocus-${uniqueId}-${index}`, "aria-owns": `virtualfocus-${uniqueId}-content`, "aria-controls": `virtualfocus-${uniqueId}-content`, "aria-activedescendant": `virtualfocus-${uniqueId}-${virtualFocusIdx}`, onKeyDown: composeEventHandlers(rest.onKeyDown, (event) => {
32
+ if (event.key === "ArrowDown") {
33
+ event.preventDefault();
34
+ const to_focus_descendant = descendants.next(virtualFocusIdx, loop);
35
+ if (to_focus_descendant) {
36
+ to_focus_descendant.handleOnActive();
37
+ }
38
+ }
39
+ else if (event.key === "ArrowUp") {
40
+ event.preventDefault();
41
+ const to_focus_descendant = descendants.prev(virtualFocusIdx, loop);
42
+ if (to_focus_descendant) {
43
+ to_focus_descendant.handleOnActive();
44
+ }
45
+ }
46
+ else if (event.key === "Enter") {
47
+ const curr = descendants.item(virtualFocusIdx);
48
+ if (curr === null || curr === void 0 ? void 0 : curr.handleOnSelect) {
49
+ curr.handleOnSelect();
50
+ }
51
+ }
52
+ }) }), children));
53
+ });
54
+ //# sourceMappingURL=VirtualFocusAnchor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualFocusAnchor.js","sourceRoot":"","sources":["../../../../src/util/virtualfocus/parts/VirtualFocusAnchor.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAyCpB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAG1C,CAAC,EAAyC,EAAE,GAAG,EAAE,EAAE;QAAlD,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,OAAW,EAAN,IAAI,cAAvC,oCAAyC,CAAF;IACxC,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,GAC3D,8BAA8B,EAAE,CAAC;IAEnC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,yBAAyB,CAAC;QACjE,cAAc,EAAE,GAAG,EAAE;YACnB,kBAAkB,CAAC,CAAC,CAAC,CAAC;YACtB,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,cAAc,EAAE,QAAQ;KACzB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE/C,OAAO,CACL,oBAAC,IAAI,kBACH,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,CAAC,IACP,IAAI,IACR,EAAE,EAAE,gBAAgB,QAAQ,IAAI,KAAK,EAAE,eAC5B,gBAAgB,QAAQ,UAAU,mBAC9B,gBAAgB,QAAQ,UAAU,2BAC1B,gBAAgB,QAAQ,IAAI,eAAe,EAAE,EACpE,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACxD,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;gBAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gBACpE,IAAI,mBAAmB,EAAE,CAAC;oBACxB,mBAAmB,CAAC,cAAc,EAAE,CAAC;gBACvC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;gBACpE,IAAI,mBAAmB,EAAE,CAAC;oBACxB,mBAAmB,CAAC,cAAc,EAAE,CAAC;gBACvC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC/C,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,EAAE,CAAC;oBACzB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,KAED,QAAQ,CACJ,CACR,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ export interface VirtualFocusContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "id"> {
3
+ }
4
+ export declare const VirtualFocusContent: React.ForwardRefExoticComponent<VirtualFocusContentProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,19 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { forwardRef } from "react";
13
+ import { useVirtualFocusInternalContext } from "../Context.js";
14
+ export const VirtualFocusContent = forwardRef((_a, ref) => {
15
+ var { children } = _a, rest = __rest(_a, ["children"]);
16
+ const { uniqueId } = useVirtualFocusInternalContext();
17
+ return (React.createElement("div", Object.assign({ ref: ref }, rest, { id: `virtualfocus-${uniqueId}-content` }), children));
18
+ });
19
+ //# sourceMappingURL=VirtualFocusContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualFocusContent.js","sourceRoot":"","sources":["../../../../src/util/virtualfocus/parts/VirtualFocusContent.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAK5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAG3C,CAAC,EAAqB,EAAE,GAAG,EAAE,EAAE;QAA9B,EAAE,QAAQ,OAAW,EAAN,IAAI,cAAnB,YAAqB,CAAF;IACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,8BAA8B,EAAE,CAAC;IACtD,OAAO,CACL,2CAAK,GAAG,EAAE,GAAG,IAAM,IAAI,IAAE,EAAE,EAAE,gBAAgB,QAAQ,UAAU,KAC5D,QAAQ,CACL,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ export interface VirtualFocusItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "id" | "tabIndex"> {
3
+ /**
4
+ * The function that is run when the element is focused
5
+ * (virtually, not actual focus, eg. set a border around an item)
6
+ */
7
+ onActive: () => void;
8
+ /**
9
+ * The function that is run when the focused element
10
+ * is to be selected (eg. do an actual search, change route... etc)
11
+ */
12
+ onSelect: () => void;
13
+ children: React.ReactNode;
14
+ }
15
+ /**
16
+ * Contains an item you want to be iterable via virtual focus.
17
+ */
18
+ export declare const VirtualFocusItem: React.ForwardRefExoticComponent<VirtualFocusItemProps & React.RefAttributes<HTMLElement>>;
@@ -0,0 +1,38 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { forwardRef } from "react";
13
+ import { Slot } from "../../../slot/Slot.js";
14
+ import { composeEventHandlers } from "../../composeEventHandlers.js";
15
+ import { useMergeRefs } from "../../hooks/index.js";
16
+ import { useVirtualFocusDescendant, useVirtualFocusInternalContext, } from "../Context.js";
17
+ /**
18
+ * Contains an item you want to be iterable via virtual focus.
19
+ */
20
+ export const VirtualFocusItem = forwardRef((_a, ref) => {
21
+ var { children, onActive, onSelect } = _a, rest = __rest(_a, ["children", "onActive", "onSelect"]);
22
+ const { virtualFocusIdx, setVirtualFocusIdx, uniqueId } = useVirtualFocusInternalContext();
23
+ const { register, index } = useVirtualFocusDescendant({
24
+ handleOnActive: () => {
25
+ setVirtualFocusIdx(index);
26
+ onActive();
27
+ },
28
+ handleOnSelect: onSelect,
29
+ });
30
+ const mergedRefs = useMergeRefs(ref, register);
31
+ return (React.createElement(Slot, Object.assign({ ref: mergedRefs }, rest, { id: `virtualfocus-${uniqueId}-${index}`, "data-aksel-virtualfocus": virtualFocusIdx === index, tabIndex: -1, onClick: composeEventHandlers(rest.onClick, () => {
32
+ onSelect();
33
+ }), onMouseMove: composeEventHandlers(rest.onMouseMove, () => {
34
+ setVirtualFocusIdx(index);
35
+ onActive();
36
+ }) }), children));
37
+ });
38
+ //# sourceMappingURL=VirtualFocusItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualFocusItem.js","sourceRoot":"","sources":["../../../../src/util/virtualfocus/parts/VirtualFocusItem.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAiBpB;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CACxC,CAAC,EAAyC,EAAE,GAAG,EAAE,EAAE;QAAlD,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,OAAW,EAAN,IAAI,cAAvC,oCAAyC,CAAF;IACtC,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GACrD,8BAA8B,EAAE,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,yBAAyB,CAAC;QACpD,cAAc,EAAE,GAAG,EAAE;YACnB,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,cAAc,EAAE,QAAQ;KACzB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC/C,OAAO,CACL,oBAAC,IAAI,kBACH,GAAG,EAAE,UAAU,IACX,IAAI,IACR,EAAE,EAAE,gBAAgB,QAAQ,IAAI,KAAK,EAAE,6BACd,eAAe,KAAK,KAAK,EAClD,QAAQ,EAAE,CAAC,CAAC,EACZ,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/C,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC,EACF,WAAW,EAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YACvD,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1B,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC,KAED,QAAQ,CACJ,CACR,CAAC;AACJ,CAAC,CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@navikt/ds-react",
3
- "version": "6.12.0",
3
+ "version": "6.14.0",
4
4
  "description": "React components from the Norwegian Labour and Welfare Administration.",
5
5
  "author": "Aksel, a team part of the Norwegian Labour and Welfare Administration.",
6
6
  "license": "MIT",
@@ -594,8 +594,8 @@
594
594
  "dependencies": {
595
595
  "@floating-ui/react": "0.25.4",
596
596
  "@floating-ui/react-dom": "^2.0.9",
597
- "@navikt/aksel-icons": "^6.12.0",
598
- "@navikt/ds-tokens": "^6.12.0",
597
+ "@navikt/aksel-icons": "^6.14.0",
598
+ "@navikt/ds-tokens": "^6.14.0",
599
599
  "clsx": "^2.1.0",
600
600
  "date-fns": "^3.0.0",
601
601
  "react-day-picker": "8.10.0"
@@ -16,7 +16,7 @@ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
16
16
  */
17
17
  children: React.ReactNode;
18
18
  /**
19
- * Changes colors and icon usage when changed.
19
+ * Level of severity. Changes colors and icon.
20
20
  */
21
21
  variant: "error" | "warning" | "info" | "success";
22
22
  /**
@@ -35,15 +35,15 @@ export interface AlertProps extends React.HTMLAttributes<HTMLDivElement> {
35
35
  */
36
36
  contentMaxWidth?: boolean;
37
37
  /**
38
- * Removes background from Alert.
38
+ * Removes background, border and padding.
39
39
  * @default false
40
40
  */
41
41
  inline?: boolean;
42
42
  /**
43
- * Removes close-button(X) when false.
43
+ * Adds a close-button (X).
44
44
  *
45
45
  * **Requires onClose to be set**.
46
- * @default true
46
+ * @default false
47
47
  */
48
48
  closeButton?: boolean;
49
49
  /**
@@ -10,7 +10,10 @@ import { ComboboxProps } from "./types";
10
10
 
11
11
  export const Combobox = forwardRef<
12
12
  HTMLInputElement,
13
- Omit<ComboboxProps, "onChange" | "options" | "size" | "onClear" | "value">
13
+ Omit<
14
+ ComboboxProps,
15
+ "onChange" | "options" | "size" | "onClear" | "value" | "disabled"
16
+ >
14
17
  >((props, ref) => {
15
18
  const { className, hideLabel = false, description, label, ...rest } = props;
16
19
 
@@ -35,6 +35,7 @@ const ComboboxProvider = forwardRef<HTMLInputElement, ComboboxProps>(
35
35
  allowNewValues = false,
36
36
  children,
37
37
  defaultValue,
38
+ disabled,
38
39
  error,
39
40
  errorId,
40
41
  filteredOptions: externalFilteredOptions,
@@ -60,6 +61,8 @@ const ComboboxProvider = forwardRef<HTMLInputElement, ComboboxProps>(
60
61
  <InputContextProvider
61
62
  value={{
62
63
  defaultValue,
64
+ description: rest.description,
65
+ disabled,
63
66
  error,
64
67
  errorId,
65
68
  id,
@@ -4,11 +4,18 @@ const normalizeText = (text: string): string =>
4
4
  typeof text === "string" ? text.toLocaleLowerCase().trim() : "";
5
5
 
6
6
  const isPartOfText = (value: string, text: string) =>
7
- normalizeText(text).startsWith(normalizeText(value ?? ""));
7
+ normalizeText(text).includes(normalizeText(value ?? ""));
8
8
 
9
9
  const getMatchingValuesFromList = (value: string, list: ComboboxOption[]) =>
10
10
  list.filter((listItem) => isPartOfText(value, listItem.label));
11
11
 
12
+ const getFirstValueStartingWith = (text: string, list: ComboboxOption[]) => {
13
+ const normalizedText = normalizeText(text);
14
+ return list.find((listItem) =>
15
+ normalizeText(listItem.label).startsWith(normalizedText),
16
+ );
17
+ };
18
+
12
19
  const getFilteredOptionsId = (comboboxId: string) =>
13
20
  `${comboboxId}-filtered-options`;
14
21
 
@@ -37,4 +44,5 @@ export default {
37
44
  getIsLoadingId,
38
45
  getNoHitsId,
39
46
  getMaxSelectedOptionsId,
47
+ getFirstValueStartingWith,
40
48
  };
@@ -106,16 +106,19 @@ const FilteredOptionsProvider = ({
106
106
  }, [allowNewValues, customOptions, id, options, value]);
107
107
 
108
108
  useClientLayoutEffect(() => {
109
+ const autoCompleteCandidate =
110
+ filteredOptionsUtils.getFirstValueStartingWith(
111
+ searchTerm,
112
+ filteredOptions,
113
+ )?.label;
109
114
  if (
110
115
  shouldAutocomplete &&
111
- filteredOptionsUtils.normalizeText(searchTerm) !== "" &&
112
- (previousSearchTerm?.length || 0) < searchTerm.length &&
113
- filteredOptions.length > 0
116
+ autoCompleteCandidate &&
117
+ (previousSearchTerm?.length || 0) < searchTerm.length
114
118
  ) {
115
119
  setValue(
116
- `${searchTerm}${filteredOptions[0].label.substring(searchTerm.length)}`,
120
+ `${searchTerm}${autoCompleteCandidate.substring(searchTerm.length)}`,
117
121
  );
118
- setSearchTerm(searchTerm);
119
122
  }
120
123
  }, [
121
124
  filteredOptions,