@statistikzh/leu 0.3.0 → 0.5.0

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 (295) hide show
  1. package/.github/workflows/deploy-github-pages.yaml +33 -0
  2. package/.storybook/main.js +27 -1
  3. package/.storybook/manager-head.html +1 -0
  4. package/.storybook/manager.js +9 -0
  5. package/.storybook/preview-head.html +1 -1
  6. package/.storybook/preview.js +59 -6
  7. package/.storybook/static/logo.svg +19 -0
  8. package/.storybook/theme.js +7 -0
  9. package/CHANGELOG.md +54 -0
  10. package/README.md +1 -1
  11. package/custom-elements-manifest.config.js +46 -0
  12. package/dist/Accordion.d.ts +31 -0
  13. package/dist/Accordion.d.ts.map +1 -0
  14. package/dist/Accordion.js +257 -0
  15. package/dist/Breadcrumb.d.ts +69 -0
  16. package/dist/Breadcrumb.d.ts.map +1 -0
  17. package/dist/Breadcrumb.js +392 -0
  18. package/dist/Button-da11d064.d.ts +84 -0
  19. package/dist/Button-da11d064.d.ts.map +1 -0
  20. package/dist/Button-da11d064.js +542 -0
  21. package/dist/Button.d.ts +2 -0
  22. package/dist/Button.d.ts.map +1 -0
  23. package/dist/Button.js +6 -423
  24. package/dist/ButtonGroup.d.ts +24 -0
  25. package/dist/ButtonGroup.d.ts.map +1 -0
  26. package/dist/ButtonGroup.js +72 -43
  27. package/dist/Checkbox.d.ts +13 -0
  28. package/dist/Checkbox.d.ts.map +1 -0
  29. package/dist/Checkbox.js +101 -84
  30. package/dist/CheckboxGroup.d.ts +13 -0
  31. package/dist/CheckboxGroup.d.ts.map +1 -0
  32. package/dist/CheckboxGroup.js +41 -37
  33. package/dist/Chip.d.ts +5 -0
  34. package/dist/Chip.d.ts.map +1 -0
  35. package/dist/{Chip-5f70d04f.js → Chip.js} +21 -6
  36. package/dist/ChipGroup.d.ts +28 -0
  37. package/dist/ChipGroup.d.ts.map +1 -0
  38. package/dist/ChipGroup.js +64 -10
  39. package/dist/ChipLink.d.ts +15 -0
  40. package/dist/ChipLink.d.ts.map +1 -0
  41. package/dist/ChipLink.js +4 -7
  42. package/dist/ChipRemovable.d.ts +13 -0
  43. package/dist/ChipRemovable.d.ts.map +1 -0
  44. package/dist/ChipRemovable.js +5 -8
  45. package/dist/ChipSelectable.d.ts +22 -0
  46. package/dist/ChipSelectable.d.ts.map +1 -0
  47. package/dist/ChipSelectable.js +8 -11
  48. package/dist/Dropdown.d.ts +15 -0
  49. package/dist/Dropdown.d.ts.map +1 -0
  50. package/dist/Dropdown.js +73 -26
  51. package/dist/Input.d.ts +154 -0
  52. package/dist/Input.d.ts.map +1 -0
  53. package/dist/Input.js +42 -35
  54. package/dist/Menu.d.ts +8 -0
  55. package/dist/Menu.d.ts.map +1 -0
  56. package/dist/Menu.js +2 -5
  57. package/dist/MenuItem.d.ts +21 -0
  58. package/dist/MenuItem.d.ts.map +1 -0
  59. package/dist/MenuItem.js +32 -17
  60. package/dist/Pagination.d.ts +27 -0
  61. package/dist/Pagination.d.ts.map +1 -0
  62. package/dist/Pagination.js +121 -89
  63. package/dist/Popup.d.ts +18 -0
  64. package/dist/Popup.d.ts.map +1 -0
  65. package/dist/Popup.js +215 -0
  66. package/dist/Radio.d.ts +12 -0
  67. package/dist/Radio.d.ts.map +1 -0
  68. package/dist/Radio.js +9 -8
  69. package/dist/RadioGroup.d.ts +20 -0
  70. package/dist/RadioGroup.d.ts.map +1 -0
  71. package/dist/RadioGroup.js +41 -39
  72. package/dist/ScrollTop.d.ts +19 -0
  73. package/dist/ScrollTop.d.ts.map +1 -0
  74. package/dist/ScrollTop.js +122 -0
  75. package/dist/Select.d.ts +98 -0
  76. package/dist/Select.d.ts.map +1 -0
  77. package/dist/Select.js +79 -122
  78. package/dist/Table.d.ts +48 -0
  79. package/dist/Table.d.ts.map +1 -0
  80. package/dist/Table.js +141 -121
  81. package/dist/VisuallyHidden.d.ts +8 -0
  82. package/dist/VisuallyHidden.d.ts.map +1 -0
  83. package/dist/VisuallyHidden.js +28 -0
  84. package/dist/_rollupPluginBabelHelpers-20f659f4.d.ts +3 -0
  85. package/dist/_rollupPluginBabelHelpers-20f659f4.d.ts.map +1 -0
  86. package/dist/{defineElement-ba770aed.js → _rollupPluginBabelHelpers-20f659f4.js} +1 -15
  87. package/dist/defineElement-40372b4b.d.ts +9 -0
  88. package/dist/defineElement-40372b4b.d.ts.map +1 -0
  89. package/dist/defineElement-40372b4b.js +15 -0
  90. package/dist/icon-03e86700.d.ts +11 -0
  91. package/dist/icon-03e86700.d.ts.map +1 -0
  92. package/dist/index.js.d.ts +21 -0
  93. package/dist/index.js.d.ts.map +1 -0
  94. package/dist/index.js.js +42 -0
  95. package/dist/leu-accordion.d.ts +3 -0
  96. package/dist/leu-accordion.d.ts.map +1 -0
  97. package/dist/leu-accordion.js +9 -0
  98. package/dist/leu-breadcrumb.d.ts +3 -0
  99. package/dist/leu-breadcrumb.d.ts.map +1 -0
  100. package/dist/leu-breadcrumb.js +23 -0
  101. package/dist/leu-button-group.d.ts +3 -0
  102. package/dist/leu-button-group.d.ts.map +1 -0
  103. package/dist/leu-button-group.js +6 -6
  104. package/dist/leu-button.d.ts +3 -0
  105. package/dist/leu-button.d.ts.map +1 -0
  106. package/dist/leu-button.js +7 -3
  107. package/dist/leu-checkbox-group.d.ts +3 -0
  108. package/dist/leu-checkbox-group.d.ts.map +1 -0
  109. package/dist/leu-checkbox-group.js +6 -3
  110. package/dist/leu-checkbox.d.ts +3 -0
  111. package/dist/leu-checkbox.d.ts.map +1 -0
  112. package/dist/leu-checkbox.js +6 -3
  113. package/dist/leu-chip-group.d.ts +3 -0
  114. package/dist/leu-chip-group.d.ts.map +1 -0
  115. package/dist/leu-chip-group.js +7 -3
  116. package/dist/leu-chip-link.d.ts +3 -0
  117. package/dist/leu-chip-link.d.ts.map +1 -0
  118. package/dist/leu-chip-link.js +7 -4
  119. package/dist/leu-chip-removable.d.ts +3 -0
  120. package/dist/leu-chip-removable.d.ts.map +1 -0
  121. package/dist/leu-chip-removable.js +7 -4
  122. package/dist/leu-chip-selectable.d.ts +3 -0
  123. package/dist/leu-chip-selectable.d.ts.map +1 -0
  124. package/dist/leu-chip-selectable.js +7 -4
  125. package/dist/leu-dropdown.d.ts +3 -0
  126. package/dist/leu-dropdown.d.ts.map +1 -0
  127. package/dist/leu-dropdown.js +15 -4
  128. package/dist/leu-input.d.ts +3 -0
  129. package/dist/leu-input.d.ts.map +1 -0
  130. package/dist/leu-input.js +7 -3
  131. package/dist/leu-menu-item.d.ts +3 -0
  132. package/dist/leu-menu-item.d.ts.map +1 -0
  133. package/dist/leu-menu-item.js +8 -3
  134. package/dist/leu-menu.d.ts +3 -0
  135. package/dist/leu-menu.d.ts.map +1 -0
  136. package/dist/leu-menu.js +6 -3
  137. package/dist/leu-pagination.d.ts +3 -0
  138. package/dist/leu-pagination.d.ts.map +1 -0
  139. package/dist/leu-pagination.js +12 -4
  140. package/dist/leu-popup.d.ts +3 -0
  141. package/dist/leu-popup.d.ts.map +1 -0
  142. package/dist/leu-popup.js +9 -0
  143. package/dist/leu-radio-group.d.ts +3 -0
  144. package/dist/leu-radio-group.d.ts.map +1 -0
  145. package/dist/leu-radio-group.js +6 -3
  146. package/dist/leu-radio.d.ts +3 -0
  147. package/dist/leu-radio.d.ts.map +1 -0
  148. package/dist/leu-radio.js +6 -3
  149. package/dist/leu-scroll-top.d.ts +3 -0
  150. package/dist/leu-scroll-top.d.ts.map +1 -0
  151. package/dist/leu-scroll-top.js +14 -0
  152. package/dist/leu-select.d.ts +3 -0
  153. package/dist/leu-select.d.ts.map +1 -0
  154. package/dist/leu-select.js +16 -4
  155. package/dist/leu-table.d.ts +3 -0
  156. package/dist/leu-table.d.ts.map +1 -0
  157. package/dist/leu-table.js +13 -4
  158. package/dist/leu-visually-hidden.d.ts +3 -0
  159. package/dist/leu-visually-hidden.d.ts.map +1 -0
  160. package/dist/leu-visually-hidden.js +8 -0
  161. package/dist/theme.css +386 -2
  162. package/dist/utils-65469421.d.ts +16 -0
  163. package/dist/utils-65469421.d.ts.map +1 -0
  164. package/dist/utils-65469421.js +35 -0
  165. package/index.js +3 -0
  166. package/package.json +47 -17
  167. package/postcss.config.cjs +2 -0
  168. package/rollup.config.js +21 -40
  169. package/scripts/generate-component/templates/[Name].js +0 -5
  170. package/scripts/generate-component/templates/[name].css +3 -3
  171. package/scripts/generate-component/templates/[namespace]-[name].js +5 -2
  172. package/scripts/postcss-leu-font-styles.cjs +160 -0
  173. package/src/components/accordion/Accordion.js +0 -6
  174. package/src/components/accordion/accordion.css +2 -2
  175. package/src/components/accordion/leu-accordion.js +5 -2
  176. package/src/components/accordion/stories/accordion.stories.js +8 -4
  177. package/src/components/accordion/test/accordion.test.js +95 -3
  178. package/src/components/breadcrumb/Breadcrumb.js +311 -0
  179. package/src/components/breadcrumb/breadcrumb.css +103 -0
  180. package/src/components/breadcrumb/leu-breadcrumb.js +6 -0
  181. package/src/components/breadcrumb/stories/breadcrumb.stories.js +73 -0
  182. package/src/components/breadcrumb/test/breadcrumb.test.js +141 -0
  183. package/src/components/button/Button.js +76 -20
  184. package/src/components/button/button.css +13 -5
  185. package/src/components/button/leu-button.js +5 -2
  186. package/src/components/button/stories/button.stories.js +79 -105
  187. package/src/components/button/test/button.test.js +184 -3
  188. package/src/components/button-group/ButtonGroup.js +76 -40
  189. package/src/components/button-group/leu-button-group.js +5 -2
  190. package/src/components/button-group/stories/button-group.stories.js +19 -6
  191. package/src/components/button-group/test/button-group.test.js +87 -4
  192. package/src/components/checkbox/Checkbox.js +6 -85
  193. package/src/components/checkbox/CheckboxGroup.js +8 -38
  194. package/src/components/checkbox/checkbox-group.css +29 -0
  195. package/src/components/checkbox/checkbox.css +76 -0
  196. package/src/components/checkbox/leu-checkbox-group.js +5 -2
  197. package/src/components/checkbox/leu-checkbox.js +5 -2
  198. package/src/components/checkbox/stories/checkbox-group.stories.js +44 -21
  199. package/src/components/checkbox/stories/checkbox.stories.js +7 -1
  200. package/src/components/checkbox/test/checkbox-group.test.js +124 -0
  201. package/src/components/checkbox/test/checkbox.test.js +72 -59
  202. package/src/components/chip/Chip.js +1 -0
  203. package/src/components/chip/ChipGroup.js +42 -7
  204. package/src/components/chip/ChipLink.js +1 -6
  205. package/src/components/chip/ChipRemovable.js +2 -7
  206. package/src/components/chip/ChipSelectable.js +5 -10
  207. package/src/components/chip/chip-group.css +12 -2
  208. package/src/components/chip/chip.css +14 -3
  209. package/src/components/chip/exports.js +4 -10
  210. package/src/components/chip/leu-chip-group.js +5 -2
  211. package/src/components/chip/leu-chip-link.js +5 -2
  212. package/src/components/chip/leu-chip-removable.js +5 -2
  213. package/src/components/chip/leu-chip-selectable.js +5 -2
  214. package/src/components/chip/stories/chip-group.stories.js +110 -44
  215. package/src/components/chip/stories/chip-link.stories.js +16 -4
  216. package/src/components/chip/stories/chip-removable.stories.js +15 -4
  217. package/src/components/chip/stories/chip-selectable.stories.js +13 -3
  218. package/src/components/chip/test/chip-group.test.js +124 -0
  219. package/src/components/chip/test/chip-link.test.js +58 -0
  220. package/src/components/chip/test/chip-removable.test.js +79 -0
  221. package/src/components/chip/test/chip-selectable.test.js +95 -0
  222. package/src/components/chip/test/chip.test.js +1 -1
  223. package/src/components/dropdown/Dropdown.js +72 -24
  224. package/src/components/dropdown/dropdown.css +1 -2
  225. package/src/components/dropdown/leu-dropdown.js +5 -2
  226. package/src/components/dropdown/stories/dropdown.stories.js +11 -5
  227. package/src/components/dropdown/test/dropdown.test.js +6 -6
  228. package/src/components/icon/icon.js +1 -1
  229. package/src/components/icon/test/icon.test.js +66 -0
  230. package/src/components/input/Input.js +25 -28
  231. package/src/components/input/input.css +11 -8
  232. package/src/components/input/leu-input.js +5 -2
  233. package/src/components/input/stories/input.stories.js +21 -2
  234. package/src/components/input/test/input.test.js +432 -4
  235. package/src/components/menu/Menu.js +0 -5
  236. package/src/components/menu/MenuItem.js +20 -13
  237. package/src/components/menu/leu-menu-item.js +5 -2
  238. package/src/components/menu/leu-menu.js +5 -2
  239. package/src/components/menu/menu-item.css +7 -4
  240. package/src/components/menu/stories/menu-item.stories.js +13 -4
  241. package/src/components/menu/stories/menu.stories.js +11 -5
  242. package/src/components/menu/test/menu-item.test.js +180 -0
  243. package/src/components/menu/test/menu.test.js +10 -2
  244. package/src/components/pagination/Pagination.js +118 -99
  245. package/src/components/pagination/leu-pagination.js +5 -2
  246. package/src/components/pagination/pagination.css +6 -1
  247. package/src/components/pagination/stories/pagination.stories.js +30 -9
  248. package/src/components/pagination/test/pagination.test.js +191 -5
  249. package/src/components/popup/Popup.js +200 -0
  250. package/src/components/popup/leu-popup.js +6 -0
  251. package/src/components/popup/popup.css +27 -0
  252. package/src/components/popup/stories/popup.stories.js +58 -0
  253. package/src/components/popup/test/popup.test.js +29 -0
  254. package/src/components/radio/Radio.js +2 -6
  255. package/src/components/radio/RadioGroup.js +6 -38
  256. package/src/components/radio/leu-radio-group.js +5 -2
  257. package/src/components/radio/leu-radio.js +5 -2
  258. package/src/components/radio/radio-group.css +29 -0
  259. package/src/components/radio/radio.css +1 -1
  260. package/src/components/radio/stories/radio-group.stories.js +38 -19
  261. package/src/components/radio/stories/radio.stories.js +7 -1
  262. package/src/components/radio/test/radio-group.test.js +86 -0
  263. package/src/components/radio/test/radio.test.js +108 -17
  264. package/src/components/scroll-top/ScrollTop.js +87 -0
  265. package/src/components/scroll-top/leu-scroll-top.js +6 -0
  266. package/src/components/scroll-top/scroll-top.css +34 -0
  267. package/src/components/scroll-top/stories/scroll-top.stories.js +217 -0
  268. package/src/components/scroll-top/test/scroll-top.test.js +22 -0
  269. package/src/components/select/Select.js +58 -37
  270. package/src/components/select/leu-select.js +5 -2
  271. package/src/components/select/select.css +15 -15
  272. package/src/components/select/stories/select.stories.js +15 -168
  273. package/src/components/select/test/fixtures.js +162 -0
  274. package/src/components/select/test/select.test.js +236 -12
  275. package/src/components/table/Table.js +43 -118
  276. package/src/components/table/leu-table.js +5 -2
  277. package/src/components/table/stories/table.stories.js +20 -10
  278. package/src/components/table/table.css +99 -0
  279. package/src/components/table/test/table.test.js +1 -1
  280. package/src/components/visually-hidden/VisuallyHidden.js +13 -0
  281. package/src/components/visually-hidden/leu-visually-hidden.js +6 -0
  282. package/src/components/visually-hidden/stories/visually-hidden.stories.js +22 -0
  283. package/src/components/visually-hidden/test/visually-hidden.test.js +36 -0
  284. package/src/components/visually-hidden/visually-hidden.css +10 -0
  285. package/src/lib/defineElement.js +1 -1
  286. package/src/lib/hasSlotController.js +5 -3
  287. package/src/lib/utils.js +35 -0
  288. package/src/styles/custom-properties.css +6 -2
  289. package/src/styles/font-definitions.json +202 -0
  290. package/stylelint.config.mjs +2 -0
  291. package/tsconfig.build.json +21 -0
  292. package/tsconfig.json +16 -0
  293. package/{web-dev-server-storybook.config.mjs → web-dev-server.config.mjs} +1 -2
  294. package/web-test-runner.config.mjs +15 -2
  295. package/dist/index.js +0 -26
@@ -0,0 +1,22 @@
1
+ import { html } from "lit"
2
+ import { fixture, expect } from "@open-wc/testing"
3
+
4
+ import "../leu-scroll-top.js"
5
+
6
+ async function defaultFixture() {
7
+ return fixture(html` <leu-scroll-top /> `)
8
+ }
9
+
10
+ describe("LeuScrollTop", () => {
11
+ it("is a defined element", async () => {
12
+ const el = await customElements.get("leu-scroll-top")
13
+
14
+ await expect(el).not.to.be.undefined
15
+ })
16
+
17
+ it("passes the a11y audit", async () => {
18
+ const el = await defaultFixture()
19
+
20
+ await expect(el).shadowDom.to.be.accessible()
21
+ })
22
+ })
@@ -6,13 +6,14 @@ import { ifDefined } from "lit/directives/if-defined.js"
6
6
  import { createRef, ref } from "lit/directives/ref.js"
7
7
 
8
8
  import { Icon } from "../icon/icon.js"
9
- import { defineElement } from "../../lib/defineElement.js"
10
9
  import { HasSlotController } from "../../lib/hasSlotController.js"
11
- import { defineButtonElements } from "../button/Button.js"
12
- import { defineMenuElements } from "../menu/Menu.js"
13
- import { defineMenuItemElements } from "../menu/MenuItem.js"
14
- import { defineInputElements } from "../input/Input.js"
10
+ import "../button/leu-button.js"
11
+ import "../menu/leu-menu.js"
12
+ import "../menu/leu-menu-item.js"
13
+ import "../input/leu-input.js"
14
+ import "../popup/leu-popup.js"
15
15
 
16
+ // @ts-ignore
16
17
  import styles from "./select.css"
17
18
 
18
19
  /**
@@ -25,8 +26,7 @@ export class LeuSelect extends LitElement {
25
26
 
26
27
  static get properties() {
27
28
  return {
28
- open: { type: Boolean, attribute: "open" },
29
-
29
+ open: { type: Boolean, reflect: true },
30
30
  label: { type: String, reflect: true },
31
31
  options: { type: Array },
32
32
  value: { type: Array },
@@ -34,7 +34,7 @@ export class LeuSelect extends LitElement {
34
34
  disabled: { type: Boolean, reflect: true },
35
35
  filterable: { type: Boolean, reflect: true },
36
36
  multiple: { type: Boolean, reflect: true },
37
- optionFilter: { type: String, state: true },
37
+ optionFilter: { state: true },
38
38
  }
39
39
  }
40
40
 
@@ -53,9 +53,14 @@ export class LeuSelect extends LitElement {
53
53
  constructor() {
54
54
  super()
55
55
  this.open = false
56
+ this.disabled = false
57
+ this.open = false
58
+ this.multiple = false
56
59
  this.clearable = false
60
+ this.filterable = false
57
61
  this.value = []
58
62
  this.options = []
63
+ this.label = ""
59
64
 
60
65
  /** @internal */
61
66
  this._arrowIcon = Icon("angleDropDown")
@@ -69,8 +74,17 @@ export class LeuSelect extends LitElement {
69
74
  /** @internal */
70
75
  this.deferedChangeEvent = false
71
76
 
77
+ /**
78
+ * @type {import("lit/directives/ref").Ref<import("../menu/Menu").LeuMenu>}
79
+ */
72
80
  this.menuRef = createRef()
81
+ /**
82
+ * @type {import("lit/directives/ref").Ref<import("../input/Input").LeuInput>}
83
+ */
73
84
  this.optionFilterRef = createRef()
85
+ /**
86
+ * @type {import("lit/directives/ref").Ref<HTMLButtonElement>}
87
+ */
74
88
  this.toggleButtonRef = createRef()
75
89
  }
76
90
 
@@ -102,7 +116,11 @@ export class LeuSelect extends LitElement {
102
116
  * @param {MouseEvent} event
103
117
  */
104
118
  handleDocumentClick = (event) => {
105
- if (!this.contains(event.target) && this.open) {
119
+ if (
120
+ event.target instanceof Node &&
121
+ !this.contains(event.target) &&
122
+ this.open
123
+ ) {
106
124
  this.closeDropdown()
107
125
  }
108
126
  }
@@ -251,17 +269,18 @@ export class LeuSelect extends LitElement {
251
269
  before=${ifDefined(beforeIcon)}
252
270
  @click=${() => this.selectOption(option)}
253
271
  role="option"
272
+ label=${LeuSelect.getOptionLabel(option)}
254
273
  ?active=${isSelected}
255
274
  aria-selected=${isSelected}
256
275
  >
257
- ${LeuSelect.getOptionLabel(option)}
258
276
  </leu-menu-item>`
259
277
  })
260
- : html`<leu-menu-item disabled
261
- >${this.optionFilter === ""
278
+ : html`<leu-menu-item
279
+ label=${this.optionFilter === ""
262
280
  ? "Keine Optionen"
263
- : "Keine Resultate"}</leu-menu-item
264
- >`}
281
+ : "Keine Resultate"}
282
+ disabled
283
+ ></leu-menu-item>`}
265
284
  </leu-menu>
266
285
  `
267
286
  }
@@ -274,8 +293,8 @@ export class LeuSelect extends LitElement {
274
293
  @input=${this.handleFilterInput}
275
294
  clearable
276
295
  ref=${ref(this.optionFilterRef)}
277
- >Nach Stichwort filtern</leu-input
278
- >`
296
+ label="Nach Stichwort filtern"
297
+ ></leu-input>`
279
298
  }
280
299
 
281
300
  return nothing
@@ -288,9 +307,9 @@ export class LeuSelect extends LitElement {
288
307
  type="button"
289
308
  class="apply-button"
290
309
  @click=${this.handleApplyClick}
291
- label="Anwenden"
292
310
  fluid
293
- ></leu-button>
311
+ >Anwenden</leu-button
312
+ >
294
313
  `
295
314
  }
296
315
 
@@ -314,11 +333,12 @@ export class LeuSelect extends LitElement {
314
333
  aria-expanded="${this.open}"
315
334
  role="combobox"
316
335
  ref=${ref(this.toggleButtonRef)}
336
+ slot="anchor"
317
337
  >
318
338
  <span class="label" id="select-label">${this.label}</span>
319
339
  <span class="value"> ${this.getDisplayValue(this.value)} </span>
320
340
  <span class="arrow-icon"> ${this._arrowIcon} </span>
321
- ${this.clearable && this.value !== "" && this.value.length !== 0
341
+ ${this.clearable && this.value.length !== 0
322
342
  ? html`<button
323
343
  type="button"
324
344
  class="clear-button"
@@ -346,25 +366,26 @@ export class LeuSelect extends LitElement {
346
366
  aria-labelledby="select-label"
347
367
  @keydown=${this.handleKeyDown}
348
368
  >
349
- ${this.renderToggleButton()}
350
- <dialog
351
- id="select-dialog"
352
- class="select-menu-container"
353
- ?open=${this.open}
369
+ <leu-popup
370
+ ?active=${this.open}
371
+ placement="bottom-start"
372
+ flip
373
+ matchSize="width"
374
+ autoSize="height"
375
+ autoSizePadding="8"
354
376
  >
355
- <slot name="before" class="before"></slot>
356
- ${this.renderFilterInput()} ${this.renderMenu()}
357
- ${this.renderApplyButton()}
358
- <slot name="after" class="after"></slot>
359
- </dialog>
377
+ ${this.renderToggleButton()}
378
+ <dialog
379
+ id="select-dialog"
380
+ class="select-menu-container"
381
+ ?open=${this.open}
382
+ >
383
+ <slot name="before" class="before"></slot>
384
+ ${this.renderFilterInput()} ${this.renderMenu()}
385
+ ${this.renderApplyButton()}
386
+ <slot name="after" class="after"></slot>
387
+ </dialog>
388
+ </leu-popup>
360
389
  </div> `
361
390
  }
362
391
  }
363
-
364
- export function defineSelectElements() {
365
- defineButtonElements()
366
- defineMenuElements()
367
- defineMenuItemElements()
368
- defineInputElements()
369
- defineElement("select", LeuSelect)
370
- }
@@ -1,3 +1,6 @@
1
- import { defineSelectElements } from "./Select.js"
1
+ import { defineElement } from "../../lib/defineElement.js"
2
+ import { LeuSelect } from "./Select.js"
2
3
 
3
- defineSelectElements()
4
+ export { LeuSelect }
5
+
6
+ defineElement("select", LeuSelect)
@@ -26,8 +26,8 @@
26
26
 
27
27
  --select-clear-color: var(--leu-color-black-60);
28
28
 
29
- --select-font-regular: var(--leu-font-regular);
30
- --select-font-black: var(--leu-font-black);
29
+ --select-font-regular: var(--leu-font-family-regular);
30
+ --select-font-black: var(--leu-font-family-black);
31
31
 
32
32
  --select-apply-button-color: var(--leu-color-black-100);
33
33
  --select-apply-button-color-focus: var(--leu-color-black-80);
@@ -165,18 +165,22 @@
165
165
  }
166
166
 
167
167
  .select-menu-container {
168
- border-radius: 1px;
169
- position: absolute;
170
- left: 0;
168
+ position: static;
169
+ overflow: auto;
170
+
171
+ display: flex;
172
+ flex-direction: column;
173
+
171
174
  width: 100%;
172
- background-color: white;
173
- border: 0 solid black;
175
+ max-height: var(--auto-size-available-height);
176
+
174
177
  padding: 0;
175
178
  margin: 0;
176
- top: calc(100% + 2px);
177
- z-index: 10;
179
+
180
+ border: none;
181
+ border-radius: 1px;
182
+ background-color: white;
178
183
  box-shadow: var(--select-box-shadow-regular), var(--select-box-shadow-short);
179
- overflow: auto;
180
184
  }
181
185
 
182
186
  .select-menu {
@@ -184,11 +188,7 @@
184
188
  padding: 0;
185
189
  margin: 0;
186
190
  overflow: auto;
187
- max-height: 24rem;
188
- }
189
-
190
- .select-menu.multiple {
191
- max-height: 21rem;
191
+ max-height: 100%;
192
192
  }
193
193
 
194
194
  .before,
@@ -2,10 +2,17 @@ import { html } from "lit"
2
2
  import { ifDefined } from "lit/directives/if-defined.js"
3
3
 
4
4
  import "../leu-select.js"
5
+ import { MUNICIPALITIES } from "../test/fixtures.js"
5
6
 
6
7
  export default {
7
- title: "select",
8
+ title: "Select",
8
9
  component: "leu-select",
10
+ parameters: {
11
+ design: {
12
+ type: "figma",
13
+ url: "https://www.figma.com/file/d6Pv21UVUbnBs3AdcZijHmbN/KTZH-Design-System?type=design&node-id=17340-82208&mode=design&t=lzVrtq8lxYVJU5TB-11",
14
+ },
15
+ },
9
16
  }
10
17
 
11
18
  const OPTIONS_EXAMPLES = [
@@ -14,168 +21,6 @@ const OPTIONS_EXAMPLES = [
14
21
  "Option 3",
15
22
  "Sehr lange Option um zu schauen was passiert, wenn es zu lang wird.",
16
23
  ]
17
- const OPTIONS_MUNICIPALITIES = [
18
- "Aeugst am Albis",
19
- "Affoltern am Albis",
20
- "Bonstetten",
21
- "Hausen am Albis",
22
- "Hedingen",
23
- "Kappel am Albis",
24
- "Knonau",
25
- "Maschwanden",
26
- "Mettmenstetten",
27
- "Obfelden",
28
- "Ottenbach",
29
- "Rifferswil",
30
- "Stallikon",
31
- "Wettswil am Albis",
32
- "Benken (ZH)",
33
- "Berg am Irchel",
34
- "Buch am Irchel",
35
- "Dachsen",
36
- "Dorf",
37
- "Feuerthalen",
38
- "Flaach",
39
- "Flurlingen",
40
- "Henggart",
41
- "Kleinandelfingen",
42
- "Laufen-Uhwiesen",
43
- "Marthalen",
44
- "Ossingen",
45
- "Rheinau",
46
- "Thalheim an der Thur",
47
- "Trüllikon",
48
- "Truttikon",
49
- "Volken",
50
- "Bachenbülach",
51
- "Bassersdorf",
52
- "Bülach",
53
- "Dietlikon",
54
- "Eglisau",
55
- "Embrach",
56
- "Freienstein-Teufen",
57
- "Glattfelden",
58
- "Hochfelden",
59
- "Höri",
60
- "Hüntwangen",
61
- "Kloten",
62
- "Lufingen",
63
- "Nürensdorf",
64
- "Oberembrach",
65
- "Opfikon",
66
- "Rafz",
67
- "Rorbas",
68
- "Wallisellen",
69
- "Wasterkingen",
70
- "Wil (ZH)",
71
- "Winkel",
72
- "Bachs",
73
- "Boppelsen",
74
- "Buchs (ZH)",
75
- "Dällikon",
76
- "Dänikon",
77
- "Dielsdorf",
78
- "Hüttikon",
79
- "Neerach",
80
- "Niederglatt",
81
- "Niederhasli",
82
- "Niederweningen",
83
- "Oberglatt",
84
- "Oberweningen",
85
- "Otelfingen",
86
- "Regensberg",
87
- "Regensdorf",
88
- "Rümlang",
89
- "Schleinikon",
90
- "Schöfflisdorf",
91
- "Stadel",
92
- "Steinmaur",
93
- "Weiach",
94
- "Bäretswil",
95
- "Bubikon",
96
- "Dürnten",
97
- "Fischenthal",
98
- "Gossau (ZH)",
99
- "Grüningen",
100
- "Hinwil",
101
- "Rüti (ZH)",
102
- "Seegräben",
103
- "Wald (ZH)",
104
- "Wetzikon (ZH)",
105
- "Adliswil",
106
- "Kilchberg (ZH)",
107
- "Langnau am Albis",
108
- "Oberrieden",
109
- "Richterswil",
110
- "Rüschlikon",
111
- "Thalwil",
112
- "Erlenbach (ZH)",
113
- "Herrliberg",
114
- "Hombrechtikon",
115
- "Küsnacht (ZH)",
116
- "Männedorf",
117
- "Meilen",
118
- "Oetwil am See",
119
- "Stäfa",
120
- "Uetikon am See",
121
- "Zumikon",
122
- "Zollikon",
123
- "Fehraltorf",
124
- "Hittnau",
125
- "Lindau",
126
- "Pfäffikon",
127
- "Russikon",
128
- "Weisslingen",
129
- "Wila",
130
- "Wildberg",
131
- "Dübendorf",
132
- "Egg",
133
- "Fällanden",
134
- "Greifensee",
135
- "Maur",
136
- "Mönchaltorf",
137
- "Schwerzenbach",
138
- "Uster",
139
- "Volketswil",
140
- "Wangen-Brüttisellen",
141
- "Altikon",
142
- "Brütten",
143
- "Dägerlen",
144
- "Dättlikon",
145
- "Dinhard",
146
- "Ellikon an der Thur",
147
- "Elsau",
148
- "Hagenbuch",
149
- "Hettlingen",
150
- "Neftenbach",
151
- "Pfungen",
152
- "Rickenbach (ZH)",
153
- "Schlatt (ZH)",
154
- "Seuzach",
155
- "Turbenthal",
156
- "Winterthur",
157
- "Zell (ZH)",
158
- "Aesch (ZH)",
159
- "Birmensdorf (ZH)",
160
- "Dietikon",
161
- "Geroldswil",
162
- "Oberengstringen",
163
- "Oetwil an der Limmat",
164
- "Schlieren",
165
- "Uitikon",
166
- "Unterengstringen",
167
- "Urdorf",
168
- "Weiningen (ZH)",
169
- "Zürich",
170
- "Andelfingen",
171
- "Stammheim",
172
- "Wädenswil",
173
- "Elgg",
174
- "Horgen",
175
- "Illnau-Effretikon",
176
- "Bauma",
177
- "Wiesendangen",
178
- ]
179
24
 
180
25
  function Template({
181
26
  label,
@@ -189,6 +34,7 @@ function Template({
189
34
  after,
190
35
  }) {
191
36
  return html`
37
+ <div style="margin-top: 50vh"></div>
192
38
  <leu-select
193
39
  class="dropdown"
194
40
  .options=${options}
@@ -202,6 +48,7 @@ function Template({
202
48
  ${before ? html`<div slot="before">${before}</div>` : ""}
203
49
  ${after ? html`<div slot="after">${after}</div>` : ""}
204
50
  </leu-select>
51
+ <div style="margin-top: 50vh"></div>
205
52
  `
206
53
  }
207
54
 
@@ -263,7 +110,7 @@ DisabledFilled.args = {
263
110
  export const Filterable = Template.bind({})
264
111
  Filterable.args = {
265
112
  label: "Gemeinde",
266
- options: OPTIONS_MUNICIPALITIES,
113
+ options: MUNICIPALITIES,
267
114
  clearable: true,
268
115
  disabled: false,
269
116
  filterable: true,
@@ -273,7 +120,7 @@ Filterable.args = {
273
120
  export const BeforeAfterSlot = TemplateSlots.bind({})
274
121
  BeforeAfterSlot.args = {
275
122
  label: "Gemeinde",
276
- options: OPTIONS_MUNICIPALITIES,
123
+ options: MUNICIPALITIES,
277
124
  clearable: true,
278
125
  disabled: false,
279
126
  filterable: false,
@@ -283,7 +130,7 @@ BeforeAfterSlot.args = {
283
130
  export const Multiple = Template.bind({})
284
131
  Multiple.args = {
285
132
  label: "Gemeinde",
286
- options: OPTIONS_MUNICIPALITIES,
133
+ options: MUNICIPALITIES,
287
134
  clearable: true,
288
135
  disabled: false,
289
136
  filterable: true,
@@ -293,8 +140,8 @@ Multiple.args = {
293
140
  export const MultipleFilled = Template.bind({})
294
141
  MultipleFilled.args = {
295
142
  label: "Gemeinde",
296
- options: OPTIONS_MUNICIPALITIES,
297
- value: OPTIONS_MUNICIPALITIES.slice(0, 2),
143
+ options: MUNICIPALITIES,
144
+ value: MUNICIPALITIES.slice(0, 2),
298
145
  clearable: true,
299
146
  disabled: false,
300
147
  filterable: true,
@@ -0,0 +1,162 @@
1
+ export const MUNICIPALITIES = [
2
+ "Aeugst am Albis",
3
+ "Affoltern am Albis",
4
+ "Bonstetten",
5
+ "Hausen am Albis",
6
+ "Hedingen",
7
+ "Kappel am Albis",
8
+ "Knonau",
9
+ "Maschwanden",
10
+ "Mettmenstetten",
11
+ "Obfelden",
12
+ "Ottenbach",
13
+ "Rifferswil",
14
+ "Stallikon",
15
+ "Wettswil am Albis",
16
+ "Benken (ZH)",
17
+ "Berg am Irchel",
18
+ "Buch am Irchel",
19
+ "Dachsen",
20
+ "Dorf",
21
+ "Feuerthalen",
22
+ "Flaach",
23
+ "Flurlingen",
24
+ "Henggart",
25
+ "Kleinandelfingen",
26
+ "Laufen-Uhwiesen",
27
+ "Marthalen",
28
+ "Ossingen",
29
+ "Rheinau",
30
+ "Thalheim an der Thur",
31
+ "Trüllikon",
32
+ "Truttikon",
33
+ "Volken",
34
+ "Bachenbülach",
35
+ "Bassersdorf",
36
+ "Bülach",
37
+ "Dietlikon",
38
+ "Eglisau",
39
+ "Embrach",
40
+ "Freienstein-Teufen",
41
+ "Glattfelden",
42
+ "Hochfelden",
43
+ "Höri",
44
+ "Hüntwangen",
45
+ "Kloten",
46
+ "Lufingen",
47
+ "Nürensdorf",
48
+ "Oberembrach",
49
+ "Opfikon",
50
+ "Rafz",
51
+ "Rorbas",
52
+ "Wallisellen",
53
+ "Wasterkingen",
54
+ "Wil (ZH)",
55
+ "Winkel",
56
+ "Bachs",
57
+ "Boppelsen",
58
+ "Buchs (ZH)",
59
+ "Dällikon",
60
+ "Dänikon",
61
+ "Dielsdorf",
62
+ "Hüttikon",
63
+ "Neerach",
64
+ "Niederglatt",
65
+ "Niederhasli",
66
+ "Niederweningen",
67
+ "Oberglatt",
68
+ "Oberweningen",
69
+ "Otelfingen",
70
+ "Regensberg",
71
+ "Regensdorf",
72
+ "Rümlang",
73
+ "Schleinikon",
74
+ "Schöfflisdorf",
75
+ "Stadel",
76
+ "Steinmaur",
77
+ "Weiach",
78
+ "Bäretswil",
79
+ "Bubikon",
80
+ "Dürnten",
81
+ "Fischenthal",
82
+ "Gossau (ZH)",
83
+ "Grüningen",
84
+ "Hinwil",
85
+ "Rüti (ZH)",
86
+ "Seegräben",
87
+ "Wald (ZH)",
88
+ "Wetzikon (ZH)",
89
+ "Adliswil",
90
+ "Kilchberg (ZH)",
91
+ "Langnau am Albis",
92
+ "Oberrieden",
93
+ "Richterswil",
94
+ "Rüschlikon",
95
+ "Thalwil",
96
+ "Erlenbach (ZH)",
97
+ "Herrliberg",
98
+ "Hombrechtikon",
99
+ "Küsnacht (ZH)",
100
+ "Männedorf",
101
+ "Meilen",
102
+ "Oetwil am See",
103
+ "Stäfa",
104
+ "Uetikon am See",
105
+ "Zumikon",
106
+ "Zollikon",
107
+ "Fehraltorf",
108
+ "Hittnau",
109
+ "Lindau",
110
+ "Pfäffikon",
111
+ "Russikon",
112
+ "Weisslingen",
113
+ "Wila",
114
+ "Wildberg",
115
+ "Dübendorf",
116
+ "Egg",
117
+ "Fällanden",
118
+ "Greifensee",
119
+ "Maur",
120
+ "Mönchaltorf",
121
+ "Schwerzenbach",
122
+ "Uster",
123
+ "Volketswil",
124
+ "Wangen-Brüttisellen",
125
+ "Altikon",
126
+ "Brütten",
127
+ "Dägerlen",
128
+ "Dättlikon",
129
+ "Dinhard",
130
+ "Ellikon an der Thur",
131
+ "Elsau",
132
+ "Hagenbuch",
133
+ "Hettlingen",
134
+ "Neftenbach",
135
+ "Pfungen",
136
+ "Rickenbach (ZH)",
137
+ "Schlatt (ZH)",
138
+ "Seuzach",
139
+ "Turbenthal",
140
+ "Winterthur",
141
+ "Zell (ZH)",
142
+ "Aesch (ZH)",
143
+ "Birmensdorf (ZH)",
144
+ "Dietikon",
145
+ "Geroldswil",
146
+ "Oberengstringen",
147
+ "Oetwil an der Limmat",
148
+ "Schlieren",
149
+ "Uitikon",
150
+ "Unterengstringen",
151
+ "Urdorf",
152
+ "Weiningen (ZH)",
153
+ "Zürich",
154
+ "Andelfingen",
155
+ "Stammheim",
156
+ "Wädenswil",
157
+ "Elgg",
158
+ "Horgen",
159
+ "Illnau-Effretikon",
160
+ "Bauma",
161
+ "Wiesendangen",
162
+ ]