@statistikzh/leu 0.28.1 → 0.28.3

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 (351) hide show
  1. package/dist/{Accordion-CwkI7sfx.js → Accordion-EwJ1WHFd.js} +1 -1
  2. package/dist/Accordion.js +2 -2
  3. package/dist/{Button-DcuvEVkC.d.ts → Button-BywuwtT2.d.ts} +0 -1
  4. package/dist/{Button-D1aYnunQ.js → Button-q4GeKj_3.js} +3 -4
  5. package/dist/Button.d.ts +1 -1
  6. package/dist/Button.js +4 -4
  7. package/dist/{ButtonGroup-CqThYjzX.js → ButtonGroup-BeU3Prei.js} +2 -2
  8. package/dist/ButtonGroup.js +5 -5
  9. package/dist/{ChartWrapper-BjVT4x-H.js → ChartWrapper-Bdb0_n2z.js} +2 -2
  10. package/dist/ChartWrapper.js +3 -3
  11. package/dist/{Checkbox-HxYqp2w4.js → Checkbox-BC0gAuaH.js} +2 -2
  12. package/dist/Checkbox.js +3 -3
  13. package/dist/{CheckboxGroup-DYws2rwt.js → CheckboxGroup-CiOgcwmo.js} +2 -2
  14. package/dist/CheckboxGroup.js +4 -4
  15. package/dist/{Chip-gKxD6IaZ.js → Chip-CYlPzmTG.js} +1 -1
  16. package/dist/Chip.js +2 -2
  17. package/dist/{ChipGroup-ZvBzX_wd.js → ChipGroup-3IMW_Mp7.js} +1 -1
  18. package/dist/ChipGroup.js +3 -3
  19. package/dist/ChipLink.js +2 -2
  20. package/dist/ChipRemovable.js +3 -3
  21. package/dist/ChipSelectable.js +2 -2
  22. package/dist/{Dialog-BYpzTprV.js → Dialog-DCl5qSXY.js} +3 -4
  23. package/dist/Dialog.js +3 -3
  24. package/dist/{Dropdown-C4CgE4E-.js → Dropdown-COmpmOev.js} +5 -5
  25. package/dist/Dropdown.d.ts +1 -1
  26. package/dist/Dropdown.js +8 -8
  27. package/dist/{FileInput-nsnSQCaU.js → FileInput-DXjoqKB4.js} +4 -4
  28. package/dist/FileInput.d.ts +1 -1
  29. package/dist/FileInput.js +6 -6
  30. package/dist/{Icon-D8HTPEFH.js → Icon-Bmk7lLWY.js} +1 -1
  31. package/dist/Icon.js +2 -2
  32. package/dist/{Input-OrILqlax.js → Input-B9FwAPKO.js} +2 -2
  33. package/dist/Input.js +3 -3
  34. package/dist/{LeuElement-C_lcHzQI.js → LeuElement-CQJQi8TB.js} +1 -1
  35. package/dist/{Menu-CFLCnI34.js → Menu-bWCAn0rT.js} +2 -2
  36. package/dist/Menu.js +4 -4
  37. package/dist/{MenuItem-ICjLCGim.js → MenuItem-CzCFZi8o.js} +2 -2
  38. package/dist/MenuItem.js +3 -3
  39. package/dist/{Message-Dw5D_0i1.js → Message-DMaM9ukF.js} +2 -2
  40. package/dist/Message.js +3 -3
  41. package/dist/{Pagination-D1tP5FrM.js → Pagination-870u3UgQ.js} +4 -4
  42. package/dist/{Pagination-9eZ8WMvR.d.ts → Pagination-B-mTHZiw.d.ts} +1 -1
  43. package/dist/Pagination.d.ts +1 -1
  44. package/dist/Pagination.js +6 -6
  45. package/dist/{Placeholder-CnGzCZ5-.js → Placeholder-DvvzGB1p.js} +1 -1
  46. package/dist/Placeholder.js +2 -2
  47. package/dist/{Popup-BiN_tZDN.js → Popup-BpG_7twr.js} +1 -1
  48. package/dist/Popup.js +2 -2
  49. package/dist/{ProgressBar-BfJo_KyU.js → ProgressBar-BkskTLWK.js} +1 -1
  50. package/dist/ProgressBar.js +2 -2
  51. package/dist/{Radio-CV7vuQUj.js → Radio-BS7UUhR3.js} +1 -1
  52. package/dist/Radio.js +2 -2
  53. package/dist/{RadioGroup-C3XWSScc.js → RadioGroup-Cpo9kAjB.js} +2 -2
  54. package/dist/RadioGroup.js +3 -3
  55. package/dist/{Range-C8RVrIM9.js → Range-Dh0p5UWA.js} +1 -1
  56. package/dist/Range.js +2 -2
  57. package/dist/{ScrollTop-B_TJ_k4m.js → ScrollTop-CtPidICZ.js} +3 -3
  58. package/dist/ScrollTop.d.ts +1 -1
  59. package/dist/ScrollTop.js +5 -5
  60. package/dist/{Select-CbPTrL3G.js → Select-W1KqDOgx.js} +7 -7
  61. package/dist/Select.d.ts +1 -1
  62. package/dist/Select.js +9 -9
  63. package/dist/{Spinner-ChKJQJTN.js → Spinner-CmAYIFws.js} +1 -1
  64. package/dist/Spinner.js +2 -2
  65. package/dist/{Tab-BJbzY1xd.js → Tab-7Cww5fSx.js} +1 -1
  66. package/dist/Tab.js +2 -2
  67. package/dist/{TabGroup-BIaCHrKR.js → TabGroup-tURfCrlw.js} +3 -3
  68. package/dist/TabGroup.js +4 -4
  69. package/dist/{TabPanel-CTyw410b.js → TabPanel-DIZcmcMV.js} +1 -1
  70. package/dist/TabPanel.js +2 -2
  71. package/dist/{Table-D3QmePJd.js → Table-BVYjYXP9.js} +3 -3
  72. package/dist/Table.d.ts +1 -1
  73. package/dist/Table.js +7 -7
  74. package/dist/{Tag-nUnWtHYy.js → Tag-x0KmEDEa.js} +1 -1
  75. package/dist/Tag.js +2 -2
  76. package/dist/{VisuallyHidden-DF2q9pTa.js → VisuallyHidden-CXRfGsaZ.js} +1 -1
  77. package/dist/VisuallyHidden.js +2 -2
  78. package/dist/custom-elements.json +6445 -0
  79. package/dist/index.d.ts +2 -2
  80. package/dist/index.js +30 -30
  81. package/dist/leu-accordion.js +2 -2
  82. package/dist/leu-button-group.js +5 -5
  83. package/dist/leu-button.d.ts +1 -1
  84. package/dist/leu-button.js +4 -4
  85. package/dist/leu-chart-wrapper.js +3 -3
  86. package/dist/leu-checkbox-group.js +4 -4
  87. package/dist/leu-checkbox.js +3 -3
  88. package/dist/leu-chip-group.js +3 -3
  89. package/dist/leu-chip-link.js +2 -2
  90. package/dist/leu-chip-removable.js +3 -3
  91. package/dist/leu-chip-selectable.js +2 -2
  92. package/dist/leu-dialog.js +3 -3
  93. package/dist/leu-dropdown.js +8 -8
  94. package/dist/leu-file-input.js +6 -6
  95. package/dist/leu-icon.js +2 -2
  96. package/dist/leu-input.js +3 -3
  97. package/dist/leu-menu-item.js +3 -3
  98. package/dist/leu-menu.js +4 -4
  99. package/dist/leu-message.js +3 -3
  100. package/dist/leu-pagination.d.ts +1 -1
  101. package/dist/leu-pagination.js +6 -6
  102. package/dist/leu-placeholder.js +2 -2
  103. package/dist/leu-popup.js +2 -2
  104. package/dist/leu-progress-bar.js +2 -2
  105. package/dist/leu-radio-group.js +3 -3
  106. package/dist/leu-radio.js +2 -2
  107. package/dist/leu-range.js +2 -2
  108. package/dist/leu-scroll-top.js +5 -5
  109. package/dist/leu-select.js +9 -9
  110. package/dist/leu-spinner.js +2 -2
  111. package/dist/leu-tab-group.js +4 -4
  112. package/dist/leu-tab-panel.js +2 -2
  113. package/dist/leu-tab.js +2 -2
  114. package/dist/leu-table.js +7 -7
  115. package/dist/leu-tag.js +2 -2
  116. package/dist/leu-visually-hidden.js +2 -2
  117. package/dist/vscode.html-custom-data.json +11 -11
  118. package/dist/vue/index.d.ts +20 -20
  119. package/dist/web-types.json +28 -28
  120. package/package.json +4 -1
  121. package/.editorconfig +0 -29
  122. package/.github/workflows/ci.yml +0 -81
  123. package/.github/workflows/deploy-github-pages.yaml +0 -34
  124. package/.github/workflows/publish.yml +0 -28
  125. package/.github/workflows/release-please.yml +0 -19
  126. package/.husky/commit-msg +0 -1
  127. package/.husky/pre-commit +0 -1
  128. package/.nvmrc +0 -1
  129. package/.prettierignore +0 -2
  130. package/.release-please-manifest.json +0 -3
  131. package/.storybook/main.ts +0 -34
  132. package/.storybook/manager-head.html +0 -1
  133. package/.storybook/manager.ts +0 -6
  134. package/.storybook/preview.ts +0 -96
  135. package/.storybook/static/fonts/Inter-Black.woff2 +0 -0
  136. package/.storybook/static/fonts/Inter-Regular.woff2 +0 -0
  137. package/.storybook/static/fonts.css +0 -11
  138. package/.storybook/static/global.css +0 -5
  139. package/.storybook/static/logo.svg +0 -19
  140. package/.storybook/theme.ts +0 -8
  141. package/AGENTS.md +0 -162
  142. package/CHANGELOG.md +0 -601
  143. package/CODE_OF_CONDUCT.md +0 -128
  144. package/CONTRIBUTING.md +0 -42
  145. package/commitlint.config.cjs +0 -1
  146. package/custom-elements-manifest.config.js +0 -46
  147. package/eslint.config.mjs +0 -79
  148. package/postcss.config.cjs +0 -16
  149. package/release-please-config.json +0 -9
  150. package/scripts/generate-component/generate.js +0 -167
  151. package/scripts/generate-component/templates/[Name].ts +0 -31
  152. package/scripts/generate-component/templates/[name].css +0 -6
  153. package/scripts/generate-component/templates/[namespace]-[name].ts +0 -11
  154. package/scripts/generate-component/templates/stories/[name].stories.ts +0 -26
  155. package/scripts/generate-component/templates/test/[name].test.ts +0 -23
  156. package/scripts/postcss-leu-font-styles.cjs +0 -154
  157. package/src/components/accordion/Accordion.ts +0 -108
  158. package/src/components/accordion/accordion.css +0 -150
  159. package/src/components/accordion/leu-accordion.ts +0 -11
  160. package/src/components/accordion/stories/accordion.stories.ts +0 -62
  161. package/src/components/accordion/test/accordion.test.ts +0 -118
  162. package/src/components/button/Button.ts +0 -286
  163. package/src/components/button/button.css +0 -317
  164. package/src/components/button/leu-button.ts +0 -11
  165. package/src/components/button/stories/button.stories.ts +0 -366
  166. package/src/components/button/test/button.test.ts +0 -417
  167. package/src/components/button-group/ButtonGroup.ts +0 -97
  168. package/src/components/button-group/button-group.css +0 -5
  169. package/src/components/button-group/leu-button-group.ts +0 -11
  170. package/src/components/button-group/stories/button-group.stories.ts +0 -54
  171. package/src/components/button-group/test/button-group.test.ts +0 -105
  172. package/src/components/chart-wrapper/ChartWrapper.ts +0 -78
  173. package/src/components/chart-wrapper/chart-wrapper.css +0 -87
  174. package/src/components/chart-wrapper/leu-chart-wrapper.ts +0 -11
  175. package/src/components/chart-wrapper/stories/chart-wrapper.stories.ts +0 -58
  176. package/src/components/chart-wrapper/test/chart-wrapper.test.ts +0 -77
  177. package/src/components/checkbox/Checkbox.ts +0 -129
  178. package/src/components/checkbox/CheckboxGroup.ts +0 -57
  179. package/src/components/checkbox/checkbox-group.css +0 -29
  180. package/src/components/checkbox/checkbox.css +0 -81
  181. package/src/components/checkbox/leu-checkbox-group.ts +0 -11
  182. package/src/components/checkbox/leu-checkbox.ts +0 -11
  183. package/src/components/checkbox/stories/checkbox-group.stories.ts +0 -59
  184. package/src/components/checkbox/stories/checkbox.stories.ts +0 -72
  185. package/src/components/checkbox/test/checkbox-group.test.ts +0 -109
  186. package/src/components/checkbox/test/checkbox.test.ts +0 -247
  187. package/src/components/chip/Chip.ts +0 -19
  188. package/src/components/chip/ChipGroup.ts +0 -122
  189. package/src/components/chip/ChipLink.ts +0 -24
  190. package/src/components/chip/ChipRemovable.ts +0 -45
  191. package/src/components/chip/ChipSelectable.ts +0 -80
  192. package/src/components/chip/chip-group.css +0 -15
  193. package/src/components/chip/chip.css +0 -139
  194. package/src/components/chip/exports.ts +0 -4
  195. package/src/components/chip/leu-chip-group.ts +0 -11
  196. package/src/components/chip/leu-chip-link.ts +0 -11
  197. package/src/components/chip/leu-chip-removable.ts +0 -11
  198. package/src/components/chip/leu-chip-selectable.ts +0 -11
  199. package/src/components/chip/stories/chip-group.stories.ts +0 -159
  200. package/src/components/chip/stories/chip-link.stories.ts +0 -45
  201. package/src/components/chip/stories/chip-removable.stories.ts +0 -42
  202. package/src/components/chip/stories/chip-selectable.stories.ts +0 -54
  203. package/src/components/chip/test/chip-group.test.ts +0 -171
  204. package/src/components/chip/test/chip-link.test.ts +0 -54
  205. package/src/components/chip/test/chip-removable.test.ts +0 -105
  206. package/src/components/chip/test/chip-selectable.test.ts +0 -101
  207. package/src/components/chip/test/chip.test.ts +0 -22
  208. package/src/components/dialog/Dialog.ts +0 -86
  209. package/src/components/dialog/dialog.css +0 -157
  210. package/src/components/dialog/leu-dialog.ts +0 -11
  211. package/src/components/dialog/stories/dialog.stories.ts +0 -142
  212. package/src/components/dialog/test/dialog.test.ts +0 -85
  213. package/src/components/dropdown/Dropdown.ts +0 -152
  214. package/src/components/dropdown/dropdown.css +0 -16
  215. package/src/components/dropdown/leu-dropdown.ts +0 -11
  216. package/src/components/dropdown/stories/dropdown.stories.ts +0 -58
  217. package/src/components/dropdown/test/dropdown.test.ts +0 -59
  218. package/src/components/file-input/FileInput.ts +0 -324
  219. package/src/components/file-input/file-input.css +0 -118
  220. package/src/components/file-input/leu-file-input.ts +0 -11
  221. package/src/components/file-input/stories/file-input.stories.ts +0 -45
  222. package/src/components/file-input/test/file-input.test.ts +0 -62
  223. package/src/components/icon/Icon.ts +0 -47
  224. package/src/components/icon/icon.css +0 -10
  225. package/src/components/icon/leu-icon.ts +0 -11
  226. package/src/components/icon/paths.ts +0 -219
  227. package/src/components/icon/stories/icon.stories.ts +0 -79
  228. package/src/components/icon/test/icon.test.ts +0 -50
  229. package/src/components/input/Input.ts +0 -469
  230. package/src/components/input/input.css +0 -238
  231. package/src/components/input/leu-input.ts +0 -11
  232. package/src/components/input/stories/input.stories.ts +0 -204
  233. package/src/components/input/test/input.test.ts +0 -603
  234. package/src/components/menu/Menu.ts +0 -149
  235. package/src/components/menu/MenuItem.ts +0 -168
  236. package/src/components/menu/leu-menu-item.ts +0 -11
  237. package/src/components/menu/leu-menu.ts +0 -11
  238. package/src/components/menu/menu-item.css +0 -77
  239. package/src/components/menu/menu.css +0 -19
  240. package/src/components/menu/stories/menu-item.stories.ts +0 -81
  241. package/src/components/menu/stories/menu.stories.ts +0 -54
  242. package/src/components/menu/test/menu-item.test.ts +0 -210
  243. package/src/components/menu/test/menu.test.ts +0 -125
  244. package/src/components/message/Message.ts +0 -118
  245. package/src/components/message/leu-message.ts +0 -11
  246. package/src/components/message/message.css +0 -163
  247. package/src/components/message/stories/message.mdx +0 -76
  248. package/src/components/message/stories/message.stories.ts +0 -149
  249. package/src/components/message/test/message.test.ts +0 -96
  250. package/src/components/pagination/Pagination.ts +0 -192
  251. package/src/components/pagination/leu-pagination.ts +0 -11
  252. package/src/components/pagination/pagination.css +0 -54
  253. package/src/components/pagination/stories/pagination.stories.ts +0 -115
  254. package/src/components/pagination/test/pagination.test.ts +0 -210
  255. package/src/components/placeholder/Placeholder.ts +0 -33
  256. package/src/components/placeholder/leu-placeholder.ts +0 -11
  257. package/src/components/placeholder/placeholder.css +0 -59
  258. package/src/components/placeholder/stories/placeholder.stories.ts +0 -34
  259. package/src/components/placeholder/test/placeholder.test.ts +0 -31
  260. package/src/components/popup/Popup.ts +0 -264
  261. package/src/components/popup/leu-popup.ts +0 -11
  262. package/src/components/popup/popup.css +0 -24
  263. package/src/components/popup/stories/popup.stories.ts +0 -117
  264. package/src/components/popup/test/popup.test.ts +0 -90
  265. package/src/components/progress-bar/ProgressBar.ts +0 -52
  266. package/src/components/progress-bar/leu-progress-bar.ts +0 -11
  267. package/src/components/progress-bar/progress-bar.css +0 -97
  268. package/src/components/progress-bar/stories/progress-bar.stories.ts +0 -39
  269. package/src/components/progress-bar/test/progress-bar.test.ts +0 -61
  270. package/src/components/radio/Radio.ts +0 -59
  271. package/src/components/radio/RadioGroup.ts +0 -181
  272. package/src/components/radio/leu-radio-group.ts +0 -11
  273. package/src/components/radio/leu-radio.ts +0 -11
  274. package/src/components/radio/radio-group.css +0 -29
  275. package/src/components/radio/radio.css +0 -76
  276. package/src/components/radio/stories/radio-group.stories.ts +0 -54
  277. package/src/components/radio/stories/radio.stories.ts +0 -55
  278. package/src/components/radio/test/radio-group.test.ts +0 -83
  279. package/src/components/radio/test/radio.test.ts +0 -119
  280. package/src/components/range/Range.ts +0 -400
  281. package/src/components/range/leu-range.ts +0 -11
  282. package/src/components/range/range.css +0 -227
  283. package/src/components/range/stories/range.stories.ts +0 -185
  284. package/src/components/range/test/range.test.ts +0 -228
  285. package/src/components/scroll-top/ScrollTop.ts +0 -91
  286. package/src/components/scroll-top/leu-scroll-top.ts +0 -11
  287. package/src/components/scroll-top/scroll-top.css +0 -50
  288. package/src/components/scroll-top/stories/scroll-top.stories.ts +0 -217
  289. package/src/components/scroll-top/test/scroll-top.test.ts +0 -22
  290. package/src/components/select/Select.ts +0 -570
  291. package/src/components/select/leu-select.ts +0 -11
  292. package/src/components/select/select.css +0 -222
  293. package/src/components/select/stories/select.stories.ts +0 -173
  294. package/src/components/select/test/fixtures.ts +0 -162
  295. package/src/components/select/test/select.test.ts +0 -937
  296. package/src/components/spinner/Spinner.ts +0 -31
  297. package/src/components/spinner/leu-spinner.ts +0 -11
  298. package/src/components/spinner/spinner.css +0 -20
  299. package/src/components/spinner/stories/spinner.stories.ts +0 -29
  300. package/src/components/spinner/test/spinner.test.ts +0 -30
  301. package/src/components/tab/Tab.ts +0 -72
  302. package/src/components/tab/TabGroup.ts +0 -267
  303. package/src/components/tab/TabPanel.ts +0 -59
  304. package/src/components/tab/leu-tab-group.ts +0 -11
  305. package/src/components/tab/leu-tab-panel.ts +0 -11
  306. package/src/components/tab/leu-tab.ts +0 -11
  307. package/src/components/tab/stories/tab.stories.ts +0 -97
  308. package/src/components/tab/tab-group.css +0 -63
  309. package/src/components/tab/tab-panel.css +0 -10
  310. package/src/components/tab/tab.css +0 -54
  311. package/src/components/tab/test/tab-group.test.ts +0 -426
  312. package/src/components/tab/test/tab-panel.test.ts +0 -102
  313. package/src/components/tab/test/tab.test.ts +0 -139
  314. package/src/components/table/Table.ts +0 -253
  315. package/src/components/table/leu-table.ts +0 -11
  316. package/src/components/table/stories/table.stories.ts +0 -131
  317. package/src/components/table/table.css +0 -112
  318. package/src/components/table/test/table.test.ts +0 -37
  319. package/src/components/tag/Tag.ts +0 -28
  320. package/src/components/tag/leu-tag.ts +0 -11
  321. package/src/components/tag/stories/tag.stories.ts +0 -107
  322. package/src/components/tag/tag.css +0 -42
  323. package/src/components/tag/test/tag.test.ts +0 -28
  324. package/src/components/visually-hidden/VisuallyHidden.ts +0 -16
  325. package/src/components/visually-hidden/leu-visually-hidden.ts +0 -11
  326. package/src/components/visually-hidden/stories/visually-hidden.stories.ts +0 -22
  327. package/src/components/visually-hidden/test/visually-hidden.test.ts +0 -34
  328. package/src/components/visually-hidden/visually-hidden.css +0 -10
  329. package/src/docs/contributing.mdx +0 -154
  330. package/src/docs/installation.mdx +0 -35
  331. package/src/docs/theme.mdx +0 -400
  332. package/src/docs/usage.mdx +0 -73
  333. package/src/global.d.ts +0 -11
  334. package/src/index.ts +0 -29
  335. package/src/lib/LeuElement.ts +0 -43
  336. package/src/lib/a11y.ts +0 -26
  337. package/src/lib/hasSlotController.ts +0 -74
  338. package/src/lib/mixins/FormAssociatedMixin.ts +0 -115
  339. package/src/lib/styleMap.ts +0 -139
  340. package/src/lib/utils.ts +0 -45
  341. package/src/styles/common-styles.css +0 -14
  342. package/src/styles/custom-media.css +0 -6
  343. package/src/styles/font-definitions.json +0 -210
  344. package/src/styles/style.stories.ts +0 -64
  345. package/src/styles/theme.css +0 -90
  346. package/stat_zh.png +0 -0
  347. package/stylelint.config.mjs +0 -23
  348. package/tsconfig.build.json +0 -24
  349. package/tsconfig.json +0 -14
  350. package/tsdown.config.ts +0 -35
  351. package/web-test-runner.config.mjs +0 -102
@@ -1,72 +0,0 @@
1
- import { html } from "lit"
2
- import "../leu-checkbox.js"
3
-
4
- export default {
5
- title: "Components/Checkbox",
6
- component: "leu-checkbox",
7
- argTypes: {
8
- label: {
9
- control: "text",
10
- },
11
- defaultChecked: {
12
- control: "boolean",
13
- },
14
- },
15
- parameters: {
16
- design: {
17
- type: "figma",
18
- url: "https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=17340-81935&mode=design&t=lzVrtq8lxYVJU5TB-11",
19
- },
20
- },
21
- }
22
-
23
- function Template({
24
- label = "Label",
25
- value,
26
- checked,
27
- defaultChecked,
28
- disabled,
29
- name = "",
30
- required,
31
- }) {
32
- return html`
33
- <leu-checkbox
34
- value=${value}
35
- .checked=${checked}
36
- ?checked=${defaultChecked}
37
- ?disabled=${disabled}
38
- name=${name}
39
- ?required=${required}
40
- >
41
- ${label}
42
- </leu-checkbox>
43
- `
44
- }
45
-
46
- export const Regular = Template.bind({})
47
-
48
- export const Checked = Template.bind({})
49
- Checked.args = {
50
- checked: true,
51
- }
52
-
53
- export const DefaultChecked = Template.bind({})
54
- DefaultChecked.args = {
55
- defaultChecked: true,
56
- }
57
-
58
- export const Disabled = Template.bind({})
59
- Disabled.args = {
60
- disabled: true,
61
- }
62
-
63
- export const CheckedDisabled = Template.bind({})
64
- CheckedDisabled.args = {
65
- checked: true,
66
- disabled: true,
67
- }
68
-
69
- export const Required = Template.bind({})
70
- Required.args = {
71
- required: true,
72
- }
@@ -1,109 +0,0 @@
1
- import { html } from "lit"
2
- import { fixture, expect } from "@open-wc/testing"
3
- import { sendKeys } from "@web/test-runner-commands"
4
-
5
- import "../leu-checkbox.js"
6
- import "../leu-checkbox-group.js"
7
-
8
- async function defaultFixture() {
9
- return fixture(html`
10
- <leu-checkbox-group>
11
- <leu-checkbox value="1" disabled>Option 1</leu-checkbox>
12
- <leu-checkbox value="2">Option 2</leu-checkbox>
13
- <leu-checkbox value="3">Option 3</leu-checkbox>
14
- </leu-checkbox-group>
15
- `)
16
- }
17
-
18
- async function checkedFixture() {
19
- return fixture(html`
20
- <leu-checkbox-group>
21
- <leu-checkbox value="1" disabled>Option 1</leu-checkbox>
22
- <leu-checkbox value="2" checked>Option 2</leu-checkbox>
23
- <leu-checkbox value="3">Option 3</leu-checkbox>
24
- </leu-checkbox-group>
25
- `)
26
- }
27
-
28
- describe("LeuCheckboxGroup", () => {
29
- it("is a defined element", async () => {
30
- const el = customElements.get("leu-checkbox-group")
31
-
32
- await expect(el).not.to.be.undefined
33
- })
34
-
35
- it("passes the a11y audit", async () => {
36
- const el = await defaultFixture()
37
-
38
- await expect(el).shadowDom.to.be.accessible()
39
- })
40
-
41
- it("has a default value of an empty array", async () => {
42
- const el = await defaultFixture()
43
-
44
- expect(el.value).to.deep.equal([])
45
- })
46
-
47
- it("updates the value when a checkbox is checked", async () => {
48
- const el = await defaultFixture()
49
- const leuCheckbox = el.querySelector('leu-checkbox[value="2"]')
50
- const checkbox = leuCheckbox.shadowRoot.querySelector("input")
51
-
52
- checkbox.click()
53
-
54
- expect(el.value).to.deep.equal(["2"])
55
- })
56
-
57
- it("allows multiple checkboxes to be checked", async () => {
58
- const el = await defaultFixture()
59
- const leuCheckbox2 = el.querySelector('leu-checkbox[value="2"]')
60
- const leuCheckbox3 = el.querySelector('leu-checkbox[value="3"]')
61
- const checkbox2 = leuCheckbox2.shadowRoot.querySelector("input")
62
- const checkbox3 = leuCheckbox3.shadowRoot.querySelector("input")
63
-
64
- checkbox2.click()
65
- checkbox3.click()
66
-
67
- expect(el.value).to.deep.equal(["2", "3"])
68
- })
69
-
70
- it("updates the value when a checkbox is unchecked", async () => {
71
- const el = await defaultFixture()
72
- const leuCheckbox = el.querySelector('leu-checkbox[value="2"]')
73
- const checkbox = leuCheckbox.shadowRoot.querySelector("input")
74
-
75
- checkbox.click()
76
- checkbox.click()
77
-
78
- expect(el.value).to.deep.equal([])
79
- })
80
-
81
- it("doesn't update the value when a disabled checkbox is clicked", async () => {
82
- const el = await defaultFixture()
83
- const leuCheckbox = el.querySelector('leu-checkbox[value="1"]')
84
- const checkbox = leuCheckbox.shadowRoot.querySelector("input")
85
-
86
- checkbox.click()
87
-
88
- expect(el.value).to.deep.equal([])
89
- })
90
-
91
- it("has a default value that reflects all checked checkboxes", async () => {
92
- const el = await checkedFixture()
93
-
94
- expect(el.value).to.deep.equal(["2"])
95
- })
96
-
97
- it("delegates focus to the first active checkbox", async () => {
98
- const el = await defaultFixture()
99
- const leuCheckbox = el.querySelector('leu-checkbox[value="2"]')
100
- const checkbox = leuCheckbox.shadowRoot.querySelector("input")
101
-
102
- await sendKeys({
103
- press: "Tab",
104
- })
105
-
106
- expect(document.activeElement).to.equal(leuCheckbox)
107
- expect(leuCheckbox.shadowRoot.activeElement).to.equal(checkbox)
108
- })
109
- })
@@ -1,247 +0,0 @@
1
- import { html } from "lit"
2
- import { fixture, expect, elementUpdated, oneEvent } from "@open-wc/testing"
3
- import { sendKeys } from "@web/test-runner-commands"
4
-
5
- import "../leu-checkbox.js"
6
- import type { LeuCheckbox } from "../leu-checkbox.js"
7
-
8
- async function defaultFixture() {
9
- return fixture<LeuCheckbox>(html`
10
- <leu-checkbox value="2">Das ist ein Label</leu-checkbox>
11
- `)
12
- }
13
-
14
- describe("LeuCheckbox", () => {
15
- it("is a defined element", async () => {
16
- const el = customElements.get("leu-checkbox")
17
-
18
- await expect(el).not.to.be.undefined
19
- })
20
-
21
- it("passes the a11y audit", async () => {
22
- const el = await defaultFixture()
23
-
24
- await expect(el).shadowDom.to.be.accessible()
25
- })
26
-
27
- it("is not checked by default", async () => {
28
- const el = await defaultFixture()
29
-
30
- expect(el.checked).to.be.false
31
- })
32
-
33
- it("toggles the checked property when clicked", async () => {
34
- const el = await defaultFixture()
35
- const checkbox = el.shadowRoot.querySelector("input")
36
- const label = el.shadowRoot.querySelector("label")
37
-
38
- checkbox.click()
39
- await elementUpdated(el)
40
-
41
- expect(el.checked).to.be.true
42
-
43
- label.click()
44
- await elementUpdated(el)
45
-
46
- expect(el.checked).to.be.false
47
- })
48
-
49
- it("does not toggle the checked property when disabled", async () => {
50
- const el = await defaultFixture()
51
- const checkbox = el.shadowRoot.querySelector("input")
52
- const label = el.shadowRoot.querySelector("label")
53
-
54
- el.disabled = true
55
- await elementUpdated(el)
56
-
57
- checkbox.click()
58
- await elementUpdated(el)
59
-
60
- expect(el.checked).to.be.false
61
-
62
- label.click()
63
- await elementUpdated(el)
64
-
65
- expect(el.checked).to.be.false
66
- })
67
-
68
- it("toggles the checked property when the space key is pressed", async () => {
69
- const el = await defaultFixture()
70
- el.focus()
71
-
72
- await sendKeys({
73
- press: "Space",
74
- })
75
-
76
- expect(el.checked).to.be.true
77
-
78
- await sendKeys({
79
- press: "Space",
80
- })
81
-
82
- expect(el.checked).to.be.false
83
- })
84
-
85
- it("fires a change event when clicked", async () => {
86
- const el = await defaultFixture()
87
- const checkbox = el.shadowRoot.querySelector("input")
88
-
89
- setTimeout(() => checkbox.click())
90
- const event = await oneEvent(el, "change", false)
91
-
92
- expect(event).to.exist
93
- })
94
-
95
- it("fires an input event when clicked", async () => {
96
- const el = await defaultFixture()
97
- const checkbox = el.shadowRoot.querySelector("input")
98
-
99
- setTimeout(() => checkbox.click())
100
- const event = await oneEvent(el, "input", false)
101
-
102
- expect(event).to.exist
103
- })
104
-
105
- it("appends the value to the form data when checked", async () => {
106
- const form = await fixture<HTMLFormElement>(html`
107
- <form>
108
- <leu-checkbox name="checkbox" value="2" checked></leu-checkbox>
109
- </form>
110
- `)
111
-
112
- const formData = new FormData(form)
113
- expect(formData.get("checkbox")).to.equal("2")
114
- })
115
-
116
- it("appends 'on' to the form data when checked and no value is set", async () => {
117
- const form = await fixture<HTMLFormElement>(html`
118
- <form>
119
- <leu-checkbox name="checkbox" checked></leu-checkbox>
120
- </form>
121
- `)
122
-
123
- let formData = new FormData(form)
124
- expect(formData.get("checkbox")).to.equal("on")
125
-
126
- const checkbox = form.querySelector<LeuCheckbox>("leu-checkbox")
127
- checkbox.value = ""
128
- await elementUpdated(checkbox)
129
-
130
- formData = new FormData(form)
131
- expect(formData.get("checkbox")).to.equal("")
132
- })
133
-
134
- it("does not append the value to the form data when unchecked", async () => {
135
- const form = await fixture<HTMLFormElement>(html`
136
- <form>
137
- <leu-checkbox name="checkbox" value="2"></leu-checkbox>
138
- </form>
139
- `)
140
-
141
- const formData = new FormData(form)
142
- expect(formData.get("checkbox")).to.be.null
143
- })
144
-
145
- it("does not append the value to the form data when disabled", async () => {
146
- const form = await fixture<HTMLFormElement>(html`
147
- <form>
148
- <leu-checkbox name="checkbox" value="2" checked disabled></leu-checkbox>
149
- </form>
150
- `)
151
-
152
- const formData = new FormData(form)
153
- expect(formData.get("checkbox")).to.be.null
154
- })
155
-
156
- it("resets to the default checked state when the form is reset", async () => {
157
- const form = await fixture<HTMLFormElement>(html`
158
- <form>
159
- <leu-checkbox name="checkbox" value="2" checked></leu-checkbox>
160
- <button type="reset">Reset</button>
161
- </form>
162
- `)
163
-
164
- const checkbox = form.querySelector<LeuCheckbox>("leu-checkbox")
165
- checkbox.checked = false
166
- await elementUpdated(checkbox)
167
-
168
- form.reset()
169
- await elementUpdated(checkbox)
170
-
171
- expect(checkbox.checked).to.be.true
172
- })
173
-
174
- it("updates the form data when the value and disabled state changes", async () => {
175
- const form = await fixture<HTMLFormElement>(html`
176
- <form>
177
- <leu-checkbox name="checkbox" value="2"></leu-checkbox>
178
- </form>
179
- `)
180
-
181
- const checkbox = form.querySelector<LeuCheckbox>("leu-checkbox")
182
- checkbox.checked = true
183
- await elementUpdated(checkbox)
184
-
185
- let formData = new FormData(form)
186
- expect(formData.get("checkbox")).to.equal("2")
187
-
188
- checkbox.value = "another_value"
189
- await elementUpdated(checkbox)
190
-
191
- formData = new FormData(form)
192
- expect(formData.get("checkbox")).to.be.equal("another_value")
193
-
194
- checkbox.disabled = true
195
- await elementUpdated(checkbox)
196
-
197
- formData = new FormData(form)
198
- expect(formData.get("checkbox")).to.be.null
199
- })
200
-
201
- it("updates the form data when the defaultChecked state changes before any interaction", async () => {
202
- const form = await fixture<HTMLFormElement>(html`
203
- <form>
204
- <leu-checkbox name="checkbox" value="2" checked></leu-checkbox>
205
- </form>
206
- `)
207
-
208
- // Reset the default value to unchecked. Should have an effect since the user has not interacted with the checkbox yet.
209
- const checkbox = form.querySelector<LeuCheckbox>("leu-checkbox")
210
- checkbox.defaultChecked = false
211
- await elementUpdated(checkbox)
212
-
213
- let formData = new FormData(form)
214
- expect(formData.get("checkbox")).to.be.null
215
-
216
- // Simulate user interaction by clicking the checkbox, which should check it and update the form data.
217
- const innerCheckbox =
218
- checkbox.shadowRoot.querySelector<HTMLInputElement>("input")
219
- innerCheckbox.click()
220
-
221
- await elementUpdated(checkbox)
222
-
223
- formData = new FormData(form)
224
- expect(formData.get("checkbox")).to.equal("2")
225
-
226
- // This change of defaultChecked should not have an effect since the user has already interacted with the checkbox.
227
- checkbox.defaultChecked = true
228
- checkbox.checked = false
229
- await elementUpdated(checkbox)
230
-
231
- formData = new FormData(form)
232
- expect(formData.get("checkbox")).to.be.null
233
- })
234
-
235
- it("should be invalid when the required attribute is set and not checked", async () => {
236
- const form = await fixture<HTMLFormElement>(html`
237
- <form>
238
- <leu-checkbox name="checkbox" value="2" required></leu-checkbox>
239
- </form>
240
- `)
241
-
242
- const checkbox = form.querySelector<LeuCheckbox>("leu-checkbox")
243
-
244
- expect(checkbox.validity.valid).to.be.false
245
- expect(form.checkValidity()).to.be.false
246
- })
247
- })
@@ -1,19 +0,0 @@
1
- import { property } from "lit/decorators.js"
2
- import { LeuElement } from "../../lib/LeuElement.js"
3
-
4
- import styles from "./chip.css?inline"
5
-
6
- /* Design: https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=21161-184433&mode=design&t=Kjo5VDiqivihn8dh-11 */
7
-
8
- export class LeuChipBase extends LeuElement {
9
- static styles = [LeuElement.styles, styles]
10
-
11
- /** @internal */
12
- static shadowRootOptions = {
13
- ...LeuElement.shadowRootOptions,
14
- delegatesFocus: true,
15
- }
16
-
17
- @property({ type: Boolean, reflect: true })
18
- inverted: boolean = false
19
- }
@@ -1,122 +0,0 @@
1
- import { html, unsafeStatic } from "lit/static-html.js"
2
- import { property } from "lit/decorators.js"
3
-
4
- import { LeuElement } from "../../lib/LeuElement.js"
5
-
6
- import styles from "./chip-group.css?inline"
7
- import { LeuChipSelectable } from "./ChipSelectable.js"
8
-
9
- /**
10
- * @slot - Place leu-chip-* elements inside this slot
11
- * @cssproperty --leu-chip-group-gap - The gap between the chips
12
- * @tagname leu-chip-group
13
- */
14
- export class LeuChipGroup extends LeuElement {
15
- static styles = [LeuElement.styles, styles]
16
-
17
- @property({ type: Boolean, reflect: true })
18
- inverted: boolean = false
19
-
20
- @property({ type: String, attribute: "selection-mode", reflect: true })
21
- selectionMode: "single" | "multiple" | "none" = "none"
22
-
23
- @property({ type: Number, attribute: "heading-level", reflect: true })
24
- headingLevel: number = 2
25
-
26
- @property({ type: String, reflect: true })
27
- label: string = ""
28
-
29
- protected selectableItems: Array<LeuChipSelectable> = []
30
-
31
- connectedCallback() {
32
- super.connectedCallback()
33
-
34
- /**
35
- * It is technically possible to add an event listener to the host element
36
- * before it is connected to the dom. In that case the outside event listener would
37
- * be called before the following event listener. But at this point multiple
38
- * radio chips could be selected at the same time because `handleInput` hasn't been
39
- * called yet. That's why we use the capture phase.
40
- */
41
- this.addEventListener("input", this.handleInput, { capture: true })
42
- }
43
-
44
- disconnectedCallback() {
45
- super.disconnectedCallback()
46
-
47
- this.removeEventListener("input", this.handleInput, { capture: true })
48
- }
49
-
50
- get value() {
51
- return this.selectableItems
52
- .filter((i) => i.checked)
53
- .map((i) => i.getValue())
54
- }
55
-
56
- /**
57
- * Checks the items with the given values.
58
- * If the selectionMode is single, only the first item with the given value is checked.
59
- */
60
- set value(valueList: string[]) {
61
- let hasChanged = false
62
-
63
- for (const item of this.selectableItems) {
64
- item.checked = hasChanged ? false : valueList.includes(item.value)
65
-
66
- if (this.selectionMode === "single" && item.checked) {
67
- hasChanged = true
68
- }
69
- }
70
- }
71
-
72
- /**
73
- * Determines the heading tag of the accordion toggle.
74
- * The headingLevel shouldn't be used directly to render the heading tag
75
- * in order to avoid XSS issues.
76
- * @internal
77
- */
78
- protected _getHeadingTag() {
79
- let level = 2
80
- if (this.headingLevel > 0 && this.headingLevel < 7) {
81
- level = this.headingLevel
82
- }
83
-
84
- return `h${level}`
85
- }
86
-
87
- protected handleInput = (e: Event & { target: LeuChipSelectable }) => {
88
- if (this.selectionMode === "single") {
89
- this.selectableItems.forEach((item) => {
90
- item.checked = item === e.target
91
- })
92
- }
93
- }
94
-
95
- protected handleSlotChange = (e: Event & { target: HTMLSlotElement }) => {
96
- const slot = e.target
97
- const items = slot
98
- .assignedElements({ flatten: true })
99
- .filter((el) => el instanceof LeuChipSelectable)
100
-
101
- this.selectableItems = items
102
- }
103
-
104
- render() {
105
- const hTag = this._getHeadingTag()
106
-
107
- /* The eslint rules don't recognize html import from lit/static-html.js */
108
- /* eslint-disable lit/binding-positions, lit/no-invalid-html */
109
- return html`
110
- ${this.label
111
- ? html`<${unsafeStatic(hTag)} class="label">
112
- <span class="label">${this.label}</span>
113
- </${unsafeStatic(hTag)}>`
114
- : ""}
115
- <slot
116
- class="group"
117
- part="group"
118
- @slotchange=${this.handleSlotChange}
119
- ></slot>
120
- `
121
- }
122
- }
@@ -1,24 +0,0 @@
1
- import { html } from "lit"
2
- import { property } from "lit/decorators.js"
3
-
4
- import { LeuChipBase } from "./Chip.js"
5
-
6
- /**
7
- * @tagname leu-chip-link
8
- * @slot - The content of the chip
9
- */
10
- export class LeuChipLink extends LeuChipBase {
11
- /** The size of the chip */
12
- @property({ type: String, reflect: true })
13
- size: "regular" | "large" = "regular"
14
-
15
- /** The URL that the chip links to */
16
- @property({ type: String, reflect: true })
17
- href: string = ""
18
-
19
- render() {
20
- return html`<a href=${this.href} class="button">
21
- <span class="label"><slot></slot></span>
22
- </a>`
23
- }
24
- }
@@ -1,45 +0,0 @@
1
- import { html } from "lit"
2
- import { property } from "lit/decorators.js"
3
-
4
- import { LeuChipBase } from "./Chip.js"
5
- import { LeuIcon } from "../icon/Icon.js"
6
-
7
- /**
8
- * @slot - The content of the chip
9
- * @tagname leu-chip-removable
10
- * @fires remove - Dispatched when the user clicks on the chip
11
- * @prop {string} value - The value of the chip.
12
- */
13
- export class LeuChipRemovable extends LeuChipBase {
14
- static dependencies = {
15
- "leu-icon": LeuIcon,
16
- }
17
-
18
- @property({ type: String, reflect: true })
19
- value: string = ""
20
-
21
- /**
22
- * Returns the value of the chip. If `value` is not set, it will return the text content
23
- */
24
- getValue() {
25
- return this.value || this.textContent.trim()
26
- }
27
-
28
- protected handleClick() {
29
- const customEvent = new CustomEvent("leu:remove", {
30
- bubbles: true,
31
- composed: true,
32
- detail: {
33
- value: this.getValue(),
34
- },
35
- })
36
- this.dispatchEvent(customEvent)
37
- }
38
-
39
- render() {
40
- return html`<button @click=${(e) => this.handleClick(e)} class="button">
41
- <span class="label"><slot></slot></span>
42
- <leu-icon name="close" class="icon"></leu-icon>
43
- </button>`
44
- }
45
- }