@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,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
- })