@statistikzh/leu 0.24.2 → 0.26.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 (535) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/.storybook/main.ts +18 -53
  3. package/.storybook/manager.ts +1 -4
  4. package/.storybook/preview.ts +23 -16
  5. package/.storybook/theme.ts +1 -1
  6. package/CHANGELOG.md +21 -0
  7. package/CONTRIBUTING.md +19 -8
  8. package/dist/Accordion-B04QkmHz.js +241 -0
  9. package/dist/Accordion.d.ts +44 -44
  10. package/dist/Accordion.js +2 -249
  11. package/dist/Button-BgNUxmo_.d.ts +99 -0
  12. package/dist/Button-BkhqVjug.js +564 -0
  13. package/dist/Button.d.ts +2 -85
  14. package/dist/Button.js +5 -504
  15. package/dist/ButtonGroup-B8U9fDvM.js +88 -0
  16. package/dist/ButtonGroup.d.ts +19 -19
  17. package/dist/ButtonGroup.js +6 -101
  18. package/dist/ChartWrapper-CSMFwz9e.js +158 -0
  19. package/dist/ChartWrapper.d.ts +26 -26
  20. package/dist/ChartWrapper.js +3 -163
  21. package/dist/Checkbox-Dd1QLpfn.js +198 -0
  22. package/dist/Checkbox.d.ts +35 -27
  23. package/dist/Checkbox.js +4 -157
  24. package/dist/CheckboxGroup-Bz2eWEFL.js +81 -0
  25. package/dist/CheckboxGroup.d.ts +18 -18
  26. package/dist/CheckboxGroup.js +5 -82
  27. package/dist/Chip-DLKM9P7v.d.ts +18 -0
  28. package/dist/Chip-XAQIIsXq.js +171 -0
  29. package/dist/Chip.d.ts +2 -18
  30. package/dist/Chip.js +2 -166
  31. package/dist/ChipGroup-DLqfK2kn.js +125 -0
  32. package/dist/ChipGroup-Ta8Ht4jc.d.ts +42 -0
  33. package/dist/ChipGroup.d.ts +2 -43
  34. package/dist/ChipGroup.js +3 -132
  35. package/dist/ChipLink-BAxyQO2M.d.ts +17 -0
  36. package/dist/ChipLink.d.ts +2 -18
  37. package/dist/ChipLink.js +28 -28
  38. package/dist/ChipRemovable-DBjwt0CH.d.ts +25 -0
  39. package/dist/ChipRemovable.d.ts +2 -26
  40. package/dist/ChipRemovable.js +42 -43
  41. package/dist/ChipSelectable-CMJNcE4U.d.ts +32 -0
  42. package/dist/ChipSelectable.d.ts +2 -33
  43. package/dist/ChipSelectable.js +63 -72
  44. package/dist/Dialog-DHuXR_oo.js +241 -0
  45. package/dist/Dialog.d.ts +28 -28
  46. package/dist/Dialog.js +3 -240
  47. package/dist/Dropdown-DtFTePbc.js +155 -0
  48. package/dist/Dropdown.d.ts +39 -41
  49. package/dist/Dropdown.js +9 -157
  50. package/dist/FileInput-b8sbLDPI.js +344 -0
  51. package/dist/FileInput.d.ts +56 -57
  52. package/dist/FileInput.js +7 -383
  53. package/dist/FormAssociatedMixin-Cc74LjbC.d.ts +22 -0
  54. package/dist/FormAssociatedMixin-DLPvFtbT.js +58 -0
  55. package/dist/Icon-C_yYuynf.js +186 -0
  56. package/dist/Icon-Op80LrrO.d.ts +151 -0
  57. package/dist/Icon.d.ts +2 -4
  58. package/dist/Icon.js +2 -188
  59. package/dist/Input-D2THgo7c.d.ts +169 -0
  60. package/dist/Input-DEOVocTa.js +610 -0
  61. package/dist/Input.d.ts +2 -166
  62. package/dist/Input.js +4 -626
  63. package/dist/LeuElement-BeFrgKes.js +46 -0
  64. package/dist/LeuElement-pJFU18Xm.d.ts +11 -0
  65. package/dist/Menu-BeqqtCw6.js +136 -0
  66. package/dist/Menu-CQdx1ef3.d.ts +43 -0
  67. package/dist/Menu.d.ts +2 -44
  68. package/dist/Menu.js +4 -157
  69. package/dist/MenuItem-DVg8-1Bq.js +219 -0
  70. package/dist/MenuItem-QcgnRk_7.d.ts +63 -0
  71. package/dist/MenuItem.d.ts +2 -64
  72. package/dist/MenuItem.js +3 -227
  73. package/dist/Message-BhknWvAF.js +252 -0
  74. package/dist/Message.d.ts +53 -53
  75. package/dist/Message.js +3 -267
  76. package/dist/Pagination-CqkHh-Vd.d.ts +76 -0
  77. package/dist/Pagination-DJI5MIi_.js +226 -0
  78. package/dist/Pagination.d.ts +2 -76
  79. package/dist/Pagination.js +7 -240
  80. package/dist/Placeholder-BJybFwSg.js +95 -0
  81. package/dist/Placeholder.d.ts +15 -15
  82. package/dist/Placeholder.js +2 -89
  83. package/dist/Popup-Btgm2a3D.d.ts +61 -0
  84. package/dist/Popup-DNlm_9AA.js +195 -0
  85. package/dist/Popup.d.ts +2 -62
  86. package/dist/Popup.js +2 -233
  87. package/dist/ProgressBar-B0wYj1KF.js +167 -0
  88. package/dist/ProgressBar.d.ts +21 -21
  89. package/dist/ProgressBar.js +2 -165
  90. package/dist/Radio-DMCL8c4D.js +160 -0
  91. package/dist/Radio.d.ts +22 -22
  92. package/dist/Radio.js +2 -151
  93. package/dist/RadioGroup-CM6IyBlq.js +171 -0
  94. package/dist/RadioGroup.d.ts +35 -35
  95. package/dist/RadioGroup.js +3 -182
  96. package/dist/Range-B72rtfln.js +496 -0
  97. package/dist/Range.d.ts +112 -112
  98. package/dist/Range.js +2 -586
  99. package/dist/ScrollTop-BFAqBVDR.js +130 -0
  100. package/dist/ScrollTop.d.ts +21 -21
  101. package/dist/ScrollTop.js +6 -134
  102. package/dist/Select-vxl3BvD4.js +618 -0
  103. package/dist/Select.d.ts +130 -132
  104. package/dist/Select.js +10 -675
  105. package/dist/Spinner-CrM1enM0.d.ts +14 -0
  106. package/dist/Spinner-DDTqijTO.js +56 -0
  107. package/dist/Spinner.d.ts +2 -14
  108. package/dist/Spinner.js +2 -52
  109. package/dist/Table-BgCxfBcm.js +392 -0
  110. package/dist/Table.d.ts +61 -63
  111. package/dist/Table.js +8 -427
  112. package/dist/Tag-DK2KkPIQ.js +76 -0
  113. package/dist/Tag.d.ts +8 -8
  114. package/dist/Tag.js +2 -74
  115. package/dist/VisuallyHidden-OeQvhxYn.d.ts +13 -0
  116. package/dist/VisuallyHidden-pll3amXE.js +29 -0
  117. package/dist/VisuallyHidden.d.ts +2 -13
  118. package/dist/VisuallyHidden.js +2 -25
  119. package/dist/decorate-DwpAc4D0.js +9 -0
  120. package/dist/hasSlotController-DSBCVzPD.js +38 -0
  121. package/dist/hasSlotController-DWPyZ52b.d.ts +19 -0
  122. package/dist/index.d.ts +33 -30
  123. package/dist/index.js +35 -45
  124. package/dist/leu-accordion.d.ts +7 -10
  125. package/dist/leu-accordion.js +4 -8
  126. package/dist/leu-button-group.d.ts +7 -10
  127. package/dist/leu-button-group.js +8 -12
  128. package/dist/leu-button.d.ts +7 -11
  129. package/dist/leu-button.js +7 -11
  130. package/dist/leu-chart-wrapper.d.ts +7 -12
  131. package/dist/leu-chart-wrapper.js +5 -9
  132. package/dist/leu-checkbox-group.d.ts +7 -10
  133. package/dist/leu-checkbox-group.js +7 -10
  134. package/dist/leu-checkbox.d.ts +7 -11
  135. package/dist/leu-checkbox.js +6 -8
  136. package/dist/leu-chip-group.d.ts +7 -12
  137. package/dist/leu-chip-group.js +5 -10
  138. package/dist/leu-chip-link.d.ts +7 -11
  139. package/dist/leu-chip-link.js +5 -8
  140. package/dist/leu-chip-removable.d.ts +7 -12
  141. package/dist/leu-chip-removable.js +6 -9
  142. package/dist/leu-chip-selectable.d.ts +7 -11
  143. package/dist/leu-chip-selectable.js +5 -8
  144. package/dist/leu-dialog.d.ts +7 -13
  145. package/dist/leu-dialog.js +5 -11
  146. package/dist/leu-dropdown.d.ts +7 -18
  147. package/dist/leu-dropdown.js +11 -17
  148. package/dist/leu-file-input.d.ts +7 -13
  149. package/dist/leu-file-input.js +9 -13
  150. package/dist/leu-icon.d.ts +7 -10
  151. package/dist/leu-icon.js +4 -7
  152. package/dist/leu-input.d.ts +7 -12
  153. package/dist/leu-input.js +6 -12
  154. package/dist/leu-menu-item.d.ts +7 -11
  155. package/dist/leu-menu-item.js +5 -9
  156. package/dist/leu-menu.d.ts +7 -12
  157. package/dist/leu-menu.js +6 -10
  158. package/dist/leu-message.d.ts +7 -11
  159. package/dist/leu-message.js +5 -10
  160. package/dist/leu-pagination.d.ts +7 -13
  161. package/dist/leu-pagination.js +9 -14
  162. package/dist/leu-placeholder.d.ts +7 -10
  163. package/dist/leu-placeholder.js +4 -5
  164. package/dist/leu-popup.d.ts +7 -11
  165. package/dist/leu-popup.js +4 -8
  166. package/dist/leu-progress-bar.d.ts +7 -10
  167. package/dist/leu-progress-bar.js +4 -8
  168. package/dist/leu-radio-group.d.ts +7 -10
  169. package/dist/leu-radio-group.js +5 -9
  170. package/dist/leu-radio.d.ts +7 -10
  171. package/dist/leu-radio.js +4 -7
  172. package/dist/leu-range.d.ts +7 -10
  173. package/dist/leu-range.js +4 -9
  174. package/dist/leu-scroll-top.d.ts +7 -12
  175. package/dist/leu-scroll-top.js +8 -13
  176. package/dist/leu-select.d.ts +7 -19
  177. package/dist/leu-select.js +12 -19
  178. package/dist/leu-spinner.d.ts +7 -10
  179. package/dist/leu-spinner.js +4 -5
  180. package/dist/leu-table.d.ts +7 -14
  181. package/dist/leu-table.js +10 -17
  182. package/dist/leu-tag.d.ts +7 -10
  183. package/dist/leu-tag.js +4 -7
  184. package/dist/leu-visually-hidden.d.ts +7 -10
  185. package/dist/leu-visually-hidden.js +4 -5
  186. package/dist/utils-hfk5Nwy8.js +28 -0
  187. package/dist/vscode.html-custom-data.json +7 -8
  188. package/dist/vue/index.d.ts +5 -9
  189. package/dist/web-types.json +18 -24
  190. package/eslint.config.mjs +79 -0
  191. package/package.json +44 -60
  192. package/scripts/generate-component/templates/stories/[name].stories.ts +1 -1
  193. package/src/components/accordion/Accordion.ts +1 -1
  194. package/src/components/button/Button.ts +76 -5
  195. package/src/components/button/button.css +37 -9
  196. package/src/components/button/stories/button.stories.ts +23 -0
  197. package/src/components/button/test/button.test.ts +214 -9
  198. package/src/components/button-group/ButtonGroup.ts +1 -6
  199. package/src/components/button-group/stories/button-group.stories.ts +1 -1
  200. package/src/components/chart-wrapper/ChartWrapper.ts +1 -1
  201. package/src/components/chart-wrapper/stories/chart-wrapper.stories.ts +1 -1
  202. package/src/components/checkbox/Checkbox.ts +76 -12
  203. package/src/components/checkbox/CheckboxGroup.ts +1 -1
  204. package/src/components/checkbox/checkbox.css +4 -0
  205. package/src/components/checkbox/stories/checkbox.stories.ts +26 -3
  206. package/src/components/checkbox/test/checkbox.test.ts +147 -3
  207. package/src/components/chip/Chip.ts +1 -1
  208. package/src/components/chip/ChipGroup.ts +2 -2
  209. package/src/components/chip/stories/chip-removable.stories.ts +1 -1
  210. package/src/components/chip/test/chip-removable.test.ts +2 -2
  211. package/src/components/dialog/Dialog.ts +1 -1
  212. package/src/components/dialog/stories/dialog.stories.ts +0 -2
  213. package/src/components/dropdown/Dropdown.ts +1 -1
  214. package/src/components/dropdown/stories/dropdown.stories.ts +1 -1
  215. package/src/components/file-input/FileInput.ts +18 -20
  216. package/src/components/file-input/stories/file-input.stories.ts +2 -2
  217. package/src/components/file-input/test/file-input.test.ts +14 -1
  218. package/src/components/icon/Icon.ts +1 -1
  219. package/src/components/input/Input.ts +18 -7
  220. package/src/components/input/stories/input.stories.ts +24 -21
  221. package/src/components/menu/Menu.ts +4 -4
  222. package/src/components/menu/MenuItem.ts +1 -1
  223. package/src/components/menu/stories/menu-item.stories.ts +0 -2
  224. package/src/components/message/Message.ts +1 -1
  225. package/src/components/message/stories/message.stories.ts +2 -2
  226. package/src/components/pagination/Pagination.ts +1 -1
  227. package/src/components/pagination/stories/pagination.stories.ts +3 -3
  228. package/src/components/pagination/test/pagination.test.ts +1 -1
  229. package/src/components/placeholder/Placeholder.ts +1 -1
  230. package/src/components/placeholder/stories/placeholder.stories.ts +1 -1
  231. package/src/components/popup/Popup.ts +1 -1
  232. package/src/components/progress-bar/ProgressBar.ts +1 -1
  233. package/src/components/progress-bar/stories/progress-bar.stories.ts +1 -1
  234. package/src/components/radio/Radio.ts +1 -1
  235. package/src/components/radio/RadioGroup.ts +5 -5
  236. package/src/components/range/Range.ts +1 -1
  237. package/src/components/range/stories/range.stories.ts +2 -2
  238. package/src/components/scroll-top/ScrollTop.ts +1 -1
  239. package/src/components/select/Select.ts +2 -5
  240. package/src/components/spinner/Spinner.ts +1 -1
  241. package/src/components/table/Table.ts +1 -1
  242. package/src/components/tag/Tag.ts +1 -1
  243. package/src/components/tag/stories/tag.stories.ts +1 -1
  244. package/src/components/visually-hidden/VisuallyHidden.ts +1 -1
  245. package/src/docs/contributing.mdx +1 -1
  246. package/src/docs/installation.mdx +1 -1
  247. package/src/docs/theme.mdx +1 -1
  248. package/src/docs/usage.mdx +1 -1
  249. package/src/global.d.ts +1 -1
  250. package/src/lib/LeuElement.ts +1 -1
  251. package/src/lib/mixins/FormAssociatedMixin.ts +115 -0
  252. package/src/lib/styleMap.ts +1 -1
  253. package/tsdown.config.ts +35 -0
  254. package/web-test-runner.config.mjs +20 -2
  255. package/.eslintrc.json +0 -57
  256. package/dist/Icon.d-itcQ94ym.d.ts +0 -151
  257. package/dist/LeuElement-BfXSO7MN.js +0 -42
  258. package/dist/LeuElement.d-BevHqLUu.d.ts +0 -10
  259. package/dist/_tslib-CNEFicEt.js +0 -30
  260. package/dist/components/accordion/Accordion.d.ts +0 -49
  261. package/dist/components/accordion/Accordion.d.ts.map +0 -1
  262. package/dist/components/accordion/leu-accordion.d.ts +0 -8
  263. package/dist/components/accordion/leu-accordion.d.ts.map +0 -1
  264. package/dist/components/accordion/stories/accordion.stories.d.ts +0 -26
  265. package/dist/components/accordion/stories/accordion.stories.d.ts.map +0 -1
  266. package/dist/components/accordion/test/accordion.test.d.ts +0 -2
  267. package/dist/components/accordion/test/accordion.test.d.ts.map +0 -1
  268. package/dist/components/button/Button.d.ts +0 -81
  269. package/dist/components/button/Button.d.ts.map +0 -1
  270. package/dist/components/button/leu-button.d.ts +0 -8
  271. package/dist/components/button/leu-button.d.ts.map +0 -1
  272. package/dist/components/button/stories/button.stories.d.ts +0 -19
  273. package/dist/components/button/stories/button.stories.d.ts.map +0 -1
  274. package/dist/components/button/test/button.test.d.ts +0 -3
  275. package/dist/components/button/test/button.test.d.ts.map +0 -1
  276. package/dist/components/button-group/ButtonGroup.d.ts +0 -25
  277. package/dist/components/button-group/ButtonGroup.d.ts.map +0 -1
  278. package/dist/components/button-group/leu-button-group.d.ts +0 -8
  279. package/dist/components/button-group/leu-button-group.d.ts.map +0 -1
  280. package/dist/components/button-group/stories/button-group.stories.d.ts +0 -15
  281. package/dist/components/button-group/stories/button-group.stories.d.ts.map +0 -1
  282. package/dist/components/button-group/test/button-group.test.d.ts +0 -3
  283. package/dist/components/button-group/test/button-group.test.d.ts.map +0 -1
  284. package/dist/components/chart-wrapper/ChartWrapper.d.ts +0 -34
  285. package/dist/components/chart-wrapper/ChartWrapper.d.ts.map +0 -1
  286. package/dist/components/chart-wrapper/leu-chart-wrapper.d.ts +0 -8
  287. package/dist/components/chart-wrapper/leu-chart-wrapper.d.ts.map +0 -1
  288. package/dist/components/chart-wrapper/stories/chart-wrapper.stories.d.ts +0 -47
  289. package/dist/components/chart-wrapper/stories/chart-wrapper.stories.d.ts.map +0 -1
  290. package/dist/components/chart-wrapper/test/chart-wrapper.test.d.ts +0 -2
  291. package/dist/components/chart-wrapper/test/chart-wrapper.test.d.ts.map +0 -1
  292. package/dist/components/checkbox/Checkbox.d.ts +0 -28
  293. package/dist/components/checkbox/Checkbox.d.ts.map +0 -1
  294. package/dist/components/checkbox/CheckboxGroup.d.ts +0 -22
  295. package/dist/components/checkbox/CheckboxGroup.d.ts.map +0 -1
  296. package/dist/components/checkbox/leu-checkbox-group.d.ts +0 -8
  297. package/dist/components/checkbox/leu-checkbox-group.d.ts.map +0 -1
  298. package/dist/components/checkbox/leu-checkbox.d.ts +0 -8
  299. package/dist/components/checkbox/leu-checkbox.d.ts.map +0 -1
  300. package/dist/components/checkbox/stories/checkbox-group.stories.d.ts +0 -29
  301. package/dist/components/checkbox/stories/checkbox-group.stories.d.ts.map +0 -1
  302. package/dist/components/checkbox/stories/checkbox.stories.d.ts +0 -22
  303. package/dist/components/checkbox/stories/checkbox.stories.d.ts.map +0 -1
  304. package/dist/components/checkbox/test/checkbox-group.test.d.ts +0 -3
  305. package/dist/components/checkbox/test/checkbox-group.test.d.ts.map +0 -1
  306. package/dist/components/checkbox/test/checkbox.test.d.ts +0 -2
  307. package/dist/components/checkbox/test/checkbox.test.d.ts.map +0 -1
  308. package/dist/components/chip/Chip.d.ts +0 -15
  309. package/dist/components/chip/Chip.d.ts.map +0 -1
  310. package/dist/components/chip/ChipGroup.d.ts +0 -38
  311. package/dist/components/chip/ChipGroup.d.ts.map +0 -1
  312. package/dist/components/chip/ChipLink.d.ts +0 -13
  313. package/dist/components/chip/ChipLink.d.ts.map +0 -1
  314. package/dist/components/chip/ChipRemovable.d.ts +0 -21
  315. package/dist/components/chip/ChipRemovable.d.ts.map +0 -1
  316. package/dist/components/chip/ChipSelectable.d.ts +0 -28
  317. package/dist/components/chip/ChipSelectable.d.ts.map +0 -1
  318. package/dist/components/chip/exports.d.ts +0 -5
  319. package/dist/components/chip/exports.d.ts.map +0 -1
  320. package/dist/components/chip/leu-chip-group.d.ts +0 -8
  321. package/dist/components/chip/leu-chip-group.d.ts.map +0 -1
  322. package/dist/components/chip/leu-chip-link.d.ts +0 -8
  323. package/dist/components/chip/leu-chip-link.d.ts.map +0 -1
  324. package/dist/components/chip/leu-chip-removable.d.ts +0 -8
  325. package/dist/components/chip/leu-chip-removable.d.ts.map +0 -1
  326. package/dist/components/chip/leu-chip-selectable.d.ts +0 -8
  327. package/dist/components/chip/leu-chip-selectable.d.ts.map +0 -1
  328. package/dist/components/chip/stories/chip-group.stories.d.ts +0 -40
  329. package/dist/components/chip/stories/chip-group.stories.d.ts.map +0 -1
  330. package/dist/components/chip/stories/chip-link.stories.d.ts +0 -27
  331. package/dist/components/chip/stories/chip-link.stories.d.ts.map +0 -1
  332. package/dist/components/chip/stories/chip-removable.stories.d.ts +0 -21
  333. package/dist/components/chip/stories/chip-removable.stories.d.ts.map +0 -1
  334. package/dist/components/chip/stories/chip-selectable.stories.d.ts +0 -35
  335. package/dist/components/chip/stories/chip-selectable.stories.d.ts.map +0 -1
  336. package/dist/components/chip/test/chip-group.test.d.ts +0 -4
  337. package/dist/components/chip/test/chip-group.test.d.ts.map +0 -1
  338. package/dist/components/chip/test/chip-link.test.d.ts +0 -2
  339. package/dist/components/chip/test/chip-link.test.d.ts.map +0 -1
  340. package/dist/components/chip/test/chip-removable.test.d.ts +0 -2
  341. package/dist/components/chip/test/chip-removable.test.d.ts.map +0 -1
  342. package/dist/components/chip/test/chip-selectable.test.d.ts +0 -2
  343. package/dist/components/chip/test/chip-selectable.test.d.ts.map +0 -1
  344. package/dist/components/chip/test/chip.test.d.ts +0 -2
  345. package/dist/components/chip/test/chip.test.d.ts.map +0 -1
  346. package/dist/components/dialog/Dialog.d.ts +0 -29
  347. package/dist/components/dialog/Dialog.d.ts.map +0 -1
  348. package/dist/components/dialog/leu-dialog.d.ts +0 -8
  349. package/dist/components/dialog/leu-dialog.d.ts.map +0 -1
  350. package/dist/components/dialog/stories/dialog.stories.d.ts +0 -19
  351. package/dist/components/dialog/stories/dialog.stories.d.ts.map +0 -1
  352. package/dist/components/dialog/test/dialog.test.d.ts +0 -2
  353. package/dist/components/dialog/test/dialog.test.d.ts.map +0 -1
  354. package/dist/components/dropdown/Dropdown.d.ts +0 -40
  355. package/dist/components/dropdown/Dropdown.d.ts.map +0 -1
  356. package/dist/components/dropdown/leu-dropdown.d.ts +0 -8
  357. package/dist/components/dropdown/leu-dropdown.d.ts.map +0 -1
  358. package/dist/components/dropdown/stories/dropdown.stories.d.ts +0 -25
  359. package/dist/components/dropdown/stories/dropdown.stories.d.ts.map +0 -1
  360. package/dist/components/dropdown/test/dropdown.test.d.ts +0 -2
  361. package/dist/components/dropdown/test/dropdown.test.d.ts.map +0 -1
  362. package/dist/components/file-input/FileInput.d.ts +0 -62
  363. package/dist/components/file-input/FileInput.d.ts.map +0 -1
  364. package/dist/components/file-input/leu-file-input.d.ts +0 -8
  365. package/dist/components/file-input/leu-file-input.d.ts.map +0 -1
  366. package/dist/components/file-input/stories/file-input.stories.d.ts +0 -34
  367. package/dist/components/file-input/stories/file-input.stories.d.ts.map +0 -1
  368. package/dist/components/file-input/test/file-input.test.d.ts +0 -2
  369. package/dist/components/file-input/test/file-input.test.d.ts.map +0 -1
  370. package/dist/components/icon/Icon.d.ts +0 -20
  371. package/dist/components/icon/Icon.d.ts.map +0 -1
  372. package/dist/components/icon/leu-icon.d.ts +0 -8
  373. package/dist/components/icon/leu-icon.d.ts.map +0 -1
  374. package/dist/components/icon/paths.d.ts +0 -127
  375. package/dist/components/icon/paths.d.ts.map +0 -1
  376. package/dist/components/icon/stories/icon.stories.d.ts +0 -32
  377. package/dist/components/icon/stories/icon.stories.d.ts.map +0 -1
  378. package/dist/components/icon/test/icon.test.d.ts +0 -2
  379. package/dist/components/icon/test/icon.test.d.ts.map +0 -1
  380. package/dist/components/input/Input.d.ts +0 -163
  381. package/dist/components/input/Input.d.ts.map +0 -1
  382. package/dist/components/input/leu-input.d.ts +0 -8
  383. package/dist/components/input/leu-input.d.ts.map +0 -1
  384. package/dist/components/input/stories/input.stories.d.ts +0 -35
  385. package/dist/components/input/stories/input.stories.d.ts.map +0 -1
  386. package/dist/components/input/test/input.test.d.ts +0 -2
  387. package/dist/components/input/test/input.test.d.ts.map +0 -1
  388. package/dist/components/menu/Menu.d.ts +0 -39
  389. package/dist/components/menu/Menu.d.ts.map +0 -1
  390. package/dist/components/menu/MenuItem.d.ts +0 -61
  391. package/dist/components/menu/MenuItem.d.ts.map +0 -1
  392. package/dist/components/menu/leu-menu-item.d.ts +0 -8
  393. package/dist/components/menu/leu-menu-item.d.ts.map +0 -1
  394. package/dist/components/menu/leu-menu.d.ts +0 -8
  395. package/dist/components/menu/leu-menu.d.ts.map +0 -1
  396. package/dist/components/menu/stories/menu-item.stories.d.ts +0 -24
  397. package/dist/components/menu/stories/menu-item.stories.d.ts.map +0 -1
  398. package/dist/components/menu/stories/menu.stories.d.ts +0 -26
  399. package/dist/components/menu/stories/menu.stories.d.ts.map +0 -1
  400. package/dist/components/menu/test/menu-item.test.d.ts +0 -3
  401. package/dist/components/menu/test/menu-item.test.d.ts.map +0 -1
  402. package/dist/components/menu/test/menu.test.d.ts +0 -4
  403. package/dist/components/menu/test/menu.test.d.ts.map +0 -1
  404. package/dist/components/message/Message.d.ts +0 -59
  405. package/dist/components/message/Message.d.ts.map +0 -1
  406. package/dist/components/message/leu-message.d.ts +0 -8
  407. package/dist/components/message/leu-message.d.ts.map +0 -1
  408. package/dist/components/message/stories/message.stories.d.ts +0 -179
  409. package/dist/components/message/stories/message.stories.d.ts.map +0 -1
  410. package/dist/components/message/test/message.test.d.ts +0 -2
  411. package/dist/components/message/test/message.test.d.ts.map +0 -1
  412. package/dist/components/pagination/Pagination.d.ts +0 -72
  413. package/dist/components/pagination/Pagination.d.ts.map +0 -1
  414. package/dist/components/pagination/leu-pagination.d.ts +0 -8
  415. package/dist/components/pagination/leu-pagination.d.ts.map +0 -1
  416. package/dist/components/pagination/stories/pagination.stories.d.ts +0 -25
  417. package/dist/components/pagination/stories/pagination.stories.d.ts.map +0 -1
  418. package/dist/components/pagination/test/pagination.test.d.ts +0 -2
  419. package/dist/components/pagination/test/pagination.test.d.ts.map +0 -1
  420. package/dist/components/placeholder/Placeholder.d.ts +0 -23
  421. package/dist/components/placeholder/Placeholder.d.ts.map +0 -1
  422. package/dist/components/placeholder/leu-placeholder.d.ts +0 -8
  423. package/dist/components/placeholder/leu-placeholder.d.ts.map +0 -1
  424. package/dist/components/placeholder/stories/placeholder.stories.d.ts +0 -27
  425. package/dist/components/placeholder/stories/placeholder.stories.d.ts.map +0 -1
  426. package/dist/components/placeholder/test/placeholder.test.d.ts +0 -2
  427. package/dist/components/placeholder/test/placeholder.test.d.ts.map +0 -1
  428. package/dist/components/popup/Popup.d.ts +0 -57
  429. package/dist/components/popup/Popup.d.ts.map +0 -1
  430. package/dist/components/popup/leu-popup.d.ts +0 -8
  431. package/dist/components/popup/leu-popup.d.ts.map +0 -1
  432. package/dist/components/popup/stories/popup.stories.d.ts +0 -28
  433. package/dist/components/popup/stories/popup.stories.d.ts.map +0 -1
  434. package/dist/components/popup/test/popup.test.d.ts +0 -2
  435. package/dist/components/popup/test/popup.test.d.ts.map +0 -1
  436. package/dist/components/progress-bar/ProgressBar.d.ts +0 -25
  437. package/dist/components/progress-bar/ProgressBar.d.ts.map +0 -1
  438. package/dist/components/progress-bar/leu-progress-bar.d.ts +0 -8
  439. package/dist/components/progress-bar/leu-progress-bar.d.ts.map +0 -1
  440. package/dist/components/progress-bar/stories/progress-bar.stories.d.ts +0 -48
  441. package/dist/components/progress-bar/stories/progress-bar.stories.d.ts.map +0 -1
  442. package/dist/components/progress-bar/test/progress-bar.test.d.ts +0 -2
  443. package/dist/components/progress-bar/test/progress-bar.test.d.ts.map +0 -1
  444. package/dist/components/radio/Radio.d.ts +0 -24
  445. package/dist/components/radio/Radio.d.ts.map +0 -1
  446. package/dist/components/radio/RadioGroup.d.ts +0 -39
  447. package/dist/components/radio/RadioGroup.d.ts.map +0 -1
  448. package/dist/components/radio/leu-radio-group.d.ts +0 -8
  449. package/dist/components/radio/leu-radio-group.d.ts.map +0 -1
  450. package/dist/components/radio/leu-radio.d.ts +0 -8
  451. package/dist/components/radio/leu-radio.d.ts.map +0 -1
  452. package/dist/components/radio/stories/radio-group.stories.d.ts +0 -29
  453. package/dist/components/radio/stories/radio-group.stories.d.ts.map +0 -1
  454. package/dist/components/radio/stories/radio.stories.d.ts +0 -22
  455. package/dist/components/radio/stories/radio.stories.d.ts.map +0 -1
  456. package/dist/components/radio/test/radio-group.test.d.ts +0 -3
  457. package/dist/components/radio/test/radio-group.test.d.ts.map +0 -1
  458. package/dist/components/radio/test/radio.test.d.ts +0 -2
  459. package/dist/components/radio/test/radio.test.d.ts.map +0 -1
  460. package/dist/components/range/Range.d.ts +0 -116
  461. package/dist/components/range/Range.d.ts.map +0 -1
  462. package/dist/components/range/leu-range.d.ts +0 -8
  463. package/dist/components/range/leu-range.d.ts.map +0 -1
  464. package/dist/components/range/stories/range.stories.d.ts +0 -231
  465. package/dist/components/range/stories/range.stories.d.ts.map +0 -1
  466. package/dist/components/range/test/range.test.d.ts +0 -2
  467. package/dist/components/range/test/range.test.d.ts.map +0 -1
  468. package/dist/components/scroll-top/ScrollTop.d.ts +0 -23
  469. package/dist/components/scroll-top/ScrollTop.d.ts.map +0 -1
  470. package/dist/components/scroll-top/leu-scroll-top.d.ts +0 -8
  471. package/dist/components/scroll-top/leu-scroll-top.d.ts.map +0 -1
  472. package/dist/components/scroll-top/stories/scroll-top.stories.d.ts +0 -8
  473. package/dist/components/scroll-top/stories/scroll-top.stories.d.ts.map +0 -1
  474. package/dist/components/scroll-top/test/scroll-top.test.d.ts +0 -2
  475. package/dist/components/scroll-top/test/scroll-top.test.d.ts.map +0 -1
  476. package/dist/components/select/Select.d.ts +0 -145
  477. package/dist/components/select/Select.d.ts.map +0 -1
  478. package/dist/components/select/leu-select.d.ts +0 -8
  479. package/dist/components/select/leu-select.d.ts.map +0 -1
  480. package/dist/components/select/stories/select.stories.d.ts +0 -23
  481. package/dist/components/select/stories/select.stories.d.ts.map +0 -1
  482. package/dist/components/select/test/fixtures.d.ts +0 -2
  483. package/dist/components/select/test/fixtures.d.ts.map +0 -1
  484. package/dist/components/select/test/select.test.d.ts +0 -3
  485. package/dist/components/select/test/select.test.d.ts.map +0 -1
  486. package/dist/components/spinner/Spinner.d.ts +0 -10
  487. package/dist/components/spinner/Spinner.d.ts.map +0 -1
  488. package/dist/components/spinner/leu-spinner.d.ts +0 -8
  489. package/dist/components/spinner/leu-spinner.d.ts.map +0 -1
  490. package/dist/components/spinner/stories/spinner.stories.d.ts +0 -16
  491. package/dist/components/spinner/stories/spinner.stories.d.ts.map +0 -1
  492. package/dist/components/spinner/test/spinner.test.d.ts +0 -2
  493. package/dist/components/spinner/test/spinner.test.d.ts.map +0 -1
  494. package/dist/components/table/Table.d.ts +0 -65
  495. package/dist/components/table/Table.d.ts.map +0 -1
  496. package/dist/components/table/leu-table.d.ts +0 -8
  497. package/dist/components/table/leu-table.d.ts.map +0 -1
  498. package/dist/components/table/stories/table.stories.d.ts +0 -15
  499. package/dist/components/table/stories/table.stories.d.ts.map +0 -1
  500. package/dist/components/table/test/table.test.d.ts +0 -2
  501. package/dist/components/table/test/table.test.d.ts.map +0 -1
  502. package/dist/components/tag/Tag.d.ts +0 -13
  503. package/dist/components/tag/Tag.d.ts.map +0 -1
  504. package/dist/components/tag/leu-tag.d.ts +0 -8
  505. package/dist/components/tag/leu-tag.d.ts.map +0 -1
  506. package/dist/components/tag/stories/tag.stories.d.ts +0 -136
  507. package/dist/components/tag/stories/tag.stories.d.ts.map +0 -1
  508. package/dist/components/tag/test/tag.test.d.ts +0 -2
  509. package/dist/components/tag/test/tag.test.d.ts.map +0 -1
  510. package/dist/components/visually-hidden/VisuallyHidden.d.ts +0 -9
  511. package/dist/components/visually-hidden/VisuallyHidden.d.ts.map +0 -1
  512. package/dist/components/visually-hidden/leu-visually-hidden.d.ts +0 -8
  513. package/dist/components/visually-hidden/leu-visually-hidden.d.ts.map +0 -1
  514. package/dist/components/visually-hidden/stories/visually-hidden.stories.d.ts +0 -13
  515. package/dist/components/visually-hidden/stories/visually-hidden.stories.d.ts.map +0 -1
  516. package/dist/components/visually-hidden/test/visually-hidden.test.d.ts +0 -2
  517. package/dist/components/visually-hidden/test/visually-hidden.test.d.ts.map +0 -1
  518. package/dist/hasSlotController-Bm2tipvG.js +0 -53
  519. package/dist/hasSlotController.d-emXwVXWF.d.ts +0 -23
  520. package/dist/index.d.ts.map +0 -1
  521. package/dist/lib/LeuElement.d.ts +0 -8
  522. package/dist/lib/LeuElement.d.ts.map +0 -1
  523. package/dist/lib/a11y.d.ts +0 -11
  524. package/dist/lib/a11y.d.ts.map +0 -1
  525. package/dist/lib/hasSlotController.d.ts +0 -20
  526. package/dist/lib/hasSlotController.d.ts.map +0 -1
  527. package/dist/lib/styleMap.d.ts +0 -61
  528. package/dist/lib/styleMap.d.ts.map +0 -1
  529. package/dist/lib/utils.d.ts +0 -23
  530. package/dist/lib/utils.d.ts.map +0 -1
  531. package/dist/styles/style.stories.d.ts +0 -6
  532. package/dist/styles/style.stories.d.ts.map +0 -1
  533. package/dist/utils-DBGsNSJW.js +0 -33
  534. package/rollup.config.js +0 -94
  535. package/web-dev-server.config.mjs +0 -30
@@ -2,10 +2,11 @@ import { html } from "lit"
2
2
  import { fixture, expect, elementUpdated, oneEvent } from "@open-wc/testing"
3
3
 
4
4
  import "../leu-button.js"
5
+ import type { LeuButton } from "../leu-button.js"
5
6
  import "../../icon/leu-icon.js"
6
7
 
7
8
  async function defaultFixture() {
8
- return fixture(html` <leu-button>button</leu-button>`)
9
+ return fixture<LeuButton>(html` <leu-button>button</leu-button>`)
9
10
  }
10
11
 
11
12
  describe("LeuButton", () => {
@@ -51,7 +52,7 @@ describe("LeuButton", () => {
51
52
  it("renders the icon slots at the correct position", async () => {
52
53
  const el = await fixture(
53
54
  html` <leu-button
54
- ><leu-icon name="addBew" slot="before"></leu-icon>Sichern</leu-button
55
+ ><leu-icon name="addNew" slot="before"></leu-icon>Sichern</leu-button
55
56
  >`,
56
57
  )
57
58
 
@@ -64,7 +65,7 @@ describe("LeuButton", () => {
64
65
  })
65
66
 
66
67
  it("renders the expanded icon only when the variant is ghost", async () => {
67
- const el = await fixture(
68
+ const el = await fixture<LeuButton>(
68
69
  html` <leu-button variant="ghost" expanded="true"
69
70
  ><leu-icon name="addNew" slot="before"></leu-icon>Sichern</leu-button
70
71
  >`,
@@ -88,7 +89,7 @@ describe("LeuButton", () => {
88
89
  })
89
90
 
90
91
  it("sets the dissabled attrbiute", async () => {
91
- const el = await fixture(
92
+ const el = await fixture<LeuButton>(
92
93
  html` <leu-button variant="ghost" expanded="true" disabled>
93
94
  <leu-icon name="addNew" slot="before"></leu-icon>
94
95
  Sichern
@@ -106,7 +107,7 @@ describe("LeuButton", () => {
106
107
  })
107
108
 
108
109
  it("reflects the role attribute", async () => {
109
- const el = await fixture(
110
+ const el = await fixture<LeuButton>(
110
111
  html` <leu-button variant="ghost" componentRole="menuitemradio"
111
112
  ><leu-icon name="addNew" slot="before"></leu-icon>Sichern</leu-button
112
113
  >`,
@@ -118,7 +119,7 @@ describe("LeuButton", () => {
118
119
  })
119
120
 
120
121
  it("sets the either checked or selected attribute depending on the role", async () => {
121
- const el = await fixture(
122
+ const el = await fixture<LeuButton>(
122
123
  html` <leu-button variant="ghost" componentRole="menuitemradio" active
123
124
  ><leu-icon name="addNew" slot="before"></leu-icon>Sichern</leu-button
124
125
  >`,
@@ -154,13 +155,217 @@ describe("LeuButton", () => {
154
155
  })
155
156
 
156
157
  it("dispatches the click event", async () => {
157
- const el = await fixture(html` <leu-button>Sichern</leu-button>`)
158
- const button = el.shadowRoot.querySelector("button")
158
+ const button = await fixture<LeuButton>(
159
+ html` <leu-button>Sichern</leu-button>`,
160
+ )
159
161
 
160
162
  setTimeout(() => button.click())
161
163
 
162
- const event = await oneEvent(el, "click")
164
+ const event = await oneEvent(button, "click")
163
165
 
164
166
  expect(event).to.exist
165
167
  })
168
+
169
+ it("disables the button when loading", async () => {
170
+ const el = await fixture<LeuButton>(
171
+ html` <leu-button loading>Sichern</leu-button>`,
172
+ )
173
+
174
+ const button = el.shadowRoot.querySelector("button")
175
+
176
+ expect(button).to.have.attribute("disabled")
177
+ })
178
+
179
+ it("doesn't dispatch click events when loading", async () => {
180
+ const button = await fixture<LeuButton>(
181
+ html` <leu-button loading>Sichern</leu-button>`,
182
+ )
183
+
184
+ let clicked = false
185
+
186
+ button.addEventListener("click", () => {
187
+ clicked = true
188
+ })
189
+
190
+ button.click()
191
+
192
+ expect(clicked).to.be.false
193
+ })
194
+
195
+ describe("form association", () => {
196
+ it("submits the form when type is submit", async () => {
197
+ const form = await fixture<HTMLFormElement>(html`
198
+ <form @submit=${(e: Event) => e.preventDefault()}>
199
+ <leu-button type="submit">Submit</leu-button>
200
+ </form>
201
+ `)
202
+
203
+ const button = form.querySelector<LeuButton>("leu-button")
204
+
205
+ setTimeout(() => button.click())
206
+ const event = await oneEvent(form, "submit")
207
+
208
+ expect(event).to.exist
209
+ })
210
+
211
+ it("submits the form with the button name and value", async () => {
212
+ let submittedData: FormData | null = null
213
+
214
+ const form = await fixture<HTMLFormElement>(html`
215
+ <form
216
+ @submit=${(e: SubmitEvent) => {
217
+ e.preventDefault()
218
+ submittedData = new FormData(form, e.submitter)
219
+ }}
220
+ >
221
+ <input type="text" name="field" value="test" />
222
+ <leu-button type="submit" name="action" value="save">Save</leu-button>
223
+ </form>
224
+ `)
225
+
226
+ const button = form.querySelector<LeuButton>("leu-button")
227
+
228
+ setTimeout(() => button.click())
229
+ await oneEvent(form, "submit")
230
+
231
+ expect(submittedData).to.not.be.null
232
+ expect(submittedData.get("action")).to.equal("save")
233
+ expect(submittedData.get("field")).to.equal("test")
234
+ })
235
+
236
+ it("submits an empty string as value when no value attribute is set", async () => {
237
+ let submittedData: FormData | null = null
238
+
239
+ const form = await fixture<HTMLFormElement>(html`
240
+ <form
241
+ @submit=${(e: SubmitEvent) => {
242
+ e.preventDefault()
243
+ submittedData = new FormData(form, e.submitter)
244
+ }}
245
+ >
246
+ <leu-button type="submit" name="action">Submit</leu-button>
247
+ </form>
248
+ `)
249
+
250
+ const button = form.querySelector<LeuButton>("leu-button")
251
+
252
+ setTimeout(() => button.click())
253
+ await oneEvent(form, "submit")
254
+
255
+ expect(submittedData.get("action")).to.equal("")
256
+ })
257
+
258
+ it("resets the form when type is reset", async () => {
259
+ const form = await fixture<HTMLFormElement>(html`
260
+ <form>
261
+ <input type="text" name="field" value="initial" />
262
+ <leu-button type="reset">Reset</leu-button>
263
+ </form>
264
+ `)
265
+
266
+ const input = form.querySelector<HTMLInputElement>("input")
267
+ input.value = "modified"
268
+ expect(input.value).to.equal("modified")
269
+
270
+ const button = form.querySelector<LeuButton>("leu-button")
271
+ button.click()
272
+
273
+ expect(input.value).to.equal("initial")
274
+ })
275
+
276
+ it("does not submit or reset the form when type is button", async () => {
277
+ let submitted = false
278
+ let reset = false
279
+
280
+ const form = await fixture<HTMLFormElement>(html`
281
+ <form
282
+ @submit=${(e: Event) => {
283
+ e.preventDefault()
284
+ submitted = true
285
+ }}
286
+ @reset=${() => {
287
+ reset = true
288
+ }}
289
+ >
290
+ <leu-button type="button">Click</leu-button>
291
+ </form>
292
+ `)
293
+
294
+ const button = form.querySelector<LeuButton>("leu-button")
295
+ button.click()
296
+
297
+ expect(submitted).to.be.false
298
+ expect(reset).to.be.false
299
+ })
300
+
301
+ it("does not submit or reset when the button is not inside a form", async () => {
302
+ const el = await fixture<LeuButton>(
303
+ html`<leu-button type="submit">Submit</leu-button>`,
304
+ )
305
+
306
+ // Should not throw
307
+ el.click()
308
+ })
309
+
310
+ it("does not submit or reset the form when disabled", async () => {
311
+ let submitted = false
312
+ let reset = false
313
+
314
+ const form = await fixture<HTMLFormElement>(html`
315
+ <form
316
+ @submit=${(e: Event) => {
317
+ e.preventDefault()
318
+ submitted = true
319
+ }}
320
+ @reset=${() => {
321
+ reset = true
322
+ }}
323
+ >
324
+ <leu-button type="submit" disabled>Submit</leu-button>
325
+ <leu-button type="reset" disabled>Reset</leu-button>
326
+ </form>
327
+ `)
328
+
329
+ const submitBtn = form.querySelectorAll<LeuButton>("leu-button")[0]
330
+ const resetBtn = form.querySelectorAll<LeuButton>("leu-button")[1]
331
+
332
+ submitBtn.click()
333
+ resetBtn.click()
334
+
335
+ expect(submitted).to.be.false
336
+ expect(reset).to.be.false
337
+ })
338
+
339
+ it("is form associated", async () => {
340
+ const form = await fixture<HTMLFormElement>(html`
341
+ <form>
342
+ <leu-button type="submit" name="btn">Submit</leu-button>
343
+ </form>
344
+ `)
345
+
346
+ const button = form.querySelector<LeuButton>("leu-button")
347
+
348
+ expect(button.form).to.equal(form)
349
+ })
350
+
351
+ it("responds to formDisabledCallback", async () => {
352
+ const form = await fixture<HTMLFormElement>(html`
353
+ <form>
354
+ <fieldset>
355
+ <leu-button type="submit">Submit</leu-button>
356
+ </fieldset>
357
+ </form>
358
+ `)
359
+
360
+ const fieldset = form.querySelector("fieldset")
361
+ const button = form.querySelector<LeuButton>("leu-button")
362
+
363
+ expect(button.disabled).to.be.false
364
+
365
+ fieldset.disabled = true
366
+ await elementUpdated(button)
367
+
368
+ expect(button.disabled).to.be.true
369
+ })
370
+ })
166
371
  })
@@ -3,7 +3,7 @@ import { html } from "lit"
3
3
  import { LeuElement } from "../../lib/LeuElement.js"
4
4
  import { LeuButton } from "../button/Button.js"
5
5
 
6
- import styles from "./button-group.css"
6
+ import styles from "./button-group.css?inline"
7
7
 
8
8
  /**
9
9
  * A radio input-like button group component.
@@ -34,9 +34,7 @@ export class LeuButtonGroup extends LeuElement {
34
34
 
35
35
  set value(newValue) {
36
36
  this._items.forEach((item) => {
37
- /* eslint-disable no-param-reassign */
38
37
  item.active = LeuButtonGroup.getButtonValue(item) === newValue
39
- /* eslint-enable no-param-reassign */
40
38
  })
41
39
  }
42
40
 
@@ -58,7 +56,6 @@ export class LeuButtonGroup extends LeuElement {
58
56
  let foundActiveButtonBefore = false
59
57
 
60
58
  this._items.forEach((item) => {
61
- /* eslint-disable no-param-reassign */
62
59
  item.addEventListener("click", this._handleButtonClick)
63
60
  item.componentRole = "menuitemradio"
64
61
 
@@ -71,8 +68,6 @@ export class LeuButtonGroup extends LeuElement {
71
68
  } else if (item.active) {
72
69
  foundActiveButtonBefore = true
73
70
  }
74
-
75
- /* eslint-enable no-param-reassign */
76
71
  })
77
72
  }
78
73
 
@@ -3,7 +3,7 @@ import "../leu-button-group.js"
3
3
  import "../../button/leu-button.js"
4
4
 
5
5
  // https://stackoverflow.com/questions/72566428/storybook-angular-how-to-dynamically-update-args-from-the-template
6
- import { UPDATE_STORY_ARGS } from "@storybook/core-events" // eslint-disable-line
6
+ import { UPDATE_STORY_ARGS } from "storybook/internal/core-events"
7
7
  function updateStorybookArgss(id, args) {
8
8
  const channel = window.__STORYBOOK_ADDONS_CHANNEL__
9
9
  channel.emit(UPDATE_STORY_ARGS, {
@@ -3,7 +3,7 @@ import { property } from "lit/decorators.js"
3
3
 
4
4
  import { LeuElement } from "../../lib/LeuElement.js"
5
5
 
6
- import styles from "./chart-wrapper.css"
6
+ import styles from "./chart-wrapper.css?inline"
7
7
  import { HasSlotController } from "../../lib/hasSlotController.js"
8
8
  import { LeuSpinner } from "../spinner/Spinner.js"
9
9
 
@@ -1,4 +1,4 @@
1
- import { Meta, StoryObj } from "@storybook/web-components"
1
+ import { Meta, StoryObj } from "@storybook/web-components-vite"
2
2
  import { html } from "lit"
3
3
 
4
4
  import "../../dropdown/leu-dropdown.js"
@@ -1,15 +1,16 @@
1
- import { html } from "lit"
1
+ import { html, PropertyValues } from "lit"
2
2
  import { property } from "lit/decorators.js"
3
3
 
4
4
  import { LeuElement } from "../../lib/LeuElement.js"
5
+ import { FormAssociatedMixin } from "../../lib/mixins/FormAssociatedMixin.js"
5
6
  import { LeuIcon } from "../icon/Icon.js"
6
7
 
7
- import styles from "./checkbox.css"
8
+ import styles from "./checkbox.css?inline"
8
9
 
9
10
  /**
10
11
  * @tagname leu-checkbox
11
12
  */
12
- export class LeuCheckbox extends LeuElement {
13
+ export class LeuCheckbox extends FormAssociatedMixin(LeuElement) {
13
14
  static dependencies = {
14
15
  "leu-icon": LeuIcon,
15
16
  }
@@ -23,18 +24,58 @@ export class LeuCheckbox extends LeuElement {
23
24
  }
24
25
 
25
26
  @property({ type: Boolean, reflect: true })
26
- checked: boolean = false
27
+ required: boolean = false
27
28
 
28
- @property({ type: Boolean, reflect: true })
29
- disabled: boolean = false
29
+ @property({ type: Boolean, reflect: true, attribute: "checked" })
30
+ defaultChecked: boolean = false
30
31
 
31
- @property({ type: String, reflect: true })
32
- value: string = ""
32
+ protected _checked: boolean
33
+
34
+ @property({ type: Boolean, attribute: false })
35
+ set checked(isChecked: boolean) {
36
+ this._checked = isChecked
37
+ }
38
+
39
+ get checked(): boolean {
40
+ if (typeof this._checked === "boolean") {
41
+ return this._checked
42
+ }
43
+
44
+ return this.defaultChecked
45
+ }
33
46
 
34
47
  @property({ type: String, reflect: true })
35
- name: string = ""
48
+ value: string
49
+
50
+ willUpdate(changedProperties: PropertyValues<this>): void {
51
+ super.willUpdate(changedProperties)
52
+ let checkedChanged = false
53
+
54
+ // Match the bevavior of native checkboxes.
55
+ // Changes to the defaultChecked property only hav an effect
56
+ // if the user has not interacted with the checkbox yet.
57
+ if (
58
+ changedProperties.has("defaultChecked") &&
59
+ !changedProperties.has("checked") &&
60
+ !this.hasInteracted
61
+ ) {
62
+ this.checked = this.defaultChecked
63
+ checkedChanged = true
64
+ }
65
+
66
+ if (
67
+ checkedChanged ||
68
+ changedProperties.has("checked") ||
69
+ changedProperties.has("value") ||
70
+ changedProperties.has("name") ||
71
+ changedProperties.has("disabled")
72
+ ) {
73
+ this.setFormValue()
74
+ }
75
+ }
36
76
 
37
77
  private handleChange(event: Event & { target: HTMLInputElement }) {
78
+ this.hasInteracted = true
38
79
  this.checked = event.target.checked
39
80
 
40
81
  const customEvent = new CustomEvent(event.type, event)
@@ -42,13 +83,35 @@ export class LeuCheckbox extends LeuElement {
42
83
  }
43
84
 
44
85
  private handleInput(event: InputEvent & { target: HTMLInputElement }) {
86
+ this.hasInteracted = true
45
87
  this.checked = event.target.checked
46
88
  }
47
89
 
90
+ public formResetCallback() {
91
+ this.checked = this.defaultChecked
92
+ super.formResetCallback()
93
+ }
94
+
95
+ setFormValue() {
96
+ this.internals.setFormValue(
97
+ this.checked && !this.disabled ? (this.value ?? "on") : null,
98
+ )
99
+
100
+ if (this.required && !this.checked) {
101
+ // @todo i18n and/or custom validation message
102
+ this.internals.setValidity(
103
+ { valueMissing: true },
104
+ "Bitte klicken Sie dieses Kästchen an, um fortfahren zu können.",
105
+ )
106
+ } else {
107
+ this.internals.setValidity({})
108
+ }
109
+ }
110
+
48
111
  render() {
49
112
  return html`
50
113
  <input
51
- id=${`checkbox-${this.name}`}
114
+ id="checkbox"
52
115
  class="checkbox"
53
116
  type="checkbox"
54
117
  name="${this.name}"
@@ -56,9 +119,10 @@ export class LeuCheckbox extends LeuElement {
56
119
  @input=${this.handleInput}
57
120
  .checked=${this.checked}
58
121
  ?disabled=${this.disabled}
59
- .value=${this.value ?? ""}
122
+ .value=${this.value}
123
+ ?required=${this.required}
60
124
  />
61
- <label for=${`checkbox-${this.name}`} class="label"><slot></slot></label>
125
+ <label for="checkbox" class="label"><slot></slot></label>
62
126
  <leu-icon class="icon" name="check"></leu-icon>
63
127
  `
64
128
  }
@@ -4,7 +4,7 @@ import { property } from "lit/decorators.js"
4
4
 
5
5
  import { LeuElement } from "../../lib/LeuElement.js"
6
6
 
7
- import styles from "./checkbox-group.css"
7
+ import styles from "./checkbox-group.css?inline"
8
8
  import { LeuCheckbox } from "./Checkbox.js"
9
9
 
10
10
  /**
@@ -67,6 +67,10 @@
67
67
  cursor: not-allowed;
68
68
  }
69
69
 
70
+ .checkbox:required + .label::after {
71
+ content: "*";
72
+ }
73
+
70
74
  .icon {
71
75
  position: absolute;
72
76
  display: block;
@@ -8,6 +8,9 @@ export default {
8
8
  label: {
9
9
  control: "text",
10
10
  },
11
+ defaultChecked: {
12
+ control: "boolean",
13
+ },
11
14
  },
12
15
  parameters: {
13
16
  design: {
@@ -17,13 +20,23 @@ export default {
17
20
  },
18
21
  }
19
22
 
20
- function Template({ label = "Label", value, checked, disabled, name = "" }) {
23
+ function Template({
24
+ label = "Label",
25
+ value,
26
+ checked,
27
+ defaultChecked,
28
+ disabled,
29
+ name = "",
30
+ required,
31
+ }) {
21
32
  return html`
22
33
  <leu-checkbox
23
- .value=${value}
24
- ?checked=${checked}
34
+ value=${value}
35
+ .checked=${checked}
36
+ ?checked=${defaultChecked}
25
37
  ?disabled=${disabled}
26
38
  name=${name}
39
+ ?required=${required}
27
40
  >
28
41
  ${label}
29
42
  </leu-checkbox>
@@ -37,6 +50,11 @@ Checked.args = {
37
50
  checked: true,
38
51
  }
39
52
 
53
+ export const DefaultChecked = Template.bind({})
54
+ DefaultChecked.args = {
55
+ defaultChecked: true,
56
+ }
57
+
40
58
  export const Disabled = Template.bind({})
41
59
  Disabled.args = {
42
60
  disabled: true,
@@ -47,3 +65,8 @@ CheckedDisabled.args = {
47
65
  checked: true,
48
66
  disabled: true,
49
67
  }
68
+
69
+ export const Required = Template.bind({})
70
+ Required.args = {
71
+ required: true,
72
+ }