@dsn-starter-kit/components-react 3.0.0 → 3.1.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 (386) hide show
  1. package/README.md +32 -4
  2. package/dist/ActionGroup/ActionGroup.d.mts +51 -0
  3. package/dist/ActionGroup/ActionGroup.d.mts.map +1 -0
  4. package/dist/ActionGroup/ActionGroup2.mjs +65 -0
  5. package/dist/ActionGroup/ActionGroup2.mjs.map +1 -0
  6. package/dist/ActionGroup/index.d.mts +2 -0
  7. package/dist/Alert/Alert.d.mts +85 -0
  8. package/dist/Alert/Alert.d.mts.map +1 -0
  9. package/dist/Alert/Alert2.mjs +102 -0
  10. package/dist/Alert/Alert2.mjs.map +1 -0
  11. package/dist/Alert/index.d.mts +2 -0
  12. package/dist/Backdrop/Backdrop.d.mts +28 -0
  13. package/dist/Backdrop/Backdrop.d.mts.map +1 -0
  14. package/dist/Backdrop/Backdrop2.mjs +32 -0
  15. package/dist/Backdrop/Backdrop2.mjs.map +1 -0
  16. package/dist/Backdrop/index.d.mts +2 -0
  17. package/dist/Body/Body.d.mts +29 -0
  18. package/dist/Body/Body.d.mts.map +1 -0
  19. package/dist/Body/Body2.mjs +36 -0
  20. package/dist/Body/Body2.mjs.map +1 -0
  21. package/dist/Body/index.d.mts +2 -0
  22. package/dist/BreadcrumbNavigation/BreadcrumbNavigation.d.mts +45 -0
  23. package/dist/BreadcrumbNavigation/BreadcrumbNavigation.d.mts.map +1 -0
  24. package/dist/BreadcrumbNavigation/BreadcrumbNavigation2.mjs +51 -0
  25. package/dist/BreadcrumbNavigation/BreadcrumbNavigation2.mjs.map +1 -0
  26. package/dist/BreadcrumbNavigation/BreadcrumbNavigationItem.d.mts +41 -0
  27. package/dist/BreadcrumbNavigation/BreadcrumbNavigationItem.d.mts.map +1 -0
  28. package/dist/BreadcrumbNavigation/BreadcrumbNavigationItem.mjs +48 -0
  29. package/dist/BreadcrumbNavigation/BreadcrumbNavigationItem.mjs.map +1 -0
  30. package/dist/BreadcrumbNavigation/index.d.mts +3 -0
  31. package/dist/BreakoutSection/BreakoutSection.d.mts +32 -0
  32. package/dist/BreakoutSection/BreakoutSection.d.mts.map +1 -0
  33. package/dist/BreakoutSection/BreakoutSection2.mjs +36 -0
  34. package/dist/BreakoutSection/BreakoutSection2.mjs.map +1 -0
  35. package/dist/BreakoutSection/index.d.mts +2 -0
  36. package/dist/Button/Button.d.mts +92 -0
  37. package/dist/Button/Button.d.mts.map +1 -0
  38. package/dist/Button/Button2.mjs +76 -0
  39. package/dist/Button/Button2.mjs.map +1 -0
  40. package/dist/Button/index.d.mts +2 -0
  41. package/dist/ButtonLink/ButtonLink.d.mts +94 -0
  42. package/dist/ButtonLink/ButtonLink.d.mts.map +1 -0
  43. package/dist/ButtonLink/ButtonLink2.mjs +70 -0
  44. package/dist/ButtonLink/ButtonLink2.mjs.map +1 -0
  45. package/dist/ButtonLink/index.d.mts +2 -0
  46. package/dist/Card/Card.d.mts +107 -0
  47. package/dist/Card/Card.d.mts.map +1 -0
  48. package/dist/Card/Card2.mjs +125 -0
  49. package/dist/Card/Card2.mjs.map +1 -0
  50. package/dist/Card/index.d.mts +2 -0
  51. package/dist/Checkbox/Checkbox.d.mts +20 -0
  52. package/dist/Checkbox/Checkbox.d.mts.map +1 -0
  53. package/dist/Checkbox/Checkbox2.mjs +43 -0
  54. package/dist/Checkbox/Checkbox2.mjs.map +1 -0
  55. package/dist/Checkbox/index.d.mts +2 -0
  56. package/dist/CheckboxGroup/CheckboxGroup.d.mts +39 -0
  57. package/dist/CheckboxGroup/CheckboxGroup.d.mts.map +1 -0
  58. package/dist/CheckboxGroup/CheckboxGroup2.mjs +46 -0
  59. package/dist/CheckboxGroup/CheckboxGroup2.mjs.map +1 -0
  60. package/dist/CheckboxGroup/index.d.mts +2 -0
  61. package/dist/CheckboxOption/CheckboxOption.d.mts +17 -0
  62. package/dist/CheckboxOption/CheckboxOption.d.mts.map +1 -0
  63. package/dist/CheckboxOption/CheckboxOption2.mjs +29 -0
  64. package/dist/CheckboxOption/CheckboxOption2.mjs.map +1 -0
  65. package/dist/CheckboxOption/index.d.mts +2 -0
  66. package/dist/Container/Container.d.mts +43 -0
  67. package/dist/Container/Container.d.mts.map +1 -0
  68. package/dist/Container/Container2.mjs +42 -0
  69. package/dist/Container/Container2.mjs.map +1 -0
  70. package/dist/Container/index.d.mts +2 -0
  71. package/dist/DateInput/DateInput.d.mts +38 -0
  72. package/dist/DateInput/DateInput.d.mts.map +1 -0
  73. package/dist/DateInput/DateInput2.mjs +69 -0
  74. package/dist/DateInput/DateInput2.mjs.map +1 -0
  75. package/dist/DateInput/index.d.mts +2 -0
  76. package/dist/DateInputGroup/DateInputGroup.d.mts +67 -0
  77. package/dist/DateInputGroup/DateInputGroup.d.mts.map +1 -0
  78. package/dist/DateInputGroup/DateInputGroup2.mjs +120 -0
  79. package/dist/DateInputGroup/DateInputGroup2.mjs.map +1 -0
  80. package/dist/DateInputGroup/index.d.mts +2 -0
  81. package/dist/Details/Details.d.mts +48 -0
  82. package/dist/Details/Details.d.mts.map +1 -0
  83. package/dist/Details/Details2.mjs +61 -0
  84. package/dist/Details/Details2.mjs.map +1 -0
  85. package/dist/Details/index.d.mts +2 -0
  86. package/dist/DotBadge/DotBadge.d.mts +44 -0
  87. package/dist/DotBadge/DotBadge.d.mts.map +1 -0
  88. package/dist/DotBadge/DotBadge2.mjs +42 -0
  89. package/dist/DotBadge/DotBadge2.mjs.map +1 -0
  90. package/dist/DotBadge/index.d.mts +2 -0
  91. package/dist/Drawer/Drawer.d.mts +111 -0
  92. package/dist/Drawer/Drawer.d.mts.map +1 -0
  93. package/dist/Drawer/Drawer2.mjs +156 -0
  94. package/dist/Drawer/Drawer2.mjs.map +1 -0
  95. package/dist/Drawer/index.d.mts +2 -0
  96. package/dist/EmailInput/EmailInput.d.mts +40 -0
  97. package/dist/EmailInput/EmailInput.d.mts.map +1 -0
  98. package/dist/EmailInput/EmailInput.mjs +39 -0
  99. package/dist/EmailInput/EmailInput.mjs.map +1 -0
  100. package/dist/EmailInput/index.d.mts +2 -0
  101. package/dist/File/File.d.mts +124 -0
  102. package/dist/File/File.d.mts.map +1 -0
  103. package/dist/File/File2.mjs +196 -0
  104. package/dist/File/File2.mjs.map +1 -0
  105. package/dist/File/index.d.mts +2 -0
  106. package/dist/FileInput/FileInput.d.mts +38 -0
  107. package/dist/FileInput/FileInput.d.mts.map +1 -0
  108. package/dist/FileInput/FileInput2.mjs +41 -0
  109. package/dist/FileInput/FileInput2.mjs.map +1 -0
  110. package/dist/FileInput/index.d.mts +2 -0
  111. package/dist/FormField/FormField.d.mts +103 -0
  112. package/dist/FormField/FormField.d.mts.map +1 -0
  113. package/dist/FormField/FormField2.mjs +101 -0
  114. package/dist/FormField/FormField2.mjs.map +1 -0
  115. package/dist/FormField/index.d.mts +2 -0
  116. package/dist/FormFieldDescription/FormFieldDescription.d.mts +53 -0
  117. package/dist/FormFieldDescription/FormFieldDescription.d.mts.map +1 -0
  118. package/dist/FormFieldDescription/FormFieldDescription2.mjs +49 -0
  119. package/dist/FormFieldDescription/FormFieldDescription2.mjs.map +1 -0
  120. package/dist/FormFieldDescription/index.d.mts +2 -0
  121. package/dist/FormFieldErrorMessage/FormFieldErrorMessage.d.mts +42 -0
  122. package/dist/FormFieldErrorMessage/FormFieldErrorMessage.d.mts.map +1 -0
  123. package/dist/FormFieldErrorMessage/FormFieldErrorMessage2.mjs +44 -0
  124. package/dist/FormFieldErrorMessage/FormFieldErrorMessage2.mjs.map +1 -0
  125. package/dist/FormFieldErrorMessage/index.d.mts +2 -0
  126. package/dist/FormFieldLabel/FormFieldLabel.d.mts +40 -0
  127. package/dist/FormFieldLabel/FormFieldLabel.d.mts.map +1 -0
  128. package/dist/FormFieldLabel/FormFieldLabel2.mjs +42 -0
  129. package/dist/FormFieldLabel/FormFieldLabel2.mjs.map +1 -0
  130. package/dist/FormFieldLabel/index.d.mts +2 -0
  131. package/dist/FormFieldLegend/FormFieldLegend.d.mts +41 -0
  132. package/dist/FormFieldLegend/FormFieldLegend.d.mts.map +1 -0
  133. package/dist/FormFieldLegend/FormFieldLegend2.mjs +43 -0
  134. package/dist/FormFieldLegend/FormFieldLegend2.mjs.map +1 -0
  135. package/dist/FormFieldLegend/index.d.mts +2 -0
  136. package/dist/FormFieldStatus/FormFieldStatus.d.mts +62 -0
  137. package/dist/FormFieldStatus/FormFieldStatus.d.mts.map +1 -0
  138. package/dist/FormFieldStatus/FormFieldStatus2.mjs +54 -0
  139. package/dist/FormFieldStatus/FormFieldStatus2.mjs.map +1 -0
  140. package/dist/FormFieldStatus/index.d.mts +2 -0
  141. package/dist/FormFieldset/FormFieldset.d.mts +100 -0
  142. package/dist/FormFieldset/FormFieldset.d.mts.map +1 -0
  143. package/dist/FormFieldset/FormFieldset2.mjs +100 -0
  144. package/dist/FormFieldset/FormFieldset2.mjs.map +1 -0
  145. package/dist/FormFieldset/index.d.mts +2 -0
  146. package/dist/Grid/Grid.d.mts +37 -0
  147. package/dist/Grid/Grid.d.mts.map +1 -0
  148. package/dist/Grid/Grid2.mjs +38 -0
  149. package/dist/Grid/Grid2.mjs.map +1 -0
  150. package/dist/Grid/GridItem.d.mts +87 -0
  151. package/dist/Grid/GridItem.d.mts.map +1 -0
  152. package/dist/Grid/GridItem.mjs +48 -0
  153. package/dist/Grid/GridItem.mjs.map +1 -0
  154. package/dist/Grid/index.d.mts +3 -0
  155. package/dist/Heading/Heading.d.mts +40 -0
  156. package/dist/Heading/Heading.d.mts.map +1 -0
  157. package/dist/Heading/Heading2.mjs +33 -0
  158. package/dist/Heading/Heading2.mjs.map +1 -0
  159. package/dist/Heading/index.d.mts +2 -0
  160. package/dist/HeadingGroup/HeadingGroup.d.mts +25 -0
  161. package/dist/HeadingGroup/HeadingGroup.d.mts.map +1 -0
  162. package/dist/HeadingGroup/HeadingGroup2.mjs +24 -0
  163. package/dist/HeadingGroup/HeadingGroup2.mjs.map +1 -0
  164. package/dist/HeadingGroup/index.d.mts +2 -0
  165. package/dist/Hero/Hero.d.mts +47 -0
  166. package/dist/Hero/Hero.d.mts.map +1 -0
  167. package/dist/Hero/Hero2.mjs +50 -0
  168. package/dist/Hero/Hero2.mjs.map +1 -0
  169. package/dist/Hero/index.d.mts +2 -0
  170. package/dist/Icon/Icon.d.mts +47 -0
  171. package/dist/Icon/Icon.d.mts.map +1 -0
  172. package/dist/Icon/Icon2.mjs +47 -0
  173. package/dist/Icon/Icon2.mjs.map +1 -0
  174. package/dist/Icon/icon-registry.generated.d.mts +8 -0
  175. package/dist/Icon/icon-registry.generated.d.mts.map +1 -0
  176. package/dist/Icon/icon-registry.generated.mjs +818 -0
  177. package/dist/Icon/icon-registry.generated.mjs.map +1 -0
  178. package/dist/Icon/index.d.mts +3 -0
  179. package/dist/IconList/IconList.d.mts +68 -0
  180. package/dist/IconList/IconList.d.mts.map +1 -0
  181. package/dist/IconList/IconList2.mjs +65 -0
  182. package/dist/IconList/IconList2.mjs.map +1 -0
  183. package/dist/IconList/index.d.mts +2 -0
  184. package/dist/Image/Image.d.mts +56 -0
  185. package/dist/Image/Image.d.mts.map +1 -0
  186. package/dist/Image/Image2.mjs +67 -0
  187. package/dist/Image/Image2.mjs.map +1 -0
  188. package/dist/Image/index.d.mts +2 -0
  189. package/dist/Link/Link.d.mts +82 -0
  190. package/dist/Link/Link.d.mts.map +1 -0
  191. package/dist/Link/Link2.mjs +73 -0
  192. package/dist/Link/Link2.mjs.map +1 -0
  193. package/dist/Link/index.d.mts +2 -0
  194. package/dist/LinkButton/LinkButton.d.mts +54 -0
  195. package/dist/LinkButton/LinkButton.d.mts.map +1 -0
  196. package/dist/LinkButton/LinkButton2.mjs +48 -0
  197. package/dist/LinkButton/LinkButton2.mjs.map +1 -0
  198. package/dist/LinkButton/index.d.mts +2 -0
  199. package/dist/Logo/Logo.d.mts +35 -0
  200. package/dist/Logo/Logo.d.mts.map +1 -0
  201. package/dist/Logo/Logo2.mjs +66 -0
  202. package/dist/Logo/Logo2.mjs.map +1 -0
  203. package/dist/Logo/index.d.mts +2 -0
  204. package/dist/Menu/Menu.d.mts +58 -0
  205. package/dist/Menu/Menu.d.mts.map +1 -0
  206. package/dist/Menu/Menu2.mjs +47 -0
  207. package/dist/Menu/Menu2.mjs.map +1 -0
  208. package/dist/Menu/index.d.mts +2 -0
  209. package/dist/MenuButton/MenuButton.d.mts +56 -0
  210. package/dist/MenuButton/MenuButton.d.mts.map +1 -0
  211. package/dist/MenuButton/MenuButton2.mjs +57 -0
  212. package/dist/MenuButton/MenuButton2.mjs.map +1 -0
  213. package/dist/MenuButton/index.d.mts +2 -0
  214. package/dist/MenuLink/MenuLink.d.mts +98 -0
  215. package/dist/MenuLink/MenuLink.d.mts.map +1 -0
  216. package/dist/MenuLink/MenuLink2.mjs +98 -0
  217. package/dist/MenuLink/MenuLink2.mjs.map +1 -0
  218. package/dist/MenuLink/index.d.mts +2 -0
  219. package/dist/ModalDialog/ModalDialog.d.mts +97 -0
  220. package/dist/ModalDialog/ModalDialog.d.mts.map +1 -0
  221. package/dist/ModalDialog/ModalDialog2.mjs +134 -0
  222. package/dist/ModalDialog/ModalDialog2.mjs.map +1 -0
  223. package/dist/ModalDialog/index.d.mts +2 -0
  224. package/dist/Note/Note.d.mts +95 -0
  225. package/dist/Note/Note.d.mts.map +1 -0
  226. package/dist/Note/Note2.mjs +116 -0
  227. package/dist/Note/Note2.mjs.map +1 -0
  228. package/dist/Note/index.d.mts +2 -0
  229. package/dist/NumberBadge/NumberBadge.d.mts +44 -0
  230. package/dist/NumberBadge/NumberBadge.d.mts.map +1 -0
  231. package/dist/NumberBadge/NumberBadge2.mjs +50 -0
  232. package/dist/NumberBadge/NumberBadge2.mjs.map +1 -0
  233. package/dist/NumberBadge/index.d.mts +2 -0
  234. package/dist/NumberInput/NumberInput.d.mts +47 -0
  235. package/dist/NumberInput/NumberInput.d.mts.map +1 -0
  236. package/dist/NumberInput/NumberInput.mjs +40 -0
  237. package/dist/NumberInput/NumberInput.mjs.map +1 -0
  238. package/dist/NumberInput/index.d.mts +2 -0
  239. package/dist/OptionLabel/OptionLabel.d.mts +15 -0
  240. package/dist/OptionLabel/OptionLabel.d.mts.map +1 -0
  241. package/dist/OptionLabel/OptionLabel2.mjs +22 -0
  242. package/dist/OptionLabel/OptionLabel2.mjs.map +1 -0
  243. package/dist/OptionLabel/index.d.mts +2 -0
  244. package/dist/OrderedList/OrderedList.d.mts +34 -0
  245. package/dist/OrderedList/OrderedList.d.mts.map +1 -0
  246. package/dist/OrderedList/OrderedList2.mjs +37 -0
  247. package/dist/OrderedList/OrderedList2.mjs.map +1 -0
  248. package/dist/OrderedList/index.d.mts +2 -0
  249. package/dist/PageBody/PageBody.d.mts +35 -0
  250. package/dist/PageBody/PageBody.d.mts.map +1 -0
  251. package/dist/PageBody/PageBody2.mjs +40 -0
  252. package/dist/PageBody/PageBody2.mjs.map +1 -0
  253. package/dist/PageBody/index.d.mts +2 -0
  254. package/dist/PageFooter/PageFooter.d.mts +57 -0
  255. package/dist/PageFooter/PageFooter.d.mts.map +1 -0
  256. package/dist/PageFooter/PageFooter2.mjs +78 -0
  257. package/dist/PageFooter/PageFooter2.mjs.map +1 -0
  258. package/dist/PageFooter/index.d.mts +2 -0
  259. package/dist/PageHeader/PageHeader.d.mts +192 -0
  260. package/dist/PageHeader/PageHeader.d.mts.map +1 -0
  261. package/dist/PageHeader/PageHeader2.mjs +275 -0
  262. package/dist/PageHeader/PageHeader2.mjs.map +1 -0
  263. package/dist/PageHeader/index.d.mts +2 -0
  264. package/dist/PageLayout/PageLayout.d.mts +40 -0
  265. package/dist/PageLayout/PageLayout.d.mts.map +1 -0
  266. package/dist/PageLayout/PageLayout2.mjs +42 -0
  267. package/dist/PageLayout/PageLayout2.mjs.map +1 -0
  268. package/dist/PageLayout/index.d.mts +2 -0
  269. package/dist/Paragraph/Paragraph.d.mts +37 -0
  270. package/dist/Paragraph/Paragraph.d.mts.map +1 -0
  271. package/dist/Paragraph/Paragraph2.mjs +34 -0
  272. package/dist/Paragraph/Paragraph2.mjs.map +1 -0
  273. package/dist/Paragraph/index.d.mts +2 -0
  274. package/dist/PasswordInput/PasswordInput.d.mts +54 -0
  275. package/dist/PasswordInput/PasswordInput.d.mts.map +1 -0
  276. package/dist/PasswordInput/PasswordInput.mjs +43 -0
  277. package/dist/PasswordInput/PasswordInput.mjs.map +1 -0
  278. package/dist/PasswordInput/index.d.mts +2 -0
  279. package/dist/Popover/Popover.d.mts +118 -0
  280. package/dist/Popover/Popover.d.mts.map +1 -0
  281. package/dist/Popover/Popover2.mjs +235 -0
  282. package/dist/Popover/Popover2.mjs.map +1 -0
  283. package/dist/Popover/index.d.mts +2 -0
  284. package/dist/PreHeading/PreHeading.d.mts +10 -0
  285. package/dist/PreHeading/PreHeading.d.mts.map +1 -0
  286. package/dist/PreHeading/PreHeading2.mjs +18 -0
  287. package/dist/PreHeading/PreHeading2.mjs.map +1 -0
  288. package/dist/PreHeading/index.d.mts +2 -0
  289. package/dist/ProgressBar/ProgressBar.d.mts +60 -0
  290. package/dist/ProgressBar/ProgressBar.d.mts.map +1 -0
  291. package/dist/ProgressBar/ProgressBar2.mjs +73 -0
  292. package/dist/ProgressBar/ProgressBar2.mjs.map +1 -0
  293. package/dist/ProgressBar/index.d.mts +2 -0
  294. package/dist/Radio/Radio.d.mts +16 -0
  295. package/dist/Radio/Radio.d.mts.map +1 -0
  296. package/dist/Radio/Radio2.mjs +31 -0
  297. package/dist/Radio/Radio2.mjs.map +1 -0
  298. package/dist/Radio/index.d.mts +2 -0
  299. package/dist/RadioGroup/RadioGroup.d.mts +39 -0
  300. package/dist/RadioGroup/RadioGroup.d.mts.map +1 -0
  301. package/dist/RadioGroup/RadioGroup2.mjs +46 -0
  302. package/dist/RadioGroup/RadioGroup2.mjs.map +1 -0
  303. package/dist/RadioGroup/index.d.mts +2 -0
  304. package/dist/RadioOption/RadioOption.d.mts +17 -0
  305. package/dist/RadioOption/RadioOption.d.mts.map +1 -0
  306. package/dist/RadioOption/RadioOption2.mjs +29 -0
  307. package/dist/RadioOption/RadioOption2.mjs.map +1 -0
  308. package/dist/RadioOption/index.d.mts +2 -0
  309. package/dist/SearchInput/SearchInput.d.mts +41 -0
  310. package/dist/SearchInput/SearchInput.d.mts.map +1 -0
  311. package/dist/SearchInput/SearchInput2.mjs +48 -0
  312. package/dist/SearchInput/SearchInput2.mjs.map +1 -0
  313. package/dist/SearchInput/index.d.mts +2 -0
  314. package/dist/Select/Select.d.mts +53 -0
  315. package/dist/Select/Select.d.mts.map +1 -0
  316. package/dist/Select/Select2.mjs +61 -0
  317. package/dist/Select/Select2.mjs.map +1 -0
  318. package/dist/Select/index.d.mts +2 -0
  319. package/dist/SkipLink/SkipLink.d.mts +37 -0
  320. package/dist/SkipLink/SkipLink.d.mts.map +1 -0
  321. package/dist/SkipLink/SkipLink2.mjs +33 -0
  322. package/dist/SkipLink/SkipLink2.mjs.map +1 -0
  323. package/dist/SkipLink/index.d.mts +2 -0
  324. package/dist/Spinner/Spinner.d.mts +45 -0
  325. package/dist/Spinner/Spinner.d.mts.map +1 -0
  326. package/dist/Spinner/Spinner2.mjs +58 -0
  327. package/dist/Spinner/Spinner2.mjs.map +1 -0
  328. package/dist/Spinner/index.d.mts +2 -0
  329. package/dist/Stack/Stack.d.mts +37 -0
  330. package/dist/Stack/Stack.d.mts.map +1 -0
  331. package/dist/Stack/Stack2.mjs +38 -0
  332. package/dist/Stack/Stack2.mjs.map +1 -0
  333. package/dist/Stack/index.d.mts +2 -0
  334. package/dist/StatusBadge/StatusBadge.d.mts +52 -0
  335. package/dist/StatusBadge/StatusBadge.d.mts.map +1 -0
  336. package/dist/StatusBadge/StatusBadge2.mjs +49 -0
  337. package/dist/StatusBadge/StatusBadge2.mjs.map +1 -0
  338. package/dist/StatusBadge/index.d.mts +2 -0
  339. package/dist/SummaryList/SummaryList.d.mts +51 -0
  340. package/dist/SummaryList/SummaryList.d.mts.map +1 -0
  341. package/dist/SummaryList/SummaryList2.mjs +66 -0
  342. package/dist/SummaryList/SummaryList2.mjs.map +1 -0
  343. package/dist/SummaryList/index.d.mts +2 -0
  344. package/dist/Table/Table.d.mts +63 -0
  345. package/dist/Table/Table.d.mts.map +1 -0
  346. package/dist/Table/Table2.mjs +54 -0
  347. package/dist/Table/Table2.mjs.map +1 -0
  348. package/dist/Table/index.d.mts +2 -0
  349. package/dist/TableOfContents/TableOfContents.d.mts +64 -0
  350. package/dist/TableOfContents/TableOfContents.d.mts.map +1 -0
  351. package/dist/TableOfContents/TableOfContents2.mjs +51 -0
  352. package/dist/TableOfContents/TableOfContents2.mjs.map +1 -0
  353. package/dist/TableOfContents/index.d.mts +2 -0
  354. package/dist/TelephoneInput/TelephoneInput.d.mts +40 -0
  355. package/dist/TelephoneInput/TelephoneInput.d.mts.map +1 -0
  356. package/dist/TelephoneInput/TelephoneInput.mjs +39 -0
  357. package/dist/TelephoneInput/TelephoneInput.mjs.map +1 -0
  358. package/dist/TelephoneInput/index.d.mts +2 -0
  359. package/dist/TextArea/TextArea.d.mts +46 -0
  360. package/dist/TextArea/TextArea.d.mts.map +1 -0
  361. package/dist/TextArea/TextArea2.mjs +43 -0
  362. package/dist/TextArea/TextArea2.mjs.map +1 -0
  363. package/dist/TextArea/index.d.mts +2 -0
  364. package/dist/TextInput/TextInput.d.mts +46 -0
  365. package/dist/TextInput/TextInput.d.mts.map +1 -0
  366. package/dist/TextInput/TextInput2.mjs +43 -0
  367. package/dist/TextInput/TextInput2.mjs.map +1 -0
  368. package/dist/TextInput/index.d.mts +2 -0
  369. package/dist/TimeInput/TimeInput.d.mts +38 -0
  370. package/dist/TimeInput/TimeInput.d.mts.map +1 -0
  371. package/dist/TimeInput/TimeInput2.mjs +69 -0
  372. package/dist/TimeInput/TimeInput2.mjs.map +1 -0
  373. package/dist/TimeInput/index.d.mts +2 -0
  374. package/dist/UnorderedList/UnorderedList.d.mts +28 -0
  375. package/dist/UnorderedList/UnorderedList.d.mts.map +1 -0
  376. package/dist/UnorderedList/UnorderedList2.mjs +31 -0
  377. package/dist/UnorderedList/UnorderedList2.mjs.map +1 -0
  378. package/dist/UnorderedList/index.d.mts +2 -0
  379. package/dist/index.css +3470 -3470
  380. package/dist/index.d.mts +150 -3874
  381. package/dist/index.mjs +76 -5006
  382. package/dist/utils/describeControl.mjs +25 -0
  383. package/dist/utils/describeControl.mjs.map +1 -0
  384. package/package.json +4 -3
  385. package/dist/index.d.mts.map +0 -1
  386. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,156 @@
1
+ import { Icon } from "../Icon/Icon2.mjs";
2
+ import { Button } from "../Button/Button2.mjs";
3
+ /* empty css */
4
+ import React from "react";
5
+ import { classNames } from "@dsn-starter-kit/core";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/Drawer/Drawer.tsx
8
+ const DrawerContext = React.createContext({ headingId: "" });
9
+ /**
10
+ * Drawer component
11
+ * Zijpaneel dat vanuit links of rechts de viewport inschuift.
12
+ *
13
+ * Gebruik `modal={true}` (standaard) voor gefocuste taken waarbij de achtergrond
14
+ * geblokkeerd moet worden. Gebruik `modal={false}` als de gebruiker de achtergrondpagina
15
+ * nodig heeft voor context.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <Drawer isOpen={isOpen} onClose={() => setIsOpen(false)}>
20
+ * <DrawerHeader>
21
+ * <DrawerHeading>Filteropties</DrawerHeading>
22
+ * </DrawerHeader>
23
+ * <DrawerBody>
24
+ * <Paragraph>Inhoud van het zijpaneel</Paragraph>
25
+ * </DrawerBody>
26
+ * <DrawerFooter>
27
+ * <ActionGroup>
28
+ * <Button variant="strong" onClick={() => setIsOpen(false)}>Toepassen</Button>
29
+ * <Button variant="default" onClick={() => setIsOpen(false)}>Annuleren</Button>
30
+ * </ActionGroup>
31
+ * </DrawerFooter>
32
+ * </Drawer>
33
+ * ```
34
+ */
35
+ const Drawer = React.forwardRef(({ className, isOpen, onClose, modal = true, side = "right", children, ...props }, ref) => {
36
+ const internalRef = React.useRef(null);
37
+ const dialogRef = ref ?? internalRef;
38
+ const headingId = React.useId();
39
+ React.useEffect(() => {
40
+ const dialog = dialogRef.current;
41
+ if (!dialog) return;
42
+ if (isOpen && !dialog.open) {
43
+ if (modal) dialog.showModal();
44
+ else dialog.show();
45
+ } else if (!isOpen && dialog.open) dialog.close();
46
+ }, [
47
+ isOpen,
48
+ modal,
49
+ dialogRef
50
+ ]);
51
+ React.useEffect(() => {
52
+ if (modal) return;
53
+ const dialog = dialogRef.current;
54
+ if (!dialog || !isOpen) return;
55
+ const handleKeyDown = (event) => {
56
+ if (event.key === "Escape") onClose?.();
57
+ };
58
+ dialog.addEventListener("keydown", handleKeyDown);
59
+ return () => dialog.removeEventListener("keydown", handleKeyDown);
60
+ }, [
61
+ modal,
62
+ isOpen,
63
+ onClose,
64
+ dialogRef
65
+ ]);
66
+ const handleCancel = (event) => {
67
+ event.preventDefault();
68
+ onClose?.();
69
+ };
70
+ const classes = classNames("dsn-drawer", side === "left" ? "dsn-drawer--side-left" : "dsn-drawer--side-right", className);
71
+ return /* @__PURE__ */ jsx(DrawerContext.Provider, {
72
+ value: {
73
+ headingId,
74
+ onClose
75
+ },
76
+ children: /* @__PURE__ */ jsx("dialog", {
77
+ ref: dialogRef,
78
+ className: classes,
79
+ "aria-labelledby": headingId,
80
+ onCancel: handleCancel,
81
+ ...props,
82
+ children
83
+ })
84
+ });
85
+ });
86
+ Drawer.displayName = "Drawer";
87
+ /**
88
+ * DrawerHeader
89
+ * De headerstrook van het zijpaneel met heading en sluitknop.
90
+ */
91
+ const DrawerHeader = React.forwardRef(({ className, children, ...props }, ref) => {
92
+ const { onClose } = React.useContext(DrawerContext);
93
+ return /* @__PURE__ */ jsxs("div", {
94
+ ref,
95
+ className: classNames("dsn-drawer__header", className),
96
+ ...props,
97
+ children: [children, /* @__PURE__ */ jsx(Button, {
98
+ variant: "subtle",
99
+ size: "small",
100
+ iconOnly: true,
101
+ onClick: onClose,
102
+ iconStart: /* @__PURE__ */ jsx(Icon, {
103
+ name: "x",
104
+ "aria-hidden": true
105
+ }),
106
+ children: "Sluiten"
107
+ })]
108
+ });
109
+ });
110
+ DrawerHeader.displayName = "DrawerHeader";
111
+ /**
112
+ * DrawerHeading
113
+ * De heading van het zijpaneel. ID wordt automatisch gegenereerd voor aria-labelledby.
114
+ */
115
+ const DrawerHeading = React.forwardRef(({ className, level = 2, children, ...props }, ref) => {
116
+ const { headingId } = React.useContext(DrawerContext);
117
+ const Tag = `h${level}`;
118
+ return /* @__PURE__ */ jsx(Tag, {
119
+ ref,
120
+ id: headingId,
121
+ className: classNames("dsn-drawer-heading", className),
122
+ ...props,
123
+ children
124
+ });
125
+ });
126
+ DrawerHeading.displayName = "DrawerHeading";
127
+ /**
128
+ * DrawerBody
129
+ * De scrollbare inhoudssectie van het zijpaneel met scroll-affordance schaduw.
130
+ */
131
+ const DrawerBody = React.forwardRef(({ className, children, ...props }, ref) => {
132
+ return /* @__PURE__ */ jsx("div", {
133
+ ref,
134
+ className: classNames("dsn-drawer__body", className),
135
+ ...props,
136
+ children
137
+ });
138
+ });
139
+ DrawerBody.displayName = "DrawerBody";
140
+ /**
141
+ * DrawerFooter
142
+ * De voettekst van het zijpaneel met actieknoppen.
143
+ */
144
+ const DrawerFooter = React.forwardRef(({ className, children, ...props }, ref) => {
145
+ return /* @__PURE__ */ jsx("div", {
146
+ ref,
147
+ className: classNames("dsn-drawer__footer", className),
148
+ ...props,
149
+ children
150
+ });
151
+ });
152
+ DrawerFooter.displayName = "DrawerFooter";
153
+ //#endregion
154
+ export { Drawer, DrawerBody, DrawerFooter, DrawerHeader, DrawerHeading };
155
+
156
+ //# sourceMappingURL=Drawer2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer2.mjs","names":[],"sources":["../../src/Drawer/Drawer.tsx"],"sourcesContent":["import React from 'react';\nimport { classNames } from '@dsn-starter-kit/core';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport './Drawer.css';\n\n// =============================================================================\n// Context\n// =============================================================================\n\ninterface DrawerContextValue {\n headingId: string;\n onClose?: () => void;\n}\n\nconst DrawerContext = React.createContext<DrawerContextValue>({\n headingId: '',\n});\n\n// =============================================================================\n// Drawer (root)\n// =============================================================================\n\nexport interface DrawerProps extends Omit<\n React.HTMLAttributes<HTMLDialogElement>,\n 'children'\n> {\n /**\n * Bepaalt of het zijpaneel getoond wordt.\n */\n isOpen: boolean;\n\n /**\n * Callback die wordt aangeroepen wanneer het zijpaneel sluit\n * (sluitknop, Escape-toets).\n */\n onClose?: () => void;\n\n /**\n * Modaal of non-modaal gedrag.\n * - `true` (standaard): opent via `.showModal()` — achtergrond geblokkeerd,\n * natieve focus-trap, Escape sluit via `cancel`-event.\n * - `false`: opent via `.show()` — achtergrond blijft interactief,\n * Escape sluit via `keydown`-listener.\n * @default true\n */\n modal?: boolean;\n\n /**\n * De kant van de viewport vanwaar het zijpaneel inschuift.\n * @default \"right\"\n */\n side?: 'right' | 'left';\n\n /**\n * De subcomponenten van het zijpaneel:\n * `DrawerHeader`, `DrawerBody`, `DrawerFooter`\n */\n children?: React.ReactNode;\n}\n\n/**\n * Drawer component\n * Zijpaneel dat vanuit links of rechts de viewport inschuift.\n *\n * Gebruik `modal={true}` (standaard) voor gefocuste taken waarbij de achtergrond\n * geblokkeerd moet worden. Gebruik `modal={false}` als de gebruiker de achtergrondpagina\n * nodig heeft voor context.\n *\n * @example\n * ```tsx\n * <Drawer isOpen={isOpen} onClose={() => setIsOpen(false)}>\n * <DrawerHeader>\n * <DrawerHeading>Filteropties</DrawerHeading>\n * </DrawerHeader>\n * <DrawerBody>\n * <Paragraph>Inhoud van het zijpaneel</Paragraph>\n * </DrawerBody>\n * <DrawerFooter>\n * <ActionGroup>\n * <Button variant=\"strong\" onClick={() => setIsOpen(false)}>Toepassen</Button>\n * <Button variant=\"default\" onClick={() => setIsOpen(false)}>Annuleren</Button>\n * </ActionGroup>\n * </DrawerFooter>\n * </Drawer>\n * ```\n */\nexport const Drawer = React.forwardRef<HTMLDialogElement, DrawerProps>(\n (\n {\n className,\n isOpen,\n onClose,\n modal = true,\n side = 'right',\n children,\n ...props\n },\n ref\n ) => {\n const internalRef = React.useRef<HTMLDialogElement>(null);\n const dialogRef =\n (ref as React.RefObject<HTMLDialogElement>) ?? internalRef;\n const headingId = React.useId();\n\n React.useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n if (isOpen && !dialog.open) {\n if (modal) {\n dialog.showModal();\n } else {\n dialog.show();\n }\n } else if (!isOpen && dialog.open) {\n dialog.close();\n }\n }, [isOpen, modal, dialogRef]);\n\n // Non-modaal: handmatige Escape-afhandeling via keydown\n React.useEffect(() => {\n if (modal) return;\n const dialog = dialogRef.current;\n if (!dialog || !isOpen) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onClose?.();\n }\n };\n\n dialog.addEventListener('keydown', handleKeyDown);\n return () => dialog.removeEventListener('keydown', handleKeyDown);\n }, [modal, isOpen, onClose, dialogRef]);\n\n // Modaal: native cancel-event (Escape via browser)\n const handleCancel = (event: React.SyntheticEvent<HTMLDialogElement>) => {\n event.preventDefault();\n onClose?.();\n };\n\n const classes = classNames(\n 'dsn-drawer',\n side === 'left' ? 'dsn-drawer--side-left' : 'dsn-drawer--side-right',\n className\n );\n\n return (\n <DrawerContext.Provider value={{ headingId, onClose }}>\n <dialog\n ref={dialogRef}\n className={classes}\n aria-labelledby={headingId}\n onCancel={handleCancel}\n {...props}\n >\n {children}\n </dialog>\n </DrawerContext.Provider>\n );\n }\n);\n\nDrawer.displayName = 'Drawer';\n\n// =============================================================================\n// DrawerHeader\n// =============================================================================\n\nexport interface DrawerHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Inhoud van de header — doorgaans een `DrawerHeading`\n */\n children?: React.ReactNode;\n}\n\n/**\n * DrawerHeader\n * De headerstrook van het zijpaneel met heading en sluitknop.\n */\nexport const DrawerHeader = React.forwardRef<HTMLDivElement, DrawerHeaderProps>(\n ({ className, children, ...props }, ref) => {\n const { onClose } = React.useContext(DrawerContext);\n\n return (\n <div\n ref={ref}\n className={classNames('dsn-drawer__header', className)}\n {...props}\n >\n {children}\n <Button\n variant=\"subtle\"\n size=\"small\"\n iconOnly\n onClick={onClose}\n iconStart={<Icon name=\"x\" aria-hidden />}\n >\n Sluiten\n </Button>\n </div>\n );\n }\n);\n\nDrawerHeader.displayName = 'DrawerHeader';\n\n// =============================================================================\n// DrawerHeading\n// =============================================================================\n\nexport interface DrawerHeadingProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /**\n * Semantisch heading-niveau. Kies op basis van documenthiërarchie, niet visuele grootte.\n * @default 2\n */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n\n /**\n * De zichtbare heading-tekst\n */\n children?: React.ReactNode;\n}\n\n/**\n * DrawerHeading\n * De heading van het zijpaneel. ID wordt automatisch gegenereerd voor aria-labelledby.\n */\nexport const DrawerHeading = React.forwardRef<\n HTMLHeadingElement,\n DrawerHeadingProps\n>(({ className, level = 2, children, ...props }, ref) => {\n const { headingId } = React.useContext(DrawerContext);\n const Tag = `h${level}` as React.ElementType;\n\n return (\n <Tag\n ref={ref}\n id={headingId}\n className={classNames('dsn-drawer-heading', className)}\n {...props}\n >\n {children}\n </Tag>\n );\n});\n\nDrawerHeading.displayName = 'DrawerHeading';\n\n// =============================================================================\n// DrawerBody\n// =============================================================================\n\nexport interface DrawerBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * De hoofdinhoud van het zijpaneel\n */\n children?: React.ReactNode;\n}\n\n/**\n * DrawerBody\n * De scrollbare inhoudssectie van het zijpaneel met scroll-affordance schaduw.\n */\nexport const DrawerBody = React.forwardRef<HTMLDivElement, DrawerBodyProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={classNames('dsn-drawer__body', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nDrawerBody.displayName = 'DrawerBody';\n\n// =============================================================================\n// DrawerFooter\n// =============================================================================\n\nexport interface DrawerFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * De acties van het zijpaneel — doorgaans een `ActionGroup` met knoppen\n */\n children?: React.ReactNode;\n}\n\n/**\n * DrawerFooter\n * De voettekst van het zijpaneel met actieknoppen.\n */\nexport const DrawerFooter = React.forwardRef<HTMLDivElement, DrawerFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={classNames('dsn-drawer__footer', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nDrawerFooter.displayName = 'DrawerFooter';\n"],"mappings":";;;;;;;AAeA,MAAM,gBAAgB,MAAM,cAAkC,EAC5D,WAAW,GACb,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsED,MAAa,SAAS,MAAM,YAExB,EACE,WACA,QACA,SACA,QAAQ,MACR,OAAO,SACP,UACA,GAAG,SAEL,QACG;CACH,MAAM,cAAc,MAAM,OAA0B,IAAI;CACxD,MAAM,YACH,OAA8C;CACjD,MAAM,YAAY,MAAM,MAAM;CAE9B,MAAM,gBAAgB;EACpB,MAAM,SAAS,UAAU;EACzB,IAAI,CAAC,QAAQ;EAEb,IAAI,UAAU,CAAC,OAAO,MAAM;GAC1B,IAAI,OACF,OAAO,UAAU;QAEjB,OAAO,KAAK;EAEhB,OAAO,IAAI,CAAC,UAAU,OAAO,MAC3B,OAAO,MAAM;CAEjB,GAAG;EAAC;EAAQ;EAAO;CAAS,CAAC;CAG7B,MAAM,gBAAgB;EACpB,IAAI,OAAO;EACX,MAAM,SAAS,UAAU;EACzB,IAAI,CAAC,UAAU,CAAC,QAAQ;EAExB,MAAM,iBAAiB,UAAyB;GAC9C,IAAI,MAAM,QAAQ,UAChB,UAAU;EAEd;EAEA,OAAO,iBAAiB,WAAW,aAAa;EAChD,aAAa,OAAO,oBAAoB,WAAW,aAAa;CAClE,GAAG;EAAC;EAAO;EAAQ;EAAS;CAAS,CAAC;CAGtC,MAAM,gBAAgB,UAAmD;EACvE,MAAM,eAAe;EACrB,UAAU;CACZ;CAEA,MAAM,UAAU,WACd,cACA,SAAS,SAAS,0BAA0B,0BAC5C,SACF;CAEA,OACE,oBAAC,cAAc,UAAf;EAAwB,OAAO;GAAE;GAAW;EAAQ;EAClD,UAAA,oBAAC,UAAD;GACE,KAAK;GACL,WAAW;GACX,mBAAiB;GACjB,UAAU;GACV,GAAI;GAEH;EACK,CAAA;CACc,CAAA;AAE5B,CACF;AAEA,OAAO,cAAc;;;;;AAiBrB,MAAa,eAAe,MAAM,YAC/B,EAAE,WAAW,UAAU,GAAG,SAAS,QAAQ;CAC1C,MAAM,EAAE,YAAY,MAAM,WAAW,aAAa;CAElD,OACE,qBAAC,OAAD;EACO;EACL,WAAW,WAAW,sBAAsB,SAAS;EACrD,GAAI;EAHN,UAAA,CAKG,UACD,oBAAC,QAAD;GACE,SAAQ;GACR,MAAK;GACL,UAAA;GACA,SAAS;GACT,WAAW,oBAAC,MAAD;IAAM,MAAK;IAAI,eAAA;GAAa,CAAA;GACxC,UAAA;EAEO,CAAA,CACL;;AAET,CACF;AAEA,aAAa,cAAc;;;;;AAuB3B,MAAa,gBAAgB,MAAM,YAGhC,EAAE,WAAW,QAAQ,GAAG,UAAU,GAAG,SAAS,QAAQ;CACvD,MAAM,EAAE,cAAc,MAAM,WAAW,aAAa;CACpD,MAAM,MAAM,IAAI;CAEhB,OACE,oBAAC,KAAD;EACO;EACL,IAAI;EACJ,WAAW,WAAW,sBAAsB,SAAS;EACrD,GAAI;EAEH;CACE,CAAA;AAET,CAAC;AAED,cAAc,cAAc;;;;;AAiB5B,MAAa,aAAa,MAAM,YAC7B,EAAE,WAAW,UAAU,GAAG,SAAS,QAAQ;CAC1C,OACE,oBAAC,OAAD;EACO;EACL,WAAW,WAAW,oBAAoB,SAAS;EACnD,GAAI;EAEH;CACE,CAAA;AAET,CACF;AAEA,WAAW,cAAc;;;;;AAiBzB,MAAa,eAAe,MAAM,YAC/B,EAAE,WAAW,UAAU,GAAG,SAAS,QAAQ;CAC1C,OACE,oBAAC,OAAD;EACO;EACL,WAAW,WAAW,sBAAsB,SAAS;EACrD,GAAI;EAEH;CACE,CAAA;AAET,CACF;AAEA,aAAa,cAAc"}
@@ -0,0 +1,2 @@
1
+ import { Drawer, DrawerBody, DrawerBodyProps, DrawerFooter, DrawerFooterProps, DrawerHeader, DrawerHeaderProps, DrawerHeading, DrawerHeadingProps, DrawerProps } from "./Drawer.mjs";
2
+ export { Drawer, DrawerBody, type DrawerBodyProps, DrawerFooter, type DrawerFooterProps, DrawerHeader, type DrawerHeaderProps, DrawerHeading, type DrawerHeadingProps, type DrawerProps };
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import { FormControlWidth } from "@dsn-starter-kit/core";
3
+ //#region src/EmailInput/EmailInput.d.ts
4
+ interface EmailInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type'> {
5
+ /**
6
+ * Whether the input is in an invalid state
7
+ * @default false
8
+ */
9
+ invalid?: boolean;
10
+ /**
11
+ * Width variant for the input
12
+ * @default undefined (uses default max-width from form-control)
13
+ */
14
+ width?: FormControlWidth;
15
+ /**
16
+ * Additional CSS class names
17
+ */
18
+ className?: string;
19
+ }
20
+ /**
21
+ * Email Input component
22
+ * Email input with appropriate inputmode and autocomplete
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * // Basic usage
27
+ * <EmailInput placeholder="naam@voorbeeld.nl" />
28
+ *
29
+ * // With label
30
+ * <FormFieldLabel htmlFor="email">E-mailadres</FormFieldLabel>
31
+ * <EmailInput id="email" />
32
+ *
33
+ * // Invalid state
34
+ * <EmailInput invalid aria-invalid="true" aria-describedby="error" />
35
+ * ```
36
+ */
37
+ declare const EmailInput: React.ForwardRefExoticComponent<EmailInputProps & React.RefAttributes<HTMLInputElement>>;
38
+ //#endregion
39
+ export { EmailInput, EmailInputProps };
40
+ //# sourceMappingURL=EmailInput.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailInput.d.mts","names":[],"sources":["../../src/EmailInput/EmailInput.tsx"],"mappings":";;;UAIiB,wBAAwB,KACvC,MAAM,oBAAoB;;;;;EAO1B;;;;;EAMA,QAAQ;;;;EAKR;;;;;;;;;;;;;;;;;;;cAoBW,YAAU,MAAA,0BAAA,kBAAA,MAAA,cAAA"}
@@ -0,0 +1,39 @@
1
+ /* empty css */
2
+ import React from "react";
3
+ import { classNames } from "@dsn-starter-kit/core";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/EmailInput/EmailInput.tsx
6
+ /**
7
+ * Email Input component
8
+ * Email input with appropriate inputmode and autocomplete
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // Basic usage
13
+ * <EmailInput placeholder="naam@voorbeeld.nl" />
14
+ *
15
+ * // With label
16
+ * <FormFieldLabel htmlFor="email">E-mailadres</FormFieldLabel>
17
+ * <EmailInput id="email" />
18
+ *
19
+ * // Invalid state
20
+ * <EmailInput invalid aria-invalid="true" aria-describedby="error" />
21
+ * ```
22
+ */
23
+ const EmailInput = React.forwardRef(({ className, invalid, width, autoComplete, ...props }, ref) => {
24
+ const classes = classNames("dsn-text-input", width && `dsn-text-input--width-${width}`, className);
25
+ return /* @__PURE__ */ jsx("input", {
26
+ ref,
27
+ type: "email",
28
+ inputMode: "email",
29
+ className: classes,
30
+ autoComplete: autoComplete || "email",
31
+ "aria-invalid": invalid || void 0,
32
+ ...props
33
+ });
34
+ });
35
+ EmailInput.displayName = "EmailInput";
36
+ //#endregion
37
+ export { EmailInput };
38
+
39
+ //# sourceMappingURL=EmailInput.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailInput.mjs","names":[],"sources":["../../src/EmailInput/EmailInput.tsx"],"sourcesContent":["import React from 'react';\nimport { classNames, FormControlWidth } from '@dsn-starter-kit/core';\nimport '../TextInput/TextInput.css';\n\nexport interface EmailInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type'\n> {\n /**\n * Whether the input is in an invalid state\n * @default false\n */\n invalid?: boolean;\n\n /**\n * Width variant for the input\n * @default undefined (uses default max-width from form-control)\n */\n width?: FormControlWidth;\n\n /**\n * Additional CSS class names\n */\n className?: string;\n}\n\n/**\n * Email Input component\n * Email input with appropriate inputmode and autocomplete\n *\n * @example\n * ```tsx\n * // Basic usage\n * <EmailInput placeholder=\"naam@voorbeeld.nl\" />\n *\n * // With label\n * <FormFieldLabel htmlFor=\"email\">E-mailadres</FormFieldLabel>\n * <EmailInput id=\"email\" />\n *\n * // Invalid state\n * <EmailInput invalid aria-invalid=\"true\" aria-describedby=\"error\" />\n * ```\n */\nexport const EmailInput = React.forwardRef<HTMLInputElement, EmailInputProps>(\n ({ className, invalid, width, autoComplete, ...props }, ref) => {\n const classes = classNames(\n 'dsn-text-input',\n width && `dsn-text-input--width-${width}`,\n className\n );\n\n return (\n <input\n ref={ref}\n type=\"email\"\n inputMode=\"email\"\n className={classes}\n autoComplete={autoComplete || 'email'}\n aria-invalid={invalid || undefined}\n {...props}\n />\n );\n }\n);\n\nEmailInput.displayName = 'EmailInput';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAa,aAAa,MAAM,YAC7B,EAAE,WAAW,SAAS,OAAO,cAAc,GAAG,SAAS,QAAQ;CAC9D,MAAM,UAAU,WACd,kBACA,SAAS,yBAAyB,SAClC,SACF;CAEA,OACE,oBAAC,SAAD;EACO;EACL,MAAK;EACL,WAAU;EACV,WAAW;EACX,cAAc,gBAAgB;EAC9B,gBAAc,WAAW,KAAA;EACzB,GAAI;CACL,CAAA;AAEL,CACF;AAEA,WAAW,cAAc"}
@@ -0,0 +1,2 @@
1
+ import { EmailInput, EmailInputProps } from "./EmailInput.mjs";
2
+ export { EmailInput, type EmailInputProps };
@@ -0,0 +1,124 @@
1
+ import React from "react";
2
+ //#region src/File/File.d.ts
3
+ type FileStatus = 'default' | 'loading' | 'uploaded' | 'error';
4
+ type FileCtaVariant = 'view' | 'download';
5
+ type FileMediaType = 'document' | 'image';
6
+ interface FileProps extends React.HTMLAttributes<HTMLDivElement> {
7
+ /** Bestandsnaam inclusief extensie (vereist). Extensie wordt visueel afgekapt. */
8
+ fileName: string;
9
+ /** Bestandstype als afkorting: "PDF", "JPG". Getoond in dsn-file__meta. */
10
+ fileType?: string;
11
+ /** Bestandsgrootte als geformatteerde string: "1,2 MB". */
12
+ fileSize?: string;
13
+ /**
14
+ * State van het bestand.
15
+ * Bij 'uploaded' keert het component na 2 seconden automatisch terug naar 'default'.
16
+ * @default 'default'
17
+ */
18
+ status?: FileStatus;
19
+ /** Foutmelding, getoond bij status="error". */
20
+ errorMessage?: string;
21
+ /** URL naar het bestand. Maakt de naam een <a> en schakelt de interactieve variant in. */
22
+ href?: string;
23
+ /** Callback voor de verwijderactie. Toont de "Verwijder"-knop. */
24
+ onDelete?: () => void;
25
+ /**
26
+ * Zichtbare tekst op de verwijder-knop.
27
+ * @default "Verwijder"
28
+ */
29
+ deleteLabel?: string;
30
+ /**
31
+ * CTA-type in de interactieve variant.
32
+ * 'view' toont geen aparte CTA; de bestandsnaam opent als stretched link in een nieuw tabblad.
33
+ * 'download' toont een aparte download-knop; de bestandsnaam opent in een nieuw tabblad.
34
+ * @default 'view'
35
+ */
36
+ ctaVariant?: FileCtaVariant;
37
+ /**
38
+ * Overschrijft het standaard CTA-label voor de download-variant.
39
+ * Standaard: "Download".
40
+ */
41
+ ctaLabel?: string;
42
+ /**
43
+ * Bepaalt het icoon: file-description.svg of photo.svg.
44
+ * Genegeerd wanneer previewSrc aanwezig is.
45
+ * @default 'document'
46
+ */
47
+ mediaType?: FileMediaType;
48
+ /** URL van de afbeeldingspreview. Vervangt het icoon in het media-vlak. */
49
+ previewSrc?: string;
50
+ /**
51
+ * Visueel verborgen label voor de Spinner.
52
+ * @default "Bezig met uploaden"
53
+ */
54
+ loadingLabel?: string;
55
+ /**
56
+ * Tekst voor de aria-live regio bij de uploaded state.
57
+ * @default "{fileName} succesvol geüpload"
58
+ */
59
+ uploadedLabel?: string;
60
+ /**
61
+ * Tekst voor de aria-live regio bij de error state.
62
+ * Standaard "{fileName}: {errorMessage}", of "{fileName} uploaden mislukt"
63
+ * wanneer er geen errorMessage is.
64
+ */
65
+ errorLabel?: string;
66
+ }
67
+ /**
68
+ * File component
69
+ * Toont meta-informatie over een bestand (naam, type, grootte) samen met acties.
70
+ * Ondersteunt vier upload-states (default, loading, uploaded, error) en een
71
+ * interactieve variant voor controle- of detailpagina's.
72
+ *
73
+ * @example
74
+ * ```tsx
75
+ * // Default — eerder geüpload bestand, met verwijder-optie
76
+ * <File
77
+ * fileName="document.pdf"
78
+ * fileType="PDF"
79
+ * fileSize="1,2 MB"
80
+ * href="/bestanden/document.pdf"
81
+ * onDelete={() => handleDelete()}
82
+ * />
83
+ *
84
+ * // Interactief — bestandsnaam als link (nieuw tabblad)
85
+ * <File
86
+ * fileName="rapport-2024.pdf"
87
+ * fileType="PDF"
88
+ * fileSize="2,1 MB"
89
+ * href="/bestanden/rapport-2024.pdf"
90
+ * />
91
+ *
92
+ * // Interactief — download CTA
93
+ * <File
94
+ * fileName="rapport-2024.pdf"
95
+ * fileType="PDF"
96
+ * fileSize="2,1 MB"
97
+ * href="/bestanden/rapport-2024.pdf"
98
+ * ctaVariant="download"
99
+ * />
100
+ * ```
101
+ */
102
+ declare const File: React.ForwardRefExoticComponent<FileProps & React.RefAttributes<HTMLDivElement>>;
103
+ interface FileListProps extends React.HTMLAttributes<HTMLUListElement> {
104
+ /** File componenten */
105
+ children?: React.ReactNode;
106
+ className?: string;
107
+ }
108
+ /**
109
+ * FileList component
110
+ * Wrapper voor meerdere File componenten.
111
+ * Rendert een <ul role="list"> met <li> wrappers — nodig omdat CSS-resets lijstsemantiek verwijderen.
112
+ *
113
+ * @example
114
+ * ```tsx
115
+ * <FileList>
116
+ * <File fileName="document.pdf" fileType="PDF" fileSize="1,2 MB" href="..." onDelete={() => {}} />
117
+ * <File fileName="foto.jpg" fileType="JPG" fileSize="3,4 MB" href="..." onDelete={() => {}} />
118
+ * </FileList>
119
+ * ```
120
+ */
121
+ declare const FileList: React.ForwardRefExoticComponent<FileListProps & React.RefAttributes<HTMLUListElement>>;
122
+ //#endregion
123
+ export { File, FileCtaVariant, FileList, FileListProps, FileMediaType, FileProps, FileStatus };
124
+ //# sourceMappingURL=File.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File.d.mts","names":[],"sources":["../../src/File/File.tsx"],"mappings":";;KAOY;KACA;KACA;UAEK,kBAAkB,MAAM,eAAe;;EAEtD;;EAGA;;EAGA;;;;;;EAOA,SAAS;;EAGT;;EAGA;;EAGA;;;;;EAMA;;;;;;;EAQA,aAAa;;;;;EAMb;;;;;;EAOA,YAAY;;EAGZ;;;;;EAMA;;;;;EAMA;;;;;;EAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCW,MAAI,MAAA,0BAAA,YAAA,MAAA,cAAA;UAuLA,sBAAsB,MAAM,eAAe;;EAE1D,WAAW,MAAM;EACjB;;;;;;;;;;;;;;;cAgBW,UAAQ,MAAA,0BAAA,gBAAA,MAAA,cAAA"}
@@ -0,0 +1,196 @@
1
+ import { Icon } from "../Icon/Icon2.mjs";
2
+ import { Spinner } from "../Spinner/Spinner2.mjs";
3
+ import { FormFieldErrorMessage } from "../FormFieldErrorMessage/FormFieldErrorMessage2.mjs";
4
+ /* empty css */
5
+ import React from "react";
6
+ import { classNames } from "@dsn-starter-kit/core";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/File/File.tsx
9
+ /**
10
+ * File component
11
+ * Toont meta-informatie over een bestand (naam, type, grootte) samen met acties.
12
+ * Ondersteunt vier upload-states (default, loading, uploaded, error) en een
13
+ * interactieve variant voor controle- of detailpagina's.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * // Default — eerder geüpload bestand, met verwijder-optie
18
+ * <File
19
+ * fileName="document.pdf"
20
+ * fileType="PDF"
21
+ * fileSize="1,2 MB"
22
+ * href="/bestanden/document.pdf"
23
+ * onDelete={() => handleDelete()}
24
+ * />
25
+ *
26
+ * // Interactief — bestandsnaam als link (nieuw tabblad)
27
+ * <File
28
+ * fileName="rapport-2024.pdf"
29
+ * fileType="PDF"
30
+ * fileSize="2,1 MB"
31
+ * href="/bestanden/rapport-2024.pdf"
32
+ * />
33
+ *
34
+ * // Interactief — download CTA
35
+ * <File
36
+ * fileName="rapport-2024.pdf"
37
+ * fileType="PDF"
38
+ * fileSize="2,1 MB"
39
+ * href="/bestanden/rapport-2024.pdf"
40
+ * ctaVariant="download"
41
+ * />
42
+ * ```
43
+ */
44
+ const File = React.forwardRef(({ className, fileName, fileType, fileSize, status = "default", errorMessage, href, onDelete, deleteLabel = "Verwijder", ctaVariant = "view", ctaLabel, mediaType = "document", previewSrc, loadingLabel = "Bezig met uploaden", uploadedLabel, errorLabel, ...props }, ref) => {
45
+ const [currentStatus, setCurrentStatus] = React.useState(status);
46
+ const [liveText, setLiveText] = React.useState("");
47
+ React.useEffect(() => {
48
+ setCurrentStatus(status);
49
+ }, [status]);
50
+ React.useEffect(() => {
51
+ if (currentStatus === "uploaded") {
52
+ setLiveText(uploadedLabel ?? `${fileName} succesvol geüpload`);
53
+ const timer = setTimeout(() => {
54
+ setCurrentStatus("default");
55
+ setLiveText("");
56
+ }, 2e3);
57
+ return () => clearTimeout(timer);
58
+ }
59
+ if (currentStatus === "error") {
60
+ setLiveText(errorLabel ?? (errorMessage ? `${fileName}: ${errorMessage}` : `${fileName} uploaden mislukt`));
61
+ return;
62
+ }
63
+ setLiveText("");
64
+ }, [
65
+ currentStatus,
66
+ fileName,
67
+ uploadedLabel,
68
+ errorLabel,
69
+ errorMessage
70
+ ]);
71
+ const fileNameWithoutExt = React.useMemo(() => {
72
+ const lastDot = fileName.lastIndexOf(".");
73
+ return lastDot > 0 ? fileName.slice(0, lastDot) : fileName;
74
+ }, [fileName]);
75
+ const metaText = [fileType, fileSize].filter(Boolean).join(" · ");
76
+ const isInteractive = Boolean(href) && !onDelete;
77
+ const isStretchedLink = isInteractive && ctaVariant !== "download";
78
+ const rootClasses = classNames("dsn-file", currentStatus === "loading" && "dsn-file--loading", currentStatus === "uploaded" && "dsn-file--uploaded", currentStatus === "error" && "dsn-file--error", isStretchedLink && "dsn-file--interactive", className);
79
+ const nameClasses = classNames("dsn-file__name", href && "dsn-link", isStretchedLink && "dsn-file__name--stretched");
80
+ const iconName = mediaType === "image" ? "photo" : "file-description";
81
+ const resolvedCtaLabel = ctaLabel ?? "Download";
82
+ return /* @__PURE__ */ jsxs("div", {
83
+ ref,
84
+ className: rootClasses,
85
+ ...props,
86
+ children: [
87
+ /* @__PURE__ */ jsx("div", {
88
+ className: "dsn-file__media",
89
+ "aria-hidden": "true",
90
+ children: previewSrc ? /* @__PURE__ */ jsx("img", {
91
+ className: "dsn-file__preview",
92
+ src: previewSrc,
93
+ alt: ""
94
+ }) : /* @__PURE__ */ jsx(Icon, {
95
+ name: iconName,
96
+ "aria-hidden": true
97
+ })
98
+ }),
99
+ /* @__PURE__ */ jsxs("div", {
100
+ className: "dsn-file__content",
101
+ children: [
102
+ href ? /* @__PURE__ */ jsx("a", {
103
+ className: nameClasses,
104
+ href,
105
+ target: "_blank",
106
+ rel: "noopener noreferrer",
107
+ children: fileNameWithoutExt
108
+ }) : /* @__PURE__ */ jsx("span", {
109
+ className: nameClasses,
110
+ children: fileNameWithoutExt
111
+ }),
112
+ metaText && /* @__PURE__ */ jsx("span", {
113
+ className: "dsn-file__meta",
114
+ children: metaText
115
+ }),
116
+ currentStatus === "error" && errorMessage && /* @__PURE__ */ jsx(FormFieldErrorMessage, { children: errorMessage })
117
+ ]
118
+ }),
119
+ /* @__PURE__ */ jsxs("div", {
120
+ className: "dsn-file__actions",
121
+ children: [
122
+ !isInteractive && currentStatus === "loading" && /* @__PURE__ */ jsx(Spinner, {
123
+ label: loadingLabel,
124
+ hideLabel: true
125
+ }),
126
+ !isInteractive && currentStatus === "uploaded" && /* @__PURE__ */ jsx(Icon, {
127
+ className: "dsn-file__status-icon",
128
+ name: "check",
129
+ "aria-hidden": true
130
+ }),
131
+ !isInteractive && (currentStatus === "default" || currentStatus === "error") && onDelete && /* @__PURE__ */ jsxs("button", {
132
+ type: "button",
133
+ className: "dsn-link dsn-link-button dsn-link--size-default",
134
+ onClick: onDelete,
135
+ children: [
136
+ /* @__PURE__ */ jsx(Icon, {
137
+ name: "trash",
138
+ "aria-hidden": true
139
+ }),
140
+ deleteLabel,
141
+ /* @__PURE__ */ jsxs("span", {
142
+ className: "dsn-visually-hidden",
143
+ children: [" ", fileName]
144
+ })
145
+ ]
146
+ }),
147
+ isInteractive && ctaVariant === "download" && /* @__PURE__ */ jsxs("a", {
148
+ className: "dsn-link",
149
+ href,
150
+ "aria-hidden": "true",
151
+ tabIndex: -1,
152
+ download: true,
153
+ children: [/* @__PURE__ */ jsx(Icon, {
154
+ name: "download",
155
+ "aria-hidden": true
156
+ }), resolvedCtaLabel]
157
+ })
158
+ ]
159
+ }),
160
+ /* @__PURE__ */ jsx("span", {
161
+ className: "dsn-visually-hidden",
162
+ "aria-live": "polite",
163
+ "aria-atomic": "true",
164
+ children: liveText
165
+ })
166
+ ]
167
+ });
168
+ });
169
+ File.displayName = "File";
170
+ /**
171
+ * FileList component
172
+ * Wrapper voor meerdere File componenten.
173
+ * Rendert een <ul role="list"> met <li> wrappers — nodig omdat CSS-resets lijstsemantiek verwijderen.
174
+ *
175
+ * @example
176
+ * ```tsx
177
+ * <FileList>
178
+ * <File fileName="document.pdf" fileType="PDF" fileSize="1,2 MB" href="..." onDelete={() => {}} />
179
+ * <File fileName="foto.jpg" fileType="JPG" fileSize="3,4 MB" href="..." onDelete={() => {}} />
180
+ * </FileList>
181
+ * ```
182
+ */
183
+ const FileList = React.forwardRef(({ className, children, ...props }, ref) => {
184
+ return /* @__PURE__ */ jsx("ul", {
185
+ ref,
186
+ className: classNames("dsn-file-list", className),
187
+ role: "list",
188
+ ...props,
189
+ children: React.Children.map(children, (child, index) => /* @__PURE__ */ jsx("li", { children: child }, index))
190
+ });
191
+ });
192
+ FileList.displayName = "FileList";
193
+ //#endregion
194
+ export { File, FileList };
195
+
196
+ //# sourceMappingURL=File2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File2.mjs","names":[],"sources":["../../src/File/File.tsx"],"sourcesContent":["import React from 'react';\nimport { classNames } from '@dsn-starter-kit/core';\nimport { Icon } from '../Icon';\nimport { Spinner } from '../Spinner';\nimport { FormFieldErrorMessage } from '../FormFieldErrorMessage';\nimport './File.css';\n\nexport type FileStatus = 'default' | 'loading' | 'uploaded' | 'error';\nexport type FileCtaVariant = 'view' | 'download';\nexport type FileMediaType = 'document' | 'image';\n\nexport interface FileProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Bestandsnaam inclusief extensie (vereist). Extensie wordt visueel afgekapt. */\n fileName: string;\n\n /** Bestandstype als afkorting: \"PDF\", \"JPG\". Getoond in dsn-file__meta. */\n fileType?: string;\n\n /** Bestandsgrootte als geformatteerde string: \"1,2 MB\". */\n fileSize?: string;\n\n /**\n * State van het bestand.\n * Bij 'uploaded' keert het component na 2 seconden automatisch terug naar 'default'.\n * @default 'default'\n */\n status?: FileStatus;\n\n /** Foutmelding, getoond bij status=\"error\". */\n errorMessage?: string;\n\n /** URL naar het bestand. Maakt de naam een <a> en schakelt de interactieve variant in. */\n href?: string;\n\n /** Callback voor de verwijderactie. Toont de \"Verwijder\"-knop. */\n onDelete?: () => void;\n\n /**\n * Zichtbare tekst op de verwijder-knop.\n * @default \"Verwijder\"\n */\n deleteLabel?: string;\n\n /**\n * CTA-type in de interactieve variant.\n * 'view' toont geen aparte CTA; de bestandsnaam opent als stretched link in een nieuw tabblad.\n * 'download' toont een aparte download-knop; de bestandsnaam opent in een nieuw tabblad.\n * @default 'view'\n */\n ctaVariant?: FileCtaVariant;\n\n /**\n * Overschrijft het standaard CTA-label voor de download-variant.\n * Standaard: \"Download\".\n */\n ctaLabel?: string;\n\n /**\n * Bepaalt het icoon: file-description.svg of photo.svg.\n * Genegeerd wanneer previewSrc aanwezig is.\n * @default 'document'\n */\n mediaType?: FileMediaType;\n\n /** URL van de afbeeldingspreview. Vervangt het icoon in het media-vlak. */\n previewSrc?: string;\n\n /**\n * Visueel verborgen label voor de Spinner.\n * @default \"Bezig met uploaden\"\n */\n loadingLabel?: string;\n\n /**\n * Tekst voor de aria-live regio bij de uploaded state.\n * @default \"{fileName} succesvol geüpload\"\n */\n uploadedLabel?: string;\n\n /**\n * Tekst voor de aria-live regio bij de error state.\n * Standaard \"{fileName}: {errorMessage}\", of \"{fileName} uploaden mislukt\"\n * wanneer er geen errorMessage is.\n */\n errorLabel?: string;\n}\n\n/**\n * File component\n * Toont meta-informatie over een bestand (naam, type, grootte) samen met acties.\n * Ondersteunt vier upload-states (default, loading, uploaded, error) en een\n * interactieve variant voor controle- of detailpagina's.\n *\n * @example\n * ```tsx\n * // Default — eerder geüpload bestand, met verwijder-optie\n * <File\n * fileName=\"document.pdf\"\n * fileType=\"PDF\"\n * fileSize=\"1,2 MB\"\n * href=\"/bestanden/document.pdf\"\n * onDelete={() => handleDelete()}\n * />\n *\n * // Interactief — bestandsnaam als link (nieuw tabblad)\n * <File\n * fileName=\"rapport-2024.pdf\"\n * fileType=\"PDF\"\n * fileSize=\"2,1 MB\"\n * href=\"/bestanden/rapport-2024.pdf\"\n * />\n *\n * // Interactief — download CTA\n * <File\n * fileName=\"rapport-2024.pdf\"\n * fileType=\"PDF\"\n * fileSize=\"2,1 MB\"\n * href=\"/bestanden/rapport-2024.pdf\"\n * ctaVariant=\"download\"\n * />\n * ```\n */\nexport const File = React.forwardRef<HTMLDivElement, FileProps>(\n (\n {\n className,\n fileName,\n fileType,\n fileSize,\n status = 'default',\n errorMessage,\n href,\n onDelete,\n deleteLabel = 'Verwijder',\n ctaVariant = 'view',\n ctaLabel,\n mediaType = 'document',\n previewSrc,\n loadingLabel = 'Bezig met uploaden',\n uploadedLabel,\n errorLabel,\n ...props\n },\n ref\n ) => {\n const [currentStatus, setCurrentStatus] =\n React.useState<FileStatus>(status);\n const [liveText, setLiveText] = React.useState('');\n\n // Synchroniseer externe status-prop met interne state\n React.useEffect(() => {\n setCurrentStatus(status);\n }, [status]);\n\n // Vul de aria-live regio bij een eindstatus van de upload.\n // De tekst wordt pas ná de eerste render gezet, zodat screenreaders de\n // wijziging in de regio waarnemen en aankondigen.\n React.useEffect(() => {\n // Uploaded: kondig succes aan en keer na 2s terug naar default\n if (currentStatus === 'uploaded') {\n setLiveText(uploadedLabel ?? `${fileName} succesvol geüpload`);\n\n const timer = setTimeout(() => {\n setCurrentStatus('default');\n setLiveText('');\n }, 2000);\n\n return () => clearTimeout(timer);\n }\n\n // Error: kondig de mislukking aan, inclusief de reden wanneer bekend.\n // De tekst blijft staan zolang de error-state actief is.\n if (currentStatus === 'error') {\n setLiveText(\n errorLabel ??\n (errorMessage\n ? `${fileName}: ${errorMessage}`\n : `${fileName} uploaden mislukt`)\n );\n return undefined;\n }\n\n // Default en loading: geen aankondiging\n setLiveText('');\n return undefined;\n }, [currentStatus, fileName, uploadedLabel, errorLabel, errorMessage]);\n\n // Bestandsnaam zonder extensie voor visuele weergave\n const fileNameWithoutExt = React.useMemo(() => {\n const lastDot = fileName.lastIndexOf('.');\n return lastDot > 0 ? fileName.slice(0, lastDot) : fileName;\n }, [fileName]);\n\n // Meta-tekst: \"PDF · 1,2 MB\" of alleen type of grootte\n const metaParts = [fileType, fileSize].filter(Boolean);\n const metaText = metaParts.join(' · ');\n\n // Interactieve modus: href aanwezig en geen onDelete\n const isInteractive = Boolean(href) && !onDelete;\n // Stretched link: interactief zonder aparte download-CTA\n const isStretchedLink = isInteractive && ctaVariant !== 'download';\n\n const rootClasses = classNames(\n 'dsn-file',\n currentStatus === 'loading' && 'dsn-file--loading',\n currentStatus === 'uploaded' && 'dsn-file--uploaded',\n currentStatus === 'error' && 'dsn-file--error',\n isStretchedLink && 'dsn-file--interactive',\n className\n );\n\n const nameClasses = classNames(\n 'dsn-file__name',\n href && 'dsn-link',\n isStretchedLink && 'dsn-file__name--stretched'\n );\n\n const iconName = mediaType === 'image' ? 'photo' : 'file-description';\n const resolvedCtaLabel = ctaLabel ?? 'Download';\n\n return (\n <div ref={ref} className={rootClasses} {...props}>\n {/* Media-vlak: icoon of preview */}\n <div className=\"dsn-file__media\" aria-hidden=\"true\">\n {previewSrc ? (\n <img className=\"dsn-file__preview\" src={previewSrc} alt=\"\" />\n ) : (\n <Icon name={iconName} aria-hidden />\n )}\n </div>\n\n {/* Content: naam, meta en optionele ErrorMessage */}\n <div className=\"dsn-file__content\">\n {href ? (\n <a\n className={nameClasses}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {fileNameWithoutExt}\n </a>\n ) : (\n <span className={nameClasses}>{fileNameWithoutExt}</span>\n )}\n {metaText && <span className=\"dsn-file__meta\">{metaText}</span>}\n {currentStatus === 'error' && errorMessage && (\n <FormFieldErrorMessage>{errorMessage}</FormFieldErrorMessage>\n )}\n </div>\n\n {/* Actions: Spinner, status-icoon, verwijder-knop of CTA-link */}\n <div className=\"dsn-file__actions\">\n {!isInteractive && currentStatus === 'loading' && (\n <Spinner label={loadingLabel} hideLabel />\n )}\n {!isInteractive && currentStatus === 'uploaded' && (\n <Icon className=\"dsn-file__status-icon\" name=\"check\" aria-hidden />\n )}\n {!isInteractive &&\n (currentStatus === 'default' || currentStatus === 'error') &&\n onDelete && (\n <button\n type=\"button\"\n className=\"dsn-link dsn-link-button dsn-link--size-default\"\n onClick={onDelete}\n >\n <Icon name=\"trash\" aria-hidden />\n {deleteLabel}\n <span className=\"dsn-visually-hidden\"> {fileName}</span>\n </button>\n )}\n {isInteractive && ctaVariant === 'download' && (\n <a\n className=\"dsn-link\"\n href={href}\n aria-hidden=\"true\"\n tabIndex={-1}\n download\n >\n <Icon name=\"download\" aria-hidden />\n {resolvedCtaLabel}\n </a>\n )}\n </div>\n\n {/* aria-live regio: kondigt statuswijzigingen aan voor screenreaders */}\n <span\n className=\"dsn-visually-hidden\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {liveText}\n </span>\n </div>\n );\n }\n);\n\nFile.displayName = 'File';\n\n// =============================================================================\n// FileList — ul wrapper voor meerdere File items\n// =============================================================================\n\nexport interface FileListProps extends React.HTMLAttributes<HTMLUListElement> {\n /** File componenten */\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * FileList component\n * Wrapper voor meerdere File componenten.\n * Rendert een <ul role=\"list\"> met <li> wrappers — nodig omdat CSS-resets lijstsemantiek verwijderen.\n *\n * @example\n * ```tsx\n * <FileList>\n * <File fileName=\"document.pdf\" fileType=\"PDF\" fileSize=\"1,2 MB\" href=\"...\" onDelete={() => {}} />\n * <File fileName=\"foto.jpg\" fileType=\"JPG\" fileSize=\"3,4 MB\" href=\"...\" onDelete={() => {}} />\n * </FileList>\n * ```\n */\nexport const FileList = React.forwardRef<HTMLUListElement, FileListProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <ul\n ref={ref}\n className={classNames('dsn-file-list', className)}\n role=\"list\"\n {...props}\n >\n {React.Children.map(children, (child, index) => (\n <li key={index}>{child}</li>\n ))}\n </ul>\n );\n }\n);\n\nFileList.displayName = 'FileList';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0HA,MAAa,OAAO,MAAM,YAEtB,EACE,WACA,UACA,UACA,UACA,SAAS,WACT,cACA,MACA,UACA,cAAc,aACd,aAAa,QACb,UACA,YAAY,YACZ,YACA,eAAe,sBACf,eACA,YACA,GAAG,SAEL,QACG;CACH,MAAM,CAAC,eAAe,oBACpB,MAAM,SAAqB,MAAM;CACnC,MAAM,CAAC,UAAU,eAAe,MAAM,SAAS,EAAE;CAGjD,MAAM,gBAAgB;EACpB,iBAAiB,MAAM;CACzB,GAAG,CAAC,MAAM,CAAC;CAKX,MAAM,gBAAgB;EAEpB,IAAI,kBAAkB,YAAY;GAChC,YAAY,iBAAiB,GAAG,SAAS,oBAAoB;GAE7D,MAAM,QAAQ,iBAAiB;IAC7B,iBAAiB,SAAS;IAC1B,YAAY,EAAE;GAChB,GAAG,GAAI;GAEP,aAAa,aAAa,KAAK;EACjC;EAIA,IAAI,kBAAkB,SAAS;GAC7B,YACE,eACG,eACG,GAAG,SAAS,IAAI,iBAChB,GAAG,SAAS,mBACpB;GACA;EACF;EAGA,YAAY,EAAE;CAEhB,GAAG;EAAC;EAAe;EAAU;EAAe;EAAY;CAAY,CAAC;CAGrE,MAAM,qBAAqB,MAAM,cAAc;EAC7C,MAAM,UAAU,SAAS,YAAY,GAAG;EACxC,OAAO,UAAU,IAAI,SAAS,MAAM,GAAG,OAAO,IAAI;CACpD,GAAG,CAAC,QAAQ,CAAC;CAIb,MAAM,WADY,CAAC,UAAU,QAAQ,CAAC,CAAC,OAAO,OACrB,CAAC,CAAC,KAAK,KAAK;CAGrC,MAAM,gBAAgB,QAAQ,IAAI,KAAK,CAAC;CAExC,MAAM,kBAAkB,iBAAiB,eAAe;CAExD,MAAM,cAAc,WAClB,YACA,kBAAkB,aAAa,qBAC/B,kBAAkB,cAAc,sBAChC,kBAAkB,WAAW,mBAC7B,mBAAmB,yBACnB,SACF;CAEA,MAAM,cAAc,WAClB,kBACA,QAAQ,YACR,mBAAmB,2BACrB;CAEA,MAAM,WAAW,cAAc,UAAU,UAAU;CACnD,MAAM,mBAAmB,YAAY;CAErC,OACE,qBAAC,OAAD;EAAU;EAAK,WAAW;EAAa,GAAI;EAA3C,UAAA;GAEE,oBAAC,OAAD;IAAK,WAAU;IAAkB,eAAY;IAC1C,UAAA,aACC,oBAAC,OAAD;KAAK,WAAU;KAAoB,KAAK;KAAY,KAAI;IAAI,CAAA,IAE5D,oBAAC,MAAD;KAAM,MAAM;KAAU,eAAA;IAAa,CAAA;GAElC,CAAA;GAGL,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,OACC,oBAAC,KAAD;MACE,WAAW;MACL;MACN,QAAO;MACP,KAAI;MAEH,UAAA;KACA,CAAA,IAEH,oBAAC,QAAD;MAAM,WAAW;MAAc,UAAA;KAAyB,CAAA;KAEzD,YAAY,oBAAC,QAAD;MAAM,WAAU;MAAkB,UAAA;KAAe,CAAA;KAC7D,kBAAkB,WAAW,gBAC5B,oBAAC,uBAAD,EAAA,UAAwB,aAAoC,CAAA;IAE3D;;GAGL,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,CAAC,iBAAiB,kBAAkB,aACnC,oBAAC,SAAD;MAAS,OAAO;MAAc,WAAA;KAAW,CAAA;KAE1C,CAAC,iBAAiB,kBAAkB,cACnC,oBAAC,MAAD;MAAM,WAAU;MAAwB,MAAK;MAAQ,eAAA;KAAa,CAAA;KAEnE,CAAC,kBACC,kBAAkB,aAAa,kBAAkB,YAClD,YACE,qBAAC,UAAD;MACE,MAAK;MACL,WAAU;MACV,SAAS;MAHX,UAAA;OAKE,oBAAC,MAAD;QAAM,MAAK;QAAQ,eAAA;OAAa,CAAA;OAC/B;OACD,qBAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CAAsC,KAAE,QAAe;;MACjD;;KAEX,iBAAiB,eAAe,cAC/B,qBAAC,KAAD;MACE,WAAU;MACJ;MACN,eAAY;MACZ,UAAU;MACV,UAAA;MALF,UAAA,CAOE,oBAAC,MAAD;OAAM,MAAK;OAAW,eAAA;MAAa,CAAA,GAClC,gBACA;;IAEF;;GAGL,oBAAC,QAAD;IACE,WAAU;IACV,aAAU;IACV,eAAY;IAEX,UAAA;GACG,CAAA;EACH;;AAET,CACF;AAEA,KAAK,cAAc;;;;;;;;;;;;;;AAyBnB,MAAa,WAAW,MAAM,YAC3B,EAAE,WAAW,UAAU,GAAG,SAAS,QAAQ;CAC1C,OACE,oBAAC,MAAD;EACO;EACL,WAAW,WAAW,iBAAiB,SAAS;EAChD,MAAK;EACL,GAAI;EAEH,UAAA,MAAM,SAAS,IAAI,WAAW,OAAO,UACpC,oBAAC,MAAD,EAAA,UAAiB,MAAU,GAAlB,KAAkB,CAC5B;CACC,CAAA;AAER,CACF;AAEA,SAAS,cAAc"}
@@ -0,0 +1,2 @@
1
+ import { File, FileCtaVariant, FileList, FileListProps, FileMediaType, FileProps, FileStatus } from "./File.mjs";
2
+ export { File, type FileCtaVariant, FileList, type FileListProps, type FileMediaType, type FileProps, type FileStatus };