@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,78 +0,0 @@
1
- import { html, nothing } from "lit"
2
- import { property } from "lit/decorators.js"
3
-
4
- import { LeuElement } from "../../lib/LeuElement.js"
5
-
6
- import styles from "./chart-wrapper.css?inline"
7
- import { HasSlotController } from "../../lib/hasSlotController.js"
8
- import { LeuSpinner } from "../spinner/Spinner.js"
9
-
10
- /**
11
- * A wrapper element for charts.
12
- * @tagname leu-chart-wrapper
13
- * @slot title - The title of the chart. Use a heading tag (h2-4) depending on your context.
14
- * @slot description - A description of the chart. Content is wrapped in a `<p>` tag by the component.
15
- * @slot chart - The actual chart
16
- * @slot caption - A caption for the chart, e.g. a source or explanation of the data.
17
- * @slot download - A download button or dropdown to export the chart in different formats.
18
- */
19
- export class LeuChartWrapper extends LeuElement {
20
- static styles = [LeuElement.styles, styles]
21
-
22
- static shadowRootOptions = {
23
- ...LeuElement.shadowRootOptions,
24
- delegatesFocus: true,
25
- }
26
-
27
- static dependencies = {
28
- "leu-spinner": LeuSpinner,
29
- }
30
-
31
- /**
32
- * Whether the chart is currently loading or not.
33
- * When set to `true`, a spinner will be shown in the chart container.
34
- */
35
- @property({ type: Boolean, reflect: true })
36
- pending: boolean = false
37
-
38
- hasSlotController = new HasSlotController(this, [
39
- "description",
40
- "caption",
41
- "download",
42
- ])
43
-
44
- render() {
45
- const hasDescription = this.hasSlotController.test("description")
46
- const hasCaption = this.hasSlotController.test("caption")
47
- const hasDownload = this.hasSlotController.test("download")
48
-
49
- return html`
50
- <figure class="chart-wrapper">
51
- <slot name="title" class="chart-wrapper__title"></slot>
52
- ${hasDescription
53
- ? html`<slot
54
- name="description"
55
- class="chart-wrapper__description"
56
- ></slot>`
57
- : nothing}
58
- <div class="chart-wrapper__container">
59
- <slot name="chart" class="chart-wrapper__chart"></slot>
60
- ${this.pending
61
- ? html`<div class="chart-wrapper__spinner-container">
62
- <leu-spinner class="chart-wrapper__spinner"></leu-spinner>
63
- </div>`
64
- : nothing}
65
- </div>
66
- ${hasCaption
67
- ? html`<figcaption>
68
- <slot name="caption" class="chart-wrapper__caption"></slot>
69
- </figcaption>`
70
- : nothing}
71
- <hr class="chart-wrapper__ruler" />
72
- ${hasDownload
73
- ? html`<slot name="download" class="chart-wrapper__download"></slot>`
74
- : nothing}
75
- </figure>
76
- `
77
- }
78
- }
@@ -1,87 +0,0 @@
1
- @import url("../../styles/custom-media.css");
2
-
3
- .chart-wrapper {
4
- display: block;
5
- width: 100%;
6
- margin: 0;
7
- }
8
-
9
- .chart-wrapper__title::slotted(h2) {
10
- color: var(--leu-color-black-100);
11
- font: var(--leu-t-curve-large-black-font);
12
- margin: 0 0 0.75rem;
13
-
14
- @media (--viewport-medium) {
15
- margin: 0 0 1.25rem;
16
- }
17
-
18
- @media (--viewport-xlarge) {
19
- margin: 0 0 1.5rem;
20
- }
21
- }
22
-
23
- .chart-wrapper__title::slotted(h3) {
24
- color: var(--leu-color-black-100);
25
- font: var(--leu-t-curve-medium-black-font);
26
- margin: 0 0 0.5rem;
27
- }
28
-
29
- .chart-wrapper__title::slotted(h4) {
30
- color: var(--leu-color-black-100);
31
- font: var(--leu-t-curve-regular-black-font);
32
- margin: 0 0 0.5rem;
33
- }
34
-
35
- .chart-wrapper__description,
36
- .chart-wrapper__chart {
37
- display: block;
38
- margin-bottom: 0.75rem;
39
-
40
- @media (--viewport-medium) {
41
- margin-bottom: 1.25rem;
42
- }
43
-
44
- @media (--viewport-xlarge) {
45
- margin-bottom: 1.5rem;
46
- }
47
- }
48
-
49
- .chart-wrapper__description {
50
- font: var(--leu-t-curve-small-regular-font);
51
- color: var(--leu-color-black-60);
52
- }
53
-
54
- .chart-wrapper__caption {
55
- font: var(--leu-t-curve-tiny-regular-font);
56
- color: var(--leu-color-black-60);
57
- }
58
-
59
- .chart-wrapper__ruler {
60
- display: block;
61
- border: none;
62
- border-top: 1px solid var(--leu-color-black-transp-20);
63
- margin: 0.75rem 0;
64
-
65
- @media (--viewport-xlarge) {
66
- margin-block: 1rem;
67
- }
68
- }
69
-
70
- .chart-wrapper__download {
71
- display: block;
72
- margin-left: -0.5rem;
73
- }
74
-
75
- .chart-wrapper__container {
76
- position: relative;
77
- }
78
-
79
- .chart-wrapper__spinner-container {
80
- position: absolute;
81
- top: 0;
82
- left: 0;
83
- width: 100%;
84
- height: 100%;
85
- display: grid;
86
- place-content: center;
87
- }
@@ -1,11 +0,0 @@
1
- import { LeuChartWrapper } from "./ChartWrapper.js"
2
-
3
- export { LeuChartWrapper }
4
-
5
- LeuChartWrapper.define("leu-chart-wrapper")
6
-
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- "leu-chart-wrapper": LeuChartWrapper
10
- }
11
- }
@@ -1,58 +0,0 @@
1
- import { Meta, StoryObj } from "@storybook/web-components-vite"
2
- import { html } from "lit"
3
-
4
- import "../../dropdown/leu-dropdown.js"
5
- import "../leu-chart-wrapper.js"
6
- import { LeuChartWrapper } from "../ChartWrapper.js"
7
-
8
- type StoryArgs = LeuChartWrapper
9
- type Story = StoryObj<StoryArgs>
10
-
11
- export default {
12
- title: "Components/ChartWrapper",
13
- component: "leu-chart-wrapper",
14
- } satisfies Meta<StoryArgs>
15
-
16
- const Template: Story = {
17
- render: ({ pending }) =>
18
- html`<leu-chart-wrapper ?pending=${pending}>
19
- <h2 slot="title">Entwicklung der Leerwohnungsziffer seit 1984</h2>
20
- <span slot="description">Leerwohnungsziffer, in Prozent</span>
21
- <img
22
- style="display: block; width: 100%; height: auto;"
23
- slot="chart"
24
- src="https://placehold.co/1200x400"
25
- alt="A placeholder to indicate where a chart would appear"
26
- />
27
- <span slot="caption">Quelle: Statistisches Amt des Kantons Zürich</span>
28
- <leu-dropdown slot="download" label="Download">
29
- <leu-icon name="download" slot="icon"></leu-icon>
30
- <leu-menu>
31
- <leu-menu-item
32
- href="https://www.web.statistik.zh.ch/ogd/daten/ressourcen/KTZH_00001120_00002165.csv"
33
- >OGD Ressource</leu-menu-item
34
- >
35
- <leu-menu-item>Als CSV Tabelle</leu-menu-item>
36
- <leu-menu-item>Als XLS Tabelle</leu-menu-item>
37
- <hr />
38
- <leu-menu-item>Als PNG exportieren</leu-menu-item>
39
- <leu-menu-item>Als SVG exportieren</leu-menu-item>
40
- <leu-menu-item disabled>Als PDF exportieren</leu-menu-item>
41
- </leu-menu>
42
- </leu-dropdown>
43
- </leu-chart-wrapper>`,
44
- }
45
-
46
- export const Regular = {
47
- ...Template,
48
- args: {
49
- pending: false,
50
- },
51
- }
52
-
53
- export const Pending = {
54
- ...Template,
55
- args: {
56
- pending: true,
57
- },
58
- }
@@ -1,77 +0,0 @@
1
- import { html } from "lit"
2
- import { fixture, expect } from "@open-wc/testing"
3
-
4
- import "../leu-chart-wrapper.js"
5
-
6
- async function defaultFixture({ pending = false } = {}) {
7
- return fixture(
8
- html`<leu-chart-wrapper ?pending=${pending}>
9
- <h2 slot="title">Entwicklung der Leerwohnungsziffer seit 1984</h2>
10
- <span slot="description">Leerwohnungsziffer, in Prozent</span>
11
- <img
12
- style="display: block; width: 100%; height: auto;"
13
- slot="chart"
14
- src="https://placehold.co/1200x400"
15
- alt="A placeholder to indicate where a chart would appear"
16
- />
17
- <span slot="caption">Quelle: Statistisches Amt des Kantons Zürich</span>
18
- <leu-dropdown slot="download" label="Download">
19
- <leu-icon name="download" slot="icon"></leu-icon>
20
- <leu-menu>
21
- <leu-menu-item
22
- href="https://www.web.statistik.zh.ch/ogd/daten/ressourcen/KTZH_00001120_00002165.csv"
23
- >OGD Ressource</leu-menu-item
24
- >
25
- <leu-menu-item>Als CSV Tabelle</leu-menu-item>
26
- <leu-menu-item>Als XLS Tabelle</leu-menu-item>
27
- <hr />
28
- <leu-menu-item>Als PNG exportieren</leu-menu-item>
29
- <leu-menu-item>Als SVG exportieren</leu-menu-item>
30
- <leu-menu-item disabled>Als PDF exportieren</leu-menu-item>
31
- </leu-menu>
32
- </leu-dropdown>
33
- </leu-chart-wrapper>`,
34
- )
35
- }
36
-
37
- describe("LeuChartWrapper", () => {
38
- it("is a defined element", async () => {
39
- const el = await customElements.get("leu-chart-wrapper")
40
-
41
- await expect(el).not.to.be.undefined
42
- })
43
-
44
- it("passes the a11y audit", async () => {
45
- const el = await defaultFixture()
46
-
47
- await expect(el).shadowDom.to.be.accessible()
48
- })
49
-
50
- it("conditionally renders slots", async () => {
51
- let el = await defaultFixture()
52
-
53
- expect(el.shadowRoot.querySelector(".chart-wrapper__description")).to.exist
54
- expect(el.shadowRoot.querySelector(".chart-wrapper__caption")).to.exist
55
- expect(el.shadowRoot.querySelector(".chart-wrapper__download")).to.exist
56
-
57
- el = await fixture(html`<leu-chart-wrapper></leu-chart-wrapper>`)
58
-
59
- expect(el.shadowRoot.querySelector(".chart-wrapper__description")).not.to
60
- .exist
61
- expect(el.shadowRoot.querySelector(".chart-wrapper__caption")).not.to.exist
62
- expect(el.shadowRoot.querySelector(".chart-wrapper__download")).not.to.exist
63
-
64
- // Check that the title and chart slots are always present
65
- expect(el.shadowRoot.querySelector(".chart-wrapper__title")).to.exist
66
- expect(el.shadowRoot.querySelector(".chart-wrapper__chart")).to.exist
67
- })
68
-
69
- it("shows a spinner when pending is set", async () => {
70
- const el = await defaultFixture({ pending: true })
71
-
72
- expect(el.shadowRoot.querySelector(".chart-wrapper__spinner-container")).to
73
- .exist
74
- expect(el.shadowRoot.querySelector("leu-spinner.chart-wrapper__spinner")).to
75
- .exist
76
- })
77
- })
@@ -1,129 +0,0 @@
1
- import { html, PropertyValues } from "lit"
2
- import { property } from "lit/decorators.js"
3
-
4
- import { LeuElement } from "../../lib/LeuElement.js"
5
- import { FormAssociatedMixin } from "../../lib/mixins/FormAssociatedMixin.js"
6
- import { LeuIcon } from "../icon/Icon.js"
7
-
8
- import styles from "./checkbox.css?inline"
9
-
10
- /**
11
- * @tagname leu-checkbox
12
- */
13
- export class LeuCheckbox extends FormAssociatedMixin(LeuElement) {
14
- static dependencies = {
15
- "leu-icon": LeuIcon,
16
- }
17
-
18
- static styles = [LeuElement.styles, styles]
19
-
20
- /** @internal */
21
- static shadowRootOptions = {
22
- ...LeuElement.shadowRootOptions,
23
- delegatesFocus: true,
24
- }
25
-
26
- @property({ type: Boolean, reflect: true })
27
- required: boolean = false
28
-
29
- @property({ type: Boolean, reflect: true, attribute: "checked" })
30
- defaultChecked: boolean = false
31
-
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
- }
46
-
47
- @property({ type: String, reflect: true })
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
- }
76
-
77
- private handleChange(event: Event & { target: HTMLInputElement }) {
78
- this.hasInteracted = true
79
- this.checked = event.target.checked
80
-
81
- const customEvent = new CustomEvent(event.type, event)
82
- this.dispatchEvent(customEvent)
83
- }
84
-
85
- private handleInput(event: InputEvent & { target: HTMLInputElement }) {
86
- this.hasInteracted = true
87
- this.checked = event.target.checked
88
- }
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
-
111
- render() {
112
- return html`
113
- <input
114
- id="checkbox"
115
- class="checkbox"
116
- type="checkbox"
117
- name="${this.name}"
118
- @change=${this.handleChange}
119
- @input=${this.handleInput}
120
- .checked=${this.checked}
121
- ?disabled=${this.disabled}
122
- .value=${this.value}
123
- ?required=${this.required}
124
- />
125
- <label for="checkbox" class="label"><slot></slot></label>
126
- <leu-icon class="icon" name="check"></leu-icon>
127
- `
128
- }
129
- }
@@ -1,57 +0,0 @@
1
- import { html } from "lit"
2
- import { classMap } from "lit/directives/class-map.js"
3
- import { property } from "lit/decorators.js"
4
-
5
- import { LeuElement } from "../../lib/LeuElement.js"
6
-
7
- import styles from "./checkbox-group.css?inline"
8
- import { LeuCheckbox } from "./Checkbox.js"
9
-
10
- /**
11
- *
12
- * @slot - Place the checkboxes inside the default slot.
13
- * @tagname leu-checkbox-group
14
- */
15
- export class LeuCheckboxGroup extends LeuElement {
16
- static styles = [LeuElement.styles, styles]
17
-
18
- /**
19
- * Defines how the checkboxes should be aligned.
20
- */
21
- @property({ type: String, reflect: true })
22
- orientation: "horizontal" | "vertical" = "horizontal"
23
-
24
- /**
25
- * The label of the checkbox group
26
- */
27
- @property({ type: String, reflect: true })
28
- label?: string
29
-
30
- private items: LeuCheckbox[] = []
31
-
32
- get value() {
33
- return this.items.filter((i) => i.checked).map((i) => i.value)
34
- }
35
-
36
- private handleSlotChange() {
37
- this.items = Array.from(
38
- this.querySelectorAll(":scope > *:not([slot])"),
39
- ).filter((el) => el instanceof LeuCheckbox)
40
- }
41
-
42
- render() {
43
- const fieldsetClasses = {
44
- fieldset: "true",
45
- "fieldset--vertical": this.orientation === "vertical",
46
- }
47
-
48
- return html`
49
- <fieldset class=${classMap(fieldsetClasses)}>
50
- ${this.label
51
- ? html`<legend class="legend">${this.label}</legend>`
52
- : html``}
53
- <slot @slotchange=${this.handleSlotChange}></slot>
54
- </fieldset>
55
- `
56
- }
57
- }
@@ -1,29 +0,0 @@
1
- :host {
2
- --group-font-regular: var(--leu-font-family-regular);
3
- --group-font-black: var(--leu-font-family-black);
4
-
5
- font-family: var(--group-font-regular);
6
- }
7
-
8
- .fieldset {
9
- display: flex;
10
- align-items: flex-start;
11
- flex-wrap: wrap;
12
- gap: 0.5rem 1rem;
13
-
14
- border: none;
15
- padding: 0;
16
- }
17
-
18
- .fieldset--vertical {
19
- flex-direction: column;
20
- gap: 1rem;
21
- }
22
-
23
- .legend {
24
- font-family: var(--group-font-black);
25
- font-size: 1.125rem;
26
- line-height: 1.5;
27
-
28
- margin-bottom: 0.5rem;
29
- }
@@ -1,81 +0,0 @@
1
- :host {
2
- --checkbox-color: var(--leu-color-black-40);
3
- --checkbox-color-disabled: var(--leu-color-black-20);
4
- --checkbox-color-focus: var(--leu-color-func-cyan);
5
-
6
- --checkbox-label-color: var(--leu-color-black-100);
7
- --checkbox-label-color-disabled: var(--checkbox-color-disabled);
8
-
9
- --checkbox-tick-color: var(--leu-color-black-0);
10
-
11
- --checkbox-font-regular: var(--leu-font-family-regular);
12
-
13
- position: relative;
14
-
15
- display: inline-flex;
16
- align-items: flex-start;
17
- gap: 0.5rem;
18
-
19
- font-family: var(--checkbox-font-regular);
20
- }
21
-
22
- .checkbox {
23
- --_length: 1.5rem;
24
- appearance: none;
25
- cursor: pointer;
26
-
27
- width: var(--_length);
28
- height: var(--_length);
29
- margin: 0;
30
-
31
- border: 2px solid var(--checkbox-color);
32
- border-radius: 2px;
33
-
34
- flex: 1 0 var(--_length);
35
-
36
- display: grid;
37
- place-items: center;
38
- }
39
-
40
- .checkbox:checked {
41
- background-color: var(--checkbox-color);
42
- }
43
-
44
- .checkbox:is(:hover, :checked, :focus) {
45
- --checkbox-color: var(--checkbox-color-focus);
46
- }
47
-
48
- .checkbox:focus-visible {
49
- outline: 2px solid var(--checkbox-color-focus);
50
- outline-offset: 2px;
51
- }
52
-
53
- .checkbox:disabled {
54
- --checkbox-color: var(--checkbox-color-disabled);
55
- cursor: not-allowed;
56
- }
57
-
58
- .label {
59
- cursor: pointer;
60
- color: var(--checkbox-label-color);
61
- font-size: 1rem;
62
- line-height: 1.5;
63
- }
64
-
65
- .checkbox:disabled + .label {
66
- --checkbox-label-color: var(--checkbox-label-color-disabled);
67
- cursor: not-allowed;
68
- }
69
-
70
- .checkbox:required + .label::after {
71
- content: "*";
72
- }
73
-
74
- .icon {
75
- position: absolute;
76
- display: block;
77
- top: 0;
78
- left: 0;
79
- color: var(--checkbox-tick-color);
80
- pointer-events: none;
81
- }
@@ -1,11 +0,0 @@
1
- import { LeuCheckboxGroup } from "./CheckboxGroup.js"
2
-
3
- export { LeuCheckboxGroup }
4
-
5
- LeuCheckboxGroup.define("leu-checkbox-group")
6
-
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- "leu-checkbox-group": LeuCheckboxGroup
10
- }
11
- }
@@ -1,11 +0,0 @@
1
- import { LeuCheckbox } from "./Checkbox.js"
2
-
3
- export { LeuCheckbox }
4
-
5
- LeuCheckbox.define("leu-checkbox")
6
-
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- "leu-checkbox": LeuCheckbox
10
- }
11
- }
@@ -1,59 +0,0 @@
1
- import { html } from "lit"
2
- import "../leu-checkbox.js"
3
- import "../leu-checkbox-group.js"
4
- import { ifDefined } from "lit/directives/if-defined.js"
5
-
6
- export default {
7
- title: "Components/Checkbox/Group",
8
- component: "leu-checkbox-group",
9
- argTypes: {
10
- legend: { control: "text" },
11
- orientation: {
12
- options: ["vertical", "horizontal"],
13
- control: { type: "checkbox" },
14
- },
15
- },
16
- parameters: {
17
- design: {
18
- type: "figma",
19
- url: "https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=17340-81935&mode=design&t=lzVrtq8lxYVJU5TB-11",
20
- },
21
- },
22
- }
23
-
24
- function Template({ label, orientation }) {
25
- return html`
26
- <leu-checkbox-group
27
- orientation=${ifDefined(orientation)}
28
- label=${ifDefined(label)}
29
- >
30
- <leu-checkbox value="1" name="checkbox-button" disabled
31
- >Kurz</leu-checkbox
32
- >
33
- <leu-checkbox value="2" name="checkbox-button">Etwas Länger</leu-checkbox>
34
- <leu-checkbox value="3" name="checkbox-button" disabled
35
- >Deaktiviert dazwischen</leu-checkbox
36
- >
37
- <leu-checkbox value="4" name="checkbox-button"
38
- >Ein langes Label um sicher ein umbruch zu erzwingen</leu-checkbox
39
- >
40
- </leu-checkbox-group>
41
- `
42
- }
43
-
44
- export const Horizontal = Template.bind({})
45
- export const HorizontalLabel = Template.bind({})
46
- HorizontalLabel.args = {
47
- label: "Anrede",
48
- }
49
-
50
- export const Vertical = Template.bind({})
51
- Vertical.args = {
52
- orientation: "vertical",
53
- }
54
-
55
- export const VerticalLabel = Template.bind({})
56
- VerticalLabel.args = {
57
- orientation: "vertical",
58
- label: "Anrede",
59
- }