@statistikzh/leu 0.28.1 → 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 (348) hide show
  1. package/dist/{Accordion-CwkI7sfx.js → Accordion-CaDTUDJG.js} +1 -1
  2. package/dist/Accordion.js +2 -2
  3. package/dist/{Button-D1aYnunQ.js → Button-BF3_6xgs.js} +3 -3
  4. package/dist/Button.js +4 -4
  5. package/dist/{ButtonGroup-CqThYjzX.js → ButtonGroup-grJiWGHI.js} +2 -2
  6. package/dist/ButtonGroup.js +5 -5
  7. package/dist/{ChartWrapper-BjVT4x-H.js → ChartWrapper-CeolXijF.js} +2 -2
  8. package/dist/ChartWrapper.js +3 -3
  9. package/dist/{Checkbox-HxYqp2w4.js → Checkbox-DGUZ1XtB.js} +2 -2
  10. package/dist/Checkbox.js +3 -3
  11. package/dist/{CheckboxGroup-DYws2rwt.js → CheckboxGroup-CGdyk_RP.js} +2 -2
  12. package/dist/CheckboxGroup.js +4 -4
  13. package/dist/{Chip-gKxD6IaZ.js → Chip-BpKH3_Nk.js} +1 -1
  14. package/dist/Chip.js +2 -2
  15. package/dist/{ChipGroup-ZvBzX_wd.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-BYpzTprV.js → Dialog-CC674l80.js} +2 -2
  21. package/dist/Dialog.js +3 -3
  22. package/dist/{Dropdown-C4CgE4E-.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-nsnSQCaU.js → FileInput-D4kyWFkL.js} +4 -4
  26. package/dist/FileInput.js +6 -6
  27. package/dist/{Icon-D8HTPEFH.js → Icon-DOcb_NlX.js} +1 -1
  28. package/dist/Icon.js +2 -2
  29. package/dist/{Input-OrILqlax.js → Input-6Xu1N2sA.js} +2 -2
  30. package/dist/Input.js +3 -3
  31. package/dist/{LeuElement-C_lcHzQI.js → LeuElement-C3HedxlQ.js} +1 -1
  32. package/dist/{Menu-CFLCnI34.js → Menu-CJtyuUvP.js} +2 -2
  33. package/dist/{Menu-Z2b7dsB5.d.ts → Menu-txbYINTW.d.ts} +1 -1
  34. package/dist/Menu.d.ts +1 -1
  35. package/dist/Menu.js +4 -4
  36. package/dist/{MenuItem-LY4TRIho.d.ts → MenuItem-9TTOrL0Z.d.ts} +1 -1
  37. package/dist/{MenuItem-ICjLCGim.js → MenuItem-ClSE3auh.js} +2 -2
  38. package/dist/MenuItem.d.ts +1 -1
  39. package/dist/MenuItem.js +3 -3
  40. package/dist/{Message-Dw5D_0i1.js → Message-C55ydBaU.js} +2 -2
  41. package/dist/Message.js +3 -3
  42. package/dist/{Pagination-D1tP5FrM.js → Pagination-BVwKLcd5.js} +4 -4
  43. package/dist/Pagination.js +6 -6
  44. package/dist/{Placeholder-CnGzCZ5-.js → Placeholder-DFNppiVf.js} +1 -1
  45. package/dist/Placeholder.js +2 -2
  46. package/dist/{Popup-BiN_tZDN.js → Popup-D91ZiFWh.js} +1 -1
  47. package/dist/Popup.js +2 -2
  48. package/dist/{ProgressBar-BfJo_KyU.js → ProgressBar-DQGO2we8.js} +1 -1
  49. package/dist/ProgressBar.js +2 -2
  50. package/dist/{Radio-CV7vuQUj.js → Radio-BetZNoUQ.js} +1 -1
  51. package/dist/Radio.js +2 -2
  52. package/dist/{RadioGroup-C3XWSScc.js → RadioGroup-DzW5z_SD.js} +2 -2
  53. package/dist/RadioGroup.js +3 -3
  54. package/dist/{Range-C8RVrIM9.js → Range-9ijUzrty.js} +1 -1
  55. package/dist/Range.js +2 -2
  56. package/dist/{ScrollTop-B_TJ_k4m.js → ScrollTop-uDL4K_C6.js} +3 -3
  57. package/dist/ScrollTop.js +5 -5
  58. package/dist/{Select-CbPTrL3G.js → Select-ClGNTYfp.js} +7 -7
  59. package/dist/Select.d.ts +2 -2
  60. package/dist/Select.js +9 -9
  61. package/dist/{Spinner-ChKJQJTN.js → Spinner-B7ikVfUZ.js} +1 -1
  62. package/dist/Spinner.js +2 -2
  63. package/dist/{Tab-BJbzY1xd.js → Tab-CSHR71IX.js} +1 -1
  64. package/dist/Tab.js +2 -2
  65. package/dist/{TabGroup-BIaCHrKR.js → TabGroup-D7YbKXm8.js} +3 -3
  66. package/dist/TabGroup.js +4 -4
  67. package/dist/{TabPanel-CTyw410b.js → TabPanel-D_RHF3lv.js} +1 -1
  68. package/dist/TabPanel.js +2 -2
  69. package/dist/{Table-D3QmePJd.js → Table-CdosaNFb.js} +3 -3
  70. package/dist/Table.js +7 -7
  71. package/dist/{Tag-nUnWtHYy.js → Tag-BQBgkkAs.js} +1 -1
  72. package/dist/Tag.js +2 -2
  73. package/dist/{VisuallyHidden-DF2q9pTa.js → VisuallyHidden-CEBTA6hv.js} +1 -1
  74. package/dist/VisuallyHidden.js +2 -2
  75. package/dist/custom-elements.json +6445 -0
  76. package/dist/index.d.ts +2 -2
  77. package/dist/index.js +30 -30
  78. package/dist/leu-accordion.js +2 -2
  79. package/dist/leu-button-group.js +5 -5
  80. package/dist/leu-button.js +4 -4
  81. package/dist/leu-chart-wrapper.js +3 -3
  82. package/dist/leu-checkbox-group.js +4 -4
  83. package/dist/leu-checkbox.js +3 -3
  84. package/dist/leu-chip-group.js +3 -3
  85. package/dist/leu-chip-link.js +2 -2
  86. package/dist/leu-chip-removable.js +3 -3
  87. package/dist/leu-chip-selectable.js +2 -2
  88. package/dist/leu-dialog.js +3 -3
  89. package/dist/leu-dropdown.js +8 -8
  90. package/dist/leu-file-input.js +6 -6
  91. package/dist/leu-icon.js +2 -2
  92. package/dist/leu-input.js +3 -3
  93. package/dist/leu-menu-item.d.ts +1 -1
  94. package/dist/leu-menu-item.js +3 -3
  95. package/dist/leu-menu.d.ts +1 -1
  96. package/dist/leu-menu.js +4 -4
  97. package/dist/leu-message.js +3 -3
  98. package/dist/leu-pagination.js +6 -6
  99. package/dist/leu-placeholder.js +2 -2
  100. package/dist/leu-popup.js +2 -2
  101. package/dist/leu-progress-bar.js +2 -2
  102. package/dist/leu-radio-group.js +3 -3
  103. package/dist/leu-radio.js +2 -2
  104. package/dist/leu-range.js +2 -2
  105. package/dist/leu-scroll-top.js +5 -5
  106. package/dist/leu-select.js +9 -9
  107. package/dist/leu-spinner.js +2 -2
  108. package/dist/leu-tab-group.js +4 -4
  109. package/dist/leu-tab-panel.js +2 -2
  110. package/dist/leu-tab.js +2 -2
  111. package/dist/leu-table.js +7 -7
  112. package/dist/leu-tag.js +2 -2
  113. package/dist/leu-visually-hidden.js +2 -2
  114. package/dist/vscode.html-custom-data.json +11 -11
  115. package/dist/vue/index.d.ts +20 -20
  116. package/dist/web-types.json +28 -28
  117. package/package.json +4 -1
  118. package/.editorconfig +0 -29
  119. package/.github/workflows/ci.yml +0 -81
  120. package/.github/workflows/deploy-github-pages.yaml +0 -34
  121. package/.github/workflows/publish.yml +0 -28
  122. package/.github/workflows/release-please.yml +0 -19
  123. package/.husky/commit-msg +0 -1
  124. package/.husky/pre-commit +0 -1
  125. package/.nvmrc +0 -1
  126. package/.prettierignore +0 -2
  127. package/.release-please-manifest.json +0 -3
  128. package/.storybook/main.ts +0 -34
  129. package/.storybook/manager-head.html +0 -1
  130. package/.storybook/manager.ts +0 -6
  131. package/.storybook/preview.ts +0 -96
  132. package/.storybook/static/fonts/Inter-Black.woff2 +0 -0
  133. package/.storybook/static/fonts/Inter-Regular.woff2 +0 -0
  134. package/.storybook/static/fonts.css +0 -11
  135. package/.storybook/static/global.css +0 -5
  136. package/.storybook/static/logo.svg +0 -19
  137. package/.storybook/theme.ts +0 -8
  138. package/AGENTS.md +0 -162
  139. package/CHANGELOG.md +0 -601
  140. package/CODE_OF_CONDUCT.md +0 -128
  141. package/CONTRIBUTING.md +0 -42
  142. package/commitlint.config.cjs +0 -1
  143. package/custom-elements-manifest.config.js +0 -46
  144. package/eslint.config.mjs +0 -79
  145. package/postcss.config.cjs +0 -16
  146. package/release-please-config.json +0 -9
  147. package/scripts/generate-component/generate.js +0 -167
  148. package/scripts/generate-component/templates/[Name].ts +0 -31
  149. package/scripts/generate-component/templates/[name].css +0 -6
  150. package/scripts/generate-component/templates/[namespace]-[name].ts +0 -11
  151. package/scripts/generate-component/templates/stories/[name].stories.ts +0 -26
  152. package/scripts/generate-component/templates/test/[name].test.ts +0 -23
  153. package/scripts/postcss-leu-font-styles.cjs +0 -154
  154. package/src/components/accordion/Accordion.ts +0 -108
  155. package/src/components/accordion/accordion.css +0 -150
  156. package/src/components/accordion/leu-accordion.ts +0 -11
  157. package/src/components/accordion/stories/accordion.stories.ts +0 -62
  158. package/src/components/accordion/test/accordion.test.ts +0 -118
  159. package/src/components/button/Button.ts +0 -286
  160. package/src/components/button/button.css +0 -317
  161. package/src/components/button/leu-button.ts +0 -11
  162. package/src/components/button/stories/button.stories.ts +0 -366
  163. package/src/components/button/test/button.test.ts +0 -417
  164. package/src/components/button-group/ButtonGroup.ts +0 -97
  165. package/src/components/button-group/button-group.css +0 -5
  166. package/src/components/button-group/leu-button-group.ts +0 -11
  167. package/src/components/button-group/stories/button-group.stories.ts +0 -54
  168. package/src/components/button-group/test/button-group.test.ts +0 -105
  169. package/src/components/chart-wrapper/ChartWrapper.ts +0 -78
  170. package/src/components/chart-wrapper/chart-wrapper.css +0 -87
  171. package/src/components/chart-wrapper/leu-chart-wrapper.ts +0 -11
  172. package/src/components/chart-wrapper/stories/chart-wrapper.stories.ts +0 -58
  173. package/src/components/chart-wrapper/test/chart-wrapper.test.ts +0 -77
  174. package/src/components/checkbox/Checkbox.ts +0 -129
  175. package/src/components/checkbox/CheckboxGroup.ts +0 -57
  176. package/src/components/checkbox/checkbox-group.css +0 -29
  177. package/src/components/checkbox/checkbox.css +0 -81
  178. package/src/components/checkbox/leu-checkbox-group.ts +0 -11
  179. package/src/components/checkbox/leu-checkbox.ts +0 -11
  180. package/src/components/checkbox/stories/checkbox-group.stories.ts +0 -59
  181. package/src/components/checkbox/stories/checkbox.stories.ts +0 -72
  182. package/src/components/checkbox/test/checkbox-group.test.ts +0 -109
  183. package/src/components/checkbox/test/checkbox.test.ts +0 -247
  184. package/src/components/chip/Chip.ts +0 -19
  185. package/src/components/chip/ChipGroup.ts +0 -122
  186. package/src/components/chip/ChipLink.ts +0 -24
  187. package/src/components/chip/ChipRemovable.ts +0 -45
  188. package/src/components/chip/ChipSelectable.ts +0 -80
  189. package/src/components/chip/chip-group.css +0 -15
  190. package/src/components/chip/chip.css +0 -139
  191. package/src/components/chip/exports.ts +0 -4
  192. package/src/components/chip/leu-chip-group.ts +0 -11
  193. package/src/components/chip/leu-chip-link.ts +0 -11
  194. package/src/components/chip/leu-chip-removable.ts +0 -11
  195. package/src/components/chip/leu-chip-selectable.ts +0 -11
  196. package/src/components/chip/stories/chip-group.stories.ts +0 -159
  197. package/src/components/chip/stories/chip-link.stories.ts +0 -45
  198. package/src/components/chip/stories/chip-removable.stories.ts +0 -42
  199. package/src/components/chip/stories/chip-selectable.stories.ts +0 -54
  200. package/src/components/chip/test/chip-group.test.ts +0 -171
  201. package/src/components/chip/test/chip-link.test.ts +0 -54
  202. package/src/components/chip/test/chip-removable.test.ts +0 -105
  203. package/src/components/chip/test/chip-selectable.test.ts +0 -101
  204. package/src/components/chip/test/chip.test.ts +0 -22
  205. package/src/components/dialog/Dialog.ts +0 -86
  206. package/src/components/dialog/dialog.css +0 -157
  207. package/src/components/dialog/leu-dialog.ts +0 -11
  208. package/src/components/dialog/stories/dialog.stories.ts +0 -142
  209. package/src/components/dialog/test/dialog.test.ts +0 -85
  210. package/src/components/dropdown/Dropdown.ts +0 -152
  211. package/src/components/dropdown/dropdown.css +0 -16
  212. package/src/components/dropdown/leu-dropdown.ts +0 -11
  213. package/src/components/dropdown/stories/dropdown.stories.ts +0 -58
  214. package/src/components/dropdown/test/dropdown.test.ts +0 -59
  215. package/src/components/file-input/FileInput.ts +0 -324
  216. package/src/components/file-input/file-input.css +0 -118
  217. package/src/components/file-input/leu-file-input.ts +0 -11
  218. package/src/components/file-input/stories/file-input.stories.ts +0 -45
  219. package/src/components/file-input/test/file-input.test.ts +0 -62
  220. package/src/components/icon/Icon.ts +0 -47
  221. package/src/components/icon/icon.css +0 -10
  222. package/src/components/icon/leu-icon.ts +0 -11
  223. package/src/components/icon/paths.ts +0 -219
  224. package/src/components/icon/stories/icon.stories.ts +0 -79
  225. package/src/components/icon/test/icon.test.ts +0 -50
  226. package/src/components/input/Input.ts +0 -469
  227. package/src/components/input/input.css +0 -238
  228. package/src/components/input/leu-input.ts +0 -11
  229. package/src/components/input/stories/input.stories.ts +0 -204
  230. package/src/components/input/test/input.test.ts +0 -603
  231. package/src/components/menu/Menu.ts +0 -149
  232. package/src/components/menu/MenuItem.ts +0 -168
  233. package/src/components/menu/leu-menu-item.ts +0 -11
  234. package/src/components/menu/leu-menu.ts +0 -11
  235. package/src/components/menu/menu-item.css +0 -77
  236. package/src/components/menu/menu.css +0 -19
  237. package/src/components/menu/stories/menu-item.stories.ts +0 -81
  238. package/src/components/menu/stories/menu.stories.ts +0 -54
  239. package/src/components/menu/test/menu-item.test.ts +0 -210
  240. package/src/components/menu/test/menu.test.ts +0 -125
  241. package/src/components/message/Message.ts +0 -118
  242. package/src/components/message/leu-message.ts +0 -11
  243. package/src/components/message/message.css +0 -163
  244. package/src/components/message/stories/message.mdx +0 -76
  245. package/src/components/message/stories/message.stories.ts +0 -149
  246. package/src/components/message/test/message.test.ts +0 -96
  247. package/src/components/pagination/Pagination.ts +0 -192
  248. package/src/components/pagination/leu-pagination.ts +0 -11
  249. package/src/components/pagination/pagination.css +0 -54
  250. package/src/components/pagination/stories/pagination.stories.ts +0 -115
  251. package/src/components/pagination/test/pagination.test.ts +0 -210
  252. package/src/components/placeholder/Placeholder.ts +0 -33
  253. package/src/components/placeholder/leu-placeholder.ts +0 -11
  254. package/src/components/placeholder/placeholder.css +0 -59
  255. package/src/components/placeholder/stories/placeholder.stories.ts +0 -34
  256. package/src/components/placeholder/test/placeholder.test.ts +0 -31
  257. package/src/components/popup/Popup.ts +0 -264
  258. package/src/components/popup/leu-popup.ts +0 -11
  259. package/src/components/popup/popup.css +0 -24
  260. package/src/components/popup/stories/popup.stories.ts +0 -117
  261. package/src/components/popup/test/popup.test.ts +0 -90
  262. package/src/components/progress-bar/ProgressBar.ts +0 -52
  263. package/src/components/progress-bar/leu-progress-bar.ts +0 -11
  264. package/src/components/progress-bar/progress-bar.css +0 -97
  265. package/src/components/progress-bar/stories/progress-bar.stories.ts +0 -39
  266. package/src/components/progress-bar/test/progress-bar.test.ts +0 -61
  267. package/src/components/radio/Radio.ts +0 -59
  268. package/src/components/radio/RadioGroup.ts +0 -181
  269. package/src/components/radio/leu-radio-group.ts +0 -11
  270. package/src/components/radio/leu-radio.ts +0 -11
  271. package/src/components/radio/radio-group.css +0 -29
  272. package/src/components/radio/radio.css +0 -76
  273. package/src/components/radio/stories/radio-group.stories.ts +0 -54
  274. package/src/components/radio/stories/radio.stories.ts +0 -55
  275. package/src/components/radio/test/radio-group.test.ts +0 -83
  276. package/src/components/radio/test/radio.test.ts +0 -119
  277. package/src/components/range/Range.ts +0 -400
  278. package/src/components/range/leu-range.ts +0 -11
  279. package/src/components/range/range.css +0 -227
  280. package/src/components/range/stories/range.stories.ts +0 -185
  281. package/src/components/range/test/range.test.ts +0 -228
  282. package/src/components/scroll-top/ScrollTop.ts +0 -91
  283. package/src/components/scroll-top/leu-scroll-top.ts +0 -11
  284. package/src/components/scroll-top/scroll-top.css +0 -50
  285. package/src/components/scroll-top/stories/scroll-top.stories.ts +0 -217
  286. package/src/components/scroll-top/test/scroll-top.test.ts +0 -22
  287. package/src/components/select/Select.ts +0 -570
  288. package/src/components/select/leu-select.ts +0 -11
  289. package/src/components/select/select.css +0 -222
  290. package/src/components/select/stories/select.stories.ts +0 -173
  291. package/src/components/select/test/fixtures.ts +0 -162
  292. package/src/components/select/test/select.test.ts +0 -937
  293. package/src/components/spinner/Spinner.ts +0 -31
  294. package/src/components/spinner/leu-spinner.ts +0 -11
  295. package/src/components/spinner/spinner.css +0 -20
  296. package/src/components/spinner/stories/spinner.stories.ts +0 -29
  297. package/src/components/spinner/test/spinner.test.ts +0 -30
  298. package/src/components/tab/Tab.ts +0 -72
  299. package/src/components/tab/TabGroup.ts +0 -267
  300. package/src/components/tab/TabPanel.ts +0 -59
  301. package/src/components/tab/leu-tab-group.ts +0 -11
  302. package/src/components/tab/leu-tab-panel.ts +0 -11
  303. package/src/components/tab/leu-tab.ts +0 -11
  304. package/src/components/tab/stories/tab.stories.ts +0 -97
  305. package/src/components/tab/tab-group.css +0 -63
  306. package/src/components/tab/tab-panel.css +0 -10
  307. package/src/components/tab/tab.css +0 -54
  308. package/src/components/tab/test/tab-group.test.ts +0 -426
  309. package/src/components/tab/test/tab-panel.test.ts +0 -102
  310. package/src/components/tab/test/tab.test.ts +0 -139
  311. package/src/components/table/Table.ts +0 -253
  312. package/src/components/table/leu-table.ts +0 -11
  313. package/src/components/table/stories/table.stories.ts +0 -131
  314. package/src/components/table/table.css +0 -112
  315. package/src/components/table/test/table.test.ts +0 -37
  316. package/src/components/tag/Tag.ts +0 -28
  317. package/src/components/tag/leu-tag.ts +0 -11
  318. package/src/components/tag/stories/tag.stories.ts +0 -107
  319. package/src/components/tag/tag.css +0 -42
  320. package/src/components/tag/test/tag.test.ts +0 -28
  321. package/src/components/visually-hidden/VisuallyHidden.ts +0 -16
  322. package/src/components/visually-hidden/leu-visually-hidden.ts +0 -11
  323. package/src/components/visually-hidden/stories/visually-hidden.stories.ts +0 -22
  324. package/src/components/visually-hidden/test/visually-hidden.test.ts +0 -34
  325. package/src/components/visually-hidden/visually-hidden.css +0 -10
  326. package/src/docs/contributing.mdx +0 -154
  327. package/src/docs/installation.mdx +0 -35
  328. package/src/docs/theme.mdx +0 -400
  329. package/src/docs/usage.mdx +0 -73
  330. package/src/global.d.ts +0 -11
  331. package/src/index.ts +0 -29
  332. package/src/lib/LeuElement.ts +0 -43
  333. package/src/lib/a11y.ts +0 -26
  334. package/src/lib/hasSlotController.ts +0 -74
  335. package/src/lib/mixins/FormAssociatedMixin.ts +0 -115
  336. package/src/lib/styleMap.ts +0 -139
  337. package/src/lib/utils.ts +0 -45
  338. package/src/styles/common-styles.css +0 -14
  339. package/src/styles/custom-media.css +0 -6
  340. package/src/styles/font-definitions.json +0 -210
  341. package/src/styles/style.stories.ts +0 -64
  342. package/src/styles/theme.css +0 -90
  343. package/stat_zh.png +0 -0
  344. package/stylelint.config.mjs +0 -23
  345. package/tsconfig.build.json +0 -24
  346. package/tsconfig.json +0 -14
  347. package/tsdown.config.ts +0 -35
  348. 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
- })