@navikt/ds-react 5.5.0 → 5.6.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 (342) hide show
  1. package/_docs.json +507 -106
  2. package/cjs/accordion/Accordion.js +1 -0
  3. package/cjs/accordion/AccordionContext.js +1 -1
  4. package/cjs/accordion/AccordionHeader.js +2 -2
  5. package/cjs/accordion/AccordionItem.js +6 -2
  6. package/cjs/date/datepicker/DatePicker.js +30 -34
  7. package/cjs/date/datepicker/DatePickerStandalone.js +23 -26
  8. package/cjs/date/datepicker/parts/Caption.js +28 -0
  9. package/cjs/date/datepicker/{DayButton.js → parts/DayButton.js} +1 -2
  10. package/cjs/date/datepicker/{caption → parts}/DropdownCaption.js +13 -7
  11. package/cjs/date/datepicker/parts/HeadRow.js +36 -0
  12. package/cjs/date/datepicker/parts/Row.js +23 -0
  13. package/cjs/date/datepicker/{TableHead.js → parts/TableHead.js} +4 -3
  14. package/cjs/date/datepicker/parts/WeekNumber.js +35 -0
  15. package/cjs/date/datepicker/parts/WeekRow.js +34 -0
  16. package/cjs/date/hooks/useDatepicker.js +2 -2
  17. package/cjs/date/hooks/useMonthPicker.js +2 -2
  18. package/cjs/date/hooks/useRangeDatepicker.js +3 -3
  19. package/cjs/date/monthpicker/MonthSelector.js +1 -1
  20. package/cjs/date/utils/get-month-weeks.js +46 -0
  21. package/cjs/date/utils/labels.js +40 -1
  22. package/cjs/dropdown/Toggle.js +2 -2
  23. package/cjs/dropdown/index.js +0 -15
  24. package/cjs/form/Select.js +1 -1
  25. package/cjs/form/checkbox/useCheckbox.js +3 -4
  26. package/cjs/form/combobox/Combobox.js +1 -1
  27. package/cjs/form/combobox/Input/Input.js +1 -1
  28. package/cjs/form/search/Search.js +3 -1
  29. package/cjs/index.js +1 -0
  30. package/cjs/layout/bleed/Bleed.js +69 -0
  31. package/cjs/layout/bleed/index.js +5 -0
  32. package/cjs/layout/bleed/package.json +6 -0
  33. package/cjs/layout/box/Box.js +1 -1
  34. package/cjs/layout/responsive/Responsive.js +8 -6
  35. package/cjs/layout/sidemal-test/AvatarPanel.js +18 -0
  36. package/cjs/layout/sidemal-test/Content.js +66 -0
  37. package/cjs/layout/sidemal-test/Filter.js +48 -0
  38. package/cjs/layout/sidemal-test/Header.js +48 -0
  39. package/cjs/layout/sidemal-test/Intro.js +36 -0
  40. package/cjs/layout/sidemal-test/Sidebar.js +49 -0
  41. package/cjs/layout/sidemal-test/content-box/ContentBox.js +65 -0
  42. package/cjs/layout/sidemal-test/content-box/index.js +8 -0
  43. package/cjs/layout/sidemal-test/content-box/package.json +6 -0
  44. package/cjs/layout/stack/Stack.js +2 -2
  45. package/cjs/layout/stack/index.js +3 -1
  46. package/cjs/layout/utilities/css.js +37 -14
  47. package/cjs/loader/Loader.js +2 -2
  48. package/cjs/modal/dialog-polyfill.js +2 -0
  49. package/cjs/popover/Popover.js +3 -2
  50. package/cjs/tabs/TabList.js +6 -7
  51. package/cjs/timeline/Pin.js +20 -20
  52. package/cjs/timeline/Timeline.js +4 -4
  53. package/cjs/timeline/period/ClickablePeriod.js +19 -19
  54. package/cjs/timeline/period/index.js +1 -1
  55. package/cjs/timeline/utils/timeline.js +3 -3
  56. package/cjs/toggle-group/ToggleGroup.js +1 -1
  57. package/cjs/tooltip/Tooltip.js +1 -1
  58. package/cjs/typography/Heading.js +1 -1
  59. package/cjs/util/RandomIcon.js +1 -0
  60. package/cjs/util/Slot.js +88 -0
  61. package/cjs/util/useId.js +2 -4
  62. package/esm/accordion/Accordion.js +1 -0
  63. package/esm/accordion/Accordion.js.map +1 -1
  64. package/esm/accordion/AccordionContext.d.ts +1 -0
  65. package/esm/accordion/AccordionContext.js +1 -1
  66. package/esm/accordion/AccordionContext.js.map +1 -1
  67. package/esm/accordion/AccordionHeader.js +2 -2
  68. package/esm/accordion/AccordionHeader.js.map +1 -1
  69. package/esm/accordion/AccordionItem.js +6 -2
  70. package/esm/accordion/AccordionItem.js.map +1 -1
  71. package/esm/date/datepicker/DatePicker.d.ts +14 -5
  72. package/esm/date/datepicker/DatePicker.js +29 -33
  73. package/esm/date/datepicker/DatePicker.js.map +1 -1
  74. package/esm/date/datepicker/DatePickerStandalone.d.ts +3 -2
  75. package/esm/date/datepicker/DatePickerStandalone.js +22 -25
  76. package/esm/date/datepicker/DatePickerStandalone.js.map +1 -1
  77. package/esm/date/datepicker/{caption → parts}/Caption.d.ts +3 -0
  78. package/esm/date/datepicker/parts/Caption.js +22 -0
  79. package/esm/date/datepicker/parts/Caption.js.map +1 -0
  80. package/esm/date/datepicker/parts/DayButton.d.ts +4 -0
  81. package/esm/date/datepicker/{DayButton.js → parts/DayButton.js} +2 -1
  82. package/esm/date/datepicker/parts/DayButton.js.map +1 -0
  83. package/esm/date/datepicker/{caption → parts}/DropdownCaption.d.ts +3 -0
  84. package/esm/date/datepicker/parts/DropdownCaption.js +44 -0
  85. package/esm/date/datepicker/parts/DropdownCaption.js.map +1 -0
  86. package/esm/date/datepicker/parts/HeadRow.d.ts +11 -0
  87. package/esm/date/datepicker/parts/HeadRow.js +29 -0
  88. package/esm/date/datepicker/parts/HeadRow.js.map +1 -0
  89. package/esm/date/datepicker/parts/Row.d.ts +17 -0
  90. package/esm/date/datepicker/parts/Row.js +19 -0
  91. package/esm/date/datepicker/parts/Row.js.map +1 -0
  92. package/esm/date/datepicker/parts/TableHead.d.ts +6 -0
  93. package/esm/date/datepicker/{TableHead.js → parts/TableHead.js} +5 -2
  94. package/esm/date/datepicker/parts/TableHead.js.map +1 -0
  95. package/esm/date/datepicker/parts/WeekNumber.d.ts +13 -0
  96. package/esm/date/datepicker/parts/WeekNumber.js +31 -0
  97. package/esm/date/datepicker/parts/WeekNumber.js.map +1 -0
  98. package/esm/date/datepicker/parts/WeekRow.d.ts +5 -0
  99. package/esm/date/datepicker/parts/WeekRow.js +30 -0
  100. package/esm/date/datepicker/parts/WeekRow.js.map +1 -0
  101. package/esm/date/hooks/useDatepicker.js +2 -2
  102. package/esm/date/hooks/useDatepicker.js.map +1 -1
  103. package/esm/date/hooks/useMonthPicker.js +2 -2
  104. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  105. package/esm/date/hooks/useRangeDatepicker.js +3 -3
  106. package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
  107. package/esm/date/monthpicker/MonthButton.d.ts +2 -2
  108. package/esm/date/monthpicker/MonthPicker.d.ts +1 -1
  109. package/esm/date/monthpicker/MonthSelector.js +1 -1
  110. package/esm/date/monthpicker/MonthSelector.js.map +1 -1
  111. package/esm/date/utils/get-month-weeks.d.ts +16 -0
  112. package/esm/date/utils/get-month-weeks.js +42 -0
  113. package/esm/date/utils/get-month-weeks.js.map +1 -0
  114. package/esm/date/utils/labels.d.ts +9 -0
  115. package/esm/date/utils/labels.js +36 -0
  116. package/esm/date/utils/labels.js.map +1 -1
  117. package/esm/date/utils/navigation.d.ts +1 -1
  118. package/esm/date/utils/navigation.js.map +1 -1
  119. package/esm/dropdown/Toggle.js +1 -1
  120. package/esm/dropdown/Toggle.js.map +1 -1
  121. package/esm/dropdown/index.d.ts +1 -2
  122. package/esm/dropdown/index.js +0 -1
  123. package/esm/dropdown/index.js.map +1 -1
  124. package/esm/form/Select.js +1 -1
  125. package/esm/form/Select.js.map +1 -1
  126. package/esm/form/checkbox/useCheckbox.d.ts +1 -1
  127. package/esm/form/checkbox/useCheckbox.js +3 -4
  128. package/esm/form/checkbox/useCheckbox.js.map +1 -1
  129. package/esm/form/combobox/Combobox.d.ts +1 -1
  130. package/esm/form/combobox/Combobox.js +1 -1
  131. package/esm/form/combobox/Combobox.js.map +1 -1
  132. package/esm/form/combobox/Input/Input.d.ts +0 -2
  133. package/esm/form/combobox/Input/Input.js +1 -1
  134. package/esm/form/combobox/Input/Input.js.map +1 -1
  135. package/esm/form/search/Search.js +3 -1
  136. package/esm/form/search/Search.js.map +1 -1
  137. package/esm/index.d.ts +1 -0
  138. package/esm/index.js +1 -0
  139. package/esm/index.js.map +1 -1
  140. package/esm/layout/bleed/Bleed.d.ts +47 -0
  141. package/esm/layout/bleed/Bleed.js +41 -0
  142. package/esm/layout/bleed/Bleed.js.map +1 -0
  143. package/esm/layout/bleed/index.d.ts +1 -0
  144. package/esm/layout/bleed/index.js +2 -0
  145. package/esm/layout/bleed/index.js.map +1 -0
  146. package/esm/layout/box/Box.d.ts +1 -2
  147. package/esm/layout/box/Box.js +1 -1
  148. package/esm/layout/box/Box.js.map +1 -1
  149. package/esm/layout/responsive/Responsive.d.ts +8 -4
  150. package/esm/layout/responsive/Responsive.js +8 -6
  151. package/esm/layout/responsive/Responsive.js.map +1 -1
  152. package/esm/layout/sidemal-test/AvatarPanel.d.ts +4 -0
  153. package/esm/layout/sidemal-test/AvatarPanel.js +12 -0
  154. package/esm/layout/sidemal-test/AvatarPanel.js.map +1 -0
  155. package/esm/layout/sidemal-test/Content.d.ts +2 -0
  156. package/esm/layout/sidemal-test/Content.js +60 -0
  157. package/esm/layout/sidemal-test/Content.js.map +1 -0
  158. package/esm/layout/sidemal-test/Filter.d.ts +2 -0
  159. package/esm/layout/sidemal-test/Filter.js +22 -0
  160. package/esm/layout/sidemal-test/Filter.js.map +1 -0
  161. package/esm/layout/sidemal-test/Header.d.ts +2 -0
  162. package/esm/layout/sidemal-test/Header.js +42 -0
  163. package/esm/layout/sidemal-test/Header.js.map +1 -0
  164. package/esm/layout/sidemal-test/Intro.d.ts +2 -0
  165. package/esm/layout/sidemal-test/Intro.js +30 -0
  166. package/esm/layout/sidemal-test/Intro.js.map +1 -0
  167. package/esm/layout/sidemal-test/Sidebar.d.ts +4 -0
  168. package/esm/layout/sidemal-test/Sidebar.js +41 -0
  169. package/esm/layout/sidemal-test/Sidebar.js.map +1 -0
  170. package/esm/layout/sidemal-test/content-box/ContentBox.d.ts +8 -0
  171. package/esm/layout/sidemal-test/content-box/ContentBox.js +37 -0
  172. package/esm/layout/sidemal-test/content-box/ContentBox.js.map +1 -0
  173. package/esm/layout/sidemal-test/content-box/index.d.ts +1 -0
  174. package/esm/layout/sidemal-test/content-box/index.js +2 -0
  175. package/esm/layout/sidemal-test/content-box/index.js.map +1 -0
  176. package/esm/layout/stack/Stack.d.ts +7 -3
  177. package/esm/layout/stack/Stack.js +3 -3
  178. package/esm/layout/stack/Stack.js.map +1 -1
  179. package/esm/layout/stack/index.d.ts +1 -0
  180. package/esm/layout/stack/index.js +1 -0
  181. package/esm/layout/stack/index.js.map +1 -1
  182. package/esm/layout/utilities/css.d.ts +1 -1
  183. package/esm/layout/utilities/css.js +37 -14
  184. package/esm/layout/utilities/css.js.map +1 -1
  185. package/esm/loader/Loader.js +3 -3
  186. package/esm/loader/Loader.js.map +1 -1
  187. package/esm/modal/dialog-polyfill.js +2 -0
  188. package/esm/modal/dialog-polyfill.js.map +1 -1
  189. package/esm/popover/Popover.js +3 -2
  190. package/esm/popover/Popover.js.map +1 -1
  191. package/esm/tabs/TabList.js +6 -7
  192. package/esm/tabs/TabList.js.map +1 -1
  193. package/esm/timeline/Pin.js +21 -21
  194. package/esm/timeline/Pin.js.map +1 -1
  195. package/esm/timeline/Timeline.js +4 -4
  196. package/esm/timeline/Timeline.js.map +1 -1
  197. package/esm/timeline/TimelineRow.js.map +1 -1
  198. package/esm/timeline/hooks/usePeriodContext.d.ts +1 -1
  199. package/esm/timeline/period/ClickablePeriod.js +20 -20
  200. package/esm/timeline/period/ClickablePeriod.js.map +1 -1
  201. package/esm/timeline/period/index.d.ts +2 -2
  202. package/esm/timeline/period/index.js +1 -1
  203. package/esm/timeline/period/index.js.map +1 -1
  204. package/esm/timeline/utils/timeline.js +3 -3
  205. package/esm/timeline/utils/timeline.js.map +1 -1
  206. package/esm/toggle-group/ToggleGroup.js +1 -1
  207. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  208. package/esm/tooltip/Tooltip.js +1 -1
  209. package/esm/tooltip/Tooltip.js.map +1 -1
  210. package/esm/typography/Heading.js +1 -1
  211. package/esm/typography/Heading.js.map +1 -1
  212. package/esm/util/RandomIcon.js +1 -0
  213. package/esm/util/RandomIcon.js.map +1 -1
  214. package/esm/util/Slot.d.ts +6 -0
  215. package/esm/util/Slot.js +60 -0
  216. package/esm/util/Slot.js.map +1 -0
  217. package/esm/util/mergeRefs.d.ts +1 -1
  218. package/esm/util/useId.js +2 -4
  219. package/esm/util/useId.js.map +1 -1
  220. package/package.json +4 -4
  221. package/src/accordion/Accordion.tsx +1 -0
  222. package/src/accordion/AccordionContext.tsx +2 -1
  223. package/src/accordion/AccordionHeader.tsx +2 -2
  224. package/src/accordion/AccordionItem.tsx +7 -5
  225. package/src/accordion/accordion.stories.tsx +21 -34
  226. package/src/alert/alert.stories.tsx +2 -2
  227. package/src/chips/chips.stories.tsx +29 -32
  228. package/src/date/datepicker/DatePicker.tsx +63 -58
  229. package/src/date/datepicker/DatePickerStandalone.tsx +36 -39
  230. package/src/date/datepicker/datepicker.stories.tsx +67 -2
  231. package/src/date/datepicker/datepicker.test.tsx +5 -4
  232. package/src/date/datepicker/{caption → parts}/Caption.tsx +19 -17
  233. package/src/date/datepicker/{DayButton.tsx → parts/DayButton.tsx} +3 -1
  234. package/src/date/datepicker/parts/DropdownCaption.tsx +113 -0
  235. package/src/date/datepicker/parts/HeadRow.tsx +56 -0
  236. package/src/date/datepicker/parts/Row.tsx +47 -0
  237. package/src/date/datepicker/{TableHead.tsx → parts/TableHead.tsx} +6 -2
  238. package/src/date/datepicker/parts/WeekNumber.tsx +79 -0
  239. package/src/date/datepicker/parts/WeekRow.tsx +60 -0
  240. package/src/date/hooks/useDatepicker.tsx +2 -2
  241. package/src/date/hooks/useMonthPicker.tsx +2 -2
  242. package/src/date/hooks/useRangeDatepicker.test.tsx +11 -11
  243. package/src/date/hooks/useRangeDatepicker.tsx +3 -3
  244. package/src/date/monthpicker/MonthButton.tsx +2 -2
  245. package/src/date/monthpicker/MonthPicker.tsx +1 -1
  246. package/src/date/monthpicker/MonthSelector.tsx +3 -3
  247. package/src/date/monthpicker/monthpicker.stories.tsx +1 -1
  248. package/src/date/utils/__tests__/get-initial-year.test.ts +0 -12
  249. package/src/date/utils/__tests__/get-month-weeks.test.ts +113 -0
  250. package/src/date/utils/__tests__/is-match.test.ts +3 -3
  251. package/src/date/utils/__tests__/parse-dates.test.ts +4 -2
  252. package/src/date/utils/get-month-weeks.ts +93 -0
  253. package/src/date/utils/labels.ts +51 -0
  254. package/src/date/utils/navigation.ts +3 -3
  255. package/src/dropdown/Toggle.tsx +1 -1
  256. package/src/dropdown/dropdown.stories.tsx +25 -28
  257. package/src/dropdown/index.ts +1 -2
  258. package/src/expansion-card/expansion-card.stories.tsx +143 -161
  259. package/src/form/ConfirmationPanel.test.tsx +5 -5
  260. package/src/form/Select.tsx +1 -1
  261. package/src/form/checkbox/Checkbox.test.tsx +14 -26
  262. package/src/form/checkbox/checkbox.stories.tsx +66 -71
  263. package/src/form/checkbox/useCheckbox.ts +3 -4
  264. package/src/form/combobox/Combobox.tsx +2 -3
  265. package/src/form/combobox/Input/Input.tsx +1 -3
  266. package/src/form/combobox/combobox.stories.tsx +20 -23
  267. package/src/form/combobox/combobox.test.tsx +22 -20
  268. package/src/form/radio/radio.stories.tsx +39 -44
  269. package/src/form/search/Search.tsx +1 -0
  270. package/src/form/search/search.stories.tsx +22 -26
  271. package/src/form/stories/fieldset.stories.tsx +1 -1
  272. package/src/index.ts +1 -0
  273. package/src/layout/bleed/Bleed.stories.tsx +381 -0
  274. package/src/layout/bleed/Bleed.tsx +130 -0
  275. package/src/layout/bleed/index.ts +1 -0
  276. package/src/layout/box/Box.stories.tsx +251 -256
  277. package/src/layout/box/Box.tsx +2 -1
  278. package/src/layout/responsive/Responsive.tsx +21 -6
  279. package/src/layout/responsive/hide.stories.tsx +35 -0
  280. package/src/layout/responsive/show.stories.tsx +35 -0
  281. package/src/layout/sidemal-test/AvatarPanel.tsx +27 -0
  282. package/src/layout/sidemal-test/Content.tsx +129 -0
  283. package/src/layout/sidemal-test/Filter.tsx +46 -0
  284. package/src/layout/sidemal-test/Header.tsx +96 -0
  285. package/src/layout/sidemal-test/Intro.tsx +91 -0
  286. package/src/layout/sidemal-test/Sidebar.tsx +77 -0
  287. package/src/layout/sidemal-test/content-box/ContentBox.tsx +46 -0
  288. package/src/layout/sidemal-test/content-box/index.ts +1 -0
  289. package/src/layout/sidemal-test/navno-sidemal.stories.mdx +29 -0
  290. package/src/layout/sidemal-test/navno-sidemal.stories.tsx +65 -0
  291. package/src/layout/sidemal-test/styling.css +43 -0
  292. package/src/layout/stack/Stack.tsx +14 -8
  293. package/src/layout/stack/index.ts +1 -0
  294. package/src/layout/stack/stack.stories.tsx +23 -1
  295. package/src/layout/utilities/css.ts +59 -20
  296. package/src/loader/Loader.tsx +2 -3
  297. package/src/modal/dialog-polyfill.ts +2 -0
  298. package/src/pagination/pagination.stories.tsx +35 -42
  299. package/src/popover/Popover.test.tsx +21 -35
  300. package/src/popover/Popover.tsx +2 -2
  301. package/src/popover/popover.stories.tsx +25 -41
  302. package/src/react-css.d.ts +0 -1
  303. package/src/read-more/readmore.stories.tsx +35 -36
  304. package/src/stepper/stepper.stories.tsx +45 -52
  305. package/src/table/stories/table-expandable.stories.tsx +59 -63
  306. package/src/tabs/TabList.tsx +4 -6
  307. package/src/tabs/Tabs.stories.tsx +3 -3
  308. package/src/tag/tag.stories.tsx +4 -4
  309. package/src/timeline/Pin.tsx +44 -39
  310. package/src/timeline/Timeline.tsx +6 -6
  311. package/src/timeline/TimelineRow.tsx +1 -0
  312. package/src/timeline/hooks/usePeriodContext.tsx +1 -1
  313. package/src/timeline/period/ClickablePeriod.tsx +42 -38
  314. package/src/timeline/period/index.tsx +5 -4
  315. package/src/timeline/timeline.stories.tsx +11 -10
  316. package/src/timeline/utils/timeline.ts +3 -3
  317. package/src/toggle-group/ToggleGroup.stories.tsx +25 -29
  318. package/src/toggle-group/ToggleGroup.tsx +0 -1
  319. package/src/tooltip/Tooltip.test.tsx +40 -54
  320. package/src/tooltip/Tooltip.tsx +1 -1
  321. package/src/typography/Heading.tsx +1 -1
  322. package/src/util/RandomIcon.tsx +1 -0
  323. package/src/util/Slot.tsx +69 -0
  324. package/src/util/__tests__/Slot.test.tsx +98 -0
  325. package/src/util/mergeRefs.tsx +1 -1
  326. package/src/util/useId.ts +1 -3
  327. package/cjs/date/datepicker/caption/Caption.js +0 -23
  328. package/cjs/date/datepicker/caption/index.js +0 -10
  329. package/cjs/date/datepicker/caption/package.json +0 -6
  330. package/esm/date/datepicker/DayButton.d.ts +0 -3
  331. package/esm/date/datepicker/DayButton.js.map +0 -1
  332. package/esm/date/datepicker/TableHead.d.ts +0 -3
  333. package/esm/date/datepicker/TableHead.js.map +0 -1
  334. package/esm/date/datepicker/caption/Caption.js +0 -17
  335. package/esm/date/datepicker/caption/Caption.js.map +0 -1
  336. package/esm/date/datepicker/caption/DropdownCaption.js +0 -38
  337. package/esm/date/datepicker/caption/DropdownCaption.js.map +0 -1
  338. package/esm/date/datepicker/caption/index.d.ts +0 -2
  339. package/esm/date/datepicker/caption/index.js +0 -3
  340. package/esm/date/datepicker/caption/index.js.map +0 -1
  341. package/src/date/datepicker/caption/DropdownCaption.tsx +0 -108
  342. package/src/date/datepicker/caption/index.ts +0 -2
@@ -14,11 +14,9 @@ import Input from "./Input/Input";
14
14
 
15
15
  export const Combobox = forwardRef<
16
16
  HTMLInputElement,
17
- Omit<ComboboxProps, "onChange" | "options" | "size">
17
+ Omit<ComboboxProps, "onChange" | "options" | "size" | "onClear" | "value">
18
18
  >((props, ref) => {
19
19
  const {
20
- value: externalValue,
21
- onClear,
22
20
  className,
23
21
  hideLabel = false,
24
22
  description,
@@ -87,6 +85,7 @@ export const Combobox = forwardRef<
87
85
  </BodyShort>
88
86
  )}
89
87
  <div className="navds-combobox__wrapper">
88
+ {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}
90
89
  <div
91
90
  className={cl(
92
91
  "navds-combobox__wrapper-inner navds-text-field__input",
@@ -14,13 +14,11 @@ interface InputProps
14
14
  extends Omit<InputHTMLAttributes<HTMLInputElement>, "value"> {
15
15
  ref: React.Ref<HTMLInputElement>;
16
16
  inputClassName?: string;
17
- errorId?: string;
18
17
  value?: string;
19
- error?: React.ReactNode;
20
18
  }
21
19
 
22
20
  const Input = forwardRef<HTMLInputElement, InputProps>(
23
- ({ inputClassName, error, errorId, ...rest }, ref) => {
21
+ ({ inputClassName, ...rest }, ref) => {
24
22
  const { clearInput, inputProps, onChange, size, value } = useInputContext();
25
23
  const {
26
24
  selectedOptions,
@@ -1,4 +1,3 @@
1
- /* eslint-disable react-hooks/rules-of-hooks */
2
1
  import { Meta, StoryFn, StoryObj } from "@storybook/react";
3
2
  import React, { useState, useId, useMemo } from "react";
4
3
  import { userEvent, within } from "@storybook/testing-library";
@@ -286,28 +285,26 @@ export const ComboboxSizes = () => (
286
285
  </>
287
286
  );
288
287
 
289
- export const WithError: StoryObject = {
290
- args: {
291
- error: "Du velge en favorittfrukt.",
292
- },
293
- render: (props) => {
294
- const [hasSelectedValue, setHasSelectedValue] = useState(false);
295
- const [isLoading, setIsLoading] = useState(false);
296
- return (
297
- <UNSAFE_Combobox
298
- filteredOptions={isLoading ? [] : undefined}
299
- options={options}
300
- label="Hva er dine favorittfrukter?"
301
- error={!hasSelectedValue && props.error}
302
- isLoading={isLoading}
303
- onChange={() => {
304
- setIsLoading(true);
305
- setTimeout(() => setIsLoading(false), 2000);
306
- }}
307
- onToggleSelected={(_, isSelected) => setHasSelectedValue(isSelected)}
308
- />
309
- );
310
- },
288
+ export const WithError: StoryFunction = (props) => {
289
+ const [hasSelectedValue, setHasSelectedValue] = useState(false);
290
+ const [isLoading, setIsLoading] = useState(false);
291
+ return (
292
+ <UNSAFE_Combobox
293
+ filteredOptions={isLoading ? [] : undefined}
294
+ options={options}
295
+ label="Hva er dine favorittfrukter?"
296
+ error={!hasSelectedValue && props.error}
297
+ isLoading={isLoading}
298
+ onChange={() => {
299
+ setIsLoading(true);
300
+ setTimeout(() => setIsLoading(false), 2000);
301
+ }}
302
+ onToggleSelected={(_, isSelected) => setHasSelectedValue(isSelected)}
303
+ />
304
+ );
305
+ };
306
+ WithError.args = {
307
+ error: "Du må velge en favorittfrukt.",
311
308
  };
312
309
 
313
310
  function sleep(ms: number) {
@@ -1,5 +1,5 @@
1
- /* eslint-disable react/jsx-pascal-case */
2
- import { render } from "@testing-library/react";
1
+ /* eslint-disable testing-library/no-unnecessary-act -- https://kentcdodds.com/blog/fix-the-not-wrapped-in-act-warning */
2
+ import { render, screen } from "@testing-library/react";
3
3
  import userEvent from "@testing-library/user-event";
4
4
  import React, { useId } from "react";
5
5
  import { UNSAFE_Combobox } from "..";
@@ -38,54 +38,58 @@ const App = (props) => {
38
38
  describe("Render combobox", () => {
39
39
  describe("with multi select", () => {
40
40
  it("Should be able to search, select and remove selections", async () => {
41
- const utils = render(<App isMultiSelect options={options} />);
41
+ render(<App isMultiSelect options={options} />);
42
42
 
43
43
  await act(async () => {
44
44
  await userEvent.click(
45
- utils.getByRole("combobox", { name: "Hva er dine favorittfrukter?" })
45
+ screen.getByRole("combobox", { name: "Hva er dine favorittfrukter?" })
46
46
  );
47
47
  });
48
48
  await act(async () => {
49
49
  await userEvent.type(
50
- utils.getByRole("combobox", { name: "Hva er dine favorittfrukter?" }),
50
+ screen.getByRole("combobox", {
51
+ name: "Hva er dine favorittfrukter?",
52
+ }),
51
53
  "apple"
52
54
  );
53
55
  });
54
56
  await act(async () => {
55
57
  await userEvent.click(
56
- await utils.findByRole("option", { name: "apple" })
58
+ await screen.findByRole("option", { name: "apple" })
57
59
  );
58
60
  });
59
61
  expect(
60
- await utils.findByRole("option", { name: "apple", selected: true })
62
+ await screen.findByRole("option", { name: "apple", selected: true })
61
63
  ).toBeInTheDocument();
62
64
  await act(async () => {
63
65
  await userEvent.click(
64
- await utils.findByRole("button", { name: "apple slett" })
66
+ await screen.findByRole("button", { name: "apple slett" })
65
67
  );
66
68
  });
67
69
  });
68
70
  });
69
71
 
70
72
  it("Should show loading icon when loading (used for async search)", async () => {
71
- const utils = render(<App options={[]} isListOpen isLoading />);
73
+ render(<App options={[]} isListOpen isLoading />);
72
74
 
73
- expect(await utils.findByRole("option", { name: "venter..." }));
75
+ expect(
76
+ await screen.findByRole("option", { name: "venter..." })
77
+ ).toBeInTheDocument();
74
78
  });
75
79
  });
76
80
 
77
81
  describe("Combobox state-handling", () => {
78
82
  it("Should not select previous focused element when closes", async () => {
79
- const utils = render(<App options={options} />);
83
+ render(<App options={options} />);
80
84
 
81
85
  await act(async () => {
82
86
  await userEvent.click(
83
- utils.getByRole("combobox", { name: "Hva er dine favorittfrukter?" })
87
+ screen.getByRole("combobox", { name: "Hva er dine favorittfrukter?" })
84
88
  );
85
89
  });
86
90
  await act(async () => {
87
91
  await userEvent.type(
88
- utils.getByRole("combobox", { name: "Hva er dine favorittfrukter?" }),
92
+ screen.getByRole("combobox", { name: "Hva er dine favorittfrukter?" }),
89
93
  "ban"
90
94
  );
91
95
  await userEvent.keyboard("{ArrowDown}");
@@ -93,22 +97,20 @@ describe("Combobox state-handling", () => {
93
97
  await userEvent.keyboard("{Enter}");
94
98
  });
95
99
 
96
- expect(
97
- await utils.queryByRole("button", { name: "banana slett" })
98
- ).toBeNull();
100
+ expect(screen.queryByRole("button", { name: "banana slett" })).toBeNull();
99
101
  });
100
102
 
101
103
  it("Should reset list when resetting input (ESC)", async () => {
102
- const utils = render(<App options={options} />);
104
+ render(<App options={options} />);
103
105
 
104
106
  await act(async () => {
105
107
  await userEvent.click(
106
- utils.getByRole("combobox", { name: "Hva er dine favorittfrukter?" })
108
+ screen.getByRole("combobox", { name: "Hva er dine favorittfrukter?" })
107
109
  );
108
110
  });
109
111
  await act(async () => {
110
112
  await userEvent.type(
111
- utils.getByRole("combobox", { name: "Hva er dine favorittfrukter?" }),
113
+ screen.getByRole("combobox", { name: "Hva er dine favorittfrukter?" }),
112
114
  "apple"
113
115
  );
114
116
  await userEvent.keyboard("{ArrowDown}");
@@ -117,7 +119,7 @@ describe("Combobox state-handling", () => {
117
119
  });
118
120
 
119
121
  expect(
120
- await utils.findByRole("option", { name: "banana" })
122
+ await screen.findByRole("option", { name: "banana" })
121
123
  ).toBeInTheDocument();
122
124
  });
123
125
  });
@@ -1,58 +1,53 @@
1
- /* eslint-disable react-hooks/rules-of-hooks */
2
1
  import { Meta } from "@storybook/react";
3
2
  import React, { useState } from "react";
4
3
  import { Radio, RadioGroup } from "../../index";
5
4
 
6
- export default {
5
+ const meta: Meta<typeof Radio> = {
7
6
  title: "ds-react/Radio",
8
7
  component: Radio,
9
- subcomponents: {
10
- RadioGroup,
11
- },
12
8
  argTypes: {
13
- size: { control: { type: "select", options: ["medium", "small"] } },
9
+ size: {
10
+ options: ["medium", "small"],
11
+ control: { type: "radio" },
12
+ },
14
13
  },
15
- } as Meta;
14
+ };
15
+ export default meta;
16
16
 
17
- export const Default = {
18
- render: (props) => {
19
- const [state, setState] = useState("radio1");
17
+ export const Default = (props) => {
18
+ const [state, setState] = useState("radio1");
20
19
 
21
- return (
22
- <RadioGroup
23
- legend={props.legend}
24
- description={props.description}
25
- value={props.controlled ? state : undefined}
26
- onChange={props.controlled ? setState : undefined}
27
- hideLegend={props.hideLegend}
28
- error={props.error ? "Errormelding" : undefined}
29
- size={props?.size}
20
+ return (
21
+ <RadioGroup
22
+ legend={props.legend}
23
+ description={props.description}
24
+ value={props.controlled ? state : undefined}
25
+ onChange={props.controlled ? setState : undefined}
26
+ hideLegend={props.hideLegend}
27
+ error={props.error ? "Errormelding" : undefined}
28
+ size={props?.size}
29
+ >
30
+ <Radio value="radio1">{props.children || "Apple"}</Radio>
31
+ <Radio
32
+ value="radio2"
33
+ description={props.radioDescription ? "Orange description" : undefined}
30
34
  >
31
- <Radio value="radio1">{props.children || "Apple"}</Radio>
32
- <Radio
33
- value="radio2"
34
- description={
35
- props.radioDescription ? "Orange description" : undefined
36
- }
37
- >
38
- {props.children || "Orange"}
39
- </Radio>
40
- <Radio value="radio3">{props.children || "Banana"}</Radio>
41
- <Radio value="radio4">{props.children || "Melon"}</Radio>
42
- </RadioGroup>
43
- );
44
- },
45
-
46
- args: {
47
- controlled: false,
48
- error: false,
49
- size: "medium",
50
- legend: "Legend-tekst",
51
- radioDescription: false,
52
- hideLegend: false,
53
- children: "",
54
- description: "",
55
- },
35
+ {props.children || "Orange"}
36
+ </Radio>
37
+ <Radio value="radio3">{props.children || "Banana"}</Radio>
38
+ <Radio value="radio4">{props.children || "Melon"}</Radio>
39
+ </RadioGroup>
40
+ );
41
+ };
42
+ Default.args = {
43
+ controlled: false,
44
+ error: false,
45
+ size: "medium",
46
+ legend: "Legend-tekst",
47
+ radioDescription: false,
48
+ hideLegend: false,
49
+ children: "",
50
+ description: "",
56
51
  };
57
52
 
58
53
  export const Group = () => (
@@ -153,6 +153,7 @@ export const Search = forwardRef<HTMLInputElement, SearchProps>(
153
153
  };
154
154
 
155
155
  return (
156
+ // eslint-disable-next-line jsx-a11y/no-static-element-interactions
156
157
  <div
157
158
  onKeyDown={(e) => {
158
159
  if (e.key !== "Escape") {
@@ -1,4 +1,3 @@
1
- /* eslint-disable react-hooks/rules-of-hooks */
2
1
  import { Meta } from "@storybook/react";
3
2
  import React, { useState } from "react";
4
3
 
@@ -32,31 +31,28 @@ export default {
32
31
  },
33
32
  } as Meta;
34
33
 
35
- export const Default = {
36
- render: (props) => {
37
- const [state, setState] = useState("");
38
- return (
39
- <div data-theme={props.darkmode ? "dark" : "light"}>
40
- <Search
41
- value={props.controlled ? state : undefined}
42
- onChange={props.controlled ? setState : undefined}
43
- label="Søk"
44
- size={props.size}
45
- clearButton={props.clearButton}
46
- variant={props.variant}
47
- hideLabel={props.hideLabel}
48
- error={props.error}
49
- onSearchClick={console.log}
50
- />
51
- </div>
52
- );
53
- },
54
-
55
- args: {
56
- controlled: false,
57
- darkmode: false,
58
- hideLabel: true,
59
- },
34
+ export const Default = (props) => {
35
+ const [state, setState] = useState("");
36
+ return (
37
+ <div data-theme={props.darkmode ? "dark" : "light"}>
38
+ <Search
39
+ value={props.controlled ? state : undefined}
40
+ onChange={props.controlled ? setState : undefined}
41
+ label="Søk"
42
+ size={props.size}
43
+ clearButton={props.clearButton}
44
+ variant={props.variant}
45
+ hideLabel={props.hideLabel}
46
+ error={props.error}
47
+ onSearchClick={console.log}
48
+ />
49
+ </div>
50
+ );
51
+ };
52
+ Default.args = {
53
+ controlled: false,
54
+ darkmode: false,
55
+ hideLabel: true,
60
56
  };
61
57
 
62
58
  export const Small = () => (
@@ -114,7 +114,7 @@ export const Disabled = () => (
114
114
  </div>
115
115
  );
116
116
 
117
- export const hideLegend = () => (
117
+ export const HideLegend = () => (
118
118
  <Fieldset legend="Mollit eiusmod" hideLegend>
119
119
  {content}
120
120
  </Fieldset>
package/src/index.ts CHANGED
@@ -32,6 +32,7 @@ export * from "./toggle-group";
32
32
  export * from "./tooltip";
33
33
  export * from "./typography";
34
34
  export * from "./util";
35
+ export * from "./layout/bleed";
35
36
  export * from "./layout/box";
36
37
  export * from "./layout/stack";
37
38
  export * from "./layout/grid";