@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,179 +0,0 @@
1
- import React, { useState } from "react";
2
- import useSWR from "swr";
3
- import { Loader } from "../../loader";
4
- import { Pagination } from "../../pagination";
5
- import Table from "../Table";
6
- import { SortState } from "../types";
7
- import peopleJson from "./people.json";
8
-
9
- export default {
10
- title: "ds-react/Table",
11
- component: Table,
12
- parameters: {
13
- chromatic: { disable: true },
14
- },
15
- };
16
-
17
- const rowsPerPage = 10;
18
-
19
- const queryString = (obj: Record<string, number | string | undefined>) =>
20
- Object.keys(obj)
21
- .filter((key) => obj[key] !== undefined)
22
- .map((key) => key + "=" + obj[key])
23
- .join("&");
24
-
25
- const updateData = async (url: string) => {
26
- const newUrl = new URL(`https://www.example.com/${url}`);
27
- const comparator = (
28
- a: Record<string, string | number | null>,
29
- b: Record<string, string | number | null>,
30
- orderBy: string,
31
- ) => {
32
- if ((b[orderBy] ?? "") < (a[orderBy] ?? "")) {
33
- return -1;
34
- }
35
- if ((b[orderBy] ?? "") > (a[orderBy] ?? "")) {
36
- return 1;
37
- }
38
- return 0;
39
- };
40
-
41
- const page = Number(newUrl.searchParams.get("page"));
42
- const sort = newUrl.searchParams.get("sort");
43
-
44
- await new Promise((resolve) =>
45
- setTimeout(resolve, Math.round(Math.random() * (1000 - 200) + 200)),
46
- );
47
-
48
- return {
49
- count: peopleJson.length,
50
- results: peopleJson
51
- .slice()
52
- .sort((a, b) => {
53
- if (sort) {
54
- const [orderBy, direction] = sort.split(":");
55
- return direction === "ascending"
56
- ? comparator(b, a, orderBy)
57
- : comparator(a, b, orderBy);
58
- }
59
- return 1;
60
- })
61
- .slice((page - 1) * rowsPerPage, page * rowsPerPage),
62
- };
63
- };
64
-
65
- export const Async = () => {
66
- const [page, setPage] = useState(1);
67
- const [sort, setSort] = useState<SortState>();
68
-
69
- const { data } = useSWR(
70
- `/people?${queryString({
71
- page,
72
- sort: sort ? `${sort.orderBy}:${sort.direction}` : undefined,
73
- })}`,
74
- (url) => updateData(url),
75
- );
76
-
77
- if (!data) {
78
- return <Loader size="2xlarge" />;
79
- }
80
-
81
- const { results: people, count } = data;
82
-
83
- type ColumnsType = {
84
- key: keyof (typeof people)[0];
85
- name: string;
86
- width: number;
87
- sortable?: boolean;
88
- value?: (person: (typeof people)[0]) => string | undefined;
89
- };
90
- const columns: ColumnsType[] = [
91
- { key: "name", name: "Name", width: 154 },
92
- { key: "height", name: "Height", width: 108 },
93
- { key: "mass", name: "Mass", width: 95 },
94
- {
95
- key: "birth_year",
96
- name: "Birth year",
97
- value: (person) =>
98
- person.birth_year !== null ? `${person.birth_year}BBY` : undefined,
99
- width: 133,
100
- },
101
- { key: "eye_color", name: "Eye color", width: 127 },
102
- { key: "gender", name: "Gender", width: 113, sortable: false },
103
- { key: "hair_color", name: "Hair color", width: 132 },
104
- { key: "skin_color", name: "Skin color", width: 133 },
105
- ];
106
-
107
- return (
108
- <div
109
- style={{
110
- display: "flex",
111
- flexDirection: "column",
112
- gap: 16,
113
- }}
114
- >
115
- <div style={{ overflow: "auto" }}>
116
- <Table
117
- style={{ width: "initial" }}
118
- sort={sort}
119
- onSortChange={(sortKey) =>
120
- setSort(
121
- !sortKey ||
122
- (sort?.orderBy === sortKey && sort.direction === "descending")
123
- ? undefined
124
- : {
125
- orderBy: sortKey,
126
- direction:
127
- sort?.direction === "ascending"
128
- ? "descending"
129
- : "ascending",
130
- },
131
- )
132
- }
133
- >
134
- <Table.Header>
135
- <Table.Row>
136
- {columns.map(({ key, name, width, sortable = true }) => (
137
- <Table.ColumnHeader
138
- style={{ width, minWidth: width, maxWidth: width }}
139
- key={key}
140
- sortable={sortable}
141
- sortKey={key}
142
- >
143
- {name}
144
- </Table.ColumnHeader>
145
- ))}
146
- </Table.Row>
147
- </Table.Header>
148
- <Table.Body>
149
- {people.map((person) => (
150
- <Table.Row key={person.name}>
151
- {columns.map(({ key, width, value }) => (
152
- <Table.DataCell
153
- style={{
154
- width,
155
- minWidth: width,
156
- maxWidth: width,
157
- overflow: "hidden",
158
- whiteSpace: "nowrap",
159
- textOverflow: "ellipsis",
160
- }}
161
- title={person[key]?.toString()}
162
- key={key}
163
- >
164
- {value ? value(person) : person[key]}
165
- </Table.DataCell>
166
- ))}
167
- </Table.Row>
168
- ))}
169
- </Table.Body>
170
- </Table>
171
- </div>
172
- <Pagination
173
- page={page}
174
- onPageChange={setPage}
175
- count={Math.ceil(count / rowsPerPage)}
176
- />
177
- </div>
178
- );
179
- };
@@ -1,102 +0,0 @@
1
- import { expect, fn, userEvent, within } from "@storybook/test";
2
- import React from "react";
3
- import Table from "../../Table";
4
-
5
- export default {
6
- title: "ds-react/Table/Tests",
7
- component: Table,
8
- parameters: {
9
- chromatic: { disable: true },
10
- },
11
- };
12
-
13
- export const ClickableRowTest = {
14
- render: ({ onOpenChange }) => {
15
- return (
16
- <>
17
- <Table zebraStripes>
18
- <Table.Header>
19
- <Table.Row>
20
- <Table.HeaderCell aria-hidden />
21
- <Table.HeaderCell aria-hidden />
22
- <Table.HeaderCell aria-hidden />
23
- <Table.HeaderCell aria-hidden />
24
- <Table.HeaderCell aria-hidden />
25
- <Table.HeaderCell aria-hidden />
26
- </Table.Row>
27
- </Table.Header>
28
- <Table.Body>
29
- <Table.ExpandableRow
30
- content={<div>placeholder row 2</div>}
31
- togglePlacement="right"
32
- data-testid="row1"
33
- expandOnRowClick
34
- onOpenChange={onOpenChange}
35
- >
36
- <Table.DataCell>
37
- <div data-testid="cell1">Should be clickable</div>
38
- </Table.DataCell>
39
- <Table.DataCell data-testid="cell2">
40
- Should also be clickable
41
- </Table.DataCell>
42
-
43
- <Table.DataCell>
44
- <button data-testid="cell3">Should not be clickable</button>
45
- </Table.DataCell>
46
- <Table.DataCell>
47
- <div>
48
- <div>
49
- <button data-testid="cell4">
50
- Nested should not be clickable
51
- </button>
52
- </div>
53
- </div>
54
- </Table.DataCell>
55
- <Table.DataCell>
56
- <div>
57
- <div>
58
- <button data-testid="cell4">
59
- <span>2x nested should not be clickable</span>
60
- </button>
61
- </div>
62
- </div>
63
- </Table.DataCell>
64
- </Table.ExpandableRow>
65
- </Table.Body>
66
- </Table>
67
- </>
68
- );
69
- },
70
- args: {
71
- onOpenChange: fn(),
72
- },
73
- play: async ({ canvasElement, args }) => {
74
- args.onOpenChange.mockClear();
75
- const canvas = within(canvasElement);
76
-
77
- const cell1 = canvas.getByText("Should be clickable");
78
- const cell2 = canvas.getByText("Should also be clickable");
79
- const cell3 = canvas.getByText("Should not be clickable");
80
- const cell4 = canvas.getByText("Nested should not be clickable");
81
- const cell5 = canvas.getByText("2x nested should not be clickable");
82
-
83
- await userEvent.click(cell1);
84
- expect(args.onOpenChange.mock.calls).toHaveLength(1);
85
- await userEvent.click(cell1);
86
- expect(args.onOpenChange.mock.calls).toHaveLength(2);
87
-
88
- await userEvent.click(cell2);
89
- expect(args.onOpenChange.mock.calls).toHaveLength(3);
90
- await userEvent.click(cell2);
91
- expect(args.onOpenChange.mock.calls).toHaveLength(4);
92
-
93
- await userEvent.click(cell3);
94
- expect(args.onOpenChange.mock.calls).toHaveLength(4);
95
-
96
- await userEvent.click(cell4);
97
- expect(args.onOpenChange.mock.calls).toHaveLength(4);
98
-
99
- await userEvent.click(cell5);
100
- expect(args.onOpenChange.mock.calls).toHaveLength(4);
101
- },
102
- };
package/src/tabs/Tab.tsx DELETED
@@ -1,66 +0,0 @@
1
- import * as RadixTabs from "@radix-ui/react-tabs";
2
- import cl from "clsx";
3
- import React, { forwardRef, useContext } from "react";
4
- import { BodyShort } from "../typography";
5
- import { OverridableComponent } from "../util/types";
6
- import { TabsContext } from "./context";
7
-
8
- export interface TabProps
9
- extends Omit<React.HTMLAttributes<HTMLButtonElement>, "children"> {
10
- /**
11
- * Tab label
12
- */
13
- label?: React.ReactNode;
14
- /**
15
- * Tab Icon
16
- */
17
- icon?: React.ReactNode;
18
- /**
19
- * Value for state-handling
20
- */
21
- value: string;
22
- }
23
-
24
- export const Tab: OverridableComponent<TabProps, HTMLButtonElement> =
25
- forwardRef(
26
- (
27
- { className, as: Component = "button", label, icon, value, ...rest },
28
- ref,
29
- ) => {
30
- const context = useContext(TabsContext);
31
-
32
- if (!label && !icon) {
33
- console.error("<Tabs.Tab/> needs label/icon");
34
- return null;
35
- }
36
-
37
- return (
38
- <RadixTabs.Trigger value={value} asChild>
39
- <Component
40
- ref={ref}
41
- className={cl(
42
- "navds-tabs__tab",
43
- `navds-tabs__tab--${context?.size ?? "medium"}`,
44
- `navds-tabs__tab-icon--${context?.iconPosition}`,
45
- className,
46
- {
47
- "navds-tabs__tab--icon-only": icon && !label,
48
- },
49
- )}
50
- {...rest}
51
- >
52
- <BodyShort
53
- as="span"
54
- className="navds-tabs__tab-inner"
55
- size={context?.size}
56
- >
57
- {icon}
58
- {label}
59
- </BodyShort>
60
- </Component>
61
- </RadixTabs.Trigger>
62
- );
63
- },
64
- );
65
-
66
- export default Tab;
@@ -1,128 +0,0 @@
1
- import * as RadixTabs from "@radix-ui/react-tabs";
2
- import cl from "clsx";
3
- import React, {
4
- forwardRef,
5
- useContext,
6
- useEffect,
7
- useMemo,
8
- useRef,
9
- useState,
10
- } from "react";
11
- import { ChevronLeftIcon, ChevronRightIcon } from "@navikt/aksel-icons";
12
- import { debounce } from "../util";
13
- import { useMergeRefs } from "../util/hooks/useMergeRefs";
14
- import { TabsContext } from "./context";
15
-
16
- export interface TabListProps extends React.HTMLAttributes<HTMLDivElement> {
17
- /**
18
- * `<Tabs.Tab />` elements
19
- */
20
- children: React.ReactNode;
21
- }
22
-
23
- export const TabList = forwardRef<HTMLDivElement, TabListProps>(
24
- ({ className, ...rest }, ref) => {
25
- const context = useContext(TabsContext);
26
- const listRef = useRef<HTMLDivElement | null>(null);
27
- const mergedRef = useMergeRefs(listRef, ref);
28
-
29
- const [displayScroll, setDisplayScroll] = useState({
30
- start: false,
31
- end: false,
32
- });
33
-
34
- const updateScrollButtonState = useMemo(
35
- () =>
36
- debounce(() => {
37
- if (!listRef?.current) return;
38
- const { scrollWidth, clientWidth } = listRef.current;
39
- const scrollLeft = listRef.current.scrollLeft;
40
- // use 1 for the potential rounding error with browser zooms.
41
- const showStartScroll = scrollLeft > 1;
42
- const showEndScroll = scrollLeft < scrollWidth - clientWidth - 1;
43
-
44
- setDisplayScroll((oldDisplayScroll) =>
45
- showStartScroll === oldDisplayScroll.start &&
46
- showEndScroll === oldDisplayScroll.end
47
- ? oldDisplayScroll
48
- : { start: showStartScroll, end: showEndScroll },
49
- );
50
- }),
51
- [],
52
- );
53
-
54
- useEffect(() => {
55
- const handleResize = () => updateScrollButtonState();
56
- const win = listRef.current?.ownerDocument ?? document ?? window;
57
- win.addEventListener("resize", handleResize);
58
-
59
- let resizeObserver;
60
-
61
- if (typeof ResizeObserver !== "undefined") {
62
- resizeObserver = new ResizeObserver(handleResize);
63
- resizeObserver.observe(listRef.current);
64
- }
65
-
66
- return () => {
67
- win.removeEventListener("resize", handleResize);
68
- if (resizeObserver) {
69
- resizeObserver.disconnect();
70
- }
71
- };
72
- }, [updateScrollButtonState]);
73
-
74
- useEffect(() => {
75
- updateScrollButtonState();
76
- });
77
-
78
- useEffect(() => {
79
- return () => {
80
- updateScrollButtonState.clear();
81
- };
82
- }, [updateScrollButtonState]);
83
-
84
- const ScrollButton = ({
85
- dir,
86
- hidden,
87
- }: {
88
- dir: 1 | -1;
89
- hidden: boolean;
90
- }) => (
91
- // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
92
- <div
93
- className={cl("navds-tabs__scroll-button", {
94
- "navds-tabs__scroll-button--hidden": hidden,
95
- })}
96
- onClick={() => {
97
- if (!listRef.current) return;
98
- listRef.current.scrollLeft += dir * 100;
99
- }}
100
- >
101
- {dir === -1 ? (
102
- <ChevronLeftIcon title="scroll tilbake" />
103
- ) : (
104
- <ChevronRightIcon title="scroll neste" />
105
- )}
106
- </div>
107
- );
108
-
109
- const showSteppers = displayScroll.end || displayScroll.start;
110
- return (
111
- <div className="navds-tabs__tablist-wrapper">
112
- {showSteppers && (
113
- <ScrollButton dir={-1} hidden={!displayScroll.start} />
114
- )}
115
- <RadixTabs.TabsList
116
- {...rest}
117
- ref={mergedRef}
118
- onScroll={updateScrollButtonState}
119
- loop={context?.loop}
120
- className={cl("navds-tabs__tablist", className)}
121
- />
122
- {showSteppers && <ScrollButton dir={1} hidden={!displayScroll.end} />}
123
- </div>
124
- );
125
- },
126
- );
127
-
128
- export default TabList;
@@ -1,26 +0,0 @@
1
- import * as RadixTabs from "@radix-ui/react-tabs";
2
- import cl from "clsx";
3
- import React, { forwardRef } from "react";
4
-
5
- export interface TabPanelProps extends React.HTMLAttributes<HTMLDivElement> {
6
- /**
7
- * Tab panel content
8
- */
9
- children: React.ReactNode;
10
- /**
11
- * Value for state-handling
12
- */
13
- value: string;
14
- }
15
-
16
- const TabPanel = forwardRef<HTMLDivElement, TabPanelProps>(
17
- ({ className, ...rest }, ref) => (
18
- <RadixTabs.TabsContent
19
- {...rest}
20
- ref={ref}
21
- className={cl("navds-tabs__tabpanel", className)}
22
- />
23
- ),
24
- );
25
-
26
- export default TabPanel;
@@ -1,191 +0,0 @@
1
- import { Meta } from "@storybook/react";
2
- import React, { useState } from "react";
3
- import { DishwasherIcon, FreezerIcon, MugIcon } from "@navikt/aksel-icons";
4
- import { Tabs } from ".";
5
-
6
- export default {
7
- title: "ds-react/Tabs",
8
- component: Tabs,
9
- argTypes: {
10
- size: {
11
- options: ["medium", "small"],
12
- control: {
13
- type: "radio",
14
- },
15
- },
16
- iconPosition: {
17
- options: ["top", "left"],
18
- control: {
19
- type: "radio",
20
- },
21
- },
22
- },
23
- } satisfies Meta<typeof Tabs>;
24
-
25
- const Panel = () => {
26
- return (
27
- <>
28
- <Tabs.Panel
29
- value="test1"
30
- className="panel"
31
- style={{ background: "var(--a-gray-50)", height: 100 }}
32
- >
33
- Innholdspanel for Skap-tab
34
- </Tabs.Panel>
35
- <Tabs.Panel
36
- value="test2"
37
- className="panel"
38
- style={{
39
- background: "var(--a-green-50)",
40
- height: 100,
41
- }}
42
- >
43
- Innholdspanel for Oppvaskmaskin-tab
44
- </Tabs.Panel>
45
- <Tabs.Panel
46
- value="test3"
47
- className="panel"
48
- style={{ background: "var(--a-red-50)", height: 100 }}
49
- >
50
- Innholdspanel for Fryser-tab
51
- </Tabs.Panel>
52
- <style>{`.panel[data-state="active"] { display:grid; place-content: center;}`}</style>
53
- </>
54
- );
55
- };
56
-
57
- export const Default = {
58
- render: (props) => {
59
- return (
60
- <Tabs
61
- defaultValue="test2"
62
- size={props?.size}
63
- selectionFollowsFocus={props?.selectionFollowsFocus}
64
- loop={props?.loop}
65
- iconPosition={props?.iconPosition}
66
- >
67
- <Tabs.List>
68
- <Tabs.Tab value="test1" icon={<MugIcon />} label="Skap" />
69
- <Tabs.Tab
70
- value="test2"
71
- label="Oppvaskmaskin"
72
- icon={<DishwasherIcon />}
73
- />
74
- <Tabs.Tab value="test3" icon={<FreezerIcon />} label="Fryser" />
75
- </Tabs.List>
76
- <Panel />
77
- </Tabs>
78
- );
79
- },
80
-
81
- args: {
82
- selectionFollowsFocus: false,
83
- loop: false,
84
- },
85
- };
86
-
87
- export const Small = () => {
88
- return (
89
- <Tabs defaultValue="test2" size="small">
90
- <Tabs.List>
91
- <Tabs.Tab value="test1" icon={<MugIcon />} label="Skap" />
92
- <Tabs.Tab
93
- value="test2"
94
- label="Oppvaskmaskin"
95
- icon={<DishwasherIcon />}
96
- />
97
- <Tabs.Tab value="test3" icon={<FreezerIcon />} label="Fryser" />
98
- </Tabs.List>
99
- <Panel />
100
- </Tabs>
101
- );
102
- };
103
-
104
- export const Controlled = () => {
105
- const [activeValue, setActiveValue] = useState("test1");
106
- return (
107
- <Tabs value={activeValue} onChange={setActiveValue}>
108
- <Tabs.List>
109
- <Tabs.Tab value="test1" icon={<MugIcon />} label="Skap" />
110
- <Tabs.Tab
111
- value="test2"
112
- label="Oppvaskmaskin"
113
- icon={<DishwasherIcon />}
114
- />
115
- <Tabs.Tab value="test3" icon={<FreezerIcon />} label="Fryser" />
116
- </Tabs.List>
117
- <Panel />
118
- </Tabs>
119
- );
120
- };
121
-
122
- export const IconPosition = () => {
123
- return (
124
- <div className="colgap">
125
- <Tabs defaultValue="test2" size="small">
126
- <Tabs.List>
127
- <Tabs.Tab value="test1" icon={<MugIcon />} label="Skap" />
128
- <Tabs.Tab
129
- value="test2"
130
- label="Oppvaskmaskin"
131
- icon={<DishwasherIcon />}
132
- />
133
- <Tabs.Tab value="test3" icon={<FreezerIcon />} label="Fryser" />
134
- </Tabs.List>
135
- <Panel />
136
- </Tabs>
137
- <Tabs defaultValue="test2" size="small" iconPosition="top">
138
- <Tabs.List style={{ margin: "0 auto" }}>
139
- <Tabs.Tab value="test1" icon={<MugIcon />} label="Skap" />
140
- <Tabs.Tab
141
- value="test2"
142
- label="Oppvaskmaskin"
143
- icon={<DishwasherIcon />}
144
- />
145
- <Tabs.Tab value="test3" icon={<FreezerIcon />} label="Fryser" />
146
- </Tabs.List>
147
- <Panel />
148
- </Tabs>
149
- </div>
150
- );
151
- };
152
-
153
- export const Icon = () => {
154
- return (
155
- <div className="colgap">
156
- <Tabs defaultValue="test2">
157
- <Tabs.List style={{ margin: "0 auto" }}>
158
- <Tabs.Tab value="test1" icon={<MugIcon />} />
159
- <Tabs.Tab value="test2" icon={<DishwasherIcon />} />
160
- <Tabs.Tab value="test3" icon={<FreezerIcon />} />
161
- </Tabs.List>
162
- <Panel />
163
- </Tabs>
164
- <Tabs defaultValue="test2" size="small" iconPosition="top">
165
- <Tabs.List style={{ margin: "0 auto" }}>
166
- <Tabs.Tab value="test1" icon={<MugIcon />} />
167
- <Tabs.Tab value="test2" icon={<DishwasherIcon />} />
168
- <Tabs.Tab value="test3" icon={<FreezerIcon />} />
169
- </Tabs.List>
170
- <Panel />
171
- </Tabs>
172
- </div>
173
- );
174
- };
175
-
176
- export const Overflow = () => {
177
- return (
178
- <Tabs defaultValue="test2" style={{ maxWidth: 300 }}>
179
- <Tabs.List>
180
- <Tabs.Tab value="test1" icon={<MugIcon />} label="Skap" />
181
- <Tabs.Tab
182
- value="test2"
183
- label="Oppvaskmaskin"
184
- icon={<DishwasherIcon />}
185
- />
186
- <Tabs.Tab value="test3" icon={<FreezerIcon />} label="Fryser" />
187
- </Tabs.List>
188
- <Panel />
189
- </Tabs>
190
- );
191
- };
@@ -1,9 +0,0 @@
1
- import { createContext } from "react";
2
-
3
- interface TabsContextProps {
4
- size: "medium" | "small";
5
- loop: boolean;
6
- iconPosition: "left" | "top";
7
- }
8
-
9
- export const TabsContext = createContext<TabsContextProps | null>(null);