@navikt/ds-react 6.4.1 → 6.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 (349) hide show
  1. package/cjs/date/datepicker/parts/DayButton.js +1 -1
  2. package/cjs/date/datepicker/parts/DayButton.js.map +1 -1
  3. package/cjs/date/hooks/useDatepicker.js +4 -1
  4. package/cjs/date/hooks/useDatepicker.js.map +1 -1
  5. package/cjs/date/hooks/useMonthPicker.js +4 -1
  6. package/cjs/date/hooks/useMonthPicker.js.map +1 -1
  7. package/cjs/date/monthpicker/MonthButton.js +1 -1
  8. package/cjs/date/monthpicker/MonthButton.js.map +1 -1
  9. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -4
  10. package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  11. package/cjs/form/combobox/Input/Input.js +6 -1
  12. package/cjs/form/combobox/Input/Input.js.map +1 -1
  13. package/cjs/form/form-summary/FormSummary.d.ts +82 -0
  14. package/cjs/form/form-summary/FormSummary.js +81 -0
  15. package/cjs/form/form-summary/FormSummary.js.map +1 -0
  16. package/cjs/form/form-summary/FormSummaryAnswer.d.ts +11 -0
  17. package/cjs/form/form-summary/FormSummaryAnswer.js +25 -0
  18. package/cjs/form/form-summary/FormSummaryAnswer.js.map +1 -0
  19. package/cjs/form/form-summary/FormSummaryAnswers.d.ts +9 -0
  20. package/cjs/{toggle-group/ToggleItem.js → form/form-summary/FormSummaryAnswers.js} +6 -10
  21. package/cjs/form/form-summary/FormSummaryAnswers.js.map +1 -0
  22. package/cjs/form/form-summary/FormSummaryEditLink.d.ts +17 -0
  23. package/cjs/form/form-summary/FormSummaryEditLink.js +49 -0
  24. package/cjs/form/form-summary/FormSummaryEditLink.js.map +1 -0
  25. package/cjs/form/form-summary/FormSummaryHeader.d.ts +9 -0
  26. package/cjs/{tabs/TabPanel.js → form/form-summary/FormSummaryHeader.js} +6 -6
  27. package/cjs/form/form-summary/FormSummaryHeader.js.map +1 -0
  28. package/cjs/form/form-summary/FormSummaryHeading.d.ts +14 -0
  29. package/cjs/form/form-summary/FormSummaryHeading.js +31 -0
  30. package/cjs/form/form-summary/FormSummaryHeading.js.map +1 -0
  31. package/cjs/form/form-summary/FormSummaryLabel.d.ts +6 -0
  32. package/cjs/form/form-summary/FormSummaryLabel.js +45 -0
  33. package/cjs/form/form-summary/FormSummaryLabel.js.map +1 -0
  34. package/cjs/form/form-summary/FormSummaryValue.d.ts +6 -0
  35. package/cjs/form/form-summary/FormSummaryValue.js +49 -0
  36. package/cjs/form/form-summary/FormSummaryValue.js.map +1 -0
  37. package/cjs/form/form-summary/index.d.ts +8 -0
  38. package/cjs/form/form-summary/index.js +24 -0
  39. package/cjs/form/form-summary/index.js.map +1 -0
  40. package/cjs/index.d.ts +3 -2
  41. package/cjs/index.js +5 -3
  42. package/cjs/index.js.map +1 -1
  43. package/cjs/tabs/Tabs.context.d.ts +30 -0
  44. package/cjs/tabs/Tabs.context.js +14 -0
  45. package/cjs/tabs/Tabs.context.js.map +1 -0
  46. package/cjs/tabs/Tabs.d.ts +8 -43
  47. package/cjs/tabs/Tabs.js +19 -12
  48. package/cjs/tabs/Tabs.js.map +1 -1
  49. package/cjs/tabs/Tabs.types.d.ts +41 -0
  50. package/cjs/tabs/Tabs.types.js +3 -0
  51. package/cjs/tabs/Tabs.types.js.map +1 -0
  52. package/cjs/tabs/index.d.ts +5 -4
  53. package/cjs/tabs/index.js +6 -6
  54. package/cjs/tabs/index.js.map +1 -1
  55. package/cjs/tabs/parts/tab/Tab.d.ts +25 -0
  56. package/cjs/tabs/parts/tab/Tab.js +64 -0
  57. package/cjs/tabs/parts/tab/Tab.js.map +1 -0
  58. package/cjs/tabs/parts/tab/useTab.d.ts +20 -0
  59. package/cjs/tabs/parts/tab/useTab.js +29 -0
  60. package/cjs/tabs/parts/tab/useTab.js.map +1 -0
  61. package/cjs/tabs/parts/tablist/ScrollButtons.d.ts +8 -0
  62. package/cjs/tabs/parts/tablist/ScrollButtons.js +15 -0
  63. package/cjs/tabs/parts/tablist/ScrollButtons.js.map +1 -0
  64. package/{esm/tabs → cjs/tabs/parts/tablist}/TabList.d.ts +1 -1
  65. package/cjs/tabs/parts/tablist/TabList.js +61 -0
  66. package/cjs/tabs/parts/tablist/TabList.js.map +1 -0
  67. package/cjs/tabs/parts/tablist/useScrollButtons.d.ts +12 -0
  68. package/cjs/tabs/parts/tablist/useScrollButtons.js +61 -0
  69. package/cjs/tabs/parts/tablist/useScrollButtons.js.map +1 -0
  70. package/cjs/tabs/parts/tablist/useTabList.d.ts +7 -0
  71. package/cjs/tabs/parts/tablist/useTabList.js +66 -0
  72. package/cjs/tabs/parts/tablist/useTabList.js.map +1 -0
  73. package/cjs/tabs/parts/tabpanel/TabPanel.d.ts +25 -0
  74. package/cjs/tabs/{Tab.js → parts/tabpanel/TabPanel.js} +7 -20
  75. package/cjs/tabs/parts/tabpanel/TabPanel.js.map +1 -0
  76. package/cjs/tabs/parts/tabpanel/useTabPanel.d.ts +12 -0
  77. package/cjs/tabs/parts/tabpanel/useTabPanel.js +17 -0
  78. package/cjs/tabs/parts/tabpanel/useTabPanel.js.map +1 -0
  79. package/cjs/tabs/useTabs.d.ts +14 -0
  80. package/cjs/tabs/useTabs.js +43 -0
  81. package/cjs/tabs/useTabs.js.map +1 -0
  82. package/cjs/toggle-group/ToggleGroup.context.d.ts +31 -0
  83. package/cjs/toggle-group/ToggleGroup.context.js +16 -0
  84. package/cjs/toggle-group/ToggleGroup.context.js.map +1 -0
  85. package/cjs/toggle-group/ToggleGroup.d.ts +5 -36
  86. package/cjs/toggle-group/ToggleGroup.js +24 -24
  87. package/cjs/toggle-group/ToggleGroup.js.map +1 -1
  88. package/cjs/toggle-group/ToggleGroup.types.d.ts +38 -0
  89. package/cjs/toggle-group/ToggleGroup.types.js +3 -0
  90. package/cjs/toggle-group/ToggleGroup.types.js.map +1 -0
  91. package/cjs/toggle-group/index.d.ts +3 -2
  92. package/cjs/toggle-group/index.js +1 -1
  93. package/cjs/toggle-group/index.js.map +1 -1
  94. package/cjs/toggle-group/{ToggleItem.d.ts → parts/ToggleItem.d.ts} +2 -2
  95. package/cjs/toggle-group/parts/ToggleItem.js +53 -0
  96. package/cjs/toggle-group/parts/ToggleItem.js.map +1 -0
  97. package/cjs/toggle-group/parts/useToggleItem.d.ts +20 -0
  98. package/cjs/toggle-group/parts/useToggleItem.js +76 -0
  99. package/cjs/toggle-group/parts/useToggleItem.js.map +1 -0
  100. package/cjs/toggle-group/useToggleGroup.d.ts +8 -0
  101. package/cjs/toggle-group/useToggleGroup.js +29 -0
  102. package/cjs/toggle-group/useToggleGroup.js.map +1 -0
  103. package/cjs/util/hooks/descendants/descendant.js +10 -1
  104. package/cjs/util/hooks/descendants/descendant.js.map +1 -1
  105. package/cjs/util/hooks/descendants/useDescendant.js +0 -5
  106. package/cjs/util/hooks/descendants/useDescendant.js.map +1 -1
  107. package/esm/date/datepicker/parts/DayButton.js +1 -1
  108. package/esm/date/datepicker/parts/DayButton.js.map +1 -1
  109. package/esm/date/hooks/useDatepicker.js +4 -1
  110. package/esm/date/hooks/useDatepicker.js.map +1 -1
  111. package/esm/date/hooks/useMonthPicker.js +4 -1
  112. package/esm/date/hooks/useMonthPicker.js.map +1 -1
  113. package/esm/date/monthpicker/MonthButton.js +1 -1
  114. package/esm/date/monthpicker/MonthButton.js.map +1 -1
  115. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +2 -4
  116. package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
  117. package/esm/form/combobox/Input/Input.js +6 -1
  118. package/esm/form/combobox/Input/Input.js.map +1 -1
  119. package/esm/form/form-summary/FormSummary.d.ts +82 -0
  120. package/esm/form/form-summary/FormSummary.js +52 -0
  121. package/esm/form/form-summary/FormSummary.js.map +1 -0
  122. package/esm/form/form-summary/FormSummaryAnswer.d.ts +11 -0
  123. package/esm/form/form-summary/FormSummaryAnswer.js +19 -0
  124. package/esm/form/form-summary/FormSummaryAnswer.js.map +1 -0
  125. package/esm/form/form-summary/FormSummaryAnswers.d.ts +9 -0
  126. package/esm/{tabs/TabPanel.js → form/form-summary/FormSummaryAnswers.js} +5 -6
  127. package/esm/form/form-summary/FormSummaryAnswers.js.map +1 -0
  128. package/esm/form/form-summary/FormSummaryEditLink.d.ts +17 -0
  129. package/esm/form/form-summary/FormSummaryEditLink.js +20 -0
  130. package/esm/form/form-summary/FormSummaryEditLink.js.map +1 -0
  131. package/esm/form/form-summary/FormSummaryHeader.d.ts +9 -0
  132. package/esm/form/form-summary/FormSummaryHeader.js +19 -0
  133. package/esm/form/form-summary/FormSummaryHeader.js.map +1 -0
  134. package/esm/form/form-summary/FormSummaryHeading.d.ts +14 -0
  135. package/esm/form/form-summary/FormSummaryHeading.js +5 -0
  136. package/esm/form/form-summary/FormSummaryHeading.js.map +1 -0
  137. package/esm/form/form-summary/FormSummaryLabel.d.ts +6 -0
  138. package/esm/form/form-summary/FormSummaryLabel.js +19 -0
  139. package/esm/form/form-summary/FormSummaryLabel.js.map +1 -0
  140. package/esm/form/form-summary/FormSummaryValue.d.ts +6 -0
  141. package/esm/form/form-summary/FormSummaryValue.js +20 -0
  142. package/esm/form/form-summary/FormSummaryValue.js.map +1 -0
  143. package/esm/form/form-summary/index.d.ts +8 -0
  144. package/esm/form/form-summary/index.js +10 -0
  145. package/esm/form/form-summary/index.js.map +1 -0
  146. package/esm/index.d.ts +3 -2
  147. package/esm/index.js +2 -1
  148. package/esm/index.js.map +1 -1
  149. package/esm/tabs/Tabs.context.d.ts +30 -0
  150. package/esm/tabs/Tabs.context.js +10 -0
  151. package/esm/tabs/Tabs.context.js.map +1 -0
  152. package/esm/tabs/Tabs.d.ts +8 -43
  153. package/esm/tabs/Tabs.js +19 -12
  154. package/esm/tabs/Tabs.js.map +1 -1
  155. package/esm/tabs/Tabs.types.d.ts +41 -0
  156. package/esm/tabs/Tabs.types.js +2 -0
  157. package/esm/tabs/Tabs.types.js.map +1 -0
  158. package/esm/tabs/index.d.ts +5 -4
  159. package/esm/tabs/index.js +3 -3
  160. package/esm/tabs/index.js.map +1 -1
  161. package/esm/tabs/parts/tab/Tab.d.ts +25 -0
  162. package/esm/tabs/parts/tab/Tab.js +35 -0
  163. package/esm/tabs/parts/tab/Tab.js.map +1 -0
  164. package/esm/tabs/parts/tab/useTab.d.ts +20 -0
  165. package/esm/tabs/parts/tab/useTab.js +25 -0
  166. package/esm/tabs/parts/tab/useTab.js.map +1 -0
  167. package/esm/tabs/parts/tablist/ScrollButtons.d.ts +8 -0
  168. package/esm/tabs/parts/tablist/ScrollButtons.js +10 -0
  169. package/esm/tabs/parts/tablist/ScrollButtons.js.map +1 -0
  170. package/{cjs/tabs → esm/tabs/parts/tablist}/TabList.d.ts +1 -1
  171. package/esm/tabs/parts/tablist/TabList.js +32 -0
  172. package/esm/tabs/parts/tablist/TabList.js.map +1 -0
  173. package/esm/tabs/parts/tablist/useScrollButtons.d.ts +12 -0
  174. package/esm/tabs/parts/tablist/useScrollButtons.js +57 -0
  175. package/esm/tabs/parts/tablist/useScrollButtons.js.map +1 -0
  176. package/esm/tabs/parts/tablist/useTabList.d.ts +7 -0
  177. package/esm/tabs/parts/tablist/useTabList.js +62 -0
  178. package/esm/tabs/parts/tablist/useTabList.js.map +1 -0
  179. package/esm/tabs/parts/tabpanel/TabPanel.d.ts +25 -0
  180. package/esm/tabs/parts/tabpanel/TabPanel.js +22 -0
  181. package/esm/tabs/parts/tabpanel/TabPanel.js.map +1 -0
  182. package/esm/tabs/parts/tabpanel/useTabPanel.d.ts +12 -0
  183. package/esm/tabs/parts/tabpanel/useTabPanel.js +13 -0
  184. package/esm/tabs/parts/tabpanel/useTabPanel.js.map +1 -0
  185. package/esm/tabs/useTabs.d.ts +14 -0
  186. package/esm/tabs/useTabs.js +39 -0
  187. package/esm/tabs/useTabs.js.map +1 -0
  188. package/esm/toggle-group/ToggleGroup.context.d.ts +31 -0
  189. package/esm/toggle-group/ToggleGroup.context.js +12 -0
  190. package/esm/toggle-group/ToggleGroup.context.js.map +1 -0
  191. package/esm/toggle-group/ToggleGroup.d.ts +5 -36
  192. package/esm/toggle-group/ToggleGroup.js +24 -24
  193. package/esm/toggle-group/ToggleGroup.js.map +1 -1
  194. package/esm/toggle-group/ToggleGroup.types.d.ts +38 -0
  195. package/esm/toggle-group/ToggleGroup.types.js +2 -0
  196. package/esm/toggle-group/ToggleGroup.types.js.map +1 -0
  197. package/esm/toggle-group/index.d.ts +3 -2
  198. package/esm/toggle-group/index.js +1 -1
  199. package/esm/toggle-group/index.js.map +1 -1
  200. package/esm/toggle-group/{ToggleItem.d.ts → parts/ToggleItem.d.ts} +2 -2
  201. package/esm/toggle-group/parts/ToggleItem.js +25 -0
  202. package/esm/toggle-group/parts/ToggleItem.js.map +1 -0
  203. package/esm/toggle-group/parts/useToggleItem.d.ts +20 -0
  204. package/esm/toggle-group/parts/useToggleItem.js +72 -0
  205. package/esm/toggle-group/parts/useToggleItem.js.map +1 -0
  206. package/esm/toggle-group/useToggleGroup.d.ts +8 -0
  207. package/esm/toggle-group/useToggleGroup.js +25 -0
  208. package/esm/toggle-group/useToggleGroup.js.map +1 -0
  209. package/esm/util/hooks/descendants/descendant.js +10 -1
  210. package/esm/util/hooks/descendants/descendant.js.map +1 -1
  211. package/esm/util/hooks/descendants/useDescendant.js +0 -5
  212. package/esm/util/hooks/descendants/useDescendant.js.map +1 -1
  213. package/package.json +15 -6
  214. package/src/date/datepicker/parts/DayButton.tsx +2 -0
  215. package/src/date/hooks/useDatepicker.tsx +5 -1
  216. package/src/date/hooks/useMonthPicker.tsx +5 -1
  217. package/src/date/monthpicker/MonthButton.tsx +1 -0
  218. package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +9 -1
  219. package/src/form/combobox/Input/Input.tsx +5 -0
  220. package/src/form/form-summary/FormSummary.tsx +106 -0
  221. package/src/form/form-summary/FormSummaryAnswer.tsx +27 -0
  222. package/src/form/form-summary/FormSummaryAnswers.tsx +25 -0
  223. package/src/form/form-summary/FormSummaryEditLink.tsx +35 -0
  224. package/src/form/form-summary/FormSummaryHeader.tsx +25 -0
  225. package/src/form/form-summary/FormSummaryHeading.tsx +23 -0
  226. package/src/form/form-summary/FormSummaryLabel.tsx +17 -0
  227. package/src/form/form-summary/FormSummaryValue.tsx +24 -0
  228. package/src/form/form-summary/index.ts +30 -0
  229. package/src/index.ts +16 -15
  230. package/src/tabs/Tabs.context.ts +24 -0
  231. package/src/tabs/Tabs.test.tsx +99 -37
  232. package/src/tabs/Tabs.tsx +48 -70
  233. package/src/tabs/Tabs.types.ts +43 -0
  234. package/src/tabs/index.ts +11 -4
  235. package/src/tabs/parts/tab/Tab.tsx +93 -0
  236. package/src/tabs/parts/tab/useTab.ts +52 -0
  237. package/src/tabs/parts/tablist/ScrollButtons.tsx +29 -0
  238. package/src/tabs/parts/tablist/TabList.tsx +56 -0
  239. package/src/tabs/parts/tablist/useScrollButtons.ts +69 -0
  240. package/src/tabs/parts/tablist/useTabList.ts +68 -0
  241. package/src/tabs/parts/tabpanel/TabPanel.tsx +50 -0
  242. package/src/tabs/parts/tabpanel/useTabPanel.ts +18 -0
  243. package/src/tabs/useTabs.ts +51 -0
  244. package/src/toggle-group/ToggleGroup.context.ts +31 -0
  245. package/src/toggle-group/ToggleGroup.test.tsx +57 -16
  246. package/src/toggle-group/ToggleGroup.tsx +63 -90
  247. package/src/toggle-group/ToggleGroup.types.ts +40 -0
  248. package/src/toggle-group/index.ts +3 -2
  249. package/src/toggle-group/parts/ToggleItem.tsx +55 -0
  250. package/src/toggle-group/parts/useToggleItem.ts +104 -0
  251. package/src/toggle-group/useToggleGroup.ts +33 -0
  252. package/src/util/hooks/descendants/descendant.ts +15 -1
  253. package/src/util/hooks/descendants/useDescendant.tsx +0 -5
  254. package/cjs/tabs/Tab.d.ts +0 -18
  255. package/cjs/tabs/Tab.js.map +0 -1
  256. package/cjs/tabs/TabList.js +0 -111
  257. package/cjs/tabs/TabList.js.map +0 -1
  258. package/cjs/tabs/TabPanel.d.ts +0 -13
  259. package/cjs/tabs/TabPanel.js.map +0 -1
  260. package/cjs/tabs/context.d.ts +0 -8
  261. package/cjs/tabs/context.js +0 -6
  262. package/cjs/tabs/context.js.map +0 -1
  263. package/cjs/toggle-group/ToggleItem.js.map +0 -1
  264. package/cjs/toggle-group/context.d.ts +0 -6
  265. package/cjs/toggle-group/context.js +0 -6
  266. package/cjs/toggle-group/context.js.map +0 -1
  267. package/esm/tabs/Tab.d.ts +0 -18
  268. package/esm/tabs/Tab.js +0 -34
  269. package/esm/tabs/Tab.js.map +0 -1
  270. package/esm/tabs/TabList.js +0 -82
  271. package/esm/tabs/TabList.js.map +0 -1
  272. package/esm/tabs/TabPanel.d.ts +0 -13
  273. package/esm/tabs/TabPanel.js.map +0 -1
  274. package/esm/tabs/context.d.ts +0 -8
  275. package/esm/tabs/context.js +0 -3
  276. package/esm/tabs/context.js.map +0 -1
  277. package/esm/toggle-group/ToggleItem.js +0 -24
  278. package/esm/toggle-group/ToggleItem.js.map +0 -1
  279. package/esm/toggle-group/context.d.ts +0 -6
  280. package/esm/toggle-group/context.js +0 -3
  281. package/esm/toggle-group/context.js.map +0 -1
  282. package/src/accordion/accordion.stories.tsx +0 -286
  283. package/src/alert/alert.stories.tsx +0 -306
  284. package/src/button/button.stories.tsx +0 -185
  285. package/src/chat/chat.stories.tsx +0 -341
  286. package/src/chips/chips.stories.tsx +0 -260
  287. package/src/copybutton/copy-button.stories.tsx +0 -261
  288. package/src/date/datepicker/datepicker.stories.tsx +0 -575
  289. package/src/date/monthpicker/monthpicker.stories.tsx +0 -204
  290. package/src/dropdown/dropdown.stories.tsx +0 -124
  291. package/src/expansion-card/expansion-card.stories.tsx +0 -282
  292. package/src/form/checkbox/checkbox.stories.tsx +0 -281
  293. package/src/form/combobox/combobox.stories.tsx +0 -626
  294. package/src/form/confirmation-panel/confirmation-panel.stories.tsx +0 -128
  295. package/src/form/error-summary/error-summary.stories.tsx +0 -81
  296. package/src/form/fieldset/fieldset.stories.tsx +0 -157
  297. package/src/form/file-upload/file-upload-dropzone.stories.tsx +0 -123
  298. package/src/form/file-upload/file-upload-item.stories.tsx +0 -148
  299. package/src/form/file-upload/file-upload.stories.tsx +0 -248
  300. package/src/form/radio/radio.stories.tsx +0 -230
  301. package/src/form/search/search.stories.tsx +0 -238
  302. package/src/form/select/select.stories.tsx +0 -172
  303. package/src/form/switch/switch.stories.tsx +0 -171
  304. package/src/form/textarea/textarea.stories.tsx +0 -254
  305. package/src/form/textfield/text-field.stories.tsx +0 -143
  306. package/src/guide-panel/guidepanel.stories.tsx +0 -90
  307. package/src/help-text/help-text.stories.tsx +0 -91
  308. package/src/internal-header/header.stories.tsx +0 -229
  309. package/src/layout/bleed/Bleed.stories.tsx +0 -395
  310. package/src/layout/box/Box.stories.tsx +0 -380
  311. package/src/layout/grid/h-grid.stories.tsx +0 -122
  312. package/src/layout/page/Page.stories.tsx +0 -271
  313. package/src/layout/responsive/hide.stories.tsx +0 -80
  314. package/src/layout/responsive/show.stories.tsx +0 -80
  315. package/src/layout/sidemal-test/navno-sidemal.stories.tsx +0 -69
  316. package/src/layout/stack/stack.stories.tsx +0 -183
  317. package/src/link/stories/link.stories.tsx +0 -304
  318. package/src/link-panel/link-panel.stories.tsx +0 -59
  319. package/src/list/list.stories.tsx +0 -280
  320. package/src/loader/loader.stories.tsx +0 -82
  321. package/src/modal/modal.stories.tsx +0 -395
  322. package/src/pagination/pagination.stories.tsx +0 -110
  323. package/src/popover/popover.stories.tsx +0 -113
  324. package/src/portal/Portal.stories.tsx +0 -102
  325. package/src/read-more/readmore.stories.tsx +0 -91
  326. package/src/skeleton/skeleton.stories.tsx +0 -130
  327. package/src/stepper/stepper.stories.tsx +0 -200
  328. package/src/table/stories/table-1.stories.tsx +0 -292
  329. package/src/table/stories/table-2-expandable.stories.tsx +0 -298
  330. package/src/table/stories/table-3-async.stories.tsx +0 -179
  331. package/src/table/stories/tests/table.stories.tsx +0 -102
  332. package/src/tabs/Tab.tsx +0 -66
  333. package/src/tabs/TabList.tsx +0 -128
  334. package/src/tabs/TabPanel.tsx +0 -26
  335. package/src/tabs/Tabs.stories.tsx +0 -191
  336. package/src/tabs/context.ts +0 -9
  337. package/src/tag/tag.stories.tsx +0 -126
  338. package/src/timeline/timeline.stories.tsx +0 -445
  339. package/src/toggle-group/ToggleGroup.stories.tsx +0 -137
  340. package/src/toggle-group/ToggleItem.tsx +0 -41
  341. package/src/toggle-group/context.ts +0 -9
  342. package/src/tooltip/tooltip.stories.tsx +0 -101
  343. package/src/typography/stories/bodylong.stories.tsx +0 -209
  344. package/src/typography/stories/bodyshort.stories.tsx +0 -208
  345. package/src/typography/stories/detail.stories.tsx +0 -115
  346. package/src/typography/stories/error-message.stories.tsx +0 -122
  347. package/src/typography/stories/heading.stories.tsx +0 -169
  348. package/src/typography/stories/label.stories.tsx +0 -131
  349. package/src/util/hooks/descendants/descendant.stories.tsx +0 -147
@@ -1,626 +0,0 @@
1
- import { Meta, StoryFn, StoryObj } from "@storybook/react";
2
- import { expect, fn, userEvent, within } from "@storybook/test";
3
- import React, { useMemo, useRef, useState } from "react";
4
- import { Chips } from "../../chips";
5
- import { TextField } from "../textfield";
6
- import { ComboboxProps, UNSAFE_Combobox } from "./index";
7
-
8
- export default {
9
- title: "ds-react/Combobox",
10
- component: UNSAFE_Combobox,
11
- decorators: [(story) => <div style={{ width: "300px" }}>{story()}</div>],
12
- } satisfies Meta<typeof UNSAFE_Combobox>;
13
-
14
- type StoryObject = StoryObj<typeof UNSAFE_Combobox>;
15
- type StoryFunction = StoryFn<typeof UNSAFE_Combobox>;
16
-
17
- const options = [
18
- "banana",
19
- "apple",
20
- "apple pie",
21
- "tangerine",
22
- "pear",
23
- "grape",
24
- "kiwi",
25
- "mango",
26
- "passion fruit",
27
- "pineapple",
28
- "strawberry",
29
- "watermelon",
30
- "grape fruit",
31
- ];
32
-
33
- export const Default: StoryFunction = (props) => (
34
- <UNSAFE_Combobox {...props} id="combobox" />
35
- );
36
-
37
- Default.args = {
38
- options,
39
- label: "Hva er dine favorittfrukter?",
40
- shouldAutocomplete: true,
41
- isLoading: false,
42
- isMultiSelect: false,
43
- allowNewValues: false,
44
- };
45
- Default.argTypes = {
46
- isListOpen: {
47
- control: { type: "boolean" },
48
- },
49
- maxSelected: {
50
- control: { type: "number" },
51
- },
52
- size: {
53
- options: ["medium", "small"],
54
- defaultValue: "medium",
55
- control: { type: "radio" },
56
- },
57
- };
58
-
59
- export const MultiSelect: StoryFunction = (props) => {
60
- return (
61
- <UNSAFE_Combobox
62
- id="combobox-with-multiselect"
63
- label="Komboboks - velg flere"
64
- options={props.options}
65
- isMultiSelect={props.isMultiSelect}
66
- size={props.size}
67
- />
68
- );
69
- };
70
-
71
- MultiSelect.args = {
72
- options,
73
- isMultiSelect: true,
74
- size: "medium",
75
- };
76
-
77
- export const MultiSelectWithComplexOptions: StoryFunction = (props) => {
78
- const [selectedOptions, setSelectedOptions] = useState<string[]>([]);
79
- return (
80
- <>
81
- <UNSAFE_Combobox
82
- {...props}
83
- options={props.options.map((option) => ({
84
- ...option,
85
- label: `${option.label} [${option.value}]`,
86
- }))}
87
- id="combobox-with-complex-options"
88
- label="Velg temakoder"
89
- allowNewValues
90
- onToggleSelected={(value, isSelected) =>
91
- isSelected
92
- ? setSelectedOptions([...selectedOptions, value])
93
- : setSelectedOptions(selectedOptions.filter((o) => o !== value))
94
- }
95
- selectedOptions={selectedOptions}
96
- />
97
- </>
98
- );
99
- };
100
-
101
- MultiSelectWithComplexOptions.args = {
102
- options: [
103
- { label: "Hjelpemidler", value: "HJE" },
104
- { label: "Oppfølging", value: "OPP" },
105
- { label: "Sykepenger", value: "SYK" },
106
- { label: "Sykemelding", value: "SYM" },
107
- { label: "Foreldre- og svangerskapspenger", value: "FOR" },
108
- { label: "Arbeidsavklaringspenger", value: "AAP" },
109
- { label: "Uføretrygd", value: "UFO" },
110
- { label: "Pensjon", value: "PEN" },
111
- { label: "Barnetrygd", value: "BAR" },
112
- { label: "Kontantstøtte", value: "KON" },
113
- { label: "Bostøtte", value: "BOS" },
114
- { label: "Barnebidrag", value: "BBI" },
115
- { label: "Bidragsforskudd", value: "BIF" },
116
- { label: "Grunn- og hjelpestønad", value: "GRU" },
117
- ],
118
- isMultiSelect: true,
119
- size: "medium",
120
- };
121
-
122
- export const WithAddNewOptions: StoryFunction = (props) => {
123
- return (
124
- <UNSAFE_Combobox
125
- id="combobox-with-add-new-options"
126
- label="Komboboks med mulighet for å legge til nye verdier"
127
- options={props.options}
128
- allowNewValues={props.allowNewValues}
129
- shouldAutocomplete={props.shouldAutocomplete}
130
- />
131
- );
132
- };
133
-
134
- WithAddNewOptions.args = {
135
- options,
136
- allowNewValues: true,
137
- shouldAutocomplete: true,
138
- };
139
-
140
- export const MultiSelectWithAddNewOptions: StoryFunction = (props) => {
141
- return (
142
- <UNSAFE_Combobox
143
- id="combobox-with-multiselect-and-add-new-options"
144
- isMultiSelect={props.isMultiSelect}
145
- label="Multiselect komboboks med mulighet for å legge til nye verdier"
146
- options={props.options}
147
- allowNewValues={props.allowNewValues}
148
- />
149
- );
150
- };
151
-
152
- MultiSelectWithAddNewOptions.args = {
153
- allowNewValues: true,
154
- isMultiSelect: true,
155
- options,
156
- shouldAutocomplete: false,
157
- };
158
-
159
- export const MultiSelectWithExternalChips: StoryFn<{
160
- controlled: boolean;
161
- options: ComboboxProps["options"];
162
- }> = (props) => {
163
- const [selectedOptions, setSelectedOptions] = useState<string[]>([]);
164
- const [value, setValue] = useState("");
165
-
166
- const toggleSelected = (option: string) =>
167
- selectedOptions.includes(option)
168
- ? setSelectedOptions(selectedOptions.filter((opt) => opt !== option))
169
- : setSelectedOptions([...selectedOptions, option]);
170
- return (
171
- <>
172
- {selectedOptions && (
173
- <Chips>
174
- {selectedOptions.map((option) => (
175
- <Chips.Removable
176
- key={option}
177
- onPointerUp={() => toggleSelected(option)}
178
- onKeyUp={(e) => e.key === "Enter" && toggleSelected(option)}
179
- >
180
- {option}
181
- </Chips.Removable>
182
- ))}
183
- </Chips>
184
- )}
185
- <UNSAFE_Combobox
186
- id="combobox-with-external-chips"
187
- options={props.options}
188
- selectedOptions={selectedOptions}
189
- onToggleSelected={(option) => toggleSelected(option)}
190
- isMultiSelect
191
- value={props.controlled ? value : undefined}
192
- onChange={(event) =>
193
- props.controlled
194
- ? setValue(event?.currentTarget.value || "")
195
- : undefined
196
- }
197
- label="Komboboks"
198
- size="medium"
199
- shouldShowSelectedOptions={false}
200
- />
201
- </>
202
- );
203
- };
204
-
205
- MultiSelectWithExternalChips.args = {
206
- controlled: false,
207
- options,
208
- };
209
-
210
- export const Loading: StoryFunction = (props) => (
211
- <UNSAFE_Combobox
212
- id="combobox-with-loading-indicator"
213
- label="Komboboks (laster)"
214
- options={[]}
215
- selectedOptions={[]}
216
- isListOpen={props.isListOpen}
217
- isLoading={props.isLoading}
218
- />
219
- );
220
-
221
- Loading.args = {
222
- isLoading: true,
223
- isListOpen: true,
224
- };
225
-
226
- export const ComboboxWithNoHits: StoryFunction = (props) => {
227
- const [value, setValue] = useState(props.value);
228
- return (
229
- <UNSAFE_Combobox
230
- id="combobox-with-no-hits"
231
- label="Komboboks (uten søketreff)"
232
- options={props.options}
233
- value={value}
234
- onChange={(event) => setValue(event?.currentTarget.value)}
235
- isListOpen={true}
236
- />
237
- );
238
- };
239
-
240
- ComboboxWithNoHits.args = {
241
- options,
242
- value: "Orange",
243
- };
244
-
245
- export const Controlled: StoryFn<{
246
- value: string;
247
- options: string[];
248
- initialSelectedOptions: string[];
249
- }> = (props) => {
250
- const [value, setValue] = useState(props.value);
251
- const [selectedOptions, setSelectedOptions] = useState(
252
- props.initialSelectedOptions,
253
- );
254
- const filteredOptions = useMemo(
255
- () => props.options.filter((option) => option.includes(value)),
256
- [props.options, value],
257
- );
258
-
259
- const onToggleSelected = (option: string, isSelected: boolean) => {
260
- if (isSelected) {
261
- setSelectedOptions([...selectedOptions, option]);
262
- } else {
263
- setSelectedOptions(selectedOptions.filter((o) => o !== option));
264
- }
265
- };
266
-
267
- return (
268
- <>
269
- <TextField
270
- label="Overstyr value"
271
- onChange={(event) => setValue(event.target.value)}
272
- value={value}
273
- />
274
- <br />
275
- <UNSAFE_Combobox
276
- label="Hva er dine favorittfrukter?"
277
- id="combobox-controlled"
278
- filteredOptions={filteredOptions}
279
- isMultiSelect
280
- options={props.options}
281
- onChange={(event) => setValue(event?.target.value || "")}
282
- onToggleSelected={onToggleSelected}
283
- selectedOptions={selectedOptions}
284
- value={value}
285
- />
286
- </>
287
- );
288
- };
289
-
290
- Controlled.args = {
291
- value: "apple",
292
- options,
293
- initialSelectedOptions: ["passion fruit", "grape fruit"],
294
- };
295
-
296
- export const ComboboxSizes = () => (
297
- <>
298
- <UNSAFE_Combobox
299
- label="Hva er dine favorittfrukter?"
300
- description="Medium single-select"
301
- options={options}
302
- />
303
- <br />
304
- <UNSAFE_Combobox
305
- label="Hva er dine favorittfrukter?"
306
- description="Small single-select"
307
- options={options}
308
- size="small"
309
- />
310
- <br />
311
- <UNSAFE_Combobox
312
- label="Hva er dine favorittfrukter?"
313
- description="Medium multiselect"
314
- options={options}
315
- isMultiSelect
316
- allowNewValues
317
- />
318
- <br />
319
- <UNSAFE_Combobox
320
- label="Hva er dine favorittfrukter?"
321
- description="Small multiselect"
322
- options={options}
323
- isMultiSelect
324
- size="small"
325
- allowNewValues
326
- />
327
- </>
328
- );
329
-
330
- export const MaxSelectedOptions: StoryFunction = () => {
331
- const [value, setValue] = useState<string | undefined>("");
332
- const [selectedOptions, setSelectedOptions] = useState([
333
- options[0],
334
- options[1],
335
- ]);
336
- const comboboxRef = useRef<HTMLInputElement>(null);
337
- return (
338
- <UNSAFE_Combobox
339
- id="combobox-with-max-selected-options"
340
- label="Komboboks med begrenset antall valg"
341
- options={options}
342
- maxSelected={{ limit: 2 }}
343
- selectedOptions={selectedOptions}
344
- onToggleSelected={(option, isSelected) =>
345
- isSelected
346
- ? setSelectedOptions([...selectedOptions, option])
347
- : setSelectedOptions(selectedOptions.filter((o) => o !== option))
348
- }
349
- isMultiSelect
350
- allowNewValues
351
- isListOpen={comboboxRef.current ? undefined : true}
352
- value={value}
353
- onChange={(event) => setValue(event?.target.value)}
354
- ref={comboboxRef}
355
- />
356
- );
357
- };
358
-
359
- export const WithError: StoryFunction = (props) => {
360
- const [hasSelectedValue, setHasSelectedValue] = useState(false);
361
- const [isLoading, setIsLoading] = useState(false);
362
- return (
363
- <UNSAFE_Combobox
364
- filteredOptions={isLoading ? [] : undefined}
365
- options={options}
366
- label="Hva er dine favorittfrukter?"
367
- error={!hasSelectedValue && props.error}
368
- isLoading={isLoading}
369
- onChange={() => {
370
- setIsLoading(true);
371
- setTimeout(() => setIsLoading(false), 2000);
372
- }}
373
- onToggleSelected={(_, isSelected) => setHasSelectedValue(isSelected)}
374
- />
375
- );
376
- };
377
- WithError.args = {
378
- error: "Du må velge en favorittfrukt.",
379
- };
380
-
381
- function sleep(ms: number) {
382
- return new Promise((resolve) => setTimeout(resolve, ms));
383
- }
384
-
385
- export const CancelInputTest: StoryObject = {
386
- render: () => {
387
- return (
388
- <UNSAFE_Combobox options={options} label="Hva er dine favorittfrukter?" />
389
- );
390
- },
391
- play: async ({ canvasElement }) => {
392
- const canvas = within(canvasElement);
393
-
394
- const input = canvas.getByLabelText("Hva er dine favorittfrukter?");
395
-
396
- userEvent.click(input);
397
- await userEvent.type(input, "apple", { delay: 200 });
398
- await sleep(1000);
399
-
400
- userEvent.keyboard("{ArrowDown}");
401
- await sleep(1000);
402
- userEvent.keyboard("{Escape}");
403
- await sleep(1000);
404
- userEvent.keyboard("{ArrowDown}");
405
- await sleep(500);
406
- const banana = canvas.getByText("banana");
407
- userEvent.click(banana);
408
- },
409
- };
410
-
411
- export const RemoveSelectedMultiSelectTest: StoryObject = {
412
- render: () => {
413
- return (
414
- <UNSAFE_Combobox
415
- options={options}
416
- label="Hva er dine favorittfrukter?"
417
- isMultiSelect
418
- />
419
- );
420
- },
421
- play: async ({ canvasElement }) => {
422
- const canvas = within(canvasElement);
423
-
424
- const input = canvas.getByLabelText("Hva er dine favorittfrukter?");
425
-
426
- userEvent.click(input);
427
- await userEvent.type(input, "apple", { delay: 200 });
428
- await sleep(250);
429
-
430
- userEvent.keyboard("{ArrowDown}");
431
- await sleep(250);
432
- userEvent.keyboard("{Enter}");
433
- await sleep(250);
434
- userEvent.keyboard("{Escape}");
435
- await sleep(250);
436
-
437
- userEvent.click(input);
438
- await userEvent.type(input, "banana", { delay: 200 });
439
- await sleep(250);
440
-
441
- userEvent.keyboard("{ArrowDown}");
442
- await sleep(250);
443
- userEvent.keyboard("{Enter}");
444
- await sleep(250);
445
-
446
- const appleSlett = canvas.getByLabelText("apple slett");
447
- appleSlett.focus();
448
- await sleep(250);
449
- userEvent.click(appleSlett);
450
- await sleep(250);
451
- const appleOption = canvas.getByRole("option", {
452
- name: "apple",
453
- selected: false,
454
- });
455
- expect(appleOption).toBeVisible();
456
- userEvent.keyboard("{Escape}");
457
- await sleep(250);
458
- expect(appleOption).not.toBeVisible();
459
-
460
- const bananaSlett = canvas.getByLabelText("banana slett");
461
- expect(bananaSlett).toBeInTheDocument();
462
- const appleSlettAgain = canvas.queryByLabelText("apple slett");
463
- expect(appleSlettAgain).not.toBeInTheDocument();
464
- },
465
- };
466
-
467
- export const AddWhenAddNewDisabledTest: StoryObject = {
468
- render: () => {
469
- return (
470
- <UNSAFE_Combobox
471
- options={options}
472
- label="Hva er dine favorittfrukter?"
473
- isMultiSelect
474
- />
475
- );
476
- },
477
- play: async ({ canvasElement }) => {
478
- const canvas = within(canvasElement);
479
-
480
- const input = canvas.getByLabelText("Hva er dine favorittfrukter?");
481
-
482
- userEvent.click(input);
483
- await userEvent.type(input, "aaa", { delay: 200 });
484
- await sleep(250);
485
-
486
- userEvent.keyboard("{ArrowDown}");
487
- await sleep(250);
488
- userEvent.keyboard("{ArrowDown}");
489
- await sleep(250);
490
- userEvent.keyboard("{Enter}");
491
- await sleep(250);
492
- userEvent.keyboard("{Escape}");
493
- await sleep(250);
494
-
495
- const invalidSelect = canvas.queryByLabelText("aaa slett");
496
- expect(invalidSelect).not.toBeInTheDocument();
497
- },
498
- };
499
-
500
- export const TestThatCallbacksOnlyFireWhenExpected: StoryObj<{
501
- onChange: ReturnType<typeof fn>;
502
- onClear: ReturnType<typeof fn>;
503
- onToggleSelected: ReturnType<typeof fn>;
504
- }> = {
505
- args: {
506
- onChange: fn(),
507
- onClear: fn(),
508
- onToggleSelected: fn(),
509
- },
510
- render: (props) => {
511
- return (
512
- <UNSAFE_Combobox
513
- options={options}
514
- label="Hva er dine favorittfrukter?"
515
- {...props}
516
- />
517
- );
518
- },
519
- play: async ({ canvasElement, args }) => {
520
- args.onToggleSelected.mockClear();
521
- args.onClear.mockClear();
522
- args.onChange.mockClear();
523
- const canvas = within(canvasElement);
524
-
525
- const input = canvas.getByLabelText("Hva er dine favorittfrukter?");
526
- const searchWord = "tangerine";
527
-
528
- userEvent.click(input);
529
- await userEvent.type(input, searchWord, { delay: 200 });
530
- await sleep(250);
531
- userEvent.keyboard("{ArrowDown}");
532
- await sleep(250);
533
- userEvent.keyboard("{Enter}");
534
- await sleep(250);
535
- expect(args.onClear.mock.calls).toHaveLength(1);
536
- expect(args.onToggleSelected.mock.calls).toHaveLength(1);
537
- expect(args.onChange.mock.calls).toHaveLength(searchWord.length + 1);
538
- },
539
- };
540
-
541
- export const TestCasingWhenAutoCompleting = {
542
- args: {
543
- onChange: fn(),
544
- onClear: fn(),
545
- onToggleSelected: fn(),
546
- },
547
- render: (props) => {
548
- return (
549
- <UNSAFE_Combobox
550
- options={["Camel Case", "lowercase", "UPPERCASE"]}
551
- label="Liker du best store eller små bokstaver?"
552
- shouldAutocomplete
553
- allowNewValues
554
- {...props}
555
- />
556
- );
557
- },
558
- play: async ({ canvasElement }) => {
559
- const canvas = within(canvasElement);
560
- const input = canvas.getByRole<HTMLInputElement>("combobox");
561
-
562
- // With exisiting option
563
- userEvent.click(input);
564
- await userEvent.type(input, "cAmEl CaSe", { delay: 250 });
565
- await sleep(250);
566
- expect(input.value).toBe("cAmEl CaSe");
567
- await userEvent.type(input, "{Enter}");
568
- await sleep(250);
569
- const chips = canvas.getAllByRole("list")[0];
570
- const selectedUpperCaseChip = within(chips).getAllByRole("listitem")[0];
571
- expect(selectedUpperCaseChip).toHaveTextContent("Camel Case"); // A weird issue is preventing the accessible name from being used in the test, even if it works in VoiceOver
572
-
573
- // With custom option
574
- userEvent.click(input);
575
- await userEvent.type(input, "cAmEl{Backspace}", { delay: 250 });
576
- await sleep(250);
577
- expect(input.value).toBe("cAmEl");
578
- await userEvent.type(input, "{Enter}");
579
- await sleep(250);
580
- const selectedNewValueChip = within(chips).getAllByRole("listitem")[0];
581
- expect(selectedNewValueChip).toHaveTextContent("cAmEl"); // A weird issue is preventing the accessible name from being used in the test, even if it works in VoiceOver
582
- },
583
- };
584
-
585
- export const TestHoverAndFocusSwitching: StoryObject = {
586
- render: () => {
587
- return (
588
- <UNSAFE_Combobox options={options} label="Hva er dine favorittfrukter?" />
589
- );
590
- },
591
- play: async ({ canvasElement }) => {
592
- const canvas = within(canvasElement);
593
-
594
- await sleep(500);
595
-
596
- const getInput = () =>
597
- canvas.getByRole("combobox", {
598
- name: "Hva er dine favorittfrukter?",
599
- });
600
-
601
- userEvent.click(getInput());
602
- expect(getInput().getAttribute("aria-expanded")).toEqual("false");
603
- expect(getInput().getAttribute("aria-activedescendant")).toBeNull();
604
-
605
- await sleep(250);
606
- userEvent.keyboard("{ArrowDown}");
607
- await sleep(250);
608
- const bananaOption = canvas.getByRole("option", { name: "banana" });
609
- expect(getInput().getAttribute("aria-activedescendant")).toBe(
610
- bananaOption.getAttribute("id"),
611
- );
612
-
613
- userEvent.keyboard("{ArrowDown}");
614
- await sleep(250);
615
- const appleOption = canvas.getByRole("option", { name: "apple" });
616
- expect(getInput().getAttribute("aria-activedescendant")).toBe(
617
- appleOption.getAttribute("id"),
618
- );
619
-
620
- userEvent.hover(bananaOption);
621
- await sleep(250);
622
- expect(getInput().getAttribute("aria-activedescendant")).toBe(
623
- bananaOption.getAttribute("id"),
624
- );
625
- },
626
- };