@crowdstrike/glide-core 0.8.0 → 0.9.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/dist/button-group.button.d.ts +14 -15
- package/dist/button-group.button.js +1 -1
- package/dist/button-group.button.styles.js +75 -52
- package/dist/button-group.button.test.basics.d.ts +1 -1
- package/dist/button-group.button.test.basics.js +83 -147
- package/dist/button-group.button.test.events.js +8 -67
- package/dist/button-group.button.test.focus.js +13 -0
- package/dist/button-group.button.test.interactions.d.ts +1 -0
- package/dist/button-group.button.test.interactions.js +42 -0
- package/dist/button-group.d.ts +7 -10
- package/dist/button-group.js +1 -1
- package/dist/button-group.stories.d.ts +1 -5
- package/dist/button-group.styles.js +18 -6
- package/dist/button-group.test.basics.js +113 -234
- package/dist/button-group.test.events.js +210 -263
- package/dist/button-group.test.focus.d.ts +1 -0
- package/dist/button-group.test.focus.js +39 -0
- package/dist/button-group.test.interactions.d.ts +1 -0
- package/dist/button-group.test.interactions.js +91 -0
- package/dist/button.test.basics.js +1 -1
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.styles.js +1 -1
- package/dist/checkbox-group.test.basics.js +1 -1
- package/dist/checkbox-group.test.events.js +4 -4
- package/dist/checkbox-group.test.focus.js +4 -3
- package/dist/checkbox.d.ts +7 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.styles.js +10 -0
- package/dist/checkbox.test.events.js +4 -4
- package/dist/checkbox.test.focus.js +2 -2
- package/dist/{checkbox.test.states.js → checkbox.test.interactions.js} +24 -1
- package/dist/drawer.js +1 -1
- package/dist/dropdown.d.ts +6 -4
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.d.ts +6 -2
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +13 -0
- package/dist/dropdown.option.test.basics.js +6 -3
- package/dist/dropdown.option.test.events.js +1 -1
- package/dist/dropdown.option.test.focus.js +1 -1
- package/dist/dropdown.option.test.interactions.multiple.js +1 -54
- package/dist/dropdown.option.test.interactions.single.js +51 -9
- package/dist/dropdown.styles.js +20 -19
- package/dist/dropdown.test.basics.js +143 -2
- package/dist/dropdown.test.basics.multiple.js +5 -2
- package/dist/dropdown.test.events.filterable.js +74 -0
- package/dist/dropdown.test.events.js +49 -160
- package/dist/dropdown.test.events.multiple.js +265 -8
- package/dist/dropdown.test.events.single.js +199 -2
- package/dist/dropdown.test.focus.filterable.js +9 -5
- package/dist/dropdown.test.focus.js +1 -1
- package/dist/dropdown.test.focus.multiple.js +1 -1
- package/dist/dropdown.test.focus.single.js +1 -1
- package/dist/dropdown.test.interactions.filterable.js +68 -11
- package/dist/dropdown.test.interactions.js +94 -5
- package/dist/dropdown.test.interactions.multiple.js +202 -5
- package/dist/dropdown.test.interactions.single.js +68 -6
- package/dist/form-controls-layout.test.basics.js +1 -1
- package/dist/icon-button.test.basics.js +1 -1
- package/dist/icons/checked.d.ts +1 -1
- package/dist/icons/checked.js +1 -1
- package/dist/icons/magnifying-glass.js +1 -1
- package/dist/input.d.ts +0 -6
- package/dist/input.js +1 -1
- package/dist/input.styles.js +7 -2
- package/dist/input.test.basics.js +19 -5
- package/dist/input.test.events.js +4 -4
- package/dist/input.test.focus.js +4 -4
- package/dist/input.test.translations.d.ts +1 -0
- package/dist/input.test.translations.js +38 -0
- package/dist/input.test.validity.js +133 -4
- package/dist/label.d.ts +1 -1
- package/dist/label.js +1 -1
- package/dist/label.styles.js +22 -13
- package/dist/label.test.basics.js +26 -24
- package/dist/library/expect-argument-error.js +1 -1
- package/dist/library/localize.d.ts +3 -1
- package/dist/menu.d.ts +3 -5
- package/dist/menu.js +1 -1
- package/dist/menu.options.test.basics.js +2 -2
- package/dist/menu.styles.js +1 -15
- package/dist/menu.test.basics.d.ts +1 -2
- package/dist/menu.test.basics.js +22 -6
- package/dist/menu.test.focus.d.ts +1 -0
- package/dist/menu.test.focus.js +13 -6
- package/dist/menu.test.interactions.js +212 -56
- package/dist/modal.icon-button.test.basics.js +1 -1
- package/dist/modal.js +1 -1
- package/dist/modal.styles.js +18 -13
- package/dist/modal.tertiary-icon.d.ts +0 -1
- package/dist/modal.tertiary-icon.js +1 -1
- package/dist/modal.tertiary-icon.test.basics.js +1 -1
- package/dist/modal.test.basics.js +1 -1
- package/dist/modal.test.events.js +10 -10
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.styles.js +1 -1
- package/dist/radio-group.test.focus.js +3 -3
- package/dist/radio.d.ts +1 -0
- package/dist/radio.js +1 -1
- package/dist/radio.styles.js +33 -0
- package/dist/split-container.test.basics.js +4 -0
- package/dist/split-link.test.interactions.js +1 -1
- package/dist/styles/variables.css +1 -1
- package/dist/tab.d.ts +1 -1
- package/dist/tab.group.js +1 -1
- package/dist/tab.group.test.basics.js +1 -1
- package/dist/tab.group.test.interactions.js +198 -2
- package/dist/tab.js +1 -1
- package/dist/tab.panel.d.ts +1 -0
- package/dist/tab.panel.js +1 -1
- package/dist/tab.panel.styles.js +11 -1
- package/dist/tag.test.basics.js +2 -2
- package/dist/textarea.d.ts +0 -1
- package/dist/textarea.js +2 -2
- package/dist/textarea.stories.d.ts +3 -4
- package/dist/textarea.styles.js +14 -3
- package/dist/textarea.test.basics.js +80 -44
- package/dist/textarea.test.events.js +56 -41
- package/dist/textarea.test.translations.d.ts +1 -0
- package/dist/textarea.test.translations.js +34 -0
- package/dist/textarea.test.validity.js +104 -20
- package/dist/toasts.js +1 -1
- package/dist/toasts.styles.js +8 -1
- package/dist/toasts.test.basics.js +20 -0
- package/dist/toggle.js +1 -1
- package/dist/toggle.test.focus.js +1 -1
- package/dist/toggle.test.interactions.d.ts +1 -0
- package/dist/tooltip.d.ts +7 -5
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.styles.js +90 -25
- package/dist/tooltip.test.basics.js +38 -3
- package/dist/tooltip.test.interactions.js +136 -34
- package/dist/translations/en.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/tree.d.ts +0 -1
- package/dist/tree.item.d.ts +1 -2
- package/dist/tree.item.js +1 -1
- package/dist/tree.item.menu.d.ts +0 -1
- package/dist/tree.item.menu.js +1 -1
- package/dist/tree.js +1 -1
- package/dist/tree.test.basics.js +1 -1
- package/package.json +2 -4
- package/dist/drawer.test.floating-components.d.ts +0 -1
- package/dist/drawer.test.floating-components.js +0 -52
- package/dist/library/set-containing-block.d.ts +0 -15
- package/dist/library/set-containing-block.js +0 -1
- package/dist/modal.test.floating-components.js +0 -63
- /package/dist/{checkbox.test.states.d.ts → button-group.button.test.focus.d.ts} +0 -0
- /package/dist/{modal.test.floating-components.d.ts → checkbox.test.interactions.d.ts} +0 -0
- /package/dist/{toggle.test.states.d.ts → dropdown.test.events.filterable.d.ts} +0 -0
- /package/dist/{toggle.test.states.js → toggle.test.interactions.js} +0 -0
@@ -1,10 +1,22 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { assert, expect, fixture, html } from '@open-wc/testing';
|
2
|
+
import { aTimeout, assert, expect, fixture, html } from '@open-wc/testing';
|
3
3
|
import { sendKeys, sendMouse } from '@web/test-runner-commands';
|
4
4
|
import GlideCoreDropdown from './dropdown.js';
|
5
5
|
import GlideCoreDropdownOption from './dropdown.option.js';
|
6
6
|
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
7
7
|
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
8
|
+
it('opens when opened programmatically', async () => {
|
9
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
10
|
+
<glide-core-dropdown-option
|
11
|
+
label="Label"
|
12
|
+
value="value"
|
13
|
+
></glide-core-dropdown-option>
|
14
|
+
</glide-core-dropdown>`);
|
15
|
+
component.open = true;
|
16
|
+
await aTimeout(0);
|
17
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
18
|
+
expect(options?.checkVisibility()).to.be.true;
|
19
|
+
});
|
8
20
|
it('opens on ArrowUp', async () => {
|
9
21
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
10
22
|
<glide-core-dropdown-option
|
@@ -14,9 +26,9 @@ it('opens on ArrowUp', async () => {
|
|
14
26
|
</glide-core-dropdown>`);
|
15
27
|
component.focus();
|
16
28
|
await sendKeys({ press: 'ArrowUp' });
|
17
|
-
const
|
29
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
18
30
|
expect(component.open).to.be.true;
|
19
|
-
expect(
|
31
|
+
expect(options?.checkVisibility()).to.be.true;
|
20
32
|
});
|
21
33
|
it('does not open on ArrowUp when `disabled`', async () => {
|
22
34
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
|
@@ -27,7 +39,9 @@ it('does not open on ArrowUp when `disabled`', async () => {
|
|
27
39
|
</glide-core-dropdown>`);
|
28
40
|
component.focus();
|
29
41
|
await sendKeys({ press: 'ArrowUp' });
|
42
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
30
43
|
expect(component.open).to.be.false;
|
44
|
+
expect(options?.checkVisibility()).to.be.false;
|
31
45
|
});
|
32
46
|
it('does not open on ArrowUp when `readonly`', async () => {
|
33
47
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
|
@@ -38,7 +52,9 @@ it('does not open on ArrowUp when `readonly`', async () => {
|
|
38
52
|
</glide-core-dropdown>`);
|
39
53
|
component.focus();
|
40
54
|
await sendKeys({ press: 'ArrowUp' });
|
55
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
41
56
|
expect(component.open).to.be.false;
|
57
|
+
expect(options?.checkVisibility()).to.be.false;
|
42
58
|
});
|
43
59
|
it('opens on ArrowDown', async () => {
|
44
60
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
@@ -54,9 +70,9 @@ it('opens on ArrowDown', async () => {
|
|
54
70
|
</glide-core-dropdown>`);
|
55
71
|
component.focus();
|
56
72
|
await sendKeys({ press: 'ArrowDown' });
|
57
|
-
const
|
73
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
58
74
|
expect(component.open).to.be.true;
|
59
|
-
expect(
|
75
|
+
expect(options?.checkVisibility()).to.be.true;
|
60
76
|
});
|
61
77
|
it('does not open on ArrowDown when `disabled`', async () => {
|
62
78
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
|
@@ -72,7 +88,9 @@ it('does not open on ArrowDown when `disabled`', async () => {
|
|
72
88
|
</glide-core-dropdown>`);
|
73
89
|
component.focus();
|
74
90
|
await sendKeys({ press: 'ArrowDown' });
|
91
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
75
92
|
expect(component.open).to.be.false;
|
93
|
+
expect(options?.checkVisibility()).to.be.false;
|
76
94
|
});
|
77
95
|
it('does not open on ArrowDown when `readonly`', async () => {
|
78
96
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
|
@@ -88,7 +106,9 @@ it('does not open on ArrowDown when `readonly`', async () => {
|
|
88
106
|
</glide-core-dropdown>`);
|
89
107
|
component.focus();
|
90
108
|
await sendKeys({ press: 'ArrowDown' });
|
109
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
91
110
|
expect(component.open).to.be.false;
|
111
|
+
expect(options?.checkVisibility()).to.be.false;
|
92
112
|
});
|
93
113
|
it('opens on Space', async () => {
|
94
114
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
@@ -99,7 +119,9 @@ it('opens on Space', async () => {
|
|
99
119
|
</glide-core-dropdown>`);
|
100
120
|
component.focus();
|
101
121
|
await sendKeys({ press: ' ' });
|
122
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
102
123
|
expect(component.open).to.be.true;
|
124
|
+
expect(options?.checkVisibility()).to.be.true;
|
103
125
|
});
|
104
126
|
it('does not open on Space when `disabled`', async () => {
|
105
127
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
|
@@ -110,7 +132,9 @@ it('does not open on Space when `disabled`', async () => {
|
|
110
132
|
</glide-core-dropdown>`);
|
111
133
|
component.focus();
|
112
134
|
await sendKeys({ press: ' ' });
|
135
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
113
136
|
expect(component.open).to.be.false;
|
137
|
+
expect(options?.checkVisibility()).to.be.false;
|
114
138
|
});
|
115
139
|
it('does not open on Space when `readonly`', async () => {
|
116
140
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
|
@@ -121,7 +145,9 @@ it('does not open on Space when `readonly`', async () => {
|
|
121
145
|
</glide-core-dropdown>`);
|
122
146
|
component.focus();
|
123
147
|
await sendKeys({ press: ' ' });
|
148
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
124
149
|
expect(component.open).to.be.false;
|
150
|
+
expect(options?.checkVisibility()).to.be.false;
|
125
151
|
});
|
126
152
|
// See the `document` click listener comment in `dropdown.ts` for an explanation.
|
127
153
|
it('opens when opened programmatically via the click handler of another element', async () => {
|
@@ -136,7 +162,11 @@ it('opens when opened programmatically via the click handler of another element'
|
|
136
162
|
button.addEventListener('click', () => (component.open = true));
|
137
163
|
div.append(button);
|
138
164
|
button.click();
|
165
|
+
// Wait for it to open.
|
166
|
+
await aTimeout(0);
|
167
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
139
168
|
expect(component.open).to.be.true;
|
169
|
+
expect(options?.checkVisibility()).to.be.true;
|
140
170
|
});
|
141
171
|
it('closes when something outside of it is clicked', async () => {
|
142
172
|
const component = await fixture(html `<glide-core-dropdown
|
@@ -181,6 +211,49 @@ it('closes on Escape', async () => {
|
|
181
211
|
await sendKeys({ press: 'Escape' });
|
182
212
|
expect(component.open).to.be.false;
|
183
213
|
});
|
214
|
+
it('opens when open and enabled programmatically', async () => {
|
215
|
+
const component = await fixture(html `<glide-core-dropdown
|
216
|
+
label="Label"
|
217
|
+
placeholder="Placeholder"
|
218
|
+
open
|
219
|
+
disabled
|
220
|
+
>
|
221
|
+
<glide-core-dropdown-option
|
222
|
+
label="One"
|
223
|
+
value="one"
|
224
|
+
selected
|
225
|
+
></glide-core-dropdown-option>
|
226
|
+
|
227
|
+
<glide-core-dropdown-option
|
228
|
+
label="Two"
|
229
|
+
value="two"
|
230
|
+
></glide-core-dropdown-option>
|
231
|
+
</glide-core-dropdown>`);
|
232
|
+
component.disabled = false;
|
233
|
+
// Wait for it to open.
|
234
|
+
await aTimeout(0);
|
235
|
+
const options = component?.shadowRoot?.querySelector('[data-test="options"]');
|
236
|
+
expect(options?.checkVisibility()).to.be.true;
|
237
|
+
});
|
238
|
+
it('closes when open and disabled programmatically', async () => {
|
239
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
240
|
+
<glide-core-dropdown-option
|
241
|
+
label="One"
|
242
|
+
value="one"
|
243
|
+
selected
|
244
|
+
></glide-core-dropdown-option>
|
245
|
+
|
246
|
+
<glide-core-dropdown-option
|
247
|
+
label="Two"
|
248
|
+
value="two"
|
249
|
+
></glide-core-dropdown-option>
|
250
|
+
</glide-core-dropdown>`);
|
251
|
+
// Wait for it to open.
|
252
|
+
await aTimeout(0);
|
253
|
+
component.disabled = true;
|
254
|
+
const options = component?.shadowRoot?.querySelector('[data-test="options"]');
|
255
|
+
expect(options?.checkVisibility()).to.be.false;
|
256
|
+
});
|
184
257
|
it('activates an option on "mouseover"', async () => {
|
185
258
|
const component = await fixture(html `<glide-core-dropdown open>
|
186
259
|
<glide-core-dropdown-option
|
@@ -209,6 +282,8 @@ it('activates the next option on ArrowDown', async () => {
|
|
209
282
|
value="two"
|
210
283
|
></glide-core-dropdown-option>
|
211
284
|
</glide-core-dropdown>`);
|
285
|
+
// Wait for it to open.
|
286
|
+
await aTimeout(0);
|
212
287
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
213
288
|
options[0]?.focus();
|
214
289
|
await sendKeys({ press: 'ArrowDown' });
|
@@ -227,6 +302,8 @@ it('activates the previous option on ArrowUp', async () => {
|
|
227
302
|
value="two"
|
228
303
|
></glide-core-dropdown-option>
|
229
304
|
</glide-core-dropdown>`);
|
305
|
+
// Wait for it to open.
|
306
|
+
await aTimeout(0);
|
230
307
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
231
308
|
options[1]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
232
309
|
options[1]?.focus();
|
@@ -247,6 +324,8 @@ it('activates the first option on Home', async () => {
|
|
247
324
|
value="two"
|
248
325
|
></glide-core-dropdown-option>
|
249
326
|
</glide-core-dropdown>`);
|
327
|
+
// Wait for it to open.
|
328
|
+
await aTimeout(0);
|
250
329
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
251
330
|
options[1]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
252
331
|
expect(options[1].privateActive).to.be.true;
|
@@ -267,6 +346,8 @@ it('activates the first option on PageUp', async () => {
|
|
267
346
|
value="two"
|
268
347
|
></glide-core-dropdown-option>
|
269
348
|
</glide-core-dropdown>`);
|
349
|
+
// Wait for it to open.
|
350
|
+
await aTimeout(0);
|
270
351
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
271
352
|
options[1].dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
272
353
|
options[1].focus();
|
@@ -287,6 +368,8 @@ it('activates the first option on ArrowUp + Meta', async () => {
|
|
287
368
|
value="two"
|
288
369
|
></glide-core-dropdown-option>
|
289
370
|
</glide-core-dropdown>`);
|
371
|
+
// Wait for it to open.
|
372
|
+
await aTimeout(0);
|
290
373
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
291
374
|
options[1]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
292
375
|
expect(options[1]?.privateActive).to.be.true;
|
@@ -309,6 +392,8 @@ it('activates the last option on End', async () => {
|
|
309
392
|
value="two"
|
310
393
|
></glide-core-dropdown-option>
|
311
394
|
</glide-core-dropdown>`);
|
395
|
+
// Wait for it to open.
|
396
|
+
await aTimeout(0);
|
312
397
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
313
398
|
options[0]?.focus();
|
314
399
|
await sendKeys({ press: 'End' });
|
@@ -327,6 +412,8 @@ it('activates the last option on PageDown', async () => {
|
|
327
412
|
value="two"
|
328
413
|
></glide-core-dropdown-option>
|
329
414
|
</glide-core-dropdown>`);
|
415
|
+
// Wait for it to open.
|
416
|
+
await aTimeout(0);
|
330
417
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
331
418
|
options[0]?.focus();
|
332
419
|
await sendKeys({ press: 'PageDown' });
|
@@ -345,6 +432,8 @@ it('activates the last option on Meta + ArrowDown', async () => {
|
|
345
432
|
value="two"
|
346
433
|
></glide-core-dropdown-option>
|
347
434
|
</glide-core-dropdown>`);
|
435
|
+
// Wait for it to open.
|
436
|
+
await aTimeout(0);
|
348
437
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
349
438
|
options[0]?.focus();
|
350
439
|
await sendKeys({ down: 'Meta' });
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { assert, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
|
2
|
+
import { aTimeout, assert, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
|
3
3
|
import { sendKeys } from '@web/test-runner-commands';
|
4
4
|
import { sendMouse } from '@web/test-runner-commands';
|
5
5
|
import GlideCoreDropdown from './dropdown.js';
|
@@ -25,7 +25,11 @@ it('opens on click', async () => {
|
|
25
25
|
component.shadowRoot
|
26
26
|
?.querySelector('[data-test="button"]')
|
27
27
|
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
28
|
+
// Wait for it to open.
|
29
|
+
await aTimeout(0);
|
30
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
28
31
|
expect(component.open).to.be.true;
|
32
|
+
expect(options?.checkVisibility()).to.be.true;
|
29
33
|
});
|
30
34
|
it('toggles open and closed when the button is clicked', async () => {
|
31
35
|
const component = await fixture(html `<glide-core-dropdown
|
@@ -51,7 +55,10 @@ it('toggles open and closed when the button is clicked', async () => {
|
|
51
55
|
component.shadowRoot
|
52
56
|
?.querySelector('[data-test="button"]')
|
53
57
|
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
58
|
+
await elementUpdated(component);
|
59
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
54
60
|
expect(component.open).to.be.false;
|
61
|
+
expect(options?.checkVisibility()).to.be.false;
|
55
62
|
});
|
56
63
|
it('does not toggle open and closed when the button overflow text is clicked', async () => {
|
57
64
|
const component = await fixture(html `<glide-core-dropdown
|
@@ -77,7 +84,11 @@ it('does not toggle open and closed when the button overflow text is clicked', a
|
|
77
84
|
component.shadowRoot
|
78
85
|
?.querySelector('[data-test="tag-overflow-text"]')
|
79
86
|
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
87
|
+
// Wait for it to open.
|
88
|
+
await aTimeout(0);
|
89
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
80
90
|
expect(component.open).to.be.true;
|
91
|
+
expect(options?.checkVisibility()).to.be.true;
|
81
92
|
});
|
82
93
|
it('selects options on click', async () => {
|
83
94
|
const component = await fixture(html `<glide-core-dropdown
|
@@ -123,6 +134,8 @@ it('selects options on Space', async () => {
|
|
123
134
|
value="two"
|
124
135
|
></glide-core-dropdown-option>
|
125
136
|
</glide-core-dropdown>`);
|
137
|
+
// Wait for it to open.
|
138
|
+
await aTimeout(0);
|
126
139
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
127
140
|
options[0]?.focus();
|
128
141
|
await sendKeys({ press: ' ' });
|
@@ -153,6 +166,8 @@ it('selects options on Enter', async () => {
|
|
153
166
|
value="two"
|
154
167
|
></glide-core-dropdown-option>
|
155
168
|
</glide-core-dropdown>`);
|
169
|
+
// Wait for it to open.
|
170
|
+
await aTimeout(0);
|
156
171
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
157
172
|
options[0]?.focus();
|
158
173
|
await sendKeys({ press: 'Enter' });
|
@@ -398,6 +413,8 @@ it('updates `value` when a option is selected or deselected via Enter', async ()
|
|
398
413
|
|
399
414
|
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
400
415
|
</glide-core-dropdown>`);
|
416
|
+
// Wait for it to open.
|
417
|
+
await aTimeout(0);
|
401
418
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
402
419
|
options[1].focus();
|
403
420
|
await sendKeys({ press: 'Enter' });
|
@@ -424,6 +441,8 @@ it('updates `value` when an option is selected or deselected via Space', async (
|
|
424
441
|
|
425
442
|
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
426
443
|
</glide-core-dropdown>`);
|
444
|
+
// Wait for it to open.
|
445
|
+
await aTimeout(0);
|
427
446
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
428
447
|
options[1].focus();
|
429
448
|
await sendKeys({ press: ' ' });
|
@@ -626,7 +645,7 @@ it('deselects all but the last selected option when `multiple` is changed to `fa
|
|
626
645
|
expect(options[0].selected).be.false;
|
627
646
|
expect(options[1].selected).be.true;
|
628
647
|
});
|
629
|
-
it('selects all options when none are selected and Select All is
|
648
|
+
it('selects all options when none are selected and Select All is selected via click', async () => {
|
630
649
|
const component = await fixture(html `<glide-core-dropdown
|
631
650
|
label="Label"
|
632
651
|
placeholder="Placeholder"
|
@@ -650,7 +669,7 @@ it('selects all options when none are selected and Select All is clicked', async
|
|
650
669
|
expect(options[0].selected).to.be.true;
|
651
670
|
expect(options[1].selected).to.be.true;
|
652
671
|
});
|
653
|
-
it('selects all options when some are selected and Select All is
|
672
|
+
it('selects all options when some are selected and Select All is selected via click', async () => {
|
654
673
|
const component = await fixture(html `<glide-core-dropdown
|
655
674
|
label="Label"
|
656
675
|
placeholder="Placeholder"
|
@@ -675,7 +694,7 @@ it('selects all options when some are selected and Select All is clicked', async
|
|
675
694
|
expect(options[0].selected).to.be.true;
|
676
695
|
expect(options[1].selected).to.be.true;
|
677
696
|
});
|
678
|
-
it('
|
697
|
+
it('deselects all options when all are selected and Select All is selected via click', async () => {
|
679
698
|
const component = await fixture(html `<glide-core-dropdown
|
680
699
|
label="Label"
|
681
700
|
placeholder="Placeholder"
|
@@ -701,8 +720,181 @@ it('deelects all options when all are selected and Select All is clicked', async
|
|
701
720
|
expect(options[0].selected).to.be.false;
|
702
721
|
expect(options[1].selected).to.be.false;
|
703
722
|
});
|
723
|
+
it('selects all options when none are selected and Select All is selected via Space', async () => {
|
724
|
+
const component = await fixture(html `<glide-core-dropdown
|
725
|
+
label="Label"
|
726
|
+
placeholder="Placeholder"
|
727
|
+
multiple
|
728
|
+
open
|
729
|
+
select-all
|
730
|
+
>
|
731
|
+
<glide-core-dropdown-option
|
732
|
+
label="One"
|
733
|
+
value="one"
|
734
|
+
></glide-core-dropdown-option>
|
735
|
+
|
736
|
+
<glide-core-dropdown-option
|
737
|
+
label="Two"
|
738
|
+
value="two"
|
739
|
+
></glide-core-dropdown-option>
|
740
|
+
</glide-core-dropdown>`);
|
741
|
+
component?.shadowRoot
|
742
|
+
?.querySelector('[data-test="select-all"]')
|
743
|
+
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
744
|
+
component.focus();
|
745
|
+
await sendKeys({ press: ' ' });
|
746
|
+
const options = component.querySelectorAll('glide-core-dropdown-option');
|
747
|
+
expect(options[0].selected).to.be.true;
|
748
|
+
expect(options[1].selected).to.be.true;
|
749
|
+
});
|
750
|
+
it('selects all options when some are selected and Select All is selected via Space', async () => {
|
751
|
+
const component = await fixture(html `<glide-core-dropdown
|
752
|
+
label="Label"
|
753
|
+
placeholder="Placeholder"
|
754
|
+
multiple
|
755
|
+
open
|
756
|
+
select-all
|
757
|
+
>
|
758
|
+
<glide-core-dropdown-option
|
759
|
+
label="One"
|
760
|
+
value="one"
|
761
|
+
selected
|
762
|
+
></glide-core-dropdown-option>
|
763
|
+
|
764
|
+
<glide-core-dropdown-option
|
765
|
+
label="Two"
|
766
|
+
value="two"
|
767
|
+
></glide-core-dropdown-option>
|
768
|
+
</glide-core-dropdown>`);
|
769
|
+
component?.shadowRoot
|
770
|
+
?.querySelector('[data-test="select-all"]')
|
771
|
+
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
772
|
+
component.focus();
|
773
|
+
await sendKeys({ press: ' ' });
|
774
|
+
const options = component.querySelectorAll('glide-core-dropdown-option');
|
775
|
+
expect(options[0].selected).to.be.true;
|
776
|
+
expect(options[1].selected).to.be.true;
|
777
|
+
});
|
778
|
+
it('deselects all options when all are selected and Select All is selected via Space', async () => {
|
779
|
+
const component = await fixture(html `<glide-core-dropdown
|
780
|
+
label="Label"
|
781
|
+
placeholder="Placeholder"
|
782
|
+
multiple
|
783
|
+
open
|
784
|
+
select-all
|
785
|
+
>
|
786
|
+
<glide-core-dropdown-option
|
787
|
+
label="One"
|
788
|
+
value="one"
|
789
|
+
selected
|
790
|
+
></glide-core-dropdown-option>
|
791
|
+
|
792
|
+
<glide-core-dropdown-option
|
793
|
+
label="Two"
|
794
|
+
value="two"
|
795
|
+
selected
|
796
|
+
></glide-core-dropdown-option>
|
797
|
+
</glide-core-dropdown>`);
|
798
|
+
component?.shadowRoot
|
799
|
+
?.querySelector('[data-test="select-all"]')
|
800
|
+
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
801
|
+
component.focus();
|
802
|
+
await sendKeys({ press: ' ' });
|
803
|
+
const options = component.querySelectorAll('glide-core-dropdown-option');
|
804
|
+
expect(options[0].selected).to.be.false;
|
805
|
+
expect(options[1].selected).to.be.false;
|
806
|
+
});
|
807
|
+
it('selects all options when none are selected and Select All is selected via Enter', async () => {
|
808
|
+
const component = await fixture(html `<glide-core-dropdown
|
809
|
+
label="Label"
|
810
|
+
placeholder="Placeholder"
|
811
|
+
multiple
|
812
|
+
open
|
813
|
+
select-all
|
814
|
+
>
|
815
|
+
<glide-core-dropdown-option
|
816
|
+
label="One"
|
817
|
+
value="one"
|
818
|
+
></glide-core-dropdown-option>
|
819
|
+
|
820
|
+
<glide-core-dropdown-option
|
821
|
+
label="Two"
|
822
|
+
value="two"
|
823
|
+
></glide-core-dropdown-option>
|
824
|
+
</glide-core-dropdown>`);
|
825
|
+
component?.shadowRoot
|
826
|
+
?.querySelector('[data-test="select-all"]')
|
827
|
+
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
828
|
+
component.focus();
|
829
|
+
await sendKeys({ press: 'Enter' });
|
830
|
+
const options = component.querySelectorAll('glide-core-dropdown-option');
|
831
|
+
expect(options[0].selected).to.be.true;
|
832
|
+
expect(options[1].selected).to.be.true;
|
833
|
+
});
|
834
|
+
it('selects all options when some are selected and Select All is selected via Enter', async () => {
|
835
|
+
const component = await fixture(html `<glide-core-dropdown
|
836
|
+
label="Label"
|
837
|
+
placeholder="Placeholder"
|
838
|
+
multiple
|
839
|
+
open
|
840
|
+
select-all
|
841
|
+
>
|
842
|
+
<glide-core-dropdown-option
|
843
|
+
label="One"
|
844
|
+
value="one"
|
845
|
+
selected
|
846
|
+
></glide-core-dropdown-option>
|
847
|
+
|
848
|
+
<glide-core-dropdown-option
|
849
|
+
label="Two"
|
850
|
+
value="two"
|
851
|
+
></glide-core-dropdown-option>
|
852
|
+
</glide-core-dropdown>`);
|
853
|
+
component?.shadowRoot
|
854
|
+
?.querySelector('[data-test="select-all"]')
|
855
|
+
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
856
|
+
component.focus();
|
857
|
+
await sendKeys({ press: 'Enter' });
|
858
|
+
const options = component.querySelectorAll('glide-core-dropdown-option');
|
859
|
+
expect(options[0].selected).to.be.true;
|
860
|
+
expect(options[1].selected).to.be.true;
|
861
|
+
});
|
862
|
+
it('deselects all options when all are selected and Select All is selected via Enter', async () => {
|
863
|
+
const component = await fixture(html `<glide-core-dropdown
|
864
|
+
label="Label"
|
865
|
+
placeholder="Placeholder"
|
866
|
+
multiple
|
867
|
+
open
|
868
|
+
select-all
|
869
|
+
>
|
870
|
+
<glide-core-dropdown-option
|
871
|
+
label="One"
|
872
|
+
value="one"
|
873
|
+
selected
|
874
|
+
></glide-core-dropdown-option>
|
875
|
+
|
876
|
+
<glide-core-dropdown-option
|
877
|
+
label="Two"
|
878
|
+
value="two"
|
879
|
+
selected
|
880
|
+
></glide-core-dropdown-option>
|
881
|
+
</glide-core-dropdown>`);
|
882
|
+
component?.shadowRoot
|
883
|
+
?.querySelector('[data-test="select-all"]')
|
884
|
+
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
885
|
+
component.focus();
|
886
|
+
await sendKeys({ press: 'Enter' });
|
887
|
+
const options = component.querySelectorAll('glide-core-dropdown-option');
|
888
|
+
expect(options[0].selected).to.be.false;
|
889
|
+
expect(options[1].selected).to.be.false;
|
890
|
+
});
|
704
891
|
it('shows Select All', async () => {
|
705
|
-
const component = await fixture(html `<glide-core-dropdown
|
892
|
+
const component = await fixture(html `<glide-core-dropdown
|
893
|
+
label="Label"
|
894
|
+
placeholder="Placeholder"
|
895
|
+
open
|
896
|
+
multiple
|
897
|
+
>
|
706
898
|
<glide-core-dropdown-option
|
707
899
|
label="One"
|
708
900
|
value="one"
|
@@ -714,6 +906,8 @@ it('shows Select All', async () => {
|
|
714
906
|
value="two"
|
715
907
|
></glide-core-dropdown-option>
|
716
908
|
</glide-core-dropdown>`);
|
909
|
+
// Wait for it to open.
|
910
|
+
await aTimeout(0);
|
717
911
|
component.selectAll = true;
|
718
912
|
await elementUpdated(component);
|
719
913
|
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
@@ -786,6 +980,7 @@ it('sets Select All as indeterminate when not all options are selected', async (
|
|
786
980
|
</glide-core-dropdown>`);
|
787
981
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
788
982
|
options[0].click();
|
983
|
+
await elementUpdated(component);
|
789
984
|
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
790
985
|
expect(selectAll?.privateIndeterminate).to.be.true;
|
791
986
|
});
|
@@ -878,6 +1073,8 @@ it('does not select an option on Enter when the option is not focused', async ()
|
|
878
1073
|
value="two"
|
879
1074
|
></glide-core-dropdown-option>
|
880
1075
|
</glide-core-dropdown>`);
|
1076
|
+
// Wait for it to open.
|
1077
|
+
await aTimeout(0);
|
881
1078
|
const option = component.querySelector('glide-core-dropdown-option');
|
882
1079
|
option?.focus();
|
883
1080
|
await sendKeys({ down: 'Tab' });
|