@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,286 +0,0 @@
1
- import { nothing } from "lit"
2
- import { html, literal } from "lit/static-html.js"
3
- import { classMap } from "lit/directives/class-map.js"
4
- import { ifDefined } from "lit/directives/if-defined.js"
5
- import { property, query } from "lit/decorators.js"
6
-
7
- import { LeuIcon } from "../icon/Icon.js"
8
- import { LeuSpinner } from "../spinner/Spinner.js"
9
- import { LeuElement } from "../../lib/LeuElement.js"
10
- import { HasSlotController } from "../../lib/hasSlotController.js"
11
- import { ARIA_CHECKED_ROLES, ARIA_SELECTED_ROLES } from "../../lib/a11y.js"
12
-
13
- import styles from "./button.css?inline"
14
- import { FormAssociatedMixin } from "../../lib/mixins/FormAssociatedMixin.js"
15
-
16
- /**
17
- * @tagname leu-button
18
- * @slot before - The icon to display before the label
19
- * @slot after - The icon to display after the label
20
- * @slot - The label of the button or the icon if no label is set
21
- * @see https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=4-1444&mode=design&t=xu5Vii8jXKKCKDez-0
22
- */
23
- export class LeuButton extends FormAssociatedMixin(LeuElement) {
24
- static dependencies = {
25
- "leu-icon": LeuIcon,
26
- "leu-spinner": LeuSpinner,
27
- }
28
-
29
- static styles = [LeuElement.styles, styles]
30
-
31
- static shadowRootOptions = {
32
- ...LeuElement.shadowRootOptions,
33
- delegatesFocus: true,
34
- }
35
-
36
- private hasSlotController = new HasSlotController(this, [
37
- "before",
38
- "after",
39
- "[default]",
40
- ])
41
-
42
- /**
43
- * `aria-label` of the underlying button elements.
44
- * Use it to provide a label when only an icon is visible.
45
- */
46
- @property({ type: String, reflect: true })
47
- label: null | string = null
48
-
49
- /**
50
- * The size of the button.
51
- */
52
- @property({ type: String, reflect: true })
53
- size: "regular" | "small" = "regular"
54
-
55
- /**
56
- * The visual variant of the button.
57
- */
58
- @property({ type: String, reflect: true })
59
- variant: "primary" | "secondary" | "ghost" = "primary"
60
-
61
- /**
62
- * The `type` of the underlying button element. Ignored when `href` is set.
63
- */
64
- @property({ type: String, reflect: true })
65
- type: "button" | "submit" | "reset" = "button"
66
-
67
- /**
68
- * The `role` of the underlying button element. Ignored when `href` is set.
69
- */
70
- @property({ type: String, reflect: true })
71
- componentRole?: string
72
-
73
- /**
74
- * If set, renders the button as an <a> element instead of a <button> with the provided href.
75
- */
76
- @property({ type: String, reflect: true })
77
- href: string
78
-
79
- /** Tells the browser where to display the linked URL. Only used when `href` is set. */
80
- @property() target: "_blank" | "_parent" | "_self" | "_top"
81
-
82
- /**
83
- * Whether the button is disabled or not. Ignored when `href` is set.
84
- * @type {boolean}
85
- */
86
- @property({ type: Boolean, reflect: true })
87
- disabled: boolean = false
88
-
89
- /**
90
- * Whether the button should be round.
91
- * Can only be applied when the button contains an icon without a visible label.
92
- * @type {boolean}
93
- */
94
- @property({ type: Boolean, reflect: true })
95
- round: boolean = false
96
-
97
- /**
98
- * Whether the button is active or not.
99
- * Depending on the `componentRole`, it applies `aria-checked` or `aria-selected` to the underlying button element.
100
- */
101
- @property({ type: Boolean, reflect: true })
102
- active: boolean = false
103
-
104
- /**
105
- * Wheter the colors should be inverted. For use on dark backgrounds.
106
- */
107
- @property({ type: Boolean, reflect: true })
108
- inverted: boolean = false
109
-
110
- /**
111
- * Whether the button is expanded or not.
112
- * Only has an effect on the variant `ghost` to show an expanding icon.
113
- * If the property is not set, the icon will not be shown.
114
- * If it is set, the icon will either show an expanded or collapsed state.
115
- */
116
- @property({ type: String, reflect: true })
117
- expanded?: "true" | "false"
118
-
119
- /**
120
- * Replaces the content with a spinner
121
- */
122
- @property({ type: Boolean, reflect: true })
123
- loading: boolean = false
124
-
125
- @query(".button")
126
- private button!: HTMLButtonElement | HTMLAnchorElement
127
-
128
- private renderExpandingIcon() {
129
- if (typeof this.expanded !== "undefined" && this.variant === "ghost") {
130
- return html`<div class="icon-expanded">
131
- <leu-icon name="angleDropDown" size="24"></leu-icon>
132
- </div>`
133
- }
134
-
135
- return nothing
136
- }
137
-
138
- private getAriaAttributes() {
139
- const attributes: {
140
- role: string
141
- label: string
142
- checked?: "true" | "false"
143
- selected?: "true" | "false"
144
- } = {
145
- role: this.componentRole,
146
- label: this.label,
147
- }
148
-
149
- // TODO: checked and selected roles are not mutually exclusive
150
- if (this.componentRole) {
151
- if (
152
- (ARIA_CHECKED_ROLES as ReadonlyArray<string>).includes(
153
- this.componentRole,
154
- )
155
- ) {
156
- attributes.checked = this.active ? "true" : "false"
157
- } else if (
158
- (ARIA_SELECTED_ROLES as ReadonlyArray<string>).includes(
159
- this.componentRole,
160
- )
161
- ) {
162
- attributes.selected = this.active ? "true" : "false"
163
- }
164
- }
165
-
166
- return attributes
167
- }
168
-
169
- private hasTextContent() {
170
- return Array.from(this.childNodes).some(
171
- (node) =>
172
- node.nodeType === node.TEXT_NODE && node.textContent.trim() !== "",
173
- )
174
- }
175
-
176
- // The form value is set at the very moment the button is clicked.
177
- /* eslint-disable-next-line class-methods-use-this */
178
- setFormValue() {}
179
-
180
- protected handleClick(e: PointerEvent) {
181
- if (this.disabled || this.loading) {
182
- e.preventDefault()
183
- e.stopImmediatePropagation()
184
- return
185
- }
186
-
187
- const form = this.internals.form
188
-
189
- if (this.type === "button" || !form) {
190
- return
191
- }
192
-
193
- if (this.type === "reset") {
194
- form.reset()
195
- }
196
-
197
- /**
198
- * Form associated custom elements don't trigger form submission when they have `type="submit"`.
199
- * They also can't be passed as the submitter to `form.requestSubmit()`.
200
- * To work around this, we create a temporary hidden button, trigger the submission through it and remove it afterwards.
201
- * Hopefully we can move away from this workaround in the future.
202
- */
203
- if (this.type === "submit") {
204
- const proxyButton = document.createElement("button")
205
- Object.assign(proxyButton, {
206
- type: "submit",
207
- name: this.name,
208
- value: this.getAttribute("value") ?? "",
209
- })
210
-
211
- form.appendChild(proxyButton)
212
- form.requestSubmit(proxyButton)
213
- form.removeChild(proxyButton)
214
- }
215
- }
216
-
217
- click() {
218
- this.button.click()
219
- }
220
-
221
- focus(options?: FocusOptions) {
222
- this.button.focus(options)
223
- }
224
-
225
- blur() {
226
- this.button.blur()
227
- }
228
-
229
- render() {
230
- const hasTextContent = this.hasTextContent()
231
- const hasIconDefault = Boolean(this.querySelector("leu-icon"))
232
- const hasIconBefore = this.hasSlotController.test("before")
233
- const hasIconAfter = this.hasSlotController.test("after")
234
- const isLink = Boolean(this.href)
235
- const aria = this.getAriaAttributes()
236
-
237
- const tag = isLink ? literal`a` : literal`button`
238
-
239
- const cssClasses = {
240
- button: true,
241
- "button--icon-only": hasIconDefault && !hasTextContent,
242
- "button--icon-before": hasIconBefore,
243
- "button--icon-after": hasIconAfter,
244
- "button--round": this.round,
245
- "button--active": this.active,
246
- "button--inverted": this.inverted,
247
- "button--loading": this.loading,
248
- "button--disabled": this.disabled,
249
- [`button--${this.variant}`]: true,
250
- [`button--${this.size}`]: true,
251
- }
252
-
253
- /* The eslint rules don't recognize html import from lit/static-html.js */
254
- /* eslint-disable lit/binding-positions, lit/no-invalid-html */
255
- return html`
256
- <${tag}
257
- @click=${!isLink ? this.handleClick : undefined}
258
- aria-label=${ifDefined(aria.label)}
259
- aria-selected=${ifDefined(aria.selected)}
260
- aria-checked=${ifDefined(aria.checked)}
261
- aria-expanded=${ifDefined(this.expanded)}
262
- role=${ifDefined(isLink ? undefined : aria.role)}
263
- href=${ifDefined(this.href)}
264
- target=${ifDefined(isLink ? this.target : undefined)}
265
- class=${classMap(cssClasses)}
266
- ?disabled=${(this.disabled && !isLink) || this.loading}
267
- type=${ifDefined(isLink ? undefined : this.type)}
268
- >
269
- <div class="icon-wrapper icon-wrapper--before">
270
- <slot name="before" class="icon-wrapper__slot"></slot>
271
- </div>
272
- <span class="content"><slot></slot></span>
273
- <div class="icon-wrapper icon-wrapper--after">
274
- <slot name="after" class="icon-wrapper__slot"></slot>
275
- </div>
276
- ${
277
- this.loading
278
- ? html`<leu-spinner class="spinner"></leu-spinner>`
279
- : nothing
280
- }
281
- ${this.renderExpandingIcon()}
282
- </${tag}>
283
- `
284
- /* eslint-enable lit/binding-positions, lit/no-invalid-html */
285
- }
286
- }
@@ -1,317 +0,0 @@
1
- :host {
2
- display: inline-block;
3
- }
4
-
5
- /*
6
- * @todo : Disable hover styles for loading state
7
- */
8
- .button {
9
- position: relative;
10
- font-family: var(--leu-font-family-black);
11
- text-align: center;
12
- text-decoration: none;
13
- appearance: none;
14
- transition: background 0.1s ease;
15
- cursor: pointer;
16
- border: none;
17
- border-radius: 2px;
18
-
19
- display: inline-flex;
20
- justify-content: center;
21
- align-items: center;
22
- column-gap: 8px;
23
- width: 100%;
24
- }
25
-
26
- .content {
27
- flex: 1 1 0;
28
- overflow: hidden;
29
- text-overflow: ellipsis;
30
- white-space: nowrap;
31
- }
32
-
33
- .button--round {
34
- border-radius: 50%;
35
- }
36
-
37
- .button--disabled {
38
- cursor: not-allowed;
39
- }
40
-
41
- .button--loading {
42
- cursor: wait;
43
- }
44
-
45
- .button:focus-visible {
46
- outline: 2px solid var(--leu-color-func-cyan);
47
- outline-offset: 2px;
48
- }
49
-
50
- .button--inverted:focus-visible {
51
- outline: 2px solid var(--leu-color-black-0);
52
- }
53
-
54
- .button--icon-only {
55
- aspect-ratio: 1;
56
- width: unset;
57
- }
58
-
59
- .button--loading :where(.content, .icon-wrapper) {
60
- visibility: hidden;
61
- }
62
-
63
- /* size - regular */
64
- .button--regular {
65
- padding: 12px 24px;
66
- font-size: 16px;
67
- line-height: 24px;
68
- }
69
-
70
- .button--regular.button--icon-only {
71
- padding: 12px;
72
- }
73
-
74
- /* size - small */
75
- .button--small {
76
- padding: 6px 24px;
77
- font-size: 14px;
78
- line-height: 20px;
79
-
80
- --leu-icon-size: 1rem;
81
- }
82
-
83
- .button--small.button--icon-only {
84
- padding: 8px;
85
- }
86
-
87
- /* primary */
88
- .button--primary {
89
- color: var(--leu-color-black-0);
90
- background: var(--leu-color-black-100);
91
- }
92
-
93
- .button--primary:hover {
94
- color: var(--leu-color-black-0);
95
- background: var(--leu-color-black-transp-80);
96
- }
97
-
98
- .button--primary.button--active {
99
- color: var(--leu-color-black-0);
100
- background: var(--leu-color-black-100);
101
- }
102
-
103
- .button--primary.button--active:hover {
104
- background: var(--leu-color-black-transp-80);
105
- }
106
-
107
- .button--primary.button--disabled {
108
- color: var(--leu-color-black-0);
109
- background: var(--leu-color-black-transp-20);
110
- }
111
-
112
- /* secondary */
113
- .button--secondary {
114
- color: var(--leu-color-black-transp-60);
115
- background: var(--leu-color-black-transp-10);
116
- }
117
-
118
- .button--secondary:hover {
119
- color: var(--leu-color-black-100);
120
- background: var(--leu-color-black-transp-20);
121
- }
122
-
123
- .button--secondary.button--active {
124
- color: var(--leu-color-black-0);
125
- background: var(--leu-color-black-100);
126
- }
127
-
128
- .button--secondary.button--active:hover {
129
- background: var(--leu-color-black-transp-80);
130
- }
131
-
132
- .button--secondary.button--disabled {
133
- color: var(--leu-color-black-transp-20);
134
- background: var(--leu-color-black-transp-5);
135
- }
136
-
137
- /* ghost */
138
- .button--ghost {
139
- --leu-icon-size: 1rem;
140
-
141
- background: transparent;
142
- padding: 0 0.5rem;
143
- color: var(--leu-color-black-60);
144
- font-family: var(--leu-font-family-regular);
145
- height: 2rem;
146
- }
147
-
148
- .button--ghost:hover {
149
- color: var(--leu-color-black-100);
150
- }
151
-
152
- .button--ghost.button--active {
153
- color: var(--leu-color-black-100);
154
- }
155
-
156
- .button--ghost.button--disabled {
157
- color: var(--leu-color-black-20);
158
- }
159
-
160
- /* primary + inverted */
161
- .button--primary.button--inverted {
162
- color: var(--leu-color-black-100);
163
- background: var(--leu-color-black-0);
164
- }
165
-
166
- .button--primary.button--inverted:hover {
167
- color: var(--leu-color-black-100);
168
- background: var(--leu-color-white-transp-70);
169
- }
170
-
171
- .button--primary.button--inverted.button--active {
172
- color: var(--leu-color-black-0);
173
- background: var(--leu-color-black-100);
174
- }
175
-
176
- .button--primary.button--inverted.button--disabled {
177
- color: var(--leu-color-black-40);
178
- background: var(--leu-color-white-transp-70);
179
- }
180
-
181
- /* secondary + inverted */
182
- .button--secondary.button--inverted {
183
- color: var(--leu-color-black-0);
184
- background: var(--leu-color-black-transp-20);
185
- }
186
-
187
- .button--secondary.button--inverted:hover {
188
- color: var(--leu-color-black-0);
189
- background: var(--leu-color-black-transp-40);
190
- }
191
-
192
- .button--secondary.button--inverted.button--active {
193
- color: var(--leu-color-black-100);
194
- background: var(--leu-color-black-0);
195
- }
196
-
197
- .button--secondary.button--inverted.button--disabled {
198
- color: var(--leu-color-white-transp-70);
199
- background: var(--leu-color-black-transp-10);
200
- }
201
-
202
- /* ghost + inverted */
203
- .button--ghost.button--inverted {
204
- color: var(--leu-color-black-0);
205
- }
206
-
207
- .button--ghost.button--inverted:hover {
208
- color: var(--leu-color-white-transp-70);
209
- }
210
-
211
- .button--ghost.button--inverted.button--active {
212
- color: var(--leu-color-black-0);
213
- }
214
-
215
- .button--ghost.button--inverted.button--disabled {
216
- color: var(--leu-color-black-20);
217
- }
218
-
219
- /* icon-wrapper */
220
- .icon-wrapper leu-icon {
221
- display: block;
222
- }
223
-
224
- .icon-wrapper {
225
- display: none;
226
- }
227
-
228
- .button--icon-before .icon-wrapper--before,
229
- .button--icon-after .icon-wrapper--after {
230
- display: block;
231
- }
232
-
233
- .button--ghost .icon-wrapper {
234
- position: relative;
235
- width: 2rem;
236
- padding: 0 0.5rem;
237
- --_bg: var(--leu-color-black-transp-10);
238
- --_color: currentcolor;
239
- }
240
-
241
- .button--ghost .icon-wrapper__slot {
242
- display: block;
243
- position: relative;
244
- z-index: 1;
245
- color: var(--_color);
246
- }
247
-
248
- .button--ghost .icon-wrapper::before {
249
- content: "";
250
- position: absolute;
251
- z-index: 0;
252
- left: 0;
253
- top: -0.5rem;
254
-
255
- width: 2rem;
256
- aspect-ratio: 1;
257
- border-radius: 50%;
258
- background: var(--_bg);
259
- }
260
-
261
- .button--ghost.button--active .icon-wrapper {
262
- --_bg: var(--leu-color-black-100);
263
- --_color: var(--leu-color-black-0);
264
- }
265
-
266
- .button--ghost.button--disabled .icon-wrapper {
267
- --_bg: var(--leu-color-black-transp-5);
268
- }
269
-
270
- /* inverted */
271
-
272
- .button--ghost.button--inverted .icon-wrapper {
273
- --_bg: var(--leu-color-black-transp-20);
274
- }
275
-
276
- .button--ghost.button--inverted:hover .icon-wrapper {
277
- --_bg: var(--leu-color-black-transp-40);
278
- --_color: var(--leu-color-black-0);
279
- }
280
-
281
- .button--ghost.button--inverted.button--disabled .icon-wrapper {
282
- --_bg: var(--leu-color-black-transp-20);
283
- --_color: var(--leu-color-white-transp-70);
284
- }
285
-
286
- .button--ghost.button--active.button--inverted .icon-wrapper {
287
- --_bg: var(--leu-color-black-0);
288
- --_color: var(--leu-color-black-100);
289
- }
290
-
291
- /* Expanded icon */
292
- .icon-expanded leu-icon {
293
- display: block;
294
- }
295
-
296
- .icon-expanded {
297
- transition: transform 0.1s ease;
298
- }
299
-
300
- :host([expanded="true"]) .icon-expanded {
301
- transform: rotate(180deg);
302
- }
303
-
304
- .spinner {
305
- --leu-spinner-size: 1.75rem;
306
- padding: 0;
307
- position: absolute;
308
- top: 50%;
309
- left: 50%;
310
- transform: translate(-50%, -50%);
311
- color: currentcolor;
312
- display: block;
313
- }
314
-
315
- button.small .spinner {
316
- --leu-spinner-size: 1.25rem;
317
- }
@@ -1,11 +0,0 @@
1
- import { LeuButton } from "./Button.js"
2
-
3
- export { LeuButton }
4
-
5
- LeuButton.define("leu-button")
6
-
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- "leu-button": LeuButton
10
- }
11
- }