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