@navikt/ds-react 7.7.0 → 7.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) 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 -7
  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 +10 -10
  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 +15 -11
  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 +14 -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 +3 -2
  66. package/cjs/form/search/Search.js +1 -1
  67. package/cjs/form/search/Search.js.map +1 -1
  68. package/cjs/form/textarea/Textarea.d.ts +1 -0
  69. package/cjs/form/textarea/Textarea.js.map +1 -1
  70. package/cjs/guide-panel/GuidePanel.js +11 -3
  71. package/cjs/guide-panel/GuidePanel.js.map +1 -1
  72. package/cjs/guide-panel/Illustration.d.ts +2 -8
  73. package/cjs/guide-panel/Illustration.darkside.d.ts +2 -0
  74. package/cjs/guide-panel/Illustration.darkside.js +30 -0
  75. package/cjs/guide-panel/Illustration.darkside.js.map +1 -0
  76. package/cjs/guide-panel/Illustration.js +2 -18
  77. package/cjs/guide-panel/Illustration.js.map +1 -1
  78. package/cjs/guide-panel/index.d.ts +0 -1
  79. package/cjs/guide-panel/index.js +1 -3
  80. package/cjs/guide-panel/index.js.map +1 -1
  81. package/cjs/index.d.ts +1 -1
  82. package/cjs/index.js +2 -3
  83. package/cjs/index.js.map +1 -1
  84. package/cjs/layout/box/Box.d.ts +3 -2
  85. package/cjs/layout/box/Box.darkside.d.ts +10 -6
  86. package/cjs/layout/box/Box.darkside.js.map +1 -1
  87. package/cjs/layout/box/Box.js.map +1 -1
  88. package/cjs/layout/utilities/types.d.ts +7 -23
  89. package/cjs/modal/Modal.js +1 -1
  90. package/cjs/modal/Modal.js.map +1 -1
  91. package/cjs/modal/ModalHeader.js +1 -1
  92. package/cjs/modal/ModalHeader.js.map +1 -1
  93. package/cjs/popover/Popover.js +1 -1
  94. package/cjs/popover/Popover.js.map +1 -1
  95. package/cjs/provider/Provider.d.ts +35 -10
  96. package/cjs/provider/Provider.js +13 -14
  97. package/cjs/provider/Provider.js.map +1 -1
  98. package/cjs/table/ExpandableRow.js +3 -3
  99. package/cjs/table/ExpandableRow.js.map +1 -1
  100. package/cjs/tabs/Tabs.context.d.ts +1 -1
  101. package/cjs/tag/Tag.d.ts +1 -1
  102. package/cjs/tag/Tag.js +4 -1
  103. package/cjs/tag/Tag.js.map +1 -1
  104. package/cjs/timeline/Pin.js +5 -2
  105. package/cjs/timeline/Pin.js.map +1 -1
  106. package/cjs/timeline/Timeline.d.ts +1 -0
  107. package/cjs/timeline/Timeline.js.map +1 -1
  108. package/cjs/timeline/hooks/useTimelineRows.d.ts +5 -1
  109. package/cjs/timeline/hooks/useTimelineRows.js +14 -3
  110. package/cjs/timeline/hooks/useTimelineRows.js.map +1 -1
  111. package/cjs/timeline/period/ClickablePeriod.js +5 -2
  112. package/cjs/timeline/period/ClickablePeriod.js.map +1 -1
  113. package/cjs/tooltip/Tooltip.js +6 -3
  114. package/cjs/tooltip/Tooltip.js.map +1 -1
  115. package/cjs/util/i18n/i18n.context.d.ts +1 -1
  116. package/cjs/util/i18n/i18n.context.js +15 -14
  117. package/cjs/util/i18n/i18n.context.js.map +1 -1
  118. package/cjs/util/i18n/locales/en.d.ts +50 -54
  119. package/cjs/util/i18n/locales/en.js +52 -56
  120. package/cjs/util/i18n/locales/en.js.map +1 -1
  121. package/cjs/util/i18n/locales/index.d.ts +3 -0
  122. package/cjs/util/i18n/locales/index.js +14 -0
  123. package/cjs/util/i18n/locales/index.js.map +1 -0
  124. package/cjs/util/i18n/locales/nb.d.ts +53 -57
  125. package/cjs/util/i18n/locales/nb.js +56 -60
  126. package/cjs/util/i18n/locales/nb.js.map +1 -1
  127. package/cjs/util/i18n/locales/nn.d.ts +50 -54
  128. package/cjs/util/i18n/locales/nn.js +52 -56
  129. package/cjs/util/i18n/locales/nn.js.map +1 -1
  130. package/esm/chips/Removable.d.ts +0 -5
  131. package/esm/chips/Removable.js +2 -2
  132. package/esm/chips/Removable.js.map +1 -1
  133. package/esm/date/context/index.d.ts +2 -1
  134. package/esm/date/context/index.js +2 -1
  135. package/esm/date/context/index.js.map +1 -1
  136. package/esm/date/context/useDateInputContext.d.ts +3 -3
  137. package/esm/date/context/useDateInputContext.js +3 -3
  138. package/esm/date/context/useDateInputContext.js.map +1 -1
  139. package/esm/date/context/useDateTranslationContext.d.ts +8 -0
  140. package/esm/date/context/useDateTranslationContext.js +3 -0
  141. package/esm/date/context/useDateTranslationContext.js.map +1 -0
  142. package/esm/date/datepicker/DatePicker.js +21 -19
  143. package/esm/date/datepicker/DatePicker.js.map +1 -1
  144. package/esm/date/datepicker/DatePickerStandalone.js +19 -16
  145. package/esm/date/datepicker/DatePickerStandalone.js.map +1 -1
  146. package/esm/date/datepicker/parts/Caption.js +2 -3
  147. package/esm/date/datepicker/parts/Caption.js.map +1 -1
  148. package/esm/date/datepicker/parts/DropdownCaption.js +3 -3
  149. package/esm/date/datepicker/parts/DropdownCaption.js.map +1 -1
  150. package/esm/date/datepicker/parts/WeekNumber.js +3 -4
  151. package/esm/date/datepicker/parts/WeekNumber.js.map +1 -1
  152. package/esm/date/datepicker/parts/WeekRow.js +2 -3
  153. package/esm/date/datepicker/parts/WeekRow.js.map +1 -1
  154. package/esm/date/datepicker/types.d.ts +8 -0
  155. package/esm/date/monthpicker/MonthCaption.js +2 -4
  156. package/esm/date/monthpicker/MonthCaption.js.map +1 -1
  157. package/esm/date/monthpicker/MonthPicker.js +33 -31
  158. package/esm/date/monthpicker/MonthPicker.js.map +1 -1
  159. package/esm/date/monthpicker/MonthPickerStandalone.js +18 -14
  160. package/esm/date/monthpicker/MonthPickerStandalone.js.map +1 -1
  161. package/esm/date/monthpicker/types.d.ts +8 -0
  162. package/esm/date/parts/DateInput.js +2 -3
  163. package/esm/date/parts/DateInput.js.map +1 -1
  164. package/esm/date/parts/DateWrapper.d.ts +3 -1
  165. package/esm/date/parts/DateWrapper.js +4 -4
  166. package/esm/date/parts/DateWrapper.js.map +1 -1
  167. package/esm/date/utils/index.d.ts +1 -1
  168. package/esm/date/utils/index.js +1 -1
  169. package/esm/date/utils/index.js.map +1 -1
  170. package/esm/date/utils/locale.d.ts +12 -2
  171. package/esm/date/utils/locale.js +16 -1
  172. package/esm/date/utils/locale.js.map +1 -1
  173. package/esm/form/combobox/Combobox.d.ts +1 -1
  174. package/esm/form/combobox/ComboboxWrapper.js +6 -7
  175. package/esm/form/combobox/ComboboxWrapper.js.map +1 -1
  176. package/esm/form/combobox/FilteredOptions/FilteredOptions.js +4 -4
  177. package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
  178. package/esm/form/combobox/FilteredOptions/FilteredOptionsItem.js +1 -1
  179. package/esm/form/combobox/FilteredOptions/FilteredOptionsItem.js.map +1 -1
  180. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.d.ts +1 -1
  181. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.js +2 -5
  182. package/esm/form/combobox/FilteredOptions/MaxSelectedMessage.js.map +1 -1
  183. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +4 -4
  184. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  185. package/esm/form/combobox/Input/Input.js +10 -10
  186. package/esm/form/combobox/Input/Input.js.map +1 -1
  187. package/esm/form/combobox/Input/InputController.d.ts +1 -1
  188. package/esm/form/combobox/Input/InputController.js +15 -11
  189. package/esm/form/combobox/Input/InputController.js.map +1 -1
  190. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.d.ts +2 -1
  191. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js +14 -5
  192. package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
  193. package/esm/form/combobox/types.d.ts +7 -17
  194. package/esm/form/search/Search.d.ts +3 -2
  195. package/esm/form/search/Search.js +1 -1
  196. package/esm/form/search/Search.js.map +1 -1
  197. package/esm/form/textarea/Textarea.d.ts +1 -0
  198. package/esm/form/textarea/Textarea.js.map +1 -1
  199. package/esm/guide-panel/GuidePanel.js +11 -3
  200. package/esm/guide-panel/GuidePanel.js.map +1 -1
  201. package/esm/guide-panel/Illustration.d.ts +2 -8
  202. package/esm/guide-panel/Illustration.darkside.d.ts +2 -0
  203. package/esm/guide-panel/Illustration.darkside.js +23 -0
  204. package/esm/guide-panel/Illustration.darkside.js.map +1 -0
  205. package/esm/guide-panel/Illustration.js +2 -18
  206. package/esm/guide-panel/Illustration.js.map +1 -1
  207. package/esm/guide-panel/index.d.ts +0 -1
  208. package/esm/guide-panel/index.js +0 -1
  209. package/esm/guide-panel/index.js.map +1 -1
  210. package/esm/index.d.ts +1 -1
  211. package/esm/index.js +1 -1
  212. package/esm/index.js.map +1 -1
  213. package/esm/layout/box/Box.d.ts +3 -2
  214. package/esm/layout/box/Box.darkside.d.ts +10 -6
  215. package/esm/layout/box/Box.darkside.js.map +1 -1
  216. package/esm/layout/box/Box.js.map +1 -1
  217. package/esm/layout/utilities/types.d.ts +7 -23
  218. package/esm/modal/Modal.js +2 -2
  219. package/esm/modal/Modal.js.map +1 -1
  220. package/esm/modal/ModalHeader.js +1 -1
  221. package/esm/modal/ModalHeader.js.map +1 -1
  222. package/esm/popover/Popover.js +2 -2
  223. package/esm/popover/Popover.js.map +1 -1
  224. package/esm/provider/Provider.d.ts +35 -10
  225. package/esm/provider/Provider.js +11 -15
  226. package/esm/provider/Provider.js.map +1 -1
  227. package/esm/table/ExpandableRow.js +3 -3
  228. package/esm/table/ExpandableRow.js.map +1 -1
  229. package/esm/tabs/Tabs.context.d.ts +1 -1
  230. package/esm/tag/Tag.d.ts +1 -1
  231. package/esm/tag/Tag.js +4 -1
  232. package/esm/tag/Tag.js.map +1 -1
  233. package/esm/timeline/Pin.js +5 -2
  234. package/esm/timeline/Pin.js.map +1 -1
  235. package/esm/timeline/Timeline.d.ts +1 -0
  236. package/esm/timeline/Timeline.js.map +1 -1
  237. package/esm/timeline/hooks/useTimelineRows.d.ts +5 -1
  238. package/esm/timeline/hooks/useTimelineRows.js +14 -3
  239. package/esm/timeline/hooks/useTimelineRows.js.map +1 -1
  240. package/esm/timeline/period/ClickablePeriod.js +5 -2
  241. package/esm/timeline/period/ClickablePeriod.js.map +1 -1
  242. package/esm/tooltip/Tooltip.js +6 -3
  243. package/esm/tooltip/Tooltip.js.map +1 -1
  244. package/esm/util/i18n/i18n.context.d.ts +1 -1
  245. package/esm/util/i18n/i18n.context.js +15 -14
  246. package/esm/util/i18n/i18n.context.js.map +1 -1
  247. package/esm/util/i18n/locales/en.d.ts +50 -54
  248. package/esm/util/i18n/locales/en.js +52 -56
  249. package/esm/util/i18n/locales/en.js.map +1 -1
  250. package/esm/util/i18n/locales/index.d.ts +3 -0
  251. package/esm/util/i18n/locales/index.js +5 -0
  252. package/esm/util/i18n/locales/index.js.map +1 -0
  253. package/esm/util/i18n/locales/nb.d.ts +53 -57
  254. package/esm/util/i18n/locales/nb.js +56 -60
  255. package/esm/util/i18n/locales/nb.js.map +1 -1
  256. package/esm/util/i18n/locales/nn.d.ts +50 -54
  257. package/esm/util/i18n/locales/nn.js +52 -56
  258. package/esm/util/i18n/locales/nn.js.map +1 -1
  259. package/package.json +14 -4
  260. package/src/chips/Removable.tsx +1 -9
  261. package/src/date/context/index.ts +5 -1
  262. package/src/date/context/useDateInputContext.tsx +6 -4
  263. package/src/date/context/useDateTranslationContext.ts +9 -0
  264. package/src/date/datepicker/DatePicker.tsx +41 -32
  265. package/src/date/datepicker/DatePickerStandalone.tsx +46 -37
  266. package/src/date/datepicker/parts/Caption.tsx +2 -3
  267. package/src/date/datepicker/parts/DropdownCaption.tsx +3 -3
  268. package/src/date/datepicker/parts/WeekNumber.tsx +3 -9
  269. package/src/date/datepicker/parts/WeekRow.tsx +2 -3
  270. package/src/date/datepicker/types.ts +8 -0
  271. package/src/date/monthpicker/MonthCaption.tsx +2 -4
  272. package/src/date/monthpicker/MonthPicker.tsx +67 -54
  273. package/src/date/monthpicker/MonthPickerStandalone.tsx +39 -26
  274. package/src/date/monthpicker/types.ts +8 -0
  275. package/src/date/parts/DateInput.tsx +2 -3
  276. package/src/date/parts/DateWrapper.tsx +6 -4
  277. package/src/date/utils/index.ts +5 -1
  278. package/src/date/utils/locale.ts +17 -1
  279. package/src/form/combobox/ComboboxWrapper.tsx +6 -7
  280. package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +4 -4
  281. package/src/form/combobox/FilteredOptions/FilteredOptionsItem.tsx +1 -1
  282. package/src/form/combobox/FilteredOptions/MaxSelectedMessage.tsx +2 -9
  283. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +4 -4
  284. package/src/form/combobox/Input/Input.context.tsx +1 -1
  285. package/src/form/combobox/Input/Input.tsx +10 -10
  286. package/src/form/combobox/Input/InputController.tsx +14 -25
  287. package/src/form/combobox/SelectedOptions/selectedOptionsContext.tsx +14 -7
  288. package/src/form/combobox/types.ts +12 -20
  289. package/src/form/search/Search.tsx +3 -2
  290. package/src/form/textarea/Textarea.tsx +1 -0
  291. package/src/guide-panel/GuidePanel.tsx +59 -15
  292. package/src/guide-panel/Illustration.darkside.tsx +96 -0
  293. package/src/guide-panel/Illustration.tsx +2 -22
  294. package/src/guide-panel/index.ts +0 -1
  295. package/src/index.ts +1 -5
  296. package/src/layout/box/Box.darkside.tsx +19 -14
  297. package/src/layout/box/Box.tsx +4 -2
  298. package/src/layout/utilities/types.ts +20 -42
  299. package/src/modal/Modal.tsx +2 -2
  300. package/src/modal/ModalHeader.tsx +1 -1
  301. package/src/popover/Popover.tsx +2 -2
  302. package/src/provider/Provider.tsx +56 -13
  303. package/src/table/ExpandableRow.tsx +10 -3
  304. package/src/tag/Tag.tsx +32 -18
  305. package/src/timeline/Pin.tsx +16 -10
  306. package/src/timeline/Timeline.tsx +1 -0
  307. package/src/timeline/hooks/useTimelineRows.ts +25 -9
  308. package/src/timeline/period/ClickablePeriod.tsx +16 -10
  309. package/src/timeline/tests/useTimelineRows.test.ts +131 -0
  310. package/src/tooltip/Tooltip.tsx +7 -2
  311. package/src/util/i18n/i18n.context.test.tsx +29 -8
  312. package/src/util/i18n/i18n.context.ts +15 -14
  313. package/src/util/i18n/locales/en.ts +52 -56
  314. package/src/util/i18n/locales/index.ts +4 -0
  315. package/src/util/i18n/locales/nb.ts +56 -60
  316. package/src/util/i18n/locales/nn.ts +52 -56
  317. package/cjs/provider/i18n/LanguageProvider.d.ts +0 -26
  318. package/cjs/provider/i18n/LanguageProvider.js +0 -54
  319. package/cjs/provider/i18n/LanguageProvider.js.map +0 -1
  320. package/esm/provider/i18n/LanguageProvider.d.ts +0 -26
  321. package/esm/provider/i18n/LanguageProvider.js +0 -23
  322. package/esm/provider/i18n/LanguageProvider.js.map +0 -1
  323. package/src/provider/i18n/LanguageProvider.tsx +0 -49
@@ -3,11 +3,15 @@ import React, { forwardRef, useState } from "react";
3
3
  import { DayPickerProvider } from "react-day-picker";
4
4
  import { useId } from "../../util/hooks";
5
5
  import { useMergeRefs } from "../../util/hooks/useMergeRefs";
6
- import { useDateLocale } from "../../util/i18n/i18n.context";
7
- import { DateContext, SharedMonthProvider } from "../context";
6
+ import { useDateLocale, useI18n } from "../../util/i18n/i18n.context";
7
+ import {
8
+ DateInputContext,
9
+ DateTranslationContextProvider,
10
+ SharedMonthProvider,
11
+ } from "../context";
8
12
  import { MonthPickerInput } from "../parts/DateInput";
9
13
  import { DateWrapper } from "../parts/DateWrapper";
10
- import { getLocaleFromString } from "../utils";
14
+ import { getLocaleFromString, getTranslations } from "../utils";
11
15
  import MonthCaption from "./MonthCaption";
12
16
  import MonthPickerStandalone from "./MonthPickerStandalone";
13
17
  import MonthSelector from "./MonthSelector";
@@ -69,6 +73,7 @@ export const MonthPicker = forwardRef<HTMLDivElement, MonthPickerProps>(
69
73
  onClose,
70
74
  onOpenToggle,
71
75
  locale,
76
+ translations,
72
77
  onMonthSelect,
73
78
  className,
74
79
  wrapperClassName,
@@ -79,6 +84,11 @@ export const MonthPicker = forwardRef<HTMLDivElement, MonthPickerProps>(
79
84
  },
80
85
  ref,
81
86
  ) => {
87
+ const translate = useI18n(
88
+ "DatePicker",
89
+ translations,
90
+ getTranslations(locale),
91
+ );
82
92
  const langProviderLocale = useDateLocale();
83
93
  const ariaId = useId(id);
84
94
  const [open, setOpen] = useState(_open ?? false);
@@ -103,61 +113,64 @@ export const MonthPicker = forwardRef<HTMLDivElement, MonthPickerProps>(
103
113
  }
104
114
 
105
115
  return (
106
- <DateContext.Provider
107
- value={{
108
- open: _open ?? open,
109
- onOpen: () => {
110
- setOpen((x) => !x);
111
- onOpenToggle?.();
112
- },
113
- ariaId,
114
- defined: true,
115
- }}
116
- >
117
- <div
118
- ref={mergedRef}
119
- className={cl("navds-date__wrapper", wrapperClassName)}
116
+ <DateTranslationContextProvider translate={translate}>
117
+ <DateInputContext.Provider
118
+ value={{
119
+ open: _open ?? open,
120
+ onOpen: () => {
121
+ setOpen((x) => !x);
122
+ onOpenToggle?.();
123
+ },
124
+ ariaId,
125
+ defined: true,
126
+ }}
120
127
  >
121
- {children}
122
- <DateWrapper
123
- open={_open ?? open}
124
- anchor={wrapperRef}
125
- onClose={() => onClose?.() ?? setOpen(false)}
126
- locale={locale}
127
- variant="month"
128
- popoverProps={{
129
- id: ariaId,
130
- strategy,
131
- }}
128
+ <div
129
+ ref={mergedRef}
130
+ className={cl("navds-date__wrapper", wrapperClassName)}
132
131
  >
133
- <DayPickerProvider
134
- initialProps={{
135
- locale: locale
136
- ? getLocaleFromString(locale)
137
- : langProviderLocale,
138
- selected: selected ?? selectedMonth,
139
- toDate,
140
- fromDate,
141
- month: selected ?? selectedMonth,
132
+ {children}
133
+ <DateWrapper
134
+ open={_open ?? open}
135
+ anchor={wrapperRef}
136
+ onClose={() => onClose?.() ?? setOpen(false)}
137
+ locale={locale}
138
+ translate={translate}
139
+ variant="month"
140
+ popoverProps={{
141
+ id: ariaId,
142
+ strategy,
142
143
  }}
143
144
  >
144
- <div className={cl("rdp-month", className)}>
145
- <SharedMonthProvider
146
- dropdownCaption={dropdownCaption}
147
- disabled={disabled}
148
- selected={selected ?? selectedMonth}
149
- onSelect={handleSelect}
150
- year={year}
151
- onYearChange={onYearChange}
152
- >
153
- <MonthCaption />
154
- <MonthSelector />
155
- </SharedMonthProvider>
156
- </div>
157
- </DayPickerProvider>
158
- </DateWrapper>
159
- </div>
160
- </DateContext.Provider>
145
+ <DayPickerProvider
146
+ initialProps={{
147
+ locale: locale
148
+ ? getLocaleFromString(locale)
149
+ : langProviderLocale,
150
+ selected: selected ?? selectedMonth,
151
+ toDate,
152
+ fromDate,
153
+ month: selected ?? selectedMonth,
154
+ }}
155
+ >
156
+ <div className={cl("rdp-month", className)}>
157
+ <SharedMonthProvider
158
+ dropdownCaption={dropdownCaption}
159
+ disabled={disabled}
160
+ selected={selected ?? selectedMonth}
161
+ onSelect={handleSelect}
162
+ year={year}
163
+ onYearChange={onYearChange}
164
+ >
165
+ <MonthCaption />
166
+ <MonthSelector />
167
+ </SharedMonthProvider>
168
+ </div>
169
+ </DayPickerProvider>
170
+ </DateWrapper>
171
+ </div>
172
+ </DateInputContext.Provider>
173
+ </DateTranslationContextProvider>
161
174
  );
162
175
  },
163
176
  ) as MonthPickerComponent;
@@ -1,8 +1,12 @@
1
1
  import cl from "clsx";
2
2
  import React, { forwardRef, useState } from "react";
3
3
  import { DayPickerProvider } from "react-day-picker";
4
- import { SharedMonthProvider } from "../context";
5
- import { getLocaleFromString } from "../utils";
4
+ import { useDateLocale, useI18n } from "../../util/i18n/i18n.context";
5
+ import {
6
+ DateTranslationContextProvider,
7
+ SharedMonthProvider,
8
+ } from "../context";
9
+ import { getLocaleFromString, getTranslations } from "../utils";
6
10
  import MonthCaption from "./MonthCaption";
7
11
  import MonthSelector from "./MonthSelector";
8
12
  import { MonthPickerProps } from "./types";
@@ -34,7 +38,8 @@ export const MonthPickerStandalone = forwardRef<
34
38
  disabled = [],
35
39
  selected,
36
40
  className,
37
- locale = "nb",
41
+ locale,
42
+ translations,
38
43
  onMonthSelect,
39
44
  defaultSelected,
40
45
  year,
@@ -42,6 +47,12 @@ export const MonthPickerStandalone = forwardRef<
42
47
  },
43
48
  ref,
44
49
  ) => {
50
+ const translate = useI18n(
51
+ "DatePicker",
52
+ translations,
53
+ getTranslations(locale),
54
+ );
55
+ const langProviderLocale = useDateLocale();
45
56
  const [selectedMonth, setSelectedMonth] = useState<Date | undefined>(
46
57
  defaultSelected,
47
58
  );
@@ -58,29 +69,31 @@ export const MonthPickerStandalone = forwardRef<
58
69
 
59
70
  return (
60
71
  <div ref={ref} className={cl("navds-date__wrapper", className)}>
61
- <DayPickerProvider
62
- initialProps={{
63
- locale: getLocaleFromString(locale),
64
- selected: selected ?? selectedMonth,
65
- toDate,
66
- fromDate,
67
- month: selected ?? selectedMonth,
68
- }}
69
- >
70
- <div className="navds-date rdp-month">
71
- <SharedMonthProvider
72
- dropdownCaption={dropdownCaption}
73
- disabled={disabled}
74
- selected={selected ?? selectedMonth}
75
- onSelect={handleSelect}
76
- year={year}
77
- onYearChange={onYearChange}
78
- >
79
- <MonthCaption />
80
- <MonthSelector />
81
- </SharedMonthProvider>
82
- </div>
83
- </DayPickerProvider>
72
+ <DateTranslationContextProvider translate={translate}>
73
+ <DayPickerProvider
74
+ initialProps={{
75
+ locale: locale ? getLocaleFromString(locale) : langProviderLocale,
76
+ selected: selected ?? selectedMonth,
77
+ toDate,
78
+ fromDate,
79
+ month: selected ?? selectedMonth,
80
+ }}
81
+ >
82
+ <div className="navds-date rdp-month">
83
+ <SharedMonthProvider
84
+ dropdownCaption={dropdownCaption}
85
+ disabled={disabled}
86
+ selected={selected ?? selectedMonth}
87
+ onSelect={handleSelect}
88
+ year={year}
89
+ onYearChange={onYearChange}
90
+ >
91
+ <MonthCaption />
92
+ <MonthSelector />
93
+ </SharedMonthProvider>
94
+ </div>
95
+ </DayPickerProvider>
96
+ </DateTranslationContextProvider>
84
97
  </div>
85
98
  );
86
99
  },
@@ -1,3 +1,4 @@
1
+ import { ComponentTranslation } from "../../util/i18n/i18n.types";
1
2
  import { Matcher } from "../utils";
2
3
 
3
4
  export interface MonthPickerProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -25,8 +26,15 @@ export interface MonthPickerProps extends React.HTMLAttributes<HTMLDivElement> {
25
26
  /**
26
27
  * Changes monthpicker locale
27
28
  * @default "nb" (norsk bokmål)
29
+ * @deprecated Use `<Provider />`-component
28
30
  */
29
31
  locale?: "nb" | "nn" | "en";
32
+ /**
33
+ * i18n-API for customizing texts and labels.
34
+ *
35
+ * **NB: If you need to change the language, use [Provider](https://aksel.nav.no/komponenter/core/provider#84d7ea5ec517) instead.**
36
+ */
37
+ translations?: ComponentTranslation<"DatePicker">;
30
38
  /**
31
39
  * Display dropdown for choosing year. Needs `fromDate` + `toDate` to work.
32
40
  * @default false
@@ -5,8 +5,7 @@ import { ReadOnlyIcon } from "../../form/ReadOnlyIcon";
5
5
  import { FormFieldProps, useFormField } from "../../form/useFormField";
6
6
  import { BodyShort, ErrorMessage, Label } from "../../typography";
7
7
  import { omit } from "../../util";
8
- import { useI18n } from "../../util/i18n/i18n.context";
9
- import { useDateInputContext } from "../context";
8
+ import { useDateInputContext, useDateTranslationContext } from "../context";
10
9
 
11
10
  export interface DateInputProps
12
11
  extends FormFieldProps,
@@ -47,7 +46,7 @@ const DateInput = forwardRef<HTMLInputElement, DateInputProps>((props, ref) => {
47
46
  } = props;
48
47
 
49
48
  const buttonRef = useRef<HTMLButtonElement>(null);
50
- const translate = useI18n("DatePicker");
49
+ const translate = useDateTranslationContext().translate;
51
50
 
52
51
  const isDatepickerVariant = variant === "datepicker";
53
52
 
@@ -5,8 +5,8 @@ import { Modal } from "../../modal";
5
5
  import { useModalContext } from "../../modal/Modal.context";
6
6
  import { Popover } from "../../popover";
7
7
  import { useMedia } from "../../util/hooks";
8
- import { useI18n } from "../../util/i18n/i18n.context";
9
- import { getTranslations } from "../utils";
8
+ import { TFunction, useI18n } from "../../util/i18n/i18n.context";
9
+ import { getGlobalTranslations } from "../utils";
10
10
 
11
11
  const variantToLabel = {
12
12
  single: "chooseDate",
@@ -22,6 +22,7 @@ type DateWrapperProps = {
22
22
  anchor: HTMLDivElement | null;
23
23
  /** @deprecated Temporary to support locale prop */
24
24
  locale: "nb" | "nn" | "en" | undefined;
25
+ translate: TFunction<"DatePicker">;
25
26
  variant: "single" | "multiple" | "range" | "month";
26
27
  popoverProps: {
27
28
  id?: string;
@@ -35,10 +36,11 @@ export const DateWrapper = ({
35
36
  onClose,
36
37
  anchor,
37
38
  locale,
39
+ translate,
38
40
  variant,
39
41
  popoverProps,
40
42
  }: DateWrapperProps) => {
41
- const translate = useI18n("DatePicker", getTranslations(locale));
43
+ const translateGlobal = useI18n("global", getGlobalTranslations(locale));
42
44
  const modalRef = useRef<HTMLDialogElement>(null);
43
45
  const isInModal = useModalContext(false) !== undefined;
44
46
  const hideModal =
@@ -86,7 +88,7 @@ export const DateWrapper = ({
86
88
  size="small"
87
89
  type="button"
88
90
  >
89
- {translate("close")}
91
+ {translateGlobal("close")}
90
92
  </Button>
91
93
  </div>
92
94
  </Modal>
@@ -5,7 +5,11 @@ export {
5
5
  INPUT_DATE_STRING_FORMAT_MONTH,
6
6
  parseDate,
7
7
  } from "./parse-date";
8
- export { getLocaleFromString, getTranslations } from "./locale";
8
+ export {
9
+ getLocaleFromString,
10
+ getTranslations,
11
+ getGlobalTranslations,
12
+ } from "./locale";
9
13
  export { disableDate } from "./dates-disabled";
10
14
 
11
15
  export { dateIsInCurrentMonth, isValidDate } from "./check-dates";
@@ -16,7 +16,7 @@ export const getLocaleFromString = (locale: "nb" | "nn" | "en" = "nb") => {
16
16
 
17
17
  /**
18
18
  * @private
19
- * Temporary for backwards compatibility with locale prop
19
+ * Temporary for backwards compatibility with locale prop. Can be removed when locale prop has been removed.
20
20
  */
21
21
  export const getTranslations = (locale: string | undefined) => {
22
22
  switch (locale) {
@@ -29,3 +29,19 @@ export const getTranslations = (locale: string | undefined) => {
29
29
  return undefined;
30
30
  }
31
31
  };
32
+
33
+ /**
34
+ * @private
35
+ * Temporary for backwards compatibility with locale prop. Can be removed when locale prop has been removed.
36
+ */
37
+ export const getGlobalTranslations = (locale: string | undefined) => {
38
+ switch (locale) {
39
+ case "nn":
40
+ return nn_translations.global;
41
+ case "en":
42
+ case "en-GB":
43
+ return en_translations.global;
44
+ default:
45
+ return undefined;
46
+ }
47
+ };
@@ -27,21 +27,20 @@ const ComboboxWrapper = ({
27
27
  const wrapperRef = useRef<HTMLDivElement | null>(null);
28
28
  const [hasFocusWithin, setHasFocusWithin] = useState(false);
29
29
 
30
- function onFocusInsideWrapper(e) {
30
+ function onFocusInsideWrapper(event: React.FocusEvent<HTMLDivElement>) {
31
31
  if (
32
- !wrapperRef.current?.contains(e.relatedTarget) &&
33
- toggleOpenButtonRef?.current !== e.target
32
+ !wrapperRef.current?.contains(event.relatedTarget) &&
33
+ toggleOpenButtonRef?.current !== event.target
34
34
  ) {
35
- toggleIsListOpen(true);
36
35
  setHasFocusWithin(true);
37
36
  }
38
37
  }
39
38
 
40
- function onBlurWrapper(e) {
41
- if (!wrapperRef.current?.contains(e.relatedTarget)) {
39
+ function onBlurWrapper(event: React.FocusEvent<HTMLDivElement>) {
40
+ if (!wrapperRef.current?.contains(event.relatedTarget)) {
42
41
  toggleIsListOpen(false);
43
42
  setHasFocusWithin(false);
44
- clearInput(e);
43
+ clearInput(event);
45
44
  }
46
45
  }
47
46
 
@@ -26,12 +26,12 @@ const FilteredOptions = () => {
26
26
  const { maxSelected } = useSelectedOptionsContext();
27
27
 
28
28
  const shouldRenderNonSelectables =
29
- maxSelected?.isLimitReached || // Render maxSelected message
29
+ maxSelected.isLimitReached || // Render maxSelected message
30
30
  isLoading || // Render loading message
31
31
  (!isLoading && filteredOptions.length === 0 && !allowNewValues); // Render no hits message
32
32
 
33
33
  const shouldRenderFilteredOptionsList =
34
- (allowNewValues && isValueNew && !maxSelected?.isLimitReached) || // Render add new option
34
+ (allowNewValues && isValueNew && !maxSelected.isLimitReached) || // Render add new option
35
35
  filteredOptions.length > 0; // Render filtered options
36
36
 
37
37
  return (
@@ -45,7 +45,7 @@ const FilteredOptions = () => {
45
45
  >
46
46
  {shouldRenderNonSelectables && (
47
47
  <div className="navds-combobox__list_non-selectables" role="status">
48
- {maxSelected?.isLimitReached && <MaxSelectedMessage />}
48
+ {maxSelected.isLimitReached && <MaxSelectedMessage />}
49
49
  {isLoading && <LoadingMessage />}
50
50
  {!isLoading && filteredOptions.length === 0 && !allowNewValues && (
51
51
  <NoSearchHitsMessage />
@@ -60,7 +60,7 @@ const FilteredOptions = () => {
60
60
  role="listbox"
61
61
  className="navds-combobox__list-options"
62
62
  >
63
- {isValueNew && !maxSelected?.isLimitReached && allowNewValues && (
63
+ {isValueNew && !maxSelected.isLimitReached && allowNewValues && (
64
64
  <AddNewOption />
65
65
  )}
66
66
  {filteredOptions.map((option) => (
@@ -39,7 +39,7 @@ const FilteredOptionsItem = ({ option }: { option: ComboboxOption }) => {
39
39
  const [start, highlight, end] = useTextHighlight(option.label, searchTerm);
40
40
 
41
41
  const isDisabled = (_option: ComboboxOption) =>
42
- maxSelected?.isLimitReached && !isInList(_option.value, selectedOptions);
42
+ maxSelected.isLimitReached && !isInList(_option.value, selectedOptions);
43
43
 
44
44
  return (
45
45
  <li
@@ -9,14 +9,7 @@ const MaxSelectedMessage = () => {
9
9
  inputProps: { id },
10
10
  } = useInputContext();
11
11
  const { maxSelected, selectedOptions } = useSelectedOptionsContext();
12
- const translate = useI18n(
13
- "Combobox",
14
- maxSelected?.message ? { maxSelected: maxSelected.message } : undefined,
15
- );
16
-
17
- if (!maxSelected) {
18
- return null;
19
- }
12
+ const translate = useI18n("Combobox");
20
13
 
21
14
  return (
22
15
  <div
@@ -25,7 +18,7 @@ const MaxSelectedMessage = () => {
25
18
  >
26
19
  {translate("maxSelected", {
27
20
  selected: selectedOptions.length,
28
- limit: maxSelected.limit,
21
+ limit: maxSelected.limit || 0,
29
22
  })}
30
23
  </div>
31
24
  );
@@ -142,13 +142,13 @@ const FilteredOptionsProvider = ({
142
142
  }
143
143
  virtualFocus.resetFocus();
144
144
  if (newState ?? !isInternalListOpen) {
145
- setHideCaret(!!maxSelected?.isLimitReached);
145
+ setHideCaret(maxSelected.isLimitReached);
146
146
  }
147
147
  setInternalListOpen((oldState) => newState ?? !oldState);
148
148
  },
149
149
  [
150
150
  virtualFocus,
151
- maxSelected?.isLimitReached,
151
+ maxSelected.isLimitReached,
152
152
  isInternalListOpen,
153
153
  setHideCaret,
154
154
  disabled,
@@ -178,7 +178,7 @@ const FilteredOptionsProvider = ({
178
178
  }
179
179
  }
180
180
  const maybeMaxSelectedOptionsId =
181
- maxSelected?.isLimitReached &&
181
+ maxSelected.isLimitReached &&
182
182
  filteredOptionsUtils.getMaxSelectedOptionsId(id);
183
183
 
184
184
  return (
@@ -188,7 +188,7 @@ const FilteredOptionsProvider = ({
188
188
  }, [
189
189
  isListOpen,
190
190
  isLoading,
191
- maxSelected?.isLimitReached,
191
+ maxSelected.isLimitReached,
192
192
  value,
193
193
  partialAriaDescribedBy,
194
194
  shouldAutocomplete,
@@ -93,7 +93,7 @@ const InputProvider = ({ children, value: props }: Props) => {
93
93
  );
94
94
 
95
95
  const clearInput = useCallback(
96
- (event: React.PointerEvent | React.KeyboardEvent | React.MouseEvent) => {
96
+ (event: React.PointerEvent | React.KeyboardEvent | React.FocusEvent) => {
97
97
  onClear?.(event);
98
98
  externalOnChange?.("");
99
99
  setInternalValue("");
@@ -75,7 +75,7 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
75
75
 
76
76
  const onEnter = useCallback(
77
77
  (event: React.KeyboardEvent) => {
78
- const isTextInSelectedOptions = (text: string) =>
78
+ const isSelected = (text: string) =>
79
79
  selectedOptions.some(
80
80
  (option) =>
81
81
  option.label.toLocaleLowerCase() === text.toLocaleLowerCase(),
@@ -85,10 +85,10 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
85
85
  event.preventDefault();
86
86
  // Selecting a value from the dropdown / FilteredOptions
87
87
  toggleOption(currentOption, event);
88
- if (!isMultiSelect && !isTextInSelectedOptions(currentOption.label)) {
88
+ if (!isMultiSelect && !isSelected(currentOption.label)) {
89
89
  toggleIsListOpen(false);
90
90
  }
91
- } else if (isTextInSelectedOptions(value)) {
91
+ } else if (isSelected(value)) {
92
92
  event.preventDefault();
93
93
  // Trying to set the same value that is already set, so just clearing the input
94
94
  clearInput(event);
@@ -109,23 +109,23 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
109
109
  filteredOptionsUtil.normalizeText(value) ===
110
110
  filteredOptionsUtil.normalizeText(autoCompletedOption?.label ?? "");
111
111
 
112
- let selectedValue: ComboboxOption | undefined;
112
+ let optionToToggle: ComboboxOption | undefined;
113
113
 
114
114
  if (
115
115
  shouldAutocomplete &&
116
116
  autoCompletedOption &&
117
117
  autoCompleteMatchesValue
118
118
  ) {
119
- selectedValue = autoCompletedOption;
119
+ optionToToggle = autoCompletedOption;
120
120
  } else if (allowNewValues && isValueNew) {
121
- selectedValue = { label: value, value };
121
+ optionToToggle = { label: value, value };
122
122
  }
123
123
 
124
- if (!selectedValue) {
124
+ if (!optionToToggle) {
125
125
  return;
126
126
  }
127
- toggleOption(selectedValue, event);
128
- if (!isMultiSelect && !isTextInSelectedOptions(selectedValue.label)) {
127
+ toggleOption(optionToToggle, event);
128
+ if (!isMultiSelect && !isSelected(optionToToggle.label)) {
129
129
  toggleIsListOpen(false);
130
130
  }
131
131
  }
@@ -279,7 +279,7 @@ const Input = forwardRef<HTMLInputElement, InputProps>(
279
279
  value={value}
280
280
  onBlur={composeEventHandlers(onBlur, virtualFocus.resetFocus)}
281
281
  onClick={() => {
282
- setHideCaret(!!maxSelected?.isLimitReached);
282
+ setHideCaret(maxSelected.isLimitReached);
283
283
  value !== searchTerm && onChange(value);
284
284
  }}
285
285
  onInput={onChangeHandler}
@@ -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,35 +26,31 @@ 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,
35
35
  shouldShowSelectedOptions = true,
36
+
36
37
  ...rest
37
38
  } = props;
38
39
 
39
40
  const {
40
- clearInput,
41
41
  focusInput,
42
42
  inputProps,
43
- value,
44
43
  size = "medium",
45
44
  inputRef,
46
45
  toggleOpenButtonRef,
47
46
  readOnly,
48
47
  } = useInputContext();
49
48
 
50
- const { activeDecendantId } = useFilteredOptionsContext();
49
+ const { activeDecendantId, toggleIsListOpen } = useFilteredOptionsContext();
51
50
  const { selectedOptions } = useSelectedOptionsContext();
52
51
 
53
52
  const mergedInputRef = useMergeRefs(inputRef, ref);
54
53
 
55
- const translate = useI18n(
56
- "Combobox",
57
- clearButtonLabel ? { clear: clearButtonLabel } : undefined,
58
- );
59
-
60
54
  return (
61
55
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events
62
56
  <div
@@ -64,7 +58,14 @@ export const InputController = forwardRef<
64
58
  "navds-combobox__wrapper-inner--virtually-unfocused":
65
59
  activeDecendantId !== undefined,
66
60
  })}
67
- onClick={focusInput}
61
+ onClick={() => {
62
+ if (inputProps.disabled || readOnly) {
63
+ return;
64
+ }
65
+
66
+ toggleIsListOpen(true);
67
+ focusInput();
68
+ }}
68
69
  >
69
70
  {!shouldShowSelectedOptions ? (
70
71
  <Input
@@ -86,19 +87,7 @@ export const InputController = forwardRef<
86
87
  />
87
88
  </SelectedOptions>
88
89
  )}
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>
90
+ {toggleListButton && <ToggleListButton ref={toggleOpenButtonRef} />}
102
91
  </div>
103
92
  );
104
93
  });