@statistikzh/leu 0.28.0 → 0.28.2

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 (346) hide show
  1. package/dist/{Accordion-D9kLsiBW.js → Accordion-CaDTUDJG.js} +1 -1
  2. package/dist/Accordion.js +2 -2
  3. package/dist/{Button-DyNVOHCd.js → Button-BF3_6xgs.js} +3 -3
  4. package/dist/Button.js +4 -4
  5. package/dist/{ButtonGroup-MEh4vb5a.js → ButtonGroup-grJiWGHI.js} +2 -2
  6. package/dist/ButtonGroup.js +5 -5
  7. package/dist/{ChartWrapper-DAl91BIN.js → ChartWrapper-CeolXijF.js} +2 -2
  8. package/dist/ChartWrapper.js +3 -3
  9. package/dist/{Checkbox-CGGyUW9U.js → Checkbox-DGUZ1XtB.js} +2 -2
  10. package/dist/Checkbox.js +3 -3
  11. package/dist/{CheckboxGroup-DXt5iMdj.js → CheckboxGroup-CGdyk_RP.js} +2 -2
  12. package/dist/CheckboxGroup.js +4 -4
  13. package/dist/{Chip-BGs71WGH.js → Chip-BpKH3_Nk.js} +1 -1
  14. package/dist/Chip.js +2 -2
  15. package/dist/{ChipGroup-BcGyusP-.js → ChipGroup-dSAMpfy1.js} +1 -1
  16. package/dist/ChipGroup.js +3 -3
  17. package/dist/ChipLink.js +2 -2
  18. package/dist/ChipRemovable.js +3 -3
  19. package/dist/ChipSelectable.js +2 -2
  20. package/dist/{Dialog-BzuyL1U3.js → Dialog-CC674l80.js} +2 -2
  21. package/dist/Dialog.js +3 -3
  22. package/dist/{Dropdown-plyBTM15.js → Dropdown-B9YTM5N_.js} +5 -5
  23. package/dist/Dropdown.d.ts +2 -2
  24. package/dist/Dropdown.js +8 -8
  25. package/dist/{FileInput-BT3Fe-0J.js → FileInput-D4kyWFkL.js} +8 -6
  26. package/dist/FileInput.d.ts +1 -1
  27. package/dist/FileInput.js +6 -6
  28. package/dist/{Icon-D83qesg5.js → Icon-DOcb_NlX.js} +1 -1
  29. package/dist/Icon.js +2 -2
  30. package/dist/{Input-D7zS50oz.js → Input-6Xu1N2sA.js} +2 -2
  31. package/dist/Input.js +3 -3
  32. package/dist/{LeuElement-DQI8cqZV.js → LeuElement-C3HedxlQ.js} +1 -1
  33. package/dist/{Menu-DRU1LiMM.js → Menu-CJtyuUvP.js} +2 -2
  34. package/dist/{Menu-Z2b7dsB5.d.ts → Menu-txbYINTW.d.ts} +1 -1
  35. package/dist/Menu.d.ts +1 -1
  36. package/dist/Menu.js +4 -4
  37. package/dist/{MenuItem-LY4TRIho.d.ts → MenuItem-9TTOrL0Z.d.ts} +1 -1
  38. package/dist/{MenuItem-DCttylRO.js → MenuItem-ClSE3auh.js} +2 -2
  39. package/dist/MenuItem.d.ts +1 -1
  40. package/dist/MenuItem.js +3 -3
  41. package/dist/{Message-0NxnKEqw.js → Message-C55ydBaU.js} +2 -2
  42. package/dist/Message.js +3 -3
  43. package/dist/{Pagination-CIy7YvWE.js → Pagination-BVwKLcd5.js} +4 -4
  44. package/dist/Pagination.js +6 -6
  45. package/dist/{Placeholder-Dol_X5Hp.js → Placeholder-DFNppiVf.js} +1 -1
  46. package/dist/Placeholder.js +2 -2
  47. package/dist/{Popup-nJrJHGSy.js → Popup-D91ZiFWh.js} +1 -1
  48. package/dist/Popup.js +2 -2
  49. package/dist/{ProgressBar-Dmq9veqU.js → ProgressBar-DQGO2we8.js} +1 -1
  50. package/dist/ProgressBar.js +2 -2
  51. package/dist/{Radio-W5ck_IJI.js → Radio-BetZNoUQ.js} +1 -1
  52. package/dist/Radio.js +2 -2
  53. package/dist/{RadioGroup-De5x2YCO.js → RadioGroup-DzW5z_SD.js} +2 -2
  54. package/dist/RadioGroup.js +3 -3
  55. package/dist/{Range-NCdfDkeD.js → Range-9ijUzrty.js} +1 -1
  56. package/dist/Range.js +2 -2
  57. package/dist/{ScrollTop-DwcNIKmN.js → ScrollTop-uDL4K_C6.js} +3 -3
  58. package/dist/ScrollTop.js +5 -5
  59. package/dist/{Select-Bpicra9q.js → Select-ClGNTYfp.js} +7 -7
  60. package/dist/Select.d.ts +2 -2
  61. package/dist/Select.js +9 -9
  62. package/dist/{Spinner-BBiVZxFH.js → Spinner-B7ikVfUZ.js} +1 -1
  63. package/dist/Spinner.js +2 -2
  64. package/dist/{Tab-Ce9nrDok.js → Tab-CSHR71IX.js} +1 -1
  65. package/dist/Tab.js +2 -2
  66. package/dist/{TabGroup-C-cd4Wcx.js → TabGroup-D7YbKXm8.js} +3 -3
  67. package/dist/TabGroup.js +4 -4
  68. package/dist/{TabPanel-BW1ydVBT.js → TabPanel-D_RHF3lv.js} +1 -1
  69. package/dist/TabPanel.js +2 -2
  70. package/dist/{Table-DiYqIzBu.js → Table-CdosaNFb.js} +3 -3
  71. package/dist/Table.js +7 -7
  72. package/dist/{Tag-Ct8Hhv7W.js → Tag-BQBgkkAs.js} +1 -1
  73. package/dist/Tag.js +2 -2
  74. package/dist/{VisuallyHidden-CpYXyuC7.js → VisuallyHidden-CEBTA6hv.js} +1 -1
  75. package/dist/VisuallyHidden.js +2 -2
  76. package/dist/custom-elements.json +6445 -0
  77. package/dist/index.d.ts +2 -2
  78. package/dist/index.js +30 -30
  79. package/dist/leu-accordion.js +2 -2
  80. package/dist/leu-button-group.js +5 -5
  81. package/dist/leu-button.js +4 -4
  82. package/dist/leu-chart-wrapper.js +3 -3
  83. package/dist/leu-checkbox-group.js +4 -4
  84. package/dist/leu-checkbox.js +3 -3
  85. package/dist/leu-chip-group.js +3 -3
  86. package/dist/leu-chip-link.js +2 -2
  87. package/dist/leu-chip-removable.js +3 -3
  88. package/dist/leu-chip-selectable.js +2 -2
  89. package/dist/leu-dialog.js +3 -3
  90. package/dist/leu-dropdown.js +8 -8
  91. package/dist/leu-file-input.js +6 -6
  92. package/dist/leu-icon.js +2 -2
  93. package/dist/leu-input.js +3 -3
  94. package/dist/leu-menu-item.d.ts +1 -1
  95. package/dist/leu-menu-item.js +3 -3
  96. package/dist/leu-menu.d.ts +1 -1
  97. package/dist/leu-menu.js +4 -4
  98. package/dist/leu-message.js +3 -3
  99. package/dist/leu-pagination.js +6 -6
  100. package/dist/leu-placeholder.js +2 -2
  101. package/dist/leu-popup.js +2 -2
  102. package/dist/leu-progress-bar.js +2 -2
  103. package/dist/leu-radio-group.js +3 -3
  104. package/dist/leu-radio.js +2 -2
  105. package/dist/leu-range.js +2 -2
  106. package/dist/leu-scroll-top.js +5 -5
  107. package/dist/leu-select.js +9 -9
  108. package/dist/leu-spinner.js +2 -2
  109. package/dist/leu-tab-group.js +4 -4
  110. package/dist/leu-tab-panel.js +2 -2
  111. package/dist/leu-tab.js +2 -2
  112. package/dist/leu-table.js +7 -7
  113. package/dist/leu-tag.js +2 -2
  114. package/dist/leu-visually-hidden.js +2 -2
  115. package/dist/web-types.json +1 -1
  116. package/package.json +9 -4
  117. package/.editorconfig +0 -29
  118. package/.github/workflows/ci.yml +0 -81
  119. package/.github/workflows/deploy-github-pages.yaml +0 -34
  120. package/.github/workflows/publish.yml +0 -30
  121. package/.github/workflows/release-please.yml +0 -19
  122. package/.husky/commit-msg +0 -1
  123. package/.husky/pre-commit +0 -1
  124. package/.nvmrc +0 -1
  125. package/.prettierignore +0 -2
  126. package/.release-please-manifest.json +0 -3
  127. package/.storybook/main.ts +0 -34
  128. package/.storybook/manager-head.html +0 -1
  129. package/.storybook/manager.ts +0 -6
  130. package/.storybook/preview.ts +0 -96
  131. package/.storybook/static/fonts/Inter-Black.woff2 +0 -0
  132. package/.storybook/static/fonts/Inter-Regular.woff2 +0 -0
  133. package/.storybook/static/fonts.css +0 -11
  134. package/.storybook/static/global.css +0 -5
  135. package/.storybook/static/logo.svg +0 -19
  136. package/.storybook/theme.ts +0 -8
  137. package/CHANGELOG.md +0 -594
  138. package/CODE_OF_CONDUCT.md +0 -128
  139. package/CONTRIBUTING.md +0 -42
  140. package/commitlint.config.cjs +0 -1
  141. package/custom-elements-manifest.config.js +0 -46
  142. package/eslint.config.mjs +0 -79
  143. package/postcss.config.cjs +0 -16
  144. package/release-please-config.json +0 -9
  145. package/scripts/generate-component/generate.js +0 -167
  146. package/scripts/generate-component/templates/[Name].ts +0 -31
  147. package/scripts/generate-component/templates/[name].css +0 -6
  148. package/scripts/generate-component/templates/[namespace]-[name].ts +0 -11
  149. package/scripts/generate-component/templates/stories/[name].stories.ts +0 -26
  150. package/scripts/generate-component/templates/test/[name].test.ts +0 -23
  151. package/scripts/postcss-leu-font-styles.cjs +0 -154
  152. package/src/components/accordion/Accordion.ts +0 -108
  153. package/src/components/accordion/accordion.css +0 -150
  154. package/src/components/accordion/leu-accordion.ts +0 -11
  155. package/src/components/accordion/stories/accordion.stories.ts +0 -62
  156. package/src/components/accordion/test/accordion.test.ts +0 -118
  157. package/src/components/button/Button.ts +0 -286
  158. package/src/components/button/button.css +0 -317
  159. package/src/components/button/leu-button.ts +0 -11
  160. package/src/components/button/stories/button.stories.ts +0 -366
  161. package/src/components/button/test/button.test.ts +0 -417
  162. package/src/components/button-group/ButtonGroup.ts +0 -97
  163. package/src/components/button-group/button-group.css +0 -5
  164. package/src/components/button-group/leu-button-group.ts +0 -11
  165. package/src/components/button-group/stories/button-group.stories.ts +0 -54
  166. package/src/components/button-group/test/button-group.test.ts +0 -105
  167. package/src/components/chart-wrapper/ChartWrapper.ts +0 -78
  168. package/src/components/chart-wrapper/chart-wrapper.css +0 -87
  169. package/src/components/chart-wrapper/leu-chart-wrapper.ts +0 -11
  170. package/src/components/chart-wrapper/stories/chart-wrapper.stories.ts +0 -58
  171. package/src/components/chart-wrapper/test/chart-wrapper.test.ts +0 -77
  172. package/src/components/checkbox/Checkbox.ts +0 -129
  173. package/src/components/checkbox/CheckboxGroup.ts +0 -57
  174. package/src/components/checkbox/checkbox-group.css +0 -29
  175. package/src/components/checkbox/checkbox.css +0 -81
  176. package/src/components/checkbox/leu-checkbox-group.ts +0 -11
  177. package/src/components/checkbox/leu-checkbox.ts +0 -11
  178. package/src/components/checkbox/stories/checkbox-group.stories.ts +0 -59
  179. package/src/components/checkbox/stories/checkbox.stories.ts +0 -72
  180. package/src/components/checkbox/test/checkbox-group.test.ts +0 -109
  181. package/src/components/checkbox/test/checkbox.test.ts +0 -247
  182. package/src/components/chip/Chip.ts +0 -19
  183. package/src/components/chip/ChipGroup.ts +0 -122
  184. package/src/components/chip/ChipLink.ts +0 -24
  185. package/src/components/chip/ChipRemovable.ts +0 -45
  186. package/src/components/chip/ChipSelectable.ts +0 -80
  187. package/src/components/chip/chip-group.css +0 -15
  188. package/src/components/chip/chip.css +0 -139
  189. package/src/components/chip/exports.ts +0 -4
  190. package/src/components/chip/leu-chip-group.ts +0 -11
  191. package/src/components/chip/leu-chip-link.ts +0 -11
  192. package/src/components/chip/leu-chip-removable.ts +0 -11
  193. package/src/components/chip/leu-chip-selectable.ts +0 -11
  194. package/src/components/chip/stories/chip-group.stories.ts +0 -159
  195. package/src/components/chip/stories/chip-link.stories.ts +0 -45
  196. package/src/components/chip/stories/chip-removable.stories.ts +0 -42
  197. package/src/components/chip/stories/chip-selectable.stories.ts +0 -54
  198. package/src/components/chip/test/chip-group.test.ts +0 -171
  199. package/src/components/chip/test/chip-link.test.ts +0 -54
  200. package/src/components/chip/test/chip-removable.test.ts +0 -105
  201. package/src/components/chip/test/chip-selectable.test.ts +0 -101
  202. package/src/components/chip/test/chip.test.ts +0 -22
  203. package/src/components/dialog/Dialog.ts +0 -86
  204. package/src/components/dialog/dialog.css +0 -157
  205. package/src/components/dialog/leu-dialog.ts +0 -11
  206. package/src/components/dialog/stories/dialog.stories.ts +0 -142
  207. package/src/components/dialog/test/dialog.test.ts +0 -85
  208. package/src/components/dropdown/Dropdown.ts +0 -152
  209. package/src/components/dropdown/dropdown.css +0 -16
  210. package/src/components/dropdown/leu-dropdown.ts +0 -11
  211. package/src/components/dropdown/stories/dropdown.stories.ts +0 -58
  212. package/src/components/dropdown/test/dropdown.test.ts +0 -59
  213. package/src/components/file-input/FileInput.ts +0 -322
  214. package/src/components/file-input/file-input.css +0 -118
  215. package/src/components/file-input/leu-file-input.ts +0 -11
  216. package/src/components/file-input/stories/file-input.stories.ts +0 -45
  217. package/src/components/file-input/test/file-input.test.ts +0 -38
  218. package/src/components/icon/Icon.ts +0 -47
  219. package/src/components/icon/icon.css +0 -10
  220. package/src/components/icon/leu-icon.ts +0 -11
  221. package/src/components/icon/paths.ts +0 -219
  222. package/src/components/icon/stories/icon.stories.ts +0 -79
  223. package/src/components/icon/test/icon.test.ts +0 -50
  224. package/src/components/input/Input.ts +0 -469
  225. package/src/components/input/input.css +0 -238
  226. package/src/components/input/leu-input.ts +0 -11
  227. package/src/components/input/stories/input.stories.ts +0 -204
  228. package/src/components/input/test/input.test.ts +0 -603
  229. package/src/components/menu/Menu.ts +0 -149
  230. package/src/components/menu/MenuItem.ts +0 -168
  231. package/src/components/menu/leu-menu-item.ts +0 -11
  232. package/src/components/menu/leu-menu.ts +0 -11
  233. package/src/components/menu/menu-item.css +0 -77
  234. package/src/components/menu/menu.css +0 -19
  235. package/src/components/menu/stories/menu-item.stories.ts +0 -81
  236. package/src/components/menu/stories/menu.stories.ts +0 -54
  237. package/src/components/menu/test/menu-item.test.ts +0 -210
  238. package/src/components/menu/test/menu.test.ts +0 -125
  239. package/src/components/message/Message.ts +0 -118
  240. package/src/components/message/leu-message.ts +0 -11
  241. package/src/components/message/message.css +0 -163
  242. package/src/components/message/stories/message.mdx +0 -76
  243. package/src/components/message/stories/message.stories.ts +0 -149
  244. package/src/components/message/test/message.test.ts +0 -96
  245. package/src/components/pagination/Pagination.ts +0 -192
  246. package/src/components/pagination/leu-pagination.ts +0 -11
  247. package/src/components/pagination/pagination.css +0 -54
  248. package/src/components/pagination/stories/pagination.stories.ts +0 -115
  249. package/src/components/pagination/test/pagination.test.ts +0 -210
  250. package/src/components/placeholder/Placeholder.ts +0 -33
  251. package/src/components/placeholder/leu-placeholder.ts +0 -11
  252. package/src/components/placeholder/placeholder.css +0 -59
  253. package/src/components/placeholder/stories/placeholder.stories.ts +0 -34
  254. package/src/components/placeholder/test/placeholder.test.ts +0 -31
  255. package/src/components/popup/Popup.ts +0 -264
  256. package/src/components/popup/leu-popup.ts +0 -11
  257. package/src/components/popup/popup.css +0 -24
  258. package/src/components/popup/stories/popup.stories.ts +0 -117
  259. package/src/components/popup/test/popup.test.ts +0 -90
  260. package/src/components/progress-bar/ProgressBar.ts +0 -52
  261. package/src/components/progress-bar/leu-progress-bar.ts +0 -11
  262. package/src/components/progress-bar/progress-bar.css +0 -97
  263. package/src/components/progress-bar/stories/progress-bar.stories.ts +0 -39
  264. package/src/components/progress-bar/test/progress-bar.test.ts +0 -61
  265. package/src/components/radio/Radio.ts +0 -59
  266. package/src/components/radio/RadioGroup.ts +0 -181
  267. package/src/components/radio/leu-radio-group.ts +0 -11
  268. package/src/components/radio/leu-radio.ts +0 -11
  269. package/src/components/radio/radio-group.css +0 -29
  270. package/src/components/radio/radio.css +0 -76
  271. package/src/components/radio/stories/radio-group.stories.ts +0 -54
  272. package/src/components/radio/stories/radio.stories.ts +0 -55
  273. package/src/components/radio/test/radio-group.test.ts +0 -83
  274. package/src/components/radio/test/radio.test.ts +0 -119
  275. package/src/components/range/Range.ts +0 -400
  276. package/src/components/range/leu-range.ts +0 -11
  277. package/src/components/range/range.css +0 -227
  278. package/src/components/range/stories/range.stories.ts +0 -185
  279. package/src/components/range/test/range.test.ts +0 -228
  280. package/src/components/scroll-top/ScrollTop.ts +0 -91
  281. package/src/components/scroll-top/leu-scroll-top.ts +0 -11
  282. package/src/components/scroll-top/scroll-top.css +0 -50
  283. package/src/components/scroll-top/stories/scroll-top.stories.ts +0 -217
  284. package/src/components/scroll-top/test/scroll-top.test.ts +0 -22
  285. package/src/components/select/Select.ts +0 -570
  286. package/src/components/select/leu-select.ts +0 -11
  287. package/src/components/select/select.css +0 -222
  288. package/src/components/select/stories/select.stories.ts +0 -173
  289. package/src/components/select/test/fixtures.ts +0 -162
  290. package/src/components/select/test/select.test.ts +0 -937
  291. package/src/components/spinner/Spinner.ts +0 -31
  292. package/src/components/spinner/leu-spinner.ts +0 -11
  293. package/src/components/spinner/spinner.css +0 -20
  294. package/src/components/spinner/stories/spinner.stories.ts +0 -29
  295. package/src/components/spinner/test/spinner.test.ts +0 -30
  296. package/src/components/tab/Tab.ts +0 -72
  297. package/src/components/tab/TabGroup.ts +0 -267
  298. package/src/components/tab/TabPanel.ts +0 -59
  299. package/src/components/tab/leu-tab-group.ts +0 -11
  300. package/src/components/tab/leu-tab-panel.ts +0 -11
  301. package/src/components/tab/leu-tab.ts +0 -11
  302. package/src/components/tab/stories/tab.stories.ts +0 -97
  303. package/src/components/tab/tab-group.css +0 -63
  304. package/src/components/tab/tab-panel.css +0 -10
  305. package/src/components/tab/tab.css +0 -54
  306. package/src/components/tab/test/tab-group.test.ts +0 -426
  307. package/src/components/tab/test/tab-panel.test.ts +0 -102
  308. package/src/components/tab/test/tab.test.ts +0 -139
  309. package/src/components/table/Table.ts +0 -253
  310. package/src/components/table/leu-table.ts +0 -11
  311. package/src/components/table/stories/table.stories.ts +0 -131
  312. package/src/components/table/table.css +0 -112
  313. package/src/components/table/test/table.test.ts +0 -37
  314. package/src/components/tag/Tag.ts +0 -28
  315. package/src/components/tag/leu-tag.ts +0 -11
  316. package/src/components/tag/stories/tag.stories.ts +0 -107
  317. package/src/components/tag/tag.css +0 -42
  318. package/src/components/tag/test/tag.test.ts +0 -28
  319. package/src/components/visually-hidden/VisuallyHidden.ts +0 -16
  320. package/src/components/visually-hidden/leu-visually-hidden.ts +0 -11
  321. package/src/components/visually-hidden/stories/visually-hidden.stories.ts +0 -22
  322. package/src/components/visually-hidden/test/visually-hidden.test.ts +0 -34
  323. package/src/components/visually-hidden/visually-hidden.css +0 -10
  324. package/src/docs/contributing.mdx +0 -154
  325. package/src/docs/installation.mdx +0 -35
  326. package/src/docs/theme.mdx +0 -400
  327. package/src/docs/usage.mdx +0 -73
  328. package/src/global.d.ts +0 -11
  329. package/src/index.ts +0 -29
  330. package/src/lib/LeuElement.ts +0 -43
  331. package/src/lib/a11y.ts +0 -26
  332. package/src/lib/hasSlotController.ts +0 -74
  333. package/src/lib/mixins/FormAssociatedMixin.ts +0 -115
  334. package/src/lib/styleMap.ts +0 -139
  335. package/src/lib/utils.ts +0 -45
  336. package/src/styles/common-styles.css +0 -14
  337. package/src/styles/custom-media.css +0 -6
  338. package/src/styles/font-definitions.json +0 -210
  339. package/src/styles/style.stories.ts +0 -64
  340. package/src/styles/theme.css +0 -90
  341. package/stat_zh.png +0 -0
  342. package/stylelint.config.mjs +0 -23
  343. package/tsconfig.build.json +0 -24
  344. package/tsconfig.json +0 -14
  345. package/tsdown.config.ts +0 -35
  346. package/web-test-runner.config.mjs +0 -102
@@ -1,154 +0,0 @@
1
- const path = require("path")
2
- const fs = require("fs/promises")
3
-
4
- /* Plugin logic */
5
-
6
- function getPixelValue(value) {
7
- return parseInt(value.replace("px", ""), 10)
8
- }
9
-
10
- async function parseFile(file) {
11
- const string = await fs.readFile(file, "utf-8")
12
-
13
- return JSON.parse(string)
14
- }
15
-
16
- function generateCustomPropertyDeclarations({
17
- name,
18
- fontSize,
19
- fontWeight,
20
- lineHeight,
21
- spacing,
22
- }) {
23
- const customPropertyPrefix = `--leu-t-${name}-${fontWeight}`
24
-
25
- const varFontSize = `${customPropertyPrefix}-font-size`
26
- const varLineHeight = `${customPropertyPrefix}-line-height`
27
- const varSpacing = `${customPropertyPrefix}-spacing`
28
- const varFont = `${customPropertyPrefix}-font`
29
- const varFontFamily = `--leu-font-family-${fontWeight}`
30
-
31
- return [
32
- { type: "fontSize", name: varFontSize, value: `${fontSize / 16}rem` },
33
- { type: "lineHeight", name: varLineHeight, value: `${lineHeight}` },
34
- { type: "spacing", name: varSpacing, value: `${spacing}rem` },
35
- {
36
- type: "font",
37
- name: varFont,
38
- value: `normal var(${varFontSize}) / var(${varLineHeight}) var(${varFontFamily})`,
39
- },
40
- ]
41
- }
42
-
43
- function curveStepDeclarations(curvePrefix, stepStyle) {
44
- const fontSizeVar = stepStyle.declarations.find(
45
- (s) => s.type === "fontSize",
46
- ).name
47
- const lineHeightVar = stepStyle.declarations.find(
48
- (s) => s.type === "lineHeight",
49
- ).name
50
- const spacingVar = stepStyle.declarations.find(
51
- (s) => s.type === "spacing",
52
- ).name
53
- const fontVar = stepStyle.declarations.find((s) => s.type === "font").name
54
-
55
- return [
56
- { prop: `${curvePrefix}-font-size`, value: ` var(${fontSizeVar})` },
57
- { prop: `${curvePrefix}-line-height`, value: ` var(${lineHeightVar})` },
58
- { prop: `${curvePrefix}-spacing`, value: ` var(${spacingVar})` },
59
- { prop: `${curvePrefix}-font`, value: ` var(${fontVar})` },
60
- ]
61
- }
62
-
63
- /**
64
- *
65
- * @param {*} file
66
- * @param {import('postcss')} postcss
67
- * @param {import('postcss').Source} nodeSource
68
- * @returns
69
- */
70
- async function createLeuFontStyleNodes(file, postcss, nodeSource) {
71
- const { definitions, curves } = await parseFile(file)
72
-
73
- const fontStyleDeclarations = definitions.flatMap((style) => {
74
- const fontSize = getPixelValue(style.fontSize)
75
- const fontWeights = Array.isArray(style.fontWeight)
76
- ? style.fontWeight
77
- : [style.fontWeight]
78
- const spacing = getPixelValue(style.spacing) / 16
79
-
80
- return fontWeights.map((fontWeight) => ({
81
- name: style.name,
82
- fontWeight,
83
- declarations: generateCustomPropertyDeclarations({
84
- name: style.name,
85
- fontSize,
86
- fontWeight,
87
- lineHeight: style.lineHeight,
88
- spacing,
89
- }),
90
- }))
91
- })
92
-
93
- const fontStyleNodes = fontStyleDeclarations.flatMap((style) =>
94
- style.declarations.map(
95
- ({ name, value }) =>
96
- new postcss.Declaration({ prop: name, value, source: nodeSource }),
97
- ),
98
- )
99
-
100
- const curveNodes = curves.flatMap((curve) =>
101
- curve.weights.flatMap((fontWeight) => {
102
- const curvePrefix = `--leu-t-curve-${curve.name}-${fontWeight}`
103
-
104
- return curve.steps.flatMap((step) => {
105
- const [viewport, styleName] = step
106
-
107
- const stepStyle = fontStyleDeclarations.find(
108
- (s) => s.name === styleName && s.fontWeight === fontWeight,
109
- )
110
-
111
- const nodes = curveStepDeclarations(curvePrefix, stepStyle).map(
112
- ({ prop, value }) =>
113
- new postcss.Declaration({ prop, value, source: nodeSource }),
114
- )
115
-
116
- return viewport === null
117
- ? nodes
118
- : new postcss.AtRule({
119
- name: "media",
120
- params: `(${viewport})`,
121
- nodes,
122
- source: nodeSource,
123
- })
124
- })
125
- }),
126
- )
127
-
128
- return [...fontStyleNodes, ...curveNodes]
129
- }
130
-
131
- /* Plugin config */
132
-
133
- /**
134
- * @type {import('postcss').PluginCreator}
135
- */
136
- module.exports = () => ({
137
- postcssPlugin: "leu-font-styles",
138
- AtRule: {
139
- "leu-font-styles": async (atRule, postcss) => {
140
- const rootDir = path.dirname(atRule.source.input.file)
141
- const jsonFile = atRule.params.replace(/['"]+/g, "")
142
-
143
- const nodes = await createLeuFontStyleNodes(
144
- path.resolve(rootDir, jsonFile),
145
- postcss,
146
- atRule.source,
147
- )
148
-
149
- atRule.replaceWith(nodes)
150
- },
151
- },
152
- })
153
-
154
- module.exports.postcss = true
@@ -1,108 +0,0 @@
1
- import { nothing } from "lit"
2
- import { html, unsafeStatic } from "lit/static-html.js"
3
- import { property } from "lit/decorators.js"
4
-
5
- import { LeuElement } from "../../lib/LeuElement.js"
6
-
7
- import styles from "./accordion.css?inline"
8
-
9
- /**
10
- * @tagname leu-accordion
11
- * @slot content - The content of the accordion. No styles will be applied to the content.
12
- * @attr {number} heading-level - The heading level of the accordion title. Must be between 1 and 6.
13
- * @attr {string} label-prefix - The prefix of the accordion label. e.g. "01"
14
- */
15
- export class LeuAccordion extends LeuElement {
16
- static styles = [LeuElement.styles, styles]
17
-
18
- /** @internal */
19
- static shadowRootOptions = {
20
- ...LeuElement.shadowRootOptions,
21
- delegatesFocus: true,
22
- }
23
-
24
- /**
25
- * The heading level of the accordion title. Must be between 1 and 6.
26
- */
27
- @property({ type: Number, attribute: "heading-level", reflect: true })
28
- headingLevel = 2
29
-
30
- /**
31
- * The expanded state of the accordion.
32
- */
33
- @property({ type: Boolean, reflect: true })
34
- open = false
35
-
36
- /**
37
- * The label (title) of the accordion
38
- */
39
- @property({ type: String, reflect: true })
40
- label = ""
41
-
42
- /**
43
- * The prefix of the accordion label. e.g. "01"
44
- */
45
- @property({ type: String, attribute: "label-prefix", reflect: true })
46
- labelPrefix = ""
47
-
48
- /**
49
- * Determines the heading tag of the accordion toggle.
50
- * The headingLevel shouldn't be used directly to render the heading tag
51
- * in order to avoid XSS issues.
52
- * @internal
53
- */
54
- private _getHeadingTag(): string {
55
- let level = 2
56
- if (this.headingLevel > 0 && this.headingLevel < 7) {
57
- level = Math.floor(this.headingLevel)
58
- }
59
-
60
- return `h${level}`
61
- }
62
-
63
- /**
64
- * Toggles the accordion open state.
65
- * @internal
66
- */
67
- private _handleToggleClick() {
68
- this.open = !this.open
69
- }
70
-
71
- render() {
72
- const hTag = this._getHeadingTag()
73
-
74
- /* The eslint rules don't recognize html import from lit/static-html.js */
75
- /* eslint-disable lit/binding-positions, lit/no-invalid-html */
76
- return html`<${unsafeStatic(hTag)} class="heading"><button
77
- id="toggle"
78
- type="button"
79
- class="button"
80
- aria-controls="contentwrapper"
81
- aria-expanded="${this.open}"
82
- @click=${this._handleToggleClick}
83
- >
84
- ${
85
- this.labelPrefix
86
- ? html`<span class="label-prefix">${this.labelPrefix}</span>`
87
- : nothing
88
- }
89
- <span class="label">${this.label}</span>
90
- <div class="plus"></div>
91
- </button></${unsafeStatic(hTag)}>
92
- <div
93
- id="contentwrapper"
94
- class="contentwrapper"
95
- ?hidden=${!this.open}
96
- aria-labelledby="toggle"
97
- role="region"
98
- >
99
- <div
100
- class="content"
101
- >
102
- <slot name="content"></slot>
103
- </div>
104
- </div>
105
- <hr class="divider" />`
106
- }
107
- /* eslint-enable lit/binding-positions, lit/no-invalid-html */
108
- }
@@ -1,150 +0,0 @@
1
- @import url("../../styles/custom-media.css");
2
-
3
- :host {
4
- --accordion-font-regular: var(--leu-font-family-regular);
5
- --accordion-font-black: var(--leu-font-family-black);
6
-
7
- --accordion-toggle-font: var(--accordion-font-black);
8
-
9
- --label-color: var(--leu-color-black-60);
10
- --label-color-active: var(--leu-color-black-100);
11
-
12
- --divider-color: var(--leu-color-black-20);
13
- --divider-color-active: var(--leu-color-black-100);
14
-
15
- --transition: 0.1s ease;
16
-
17
- font-family: var(--accordion-font-regular);
18
-
19
- position: relative;
20
- }
21
-
22
- .heading {
23
- margin: 0;
24
- }
25
-
26
- .button {
27
- width: 100%;
28
- background: none;
29
- padding: 1rem 0;
30
- margin: 0;
31
- cursor: pointer;
32
-
33
- border: none;
34
-
35
- color: var(--label-color);
36
- font-family: var(--accordion-toggle-font);
37
- font-size: 1rem;
38
- line-height: 1.5rem;
39
- text-align: left;
40
-
41
- display: flex;
42
- gap: 0.25rem;
43
-
44
- transition: color var(--transition);
45
-
46
- @media (--viewport-regular) {
47
- font-size: 1.125rem;
48
- gap: 0.8rem;
49
- }
50
-
51
- @media (--viewport-xlarge) {
52
- font-size: 1.25rem;
53
- line-height: 1.625rem;
54
- }
55
- }
56
-
57
- .button:focus-visible {
58
- outline: 2px solid var(--leu-color-func-cyan);
59
- outline-offset: 4px;
60
- }
61
-
62
- .button:hover,
63
- .button:focus-visible,
64
- :host([open]) .button {
65
- color: var(--label-color-active);
66
- }
67
-
68
- .plus {
69
- position: relative;
70
- flex: 0 0 1rem;
71
- aspect-ratio: 1;
72
- align-self: center;
73
- margin-inline: 0.5rem;
74
- }
75
-
76
- .plus::before,
77
- .plus::after {
78
- content: "";
79
-
80
- position: absolute;
81
- top: calc(50% - 0.0625rem);
82
- left: 0;
83
-
84
- display: block;
85
- width: 1rem;
86
- height: 0.125rem;
87
- aspect-ratio: 1 / 0.125;
88
- background-color: currentcolor;
89
- transition: transform var(--transition);
90
- }
91
-
92
- .plus::before {
93
- transform: rotate(90deg);
94
- }
95
-
96
- :host([open]) .plus::before {
97
- transform: rotate(180deg);
98
- }
99
-
100
- .label {
101
- display: block;
102
- flex-grow: 1;
103
- }
104
-
105
- .contentwrapper {
106
- display: grid;
107
- grid-template-rows: 1fr;
108
- transition: grid-template-rows var(--transition);
109
- }
110
-
111
- .content {
112
- overflow: hidden;
113
- }
114
-
115
- .contentwrapper[hidden] {
116
- grid-template-rows: 0fr;
117
- opacity: 0;
118
- visibility: hidden;
119
- }
120
-
121
- slot[name="content"] {
122
- display: block;
123
- padding: 0.5rem 0 1.5rem;
124
-
125
- @media (--viewport-medium) {
126
- padding: 0.75rem 0 1.5rem;
127
- }
128
-
129
- @media (--viewport-xlarge) {
130
- padding: 1rem 0 2.5rem;
131
- }
132
- }
133
-
134
- .divider {
135
- width: 100%;
136
- height: 1px;
137
- margin: 0;
138
-
139
- border: none;
140
- background-color: var(--divider-color);
141
-
142
- transition:
143
- transform var(--transition),
144
- background-color var(--transition);
145
- }
146
-
147
- :host(:not([open])) .heading:is(:hover, :focus-visible) ~ .divider {
148
- background-color: var(--divider-color-active);
149
- transform: scaleY(3);
150
- }
@@ -1,11 +0,0 @@
1
- import { LeuAccordion } from "./Accordion.js"
2
-
3
- export { LeuAccordion }
4
-
5
- LeuAccordion.define("leu-accordion")
6
-
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- "leu-accordion": LeuAccordion
10
- }
11
- }
@@ -1,62 +0,0 @@
1
- import { html } from "lit"
2
- import { ifDefined } from "lit/directives/if-defined.js"
3
-
4
- import "../leu-accordion.js"
5
-
6
- export default {
7
- title: "Components/Accordion",
8
- component: "leu-accordion",
9
- argTypes: {
10
- "heading-level": {
11
- control: "select",
12
- options: [1, 2, 3, 4, 5, 6],
13
- },
14
- content: {
15
- control: {
16
- type: "text",
17
- },
18
- },
19
- },
20
- parameters: {
21
- design: {
22
- type: "figma",
23
- url: "https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=17341-82464&mode=design&t=lzVrtq8lxYVJU5TB-11",
24
- },
25
- },
26
- }
27
-
28
- function Template(args) {
29
- return html`
30
- <leu-accordion
31
- heading-level=${ifDefined(args["heading-level"])}
32
- label=${ifDefined(args.label)}
33
- label-prefix=${ifDefined(args["label-prefix"])}
34
- ?open=${args.open}
35
- >
36
- <div slot="content">${args.content}</div>
37
- </leu-accordion>
38
- `
39
- }
40
-
41
- export const Regular = Template.bind({})
42
- Regular.args = {
43
- "heading-level": 2,
44
- label:
45
- "Akkordeontitel der lang und noch länger werden kann und dann umbricht",
46
- content: `Regular Interessierte können ab sofort die Genauigkeit ihrer Smartphones
47
- und Navigationsgeräte überprüfen. Die Baudirektion hat beim Landesmuseum
48
- in Zürich einen Kontrollpunkt beim Landesmuseum in Zürich einen
49
- Kontrollpunktfür mobile Geräte eingerichtet – den ersten in der
50
- Schweiz.P, Helvetic Roman Interessierte können ab sofort die Genauigkeit
51
- ihrer Smartphones und Navigationsgeräte überprüfen.
52
-
53
- Die Zürich einen Kontrollpunktfür mobile einen Kontrollpunkt beim
54
- Landesmuseum in Zürich einen Kontrollpunktfür mobile Geräte eingerichtet
55
- – den ersten in der Schweiz.`,
56
- }
57
-
58
- export const Prefix = Template.bind({})
59
- Prefix.args = {
60
- ...Regular.args,
61
- "label-prefix": "01",
62
- }
@@ -1,118 +0,0 @@
1
- import { html } from "lit"
2
- import { fixture, expect } from "@open-wc/testing"
3
-
4
- import "../leu-accordion.js"
5
-
6
- async function defaultFixture() {
7
- return fixture(html`
8
- <leu-accordion label="Titel des Akkordeons"></leu-accordion>
9
- `)
10
- }
11
-
12
- describe("LeuAccordion", () => {
13
- it("is a defined element", async () => {
14
- const el = customElements.get("leu-accordion")
15
-
16
- await expect(el).not.to.be.undefined
17
- })
18
-
19
- it("passes the a11y audit", async () => {
20
- const el = await defaultFixture()
21
-
22
- await expect(el).shadowDom.to.be.accessible()
23
- })
24
-
25
- it("renders the correct heading tag", async () => {
26
- const el = await defaultFixture()
27
-
28
- await expect(el._getHeadingTag()).to.equal("h2")
29
-
30
- el.headingLevel = 1
31
- await expect(el._getHeadingTag()).to.equal("h1")
32
-
33
- el.headingLevel = 2
34
- await expect(el._getHeadingTag()).to.equal("h2")
35
-
36
- el.headingLevel = 3
37
- await expect(el._getHeadingTag()).to.equal("h3")
38
-
39
- el.headingLevel = 4
40
- await expect(el._getHeadingTag()).to.equal("h4")
41
-
42
- el.headingLevel = 5
43
- await expect(el._getHeadingTag()).to.equal("h5")
44
-
45
- el.headingLevel = 6
46
- await expect(el._getHeadingTag()).to.equal("h6")
47
- })
48
-
49
- it("doesn't render an invalid heading tag", async () => {
50
- const el = await defaultFixture()
51
-
52
- el.headingLevel = 10
53
- expect(el._getHeadingTag()).to.equal("h2")
54
-
55
- el.headingLevel = -1
56
- expect(el._getHeadingTag()).to.equal("h2")
57
-
58
- el.headingLevel = 0
59
- expect(el._getHeadingTag()).to.equal("h2")
60
-
61
- el.headingLevel = "h3"
62
- expect(el._getHeadingTag()).to.equal("h2")
63
- })
64
-
65
- it("toggles the open state", async () => {
66
- const el = await fixture(
67
- html`<leu-accordion label="Titel des Akkordeons"
68
- ><div slot="content">Das ist der Inhalt</div></leu-accordion
69
- >`,
70
- )
71
-
72
- const button = el.shadowRoot.querySelector("button")
73
-
74
- expect(el.open).to.be.false
75
-
76
- button.click()
77
- expect(el.open).to.be.true
78
-
79
- button.click()
80
- expect(el.open).to.be.false
81
- })
82
-
83
- // TODO: `.visible` throws an error:
84
- // DOMException: HTMLDivElement object could not be cloned.
85
- // Maybe chai-dom is not compatible with using slots?
86
- // it("doesn't show the content when it is closed", async () => {
87
- // const el = await fixture(
88
- // html`<leu-accordion label="Titel des Akkordeons"
89
- // ><div slot="content">Das ist der Inhalt</div></leu-accordion
90
- // >`,
91
- // )
92
-
93
- // const button = el.shadowRoot.querySelector("button")
94
- // const content = el.querySelector("[slot=content]")
95
-
96
- // expect(el).to.have.attribute("label", "Titel des Akkordeons")
97
- // expect(content).not.to.be.visible
98
-
99
- // button.click()
100
- // await elementUpdated(el)
101
- // await aTimeout(150)
102
- // expect(content).to.be.visible
103
- // })
104
-
105
- it("shows the label prefix before the label", async () => {
106
- const el = await fixture(
107
- html`<leu-accordion
108
- label-prefix="01"
109
- label="Titel des Akkordeons"
110
- ></leu-accordion>`,
111
- )
112
-
113
- const button = el.shadowRoot.querySelector("button")
114
-
115
- expect(button).to.contain.text("01")
116
- expect(button).to.contain.text("Titel des Akkordeons")
117
- })
118
- })