@statistikzh/leu 0.2.0 → 0.4.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.
- package/.github/workflows/deploy-github-pages.yaml +33 -0
- package/.storybook/main.js +27 -1
- package/.storybook/manager-head.html +1 -0
- package/.storybook/manager.js +9 -0
- package/.storybook/preview-head.html +1 -1
- package/.storybook/preview.js +59 -5
- package/.storybook/static/logo.svg +19 -0
- package/.storybook/theme.js +7 -0
- package/CHANGELOG.md +43 -0
- package/README.md +1 -1
- package/dist/Button.js +39 -30
- package/dist/ButtonGroup.js +5 -7
- package/dist/Checkbox.js +107 -88
- package/dist/CheckboxGroup.js +43 -38
- package/dist/{Chip-389013ff.js → Chip-dac7337d.js} +7 -2
- package/dist/ChipGroup.js +4 -6
- package/dist/ChipLink.js +6 -8
- package/dist/ChipRemovable.js +4 -7
- package/dist/ChipSelectable.js +10 -10
- package/dist/Dropdown.js +57 -27
- package/dist/Input.js +59 -43
- package/dist/Menu.js +2 -5
- package/dist/MenuItem.js +34 -17
- package/dist/Pagination.js +57 -55
- package/dist/Radio.js +13 -10
- package/dist/RadioGroup.js +43 -40
- package/dist/Select.js +57 -44
- package/dist/Table.js +147 -125
- package/dist/{defineElement-ba770aed.js → _rollupPluginBabelHelpers-20f659f4.js} +1 -15
- package/dist/defineElement-47d4f665.js +15 -0
- package/dist/index.js +29 -19
- package/dist/leu-button-group.js +7 -3
- package/dist/leu-button.js +6 -3
- package/dist/leu-checkbox-group.js +6 -3
- package/dist/leu-checkbox.js +6 -3
- package/dist/leu-chip-group.js +6 -3
- package/dist/leu-chip-link.js +7 -4
- package/dist/leu-chip-removable.js +7 -4
- package/dist/leu-chip-selectable.js +7 -4
- package/dist/leu-dropdown.js +13 -3
- package/dist/leu-input.js +7 -3
- package/dist/leu-menu-item.js +8 -3
- package/dist/leu-menu.js +6 -3
- package/dist/leu-pagination.js +8 -3
- package/dist/leu-popup-4bf6f1f4.js +216 -0
- package/dist/leu-radio-group.js +6 -3
- package/dist/leu-radio.js +6 -3
- package/dist/leu-select.js +14 -3
- package/dist/leu-table.js +9 -3
- package/package.json +29 -12
- package/scripts/generate-component/templates/[Name].js +0 -5
- package/scripts/generate-component/templates/[name].css +1 -1
- package/scripts/generate-component/templates/[namespace]-[name].js +5 -2
- package/src/components/accordion/Accordion.js +3 -9
- package/src/components/accordion/leu-accordion.js +5 -2
- package/src/components/accordion/stories/accordion.stories.js +7 -4
- package/src/components/accordion/test/accordion.test.js +92 -2
- package/src/components/breadcrumb/Breadcrumb.js +310 -0
- package/src/components/breadcrumb/breadcrumb.css +114 -0
- package/src/components/breadcrumb/leu-breadcrumb.js +6 -0
- package/src/components/breadcrumb/stories/breadcrumb.stories.js +73 -0
- package/src/components/breadcrumb/test/breadcrumb.test.js +141 -0
- package/src/components/button/Button.js +22 -27
- package/src/components/button/button.css +3 -3
- package/src/components/button/leu-button.js +5 -2
- package/src/components/button/stories/button.stories.js +58 -37
- package/src/components/button/test/button.test.js +112 -2
- package/src/components/button-group/ButtonGroup.js +1 -7
- package/src/components/button-group/leu-button-group.js +5 -2
- package/src/components/button-group/stories/button-group.stories.js +6 -0
- package/src/components/button-group/test/button-group.test.js +79 -3
- package/src/components/checkbox/Checkbox.js +9 -89
- package/src/components/checkbox/CheckboxGroup.js +9 -39
- package/src/components/checkbox/checkbox-group.css +29 -0
- package/src/components/checkbox/checkbox.css +76 -0
- package/src/components/checkbox/leu-checkbox-group.js +5 -2
- package/src/components/checkbox/leu-checkbox.js +5 -2
- package/src/components/checkbox/stories/checkbox-group.stories.js +44 -21
- package/src/components/checkbox/stories/checkbox.stories.js +7 -1
- package/src/components/checkbox/test/checkbox-group.test.js +124 -0
- package/src/components/checkbox/test/checkbox.test.js +72 -59
- package/src/components/chip/Chip.js +2 -1
- package/src/components/chip/ChipGroup.js +1 -6
- package/src/components/chip/ChipLink.js +2 -8
- package/src/components/chip/ChipRemovable.js +1 -6
- package/src/components/chip/ChipSelectable.js +4 -9
- package/src/components/chip/exports.js +4 -10
- package/src/components/chip/leu-chip-group.js +5 -2
- package/src/components/chip/leu-chip-link.js +5 -2
- package/src/components/chip/leu-chip-removable.js +5 -2
- package/src/components/chip/leu-chip-selectable.js +5 -2
- package/src/components/chip/stories/chip-group.stories.js +18 -6
- package/src/components/chip/stories/chip-link.stories.js +16 -4
- package/src/components/chip/stories/chip-removable.stories.js +15 -4
- package/src/components/chip/stories/chip-selectable.stories.js +13 -3
- package/src/components/chip/test/chip-group.test.js +124 -0
- package/src/components/chip/test/chip-link.test.js +58 -0
- package/src/components/chip/test/chip-removable.test.js +79 -0
- package/src/components/chip/test/chip-selectable.test.js +95 -0
- package/src/components/chip/test/chip.test.js +1 -1
- package/src/components/dropdown/Dropdown.js +53 -25
- package/src/components/dropdown/dropdown.css +1 -2
- package/src/components/dropdown/leu-dropdown.js +5 -2
- package/src/components/dropdown/stories/dropdown.stories.js +11 -5
- package/src/components/dropdown/test/dropdown.test.js +6 -6
- package/src/components/icon/icon.js +1 -1
- package/src/components/icon/test/icon.test.js +66 -0
- package/src/components/input/Input.js +33 -39
- package/src/components/input/input.css +9 -6
- package/src/components/input/leu-input.js +5 -2
- package/src/components/input/stories/input.stories.js +8 -2
- package/src/components/input/test/input.test.js +431 -4
- package/src/components/menu/Menu.js +0 -5
- package/src/components/menu/MenuItem.js +22 -15
- package/src/components/menu/leu-menu-item.js +5 -2
- package/src/components/menu/leu-menu.js +5 -2
- package/src/components/menu/menu-item.css +5 -2
- package/src/components/menu/stories/menu-item.stories.js +13 -4
- package/src/components/menu/stories/menu.stories.js +11 -5
- package/src/components/menu/test/menu-item.test.js +180 -0
- package/src/components/menu/test/menu.test.js +10 -2
- package/src/components/pagination/Pagination.js +53 -65
- package/src/components/pagination/leu-pagination.js +5 -2
- package/src/components/pagination/stories/pagination.stories.js +17 -9
- package/src/components/pagination/test/pagination.test.js +191 -5
- package/src/components/popup/Popup.js +200 -0
- package/src/components/popup/leu-popup.js +6 -0
- package/src/components/popup/popup.css +27 -0
- package/src/components/popup/stories/popup.stories.js +58 -0
- package/src/components/popup/test/popup.test.js +29 -0
- package/src/components/radio/Radio.js +5 -10
- package/src/components/radio/RadioGroup.js +7 -39
- package/src/components/radio/leu-radio-group.js +5 -2
- package/src/components/radio/leu-radio.js +5 -2
- package/src/components/radio/radio-group.css +29 -0
- package/src/components/radio/stories/radio-group.stories.js +38 -19
- package/src/components/radio/stories/radio.stories.js +7 -1
- package/src/components/radio/test/radio-group.test.js +86 -0
- package/src/components/radio/test/radio.test.js +108 -17
- package/src/components/select/Select.js +35 -32
- package/src/components/select/leu-select.js +5 -2
- package/src/components/select/select.css +13 -13
- package/src/components/select/stories/select.stories.js +15 -168
- package/src/components/select/test/fixtures.js +162 -0
- package/src/components/select/test/select.test.js +236 -12
- package/src/components/table/Table.js +48 -123
- package/src/components/table/leu-table.js +5 -2
- package/src/components/table/stories/table.stories.js +20 -10
- package/src/components/table/table.css +99 -0
- package/src/components/table/test/table.test.js +1 -1
- package/src/lib/utils.js +17 -0
- package/{web-dev-server-storybook.config.mjs → web-dev-server.config.mjs} +1 -2
- package/web-test-runner.config.mjs +15 -2
|
@@ -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: "
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
297
|
-
value:
|
|
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
|
+
]
|
|
@@ -1,29 +1,253 @@
|
|
|
1
1
|
import { html } from "lit"
|
|
2
|
-
import {
|
|
2
|
+
import { ifDefined } from "lit/directives/if-defined.js"
|
|
3
|
+
import { fixture, expect, elementUpdated } from "@open-wc/testing"
|
|
4
|
+
import { sendKeys } from "@web/test-runner-commands"
|
|
3
5
|
|
|
4
6
|
import "../leu-select.js"
|
|
7
|
+
import { MUNICIPALITIES } from "./fixtures.js"
|
|
5
8
|
|
|
6
|
-
async function defaultFixture() {
|
|
7
|
-
return fixture(html
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
async function defaultFixture(args = {}) {
|
|
10
|
+
return fixture(html`<leu-select
|
|
11
|
+
.options=${args.options}
|
|
12
|
+
label=${ifDefined(args.label)}
|
|
13
|
+
.value=${args.value ?? []}
|
|
14
|
+
?clearable=${args.clearable}
|
|
15
|
+
?disabled=${args.disabled}
|
|
16
|
+
?filterable=${args.filterable}
|
|
17
|
+
?multiple=${args.multiple}
|
|
18
|
+
>
|
|
19
|
+
</leu-select> `)
|
|
15
20
|
}
|
|
16
21
|
|
|
17
22
|
describe("LeuSelect", () => {
|
|
18
23
|
it("is a defined element", async () => {
|
|
19
|
-
const el =
|
|
24
|
+
const el = customElements.get("leu-select")
|
|
20
25
|
|
|
21
26
|
await expect(el).not.to.be.undefined
|
|
22
27
|
})
|
|
23
28
|
|
|
24
29
|
it("passes the a11y audit", async () => {
|
|
25
|
-
const el = await defaultFixture(
|
|
30
|
+
const el = await defaultFixture({
|
|
31
|
+
options: MUNICIPALITIES,
|
|
32
|
+
label: "Gemeinde",
|
|
33
|
+
})
|
|
26
34
|
|
|
27
35
|
await expect(el).shadowDom.to.be.accessible()
|
|
28
36
|
})
|
|
37
|
+
|
|
38
|
+
it("passes the a11y audit in the open state", async () => {
|
|
39
|
+
const el = await defaultFixture({
|
|
40
|
+
options: MUNICIPALITIES,
|
|
41
|
+
label: "Gemeinde",
|
|
42
|
+
open: true,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
await expect(el).shadowDom.to.be.accessible()
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it("renders a label", async () => {
|
|
49
|
+
const el = await defaultFixture({
|
|
50
|
+
options: MUNICIPALITIES,
|
|
51
|
+
label: "Gemeinde",
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
55
|
+
|
|
56
|
+
expect(toggleButton).to.have.trimmed.text("Gemeinde")
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it("doesn't show the list of options by default", async () => {
|
|
60
|
+
const el = await defaultFixture({
|
|
61
|
+
options: MUNICIPALITIES,
|
|
62
|
+
label: "Gemeinde",
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
const dialog = el.shadowRoot.querySelector("dialog")
|
|
66
|
+
|
|
67
|
+
expect(dialog).to.not.have.attribute("open")
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
it("opens the list of options when the toggle button is clicked", async () => {
|
|
71
|
+
const el = await defaultFixture({
|
|
72
|
+
options: MUNICIPALITIES,
|
|
73
|
+
label: "Gemeinde",
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
77
|
+
toggleButton.click()
|
|
78
|
+
|
|
79
|
+
const dialog = el.shadowRoot.querySelector("dialog")
|
|
80
|
+
await elementUpdated(el)
|
|
81
|
+
|
|
82
|
+
expect(dialog).to.have.attribute("open")
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it("has a default value of an empty array", async () => {
|
|
86
|
+
const el = await defaultFixture({
|
|
87
|
+
options: MUNICIPALITIES,
|
|
88
|
+
label: "Gemeinde",
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
expect(el.value).to.deep.equal([])
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
it("marks the menu item as selected a the value is set", async () => {
|
|
95
|
+
const el = await defaultFixture({
|
|
96
|
+
options: MUNICIPALITIES,
|
|
97
|
+
label: "Gemeinde",
|
|
98
|
+
value: "Affoltern am Albis",
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
102
|
+
toggleButton.click()
|
|
103
|
+
|
|
104
|
+
const menuItem = el.shadowRoot.querySelector(
|
|
105
|
+
"leu-menu-item[label='Affoltern am Albis']"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
expect(menuItem).to.have.attribute("active")
|
|
109
|
+
expect(menuItem).to.have.attribute("aria-selected")
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it("shows the clear button when a value is set", async () => {
|
|
113
|
+
const el = await defaultFixture({
|
|
114
|
+
options: MUNICIPALITIES,
|
|
115
|
+
label: "Gemeinde",
|
|
116
|
+
value: "Affoltern am Albis",
|
|
117
|
+
clearable: true,
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
const clearButton = el.shadowRoot.querySelector(".clear-button")
|
|
121
|
+
|
|
122
|
+
expect(clearButton).to.exist
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
it("renders a input field to filter the options", async () => {
|
|
126
|
+
const el = await defaultFixture({
|
|
127
|
+
options: MUNICIPALITIES,
|
|
128
|
+
label: "Gemeinde",
|
|
129
|
+
filterable: true,
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
const filterInput = el.shadowRoot.querySelector(".select-search")
|
|
133
|
+
|
|
134
|
+
expect(filterInput).to.exist
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it("filters the options when the filter input is changed", async () => {
|
|
138
|
+
const el = await defaultFixture({
|
|
139
|
+
options: MUNICIPALITIES,
|
|
140
|
+
label: "Gemeinde",
|
|
141
|
+
filterable: true,
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
145
|
+
toggleButton.click()
|
|
146
|
+
|
|
147
|
+
const filterInput = el.shadowRoot.querySelector(".select-search")
|
|
148
|
+
filterInput.focus()
|
|
149
|
+
|
|
150
|
+
await sendKeys({ type: "am albis" })
|
|
151
|
+
|
|
152
|
+
const menuItems = el.shadowRoot.querySelectorAll("leu-menu-item")
|
|
153
|
+
expect(menuItems.length).to.equal(6)
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
it("resets the filter when the filter input is cleared", async () => {
|
|
157
|
+
const el = await defaultFixture({
|
|
158
|
+
options: MUNICIPALITIES,
|
|
159
|
+
label: "Gemeinde",
|
|
160
|
+
filterable: true,
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
164
|
+
toggleButton.click()
|
|
165
|
+
|
|
166
|
+
const filterInput = el.shadowRoot.querySelector(".select-search")
|
|
167
|
+
filterInput.focus()
|
|
168
|
+
|
|
169
|
+
await sendKeys({ type: "am albis" })
|
|
170
|
+
|
|
171
|
+
const clearFilterButton =
|
|
172
|
+
filterInput.shadowRoot.querySelector(".clear-button")
|
|
173
|
+
clearFilterButton.click()
|
|
174
|
+
await elementUpdated(el)
|
|
175
|
+
|
|
176
|
+
const menuItems = el.shadowRoot.querySelectorAll("leu-menu-item")
|
|
177
|
+
expect(menuItems.length).to.equal(MUNICIPALITIES.length)
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
it("renders a message when no options are available", async () => {
|
|
181
|
+
const el = await defaultFixture({
|
|
182
|
+
options: [],
|
|
183
|
+
label: "Gemeinde",
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
187
|
+
toggleButton.click()
|
|
188
|
+
|
|
189
|
+
const menuItem = el.shadowRoot.querySelector("leu-menu-item")
|
|
190
|
+
expect(menuItem).to.have.attribute("label", "Keine Optionen")
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
it("renders a message when no options are available after filtering", async () => {
|
|
194
|
+
const el = await defaultFixture({
|
|
195
|
+
options: MUNICIPALITIES,
|
|
196
|
+
label: "Gemeinde",
|
|
197
|
+
filterable: true,
|
|
198
|
+
})
|
|
199
|
+
|
|
200
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
201
|
+
toggleButton.click()
|
|
202
|
+
|
|
203
|
+
const filterInput = el.shadowRoot.querySelector(".select-search")
|
|
204
|
+
filterInput.focus()
|
|
205
|
+
|
|
206
|
+
await sendKeys({ type: "am albissss" })
|
|
207
|
+
|
|
208
|
+
const menuItem = el.shadowRoot.querySelector("leu-menu-item")
|
|
209
|
+
expect(menuItem).to.have.attribute("label", "Keine Resultate")
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
it("renders a apply button when multiple selection is allowed", async () => {
|
|
213
|
+
const el = await defaultFixture({
|
|
214
|
+
options: MUNICIPALITIES,
|
|
215
|
+
label: "Gemeinde",
|
|
216
|
+
multiple: true,
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
const applyButton = el.shadowRoot.querySelector("leu-menu + .apply-button")
|
|
220
|
+
expect(applyButton).to.exist
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
it("updates the value when an option is selected", async () => {
|
|
224
|
+
const el = await defaultFixture({
|
|
225
|
+
options: MUNICIPALITIES,
|
|
226
|
+
label: "Gemeinde",
|
|
227
|
+
})
|
|
228
|
+
|
|
229
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
230
|
+
toggleButton.click()
|
|
231
|
+
|
|
232
|
+
const menuItem = el.shadowRoot.querySelector("leu-menu-item[label='Maur']")
|
|
233
|
+
menuItem.click()
|
|
234
|
+
|
|
235
|
+
expect(el.value).to.deep.equal(["Maur"])
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
it("allows a value with multiple values", async () => {
|
|
239
|
+
const el = await defaultFixture({
|
|
240
|
+
options: MUNICIPALITIES,
|
|
241
|
+
label: "Gemeinde",
|
|
242
|
+
multiple: true,
|
|
243
|
+
})
|
|
244
|
+
|
|
245
|
+
const toggleButton = el.shadowRoot.querySelector(".select-toggle")
|
|
246
|
+
toggleButton.click()
|
|
247
|
+
|
|
248
|
+
el.shadowRoot.querySelector("leu-menu-item[label='Maur']").click()
|
|
249
|
+
el.shadowRoot.querySelector("leu-menu-item[label='Zollikon']").click()
|
|
250
|
+
|
|
251
|
+
expect(el.value).to.deep.equal(["Maur", "Zollikon"])
|
|
252
|
+
})
|
|
29
253
|
})
|