@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,210 +0,0 @@
1
- import { html } from "lit"
2
- import { fixture, expect, elementUpdated } from "@open-wc/testing"
3
- import { ifDefined } from "lit/directives/if-defined.js"
4
- import { sendKeys } from "@web/test-runner-commands"
5
- import { spy } from "sinon"
6
-
7
- import "../leu-pagination.js"
8
-
9
- async function defaultFixture(args = {}) {
10
- return fixture(
11
- html`<leu-pagination
12
- numOfItems=${ifDefined(args.numOfItems)}
13
- itemsPerPage=${ifDefined(args.itemsPerPage)}
14
- defaultPage=${ifDefined(args.defaultPage)}
15
- >
16
- </leu-pagination>`,
17
- )
18
- }
19
-
20
- describe("LeuPagination", () => {
21
- it("is a defined element", async () => {
22
- const el = customElements.get("leu-pagination")
23
-
24
- await expect(el).not.to.be.undefined
25
- })
26
-
27
- it("passes the a11y audit", async () => {
28
- const el = await defaultFixture({
29
- numOfItems: 98,
30
- itemsPerPage: 7,
31
- defaultPage: 1,
32
- })
33
-
34
- await expect(el).shadowDom.to.be.accessible()
35
- })
36
-
37
- it("disables the previous button on the first page", async () => {
38
- const el = await defaultFixture({
39
- numOfItems: 98,
40
- itemsPerPage: 7,
41
- defaultPage: 1,
42
- })
43
-
44
- const previous = el.shadowRoot.querySelectorAll("leu-button")[0]
45
-
46
- expect(previous).to.have.attribute("disabled")
47
- })
48
-
49
- it("disables the next button on the last page", async () => {
50
- const el = await defaultFixture({
51
- numOfItems: 98,
52
- itemsPerPage: 7,
53
- defaultPage: 14,
54
- })
55
-
56
- const next = el.shadowRoot.querySelectorAll("leu-button")[1]
57
-
58
- expect(next).to.have.attribute("disabled")
59
- })
60
-
61
- it("renders the correct number of available pages", async () => {
62
- const el = await defaultFixture({
63
- numOfItems: 98,
64
- itemsPerPage: 7,
65
- defaultPage: 1,
66
- })
67
-
68
- const label = el.shadowRoot.querySelectorAll(".label")
69
-
70
- expect(label).to.have.trimmed.text("von 14")
71
- })
72
-
73
- it("displays the current page", async () => {
74
- const el = await defaultFixture({
75
- numOfItems: 98,
76
- itemsPerPage: 7,
77
- defaultPage: 2,
78
- })
79
-
80
- const input = el.shadowRoot.querySelector("input")
81
-
82
- expect(input.value).to.equal("2")
83
- })
84
-
85
- it("increments the page with a click on the next button", async () => {
86
- const el = await defaultFixture({
87
- numOfItems: 98,
88
- itemsPerPage: 7,
89
- defaultPage: 1,
90
- })
91
-
92
- const next = el.shadowRoot.querySelectorAll("leu-button")[1]
93
-
94
- next.click()
95
- await elementUpdated(el)
96
-
97
- expect(el.page).to.equal(2)
98
- })
99
-
100
- it("decrements the page with a click on the prev button", async () => {
101
- const el = await defaultFixture({
102
- numOfItems: 98,
103
- itemsPerPage: 7,
104
- defaultPage: 10,
105
- })
106
-
107
- const next = el.shadowRoot.querySelectorAll("leu-button")[0]
108
-
109
- next.click()
110
- await elementUpdated(el)
111
-
112
- expect(el.page).to.equal(9)
113
- })
114
-
115
- it("increments the page with pressing the arrow up key", async () => {
116
- const el = await defaultFixture({
117
- numOfItems: 98,
118
- itemsPerPage: 7,
119
- defaultPage: 1,
120
- })
121
-
122
- el.focus()
123
-
124
- await sendKeys({
125
- press: "ArrowUp",
126
- })
127
- await elementUpdated(el)
128
-
129
- expect(el.page).to.equal(2)
130
- })
131
-
132
- it("decrements the page with pressing the arrow down key", async () => {
133
- const el = await defaultFixture({
134
- numOfItems: 98,
135
- itemsPerPage: 7,
136
- defaultPage: 13,
137
- })
138
-
139
- el.focus()
140
-
141
- await sendKeys({
142
- press: "ArrowDown",
143
- })
144
- await elementUpdated(el)
145
-
146
- expect(el.page).to.equal(12)
147
- })
148
-
149
- it("bounds the page to the max and min values", async () => {
150
- const el = await defaultFixture({
151
- numOfItems: 50,
152
- itemsPerPage: 10,
153
- defaultPage: 6,
154
- })
155
-
156
- const input = el.shadowRoot.querySelector("input")
157
-
158
- expect(el.page).to.equal(5)
159
- expect(input.value).to.equal("5")
160
-
161
- el.page = 0
162
- await elementUpdated(el)
163
-
164
- expect(el.page).to.equal(1)
165
- expect(input.value).to.equal("1")
166
-
167
- el.focus()
168
-
169
- await sendKeys({
170
- press: "ArrowDown",
171
- })
172
- await elementUpdated(el)
173
-
174
- expect(el.page).to.equal(1)
175
- expect(input.value).to.equal("1")
176
-
177
- await sendKeys({ press: "ArrowUp" })
178
- await sendKeys({ press: "ArrowUp" })
179
- await sendKeys({ press: "ArrowUp" })
180
- await sendKeys({ press: "ArrowUp" })
181
- await sendKeys({ press: "ArrowUp" })
182
-
183
- expect(el.page).to.equal(5)
184
- expect(input.value).to.equal("5")
185
- })
186
-
187
- it("fires a leu:pagechange event", async () => {
188
- const el = await defaultFixture({
189
- numOfItems: 98,
190
- itemsPerPage: 7,
191
- defaultPage: 7,
192
- })
193
-
194
- const eventSpy = spy()
195
- el.addEventListener("leu:pagechange", eventSpy)
196
-
197
- const prevButton = el.shadowRoot.querySelectorAll("leu-button")[0]
198
- const nextButton = el.shadowRoot.querySelectorAll("leu-button")[1]
199
-
200
- nextButton.click()
201
- prevButton.click()
202
-
203
- el.focus()
204
-
205
- await sendKeys({ press: "ArrowUp" })
206
- await sendKeys({ press: "ArrowDown" })
207
-
208
- expect(eventSpy).to.have.been.called.callCount(4)
209
- })
210
- })
@@ -1,33 +0,0 @@
1
- import { html } from "lit"
2
-
3
- import { LeuElement } from "../../lib/LeuElement.js"
4
-
5
- import styles from "./placeholder.css?inline"
6
-
7
- /**
8
- * @summary * A placeholder to display when no content is available.
9
- * @tagname leu-placeholder
10
- * @slot title - The placeholders title. Use a heading tag (h1-6) depeneding on your context.
11
- * @slot description - A description of the placeholder. Content is wrapped in a `<p>` tag by the component.
12
- * @slot cta - A call to action button like "Reload" or "Create". Add a single `<leu-button>`.
13
- *
14
- * @todo Add pending state with a skeleton.
15
- */
16
- export class LeuPlaceholder extends LeuElement {
17
- static styles = [LeuElement.styles, styles]
18
-
19
- static shadowRootOptions = {
20
- ...LeuElement.shadowRootOptions,
21
- delegatesFocus: true,
22
- }
23
-
24
- render() {
25
- return html`
26
- <div class="placeholder">
27
- <slot class="placeholder__title" name="title"></slot>
28
- <p><slot class="placeholder__description" name="description"></slot></p>
29
- <slot name="cta"></slot>
30
- </div>
31
- `
32
- }
33
- }
@@ -1,11 +0,0 @@
1
- import { LeuPlaceholder } from "./Placeholder.js"
2
-
3
- export { LeuPlaceholder }
4
-
5
- LeuPlaceholder.define("leu-placeholder")
6
-
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- "leu-placeholder": LeuPlaceholder
10
- }
11
- }
@@ -1,59 +0,0 @@
1
- @import url("../../styles/custom-media.css");
2
-
3
- :host {
4
- --placeholder-font-regular: var(--leu-font-family-regular);
5
- --placeholder-font-black: var(--leu-font-family-black);
6
-
7
- --placeholder-border-color: var(--leu-color-black-20);
8
-
9
- font-family: var(--placeholder-font-regular);
10
- }
11
-
12
- .placeholder {
13
- display: flex;
14
- flex-direction: column;
15
- align-items: center;
16
- text-align: center;
17
-
18
- border: 2px dashed var(--placeholder-border-color);
19
- border-radius: 0.25rem;
20
-
21
- padding: 2rem 1.5rem;
22
-
23
- @media (--viewport-regular) {
24
- padding: 2.5rem 2rem;
25
- }
26
-
27
- @media (--viewport-xlarge) {
28
- padding: 3.5rem 2.5rem;
29
- }
30
- }
31
-
32
- .placeholder__title {
33
- display: block;
34
- }
35
-
36
- .placeholder__title::slotted(:where(h1, h2, h3, h4, h5, h6)) {
37
- font: var(--leu-t-curve-regular-black-font);
38
- color: var(--leu-color-black-100);
39
- margin: 0 0 0.5rem;
40
- }
41
-
42
- .placeholder__description {
43
- font: var(--leu-t-curve-small-regular-font);
44
- color: var(--leu-color-black-60);
45
-
46
- margin-bottom: 0.75rem;
47
-
48
- @media (--viewport-small) {
49
- margin-bottom: 2rem;
50
- }
51
-
52
- @media (--viewport-regular) {
53
- margin-bottom: 1.25rem;
54
- }
55
-
56
- @media (--viewport-xlarge) {
57
- margin-bottom: 1.5rem;
58
- }
59
- }
@@ -1,34 +0,0 @@
1
- import { Meta, StoryObj } from "@storybook/web-components-vite"
2
- import { html } from "lit"
3
-
4
- import "../../button/leu-button.js"
5
- import "../../icon/leu-icon.js"
6
- import "../leu-placeholder.js"
7
- import { LeuPlaceholder } from "../Placeholder.js"
8
-
9
- type StoryArgs = LeuPlaceholder
10
- type Story = StoryObj<StoryArgs>
11
-
12
- export default {
13
- title: "Components/Placeholder",
14
- component: "leu-placeholder",
15
- } satisfies Meta<StoryArgs>
16
-
17
- const Template: Story = {
18
- render: (_args) =>
19
- html` <leu-placeholder>
20
- <h2 slot="title">Keine Ergebnisse zu «Regoin Zürich» gefunden.</h2>
21
- <p slot="description">
22
- Überprüfen Sie die Schreibweise der eingegebenen Wörter. Versuchen Sie
23
- andere Stichwörter. Versuchen Sie allgemeinere Stichwörter.
24
- </p>
25
- <leu-button slot="cta"> Suche zurücksetzen </leu-button>
26
- </leu-placeholder>`,
27
- }
28
-
29
- export const Regular = {
30
- ...Template,
31
- args: {
32
- // Add default args here
33
- },
34
- }
@@ -1,31 +0,0 @@
1
- import { html } from "lit"
2
- import { fixture, expect } from "@open-wc/testing"
3
-
4
- import "../leu-placeholder.js"
5
-
6
- async function defaultFixture() {
7
- return fixture(
8
- html`<leu-placeholder>
9
- <h2 slot="title">Keine Ergebnisse zu «Regoin Zürich» gefunden.</h2>
10
- <p slot="description">
11
- Überprüfen Sie die Schreibweise der eingegebenen Wörter. Versuchen Sie
12
- andere Stichwörter. Versuchen Sie allgemeinere Stichwörter.
13
- </p>
14
- <leu-button slot="cta"> Suche zurücksetzen </leu-button>
15
- </leu-placeholder>`,
16
- )
17
- }
18
-
19
- describe("LeuPlaceholder", () => {
20
- it("is a defined element", async () => {
21
- const el = customElements.get("leu-placeholder")
22
-
23
- expect(el).not.to.be.undefined
24
- })
25
-
26
- it("passes the a11y audit", async () => {
27
- const el = await defaultFixture()
28
-
29
- await expect(el).shadowDom.to.be.accessible()
30
- })
31
- })
@@ -1,264 +0,0 @@
1
- import { html, PropertyValues } from "lit"
2
- import { property } from "lit/decorators.js"
3
- import {
4
- autoUpdate,
5
- computePosition,
6
- flip,
7
- Placement,
8
- shift,
9
- size,
10
- offset,
11
- } from "@floating-ui/dom"
12
-
13
- import { LeuElement } from "../../lib/LeuElement.js"
14
-
15
- import styles from "./popup.css?inline"
16
-
17
- export interface VirtualElement {
18
- getBoundingClientRect: () => DOMRect
19
- contextElement?: Element
20
- }
21
-
22
- function isVirtualElement(el: unknown): el is VirtualElement {
23
- return (
24
- el !== null &&
25
- typeof el === "object" &&
26
- "getBoundingClientRect" in el &&
27
- ("contextElement" in el ? el instanceof Element : true)
28
- )
29
- }
30
-
31
- /**
32
- * @tagname leu-popup
33
- */
34
- export class LeuPopup extends LeuElement {
35
- static styles = [LeuElement.styles, styles]
36
-
37
- static shadowRootOptions = {
38
- ...LeuElement.shadowRootOptions,
39
- delegatesFocus: true,
40
- }
41
-
42
- @property() anchor: Element | string | VirtualElement
43
-
44
- @property({ type: Boolean, reflect: true })
45
- active: boolean = false
46
-
47
- @property({ type: String, reflect: true })
48
- placement?: Placement
49
-
50
- @property({ type: Boolean, reflect: true })
51
- flip: boolean = false
52
-
53
- @property({ type: Boolean, reflect: true })
54
- shift: boolean = false
55
-
56
- @property({ type: Number, reflect: true })
57
- shiftPadding: number = 0
58
-
59
- @property({ type: String, reflect: true })
60
- matchSize?: "width" | "height" | "both"
61
-
62
- /**
63
- * Offsets the popup along the main axis.
64
- * @link https://floating-ui.com/docs/offset#mainaxis
65
- */
66
- @property({ type: Number, reflect: true, attribute: "offset-main-axis" })
67
- offsetMainAxis?: number
68
-
69
- /**
70
- * Offsets the popup along the cross axis.
71
- * @link https://floating-ui.com/docs/offset#crossaxis
72
- */
73
- @property({ type: Number, reflect: true, attribute: "offset-cross-axis" })
74
- offsetCrossAxis?: number
75
-
76
- /**
77
- * Offsets the popup along the alignment axis.
78
- * Overrides the `offsetCrossAxis` value.
79
- * @link https://floating-ui.com/docs/offset#alignmentaxis
80
- */
81
- @property({ type: Number, reflect: true, attribute: "offset-alignment-axis" })
82
- offsetAlignmentAxis?: number
83
-
84
- @property({ type: String, reflect: true }) autoSize?:
85
- | "width"
86
- | "height"
87
- | "both"
88
-
89
- @property({ type: Number, reflect: true }) autoSizePadding: number = 0
90
-
91
- private anchorEl: Element | null
92
-
93
- private cleanup: ReturnType<typeof autoUpdate> | undefined
94
-
95
- disconnectedCallback() {
96
- super.disconnectedCallback()
97
- this.stop()
98
- }
99
-
100
- updated(changedProperties: PropertyValues<this>) {
101
- if (changedProperties.has("active")) {
102
- if (this.active) {
103
- this.start()
104
- } else {
105
- this.stop()
106
- }
107
- }
108
-
109
- if (changedProperties.has("anchor")) {
110
- this.handleAnchorChange()
111
- }
112
-
113
- if (this.active) {
114
- this.reposition()
115
- }
116
- }
117
-
118
- protected get popupEl() {
119
- return this.renderRoot?.querySelector<HTMLDivElement>(".popup") ?? null
120
- }
121
-
122
- protected start() {
123
- if (!this.anchorEl || !this.active) return
124
-
125
- this.cleanup = autoUpdate(this.anchorEl, this.popupEl, () => {
126
- this.reposition()
127
- })
128
- }
129
-
130
- protected stop() {
131
- this.cleanup?.()
132
-
133
- this.style.removeProperty("--auto-size-available-width")
134
- this.style.removeProperty("--auto-size-available-height")
135
- }
136
-
137
- public reposition() {
138
- if (!this.anchorEl || !this.popupEl || !this.active) return
139
-
140
- const middleware = []
141
-
142
- if (
143
- this.offsetAlignmentAxis ||
144
- this.offsetMainAxis ||
145
- this.offsetCrossAxis
146
- ) {
147
- middleware.push(
148
- offset({
149
- mainAxis: this.offsetMainAxis,
150
- crossAxis: this.offsetCrossAxis,
151
- alignmentAxis: this.offsetAlignmentAxis,
152
- }),
153
- )
154
- }
155
-
156
- if (this.matchSize) {
157
- middleware.push(
158
- size({
159
- apply: ({ rects }) => {
160
- const matchWidth =
161
- this.matchSize === "width" || this.matchSize === "both"
162
- const matchHeight =
163
- this.matchSize === "height" || this.matchSize === "both"
164
- this.popupEl.style.width = matchWidth
165
- ? `${rects.reference.width}px`
166
- : ""
167
- this.popupEl.style.height = matchHeight
168
- ? `${rects.reference.height}px`
169
- : ""
170
- },
171
- }),
172
- )
173
- } else {
174
- // Cleanup styles if we're not matching width/height
175
- this.popupEl.style.width = ""
176
- this.popupEl.style.height = ""
177
- }
178
-
179
- if (this.flip) {
180
- middleware.push(flip())
181
- }
182
-
183
- if (this.shift) {
184
- middleware.push(shift({ padding: this.shiftPadding }))
185
- }
186
-
187
- if (this.autoSize) {
188
- middleware.push(
189
- size({
190
- padding: this.autoSizePadding,
191
- apply: ({ availableWidth, availableHeight }) => {
192
- const setMaxWidth =
193
- this.autoSize === "width" || this.autoSize === "both"
194
- const setMaxHeight =
195
- this.autoSize === "height" || this.autoSize === "both"
196
-
197
- if (setMaxHeight) {
198
- this.style.setProperty(
199
- "--auto-size-available-height",
200
- `${availableHeight}px`,
201
- )
202
- } else {
203
- this.style.removeProperty("--auto-size-available-height")
204
- }
205
-
206
- if (setMaxWidth) {
207
- this.style.setProperty(
208
- "--auto-size-available-width",
209
- `${availableWidth}px`,
210
- )
211
- } else {
212
- this.style.removeProperty("--auto-size-available-width")
213
- }
214
- },
215
- }),
216
- )
217
- } else {
218
- // Cleanup styles if we're not auto-sizing
219
- this.style.removeProperty("--auto-size-available-width")
220
- this.style.removeProperty("--auto-size-available-height")
221
- }
222
-
223
- computePosition(this.anchorEl, this.popupEl, {
224
- placement: this.placement,
225
- middleware,
226
- }).then(({ x, y }) => {
227
- Object.assign(this.popupEl.style, {
228
- left: `${x}px`,
229
- top: `${y}px`,
230
- })
231
- })
232
- }
233
-
234
- handleAnchorChange() {
235
- if (this.anchor && typeof this.anchor === "string") {
236
- const root = this.getRootNode() as Document | ShadowRoot
237
- this.anchorEl = root.getElementById(this.anchor)
238
- } else if (
239
- this.anchor instanceof HTMLElement ||
240
- isVirtualElement(this.anchor)
241
- ) {
242
- this.anchorEl = this.anchor
243
- } else {
244
- this.anchorEl = this.querySelector("[slot=anchor]")
245
- }
246
-
247
- if (this.anchorEl instanceof HTMLSlotElement) {
248
- ;[this.anchorEl] = this.anchorEl.assignedElements({ flatten: true })
249
- }
250
-
251
- if (this.anchorEl) {
252
- this.start()
253
- }
254
- }
255
-
256
- render() {
257
- return html`
258
- <slot name="anchor" @slotchange=${this.handleAnchorChange}></slot>
259
- <div class="popup">
260
- <slot> </slot>
261
- </div>
262
- `
263
- }
264
- }
@@ -1,11 +0,0 @@
1
- import { LeuPopup } from "./Popup.js"
2
-
3
- export { LeuPopup }
4
-
5
- LeuPopup.define("leu-popup")
6
-
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- "leu-popup": LeuPopup
10
- }
11
- }
@@ -1,24 +0,0 @@
1
- :host {
2
- --popup-font-regular: var(--leu-font-family-regular);
3
- --popup-font-black: var(--leu-font-family-black);
4
-
5
- font-family: var(--popup-font-regular);
6
- display: contents;
7
- }
8
-
9
- .popup {
10
- display: none;
11
-
12
- max-width: var(--auto-size-available-width, none);
13
- max-height: var(--auto-size-available-height, none);
14
-
15
- position: absolute;
16
- top: 0;
17
- left: 0;
18
- z-index: var(--leu-z-index-popup);
19
- }
20
-
21
- /* TODO: Should visibility be a matter of the popup component? */
22
- :host([active]) .popup {
23
- display: block;
24
- }