@navikt/ds-react 5.5.0 → 5.6.0-beta.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 (267) hide show
  1. package/_docs.json +446 -888
  2. package/cjs/accordion/AccordionItem.js +3 -2
  3. package/cjs/date/datepicker/DatePickerStandalone.js +2 -2
  4. package/cjs/date/hooks/useDatepicker.js +2 -2
  5. package/cjs/date/hooks/useMonthPicker.js +2 -2
  6. package/cjs/date/hooks/useRangeDatepicker.js +3 -3
  7. package/cjs/date/monthpicker/MonthSelector.js +1 -1
  8. package/cjs/dropdown/Toggle.js +2 -2
  9. package/cjs/dropdown/index.js +0 -15
  10. package/cjs/form/Select.js +1 -1
  11. package/cjs/form/checkbox/useCheckbox.js +3 -4
  12. package/cjs/form/combobox/Combobox.js +1 -1
  13. package/cjs/form/combobox/Input/Input.js +1 -1
  14. package/cjs/form/search/Search.js +3 -1
  15. package/cjs/layout/bleed/Bleed.js +49 -0
  16. package/cjs/layout/bleed/index.js +8 -0
  17. package/cjs/layout/bleed/package.json +6 -0
  18. package/cjs/layout/content-box/ContentBox.js +56 -0
  19. package/cjs/layout/content-box/index.js +8 -0
  20. package/cjs/layout/content-box/package.json +6 -0
  21. package/cjs/layout/page-demo/AvatarPanel.js +18 -0
  22. package/cjs/layout/page-demo/Filter.js +21 -0
  23. package/cjs/layout/page-demo/Header.js +48 -0
  24. package/cjs/layout/page-demo/Intro.js +36 -0
  25. package/cjs/layout/page-demo/Sidebar.js +49 -0
  26. package/cjs/layout/sidemal-test/AvatarPanel.js +18 -0
  27. package/cjs/layout/sidemal-test/Content.js +66 -0
  28. package/cjs/layout/sidemal-test/Filter.js +48 -0
  29. package/cjs/layout/sidemal-test/Header.js +48 -0
  30. package/cjs/layout/sidemal-test/Intro.js +36 -0
  31. package/cjs/layout/sidemal-test/Sidebar.js +49 -0
  32. package/cjs/layout/sidemal-test/content-box/ContentBox.js +65 -0
  33. package/cjs/layout/sidemal-test/content-box/index.js +8 -0
  34. package/cjs/layout/sidemal-test/content-box/package.json +6 -0
  35. package/cjs/layout/stack/Stack.js +2 -2
  36. package/cjs/layout/stack/index.js +3 -1
  37. package/cjs/loader/Loader.js +2 -2
  38. package/cjs/modal/dialog-polyfill.js +2 -0
  39. package/cjs/popover/Popover.js +3 -2
  40. package/cjs/tabs/TabList.js +6 -7
  41. package/cjs/timeline/Pin.js +20 -20
  42. package/cjs/timeline/Timeline.js +4 -4
  43. package/cjs/timeline/period/ClickablePeriod.js +19 -19
  44. package/cjs/timeline/period/index.js +1 -1
  45. package/cjs/timeline/utils/timeline.js +3 -3
  46. package/cjs/toggle-group/ToggleGroup.js +1 -1
  47. package/cjs/tooltip/Tooltip.js +1 -1
  48. package/cjs/typography/Heading.js +1 -1
  49. package/cjs/util/RandomIcon.js +1 -0
  50. package/cjs/util/Slot.js +88 -0
  51. package/cjs/util/useId.js +2 -4
  52. package/esm/accordion/AccordionItem.js +3 -2
  53. package/esm/accordion/AccordionItem.js.map +1 -1
  54. package/esm/date/datepicker/DatePickerStandalone.js +2 -2
  55. package/esm/date/datepicker/DatePickerStandalone.js.map +1 -1
  56. package/esm/date/hooks/useDatepicker.js +2 -2
  57. package/esm/date/hooks/useDatepicker.js.map +1 -1
  58. package/esm/date/hooks/useMonthPicker.js +2 -2
  59. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  60. package/esm/date/hooks/useRangeDatepicker.js +3 -3
  61. package/esm/date/hooks/useRangeDatepicker.js.map +1 -1
  62. package/esm/date/monthpicker/MonthButton.d.ts +2 -2
  63. package/esm/date/monthpicker/MonthPicker.d.ts +1 -1
  64. package/esm/date/monthpicker/MonthSelector.js +1 -1
  65. package/esm/date/monthpicker/MonthSelector.js.map +1 -1
  66. package/esm/date/utils/navigation.d.ts +1 -1
  67. package/esm/date/utils/navigation.js.map +1 -1
  68. package/esm/dropdown/Toggle.js +1 -1
  69. package/esm/dropdown/Toggle.js.map +1 -1
  70. package/esm/dropdown/index.d.ts +1 -2
  71. package/esm/dropdown/index.js +0 -1
  72. package/esm/dropdown/index.js.map +1 -1
  73. package/esm/form/Fieldset/useFieldset.d.ts +1 -1
  74. package/esm/form/Select.js +1 -1
  75. package/esm/form/Select.js.map +1 -1
  76. package/esm/form/checkbox/useCheckbox.d.ts +2 -2
  77. package/esm/form/checkbox/useCheckbox.js +3 -4
  78. package/esm/form/checkbox/useCheckbox.js.map +1 -1
  79. package/esm/form/combobox/Combobox.d.ts +1 -1
  80. package/esm/form/combobox/Combobox.js +1 -1
  81. package/esm/form/combobox/Combobox.js.map +1 -1
  82. package/esm/form/combobox/Input/Input.d.ts +0 -2
  83. package/esm/form/combobox/Input/Input.js +1 -1
  84. package/esm/form/combobox/Input/Input.js.map +1 -1
  85. package/esm/form/radio/useRadio.d.ts +1 -1
  86. package/esm/form/search/Search.js +3 -1
  87. package/esm/form/search/Search.js.map +1 -1
  88. package/esm/layout/bleed/Bleed.d.ts +8 -0
  89. package/esm/layout/bleed/Bleed.js +21 -0
  90. package/esm/layout/bleed/Bleed.js.map +1 -0
  91. package/esm/layout/bleed/index.d.ts +1 -0
  92. package/esm/layout/bleed/index.js +2 -0
  93. package/esm/layout/bleed/index.js.map +1 -0
  94. package/esm/layout/box/Box.d.ts +1 -2
  95. package/esm/layout/box/Box.js.map +1 -1
  96. package/esm/layout/content-box/ContentBox.d.ts +8 -0
  97. package/esm/layout/content-box/ContentBox.js +28 -0
  98. package/esm/layout/content-box/ContentBox.js.map +1 -0
  99. package/esm/layout/content-box/index.d.ts +1 -0
  100. package/esm/layout/content-box/index.js +2 -0
  101. package/esm/layout/content-box/index.js.map +1 -0
  102. package/esm/layout/page-demo/AvatarPanel.d.ts +4 -0
  103. package/esm/layout/page-demo/AvatarPanel.js +12 -0
  104. package/esm/layout/page-demo/AvatarPanel.js.map +1 -0
  105. package/esm/layout/page-demo/Filter.d.ts +2 -0
  106. package/esm/layout/page-demo/Filter.js +15 -0
  107. package/esm/layout/page-demo/Filter.js.map +1 -0
  108. package/esm/layout/page-demo/Header.d.ts +2 -0
  109. package/esm/layout/page-demo/Header.js +42 -0
  110. package/esm/layout/page-demo/Header.js.map +1 -0
  111. package/esm/layout/page-demo/Intro.d.ts +2 -0
  112. package/esm/layout/page-demo/Intro.js +30 -0
  113. package/esm/layout/page-demo/Intro.js.map +1 -0
  114. package/esm/layout/page-demo/Sidebar.d.ts +4 -0
  115. package/esm/layout/page-demo/Sidebar.js +41 -0
  116. package/esm/layout/page-demo/Sidebar.js.map +1 -0
  117. package/esm/layout/sidemal-test/AvatarPanel.d.ts +4 -0
  118. package/esm/layout/sidemal-test/AvatarPanel.js +12 -0
  119. package/esm/layout/sidemal-test/AvatarPanel.js.map +1 -0
  120. package/esm/layout/sidemal-test/Content.d.ts +2 -0
  121. package/esm/layout/sidemal-test/Content.js +60 -0
  122. package/esm/layout/sidemal-test/Content.js.map +1 -0
  123. package/esm/layout/sidemal-test/Filter.d.ts +2 -0
  124. package/esm/layout/sidemal-test/Filter.js +22 -0
  125. package/esm/layout/sidemal-test/Filter.js.map +1 -0
  126. package/esm/layout/sidemal-test/Header.d.ts +2 -0
  127. package/esm/layout/sidemal-test/Header.js +42 -0
  128. package/esm/layout/sidemal-test/Header.js.map +1 -0
  129. package/esm/layout/sidemal-test/Intro.d.ts +2 -0
  130. package/esm/layout/sidemal-test/Intro.js +30 -0
  131. package/esm/layout/sidemal-test/Intro.js.map +1 -0
  132. package/esm/layout/sidemal-test/Sidebar.d.ts +4 -0
  133. package/esm/layout/sidemal-test/Sidebar.js +41 -0
  134. package/esm/layout/sidemal-test/Sidebar.js.map +1 -0
  135. package/esm/layout/sidemal-test/content-box/ContentBox.d.ts +8 -0
  136. package/esm/layout/sidemal-test/content-box/ContentBox.js +37 -0
  137. package/esm/layout/sidemal-test/content-box/ContentBox.js.map +1 -0
  138. package/esm/layout/sidemal-test/content-box/index.d.ts +1 -0
  139. package/esm/layout/sidemal-test/content-box/index.js +2 -0
  140. package/esm/layout/sidemal-test/content-box/index.js.map +1 -0
  141. package/esm/layout/stack/Stack.d.ts +7 -3
  142. package/esm/layout/stack/Stack.js +3 -3
  143. package/esm/layout/stack/Stack.js.map +1 -1
  144. package/esm/layout/stack/index.d.ts +1 -0
  145. package/esm/layout/stack/index.js +1 -0
  146. package/esm/layout/stack/index.js.map +1 -1
  147. package/esm/layout/utilities/css.js.map +1 -1
  148. package/esm/loader/Loader.js +3 -3
  149. package/esm/loader/Loader.js.map +1 -1
  150. package/esm/modal/dialog-polyfill.js +2 -0
  151. package/esm/modal/dialog-polyfill.js.map +1 -1
  152. package/esm/popover/Popover.js +3 -2
  153. package/esm/popover/Popover.js.map +1 -1
  154. package/esm/tabs/TabList.js +6 -7
  155. package/esm/tabs/TabList.js.map +1 -1
  156. package/esm/timeline/Pin.js +21 -21
  157. package/esm/timeline/Pin.js.map +1 -1
  158. package/esm/timeline/Timeline.js +4 -4
  159. package/esm/timeline/Timeline.js.map +1 -1
  160. package/esm/timeline/TimelineRow.js.map +1 -1
  161. package/esm/timeline/hooks/usePeriodContext.d.ts +1 -1
  162. package/esm/timeline/period/ClickablePeriod.js +20 -20
  163. package/esm/timeline/period/ClickablePeriod.js.map +1 -1
  164. package/esm/timeline/period/index.d.ts +2 -2
  165. package/esm/timeline/period/index.js +1 -1
  166. package/esm/timeline/period/index.js.map +1 -1
  167. package/esm/timeline/utils/timeline.js +3 -3
  168. package/esm/timeline/utils/timeline.js.map +1 -1
  169. package/esm/toggle-group/ToggleGroup.js +1 -1
  170. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  171. package/esm/tooltip/Tooltip.js +1 -1
  172. package/esm/tooltip/Tooltip.js.map +1 -1
  173. package/esm/typography/Heading.js +1 -1
  174. package/esm/typography/Heading.js.map +1 -1
  175. package/esm/util/RandomIcon.js +1 -0
  176. package/esm/util/RandomIcon.js.map +1 -1
  177. package/esm/util/Slot.d.ts +6 -0
  178. package/esm/util/Slot.js +60 -0
  179. package/esm/util/Slot.js.map +1 -0
  180. package/esm/util/mergeRefs.d.ts +1 -1
  181. package/esm/util/useId.js +2 -4
  182. package/esm/util/useId.js.map +1 -1
  183. package/package.json +3 -4
  184. package/src/accordion/AccordionItem.tsx +3 -5
  185. package/src/accordion/accordion.stories.tsx +21 -34
  186. package/src/alert/alert.stories.tsx +2 -2
  187. package/src/chips/chips.stories.tsx +29 -32
  188. package/src/date/datepicker/DatePickerStandalone.tsx +1 -3
  189. package/src/date/datepicker/datepicker.stories.tsx +1 -1
  190. package/src/date/datepicker/datepicker.test.tsx +5 -4
  191. package/src/date/hooks/useDatepicker.tsx +2 -2
  192. package/src/date/hooks/useMonthPicker.tsx +2 -2
  193. package/src/date/hooks/useRangeDatepicker.test.tsx +11 -11
  194. package/src/date/hooks/useRangeDatepicker.tsx +3 -3
  195. package/src/date/monthpicker/MonthButton.tsx +2 -2
  196. package/src/date/monthpicker/MonthPicker.tsx +1 -1
  197. package/src/date/monthpicker/MonthSelector.tsx +3 -3
  198. package/src/date/monthpicker/monthpicker.stories.tsx +1 -1
  199. package/src/date/utils/__tests__/get-initial-year.test.ts +0 -12
  200. package/src/date/utils/__tests__/is-match.test.ts +3 -3
  201. package/src/date/utils/__tests__/parse-dates.test.ts +4 -2
  202. package/src/date/utils/navigation.ts +3 -3
  203. package/src/dropdown/Toggle.tsx +1 -1
  204. package/src/dropdown/dropdown.stories.tsx +25 -28
  205. package/src/dropdown/index.ts +1 -2
  206. package/src/expansion-card/expansion-card.stories.tsx +143 -161
  207. package/src/form/ConfirmationPanel.test.tsx +5 -5
  208. package/src/form/Select.tsx +1 -1
  209. package/src/form/checkbox/Checkbox.test.tsx +14 -26
  210. package/src/form/checkbox/checkbox.stories.tsx +66 -71
  211. package/src/form/checkbox/useCheckbox.ts +3 -4
  212. package/src/form/combobox/Combobox.tsx +2 -3
  213. package/src/form/combobox/Input/Input.tsx +1 -3
  214. package/src/form/combobox/combobox.stories.tsx +20 -23
  215. package/src/form/combobox/combobox.test.tsx +22 -20
  216. package/src/form/radio/radio.stories.tsx +39 -44
  217. package/src/form/search/Search.tsx +1 -0
  218. package/src/form/search/search.stories.tsx +22 -26
  219. package/src/form/stories/fieldset.stories.tsx +1 -1
  220. package/src/layout/box/Box.stories.tsx +251 -256
  221. package/src/layout/box/Box.tsx +1 -1
  222. package/src/layout/sidemal-test/AvatarPanel.tsx +27 -0
  223. package/src/layout/sidemal-test/Content.tsx +129 -0
  224. package/src/layout/sidemal-test/Filter.tsx +46 -0
  225. package/src/layout/sidemal-test/Header.tsx +96 -0
  226. package/src/layout/sidemal-test/Intro.tsx +91 -0
  227. package/src/layout/sidemal-test/Sidebar.tsx +77 -0
  228. package/src/layout/sidemal-test/content-box/ContentBox.tsx +46 -0
  229. package/src/layout/sidemal-test/content-box/index.ts +1 -0
  230. package/src/layout/sidemal-test/navno-sidemal.stories.mdx +29 -0
  231. package/src/layout/sidemal-test/navno-sidemal.stories.tsx +65 -0
  232. package/src/layout/sidemal-test/styling.css +43 -0
  233. package/src/layout/stack/Stack.tsx +14 -8
  234. package/src/layout/stack/index.ts +1 -0
  235. package/src/layout/stack/stack.stories.tsx +23 -1
  236. package/src/layout/utilities/css.ts +0 -1
  237. package/src/loader/Loader.tsx +2 -3
  238. package/src/modal/dialog-polyfill.ts +2 -0
  239. package/src/pagination/pagination.stories.tsx +35 -42
  240. package/src/popover/Popover.test.tsx +21 -35
  241. package/src/popover/Popover.tsx +2 -2
  242. package/src/popover/popover.stories.tsx +25 -41
  243. package/src/react-css.d.ts +0 -1
  244. package/src/read-more/readmore.stories.tsx +35 -36
  245. package/src/stepper/stepper.stories.tsx +45 -52
  246. package/src/table/stories/table-expandable.stories.tsx +59 -63
  247. package/src/tabs/TabList.tsx +4 -6
  248. package/src/tabs/Tabs.stories.tsx +3 -3
  249. package/src/tag/tag.stories.tsx +4 -4
  250. package/src/timeline/Pin.tsx +44 -39
  251. package/src/timeline/Timeline.tsx +6 -6
  252. package/src/timeline/TimelineRow.tsx +1 -0
  253. package/src/timeline/hooks/usePeriodContext.tsx +1 -1
  254. package/src/timeline/period/ClickablePeriod.tsx +42 -38
  255. package/src/timeline/period/index.tsx +5 -4
  256. package/src/timeline/timeline.stories.tsx +11 -10
  257. package/src/timeline/utils/timeline.ts +3 -3
  258. package/src/toggle-group/ToggleGroup.stories.tsx +25 -29
  259. package/src/toggle-group/ToggleGroup.tsx +0 -1
  260. package/src/tooltip/Tooltip.test.tsx +40 -54
  261. package/src/tooltip/Tooltip.tsx +1 -1
  262. package/src/typography/Heading.tsx +1 -1
  263. package/src/util/RandomIcon.tsx +1 -0
  264. package/src/util/Slot.tsx +69 -0
  265. package/src/util/__tests__/Slot.test.tsx +98 -0
  266. package/src/util/mergeRefs.tsx +1 -1
  267. package/src/util/useId.ts +1 -3
@@ -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>