@postenbring/hedwig-react 0.0.81 → 0.0.83

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 (580) hide show
  1. package/dist/accordion/accordion-content.d.ts +6 -2
  2. package/dist/accordion/accordion-content.d.ts.map +1 -0
  3. package/dist/accordion/accordion-header.d.ts +6 -2
  4. package/dist/accordion/accordion-header.d.ts.map +1 -0
  5. package/dist/accordion/accordion-item.d.ts +24 -3
  6. package/dist/accordion/accordion-item.d.ts.map +1 -0
  7. package/dist/accordion/accordion.d.ts +44 -2
  8. package/dist/accordion/accordion.d.ts.map +1 -0
  9. package/dist/accordion/accordion.js +102 -4
  10. package/dist/accordion/accordion.js.map +1 -1
  11. package/dist/accordion/accordion.mjs +5 -1
  12. package/dist/accordion/context.d.ts +7 -2
  13. package/dist/accordion/context.d.ts.map +1 -0
  14. package/dist/accordion/index.d.ts +9 -9
  15. package/dist/accordion/index.d.ts.map +1 -0
  16. package/dist/accordion/index.js +52 -53
  17. package/dist/accordion/index.js.map +1 -1
  18. package/dist/accordion/index.mjs +7 -7
  19. package/dist/badge/badge.d.ts +21 -5
  20. package/dist/badge/badge.d.ts.map +1 -0
  21. package/dist/badge/index.d.ts +3 -6
  22. package/dist/badge/index.d.ts.map +1 -0
  23. package/dist/box/box.d.ts +50 -4
  24. package/dist/box/box.d.ts.map +1 -0
  25. package/dist/box/box.js +15 -14
  26. package/dist/box/box.js.map +1 -1
  27. package/dist/box/box.mjs +1 -1
  28. package/dist/box/index.d.ts +3 -4
  29. package/dist/box/index.d.ts.map +1 -0
  30. package/dist/box/index.js +16 -19
  31. package/dist/box/index.js.map +1 -1
  32. package/dist/box/index.mjs +4 -5
  33. package/dist/breadcrumbs/breadcrumbs.d.ts +33 -2
  34. package/dist/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  35. package/dist/breadcrumbs/index.d.ts +3 -2
  36. package/dist/breadcrumbs/index.d.ts.map +1 -0
  37. package/dist/button/button.d.ts +33 -3
  38. package/dist/button/button.d.ts.map +1 -0
  39. package/dist/button/index.d.ts +3 -3
  40. package/dist/button/index.d.ts.map +1 -0
  41. package/dist/card/card.d.ts +69 -12
  42. package/dist/card/card.d.ts.map +1 -0
  43. package/dist/card/card.js +17 -6
  44. package/dist/card/card.js.map +1 -1
  45. package/dist/card/card.mjs +1 -1
  46. package/dist/card/index.d.ts +3 -12
  47. package/dist/card/index.d.ts.map +1 -0
  48. package/dist/card/index.js +18 -19
  49. package/dist/card/index.js.map +1 -1
  50. package/dist/card/index.mjs +4 -5
  51. package/dist/{chunk-6R7AXKBR.mjs → chunk-35TXKAUH.mjs} +2 -2
  52. package/dist/chunk-35TXKAUH.mjs.map +1 -0
  53. package/dist/{chunk-XC3UHH2U.mjs → chunk-3WVRY6CC.mjs} +4 -4
  54. package/dist/{chunk-XC3UHH2U.mjs.map → chunk-3WVRY6CC.mjs.map} +1 -1
  55. package/dist/{chunk-67TP3E2D.mjs → chunk-6FBPKLWB.mjs} +3 -3
  56. package/dist/chunk-6FBPKLWB.mjs.map +1 -0
  57. package/dist/chunk-7YWW46R3.mjs +1 -0
  58. package/dist/{chunk-ENKVTAJB.mjs → chunk-AJWSQEDP.mjs} +18 -17
  59. package/dist/chunk-AJWSQEDP.mjs.map +1 -0
  60. package/dist/chunk-ARHJZUZG.mjs +1 -0
  61. package/dist/{chunk-4WQWU5TL.mjs → chunk-AXQCREUJ.mjs} +2 -2
  62. package/dist/chunk-AXQCREUJ.mjs.map +1 -0
  63. package/dist/chunk-BCFV6VOE.mjs +1 -0
  64. package/dist/{chunk-F2C3KZFX.mjs → chunk-BVPSZ3JI.mjs} +2 -2
  65. package/dist/chunk-BVPSZ3JI.mjs.map +1 -0
  66. package/dist/{chunk-7JRS4WEB.mjs → chunk-C34HEQXO.mjs} +33 -29
  67. package/dist/chunk-C34HEQXO.mjs.map +1 -0
  68. package/dist/chunk-CYDWEPFL.mjs +1 -0
  69. package/dist/{chunk-PLXB3TNA.mjs → chunk-D7QPJIUZ.mjs} +5 -5
  70. package/dist/{chunk-PLXB3TNA.mjs.map → chunk-D7QPJIUZ.mjs.map} +1 -1
  71. package/dist/{chunk-GSJPTZT3.mjs → chunk-FC4CEI2V.mjs} +34 -19
  72. package/dist/chunk-FC4CEI2V.mjs.map +1 -0
  73. package/dist/chunk-FYFJ75NX.mjs +1 -0
  74. package/dist/chunk-FYFJ75NX.mjs.map +1 -0
  75. package/dist/chunk-G65EYZFQ.mjs +1 -0
  76. package/dist/chunk-G65EYZFQ.mjs.map +1 -0
  77. package/dist/chunk-H3E546OT.mjs +1 -0
  78. package/dist/chunk-H3E546OT.mjs.map +1 -0
  79. package/dist/chunk-HQVL3ZJ2.mjs +1 -0
  80. package/dist/chunk-HQVL3ZJ2.mjs.map +1 -0
  81. package/dist/{chunk-KPGSRU4I.mjs → chunk-M3Y3XOGC.mjs} +13 -1
  82. package/dist/chunk-M3Y3XOGC.mjs.map +1 -0
  83. package/dist/{chunk-CIHZDFSQ.mjs → chunk-NU6OSFAU.mjs} +20 -9
  84. package/dist/chunk-NU6OSFAU.mjs.map +1 -0
  85. package/dist/{chunk-XUWZ4HGD.mjs → chunk-OGZ2NBMH.mjs} +49 -46
  86. package/dist/chunk-OGZ2NBMH.mjs.map +1 -0
  87. package/dist/{chunk-3MQKXNZ6.mjs → chunk-QZZIOBF4.mjs} +13 -1
  88. package/dist/chunk-QZZIOBF4.mjs.map +1 -0
  89. package/dist/chunk-RC76SXBP.mjs +1 -0
  90. package/dist/chunk-RC76SXBP.mjs.map +1 -0
  91. package/dist/{chunk-TQDUBRCZ.mjs → chunk-SQ63E7KM.mjs} +24 -22
  92. package/dist/chunk-SQ63E7KM.mjs.map +1 -0
  93. package/dist/{chunk-DEX36MFK.mjs → chunk-TDXU2IC6.mjs} +3 -4
  94. package/dist/chunk-TDXU2IC6.mjs.map +1 -0
  95. package/dist/{chunk-ES6ISHOV.mjs → chunk-UP3M3NEZ.mjs} +14 -13
  96. package/dist/{chunk-ES6ISHOV.mjs.map → chunk-UP3M3NEZ.mjs.map} +1 -1
  97. package/dist/chunk-ZKMFJZSH.mjs +1 -0
  98. package/dist/chunk-ZKMFJZSH.mjs.map +1 -0
  99. package/dist/description-list/description-list.d.ts +42 -2
  100. package/dist/description-list/description-list.d.ts.map +1 -0
  101. package/dist/description-list/index.d.ts +3 -2
  102. package/dist/description-list/index.d.ts.map +1 -0
  103. package/dist/footer/footer.d.ts +67 -7
  104. package/dist/footer/footer.d.ts.map +1 -0
  105. package/dist/footer/footer.js +79 -76
  106. package/dist/footer/footer.js.map +1 -1
  107. package/dist/footer/footer.mjs +4 -4
  108. package/dist/footer/index.d.ts +3 -7
  109. package/dist/footer/index.d.ts.map +1 -0
  110. package/dist/footer/index.js +80 -84
  111. package/dist/footer/index.js.map +1 -1
  112. package/dist/footer/index.mjs +7 -8
  113. package/dist/form/checkbox/checkbox.d.ts +28 -2
  114. package/dist/form/checkbox/checkbox.d.ts.map +1 -0
  115. package/dist/form/checkbox/index.d.ts +3 -2
  116. package/dist/form/checkbox/index.d.ts.map +1 -0
  117. package/dist/form/date-picker/date-picker.d.ts +33 -2
  118. package/dist/form/date-picker/date-picker.d.ts.map +1 -0
  119. package/dist/form/date-picker/date-picker.js +1 -1
  120. package/dist/form/date-picker/date-picker.js.map +1 -1
  121. package/dist/form/date-picker/date-picker.mjs +2 -2
  122. package/dist/form/date-picker/index.d.ts +3 -2
  123. package/dist/form/date-picker/index.d.ts.map +1 -0
  124. package/dist/form/date-picker/index.js +1 -1
  125. package/dist/form/date-picker/index.js.map +1 -1
  126. package/dist/form/date-picker/index.mjs +2 -2
  127. package/dist/form/error-message/error-message.d.ts +8 -2
  128. package/dist/form/error-message/error-message.d.ts.map +1 -0
  129. package/dist/form/error-message/index.d.ts +3 -2
  130. package/dist/form/error-message/index.d.ts.map +1 -0
  131. package/dist/form/fieldset/fieldset.d.ts +22 -3
  132. package/dist/form/fieldset/fieldset.d.ts.map +1 -0
  133. package/dist/form/fieldset/index.d.ts +3 -3
  134. package/dist/form/fieldset/index.d.ts.map +1 -0
  135. package/dist/form/index.d.ts +9 -20
  136. package/dist/form/index.d.ts.map +1 -0
  137. package/dist/form/index.js +1 -1
  138. package/dist/form/index.js.map +1 -1
  139. package/dist/form/index.mjs +2 -2
  140. package/dist/form/input/index.d.ts +3 -2
  141. package/dist/form/input/index.d.ts.map +1 -0
  142. package/dist/form/input/input.d.ts +5 -2
  143. package/dist/form/input/input.d.ts.map +1 -0
  144. package/dist/form/input-group/index.d.ts +3 -2
  145. package/dist/form/input-group/index.d.ts.map +1 -0
  146. package/dist/form/input-group/input-group.d.ts +27 -2
  147. package/dist/form/input-group/input-group.d.ts.map +1 -0
  148. package/dist/form/radiobutton/index.d.ts +5 -5
  149. package/dist/form/radiobutton/index.d.ts.map +1 -0
  150. package/dist/form/radiobutton/radiobutton.d.ts +17 -2
  151. package/dist/form/radiobutton/radiobutton.d.ts.map +1 -0
  152. package/dist/form/radiobutton/radiogroup.d.ts +24 -3
  153. package/dist/form/radiobutton/radiogroup.d.ts.map +1 -0
  154. package/dist/form/select/index.d.ts +3 -2
  155. package/dist/form/select/index.d.ts.map +1 -0
  156. package/dist/form/select/select.d.ts +9 -2
  157. package/dist/form/select/select.d.ts.map +1 -0
  158. package/dist/form/textarea/index.d.ts +3 -2
  159. package/dist/form/textarea/index.d.ts.map +1 -0
  160. package/dist/form/textarea/textarea.d.ts +5 -2
  161. package/dist/form/textarea/textarea.d.ts.map +1 -0
  162. package/dist/help-text/help-text.d.ts +51 -1
  163. package/dist/help-text/help-text.d.ts.map +1 -0
  164. package/dist/help-text/help-text.js +17 -20
  165. package/dist/help-text/help-text.js.map +1 -1
  166. package/dist/help-text/help-text.mjs +3 -3
  167. package/dist/help-text/index.d.ts +3 -1
  168. package/dist/help-text/index.d.ts.map +1 -0
  169. package/dist/help-text/index.js +17 -20
  170. package/dist/help-text/index.js.map +1 -1
  171. package/dist/help-text/index.mjs +3 -3
  172. package/dist/index-no-css.d.ts +26 -128
  173. package/dist/index-no-css.d.ts.map +1 -0
  174. package/dist/index-no-css.js +385 -398
  175. package/dist/index-no-css.js.map +1 -1
  176. package/dist/index-no-css.mjs +70 -68
  177. package/dist/index.d.ts +11 -128
  178. package/dist/index.d.ts.map +1 -0
  179. package/dist/index.js +385 -398
  180. package/dist/index.js.map +1 -1
  181. package/dist/index.mjs +70 -68
  182. package/dist/index.mjs.map +1 -1
  183. package/dist/layout/container/container.d.ts +23 -2
  184. package/dist/layout/container/container.d.ts.map +1 -0
  185. package/dist/layout/grid/grid.d.ts +101 -4
  186. package/dist/layout/grid/grid.d.ts.map +1 -0
  187. package/dist/layout/grid/grid.js +11 -10
  188. package/dist/layout/grid/grid.js.map +1 -1
  189. package/dist/layout/grid/grid.mjs +1 -1
  190. package/dist/layout/grid/index.d.ts +3 -4
  191. package/dist/layout/grid/index.d.ts.map +1 -0
  192. package/dist/layout/grid/index.js +12 -15
  193. package/dist/layout/grid/index.js.map +1 -1
  194. package/dist/layout/grid/index.mjs +4 -5
  195. package/dist/layout/index.d.ts +4 -10
  196. package/dist/layout/index.d.ts.map +1 -0
  197. package/dist/layout/index.js +12 -15
  198. package/dist/layout/index.js.map +1 -1
  199. package/dist/layout/index.mjs +4 -5
  200. package/dist/layout/responsive.d.ts +10 -2
  201. package/dist/layout/responsive.d.ts.map +1 -0
  202. package/dist/layout/spacing.d.ts +33 -3
  203. package/dist/layout/spacing.d.ts.map +1 -0
  204. package/dist/layout/stack/index.d.ts +3 -4
  205. package/dist/layout/stack/index.d.ts.map +1 -0
  206. package/dist/layout/stack/stack.d.ts +62 -4
  207. package/dist/layout/stack/stack.d.ts.map +1 -0
  208. package/dist/link/index.d.ts +3 -2
  209. package/dist/link/index.d.ts.map +1 -0
  210. package/dist/link/link.d.ts +20 -2
  211. package/dist/link/link.d.ts.map +1 -0
  212. package/dist/list/index.d.ts +5 -5
  213. package/dist/list/index.d.ts.map +1 -0
  214. package/dist/list/link-list.d.ts +12 -2
  215. package/dist/list/link-list.d.ts.map +1 -0
  216. package/dist/list/list.d.ts +40 -3
  217. package/dist/list/list.d.ts.map +1 -0
  218. package/dist/message/index.d.ts +3 -3
  219. package/dist/message/index.d.ts.map +1 -0
  220. package/dist/message/index.js +36 -38
  221. package/dist/message/index.js.map +1 -1
  222. package/dist/message/index.mjs +5 -6
  223. package/dist/message/message.d.ts +36 -4
  224. package/dist/message/message.d.ts.map +1 -0
  225. package/dist/message/message.js +35 -32
  226. package/dist/message/message.js.map +1 -1
  227. package/dist/message/message.mjs +2 -2
  228. package/dist/modal/index.d.ts +3 -5
  229. package/dist/modal/index.d.ts.map +1 -0
  230. package/dist/modal/index.js +61 -63
  231. package/dist/modal/index.js.map +1 -1
  232. package/dist/modal/index.mjs +6 -7
  233. package/dist/modal/modal.d.ts +81 -5
  234. package/dist/modal/modal.d.ts.map +1 -0
  235. package/dist/modal/modal.js +60 -56
  236. package/dist/modal/modal.js.map +1 -1
  237. package/dist/modal/modal.mjs +3 -3
  238. package/dist/navbar/icons.d.ts +3 -2
  239. package/dist/navbar/icons.d.ts.map +1 -0
  240. package/dist/navbar/index.d.ts +4 -13
  241. package/dist/navbar/index.d.ts.map +1 -0
  242. package/dist/navbar/index.js +145 -146
  243. package/dist/navbar/index.js.map +1 -1
  244. package/dist/navbar/index.mjs +6 -7
  245. package/dist/navbar/navbar-expandable-menu.d.ts +35 -7
  246. package/dist/navbar/navbar-expandable-menu.d.ts.map +1 -0
  247. package/dist/navbar/navbar-expandable-menu.js +1 -1
  248. package/dist/navbar/navbar-expandable-menu.js.map +1 -1
  249. package/dist/navbar/navbar-expandable-menu.mjs +2 -2
  250. package/dist/navbar/navbar.d.ts +130 -9
  251. package/dist/navbar/navbar.d.ts.map +1 -0
  252. package/dist/navbar/navbar.js +237 -28
  253. package/dist/navbar/navbar.js.map +1 -1
  254. package/dist/navbar/navbar.mjs +4 -1
  255. package/dist/show-more/index.d.ts +5 -4
  256. package/dist/show-more/index.d.ts.map +1 -0
  257. package/dist/show-more/index.js +3 -3
  258. package/dist/show-more/index.js.map +1 -1
  259. package/dist/show-more/index.mjs +2 -2
  260. package/dist/show-more/show-more.d.ts +42 -2
  261. package/dist/show-more/show-more.d.ts.map +1 -0
  262. package/dist/skeleton/index.d.ts +3 -2
  263. package/dist/skeleton/index.d.ts.map +1 -0
  264. package/dist/skeleton/skeleton.d.ts +67 -2
  265. package/dist/skeleton/skeleton.d.ts.map +1 -0
  266. package/dist/step-indicator/index.d.ts +3 -1
  267. package/dist/step-indicator/index.d.ts.map +1 -0
  268. package/dist/step-indicator/step-indicator.d.ts +36 -1
  269. package/dist/step-indicator/step-indicator.d.ts.map +1 -0
  270. package/dist/styled-html/index.d.ts +3 -2
  271. package/dist/styled-html/index.d.ts.map +1 -0
  272. package/dist/styled-html/styled-html.d.ts +36 -2
  273. package/dist/styled-html/styled-html.d.ts.map +1 -0
  274. package/dist/table/index.d.ts +3 -1
  275. package/dist/table/index.d.ts.map +1 -0
  276. package/dist/table/table.d.ts +25 -1
  277. package/dist/table/table.d.ts.map +1 -0
  278. package/dist/tabs/context.d.ts +8 -3
  279. package/dist/tabs/context.d.ts.map +1 -0
  280. package/dist/tabs/index.d.ts +7 -10
  281. package/dist/tabs/index.d.ts.map +1 -0
  282. package/dist/tabs/index.js +35 -38
  283. package/dist/tabs/index.js.map +1 -1
  284. package/dist/tabs/index.mjs +6 -6
  285. package/dist/tabs/tabs-content.d.ts +26 -4
  286. package/dist/tabs/tabs-content.d.ts.map +1 -0
  287. package/dist/tabs/tabs-list.d.ts +21 -4
  288. package/dist/tabs/tabs-list.d.ts.map +1 -0
  289. package/dist/tabs/tabs-list.js +1 -1
  290. package/dist/tabs/tabs-list.js.map +1 -1
  291. package/dist/tabs/tabs-list.mjs +2 -2
  292. package/dist/tabs/tabs.d.ts +26 -2
  293. package/dist/tabs/tabs.d.ts.map +1 -0
  294. package/dist/tabs/tabs.js +205 -8
  295. package/dist/tabs/tabs.js.map +1 -1
  296. package/dist/tabs/tabs.mjs +4 -1
  297. package/dist/text/index.d.ts +4 -2
  298. package/dist/text/index.d.ts.map +1 -0
  299. package/dist/text/text.d.ts +58 -2
  300. package/dist/text/text.d.ts.map +1 -0
  301. package/dist/utils/auto-animate-height.d.ts +33 -0
  302. package/dist/utils/auto-animate-height.d.ts.map +1 -0
  303. package/dist/{utilities → utils}/auto-animate-height.js +3 -3
  304. package/dist/utils/auto-animate-height.js.map +1 -0
  305. package/dist/utils/auto-animate-height.mjs +9 -0
  306. package/dist/utils/auto-animate-height.mjs.map +1 -0
  307. package/dist/utils/index.d.ts +4 -0
  308. package/dist/utils/index.d.ts.map +1 -0
  309. package/dist/{utilities → utils}/index.js +81 -11
  310. package/dist/utils/index.js.map +1 -0
  311. package/dist/utils/index.mjs +19 -0
  312. package/dist/utils/index.mjs.map +1 -0
  313. package/dist/utils/utils.d.ts +24 -0
  314. package/dist/utils/utils.d.ts.map +1 -0
  315. package/dist/{utils.js → utils/utils.js} +1 -3
  316. package/dist/utils/utils.js.map +1 -0
  317. package/dist/utils/utils.mjs +14 -0
  318. package/dist/utils/utils.mjs.map +1 -0
  319. package/dist/warning-banner/index.d.ts +3 -2
  320. package/dist/warning-banner/index.d.ts.map +1 -0
  321. package/dist/warning-banner/index.js +16 -19
  322. package/dist/warning-banner/index.js.map +1 -1
  323. package/dist/warning-banner/index.mjs +3 -3
  324. package/dist/warning-banner/warning-banner.d.ts +8 -2
  325. package/dist/warning-banner/warning-banner.d.ts.map +1 -0
  326. package/dist/warning-banner/warning-banner.js +16 -19
  327. package/dist/warning-banner/warning-banner.js.map +1 -1
  328. package/dist/warning-banner/warning-banner.mjs +3 -3
  329. package/package.json +12 -8
  330. package/src/accordion/accordion-content.tsx +31 -0
  331. package/src/accordion/accordion-header.tsx +36 -0
  332. package/src/accordion/accordion-item.tsx +62 -0
  333. package/src/accordion/accordion.stories.tsx +154 -0
  334. package/src/accordion/accordion.tsx +68 -0
  335. package/src/accordion/context.ts +8 -0
  336. package/src/accordion/index.tsx +9 -0
  337. package/src/badge/badge.stories.tsx +44 -0
  338. package/src/badge/badge.tsx +63 -0
  339. package/src/badge/index.tsx +3 -0
  340. package/src/box/box.stories.tsx +112 -0
  341. package/src/box/box.tsx +122 -0
  342. package/src/box/index.tsx +3 -0
  343. package/src/breadcrumbs/breadcrumbs.stories.tsx +50 -0
  344. package/src/breadcrumbs/breadcrumbs.tsx +47 -0
  345. package/src/breadcrumbs/index.tsx +3 -0
  346. package/src/button/button.stories.tsx +104 -0
  347. package/src/button/button.tsx +87 -0
  348. package/src/button/index.tsx +3 -0
  349. package/src/card/card.stories.tsx +82 -0
  350. package/src/card/card.tsx +222 -0
  351. package/src/card/index.tsx +14 -0
  352. package/src/description-list/description-list.stories.tsx +95 -0
  353. package/src/description-list/description-list.tsx +61 -0
  354. package/src/description-list/index.tsx +2 -0
  355. package/src/footer/footer.tsx +169 -0
  356. package/src/footer/index.tsx +9 -0
  357. package/src/form/checkbox/checkbox.stories.tsx +104 -0
  358. package/src/form/checkbox/checkbox.tsx +82 -0
  359. package/src/form/checkbox/index.tsx +2 -0
  360. package/src/form/date-picker/date-picker.stories.tsx +27 -0
  361. package/src/form/date-picker/date-picker.tsx +85 -0
  362. package/src/form/date-picker/index.tsx +2 -0
  363. package/src/form/error-message/error-message.stories.tsx +19 -0
  364. package/src/form/error-message/error-message.tsx +25 -0
  365. package/src/form/error-message/index.tsx +2 -0
  366. package/src/form/fieldset/fieldset.stories.tsx +86 -0
  367. package/src/form/fieldset/fieldset.tsx +64 -0
  368. package/src/form/fieldset/index.tsx +2 -0
  369. package/src/form/index.tsx +8 -0
  370. package/src/form/input/index.tsx +2 -0
  371. package/src/form/input/input.stories.tsx +166 -0
  372. package/src/form/input/input.tsx +30 -0
  373. package/src/form/input-group/index.tsx +2 -0
  374. package/src/form/input-group/input-group.tsx +106 -0
  375. package/src/form/radiobutton/index.tsx +4 -0
  376. package/src/form/radiobutton/radiobutton.stories.tsx +93 -0
  377. package/src/form/radiobutton/radiobutton.tsx +85 -0
  378. package/src/form/radiobutton/radiogroup.stories.tsx +39 -0
  379. package/src/form/radiobutton/radiogroup.tsx +52 -0
  380. package/src/form/select/index.tsx +2 -0
  381. package/src/form/select/select.stories.tsx +93 -0
  382. package/src/form/select/select.tsx +33 -0
  383. package/src/form/textarea/index.tsx +2 -0
  384. package/src/form/textarea/textarea.stories.tsx +106 -0
  385. package/src/form/textarea/textarea.tsx +33 -0
  386. package/src/help-text/help-text.tsx +98 -0
  387. package/src/help-text/index.ts +2 -0
  388. package/src/index-no-css.tsx +25 -0
  389. package/src/index.tsx +11 -0
  390. package/src/layout/container/container.stories.tsx +62 -0
  391. package/src/layout/container/container.tsx +47 -0
  392. package/src/layout/grid/grid.tsx +163 -0
  393. package/src/layout/grid/index.tsx +3 -0
  394. package/src/layout/index.tsx +3 -0
  395. package/src/layout/responsive.ts +26 -0
  396. package/src/layout/spacing.ts +37 -0
  397. package/src/layout/stack/index.tsx +2 -0
  398. package/src/layout/stack/stack.tsx +128 -0
  399. package/src/link/index.tsx +3 -0
  400. package/src/link/link.stories.tsx +64 -0
  401. package/src/link/link.tsx +46 -0
  402. package/src/list/index.tsx +5 -0
  403. package/src/list/link-list.stories.tsx +38 -0
  404. package/src/list/link-list.tsx +26 -0
  405. package/src/list/list.stories.tsx +71 -0
  406. package/src/list/list.tsx +65 -0
  407. package/src/message/index.tsx +2 -0
  408. package/src/message/message.stories.tsx +93 -0
  409. package/src/message/message.tsx +89 -0
  410. package/src/modal/index.tsx +3 -0
  411. package/src/modal/modal.stories.tsx +147 -0
  412. package/src/modal/modal.tsx +199 -0
  413. package/src/navbar/icons.tsx +21 -0
  414. package/src/navbar/index.tsx +18 -0
  415. package/src/navbar/navbar-expandable-menu.tsx +176 -0
  416. package/src/navbar/navbar.stories.tsx +99 -0
  417. package/src/navbar/navbar.tsx +264 -0
  418. package/src/show-more/index.ts +5 -0
  419. package/src/show-more/show-more.stories.tsx +119 -0
  420. package/src/show-more/show-more.tsx +66 -0
  421. package/src/skeleton/index.ts +2 -0
  422. package/src/skeleton/skeleton.stories.tsx +152 -0
  423. package/src/skeleton/skeleton.tsx +114 -0
  424. package/src/step-indicator/index.ts +2 -0
  425. package/src/step-indicator/step-indicator.stories.tsx +50 -0
  426. package/src/step-indicator/step-indicator.tsx +116 -0
  427. package/src/styled-html/index.ts +2 -0
  428. package/src/styled-html/styled-html.stories.tsx +189 -0
  429. package/src/styled-html/styled-html.tsx +59 -0
  430. package/src/table/index.ts +2 -0
  431. package/src/table/table.tsx +59 -0
  432. package/src/tabs/context.ts +18 -0
  433. package/src/tabs/index.tsx +7 -0
  434. package/src/tabs/tabs-content.tsx +62 -0
  435. package/src/tabs/tabs-list.tsx +129 -0
  436. package/src/tabs/tabs.stories.tsx +138 -0
  437. package/src/tabs/tabs.tsx +50 -0
  438. package/src/text/index.tsx +4 -0
  439. package/src/text/text.stories.tsx +112 -0
  440. package/src/text/text.tsx +129 -0
  441. package/src/utils/auto-animate-height.tsx +139 -0
  442. package/src/utils/index.ts +4 -0
  443. package/src/utils/utils.ts +110 -0
  444. package/src/warning-banner/index.tsx +2 -0
  445. package/src/warning-banner/warning-banner.stories.tsx +43 -0
  446. package/src/warning-banner/warning-banner.tsx +79 -0
  447. package/dist/_tsup-dts-rollup.d.mts +0 -2600
  448. package/dist/_tsup-dts-rollup.d.ts +0 -2600
  449. package/dist/accordion/accordion-content.d.mts +0 -2
  450. package/dist/accordion/accordion-header.d.mts +0 -2
  451. package/dist/accordion/accordion-item.d.mts +0 -3
  452. package/dist/accordion/accordion.d.mts +0 -2
  453. package/dist/accordion/context.d.mts +0 -2
  454. package/dist/accordion/index.d.mts +0 -9
  455. package/dist/badge/badge.d.mts +0 -5
  456. package/dist/badge/index.d.mts +0 -6
  457. package/dist/box/box.d.mts +0 -4
  458. package/dist/box/index.d.mts +0 -4
  459. package/dist/breadcrumbs/breadcrumbs.d.mts +0 -2
  460. package/dist/breadcrumbs/index.d.mts +0 -2
  461. package/dist/button/button.d.mts +0 -3
  462. package/dist/button/index.d.mts +0 -3
  463. package/dist/card/card.d.mts +0 -12
  464. package/dist/card/index.d.mts +0 -12
  465. package/dist/chunk-3MQKXNZ6.mjs.map +0 -1
  466. package/dist/chunk-3NDUE23B.mjs +0 -19
  467. package/dist/chunk-3NDUE23B.mjs.map +0 -1
  468. package/dist/chunk-3NL3TOZF.mjs +0 -13
  469. package/dist/chunk-3NL3TOZF.mjs.map +0 -1
  470. package/dist/chunk-3ZFEUABU.mjs +0 -23
  471. package/dist/chunk-3ZFEUABU.mjs.map +0 -1
  472. package/dist/chunk-4WQWU5TL.mjs.map +0 -1
  473. package/dist/chunk-67TP3E2D.mjs.map +0 -1
  474. package/dist/chunk-6R7AXKBR.mjs.map +0 -1
  475. package/dist/chunk-722MZPXO.mjs +0 -13
  476. package/dist/chunk-722MZPXO.mjs.map +0 -1
  477. package/dist/chunk-7JRS4WEB.mjs.map +0 -1
  478. package/dist/chunk-CIHZDFSQ.mjs.map +0 -1
  479. package/dist/chunk-CYEYGPRH.mjs +0 -17
  480. package/dist/chunk-CYEYGPRH.mjs.map +0 -1
  481. package/dist/chunk-DEX36MFK.mjs.map +0 -1
  482. package/dist/chunk-DZNH5JHY.mjs +0 -1
  483. package/dist/chunk-ENKVTAJB.mjs.map +0 -1
  484. package/dist/chunk-F2C3KZFX.mjs.map +0 -1
  485. package/dist/chunk-GSJPTZT3.mjs.map +0 -1
  486. package/dist/chunk-IJAX6APL.mjs +0 -23
  487. package/dist/chunk-IJAX6APL.mjs.map +0 -1
  488. package/dist/chunk-IKJJWKXM.mjs +0 -15
  489. package/dist/chunk-IKJJWKXM.mjs.map +0 -1
  490. package/dist/chunk-KPGSRU4I.mjs.map +0 -1
  491. package/dist/chunk-PT5H3QV6.mjs +0 -29
  492. package/dist/chunk-PT5H3QV6.mjs.map +0 -1
  493. package/dist/chunk-TQDUBRCZ.mjs.map +0 -1
  494. package/dist/chunk-V6UKKHKD.mjs +0 -33
  495. package/dist/chunk-V6UKKHKD.mjs.map +0 -1
  496. package/dist/chunk-XUWZ4HGD.mjs.map +0 -1
  497. package/dist/description-list/description-list.d.mts +0 -2
  498. package/dist/description-list/index.d.mts +0 -2
  499. package/dist/footer/footer.d.mts +0 -7
  500. package/dist/footer/index.d.mts +0 -7
  501. package/dist/form/checkbox/checkbox.d.mts +0 -2
  502. package/dist/form/checkbox/index.d.mts +0 -2
  503. package/dist/form/date-picker/date-picker.d.mts +0 -2
  504. package/dist/form/date-picker/index.d.mts +0 -2
  505. package/dist/form/error-message/error-message.d.mts +0 -2
  506. package/dist/form/error-message/index.d.mts +0 -2
  507. package/dist/form/fieldset/fieldset.d.mts +0 -3
  508. package/dist/form/fieldset/index.d.mts +0 -3
  509. package/dist/form/index.d.mts +0 -20
  510. package/dist/form/input/index.d.mts +0 -2
  511. package/dist/form/input/input.d.mts +0 -2
  512. package/dist/form/input-group/index.d.mts +0 -2
  513. package/dist/form/input-group/input-group.d.mts +0 -2
  514. package/dist/form/radiobutton/index.d.mts +0 -5
  515. package/dist/form/radiobutton/radiobutton.d.mts +0 -2
  516. package/dist/form/radiobutton/radiogroup.d.mts +0 -3
  517. package/dist/form/select/index.d.mts +0 -2
  518. package/dist/form/select/select.d.mts +0 -2
  519. package/dist/form/textarea/index.d.mts +0 -2
  520. package/dist/form/textarea/textarea.d.mts +0 -2
  521. package/dist/help-text/help-text.d.mts +0 -1
  522. package/dist/help-text/index.d.mts +0 -1
  523. package/dist/index-no-css.d.mts +0 -128
  524. package/dist/index.d.mts +0 -128
  525. package/dist/layout/container/container.d.mts +0 -2
  526. package/dist/layout/grid/grid.d.mts +0 -4
  527. package/dist/layout/grid/index.d.mts +0 -4
  528. package/dist/layout/index.d.mts +0 -10
  529. package/dist/layout/responsive.d.mts +0 -2
  530. package/dist/layout/spacing.d.mts +0 -3
  531. package/dist/layout/stack/index.d.mts +0 -4
  532. package/dist/layout/stack/stack.d.mts +0 -4
  533. package/dist/link/index.d.mts +0 -2
  534. package/dist/link/link.d.mts +0 -2
  535. package/dist/list/index.d.mts +0 -5
  536. package/dist/list/link-list.d.mts +0 -2
  537. package/dist/list/list.d.mts +0 -3
  538. package/dist/message/index.d.mts +0 -3
  539. package/dist/message/message.d.mts +0 -4
  540. package/dist/modal/index.d.mts +0 -5
  541. package/dist/modal/modal.d.mts +0 -5
  542. package/dist/navbar/icons.d.mts +0 -2
  543. package/dist/navbar/index.d.mts +0 -13
  544. package/dist/navbar/navbar-expandable-menu.d.mts +0 -7
  545. package/dist/navbar/navbar.d.mts +0 -9
  546. package/dist/show-more/index.d.mts +0 -4
  547. package/dist/show-more/show-more.d.mts +0 -2
  548. package/dist/skeleton/index.d.mts +0 -2
  549. package/dist/skeleton/skeleton.d.mts +0 -2
  550. package/dist/step-indicator/index.d.mts +0 -1
  551. package/dist/step-indicator/step-indicator.d.mts +0 -1
  552. package/dist/styled-html/index.d.mts +0 -2
  553. package/dist/styled-html/styled-html.d.mts +0 -2
  554. package/dist/table/index.d.mts +0 -1
  555. package/dist/table/table.d.mts +0 -1
  556. package/dist/tabs/context.d.mts +0 -3
  557. package/dist/tabs/index.d.mts +0 -10
  558. package/dist/tabs/tabs-content.d.mts +0 -4
  559. package/dist/tabs/tabs-list.d.mts +0 -4
  560. package/dist/tabs/tabs.d.mts +0 -2
  561. package/dist/text/index.d.mts +0 -2
  562. package/dist/text/text.d.mts +0 -2
  563. package/dist/utilities/auto-animate-height.d.mts +0 -2
  564. package/dist/utilities/auto-animate-height.d.ts +0 -2
  565. package/dist/utilities/auto-animate-height.js.map +0 -1
  566. package/dist/utilities/auto-animate-height.mjs +0 -9
  567. package/dist/utilities/index.d.mts +0 -2
  568. package/dist/utilities/index.d.ts +0 -2
  569. package/dist/utilities/index.js.map +0 -1
  570. package/dist/utilities/index.mjs +0 -10
  571. package/dist/utils.d.mts +0 -5
  572. package/dist/utils.d.ts +0 -5
  573. package/dist/utils.js.map +0 -1
  574. package/dist/utils.mjs +0 -16
  575. package/dist/warning-banner/index.d.mts +0 -2
  576. package/dist/warning-banner/warning-banner.d.mts +0 -2
  577. /package/dist/{chunk-DZNH5JHY.mjs.map → chunk-7YWW46R3.mjs.map} +0 -0
  578. /package/dist/{utilities/auto-animate-height.mjs.map → chunk-ARHJZUZG.mjs.map} +0 -0
  579. /package/dist/{utilities/index.mjs.map → chunk-BCFV6VOE.mjs.map} +0 -0
  580. /package/dist/{utils.mjs.map → chunk-CYDWEPFL.mjs.map} +0 -0
@@ -0,0 +1,8 @@
1
+ export * from "./checkbox";
2
+ export * from "./date-picker";
3
+ export * from "./error-message";
4
+ export * from "./fieldset";
5
+ export * from "./input";
6
+ export * from "./radiobutton";
7
+ export * from "./select";
8
+ export * from "./textarea";
@@ -0,0 +1,2 @@
1
+ export { Input } from "./input";
2
+ export type * from "./input";
@@ -0,0 +1,166 @@
1
+ /* eslint-disable import/no-extraneous-dependencies -- storybook story */
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { useState } from "react";
4
+ import { PrimaryButton, SecondaryButton } from "../../button";
5
+ import { HStack, VStack } from "../../layout";
6
+ import { Input } from ".";
7
+
8
+ const meta: Meta<typeof Input> = {
9
+ title: "Form/Input",
10
+ component: Input,
11
+ };
12
+
13
+ export default meta;
14
+
15
+ type Story = StoryObj<typeof Input>;
16
+
17
+ export const PlainInput: Story = {
18
+ args: {
19
+ label: "Some kind of input",
20
+ placeholder: "I am a placeholder",
21
+ errorMessage: "",
22
+ readOnly: false,
23
+ variant: "default",
24
+ },
25
+ argTypes: {
26
+ variant: { control: "inline-radio", options: ["default", "white"] },
27
+ },
28
+ };
29
+
30
+ export const PlainInputWithError: Story = {
31
+ args: {
32
+ label: "Some kind of input with error",
33
+ errorMessage: "This is invalid",
34
+ placeholder: "I am a placeholder",
35
+ },
36
+ };
37
+
38
+ export const ReadonlyInput: Story = {
39
+ args: {
40
+ label: "Some kind of readonly input",
41
+ readOnly: true,
42
+ value: "This is a read-only value",
43
+ },
44
+ };
45
+
46
+ export const ReadonlyInputWithError: Story = {
47
+ args: {
48
+ label: "Some kind of readonly input",
49
+ readOnly: true,
50
+ value: "This is a read-only value",
51
+ errorMessage: "This is invalid",
52
+ },
53
+ };
54
+
55
+ export const WhiteInput: Story = {
56
+ args: {
57
+ label: "Some kind of white input",
58
+ variant: "white",
59
+ placeholder: "I am a placeholder",
60
+ },
61
+ render: (props) => (
62
+ <div style={{ background: "var(--hds-ui-colors-light-grey-fill)", padding: "1em" }}>
63
+ <Input {...props} />
64
+ </div>
65
+ ),
66
+ };
67
+
68
+ export const WhiteInputWithError: Story = {
69
+ args: {
70
+ label: "Some kind of white input",
71
+ variant: "white",
72
+ placeholder: "I am a placeholder",
73
+ errorMessage: "This is invalid",
74
+ },
75
+ render: (props) => (
76
+ <div style={{ background: "var(--hds-ui-colors-light-grey-fill)", padding: "1em" }}>
77
+ <Input {...props} />
78
+ </div>
79
+ ),
80
+ };
81
+
82
+ export const WhiteReadonlyInput: Story = {
83
+ args: {
84
+ label: "Some kind of readonly input",
85
+ variant: "white",
86
+ readOnly: true,
87
+ value: "This is a read-only value",
88
+ },
89
+ render: (props) => (
90
+ <div style={{ background: "var(--hds-ui-colors-light-grey-fill)", padding: "1em" }}>
91
+ <Input {...props} />
92
+ </div>
93
+ ),
94
+ };
95
+
96
+ export const WhiteReadonlyInputWithError: Story = {
97
+ args: {
98
+ label: "Some kind of readonly input",
99
+ variant: "white",
100
+ readOnly: true,
101
+ value: "This is a read-only value",
102
+ errorMessage: "This is invalid",
103
+ },
104
+ render: (props) => (
105
+ <div style={{ background: "var(--hds-ui-colors-light-grey-fill)", padding: "1em" }}>
106
+ <Input {...props} />
107
+ </div>
108
+ ),
109
+ };
110
+
111
+ export const TrackingNumberSearch: Story = {
112
+ render: () => (
113
+ <HStack
114
+ gap="4"
115
+ align="end"
116
+ style={{
117
+ maxWidth: 556,
118
+ }}
119
+ >
120
+ <Input label="Sporingsnummer" style={{ width: "100%" }} />
121
+ <PrimaryButton size="large">Spor</PrimaryButton>
122
+ </HStack>
123
+ ),
124
+ };
125
+
126
+ export const FormWithErrorsOnSubmit: Story = {
127
+ render: () => {
128
+ // eslint-disable-next-line react-hooks/rules-of-hooks -- It's ok
129
+ const [errors, setErrors] = useState<Record<string, string>>({});
130
+ return (
131
+ <VStack gap="16" asChild>
132
+ <form
133
+ lang="en"
134
+ onSubmit={(e) => {
135
+ e.preventDefault();
136
+ const formData = new FormData(e.currentTarget);
137
+ const newErrors: Record<string, string> = {};
138
+ for (const [key, value] of formData) {
139
+ if (!value) {
140
+ newErrors[key] = `${key} is required`;
141
+ }
142
+ }
143
+ setErrors(newErrors);
144
+ }}
145
+ >
146
+ <p>Fields without input will give an error</p>
147
+ <Input errorMessage={errors.One} label="One" name="One" />
148
+ <Input errorMessage={errors.Two} label="Two" name="Two" />
149
+ <Input errorMessage={errors.Three} label="Three" name="Three" />
150
+ <VStack gap="4">
151
+ <PrimaryButton type="submit">Submit</PrimaryButton>
152
+ <SecondaryButton
153
+ fill="outline"
154
+ onClick={() => {
155
+ setErrors({});
156
+ }}
157
+ type="reset"
158
+ >
159
+ Reset
160
+ </SecondaryButton>
161
+ </VStack>
162
+ </form>
163
+ </VStack>
164
+ );
165
+ },
166
+ };
@@ -0,0 +1,30 @@
1
+ import { forwardRef } from "react";
2
+ import type { InputHTMLAttributes } from "react";
3
+ import { clsx } from "@postenbring/hedwig-css/typed-classname";
4
+ import { InputGroup } from "../input-group";
5
+ import type { InputGroupProps } from "../input-group";
6
+
7
+ export type InputProps = Omit<InputGroupProps & InputHTMLAttributes<HTMLInputElement>, "children">;
8
+
9
+ export const Input = forwardRef<HTMLInputElement, InputProps>(function Input(
10
+ { className, variant, errorMessage, labelProps, label, id, style, disabled, readOnly, ...rest },
11
+ ref,
12
+ ) {
13
+ return (
14
+ <InputGroup
15
+ className={clsx("hds-input", className as undefined)}
16
+ disabled={disabled}
17
+ errorMessage={errorMessage}
18
+ id={id}
19
+ label={label}
20
+ labelProps={labelProps}
21
+ readOnly={readOnly}
22
+ style={style}
23
+ variant={variant}
24
+ >
25
+ <input {...rest} disabled={disabled} readOnly={readOnly} ref={ref} />
26
+ </InputGroup>
27
+ );
28
+ });
29
+
30
+ Input.displayName = "Input";
@@ -0,0 +1,2 @@
1
+ export { InputGroup } from "./input-group";
2
+ export type * from "./input-group";
@@ -0,0 +1,106 @@
1
+ import { useId, forwardRef, Children, isValidElement, cloneElement } from "react";
2
+ import type { LabelHTMLAttributes, ReactNode, CSSProperties } from "react";
3
+ import { clsx } from "@postenbring/hedwig-css/typed-classname";
4
+ import { ErrorMessage } from "../error-message";
5
+
6
+ interface InputProps {
7
+ "aria-describedby"?: string;
8
+ "aria-invalid"?: boolean;
9
+ id?: string;
10
+ className?: string;
11
+ }
12
+
13
+ export interface InputGroupProps {
14
+ id?: string;
15
+ className?: string;
16
+ style?: CSSProperties;
17
+ variant?: "default" | "white";
18
+ errorMessage?: ReactNode;
19
+ labelProps?: LabelHTMLAttributes<HTMLLabelElement>;
20
+ label: ReactNode;
21
+ disabled?: boolean;
22
+ readOnly?: boolean;
23
+ /**
24
+ * `children` must be either a single input element or a render function.
25
+ *
26
+ * If you use a render function, make sure you spread the input props to the appropriate element.
27
+ */
28
+ children: Exclude<ReactNode, Iterable<ReactNode>> | ((inputProps: InputProps) => ReactNode);
29
+ }
30
+
31
+ export const InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(function InputGroup(
32
+ {
33
+ id,
34
+ className,
35
+ style,
36
+ variant = "default",
37
+ errorMessage,
38
+ labelProps: { className: labelClassName, ...labelProps } = {},
39
+ label,
40
+ disabled,
41
+ readOnly,
42
+ children,
43
+ ...rest
44
+ },
45
+ ref,
46
+ ) {
47
+ const errorMessageId = useId();
48
+ const inputId = useId();
49
+
50
+ const renderInput = () => {
51
+ const inputProps: InputProps = {
52
+ "aria-describedby": errorMessage ? errorMessageId : undefined,
53
+ "aria-invalid": errorMessage ? true : undefined,
54
+ id: id ?? inputId,
55
+ className: clsx("hds-input-group__input"),
56
+ };
57
+
58
+ if (typeof children === "function") {
59
+ return children(inputProps);
60
+ }
61
+
62
+ const input: ReactNode = Children.toArray(children)[0];
63
+
64
+ if (!isValidElement<InputProps>(input)) {
65
+ return;
66
+ }
67
+
68
+ return cloneElement<InputProps>(input, {
69
+ ...inputProps,
70
+ ...input.props,
71
+ className: `${inputProps.className} ${input.props.className ?? ""}`,
72
+ });
73
+ };
74
+
75
+ return (
76
+ <div
77
+ className={clsx(
78
+ "hds-input-group",
79
+ {
80
+ [`hds-input-group--${variant}`]: variant,
81
+ "hds-input-group--error": errorMessage,
82
+ },
83
+ className as undefined,
84
+ )}
85
+ ref={ref}
86
+ style={style}
87
+ {...rest}
88
+ >
89
+ <label
90
+ className={clsx("hds-input-group__label", labelClassName as undefined)}
91
+ {...labelProps}
92
+ htmlFor={id ?? inputId}
93
+ >
94
+ {label}
95
+ </label>
96
+ <div
97
+ className={clsx("hds-input-group__input-wrapper")}
98
+ data-disabled={disabled}
99
+ data-readonly={readOnly}
100
+ >
101
+ {renderInput()}
102
+ </div>
103
+ <ErrorMessage id={errorMessageId}>{errorMessage}</ErrorMessage>
104
+ </div>
105
+ );
106
+ });
@@ -0,0 +1,4 @@
1
+ export { Radiobutton } from "./radiobutton";
2
+ export type * from "./radiobutton";
3
+ export { RadioGroup, useRadioGroupContext } from "./radiogroup";
4
+ export type * from "./radiogroup";
@@ -0,0 +1,93 @@
1
+ /* eslint-disable import/no-extraneous-dependencies -- storybook story */
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { VStack } from "../../layout";
4
+ import { Radiobutton, RadioGroup } from "./index";
5
+
6
+ const meta: Meta<typeof Radiobutton> = {
7
+ title: "Form/Radiobutton/Radiobutton",
8
+ component: Radiobutton,
9
+ };
10
+
11
+ export default meta;
12
+
13
+ type Story = StoryObj<typeof Radiobutton>;
14
+
15
+ export const JustARadiobutton: Story = {
16
+ name: "Just a radiobutton",
17
+ args: {
18
+ title: "",
19
+ children: "Just a radiobutton",
20
+ checked: true,
21
+ hasError: false,
22
+ variant: "plain",
23
+ },
24
+ argTypes: {
25
+ variant: { control: "inline-radio", options: ["plain", "bounding-box"] },
26
+ },
27
+ };
28
+
29
+ export const PlainRadiobuttons: Story = {
30
+ name: "Radiobuttons",
31
+ render: (_props) => (
32
+ <RadioGroup legend="Radiobuttons should be grouped in a RadioGroup" name="group1">
33
+ <Radiobutton>This is a radiobutton</Radiobutton>
34
+ <Radiobutton>This is another radiobutton</Radiobutton>
35
+ </RadioGroup>
36
+ ),
37
+ };
38
+
39
+ export const PlainRadiobuttonsWithError: Story = {
40
+ name: "Radiobuttons with error",
41
+ render: (_props) => (
42
+ <RadioGroup
43
+ legend="RadioGroup will aid you with styling and aria when it is provided an error message"
44
+ errorMessage="Something is wrong"
45
+ name="group1error"
46
+ >
47
+ <Radiobutton>This is a radiobutton</Radiobutton>
48
+ <Radiobutton>This is another radiobutton</Radiobutton>
49
+ </RadioGroup>
50
+ ),
51
+ };
52
+
53
+ export const BoundedRadiobutton: Story = {
54
+ name: "Radiobuttons with bounding box",
55
+ render: (_props) => (
56
+ <VStack gap="8" role="radiogroup">
57
+ <Radiobutton name="group2" variant="bounding-box">
58
+ This is a radiobutton with bounding box
59
+ </Radiobutton>
60
+ <Radiobutton hasError name="group2" variant="bounding-box">
61
+ This is a radiobutton with bounding box and error
62
+ </Radiobutton>
63
+ </VStack>
64
+ ),
65
+ };
66
+
67
+ export const DetailedContentRadiobutton: Story = {
68
+ name: "Radiobuttons with title",
69
+ render: (_props) => (
70
+ <VStack gap="8" role="radiogroup">
71
+ <Radiobutton name="group4" title="Option 1">
72
+ Detailed description if needed
73
+ </Radiobutton>
74
+ <Radiobutton hasError name="group4" title="Option 2">
75
+ Detailed description if needed
76
+ </Radiobutton>
77
+ </VStack>
78
+ ),
79
+ };
80
+
81
+ export const DetailedContentRadiobuttonWithBoundingBox: Story = {
82
+ name: "Radiobuttons with bounding box and title",
83
+ render: (_props) => (
84
+ <VStack gap="8" role="radiogroup">
85
+ <Radiobutton name="group5" title="Option 1" variant="bounding-box">
86
+ Detailed description if needed
87
+ </Radiobutton>
88
+ <Radiobutton hasError name="group5" title="Option 2" variant="bounding-box">
89
+ Detailed description if needed
90
+ </Radiobutton>
91
+ </VStack>
92
+ ),
93
+ };
@@ -0,0 +1,85 @@
1
+ import { forwardRef, type InputHTMLAttributes, type ReactNode } from "react";
2
+ import { clsx } from "@postenbring/hedwig-css/typed-classname";
3
+ import { useFieldsetContext } from "../fieldset";
4
+ import { type RadioGroupProps, useRadioGroupContext } from "./radiogroup";
5
+
6
+ export interface RadiobuttonProps
7
+ extends Omit<InputHTMLAttributes<HTMLInputElement>, "defaultValue"> {
8
+ children: ReactNode;
9
+ variant?: "plain" | "bounding-box";
10
+ /**
11
+ * Set to `true` to add error styling. The component will take care of aria to indicate invalid state.
12
+ *
13
+ * Normally you don't need this, as you should wrap your Radiobuttons in the RadioGroup component.
14
+ * When providing an errorMessage to RadioGroup, all contained Radiobuttons will get correct hasError state.
15
+ *
16
+ * You can use this when your Radiobutton is part of a non-HDS fieldset which shows an error message.
17
+ */
18
+ hasError?: boolean;
19
+ title?: string;
20
+ }
21
+
22
+ const isChecked = ({
23
+ checked,
24
+ selectedValue,
25
+ value,
26
+ }: Pick<RadiobuttonProps, "checked" | "value"> & {
27
+ selectedValue: RadioGroupProps["value"];
28
+ }) => {
29
+ if (typeof checked !== "undefined") return checked;
30
+ if (typeof selectedValue !== "undefined") return value === selectedValue;
31
+ return undefined;
32
+ };
33
+
34
+ export const Radiobutton = forwardRef<HTMLInputElement, RadiobuttonProps>(
35
+ (
36
+ {
37
+ checked,
38
+ value,
39
+ variant = "plain",
40
+ hasError: hasErrorProp,
41
+ title,
42
+ children,
43
+ className,
44
+ ...rest
45
+ },
46
+ ref,
47
+ ) => {
48
+ const {
49
+ value: selectedValue,
50
+ hasError: hasRadioGroupError,
51
+ ...context
52
+ } = useRadioGroupContext();
53
+ const { hasError: hasFieldsetError } = useFieldsetContext();
54
+ const hasError = hasFieldsetError || hasRadioGroupError || hasErrorProp;
55
+
56
+ return (
57
+ <div
58
+ className={clsx(
59
+ "hds-radiobutton",
60
+ {
61
+ [`hds-radiobutton--${variant}`]: variant === "bounding-box",
62
+ "hds-radiobutton--error": hasError,
63
+ },
64
+ className as undefined,
65
+ )}
66
+ >
67
+ <label>
68
+ <input
69
+ {...context}
70
+ {...rest}
71
+ checked={isChecked({ checked, selectedValue, value })}
72
+ value={value}
73
+ ref={ref}
74
+ type="radio"
75
+ />
76
+ <span aria-hidden className="hds-radiobutton__checkmark" />
77
+ {title ? <p className="hds-radiobutton__title">{title}</p> : children}
78
+ </label>
79
+ {title ? children : null}
80
+ </div>
81
+ );
82
+ },
83
+ );
84
+
85
+ Radiobutton.displayName = "Radiobutton";
@@ -0,0 +1,39 @@
1
+ /* eslint-disable import/no-extraneous-dependencies -- storybook story */
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { RadioGroup } from "./radiogroup";
4
+ import { Radiobutton } from "./index";
5
+
6
+ const meta: Meta<typeof RadioGroup> = {
7
+ title: "Form/Radiobutton/Radiogroup",
8
+ component: RadioGroup,
9
+ };
10
+
11
+ export default meta;
12
+
13
+ type Story = StoryObj<typeof RadioGroup>;
14
+
15
+ export const PlainRadioGroup: Story = {
16
+ name: "Radio group with radiobuttons",
17
+ args: {
18
+ legend: "Radio group with radiobuttons",
19
+ errorMessage: "",
20
+ name: "group1",
21
+ value: undefined,
22
+ onChange: () => {
23
+ return undefined;
24
+ },
25
+ },
26
+ argTypes: {
27
+ value: {
28
+ description: "Use this prop for a controlled value",
29
+ control: "inline-radio",
30
+ options: [undefined, "First radiobutton", "Second radiobutton"],
31
+ },
32
+ },
33
+ render: (props) => (
34
+ <RadioGroup {...props}>
35
+ <Radiobutton value="First radiobutton">This is a radiobutton</Radiobutton>
36
+ <Radiobutton value="Second radiobutton">This is another radiobutton</Radiobutton>
37
+ </RadioGroup>
38
+ ),
39
+ };
@@ -0,0 +1,52 @@
1
+ import {
2
+ type ChangeEventHandler,
3
+ createContext,
4
+ forwardRef,
5
+ type ReactNode,
6
+ useContext,
7
+ } from "react";
8
+ import { Fieldset, type FieldsetProps } from "../fieldset";
9
+ import type { RadiobuttonProps } from "./radiobutton";
10
+
11
+ export interface RadioGroupProps extends Omit<FieldsetProps, "onChange"> {
12
+ children: ReactNode;
13
+ /** Will be passed to all Radiobuttons within the radio group */
14
+ name?: RadiobuttonProps["name"];
15
+ /** If you want the group to be controlled, you can pass the selected value here */
16
+ value?: RadiobuttonProps["value"];
17
+ /**
18
+ * Error message is passed to the internal Fieldset, and will also give contained Radiobuttons
19
+ * error styling and aria to indicate invalid state.
20
+ */
21
+ errorMessage?: ReactNode;
22
+ /** Will be passed to all Radiobuttons within the radio group */
23
+ onChange?: ChangeEventHandler<HTMLInputElement> | undefined;
24
+ }
25
+
26
+ type RadioGroupContextProps = {
27
+ hasError: boolean;
28
+ } & Pick<RadioGroupProps, "name" | "value" | "onChange">;
29
+
30
+ const RadioGroupContext = createContext<RadioGroupContextProps>({
31
+ hasError: false,
32
+ onChange: () => {
33
+ return undefined;
34
+ },
35
+ });
36
+
37
+ export const useRadioGroupContext = () => useContext(RadioGroupContext);
38
+
39
+ export const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(function RadioGroup(
40
+ { name, value, errorMessage, onChange, children, ...rest },
41
+ ref,
42
+ ) {
43
+ return (
44
+ <RadioGroupContext.Provider value={{ name, value, hasError: Boolean(errorMessage), onChange }}>
45
+ <Fieldset errorMessage={errorMessage} {...rest} ref={ref}>
46
+ {children}
47
+ </Fieldset>
48
+ </RadioGroupContext.Provider>
49
+ );
50
+ });
51
+
52
+ RadioGroup.displayName = "RadioGroup";
@@ -0,0 +1,2 @@
1
+ export { Select } from "./select";
2
+ export type * from "./select";
@@ -0,0 +1,93 @@
1
+ /* eslint-disable import/no-extraneous-dependencies -- storybook story */
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { Select } from ".";
4
+
5
+ const meta: Meta<typeof Select> = {
6
+ title: "Form/Select",
7
+ component: Select,
8
+ };
9
+
10
+ export default meta;
11
+
12
+ type Story = StoryObj<typeof Select>;
13
+
14
+ export const Default: Story = {
15
+ args: {
16
+ label: "Default select",
17
+ errorMessage: "",
18
+ variant: "default",
19
+ },
20
+ argTypes: {
21
+ variant: { control: "inline-radio", options: ["default", "white"] },
22
+ },
23
+ render: (props) => (
24
+ <Select {...props} defaultValue="">
25
+ <option disabled hidden value="">
26
+ Please select
27
+ </option>
28
+ <option value="1">option 1</option>
29
+ <option value="2">option 2</option>
30
+ <option value="3">option 3</option>
31
+ </Select>
32
+ ),
33
+ };
34
+
35
+ export const White: Story = {
36
+ args: {
37
+ label: "White select",
38
+ variant: "white",
39
+ },
40
+ render: (props) => (
41
+ <div style={{ background: "var(--hds-ui-colors-light-grey-fill)", padding: "1em" }}>
42
+ <Select {...props} defaultValue="">
43
+ <option disabled hidden value="">
44
+ Please select
45
+ </option>
46
+ <option value="1">option 1</option>
47
+ <option value="2">option 2</option>
48
+ <option value="3">option 3</option>
49
+ </Select>
50
+ </div>
51
+ ),
52
+ };
53
+
54
+ export const DefaultWithError: Story = {
55
+ args: {
56
+ label: "select with error",
57
+ name: "name",
58
+ id: "someId",
59
+ errorMessage: "Something is wrong",
60
+ },
61
+ render: (props) => (
62
+ <Select {...props} defaultValue="">
63
+ <option disabled hidden value="">
64
+ Please select
65
+ </option>
66
+ <option value="1">option 1</option>
67
+ <option value="2">option 2</option>
68
+ <option value="3">option 3</option>
69
+ </Select>
70
+ ),
71
+ };
72
+
73
+ export const WhiteWithError: Story = {
74
+ args: {
75
+ label: "White select with error",
76
+ variant: "white",
77
+ name: "name",
78
+ id: "someId",
79
+ errorMessage: "Something is wrong",
80
+ },
81
+ render: (props) => (
82
+ <div style={{ background: "var(--hds-ui-colors-light-grey-fill)", padding: "1em" }}>
83
+ <Select {...props} defaultValue="">
84
+ <option disabled hidden value="">
85
+ Please select
86
+ </option>
87
+ <option value="1">option 1</option>
88
+ <option value="2">option 2</option>
89
+ <option value="3">option 3</option>
90
+ </Select>
91
+ </div>
92
+ ),
93
+ };