@navikt/ds-react 7.7.0 → 7.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 (278) hide show
  1. package/cjs/chips/Removable.d.ts +0 -5
  2. package/cjs/chips/Removable.js +2 -2
  3. package/cjs/chips/Removable.js.map +1 -1
  4. package/cjs/date/context/index.d.ts +2 -1
  5. package/cjs/date/context/index.js +5 -2
  6. package/cjs/date/context/index.js.map +1 -1
  7. package/cjs/date/context/useDateInputContext.d.ts +3 -3
  8. package/cjs/date/context/useDateInputContext.js +4 -4
  9. package/cjs/date/context/useDateInputContext.js.map +1 -1
  10. package/cjs/date/context/useDateTranslationContext.d.ts +8 -0
  11. package/cjs/date/context/useDateTranslationContext.js +7 -0
  12. package/cjs/date/context/useDateTranslationContext.js.map +1 -0
  13. package/cjs/date/datepicker/DatePicker.js +18 -16
  14. package/cjs/date/datepicker/DatePicker.js.map +1 -1
  15. package/cjs/date/datepicker/DatePickerStandalone.js +17 -14
  16. package/cjs/date/datepicker/DatePickerStandalone.js.map +1 -1
  17. package/cjs/date/datepicker/parts/Caption.js +2 -3
  18. package/cjs/date/datepicker/parts/Caption.js.map +1 -1
  19. package/cjs/date/datepicker/parts/DropdownCaption.js +2 -2
  20. package/cjs/date/datepicker/parts/DropdownCaption.js.map +1 -1
  21. package/cjs/date/datepicker/parts/WeekNumber.js +3 -4
  22. package/cjs/date/datepicker/parts/WeekNumber.js.map +1 -1
  23. package/cjs/date/datepicker/parts/WeekRow.js +2 -3
  24. package/cjs/date/datepicker/parts/WeekRow.js.map +1 -1
  25. package/cjs/date/datepicker/types.d.ts +8 -0
  26. package/cjs/date/monthpicker/MonthCaption.js +1 -3
  27. package/cjs/date/monthpicker/MonthCaption.js.map +1 -1
  28. package/cjs/date/monthpicker/MonthPicker.js +30 -28
  29. package/cjs/date/monthpicker/MonthPicker.js.map +1 -1
  30. package/cjs/date/monthpicker/MonthPickerStandalone.js +16 -12
  31. package/cjs/date/monthpicker/MonthPickerStandalone.js.map +1 -1
  32. package/cjs/date/monthpicker/types.d.ts +8 -0
  33. package/cjs/date/parts/DateInput.js +1 -2
  34. package/cjs/date/parts/DateInput.js.map +1 -1
  35. package/cjs/date/parts/DateWrapper.d.ts +3 -1
  36. package/cjs/date/parts/DateWrapper.js +3 -3
  37. package/cjs/date/parts/DateWrapper.js.map +1 -1
  38. package/cjs/date/utils/index.d.ts +1 -1
  39. package/cjs/date/utils/index.js +2 -1
  40. package/cjs/date/utils/index.js.map +1 -1
  41. package/cjs/date/utils/locale.d.ts +12 -2
  42. package/cjs/date/utils/locale.js +18 -2
  43. package/cjs/date/utils/locale.js.map +1 -1
  44. package/cjs/form/combobox/Combobox.d.ts +1 -1
  45. package/cjs/form/combobox/ComboboxWrapper.js +6 -6
  46. package/cjs/form/combobox/ComboboxWrapper.js.map +1 -1
  47. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +4 -4
  48. package/cjs/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  49. package/cjs/form/combobox/FilteredOptions/FilteredOptionsItem.js +1 -1
  50. package/cjs/form/combobox/FilteredOptions/FilteredOptionsItem.js.map +1 -1
  51. package/cjs/form/combobox/FilteredOptions/MaxSelectedMessage.d.ts +1 -1
  52. package/cjs/form/combobox/FilteredOptions/MaxSelectedMessage.js +2 -5
  53. package/cjs/form/combobox/FilteredOptions/MaxSelectedMessage.js.map +1 -1
  54. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +4 -4
  55. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  56. package/cjs/form/combobox/Input/Input.js +1 -1
  57. package/cjs/form/combobox/Input/Input.js.map +1 -1
  58. package/cjs/form/combobox/Input/InputController.d.ts +1 -1
  59. package/cjs/form/combobox/Input/InputController.js +7 -9
  60. package/cjs/form/combobox/Input/InputController.js.map +1 -1
  61. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.d.ts +2 -1
  62. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.js +9 -5
  63. package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
  64. package/cjs/form/combobox/types.d.ts +7 -17
  65. package/cjs/form/search/Search.d.ts +2 -1
  66. package/cjs/form/search/Search.js.map +1 -1
  67. package/cjs/form/textarea/Textarea.d.ts +1 -0
  68. package/cjs/form/textarea/Textarea.js.map +1 -1
  69. package/cjs/guide-panel/GuidePanel.js +11 -3
  70. package/cjs/guide-panel/GuidePanel.js.map +1 -1
  71. package/cjs/guide-panel/Illustration.d.ts +2 -8
  72. package/cjs/guide-panel/Illustration.darkside.d.ts +2 -0
  73. package/cjs/guide-panel/Illustration.darkside.js +30 -0
  74. package/cjs/guide-panel/Illustration.darkside.js.map +1 -0
  75. package/cjs/guide-panel/Illustration.js +2 -18
  76. package/cjs/guide-panel/Illustration.js.map +1 -1
  77. package/cjs/guide-panel/index.d.ts +0 -1
  78. package/cjs/guide-panel/index.js +1 -3
  79. package/cjs/guide-panel/index.js.map +1 -1
  80. package/cjs/index.d.ts +1 -1
  81. package/cjs/index.js +2 -3
  82. package/cjs/index.js.map +1 -1
  83. package/cjs/modal/Modal.js +1 -1
  84. package/cjs/modal/Modal.js.map +1 -1
  85. package/cjs/modal/ModalHeader.js +1 -1
  86. package/cjs/modal/ModalHeader.js.map +1 -1
  87. package/cjs/popover/Popover.js +1 -1
  88. package/cjs/popover/Popover.js.map +1 -1
  89. package/cjs/provider/Provider.d.ts +35 -10
  90. package/cjs/provider/Provider.js +13 -14
  91. package/cjs/provider/Provider.js.map +1 -1
  92. package/cjs/table/ExpandableRow.js +3 -3
  93. package/cjs/table/ExpandableRow.js.map +1 -1
  94. package/cjs/tabs/Tabs.context.d.ts +1 -1
  95. package/cjs/timeline/Timeline.d.ts +1 -0
  96. package/cjs/timeline/Timeline.js.map +1 -1
  97. package/cjs/util/i18n/i18n.context.d.ts +1 -1
  98. package/cjs/util/i18n/i18n.context.js +15 -14
  99. package/cjs/util/i18n/i18n.context.js.map +1 -1
  100. package/cjs/util/i18n/locales/en.d.ts +50 -54
  101. package/cjs/util/i18n/locales/en.js +52 -56
  102. package/cjs/util/i18n/locales/en.js.map +1 -1
  103. package/cjs/util/i18n/locales/index.d.ts +3 -0
  104. package/cjs/util/i18n/locales/index.js +14 -0
  105. package/cjs/util/i18n/locales/index.js.map +1 -0
  106. package/cjs/util/i18n/locales/nb.d.ts +53 -57
  107. package/cjs/util/i18n/locales/nb.js +56 -60
  108. package/cjs/util/i18n/locales/nb.js.map +1 -1
  109. package/cjs/util/i18n/locales/nn.d.ts +50 -54
  110. package/cjs/util/i18n/locales/nn.js +52 -56
  111. package/cjs/util/i18n/locales/nn.js.map +1 -1
  112. package/esm/chips/Removable.d.ts +0 -5
  113. package/esm/chips/Removable.js +2 -2
  114. package/esm/chips/Removable.js.map +1 -1
  115. package/esm/date/context/index.d.ts +2 -1
  116. package/esm/date/context/index.js +2 -1
  117. package/esm/date/context/index.js.map +1 -1
  118. package/esm/date/context/useDateInputContext.d.ts +3 -3
  119. package/esm/date/context/useDateInputContext.js +3 -3
  120. package/esm/date/context/useDateInputContext.js.map +1 -1
  121. package/esm/date/context/useDateTranslationContext.d.ts +8 -0
  122. package/esm/date/context/useDateTranslationContext.js +3 -0
  123. package/esm/date/context/useDateTranslationContext.js.map +1 -0
  124. package/esm/date/datepicker/DatePicker.js +21 -19
  125. package/esm/date/datepicker/DatePicker.js.map +1 -1
  126. package/esm/date/datepicker/DatePickerStandalone.js +19 -16
  127. package/esm/date/datepicker/DatePickerStandalone.js.map +1 -1
  128. package/esm/date/datepicker/parts/Caption.js +2 -3
  129. package/esm/date/datepicker/parts/Caption.js.map +1 -1
  130. package/esm/date/datepicker/parts/DropdownCaption.js +3 -3
  131. package/esm/date/datepicker/parts/DropdownCaption.js.map +1 -1
  132. package/esm/date/datepicker/parts/WeekNumber.js +3 -4
  133. package/esm/date/datepicker/parts/WeekNumber.js.map +1 -1
  134. package/esm/date/datepicker/parts/WeekRow.js +2 -3
  135. package/esm/date/datepicker/parts/WeekRow.js.map +1 -1
  136. package/esm/date/datepicker/types.d.ts +8 -0
  137. package/esm/date/monthpicker/MonthCaption.js +2 -4
  138. package/esm/date/monthpicker/MonthCaption.js.map +1 -1
  139. package/esm/date/monthpicker/MonthPicker.js +33 -31
  140. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  141. package/esm/date/monthpicker/MonthPickerStandalone.js +18 -14
  142. package/esm/date/monthpicker/MonthPickerStandalone.js.map +1 -1
  143. package/esm/date/monthpicker/types.d.ts +8 -0
  144. package/esm/date/parts/DateInput.js +2 -3
  145. package/esm/date/parts/DateInput.js.map +1 -1
  146. package/esm/date/parts/DateWrapper.d.ts +3 -1
  147. package/esm/date/parts/DateWrapper.js +4 -4
  148. package/esm/date/parts/DateWrapper.js.map +1 -1
  149. package/esm/date/utils/index.d.ts +1 -1
  150. package/esm/date/utils/index.js +1 -1
  151. package/esm/date/utils/index.js.map +1 -1
  152. package/esm/date/utils/locale.d.ts +12 -2
  153. package/esm/date/utils/locale.js +16 -1
  154. package/esm/date/utils/locale.js.map +1 -1
  155. package/esm/form/combobox/Combobox.d.ts +1 -1
  156. package/esm/form/combobox/ComboboxWrapper.js +6 -6
  157. package/esm/form/combobox/ComboboxWrapper.js.map +1 -1
  158. package/esm/form/combobox/FilteredOptions/FilteredOptions.js +4 -4
  159. package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  160. package/esm/form/combobox/FilteredOptions/FilteredOptionsItem.js +1 -1
  161. package/esm/form/combobox/FilteredOptions/FilteredOptionsItem.js.map +1 -1
  162. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.d.ts +1 -1
  163. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.js +2 -5
  164. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.js.map +1 -1
  165. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +4 -4
  166. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  167. package/esm/form/combobox/Input/Input.js +1 -1
  168. package/esm/form/combobox/Input/Input.js.map +1 -1
  169. package/esm/form/combobox/Input/InputController.d.ts +1 -1
  170. package/esm/form/combobox/Input/InputController.js +7 -9
  171. package/esm/form/combobox/Input/InputController.js.map +1 -1
  172. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.d.ts +2 -1
  173. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js +9 -5
  174. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
  175. package/esm/form/combobox/types.d.ts +7 -17
  176. package/esm/form/search/Search.d.ts +2 -1
  177. package/esm/form/search/Search.js.map +1 -1
  178. package/esm/form/textarea/Textarea.d.ts +1 -0
  179. package/esm/form/textarea/Textarea.js.map +1 -1
  180. package/esm/guide-panel/GuidePanel.js +11 -3
  181. package/esm/guide-panel/GuidePanel.js.map +1 -1
  182. package/esm/guide-panel/Illustration.d.ts +2 -8
  183. package/esm/guide-panel/Illustration.darkside.d.ts +2 -0
  184. package/esm/guide-panel/Illustration.darkside.js +23 -0
  185. package/esm/guide-panel/Illustration.darkside.js.map +1 -0
  186. package/esm/guide-panel/Illustration.js +2 -18
  187. package/esm/guide-panel/Illustration.js.map +1 -1
  188. package/esm/guide-panel/index.d.ts +0 -1
  189. package/esm/guide-panel/index.js +0 -1
  190. package/esm/guide-panel/index.js.map +1 -1
  191. package/esm/index.d.ts +1 -1
  192. package/esm/index.js +1 -1
  193. package/esm/index.js.map +1 -1
  194. package/esm/modal/Modal.js +2 -2
  195. package/esm/modal/Modal.js.map +1 -1
  196. package/esm/modal/ModalHeader.js +1 -1
  197. package/esm/modal/ModalHeader.js.map +1 -1
  198. package/esm/popover/Popover.js +2 -2
  199. package/esm/popover/Popover.js.map +1 -1
  200. package/esm/provider/Provider.d.ts +35 -10
  201. package/esm/provider/Provider.js +11 -15
  202. package/esm/provider/Provider.js.map +1 -1
  203. package/esm/table/ExpandableRow.js +3 -3
  204. package/esm/table/ExpandableRow.js.map +1 -1
  205. package/esm/tabs/Tabs.context.d.ts +1 -1
  206. package/esm/timeline/Timeline.d.ts +1 -0
  207. package/esm/timeline/Timeline.js.map +1 -1
  208. package/esm/util/i18n/i18n.context.d.ts +1 -1
  209. package/esm/util/i18n/i18n.context.js +15 -14
  210. package/esm/util/i18n/i18n.context.js.map +1 -1
  211. package/esm/util/i18n/locales/en.d.ts +50 -54
  212. package/esm/util/i18n/locales/en.js +52 -56
  213. package/esm/util/i18n/locales/en.js.map +1 -1
  214. package/esm/util/i18n/locales/index.d.ts +3 -0
  215. package/esm/util/i18n/locales/index.js +5 -0
  216. package/esm/util/i18n/locales/index.js.map +1 -0
  217. package/esm/util/i18n/locales/nb.d.ts +53 -57
  218. package/esm/util/i18n/locales/nb.js +56 -60
  219. package/esm/util/i18n/locales/nb.js.map +1 -1
  220. package/esm/util/i18n/locales/nn.d.ts +50 -54
  221. package/esm/util/i18n/locales/nn.js +52 -56
  222. package/esm/util/i18n/locales/nn.js.map +1 -1
  223. package/package.json +13 -3
  224. package/src/chips/Removable.tsx +1 -9
  225. package/src/date/context/index.ts +5 -1
  226. package/src/date/context/useDateInputContext.tsx +6 -4
  227. package/src/date/context/useDateTranslationContext.ts +9 -0
  228. package/src/date/datepicker/DatePicker.tsx +41 -32
  229. package/src/date/datepicker/DatePickerStandalone.tsx +46 -37
  230. package/src/date/datepicker/parts/Caption.tsx +2 -3
  231. package/src/date/datepicker/parts/DropdownCaption.tsx +3 -3
  232. package/src/date/datepicker/parts/WeekNumber.tsx +3 -9
  233. package/src/date/datepicker/parts/WeekRow.tsx +2 -3
  234. package/src/date/datepicker/types.ts +8 -0
  235. package/src/date/monthpicker/MonthCaption.tsx +2 -4
  236. package/src/date/monthpicker/MonthPicker.tsx +67 -54
  237. package/src/date/monthpicker/MonthPickerStandalone.tsx +39 -26
  238. package/src/date/monthpicker/types.ts +8 -0
  239. package/src/date/parts/DateInput.tsx +2 -3
  240. package/src/date/parts/DateWrapper.tsx +6 -4
  241. package/src/date/utils/index.ts +5 -1
  242. package/src/date/utils/locale.ts +17 -1
  243. package/src/form/combobox/ComboboxWrapper.tsx +6 -6
  244. package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +4 -4
  245. package/src/form/combobox/FilteredOptions/FilteredOptionsItem.tsx +1 -1
  246. package/src/form/combobox/FilteredOptions/MaxSelectedMessage.tsx +2 -9
  247. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +4 -4
  248. package/src/form/combobox/Input/Input.context.tsx +1 -1
  249. package/src/form/combobox/Input/Input.tsx +1 -1
  250. package/src/form/combobox/Input/InputController.tsx +4 -23
  251. package/src/form/combobox/SelectedOptions/selectedOptionsContext.tsx +10 -7
  252. package/src/form/combobox/types.ts +12 -20
  253. package/src/form/search/Search.tsx +2 -1
  254. package/src/form/textarea/Textarea.tsx +1 -0
  255. package/src/guide-panel/GuidePanel.tsx +59 -15
  256. package/src/guide-panel/Illustration.darkside.tsx +96 -0
  257. package/src/guide-panel/Illustration.tsx +2 -22
  258. package/src/guide-panel/index.ts +0 -1
  259. package/src/index.ts +1 -5
  260. package/src/modal/Modal.tsx +2 -2
  261. package/src/modal/ModalHeader.tsx +1 -1
  262. package/src/popover/Popover.tsx +2 -2
  263. package/src/provider/Provider.tsx +56 -13
  264. package/src/table/ExpandableRow.tsx +10 -3
  265. package/src/timeline/Timeline.tsx +1 -0
  266. package/src/util/i18n/i18n.context.test.tsx +29 -8
  267. package/src/util/i18n/i18n.context.ts +15 -14
  268. package/src/util/i18n/locales/en.ts +52 -56
  269. package/src/util/i18n/locales/index.ts +4 -0
  270. package/src/util/i18n/locales/nb.ts +56 -60
  271. package/src/util/i18n/locales/nn.ts +52 -56
  272. package/cjs/provider/i18n/LanguageProvider.d.ts +0 -26
  273. package/cjs/provider/i18n/LanguageProvider.js +0 -54
  274. package/cjs/provider/i18n/LanguageProvider.js.map +0 -1
  275. package/esm/provider/i18n/LanguageProvider.d.ts +0 -26
  276. package/esm/provider/i18n/LanguageProvider.js +0 -23
  277. package/esm/provider/i18n/LanguageProvider.js.map +0 -1
  278. package/src/provider/i18n/LanguageProvider.tsx +0 -49
@@ -1,9 +1,7 @@
1
1
  /* eslint-disable jsx-a11y/no-static-element-interactions */
2
2
  import cl from "clsx";
3
3
  import React, { forwardRef } from "react";
4
- import { XMarkIcon } from "@navikt/aksel-icons";
5
4
  import { useMergeRefs } from "../../../util/hooks";
6
- import { useI18n } from "../../../util/i18n/i18n.context";
7
5
  import { useFilteredOptionsContext } from "../FilteredOptions/filteredOptionsContext";
8
6
  import SelectedOptions from "../SelectedOptions/SelectedOptions";
9
7
  import { useSelectedOptionsContext } from "../SelectedOptions/selectedOptionsContext";
@@ -28,7 +26,9 @@ export const InputController = forwardRef<
28
26
  >
29
27
  >((props, ref) => {
30
28
  const {
31
- clearButton = true,
29
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Remove when prop has been removed from ComboboxProps.
30
+ clearButton,
31
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Remove when prop has been removed from ComboboxProps.
32
32
  clearButtonLabel,
33
33
  toggleListButton = true,
34
34
  inputClassName,
@@ -37,10 +37,8 @@ export const InputController = forwardRef<
37
37
  } = props;
38
38
 
39
39
  const {
40
- clearInput,
41
40
  focusInput,
42
41
  inputProps,
43
- value,
44
42
  size = "medium",
45
43
  inputRef,
46
44
  toggleOpenButtonRef,
@@ -52,11 +50,6 @@ export const InputController = forwardRef<
52
50
 
53
51
  const mergedInputRef = useMergeRefs(inputRef, ref);
54
52
 
55
- const translate = useI18n(
56
- "Combobox",
57
- clearButtonLabel ? { clear: clearButtonLabel } : undefined,
58
- );
59
-
60
53
  return (
61
54
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events
62
55
  <div
@@ -86,19 +79,7 @@ export const InputController = forwardRef<
86
79
  />
87
80
  </SelectedOptions>
88
81
  )}
89
- <div>
90
- {value && clearButton && (
91
- <div
92
- onClick={clearInput}
93
- className="navds-combobox__button-clear"
94
- aria-hidden
95
- title={translate("clear")}
96
- >
97
- <XMarkIcon />
98
- </div>
99
- )}
100
- {toggleListButton && <ToggleListButton ref={toggleOpenButtonRef} />}
101
- </div>
82
+ {toggleListButton && <ToggleListButton ref={toggleOpenButtonRef} />}
102
83
  </div>
103
84
  );
104
85
  });
@@ -12,7 +12,7 @@ type SelectedOptionsContextValue = {
12
12
  removeSelectedOption: (option: ComboboxOption) => void;
13
13
  prevSelectedOptions?: ComboboxOption[];
14
14
  selectedOptions: ComboboxOption[];
15
- maxSelected?: ComboboxProps["maxSelected"] & { isLimitReached: boolean };
15
+ maxSelected: { limit: number | undefined; isLimitReached: boolean };
16
16
  setSelectedOptions: (any) => void;
17
17
  toggleOption: (
18
18
  option: ComboboxOption,
@@ -101,14 +101,17 @@ const SelectedOptionsProvider = ({
101
101
  [customOptions, onToggleSelected, removeCustomOption],
102
102
  );
103
103
 
104
+ const maxSelectedLimit =
105
+ typeof maxSelected === "object" ? maxSelected.limit : maxSelected;
104
106
  const isLimitReached =
105
- (!!maxSelected?.limit && selectedOptions.length >= maxSelected.limit) ||
106
- (!isMultiSelect && selectedOptions.length > 0);
107
+ !!maxSelectedLimit && selectedOptions.length >= maxSelectedLimit;
108
+ const newHideCaret =
109
+ isLimitReached || (!isMultiSelect && selectedOptions.length > 0);
107
110
 
108
111
  // biome-ignore lint/correctness/useExhaustiveDependencies: We explicitly want to run this effect when selectedOptions changes to match the view with the selected options.
109
112
  useEffect(() => {
110
- setHideCaret(isLimitReached);
111
- }, [isLimitReached, selectedOptions, setHideCaret]);
113
+ setHideCaret(newHideCaret);
114
+ }, [newHideCaret, selectedOptions, setHideCaret]);
112
115
 
113
116
  const toggleOption = useCallback(
114
117
  (
@@ -142,8 +145,8 @@ const SelectedOptionsProvider = ({
142
145
  selectedOptions,
143
146
  setSelectedOptions,
144
147
  toggleOption,
145
- maxSelected: maxSelected && {
146
- ...maxSelected,
148
+ maxSelected: {
149
+ limit: maxSelectedLimit,
147
150
  isLimitReached,
148
151
  },
149
152
  };
@@ -45,15 +45,11 @@ export interface ComboboxProps
45
45
  */
46
46
  allowNewValues?: boolean;
47
47
  /**
48
- * Adds a button to clear the input value when not empty.
49
- * NB: Will not clear selected values.
50
- * @default true
48
+ * @deprecated The clear button has been removed. This prop has no effect.
51
49
  */
52
50
  clearButton?: boolean;
53
51
  /**
54
- * Custom name for the clear button. Requires `clearButton` to be `true`.
55
- *
56
- * @default "Tøm"
52
+ * @deprecated The clear button has been removed. This prop has no effect.
57
53
  */
58
54
  clearButtonLabel?: string;
59
55
  /**
@@ -102,7 +98,7 @@ export interface ComboboxProps
102
98
  * @param event
103
99
  */
104
100
  onClear?: (
105
- event: React.PointerEvent | React.KeyboardEvent | React.MouseEvent,
101
+ event: React.PointerEvent | React.KeyboardEvent | React.FocusEvent,
106
102
  ) => void;
107
103
  /**
108
104
  * Callback function triggered whenever an option is selected or de-selected.
@@ -124,19 +120,15 @@ export interface ComboboxProps
124
120
  */
125
121
  selectedOptions?: string[] | ComboboxOption[];
126
122
  /**
127
- * Options for the maximum number of selected options.
128
- */
129
- maxSelected?: {
130
- /**
131
- * The limit for maximum selected options
132
- */
133
- limit: number;
134
- /**
135
- * Message to display when the limit for maximum selected options has been reached
136
- * @default "{selected} av maks {limit} er valgt."
137
- */
138
- message?: string;
139
- };
123
+ * Maximum number of selected options.
124
+ * @example maxSelected={3}
125
+ */
126
+ maxSelected?:
127
+ | {
128
+ /** @deprecated Provide a number instead of an object */
129
+ limit: number;
130
+ }
131
+ | number;
140
132
  /**
141
133
  * Set to `true` to enable inline autocomplete.
142
134
  *
@@ -52,7 +52,8 @@ export interface SearchProps
52
52
  onSearchClick?: (value: string) => void;
53
53
  /**
54
54
  * Sets the `aria-label` for the clear button.
55
- * @default "Tøm"
55
+ * @default "Tøm feltet"
56
+ * @deprecated Use `<Provider />`-component
56
57
  */
57
58
  clearButtonLabel?: string;
58
59
  /**
@@ -54,6 +54,7 @@ export interface TextareaProps
54
54
  UNSAFE_autoScrollbar?: boolean;
55
55
  /**
56
56
  * i18n-translations for counter-text
57
+ * @deprecated Use `<Provider />`-component
57
58
  */
58
59
  i18n?: {
59
60
  /** @default tegn igjen */
@@ -1,6 +1,8 @@
1
1
  import cl from "clsx";
2
2
  import React, { HTMLAttributes, forwardRef } from "react";
3
+ import { UNSAFE_useAkselTheme } from "../provider";
3
4
  import { DefaultIllustration } from "./Illustration";
5
+ import { DarksideGudiepanelIllustration } from "./Illustration.darkside";
4
6
 
5
7
  export interface GuidePanelProps extends HTMLAttributes<HTMLDivElement> {
6
8
  /**
@@ -34,22 +36,64 @@ export interface GuidePanelProps extends HTMLAttributes<HTMLDivElement> {
34
36
  * ```
35
37
  */
36
38
  export const GuidePanel = forwardRef<HTMLDivElement, GuidePanelProps>(
37
- ({ children, className, illustration, poster, ...rest }, ref) => (
38
- <div
39
- {...rest}
40
- ref={ref}
41
- className={cl("navds-guide-panel", className, {
42
- "navds-guide-panel--poster": poster === true,
43
- "navds-guide-panel--not-poster": poster === false,
44
- "navds-guide-panel--responsive-poster": poster === undefined,
45
- })}
46
- >
47
- <div className="navds-guide">
48
- {illustration ?? <DefaultIllustration />}
39
+ ({ children, className, illustration, poster, ...rest }, ref) => {
40
+ const themeContext = UNSAFE_useAkselTheme(false);
41
+
42
+ return (
43
+ <div
44
+ {...rest}
45
+ ref={ref}
46
+ className={cl("navds-guide-panel", className, {
47
+ "navds-guide-panel--poster": poster === true,
48
+ "navds-guide-panel--not-poster": poster === false,
49
+ "navds-guide-panel--responsive-poster": poster === undefined,
50
+ })}
51
+ data-responsive={poster === undefined}
52
+ data-poster={poster}
53
+ >
54
+ <div className="navds-guide">
55
+ {illustration ??
56
+ (themeContext ? (
57
+ <DarksideGudiepanelIllustration />
58
+ ) : (
59
+ <DefaultIllustration />
60
+ ))}
61
+ </div>
62
+ <div className="navds-guide-panel__content">
63
+ {themeContext && (
64
+ <svg
65
+ viewBox="0 0 33 22"
66
+ width="33"
67
+ height="22"
68
+ fill="none"
69
+ xmlns="http://www.w3.org/2000/svg"
70
+ className="navds-guide-panel__tail"
71
+ >
72
+ <path
73
+ d="M8.74229e-08 22L0 20L33 20V22L8.74229e-08 22Z"
74
+ fill="var(--ax-bg-raised)"
75
+ />
76
+ <path
77
+ d="M31 20.0001L2 20.0001C2.09817 10.0296 3 7.00011 6 2.00011C8 12.5001 20 20.0001 31 20.0001Z"
78
+ fill="var(--ax-bg-raised)"
79
+ />
80
+ <path
81
+ fillRule="evenodd"
82
+ clipRule="evenodd"
83
+ d="M0 20C-2.87106e-10 19.9934 3.21047e-05 19.987 9.68646e-05 19.9804C0.0494722 14.9659 0.299239 11.5341 0.964025 8.68212C1.64231 5.77217 2.72947 3.56367 4.28501 0.971094C4.71185 0.259692 5.53358 -0.114327 6.35038 0.0310157C7.16718 0.176359 7.80944 0.810884 7.96467 1.62586C8.84145 6.22896 11.9453 10.3172 16.2599 13.2908C20.5715 16.2623 25.9294 18.0001 31 18.0001C32.1046 18.0001 33 18.8954 33 20L0 20ZM6.755 4.70521C8.97688 10.7068 14.4934 15.469 20.8803 18.0001C24.1345 19.2897 27.6146 20.0001 31 20.0001L2 20.0001C2.00689 19.3003 2.01774 18.6346 2.033 18.0001C2.19625 11.2107 2.86405 7.98363 4.58479 4.54371C4.9944 3.72487 5.46367 2.89399 6 2.00011C6.17639 2.92619 6.43058 3.82889 6.755 4.70521Z"
84
+ fill="var(--ax-border-info)"
85
+ />
86
+ </svg>
87
+ )}
88
+ {themeContext ? (
89
+ <div className="navds-guide-panel__content-inner">{children}</div>
90
+ ) : (
91
+ children
92
+ )}
93
+ </div>
49
94
  </div>
50
- <div className="navds-guide-panel__content">{children}</div>
51
- </div>
52
- ),
95
+ );
96
+ },
53
97
  );
54
98
 
55
99
  export default GuidePanel;
@@ -0,0 +1,96 @@
1
+ import React from "react";
2
+ import { useI18n } from "../util/i18n/i18n.context";
3
+
4
+ export const DarksideGudiepanelIllustration = () => {
5
+ const translate = useI18n("GuidePanel");
6
+
7
+ return (
8
+ <svg
9
+ width="80"
10
+ height="80"
11
+ viewBox="0 0 80 80"
12
+ fill="none"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ aria-label={translate("illustrationLabel")}
15
+ focusable={false}
16
+ role="img"
17
+ >
18
+ <g clipPath="url(#clip0_1387_21067)">
19
+ <rect
20
+ width="80"
21
+ height="80"
22
+ rx="40"
23
+ fill="var(--ax-bg-info-moderate)"
24
+ />
25
+
26
+ <path
27
+ fillRule="evenodd"
28
+ clipRule="evenodd"
29
+ d="M55.1888 40.4309C53.795 44.9809 51.0663 48.7578 47.5693 51.0691L47.7484 53.0953L47.7474 53.1777L45.857 69.8798H33.8679L33.8181 69.5289L31.5004 53.149L31.5862 51.1003C28.0715 48.7951 25.3274 45.012 23.9257 40.4499C23.8781 40.4544 23.83 40.4567 23.7812 40.4567C22.8745 40.4567 22.1562 39.6596 22.1562 38.694V33.2299C22.1562 32.5826 22.479 32.0107 22.9648 31.704C23.7229 21.5029 30.8443 13.4856 39.554 13.4856C48.2401 13.4856 55.3472 21.4598 56.1376 31.6212C56.7049 31.8987 57.0938 32.5185 57.0938 33.2299V38.694C57.0938 39.6601 56.3765 40.4567 55.4688 40.4567C55.3731 40.4567 55.2796 40.4479 55.1888 40.4309Z"
30
+ fill="#F5F6F7"
31
+ />
32
+ <path
33
+ fillRule="evenodd"
34
+ clipRule="evenodd"
35
+ d="M47.1471 51.6344C47.0789 55.2818 43.7373 59.0238 39.625 59.0238C35.4948 59.0238 32.142 55.2492 32.1022 51.5868C29.9622 52.1324 26.6956 53.778 23.9995 56.528C21.3885 59.191 19.3125 63.194 19.3125 66.2992V85H59.9375V66.2992C59.9375 63.1877 57.8167 59.1779 55.1575 56.5118C52.4983 53.8457 49.3007 52.2224 47.1471 51.6344Z"
36
+ fill="#156389"
37
+ />
38
+ <path
39
+ fillRule="evenodd"
40
+ clipRule="evenodd"
41
+ d="M31.9671 51.7135C29.9959 52.4334 26.6891 54.0069 24.1875 56.3965C16.875 54.7596 13.625 50.8701 13.625 50.8701C13.625 50.8701 20.3621 44.2597 20.3662 32.698V32.6858C20.3662 19.1479 27.6319 9.80769 39.6022 9.80769C51.5742 9.80769 58.8399 19.1479 58.8399 32.6858H58.883C58.883 44.2556 65.625 50.8701 65.625 50.8701C65.625 50.8701 62.375 54.7596 55.0625 56.3942L55.0515 56.3965C52.6353 54.1854 49.1309 52.48 47.2243 51.759L47.2265 51.7583L47.1508 50.9013L47.1917 50.8303C50.7891 48.5155 53.5804 44.616 54.9262 39.904C55.0909 39.9962 55.277 40.0481 55.4739 40.0481C56.1476 40.0481 56.6928 39.4432 56.6928 38.694V33.2299C56.6928 32.5888 56.2936 32.0529 55.7564 31.9115C55.7559 31.9041 55.7554 31.8967 55.7549 31.8893C38.7466 33.7984 32.6199 22.0681 32.117 22.0673C32.117 22.0673 26.4686 26.1538 23.769 31.0125C23.769 31.0125 23.3576 31.9297 23.3556 31.9605C22.8934 32.1528 22.5637 32.648 22.5637 33.2299V38.694C22.5637 39.4432 23.1103 40.0481 23.7826 40.0481C23.9316 40.0481 24.0743 40.0185 24.2062 39.9643C25.5668 44.6786 28.3759 48.5739 31.9901 50.8733L32.0035 50.9013L31.9695 51.7135H31.9671Z"
42
+ fill="#A93D70"
43
+ />
44
+ <path
45
+ fillRule="evenodd"
46
+ clipRule="evenodd"
47
+ d="M33.8159 35.8563C32.766 35.9417 32.4722 34.2696 32.7885 33.1775C32.848 32.9706 33.1956 32.0283 33.8109 32.0283C34.4254 32.0283 34.6968 32.5433 34.7345 32.6319C35.1865 33.6965 34.9645 35.7622 33.8159 35.8563"
48
+ fill="#202733"
49
+ />
50
+ <path
51
+ fillRule="evenodd"
52
+ clipRule="evenodd"
53
+ d="M45.9927 35.8563C47.0425 35.9417 47.3364 34.2696 47.0201 33.1775C46.9606 32.9706 46.613 32.0283 45.9977 32.0283C45.3832 32.0283 45.1118 32.5433 45.0741 32.6319C44.6221 33.6965 44.8441 35.7622 45.9927 35.8563"
54
+ fill="#202733"
55
+ />
56
+ <path
57
+ d="M40.2935 37.5041C40.9213 37.396 41.3501 37.4638 41.5036 37.6748C42.0833 38.4721 41.8979 39.3156 40.9035 40.0081C40.3806 40.372 39.661 40.5001 39.28 40.3114C39.0937 40.2191 38.8758 40.3133 38.7934 40.5218C38.7109 40.7304 38.7951 40.9742 38.9814 41.0665C39.6111 41.3784 40.5794 41.206 41.2931 40.7092C42.6445 39.7682 42.9537 38.3611 42.0758 37.1534C41.7042 36.643 41.0465 36.5389 40.1812 36.688C39.9799 36.7227 39.8418 36.9335 39.8728 37.1589C39.9038 37.3842 40.0921 37.5388 40.2935 37.5041Z"
58
+ fill="#202733"
59
+ />
60
+ <path
61
+ d="M44.8337 42.9837C44.7968 43.0623 44.7122 43.2128 44.5763 43.4111C44.3463 43.7466 44.0574 44.083 43.7066 44.3967C42.6611 45.3315 41.3002 45.8721 39.5683 45.8226C37.8795 45.7744 36.5247 45.2422 35.4626 44.384C35.0726 44.0689 34.7506 43.7315 34.4933 43.3951C34.3415 43.1967 34.2468 43.0464 34.2053 42.968C34.1056 42.7795 33.8606 42.7019 33.6581 42.7946C33.4555 42.8874 33.3721 43.1154 33.4718 43.3039C33.5318 43.4175 33.6487 43.6029 33.8273 43.8364C34.1206 44.2197 34.4852 44.6019 34.9266 44.9585C36.1256 45.9273 37.6579 46.5293 39.5432 46.5831C41.5064 46.6391 43.0759 46.0157 44.273 44.9453C44.6733 44.5875 45.0023 44.2043 45.2656 43.8203C45.4257 43.5868 45.5298 43.4015 45.5829 43.2882C45.6733 43.0956 45.5788 42.8714 45.3719 42.7873C45.165 42.7033 44.924 42.7912 44.8337 42.9837Z"
62
+ fill="#202733"
63
+ />
64
+ <path
65
+ fillRule="evenodd"
66
+ clipRule="evenodd"
67
+ d="M53.8629 70.5H42.8865C42.3966 70.5 42 70.0974 42 69.6V63.609C42 63.1117 42.3966 62.7083 42.8865 62.7083H53.8629C54.3527 62.7083 54.75 63.1117 54.75 63.609V69.6C54.75 70.0974 54.3527 70.5 53.8629 70.5"
68
+ fill="white"
69
+ />
70
+ <path
71
+ fillRule="evenodd"
72
+ clipRule="evenodd"
73
+ d="M49.0346 63.9451H47.8971C47.8128 63.9451 47.7449 63.8775 47.7449 63.7937V63.6029C47.7449 63.5197 47.8128 63.4515 47.8971 63.4515H49.0346C49.1188 63.4515 49.1867 63.5197 49.1867 63.6029V63.7937C49.1867 63.8775 49.1188 63.9451 49.0346 63.9451"
74
+ fill="#202733"
75
+ />
76
+ <path
77
+ fillRule="evenodd"
78
+ clipRule="evenodd"
79
+ d="M48.1365 63.7708H48.7955V62H48.1365V63.7708Z"
80
+ fill="#818997"
81
+ />
82
+ <path
83
+ fillRule="evenodd"
84
+ clipRule="evenodd"
85
+ d="M52.5417 65.5H51.6457C51.6457 65.5 51.5839 65.5 51.5621 65.5545L51.0662 67.0725L50.5708 65.5545C50.5489 65.5 50.4868 65.5 50.4868 65.5H48.764C48.7267 65.5 48.6954 65.5311 48.6954 65.5682V66.0837C48.6954 65.6748 48.2603 65.5 48.0055 65.5C47.4349 65.5 47.053 65.8758 46.934 66.4472C46.9276 66.0681 46.8961 65.9323 46.794 65.7932C46.7471 65.7251 46.6793 65.6678 46.6055 65.6204C46.4535 65.5314 46.317 65.5 46.0237 65.5H45.6794C45.6794 65.5 45.6171 65.5 45.5952 65.5545L45.2818 66.331V65.5682C45.2818 65.5311 45.2508 65.5 45.2136 65.5H44.4167C44.4167 65.5 44.3552 65.5 44.3328 65.5545L44.0071 66.362C44.0071 66.362 43.9746 66.4427 44.0489 66.4427H44.3552V67.9813C44.3552 68.0195 44.3853 68.0497 44.4236 68.0497H45.2136C45.2508 68.0497 45.2818 68.0195 45.2818 67.9813V66.4427H45.5898C45.7664 66.4427 45.8039 66.4475 45.8726 66.4796C45.914 66.4952 45.9513 66.5268 45.9716 66.5633C46.0133 66.6417 46.0237 66.7359 46.0237 67.0135V67.9813C46.0237 68.0195 46.0544 68.0497 46.0923 68.0497H46.8494C46.8494 68.0497 46.935 68.0497 46.9688 67.9652L47.1366 67.5505C47.3597 67.863 47.7269 68.0497 48.1833 68.0497H48.283C48.283 68.0497 48.3691 68.0497 48.4032 67.9652L48.6954 67.2415V67.9813C48.6954 68.0195 48.7267 68.0497 48.764 68.0497H49.5368C49.5368 68.0497 49.6221 68.0497 49.6564 67.9652C49.6564 67.9652 49.9655 67.1978 49.9667 67.192H49.9671C49.979 67.1281 49.8983 67.1281 49.8983 67.1281H49.6225V65.8113L50.4904 67.9652C50.5243 68.0497 50.6097 68.0497 50.6097 68.0497H51.5228C51.5228 68.0497 51.6087 68.0497 51.6426 67.9652L52.6048 65.5826C52.6381 65.5 52.5417 65.5 52.5417 65.5V65.5ZM48.6954 67.128H48.1763C47.9696 67.128 47.8015 66.9607 47.8015 66.7538C47.8015 66.5473 47.9696 66.3789 48.1763 66.3789H48.3215C48.5276 66.3789 48.6954 66.5473 48.6954 66.7538V67.128Z"
86
+ fill="#C30000"
87
+ />
88
+ </g>
89
+ <defs>
90
+ <clipPath id="clip0_1387_21067">
91
+ <rect width="80" height="80" rx="40" fill="white" />
92
+ </clipPath>
93
+ </defs>
94
+ </svg>
95
+ );
96
+ };
@@ -1,26 +1,9 @@
1
- import React, { SVGProps } from "react";
2
- import { useId } from "../util/hooks";
1
+ import React from "react";
3
2
  import { useI18n } from "../util/i18n/i18n.context";
4
3
 
5
- interface SVGRProps {
6
- title?: string;
7
- titleId?: string;
8
- }
9
-
10
- export type DefaultIllustrationType = React.FunctionComponent<
11
- SVGProps<SVGSVGElement> & SVGRProps
12
- >;
13
-
14
- export const DefaultIllustration: DefaultIllustrationType = ({
15
- title,
16
- titleId: _titleId,
17
- ...props
18
- }) => {
4
+ export const DefaultIllustration = () => {
19
5
  const translate = useI18n("GuidePanel");
20
6
 
21
- let titleId: string | undefined = useId();
22
- titleId = title ? (_titleId ? _titleId : "title-" + titleId) : undefined;
23
-
24
7
  return (
25
8
  <svg
26
9
  width="56"
@@ -31,10 +14,7 @@ export const DefaultIllustration: DefaultIllustrationType = ({
31
14
  aria-label={translate("illustrationLabel")}
32
15
  focusable={false}
33
16
  role="img"
34
- aria-labelledby={titleId}
35
- {...props}
36
17
  >
37
- {title ? <title id={titleId}>{title}</title> : null}
38
18
  <path
39
19
  fillRule="evenodd"
40
20
  clipRule="evenodd"
@@ -1,3 +1,2 @@
1
1
  "use client";
2
2
  export { default as GuidePanel, type GuidePanelProps } from "./GuidePanel";
3
- export { DefaultIllustration as GuidePanelDefaultIllustration } from "./Illustration";
package/src/index.ts CHANGED
@@ -25,11 +25,7 @@ export {
25
25
  } from "./date/monthpicker";
26
26
  export { Dropdown, type DropdownProps } from "./dropdown";
27
27
  export { ExpansionCard, type ExpansionCardProps } from "./expansion-card";
28
- export {
29
- GuidePanel,
30
- GuidePanelDefaultIllustration,
31
- type GuidePanelProps,
32
- } from "./guide-panel";
28
+ export { GuidePanel, type GuidePanelProps } from "./guide-panel";
33
29
  export { HelpText, type HelpTextProps } from "./help-text";
34
30
  export {
35
31
  InternalHeader,
@@ -2,7 +2,7 @@ import { useFloatingPortalNode } from "@floating-ui/react";
2
2
  import cl from "clsx";
3
3
  import React, { forwardRef, useContext, useEffect, useRef } from "react";
4
4
  import { createPortal } from "react-dom";
5
- import { DateContext } from "../date/context";
5
+ import { DateInputContext } from "../date/context";
6
6
  import { useProvider } from "../provider/Provider";
7
7
  import { Detail, Heading } from "../typography";
8
8
  import { composeEventHandlers } from "../util/composeEventHandlers";
@@ -106,7 +106,7 @@ export const Modal = forwardRef<HTMLDialogElement, ModalProps>(
106
106
  const rootElement = useProvider()?.rootElement;
107
107
  const portalNode = useFloatingPortalNode({ root: rootElement });
108
108
 
109
- const dateContext = useContext(DateContext);
109
+ const dateContext = useContext(DateInputContext);
110
110
  const isNested = useModalContext(false) !== undefined;
111
111
  if (isNested && !dateContext) {
112
112
  console.error("Modals should not be nested");
@@ -17,7 +17,7 @@ export interface ModalHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
17
17
  const ModalHeader = forwardRef<HTMLDivElement, ModalHeaderProps>(
18
18
  ({ children, className, closeButton = true, ...rest }, ref) => {
19
19
  const context = useModalContext();
20
- const translate = useI18n("Modal");
20
+ const translate = useI18n("global");
21
21
 
22
22
  return (
23
23
  <div {...rest} ref={ref} className={cl("navds-modal__header", className)}>
@@ -8,7 +8,7 @@ import {
8
8
  } from "@floating-ui/react";
9
9
  import cl from "clsx";
10
10
  import React, { HTMLAttributes, forwardRef, useContext, useRef } from "react";
11
- import { DateContext } from "../date/context";
11
+ import { DateInputContext } from "../date/context";
12
12
  import { useModalContext } from "../modal/Modal.context";
13
13
  import { DismissableLayer } from "../overlays/dismissablelayer/DismissableLayer";
14
14
  import { UNSAFE_useAkselTheme } from "../provider";
@@ -121,7 +121,7 @@ export const Popover = forwardRef<HTMLDivElement, PopoverProps>(
121
121
  ) => {
122
122
  const arrowRef = useRef<HTMLDivElement | null>(null);
123
123
  const isInModal = useModalContext(false) !== undefined;
124
- const isInDatepicker = useContext(DateContext) !== null;
124
+ const isInDatepicker = useContext(DateInputContext) !== null;
125
125
  const chosenStrategy = userStrategy ?? (isInModal ? "fixed" : "absolute");
126
126
  const chosenFlip = isInDatepicker ? false : _flip;
127
127
 
@@ -1,20 +1,49 @@
1
1
  import React, { createContext, useContext } from "react";
2
+ import { PartialTranslations, Translations } from "../util/i18n/i18n.types";
3
+ import nb from "../util/i18n/locales/nb";
2
4
 
3
- export interface ProviderContextType {
4
- /**
5
- * Global root-element to attach portals to (Tooltip)
6
- */
5
+ type ProviderContextType = {
7
6
  rootElement?: HTMLElement;
8
- }
7
+ locale: Translations;
8
+ translations?: PartialTranslations | PartialTranslations[];
9
+ };
9
10
 
10
- export const ProviderContext = createContext<ProviderContextType | undefined>(
11
- undefined,
12
- );
11
+ export const ProviderContext = createContext<ProviderContextType>({
12
+ locale: nb,
13
+ });
13
14
 
14
- export interface ProviderProps {
15
- children?: React.ReactNode;
15
+ export type ProviderProps = {
16
+ children: React.ReactNode;
17
+ /**
18
+ * Global root-element to attach portals to. Used by Tooltip, Modal (optionally) and ActionMenu.
19
+ */
16
20
  rootElement?: HTMLElement;
17
- }
21
+ } & (
22
+ | {
23
+ /**
24
+ * Aksel locale
25
+ * @default nb
26
+ * @example
27
+ * ```jsx
28
+ * import { en } from "@navikt/ds-react/locales";
29
+ * <Provider locale={en}>
30
+ * {app}
31
+ * </Provider>
32
+ * ```
33
+ */
34
+ locale: Translations;
35
+ /**
36
+ * Use this if you need to override some of the default translations.
37
+ * Can be a single object or an array of objects.
38
+ * Must be used together with the `locale` prop.
39
+ */
40
+ translations?: PartialTranslations | PartialTranslations[];
41
+ }
42
+ | {
43
+ locale?: never;
44
+ translations?: never;
45
+ }
46
+ );
18
47
 
19
48
  export const useProvider = () => useContext(ProviderContext);
20
49
 
@@ -31,9 +60,23 @@ export const useProvider = () => useContext(ProviderContext);
31
60
  * </Provider>
32
61
  * ```
33
62
  */
34
- export const Provider = ({ children, ...rest }: ProviderProps) => {
63
+ export const Provider = ({
64
+ children,
65
+ rootElement,
66
+ locale,
67
+ translations,
68
+ }: ProviderProps) => {
69
+ const parentContext = useProvider();
35
70
  return (
36
- <ProviderContext.Provider value={rest}>{children}</ProviderContext.Provider>
71
+ <ProviderContext.Provider
72
+ value={{
73
+ rootElement: rootElement || parentContext.rootElement,
74
+ locale: locale || parentContext.locale || nb,
75
+ translations: translations || parentContext.translations,
76
+ }}
77
+ >
78
+ {children}
79
+ </ProviderContext.Provider>
37
80
  );
38
81
  };
39
82
 
@@ -78,6 +78,7 @@ export const ExpandableRow: ExpandableRowType = forwardRef(
78
78
  onChange: onOpenChange,
79
79
  });
80
80
  const translate = useI18n("global");
81
+
81
82
  const id = useId();
82
83
 
83
84
  const expansionHandler = (event: React.MouseEvent<HTMLElement>) => {
@@ -110,7 +111,7 @@ export const ExpandableRow: ExpandableRowType = forwardRef(
110
111
  className={cl("navds-table__toggle-expand-cell", {
111
112
  "navds-table__toggle-expand-cell--open": _open,
112
113
  })}
113
- onClick={expansionHandler}
114
+ onClick={!expansionDisabled ? expansionHandler : () => null}
114
115
  >
115
116
  {!expansionDisabled && (
116
117
  <button
@@ -129,13 +130,19 @@ export const ExpandableRow: ExpandableRowType = forwardRef(
129
130
  </DataCell>
130
131
  {togglePlacement === "left" && children}
131
132
  </Row>
132
- <tr className="navds-table__expanded-row" aria-hidden={!_open} id={id}>
133
+ <tr
134
+ data-state={_open ? "open" : "closed"}
135
+ className="navds-table__expanded-row"
136
+ aria-hidden={!_open}
137
+ id={id}
138
+ >
133
139
  <td colSpan={colSpan} className="navds-table__expanded-row-cell">
134
140
  <AnimateHeight
135
141
  className="navds-table__expanded-row-collapse"
136
142
  innerClassName="navds-table__expanded-row-content"
137
143
  height={_open ? "auto" : 0}
138
- duration={250}
144
+ duration={150}
145
+ easing="cubic-bezier(0.39,0.57,0.56,1)"
139
146
  >
140
147
  {content}
141
148
  </AnimateHeight>
@@ -39,6 +39,7 @@ export interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {
39
39
  /**
40
40
  * Templates for label texts. The templates are passed to the date-fns `format` function.
41
41
  * Defaults to { day: "dd.MM", month: "MMM yy", year: "yyyy" }.
42
+ * @deprecated Use `<Provider />`-component
42
43
  */
43
44
  axisLabelTemplates?: AxisLabelTemplates;
44
45
  }