@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
@@ -1,14 +1,12 @@
1
1
  import { PlantIcon } from "@navikt/aksel-icons";
2
+ import { Meta, StoryFn } from "@storybook/react";
2
3
  import React, { useState } from "react";
3
- import { ExpansionCard } from ".";
4
+ import { ExpansionCard, ExpansionCardProps } from ".";
4
5
  import { BodyLong } from "../typography";
5
- import ExpansionCardContent from "./ExpansionCardContent";
6
- import ExpansionCardHeader from "./ExpansionCardHeader";
7
6
 
8
- export default {
7
+ const meta: Meta<typeof ExpansionCard> = {
9
8
  title: "ds-react/ExpansionCard",
10
9
  component: ExpansionCard,
11
- subcomponents: [ExpansionCardHeader, ExpansionCardContent],
12
10
  decorators: [
13
11
  (Story) => (
14
12
  <div
@@ -26,6 +24,7 @@ export default {
26
24
  ),
27
25
  ],
28
26
  };
27
+ export default meta;
29
28
 
30
29
  const Content = () => (
31
30
  <ExpansionCard.Content>
@@ -59,42 +58,54 @@ const Content = () => (
59
58
  </ExpansionCard.Content>
60
59
  );
61
60
 
62
- export const Default = {
63
- render: (props) => {
64
- return (
65
- <ExpansionCard
66
- {...props}
67
- open={props?.open || undefined}
68
- size={props.size}
69
- aria-label="default-demo"
70
- >
71
- <ExpansionCard.Header>
72
- <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
73
- {props.description && (
74
- <ExpansionCard.Description>
75
- For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
76
- til tid, sted og arbeidsoppgaver
77
- </ExpansionCard.Description>
78
- )}
79
- </ExpansionCard.Header>
80
- <Content />
81
- </ExpansionCard>
82
- );
83
- },
84
- args: {
85
- open: false,
86
- size: "medium",
87
- description: false,
88
- variant: "neutral",
89
- },
90
- argTypes: {
91
- size: { control: "select", options: ["medium", "small"] },
92
- },
61
+ type DefaultStoryProps = ExpansionCardProps & { description: boolean };
62
+ type DefaultStory = StoryFn<DefaultStoryProps>;
63
+ export const Default: DefaultStory = (props: DefaultStoryProps) => {
64
+ return (
65
+ <ExpansionCard
66
+ {...props}
67
+ open={props.open || undefined}
68
+ aria-label="default-demo"
69
+ >
70
+ <ExpansionCard.Header>
71
+ <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
72
+ {props.description && (
73
+ <ExpansionCard.Description>
74
+ For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
75
+ til tid, sted og arbeidsoppgaver
76
+ </ExpansionCard.Description>
77
+ )}
78
+ </ExpansionCard.Header>
79
+ <Content />
80
+ </ExpansionCard>
81
+ );
82
+ };
83
+ Default.args = {
84
+ open: false,
85
+ size: "medium",
86
+ description: false,
93
87
  };
88
+ Default.argTypes = {
89
+ size: { control: "radio", options: ["medium", "small"] },
90
+ };
91
+
92
+ export const Description = () => (
93
+ <ExpansionCard aria-label="bare description">
94
+ <ExpansionCard.Header>
95
+ <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
96
+ <ExpansionCard.Description>
97
+ For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
98
+ tid, sted og arbeidsoppgaver
99
+ </ExpansionCard.Description>
100
+ </ExpansionCard.Header>
101
+ <Content />
102
+ </ExpansionCard>
103
+ );
94
104
 
95
- export const Description = {
96
- render: () => (
97
- <ExpansionCard aria-label="bare description">
105
+ export const Sizes = () => (
106
+ <>
107
+ <h2>Medium</h2>
108
+ <ExpansionCard aria-label="Demo med description">
98
109
  <ExpansionCard.Header>
99
110
  <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
100
111
  <ExpansionCard.Description>
@@ -104,16 +115,41 @@ export const Description = {
104
115
  </ExpansionCard.Header>
105
116
  <Content />
106
117
  </ExpansionCard>
107
- ),
108
- };
118
+ <ExpansionCard aria-label="Demo">
119
+ <ExpansionCard.Header>
120
+ <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
121
+ </ExpansionCard.Header>
122
+ <Content />
123
+ </ExpansionCard>
124
+ <h2>Small</h2>
125
+ <ExpansionCard size="small" aria-label="small-demo">
126
+ <ExpansionCard.Header>
127
+ <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
128
+ <ExpansionCard.Description>
129
+ For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
130
+ tid, sted og arbeidsoppgaver
131
+ </ExpansionCard.Description>
132
+ </ExpansionCard.Header>
133
+ <Content />
134
+ </ExpansionCard>
135
+ <ExpansionCard
136
+ size="small"
137
+ aria-label="small-demo med avatar uten description"
138
+ >
139
+ <ExpansionCard.Header>
140
+ <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
141
+ </ExpansionCard.Header>
142
+ <Content />
143
+ </ExpansionCard>
144
+ </>
145
+ );
109
146
 
110
- export const Sizes = {
111
- render: () => (
112
- <>
113
- <h2>Medium</h2>
114
- <ExpansionCard aria-label="Demo med description">
147
+ export const HeadingSizing = () => (
148
+ <>
149
+ {(["large", "medium", "small"] as const).map((size) => (
150
+ <ExpansionCard key={size} aria-label={`demo-${size}`}>
115
151
  <ExpansionCard.Header>
116
- <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
152
+ <ExpansionCard.Title size={size}>{size}</ExpansionCard.Title>
117
153
  <ExpansionCard.Description>
118
154
  For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
119
155
  til tid, sted og arbeidsoppgaver
@@ -121,58 +157,31 @@ export const Sizes = {
121
157
  </ExpansionCard.Header>
122
158
  <Content />
123
159
  </ExpansionCard>
124
- <ExpansionCard aria-label="Demo">
125
- <ExpansionCard.Header>
126
- <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
127
- </ExpansionCard.Header>
128
- <Content />
129
- </ExpansionCard>
130
- <h2>Small</h2>
131
- <ExpansionCard size="small" aria-label="small-demo">
132
- <ExpansionCard.Header>
133
- <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
134
- <ExpansionCard.Description>
135
- For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
136
- til tid, sted og arbeidsoppgaver
137
- </ExpansionCard.Description>
138
- </ExpansionCard.Header>
139
- <Content />
140
- </ExpansionCard>
141
- <ExpansionCard
142
- size="small"
143
- aria-label="small-demo med avatar uten description"
144
- >
145
- <ExpansionCard.Header>
146
- <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
147
- </ExpansionCard.Header>
148
- <Content />
149
- </ExpansionCard>
150
- </>
151
- ),
152
- };
160
+ ))}
161
+ </>
162
+ );
153
163
 
154
- export const HeadingSizing = {
155
- render: () => (
156
- <>
157
- {(["large", "medium", "small"] as const).map((x) => (
158
- <ExpansionCard aria-label={`demo-${x}`}>
159
- <ExpansionCard.Header key={x}>
160
- <ExpansionCard.Title size={x}>{x}</ExpansionCard.Title>
161
- <ExpansionCard.Description>
162
- For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
163
- til tid, sted og arbeidsoppgaver
164
- </ExpansionCard.Description>
165
- </ExpansionCard.Header>
166
- <Content />
167
- </ExpansionCard>
168
- ))}
169
- </>
170
- ),
171
- };
164
+ export const DefaultOpen = () => (
165
+ <ExpansionCard defaultOpen aria-label="defaultOpen demo">
166
+ <ExpansionCard.Header>
167
+ <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
168
+ <ExpansionCard.Description>
169
+ For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
170
+ tid, sted og arbeidsoppgaver
171
+ </ExpansionCard.Description>
172
+ </ExpansionCard.Header>
173
+ <Content />
174
+ </ExpansionCard>
175
+ );
172
176
 
173
- export const DefaultOpen = {
174
- render: () => (
175
- <ExpansionCard defaultOpen aria-label="defaultOpen demo">
177
+ export const ControlledState = () => {
178
+ const [open, setOpen] = useState(false);
179
+ return (
180
+ <ExpansionCard
181
+ open={open}
182
+ onToggle={setOpen}
183
+ aria-label="Controlled-state demo"
184
+ >
176
185
  <ExpansionCard.Header>
177
186
  <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
178
187
  <ExpansionCard.Description>
@@ -182,77 +191,51 @@ export const DefaultOpen = {
182
191
  </ExpansionCard.Header>
183
192
  <Content />
184
193
  </ExpansionCard>
185
- ),
186
- };
187
-
188
- export const ControlledState = {
189
- render: () => {
190
- // eslint-disable-next-line react-hooks/rules-of-hooks
191
- const [open, setOpen] = useState(false);
192
- return (
193
- <ExpansionCard
194
- open={open}
195
- onToggle={setOpen}
196
- aria-label="Controlled-state demo"
197
- >
198
- <ExpansionCard.Header>
199
- <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
200
- <ExpansionCard.Description>
201
- For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
202
- til tid, sted og arbeidsoppgaver
203
- </ExpansionCard.Description>
204
- </ExpansionCard.Header>
205
- <Content />
206
- </ExpansionCard>
207
- );
208
- },
194
+ );
209
195
  };
210
196
 
211
- export const Customization = {
212
- render: () => (
213
- <div className="subtle-card">
214
- <ExpansionCard aria-label="custom-styling demo">
215
- <ExpansionCard.Header>
216
- <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
217
- <ExpansionCard.Description>
218
- For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
219
- til tid, sted og arbeidsoppgaver
220
- </ExpansionCard.Description>
221
- </ExpansionCard.Header>
222
- <Content />
223
- </ExpansionCard>
197
+ export const Customization = () => (
198
+ <div className="subtle-card">
199
+ <ExpansionCard aria-label="custom-styling demo">
200
+ <ExpansionCard.Header>
201
+ <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
202
+ <ExpansionCard.Description>
203
+ For at yrkesskadedekningen skal gjelde, er det som hovedregel krav til
204
+ tid, sted og arbeidsoppgaver
205
+ </ExpansionCard.Description>
206
+ </ExpansionCard.Header>
207
+ <Content />
208
+ </ExpansionCard>
224
209
 
225
- <style>{`
210
+ <style>{`
226
211
  .subtle-card {
227
212
  --ac-expansioncard-bg: var(--a-surface-subtle);
228
213
  --ac-expansioncard-border-open-color: var(--a-border-alt-3);
229
214
  }`}</style>
230
- </div>
231
- ),
232
- };
215
+ </div>
216
+ );
233
217
 
234
- export const Icon = {
235
- render: () => (
236
- <div>
237
- <ExpansionCard aria-label="custom-styling demo">
238
- <ExpansionCard.Header>
239
- <div className="with-icon">
240
- <div className="icon">
241
- <PlantIcon aria-hidden />
242
- </div>
243
- <div>
244
- <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
245
- <ExpansionCard.Description>
246
- For at yrkesskadedekningen skal gjelde, er det som hovedregel
247
- krav til tid, sted og arbeidsoppgaver
248
- </ExpansionCard.Description>
249
- </div>
218
+ export const Icon = () => (
219
+ <div>
220
+ <ExpansionCard aria-label="custom-styling demo">
221
+ <ExpansionCard.Header>
222
+ <div className="with-icon">
223
+ <div className="icon">
224
+ <PlantIcon aria-hidden />
250
225
  </div>
251
- </ExpansionCard.Header>
252
- <Content />
253
- </ExpansionCard>
226
+ <div>
227
+ <ExpansionCard.Title>Arbeidstakere</ExpansionCard.Title>
228
+ <ExpansionCard.Description>
229
+ For at yrkesskadedekningen skal gjelde, er det som hovedregel krav
230
+ til tid, sted og arbeidsoppgaver
231
+ </ExpansionCard.Description>
232
+ </div>
233
+ </div>
234
+ </ExpansionCard.Header>
235
+ <Content />
236
+ </ExpansionCard>
254
237
 
255
- <style>{`
238
+ <style>{`
256
239
  .with-icon {
257
240
  display: flex;
258
241
  align-items: center;
@@ -264,6 +247,5 @@ export const Icon = {
264
247
  display: grid;
265
248
  place-content: center;
266
249
  }`}</style>
267
- </div>
268
- ),
269
- };
250
+ </div>
251
+ );
@@ -1,14 +1,14 @@
1
1
  import React from "react";
2
- import { render } from "@testing-library/react";
2
+ import { render, screen } from "@testing-library/react";
3
3
  import faker from "faker";
4
4
  import { ConfirmationPanel } from ".";
5
5
 
6
6
  test("omits error id from input", async () => {
7
7
  const label = faker.datatype.string();
8
8
 
9
- const { getByLabelText } = render(
10
- <ConfirmationPanel label={label} errorId="wat"></ConfirmationPanel>
11
- );
9
+ render(<ConfirmationPanel label={label} errorId="wat"></ConfirmationPanel>);
12
10
 
13
- expect(getByLabelText(label).getAttribute("errorid")).toBeNull();
11
+ const elm = screen.getByLabelText(label);
12
+ expect(elm).toBeInTheDocument();
13
+ expect(elm.getAttribute("errorid")).toBeNull();
14
14
  });
@@ -138,7 +138,7 @@ export const Select = forwardRef<HTMLSelectElement, SelectProps>(
138
138
  "navds-body-short",
139
139
  `navds-body--${size ?? "medium"}`
140
140
  )}
141
- size={props.htmlSize}
141
+ size={htmlSize}
142
142
  >
143
143
  {children}
144
144
  </select>
@@ -1,21 +1,17 @@
1
1
  import React from "react";
2
- import { act, fireEvent, render, screen } from "@testing-library/react";
2
+ import { fireEvent, render, screen } from "@testing-library/react";
3
3
  import faker from "faker";
4
4
  import { Checkbox, CheckboxGroup } from ".";
5
5
 
6
6
  const firstArgumentOfFirstCall = (fn: jest.Mock) => fn.mock.calls[0][0];
7
7
 
8
- test("checkbox with error id does not give type error", () => {
9
- <Checkbox errorId="wat">child</Checkbox>;
10
- });
11
-
12
8
  test("checkbox group chains onChange calls", async () => {
13
9
  const onGroupChange = jest.fn();
14
10
  const onChange = jest.fn();
15
11
  const value = faker.datatype.string();
16
12
  const label = faker.datatype.string();
17
13
 
18
- const { getByLabelText } = render(
14
+ render(
19
15
  <CheckboxGroup legend="legend" onChange={onGroupChange}>
20
16
  <Checkbox onChange={onChange} value={value}>
21
17
  {label}
@@ -23,13 +19,11 @@ test("checkbox group chains onChange calls", async () => {
23
19
  </CheckboxGroup>
24
20
  );
25
21
 
26
- await act(async () => {
27
- fireEvent.click(getByLabelText(label));
28
- });
22
+ fireEvent.click(screen.getByLabelText(label));
29
23
 
30
- expect(onGroupChange).toBeCalledTimes(1);
31
- expect(onGroupChange).toBeCalledWith([value]);
32
- expect(onChange).toBeCalledTimes(1);
24
+ expect(onGroupChange).toHaveBeenCalledTimes(1);
25
+ expect(onGroupChange).toHaveBeenCalledWith([value]);
26
+ expect(onChange).toHaveBeenCalledTimes(1);
33
27
  expect(firstArgumentOfFirstCall(onChange).target.checked).toBe(true);
34
28
  });
35
29
 
@@ -42,14 +36,10 @@ describe("Checkbox handles controlled-state correctly", () => {
42
36
  );
43
37
 
44
38
  test("Checkbox is still checked after click when controlled", async () => {
45
- const { getByLabelText } = render(
46
- <CheckboxComponent value={["value1", "value2"]} />
47
- );
39
+ render(<CheckboxComponent value={["value1", "value2"]} />);
48
40
 
49
- await act(async () => {
50
- fireEvent.click(getByLabelText("label1"));
51
- fireEvent.click(getByLabelText("label2"));
52
- });
41
+ fireEvent.click(screen.getByLabelText("label1"));
42
+ fireEvent.click(screen.getByLabelText("label2"));
53
43
 
54
44
  expect((screen.getByLabelText("label1") as HTMLInputElement).checked).toBe(
55
45
  true
@@ -63,20 +53,18 @@ describe("Checkbox handles controlled-state correctly", () => {
63
53
  test("onChange called with expected values", async () => {
64
54
  const onGroupChange = jest.fn();
65
55
 
66
- const { getByLabelText } = render(
56
+ render(
67
57
  <CheckboxComponent
68
58
  onChange={onGroupChange}
69
59
  value={["value1", "value2"]}
70
60
  />
71
61
  );
72
62
 
73
- await act(async () => {
74
- fireEvent.click(getByLabelText("label1"));
75
- expect(onGroupChange).lastCalledWith(["value2"]);
63
+ fireEvent.click(screen.getByLabelText("label1"));
64
+ expect(onGroupChange).toHaveBeenLastCalledWith(["value2"]);
76
65
 
77
- fireEvent.click(getByLabelText("label2"));
78
- expect(onGroupChange).lastCalledWith(["value1"]);
79
- });
66
+ fireEvent.click(screen.getByLabelText("label2"));
67
+ expect(onGroupChange).toHaveBeenLastCalledWith(["value1"]);
80
68
  });
81
69
 
82
70
  test("Checkboxes updates after value-prop change", () => {
@@ -1,86 +1,81 @@
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 { Checkbox, CheckboxGroup } from "../../index";
5
4
 
6
- export default {
5
+ const meta: Meta<typeof Checkbox> = {
7
6
  title: "ds-react/Checkbox",
8
7
  component: Checkbox,
9
- subcomponents: {
10
- CheckboxGroup,
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(["checkbox1"]);
17
+ export const Default = (props) => {
18
+ const [state, setState] = useState(["checkbox1"]);
20
19
 
21
- return (
22
- <div>
23
- <CheckboxGroup
24
- legend={props.legend}
25
- description={props.description}
26
- value={props.controlled ? state : undefined}
27
- onChange={props.controlled ? setState : undefined}
28
- hideLegend={props.hideLegend}
29
- error={
30
- props.errorGroup ? "Errormelding for checkboxgruppe" : undefined
20
+ return (
21
+ <div>
22
+ <CheckboxGroup
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.errorGroup ? "Errormelding for checkboxgruppe" : undefined}
29
+ size={props?.size}
30
+ >
31
+ <Checkbox
32
+ value="checkbox1"
33
+ indeterminate={props.indeterminate}
34
+ hideLabel={props.hideLabel}
35
+ >
36
+ {props.children || "Apple"}
37
+ </Checkbox>
38
+ <Checkbox
39
+ value="checkbox2"
40
+ error={props.errorSingle}
41
+ description={
42
+ props.checkboxDescription
43
+ ? "Quis laborum culpa enim amet cillum veniam."
44
+ : undefined
31
45
  }
32
- size={props?.size}
46
+ indeterminate={props.indeterminate}
47
+ hideLabel={props.hideLabel}
33
48
  >
34
- <Checkbox
35
- value="checkbox1"
36
- indeterminate={props.indeterminate}
37
- hideLabel={props.hideLabel}
38
- >
39
- {props.children || "Apple"}
40
- </Checkbox>
41
- <Checkbox
42
- value="checkbox2"
43
- error={props.errorSingle}
44
- description={
45
- props.checkboxDescription
46
- ? "Quis laborum culpa enim amet cillum veniam."
47
- : undefined
48
- }
49
- indeterminate={props.indeterminate}
50
- hideLabel={props.hideLabel}
51
- >
52
- {props.children || "Orange"}
53
- </Checkbox>
54
- <Checkbox
55
- value="checkbox3"
56
- indeterminate={props.indeterminate}
57
- hideLabel={props.hideLabel}
58
- >
59
- {props.children || "Banana"}
60
- </Checkbox>
61
- <Checkbox
62
- value="checkbox4"
63
- indeterminate={props.indeterminate}
64
- hideLabel={props.hideLabel}
65
- >
66
- {props.children || "Melon"}
67
- </Checkbox>
68
- </CheckboxGroup>
69
- </div>
70
- );
71
- },
72
-
73
- args: {
74
- controlled: false,
75
- legend: "Legend-tekst",
76
- checkboxDescription: false,
77
- hideLabel: false,
78
- hideLegend: false,
79
- errorSingle: false,
80
- errorGroup: false,
81
- children: "",
82
- description: "",
83
- },
49
+ {props.children || "Orange"}
50
+ </Checkbox>
51
+ <Checkbox
52
+ value="checkbox3"
53
+ indeterminate={props.indeterminate}
54
+ hideLabel={props.hideLabel}
55
+ >
56
+ {props.children || "Banana"}
57
+ </Checkbox>
58
+ <Checkbox
59
+ value="checkbox4"
60
+ indeterminate={props.indeterminate}
61
+ hideLabel={props.hideLabel}
62
+ >
63
+ {props.children || "Melon"}
64
+ </Checkbox>
65
+ </CheckboxGroup>
66
+ </div>
67
+ );
68
+ };
69
+ Default.args = {
70
+ controlled: false,
71
+ legend: "Legend-tekst",
72
+ checkboxDescription: false,
73
+ hideLabel: false,
74
+ hideLegend: false,
75
+ errorSingle: false,
76
+ errorGroup: false,
77
+ children: "",
78
+ description: "",
84
79
  };
85
80
 
86
81
  export const Group = () => (
@@ -1,17 +1,16 @@
1
1
  import { useContext } from "react";
2
- import { CheckboxProps } from "../..";
2
+ import { CheckboxProps, omit } from "../..";
3
3
  import { useFormField } from "../useFormField";
4
4
  import { CheckboxGroupContext } from "./CheckboxGroup";
5
- import { omit } from "../..";
6
5
 
7
6
  /**
8
7
  * Handles props for Checkboxes in context with Fieldset and CheckboxGroup
9
8
  */
10
- const useCheckbox = ({ children, ...props }: CheckboxProps) => {
9
+ const useCheckbox = (props: CheckboxProps) => {
11
10
  const checkboxGroup = useContext(CheckboxGroupContext);
12
11
 
13
12
  const { inputProps, readOnly, ...rest } = useFormField(
14
- omit(props, ["description"]),
13
+ omit(props, ["description", "children"]),
15
14
  "checkbox"
16
15
  );
17
16