@crowdstrike/glide-core 0.12.1 → 0.12.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.
- package/dist/checkbox-group.styles.js +1 -1
- package/dist/dropdown.d.ts +5 -1
- package/dist/dropdown.js +126 -58
- package/dist/dropdown.option.d.ts +3 -0
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +81 -16
- package/dist/dropdown.option.test.basics.js +4 -33
- package/dist/dropdown.option.test.basics.multiple.js +9 -0
- package/dist/dropdown.option.test.basics.single.js +8 -0
- package/dist/dropdown.option.test.interactions.multiple.js +12 -0
- package/dist/dropdown.option.test.interactions.single.js +11 -0
- package/dist/dropdown.styles.js +127 -29
- package/dist/dropdown.test.basics.filterable.js +11 -54
- package/dist/dropdown.test.basics.js +24 -244
- package/dist/dropdown.test.basics.multiple.js +13 -60
- package/dist/dropdown.test.basics.single.js +2 -8
- package/dist/dropdown.test.events.filterable.js +12 -54
- package/dist/dropdown.test.events.js +139 -46
- package/dist/dropdown.test.events.multiple.js +17 -87
- package/dist/dropdown.test.events.single.js +99 -60
- package/dist/dropdown.test.focus.filterable.js +13 -60
- package/dist/dropdown.test.focus.js +64 -11
- package/dist/dropdown.test.focus.multiple.js +36 -46
- package/dist/dropdown.test.focus.single.js +28 -23
- package/dist/dropdown.test.form.js +22 -0
- package/dist/dropdown.test.interactions.filterable.js +86 -72
- package/dist/dropdown.test.interactions.js +361 -207
- package/dist/dropdown.test.interactions.multiple.js +152 -279
- package/dist/dropdown.test.interactions.single.js +62 -98
- package/dist/dropdown.test.validity.js +12 -49
- package/dist/icons/pencil.d.ts +2 -0
- package/dist/icons/pencil.js +1 -0
- package/dist/label.js +1 -1
- package/dist/label.styles.js +7 -3
- package/dist/library/localize.d.ts +2 -0
- package/dist/menu.js +1 -1
- package/dist/menu.options.js +1 -1
- package/dist/menu.options.test.events.d.ts +1 -0
- package/dist/menu.options.test.events.js +19 -0
- package/dist/menu.test.interactions.d.ts +1 -0
- package/dist/menu.test.interactions.js +38 -0
- package/dist/radio-group.styles.js +1 -1
- package/dist/tab.group.d.ts +8 -1
- package/dist/tab.group.js +1 -1
- package/dist/tab.group.styles.js +4 -0
- package/dist/tab.group.test.basics.js +77 -1
- package/dist/tab.panel.js +1 -1
- package/dist/tab.panel.styles.js +15 -0
- package/dist/tag.d.ts +2 -0
- package/dist/tag.js +1 -1
- package/dist/tag.styles.js +46 -5
- package/dist/tag.test.basics.js +1 -1
- package/dist/tag.test.events.js +76 -3
- package/dist/tag.test.focus.js +1 -1
- package/dist/textarea.styles.js +1 -1
- package/dist/translations/en.js +1 -1
- package/dist/translations/fr.d.ts +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/ja.d.ts +1 -1
- package/dist/translations/ja.js +1 -1
- package/package.json +1 -1
@@ -7,14 +7,10 @@ import GlideCoreDropdown from './dropdown.js';
|
|
7
7
|
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
8
8
|
it('dispatches one "change" event when an option is selected via click', async () => {
|
9
9
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
10
|
-
<glide-core-dropdown-option
|
11
|
-
label="One"
|
12
|
-
value="one"
|
13
|
-
></glide-core-dropdown-option>
|
10
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
14
11
|
|
15
12
|
<glide-core-dropdown-option
|
16
13
|
label="Two"
|
17
|
-
value="two"
|
18
14
|
selected
|
19
15
|
></glide-core-dropdown-option>
|
20
16
|
</glide-core-dropdown>`);
|
@@ -30,14 +26,10 @@ it('dispatches one "change" event when an option is selected via click', async (
|
|
30
26
|
});
|
31
27
|
it('dispatches one "change" event when an option is selected via Enter', async () => {
|
32
28
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
33
|
-
<glide-core-dropdown-option
|
34
|
-
label="One"
|
35
|
-
value="one"
|
36
|
-
></glide-core-dropdown-option>
|
29
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
37
30
|
|
38
31
|
<glide-core-dropdown-option
|
39
32
|
label="Two"
|
40
|
-
value="two"
|
41
33
|
selected
|
42
34
|
></glide-core-dropdown-option>
|
43
35
|
</glide-core-dropdown>`);
|
@@ -57,14 +49,10 @@ it('dispatches one "change" event when an option is selected via Enter', async (
|
|
57
49
|
});
|
58
50
|
it('dispatches one "change" event when an option is selected via Space', async () => {
|
59
51
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
60
|
-
<glide-core-dropdown-option
|
61
|
-
label="One"
|
62
|
-
value="one"
|
63
|
-
></glide-core-dropdown-option>
|
52
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
64
53
|
|
65
54
|
<glide-core-dropdown-option
|
66
55
|
label="Two"
|
67
|
-
value="two"
|
68
56
|
selected
|
69
57
|
></glide-core-dropdown-option>
|
70
58
|
</glide-core-dropdown>`);
|
@@ -82,16 +70,99 @@ it('dispatches one "change" event when an option is selected via Space', async (
|
|
82
70
|
expect(event.bubbles).to.be.true;
|
83
71
|
expect(spy.callCount).to.equal(1);
|
84
72
|
});
|
85
|
-
it('dispatches
|
86
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder"
|
73
|
+
it('dispatches an "edit" event on click', async () => {
|
74
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
87
75
|
<glide-core-dropdown-option
|
88
|
-
label="
|
89
|
-
|
76
|
+
label="Label"
|
77
|
+
editable
|
78
|
+
selected
|
90
79
|
></glide-core-dropdown-option>
|
80
|
+
</glide-core-dropdown>`);
|
81
|
+
setTimeout(() => {
|
82
|
+
component?.shadowRoot
|
83
|
+
?.querySelector('[data-test="edit-button"]')
|
84
|
+
?.click();
|
85
|
+
});
|
86
|
+
const event = await oneEvent(component, 'edit');
|
87
|
+
const option = component.querySelector('glide-core-dropdown-option');
|
88
|
+
expect(event instanceof Event).to.be.true;
|
89
|
+
expect(event.bubbles).to.be.true;
|
90
|
+
expect(event.composed).to.be.true;
|
91
|
+
expect(event.target).to.equal(option);
|
92
|
+
});
|
93
|
+
it('dispatches an "edit" event on Enter', async () => {
|
94
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
95
|
+
<glide-core-dropdown-option
|
96
|
+
label="Label"
|
97
|
+
editable
|
98
|
+
selected
|
99
|
+
></glide-core-dropdown-option>
|
100
|
+
</glide-core-dropdown>`);
|
101
|
+
component?.shadowRoot
|
102
|
+
?.querySelector('[data-test="edit-button"]')
|
103
|
+
?.focus();
|
104
|
+
sendKeys({ press: 'Enter' });
|
105
|
+
const event = await oneEvent(component, 'edit');
|
106
|
+
const option = component.querySelector('glide-core-dropdown-option');
|
107
|
+
expect(event instanceof Event).to.be.true;
|
108
|
+
expect(event.bubbles).to.be.true;
|
109
|
+
expect(event.composed).to.be.true;
|
110
|
+
expect(event.target).to.equal(option);
|
111
|
+
});
|
112
|
+
it('dispatches an "edit" event on Space', async () => {
|
113
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
114
|
+
<glide-core-dropdown-option
|
115
|
+
label="Label"
|
116
|
+
editable
|
117
|
+
selected
|
118
|
+
></glide-core-dropdown-option>
|
119
|
+
</glide-core-dropdown>`);
|
120
|
+
component?.shadowRoot
|
121
|
+
?.querySelector('[data-test="edit-button"]')
|
122
|
+
?.focus();
|
123
|
+
sendKeys({ press: ' ' });
|
124
|
+
const event = await oneEvent(component, 'edit');
|
125
|
+
const option = component.querySelector('glide-core-dropdown-option');
|
126
|
+
expect(event instanceof Event).to.be.true;
|
127
|
+
expect(event.bubbles).to.be.true;
|
128
|
+
expect(event.target).to.equal(option);
|
129
|
+
});
|
130
|
+
it('does not dispatch an "edit" event when `disabled`', async () => {
|
131
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
|
132
|
+
<glide-core-dropdown-option
|
133
|
+
label="Label"
|
134
|
+
editable
|
135
|
+
selected
|
136
|
+
></glide-core-dropdown-option>
|
137
|
+
</glide-core-dropdown>`);
|
138
|
+
const spy = sinon.spy();
|
139
|
+
component.addEventListener('edit', spy);
|
140
|
+
component?.shadowRoot
|
141
|
+
?.querySelector('[data-test="edit-button"]')
|
142
|
+
?.click();
|
143
|
+
expect(spy.callCount).to.equal(0);
|
144
|
+
});
|
145
|
+
it('does not dispatch an "edit" event when `readonly`', async () => {
|
146
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
|
147
|
+
<glide-core-dropdown-option
|
148
|
+
label="Label"
|
149
|
+
editable
|
150
|
+
selected
|
151
|
+
></glide-core-dropdown-option>
|
152
|
+
</glide-core-dropdown>`);
|
153
|
+
const spy = sinon.spy();
|
154
|
+
component.addEventListener('edit', spy);
|
155
|
+
component?.shadowRoot
|
156
|
+
?.querySelector('[data-test="edit-button"]')
|
157
|
+
?.click();
|
158
|
+
expect(spy.callCount).to.equal(0);
|
159
|
+
});
|
160
|
+
it('dispatches one "input" event when an option is selected via click', async () => {
|
161
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
162
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
91
163
|
|
92
164
|
<glide-core-dropdown-option
|
93
165
|
label="Two"
|
94
|
-
value="two"
|
95
166
|
selected
|
96
167
|
></glide-core-dropdown-option>
|
97
168
|
</glide-core-dropdown>`);
|
@@ -107,14 +178,10 @@ it('dispatches one "input" event when an option is selected via click', async ()
|
|
107
178
|
});
|
108
179
|
it('dispatches one "input" event when an option is selected via Enter', async () => {
|
109
180
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
110
|
-
<glide-core-dropdown-option
|
111
|
-
label="One"
|
112
|
-
value="one"
|
113
|
-
></glide-core-dropdown-option>
|
181
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
114
182
|
|
115
183
|
<glide-core-dropdown-option
|
116
184
|
label="Two"
|
117
|
-
value="two"
|
118
185
|
selected
|
119
186
|
></glide-core-dropdown-option>
|
120
187
|
</glide-core-dropdown>`);
|
@@ -134,14 +201,10 @@ it('dispatches one "input" event when an option is selected via Enter', async ()
|
|
134
201
|
});
|
135
202
|
it('dispatches one "input" event when an option is selected via Space', async () => {
|
136
203
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
137
|
-
<glide-core-dropdown-option
|
138
|
-
label="One"
|
139
|
-
value="one"
|
140
|
-
></glide-core-dropdown-option>
|
204
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
141
205
|
|
142
206
|
<glide-core-dropdown-option
|
143
207
|
label="Two"
|
144
|
-
value="two"
|
145
208
|
selected
|
146
209
|
></glide-core-dropdown-option>
|
147
210
|
</glide-core-dropdown>`);
|
@@ -180,14 +243,10 @@ it('does not dispatch a "change" event when an already selected option is clicke
|
|
180
243
|
});
|
181
244
|
it('does not dispatch a "change" event when `value` is changed programmatically', async () => {
|
182
245
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
183
|
-
<glide-core-dropdown-option
|
184
|
-
label="One"
|
185
|
-
value="one"
|
186
|
-
></glide-core-dropdown-option>
|
246
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
187
247
|
|
188
248
|
<glide-core-dropdown-option
|
189
249
|
label="Two"
|
190
|
-
value="two"
|
191
250
|
selected
|
192
251
|
></glide-core-dropdown-option>
|
193
252
|
</glide-core-dropdown>`);
|
@@ -201,14 +260,10 @@ it('does not dispatch a "change" event when `value` is changed programmatically'
|
|
201
260
|
});
|
202
261
|
it('continues to dispatch "change" events upon selection after `value` is changed programmatically', async () => {
|
203
262
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
204
|
-
<glide-core-dropdown-option
|
205
|
-
label="One"
|
206
|
-
value="one"
|
207
|
-
></glide-core-dropdown-option>
|
263
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
208
264
|
|
209
265
|
<glide-core-dropdown-option
|
210
266
|
label="Two"
|
211
|
-
value="two"
|
212
267
|
selected
|
213
268
|
></glide-core-dropdown-option>
|
214
269
|
</glide-core-dropdown>`);
|
@@ -221,14 +276,10 @@ it('continues to dispatch "change" events upon selection after `value` is change
|
|
221
276
|
});
|
222
277
|
it('does not dispatch an "input" event when `value` is changed programmatically', async () => {
|
223
278
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
224
|
-
<glide-core-dropdown-option
|
225
|
-
label="One"
|
226
|
-
value="one"
|
227
|
-
></glide-core-dropdown-option>
|
279
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
228
280
|
|
229
281
|
<glide-core-dropdown-option
|
230
282
|
label="Two"
|
231
|
-
value="two"
|
232
283
|
selected
|
233
284
|
></glide-core-dropdown-option>
|
234
285
|
</glide-core-dropdown>`);
|
@@ -244,14 +295,10 @@ it('does not dispatch a "change" event when an already selected option is select
|
|
244
295
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
245
296
|
<glide-core-dropdown-option
|
246
297
|
label="One"
|
247
|
-
value="one"
|
248
298
|
selected
|
249
299
|
></glide-core-dropdown-option>
|
250
300
|
|
251
|
-
<glide-core-dropdown-option
|
252
|
-
label="Two"
|
253
|
-
value="two"
|
254
|
-
></glide-core-dropdown-option>
|
301
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
255
302
|
</glide-core-dropdown>`);
|
256
303
|
const spy = sinon.spy();
|
257
304
|
component.addEventListener('change', spy);
|
@@ -265,14 +312,10 @@ it('does not dispatch an "input" event when an already selected option is select
|
|
265
312
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
266
313
|
<glide-core-dropdown-option
|
267
314
|
label="One"
|
268
|
-
value="one"
|
269
315
|
selected
|
270
316
|
></glide-core-dropdown-option>
|
271
317
|
|
272
|
-
<glide-core-dropdown-option
|
273
|
-
label="Two"
|
274
|
-
value="two"
|
275
|
-
></glide-core-dropdown-option>
|
318
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
276
319
|
</glide-core-dropdown>`);
|
277
320
|
const spy = sinon.spy();
|
278
321
|
component.addEventListener('input', spy);
|
@@ -284,14 +327,10 @@ it('does not dispatch an "input" event when an already selected option is select
|
|
284
327
|
});
|
285
328
|
it('continues to dispatch "input" events upon selection after `value` is changed programmatically', async () => {
|
286
329
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
287
|
-
<glide-core-dropdown-option
|
288
|
-
label="One"
|
289
|
-
value="one"
|
290
|
-
></glide-core-dropdown-option>
|
330
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
291
331
|
|
292
332
|
<glide-core-dropdown-option
|
293
333
|
label="Two"
|
294
|
-
value="two"
|
295
334
|
selected
|
296
335
|
></glide-core-dropdown-option>
|
297
336
|
</glide-core-dropdown>`);
|
@@ -7,60 +7,17 @@ import GlideCoreDropdownOption from './dropdown.option.js';
|
|
7
7
|
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
8
8
|
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
9
9
|
const defaultSlot = html `
|
10
|
-
<glide-core-dropdown-option
|
11
|
-
|
12
|
-
|
13
|
-
></glide-core-dropdown-option>
|
14
|
-
|
15
|
-
<glide-core-dropdown-option
|
16
|
-
|
17
|
-
|
18
|
-
></glide-core-dropdown-option>
|
19
|
-
|
20
|
-
<glide-core-dropdown-option
|
21
|
-
label="Three"
|
22
|
-
value="three"
|
23
|
-
></glide-core-dropdown-option>
|
24
|
-
|
25
|
-
<glide-core-dropdown-option
|
26
|
-
label="Four"
|
27
|
-
value="four"
|
28
|
-
></glide-core-dropdown-option>
|
29
|
-
|
30
|
-
<glide-core-dropdown-option
|
31
|
-
label="Five"
|
32
|
-
value="five"
|
33
|
-
></glide-core-dropdown-option>
|
34
|
-
|
35
|
-
<glide-core-dropdown-option
|
36
|
-
label="Six"
|
37
|
-
value="six"
|
38
|
-
></glide-core-dropdown-option>
|
39
|
-
|
40
|
-
<glide-core-dropdown-option
|
41
|
-
label="Seven"
|
42
|
-
value="seven"
|
43
|
-
></glide-core-dropdown-option>
|
44
|
-
|
45
|
-
<glide-core-dropdown-option
|
46
|
-
label="Eight"
|
47
|
-
value="eight"
|
48
|
-
></glide-core-dropdown-option>
|
49
|
-
|
50
|
-
<glide-core-dropdown-option
|
51
|
-
label="Nine"
|
52
|
-
value="nine"
|
53
|
-
></glide-core-dropdown-option>
|
54
|
-
|
55
|
-
<glide-core-dropdown-option
|
56
|
-
label="Ten"
|
57
|
-
value="ten"
|
58
|
-
></glide-core-dropdown-option>
|
59
|
-
|
60
|
-
<glide-core-dropdown-option
|
61
|
-
label="Eleven"
|
62
|
-
value="eleven"
|
63
|
-
></glide-core-dropdown-option>
|
10
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
11
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
12
|
+
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
13
|
+
<glide-core-dropdown-option label="Four"></glide-core-dropdown-option>
|
14
|
+
<glide-core-dropdown-option label="Five"></glide-core-dropdown-option>
|
15
|
+
<glide-core-dropdown-option label="Six"></glide-core-dropdown-option>
|
16
|
+
<glide-core-dropdown-option label="Seven"></glide-core-dropdown-option>
|
17
|
+
<glide-core-dropdown-option label="Eight"></glide-core-dropdown-option>
|
18
|
+
<glide-core-dropdown-option label="Nine"></glide-core-dropdown-option>
|
19
|
+
<glide-core-dropdown-option label="Ten"></glide-core-dropdown-option>
|
20
|
+
<glide-core-dropdown-option label="Eleven"></glide-core-dropdown-option>
|
64
21
|
`;
|
65
22
|
it('focuses the input when `focus()` is called', async () => {
|
66
23
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
@@ -109,12 +66,12 @@ it('retains focus on the the input when an option is selected via Enter', async
|
|
109
66
|
const input = component.shadowRoot?.querySelector('[data-test="input"]');
|
110
67
|
expect(component.shadowRoot?.activeElement).to.equal(input);
|
111
68
|
});
|
112
|
-
it('retains focus on the the input when the button is clicked', async () => {
|
69
|
+
it('retains focus on the the input when the primary button is clicked', async () => {
|
113
70
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
114
71
|
${defaultSlot}
|
115
72
|
</glide-core-dropdown>`);
|
116
73
|
component.focus();
|
117
|
-
const button = component.shadowRoot?.querySelector('[data-test="button"]');
|
74
|
+
const button = component.shadowRoot?.querySelector('[data-test="primary-button"]');
|
118
75
|
assert(button);
|
119
76
|
const { x, y } = button.getBoundingClientRect();
|
120
77
|
// A simple `option.click()` won't do because we need a "mousedown" so that
|
@@ -130,10 +87,6 @@ it('focuses the input on submit when required and no option is selected', async
|
|
130
87
|
const form = document.createElement('form');
|
131
88
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" required>
|
132
89
|
${defaultSlot}
|
133
|
-
<glide-core-dropdown-option
|
134
|
-
label="Label"
|
135
|
-
value="value"
|
136
|
-
></glide-core-dropdown-option>
|
137
90
|
</glide-core-dropdown>`, {
|
138
91
|
parentNode: form,
|
139
92
|
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
2
|
import './dropdown.option.js';
|
3
|
-
import { expect, fixture, html } from '@open-wc/testing';
|
3
|
+
import { aTimeout, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
|
4
4
|
import { sendKeys } from '@web/test-runner-commands';
|
5
5
|
import GlideCoreDropdown from './dropdown.js';
|
6
6
|
import GlideCoreDropdownOption from './dropdown.option.js';
|
@@ -14,10 +14,7 @@ it('closes and reports validity when it loses focus', async () => {
|
|
14
14
|
open
|
15
15
|
required
|
16
16
|
>
|
17
|
-
<glide-core-dropdown-option
|
18
|
-
label="Label"
|
19
|
-
value="value"
|
20
|
-
></glide-core-dropdown-option>
|
17
|
+
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
21
18
|
</glide-core-dropdown>`, { parentNode: div });
|
22
19
|
const button = document.createElement('button');
|
23
20
|
div.prepend(button);
|
@@ -27,7 +24,7 @@ it('closes and reports validity when it loses focus', async () => {
|
|
27
24
|
expect(component.open).to.be.false;
|
28
25
|
component.open = true;
|
29
26
|
component.focus();
|
30
|
-
// Move focus to the button.
|
27
|
+
// Move focus to the primary button.
|
31
28
|
await sendKeys({ down: 'Shift' });
|
32
29
|
await sendKeys({ press: 'Tab' });
|
33
30
|
await sendKeys({ up: 'Shift' });
|
@@ -39,16 +36,72 @@ it('closes and reports validity when it loses focus', async () => {
|
|
39
36
|
});
|
40
37
|
it('is focused when clicked', async () => {
|
41
38
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
42
|
-
<glide-core-dropdown-option
|
43
|
-
label="Label"
|
44
|
-
value="value"
|
45
|
-
></glide-core-dropdown-option>
|
39
|
+
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
46
40
|
</glide-core-dropdown>`);
|
47
41
|
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
48
42
|
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
49
43
|
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
50
44
|
// possible to a real click. See the comment in the handler for more information.
|
51
|
-
const button = component.shadowRoot?.querySelector('[data-test="button"]');
|
45
|
+
const button = component.shadowRoot?.querySelector('[data-test="primary-button"]');
|
52
46
|
button?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
53
47
|
expect(component.shadowRoot?.activeElement).to.equal(button);
|
54
48
|
});
|
49
|
+
it('focuses the Add button on ArrowDown', async () => {
|
50
|
+
const component = await fixture(html `<glide-core-dropdown
|
51
|
+
add-button-label="Add"
|
52
|
+
label="Label"
|
53
|
+
placeholder="Placeholder"
|
54
|
+
open
|
55
|
+
>
|
56
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
57
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
58
|
+
</glide-core-dropdown>`);
|
59
|
+
// Wait for it to open.
|
60
|
+
await aTimeout(0);
|
61
|
+
const options = component.querySelectorAll('glide-core-dropdown-option');
|
62
|
+
component.focus();
|
63
|
+
await sendKeys({ press: 'ArrowDown' }); // Two
|
64
|
+
await sendKeys({ press: 'ArrowDown' }); // Add button
|
65
|
+
const addButton = component.shadowRoot?.querySelector('[data-test="add-button"]');
|
66
|
+
expect(options[0]?.privateActive).to.be.false;
|
67
|
+
expect(options[0]?.privateActive).to.be.false;
|
68
|
+
expect(options[1]?.privateActive).to.be.false;
|
69
|
+
expect(options[1]?.privateIsEditActive).to.be.false;
|
70
|
+
expect(options[1]?.privateIsOpenTooltip).to.be.false;
|
71
|
+
expect(component.shadowRoot?.activeElement).to.equal(addButton);
|
72
|
+
});
|
73
|
+
it('returns focus to itself on Escape when the Add button has focus', async () => {
|
74
|
+
const component = await fixture(html `<glide-core-dropdown
|
75
|
+
add-button-label="Add"
|
76
|
+
label="Label"
|
77
|
+
placeholder="Placeholder"
|
78
|
+
open
|
79
|
+
>
|
80
|
+
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
81
|
+
</glide-core-dropdown>`);
|
82
|
+
// Wait for it to open.
|
83
|
+
await aTimeout(0);
|
84
|
+
component.focus();
|
85
|
+
await sendKeys({ press: 'Tab' });
|
86
|
+
await sendKeys({ press: 'Escape' });
|
87
|
+
expect(document.activeElement).to.equal(component);
|
88
|
+
});
|
89
|
+
it('returns focus to itself when an option is activated and the Add button has focus', async () => {
|
90
|
+
const component = await fixture(html `<glide-core-dropdown
|
91
|
+
add-button-label="Add"
|
92
|
+
label="Label"
|
93
|
+
placeholder="Placeholder"
|
94
|
+
open
|
95
|
+
>
|
96
|
+
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
97
|
+
</glide-core-dropdown>`);
|
98
|
+
// Wait for it to open.
|
99
|
+
await aTimeout(0);
|
100
|
+
component.focus();
|
101
|
+
await sendKeys({ press: 'Tab' });
|
102
|
+
component
|
103
|
+
.querySelector('glide-core-dropdown-option')
|
104
|
+
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
105
|
+
await elementUpdated(component);
|
106
|
+
expect(document.activeElement).to.equal(component);
|
107
|
+
});
|