@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
@@ -12,6 +12,7 @@ import { sendKeys } from '@web/test-runner-commands';
|
|
12
12
|
import { sendMouse } from '@web/test-runner-commands';
|
13
13
|
import GlideCoreDropdown from './dropdown.js';
|
14
14
|
import GlideCoreDropdownOption from './dropdown.option.js';
|
15
|
+
import GlideCoreTag from './tag.js';
|
15
16
|
let GlideCoreDropdownInAnotherComponent = class GlideCoreDropdownInAnotherComponent extends LitElement {
|
16
17
|
static { this.shadowRootOptions = {
|
17
18
|
...LitElement.shadowRootOptions,
|
@@ -24,11 +25,7 @@ let GlideCoreDropdownInAnotherComponent = class GlideCoreDropdownInAnotherCompon
|
|
24
25
|
multiple
|
25
26
|
open
|
26
27
|
>
|
27
|
-
<glide-core-dropdown-option
|
28
|
-
label="One"
|
29
|
-
value="one"
|
30
|
-
></glide-core-dropdown-option>
|
31
|
-
|
28
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
32
29
|
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
33
30
|
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
34
31
|
</glide-core-dropdown>`;
|
@@ -40,24 +37,18 @@ GlideCoreDropdownInAnotherComponent = __decorate([
|
|
40
37
|
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
41
38
|
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
42
39
|
GlideCoreDropdownInAnotherComponent.shadowRootOptions.mode = 'open';
|
40
|
+
GlideCoreTag.shadowRootOptions.mode = 'open';
|
43
41
|
it('opens on click', async () => {
|
44
42
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
45
|
-
<glide-core-dropdown-option
|
46
|
-
|
47
|
-
value="one"
|
48
|
-
></glide-core-dropdown-option>
|
49
|
-
|
50
|
-
<glide-core-dropdown-option
|
51
|
-
label="Two"
|
52
|
-
value="two"
|
53
|
-
></glide-core-dropdown-option>
|
43
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
44
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
54
45
|
</glide-core-dropdown>`);
|
55
46
|
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
56
47
|
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
57
48
|
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
58
49
|
// possible to a real click. See the comment in the handler for more information.
|
59
50
|
component.shadowRoot
|
60
|
-
?.querySelector('[data-test="button"]')
|
51
|
+
?.querySelector('[data-test="primary-button"]')
|
61
52
|
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
62
53
|
// Wait for it to open.
|
63
54
|
await aTimeout(0);
|
@@ -72,22 +63,15 @@ it('toggles open and closed when the button is clicked', async () => {
|
|
72
63
|
open
|
73
64
|
multiple
|
74
65
|
>
|
75
|
-
<glide-core-dropdown-option
|
76
|
-
|
77
|
-
value="one"
|
78
|
-
></glide-core-dropdown-option>
|
79
|
-
|
80
|
-
<glide-core-dropdown-option
|
81
|
-
label="Two"
|
82
|
-
value="two"
|
83
|
-
></glide-core-dropdown-option>
|
66
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
67
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
84
68
|
</glide-core-dropdown>`);
|
85
69
|
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
86
70
|
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
87
71
|
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
88
72
|
// possible to a real click. See the comment in the handler for more information.
|
89
73
|
component.shadowRoot
|
90
|
-
?.querySelector('[data-test="button"]')
|
74
|
+
?.querySelector('[data-test="primary-button"]')
|
91
75
|
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
92
76
|
await elementUpdated(component);
|
93
77
|
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
@@ -101,15 +85,8 @@ it('does not toggle open and closed when the button overflow text is clicked', a
|
|
101
85
|
open
|
102
86
|
multiple
|
103
87
|
>
|
104
|
-
<glide-core-dropdown-option
|
105
|
-
|
106
|
-
value="one"
|
107
|
-
></glide-core-dropdown-option>
|
108
|
-
|
109
|
-
<glide-core-dropdown-option
|
110
|
-
label="Two"
|
111
|
-
value="two"
|
112
|
-
></glide-core-dropdown-option>
|
88
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
89
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
113
90
|
</glide-core-dropdown>`);
|
114
91
|
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
115
92
|
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
@@ -131,15 +108,8 @@ it('selects options on click', async () => {
|
|
131
108
|
open
|
132
109
|
multiple
|
133
110
|
>
|
134
|
-
<glide-core-dropdown-option
|
135
|
-
|
136
|
-
value="one"
|
137
|
-
></glide-core-dropdown-option>
|
138
|
-
|
139
|
-
<glide-core-dropdown-option
|
140
|
-
label="Two"
|
141
|
-
value="two"
|
142
|
-
></glide-core-dropdown-option>
|
111
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
112
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
143
113
|
</glide-core-dropdown>`);
|
144
114
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
145
115
|
options[0]?.click();
|
@@ -158,15 +128,8 @@ it('selects options on Space', async () => {
|
|
158
128
|
multiple
|
159
129
|
open
|
160
130
|
>
|
161
|
-
<glide-core-dropdown-option
|
162
|
-
|
163
|
-
value="one"
|
164
|
-
></glide-core-dropdown-option>
|
165
|
-
|
166
|
-
<glide-core-dropdown-option
|
167
|
-
label="Two"
|
168
|
-
value="two"
|
169
|
-
></glide-core-dropdown-option>
|
131
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
132
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
170
133
|
</glide-core-dropdown>`);
|
171
134
|
// Wait for it to open.
|
172
135
|
await aTimeout(0);
|
@@ -190,15 +153,8 @@ it('selects options on Enter', async () => {
|
|
190
153
|
multiple
|
191
154
|
open
|
192
155
|
>
|
193
|
-
<glide-core-dropdown-option
|
194
|
-
|
195
|
-
value="one"
|
196
|
-
></glide-core-dropdown-option>
|
197
|
-
|
198
|
-
<glide-core-dropdown-option
|
199
|
-
label="Two"
|
200
|
-
value="two"
|
201
|
-
></glide-core-dropdown-option>
|
156
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
157
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
202
158
|
</glide-core-dropdown>`);
|
203
159
|
// Wait for it to open.
|
204
160
|
await aTimeout(0);
|
@@ -216,15 +172,8 @@ it('selects options on Enter', async () => {
|
|
216
172
|
});
|
217
173
|
it('activates Select All by default', async () => {
|
218
174
|
const component = await fixture(html `<glide-core-dropdown open multiple select-all>
|
219
|
-
<glide-core-dropdown-option
|
220
|
-
|
221
|
-
value="one"
|
222
|
-
></glide-core-dropdown-option>
|
223
|
-
|
224
|
-
<glide-core-dropdown-option
|
225
|
-
label="Two"
|
226
|
-
value="two"
|
227
|
-
></glide-core-dropdown-option>
|
175
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
176
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
228
177
|
</glide-core-dropdown>`);
|
229
178
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
230
179
|
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
@@ -234,15 +183,8 @@ it('activates Select All by default', async () => {
|
|
234
183
|
});
|
235
184
|
it('deactivates all other options on "mouseover"', async () => {
|
236
185
|
const component = await fixture(html `<glide-core-dropdown open multiple select-all>
|
237
|
-
<glide-core-dropdown-option
|
238
|
-
|
239
|
-
value="one"
|
240
|
-
></glide-core-dropdown-option>
|
241
|
-
|
242
|
-
<glide-core-dropdown-option
|
243
|
-
label="Two"
|
244
|
-
value="two"
|
245
|
-
></glide-core-dropdown-option>
|
186
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
187
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
246
188
|
</glide-core-dropdown>`);
|
247
189
|
const options = [
|
248
190
|
...component.querySelectorAll('glide-core-dropdown-option'),
|
@@ -279,14 +221,10 @@ it('remains open when an option is selected via Enter', async () => {
|
|
279
221
|
>
|
280
222
|
<glide-core-dropdown-option
|
281
223
|
label="One"
|
282
|
-
value="one"
|
283
224
|
selected
|
284
225
|
></glide-core-dropdown-option>
|
285
226
|
|
286
|
-
<glide-core-dropdown-option
|
287
|
-
label="Two"
|
288
|
-
value="two"
|
289
|
-
></glide-core-dropdown-option>
|
227
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
290
228
|
</glide-core-dropdown>`);
|
291
229
|
component.querySelector('glide-core-dropdown-option')?.focus();
|
292
230
|
await sendKeys({ press: 'Enter' });
|
@@ -301,14 +239,10 @@ it('remains open when an option is selected via Space', async () => {
|
|
301
239
|
>
|
302
240
|
<glide-core-dropdown-option
|
303
241
|
label="One"
|
304
|
-
value="one"
|
305
242
|
selected
|
306
243
|
></glide-core-dropdown-option>
|
307
244
|
|
308
|
-
<glide-core-dropdown-option
|
309
|
-
label="Two"
|
310
|
-
value="two"
|
311
|
-
></glide-core-dropdown-option>
|
245
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
312
246
|
</glide-core-dropdown>`);
|
313
247
|
const option = component.querySelector('glide-core-dropdown-option');
|
314
248
|
option?.focus();
|
@@ -317,15 +251,9 @@ it('remains open when an option is selected via Space', async () => {
|
|
317
251
|
});
|
318
252
|
it('activates Select All on "mouseover"', async () => {
|
319
253
|
const component = await fixture(html `<glide-core-dropdown open multiple select-all>
|
320
|
-
<glide-core-dropdown-option
|
321
|
-
label="One"
|
322
|
-
value="one"
|
323
|
-
></glide-core-dropdown-option>
|
254
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
324
255
|
|
325
|
-
<glide-core-dropdown-option
|
326
|
-
label="Two"
|
327
|
-
value="two"
|
328
|
-
></glide-core-dropdown-option>
|
256
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
329
257
|
</glide-core-dropdown>`);
|
330
258
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
331
259
|
options[0]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
@@ -343,15 +271,13 @@ it('does not activate the next option on ArrowDown when a tag is focused', async
|
|
343
271
|
>
|
344
272
|
<glide-core-dropdown-option
|
345
273
|
label="One"
|
346
|
-
value="one"
|
347
274
|
selected
|
348
275
|
></glide-core-dropdown-option>
|
349
276
|
|
350
|
-
<glide-core-dropdown-option
|
351
|
-
label="Two"
|
352
|
-
value="two"
|
353
|
-
></glide-core-dropdown-option>
|
277
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
354
278
|
</glide-core-dropdown>`);
|
279
|
+
// Wait for it to open.
|
280
|
+
await aTimeout(0);
|
355
281
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
356
282
|
component.shadowRoot
|
357
283
|
?.querySelector('[data-test="tag"]')
|
@@ -359,7 +285,7 @@ it('does not activate the next option on ArrowDown when a tag is focused', async
|
|
359
285
|
await sendKeys({ press: 'ArrowDown' });
|
360
286
|
expect(options[0]?.privateActive).to.be.true;
|
361
287
|
});
|
362
|
-
it('updates its tag when
|
288
|
+
it('updates its tag when `label` of a selected option is changed programmatically', async () => {
|
363
289
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
364
290
|
<glide-core-dropdown-option
|
365
291
|
label="One"
|
@@ -375,6 +301,22 @@ it('updates its tag when the `label` of a selected option is changed programmati
|
|
375
301
|
const tag = component.shadowRoot?.querySelector('[data-test="tag"]');
|
376
302
|
expect(tag?.label).to.equal('Three');
|
377
303
|
});
|
304
|
+
it('makes its tag editable when `editable` of a selected option is changed programmatically', async () => {
|
305
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
306
|
+
<glide-core-dropdown-option
|
307
|
+
label="One"
|
308
|
+
selected
|
309
|
+
></glide-core-dropdown-option>
|
310
|
+
|
311
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
312
|
+
</glide-core-dropdown>`);
|
313
|
+
const option = component.querySelector('glide-core-dropdown-option');
|
314
|
+
assert(option);
|
315
|
+
option.editable = true;
|
316
|
+
await elementUpdated(component);
|
317
|
+
const tag = component.shadowRoot?.querySelector('[data-test="tag"]');
|
318
|
+
expect(tag?.privateEditable).to.be.true;
|
319
|
+
});
|
378
320
|
it('selects and deselects options when `value` is changed programmatically', async () => {
|
379
321
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
380
322
|
<glide-core-dropdown-option
|
@@ -557,29 +499,41 @@ it('updates `value` when the `value` of a selected option is emptied programmati
|
|
557
499
|
option.value = '';
|
558
500
|
expect(component.value).to.deep.equal(['two']);
|
559
501
|
});
|
560
|
-
it('
|
561
|
-
const component = await fixture(html `<glide-core-dropdown
|
562
|
-
label="Label"
|
563
|
-
placeholder="Placeholder"
|
564
|
-
open
|
565
|
-
multiple
|
566
|
-
>
|
502
|
+
it('updates `value` a tag is removed', async () => {
|
503
|
+
const component = await fixture(html `<glide-core-dropdown open multiple>
|
567
504
|
<glide-core-dropdown-option
|
568
505
|
label="One"
|
569
506
|
value="one"
|
507
|
+
selected
|
570
508
|
></glide-core-dropdown-option>
|
571
509
|
|
572
510
|
<glide-core-dropdown-option
|
573
511
|
label="Two"
|
574
512
|
value="two"
|
513
|
+
selected
|
575
514
|
></glide-core-dropdown-option>
|
576
515
|
</glide-core-dropdown>`);
|
516
|
+
component.shadowRoot
|
517
|
+
?.querySelector('[data-test="tag"]')
|
518
|
+
?.click();
|
519
|
+
expect(component.value).to.deep.equal(['two']);
|
520
|
+
});
|
521
|
+
it('has no internal label when an option is newly selected', async () => {
|
522
|
+
const component = await fixture(html `<glide-core-dropdown
|
523
|
+
label="Label"
|
524
|
+
placeholder="Placeholder"
|
525
|
+
open
|
526
|
+
multiple
|
527
|
+
>
|
528
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
529
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
530
|
+
</glide-core-dropdown>`);
|
577
531
|
component
|
578
532
|
.querySelector('glide-core-dropdown-option:last-of-type')
|
579
533
|
?.click();
|
580
534
|
await elementUpdated(component);
|
581
535
|
const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
|
582
|
-
expect(label).to.not.
|
536
|
+
expect(label?.checkVisibility()).to.not.be.ok;
|
583
537
|
});
|
584
538
|
it('hides tags to prevent overflow', async () => {
|
585
539
|
const component = await fixture(html `<glide-core-dropdown
|
@@ -588,25 +542,10 @@ it('hides tags to prevent overflow', async () => {
|
|
588
542
|
multiple
|
589
543
|
style="display: block; max-width: 20rem;"
|
590
544
|
>
|
591
|
-
<glide-core-dropdown-option
|
592
|
-
|
593
|
-
|
594
|
-
></glide-core-dropdown-option>
|
595
|
-
|
596
|
-
<glide-core-dropdown-option
|
597
|
-
label="Two"
|
598
|
-
value="two"
|
599
|
-
></glide-core-dropdown-option>
|
600
|
-
|
601
|
-
<glide-core-dropdown-option
|
602
|
-
label="Three"
|
603
|
-
value="three"
|
604
|
-
></glide-core-dropdown-option>
|
605
|
-
|
606
|
-
<glide-core-dropdown-option
|
607
|
-
label="Four"
|
608
|
-
value="four"
|
609
|
-
></glide-core-dropdown-option>
|
545
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
546
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
547
|
+
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
548
|
+
<glide-core-dropdown-option label="Four"></glide-core-dropdown-option>
|
610
549
|
</glide-core-dropdown>`);
|
611
550
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
612
551
|
options[0].selected = true;
|
@@ -627,25 +566,10 @@ it('has overflow text when its tags are overflowing', async () => {
|
|
627
566
|
multiple
|
628
567
|
style="display: block; max-width: 20rem;"
|
629
568
|
>
|
630
|
-
<glide-core-dropdown-option
|
631
|
-
|
632
|
-
|
633
|
-
></glide-core-dropdown-option>
|
634
|
-
|
635
|
-
<glide-core-dropdown-option
|
636
|
-
label="Two"
|
637
|
-
value="two"
|
638
|
-
></glide-core-dropdown-option>
|
639
|
-
|
640
|
-
<glide-core-dropdown-option
|
641
|
-
label="Three"
|
642
|
-
value="three"
|
643
|
-
></glide-core-dropdown-option>
|
644
|
-
|
645
|
-
<glide-core-dropdown-option
|
646
|
-
label="Four"
|
647
|
-
value="four"
|
648
|
-
></glide-core-dropdown-option>
|
569
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
570
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
571
|
+
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
572
|
+
<glide-core-dropdown-option label="Four"></glide-core-dropdown-option>
|
649
573
|
</glide-core-dropdown>`);
|
650
574
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
651
575
|
options[0].selected = true;
|
@@ -666,14 +590,10 @@ it('deselects the option when its tag is removed', async () => {
|
|
666
590
|
>
|
667
591
|
<glide-core-dropdown-option
|
668
592
|
label="One"
|
669
|
-
value="one"
|
670
593
|
selected
|
671
594
|
></glide-core-dropdown-option>
|
672
595
|
|
673
|
-
<glide-core-dropdown-option
|
674
|
-
label="Two"
|
675
|
-
value="two"
|
676
|
-
></glide-core-dropdown-option>
|
596
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
677
597
|
</glide-core-dropdown>`);
|
678
598
|
component.shadowRoot
|
679
599
|
?.querySelector('[data-test="tag"]')
|
@@ -685,13 +605,11 @@ it('deselects all but the last selected option when `multiple` is changed to `fa
|
|
685
605
|
const component = await fixture(html `<glide-core-dropdown open multiple>
|
686
606
|
<glide-core-dropdown-option
|
687
607
|
label="One"
|
688
|
-
value="one"
|
689
608
|
selected
|
690
609
|
></glide-core-dropdown-option>
|
691
610
|
|
692
611
|
<glide-core-dropdown-option
|
693
612
|
label="Two"
|
694
|
-
value="two"
|
695
613
|
selected
|
696
614
|
></glide-core-dropdown-option>
|
697
615
|
</glide-core-dropdown>`);
|
@@ -707,15 +625,8 @@ it('selects all options when none are selected and Select All is selected via cl
|
|
707
625
|
multiple
|
708
626
|
select-all
|
709
627
|
>
|
710
|
-
<glide-core-dropdown-option
|
711
|
-
|
712
|
-
value="one"
|
713
|
-
></glide-core-dropdown-option>
|
714
|
-
|
715
|
-
<glide-core-dropdown-option
|
716
|
-
label="Two"
|
717
|
-
value="two"
|
718
|
-
></glide-core-dropdown-option>
|
628
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
629
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
719
630
|
</glide-core-dropdown>`);
|
720
631
|
component.shadowRoot
|
721
632
|
?.querySelector('[data-test="select-all"]')
|
@@ -733,14 +644,10 @@ it('selects all options when some are selected and Select All is selected via cl
|
|
733
644
|
>
|
734
645
|
<glide-core-dropdown-option
|
735
646
|
label="One"
|
736
|
-
value="one"
|
737
647
|
selected
|
738
648
|
></glide-core-dropdown-option>
|
739
649
|
|
740
|
-
<glide-core-dropdown-option
|
741
|
-
label="Two"
|
742
|
-
value="two"
|
743
|
-
></glide-core-dropdown-option>
|
650
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
744
651
|
</glide-core-dropdown>`);
|
745
652
|
component.shadowRoot
|
746
653
|
?.querySelector('[data-test="select-all"]')
|
@@ -758,13 +665,11 @@ it('deselects all options when all are selected and Select All is selected via c
|
|
758
665
|
>
|
759
666
|
<glide-core-dropdown-option
|
760
667
|
label="One"
|
761
|
-
value="one"
|
762
668
|
selected
|
763
669
|
></glide-core-dropdown-option>
|
764
670
|
|
765
671
|
<glide-core-dropdown-option
|
766
672
|
label="Two"
|
767
|
-
value="two"
|
768
673
|
selected
|
769
674
|
></glide-core-dropdown-option>
|
770
675
|
</glide-core-dropdown>`);
|
@@ -783,15 +688,8 @@ it('selects all options when none are selected and Select All is selected via Sp
|
|
783
688
|
open
|
784
689
|
select-all
|
785
690
|
>
|
786
|
-
<glide-core-dropdown-option
|
787
|
-
|
788
|
-
value="one"
|
789
|
-
></glide-core-dropdown-option>
|
790
|
-
|
791
|
-
<glide-core-dropdown-option
|
792
|
-
label="Two"
|
793
|
-
value="two"
|
794
|
-
></glide-core-dropdown-option>
|
691
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
692
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
795
693
|
</glide-core-dropdown>`);
|
796
694
|
component?.shadowRoot
|
797
695
|
?.querySelector('[data-test="select-all"]')
|
@@ -812,14 +710,10 @@ it('selects all options when some are selected and Select All is selected via Sp
|
|
812
710
|
>
|
813
711
|
<glide-core-dropdown-option
|
814
712
|
label="One"
|
815
|
-
value="one"
|
816
713
|
selected
|
817
714
|
></glide-core-dropdown-option>
|
818
715
|
|
819
|
-
<glide-core-dropdown-option
|
820
|
-
label="Two"
|
821
|
-
value="two"
|
822
|
-
></glide-core-dropdown-option>
|
716
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
823
717
|
</glide-core-dropdown>`);
|
824
718
|
component?.shadowRoot
|
825
719
|
?.querySelector('[data-test="select-all"]')
|
@@ -840,13 +734,11 @@ it('deselects all options when all are selected and Select All is selected via S
|
|
840
734
|
>
|
841
735
|
<glide-core-dropdown-option
|
842
736
|
label="One"
|
843
|
-
value="one"
|
844
737
|
selected
|
845
738
|
></glide-core-dropdown-option>
|
846
739
|
|
847
740
|
<glide-core-dropdown-option
|
848
741
|
label="Two"
|
849
|
-
value="two"
|
850
742
|
selected
|
851
743
|
></glide-core-dropdown-option>
|
852
744
|
</glide-core-dropdown>`);
|
@@ -867,15 +759,8 @@ it('selects all options when none are selected and Select All is selected via En
|
|
867
759
|
open
|
868
760
|
select-all
|
869
761
|
>
|
870
|
-
<glide-core-dropdown-option
|
871
|
-
|
872
|
-
value="one"
|
873
|
-
></glide-core-dropdown-option>
|
874
|
-
|
875
|
-
<glide-core-dropdown-option
|
876
|
-
label="Two"
|
877
|
-
value="two"
|
878
|
-
></glide-core-dropdown-option>
|
762
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
763
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
879
764
|
</glide-core-dropdown>`);
|
880
765
|
component?.shadowRoot
|
881
766
|
?.querySelector('[data-test="select-all"]')
|
@@ -896,14 +781,10 @@ it('selects all options when some are selected and Select All is selected via En
|
|
896
781
|
>
|
897
782
|
<glide-core-dropdown-option
|
898
783
|
label="One"
|
899
|
-
value="one"
|
900
784
|
selected
|
901
785
|
></glide-core-dropdown-option>
|
902
786
|
|
903
|
-
<glide-core-dropdown-option
|
904
|
-
label="Two"
|
905
|
-
value="two"
|
906
|
-
></glide-core-dropdown-option>
|
787
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
907
788
|
</glide-core-dropdown>`);
|
908
789
|
component?.shadowRoot
|
909
790
|
?.querySelector('[data-test="select-all"]')
|
@@ -924,13 +805,11 @@ it('deselects all options when all are selected and Select All is selected via E
|
|
924
805
|
>
|
925
806
|
<glide-core-dropdown-option
|
926
807
|
label="One"
|
927
|
-
value="one"
|
928
808
|
selected
|
929
809
|
></glide-core-dropdown-option>
|
930
810
|
|
931
811
|
<glide-core-dropdown-option
|
932
812
|
label="Two"
|
933
|
-
value="two"
|
934
813
|
selected
|
935
814
|
></glide-core-dropdown-option>
|
936
815
|
</glide-core-dropdown>`);
|
@@ -952,14 +831,10 @@ it('shows Select All', async () => {
|
|
952
831
|
>
|
953
832
|
<glide-core-dropdown-option
|
954
833
|
label="One"
|
955
|
-
value="one"
|
956
834
|
selected
|
957
835
|
></glide-core-dropdown-option>
|
958
836
|
|
959
|
-
<glide-core-dropdown-option
|
960
|
-
label="Two"
|
961
|
-
value="two"
|
962
|
-
></glide-core-dropdown-option>
|
837
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
963
838
|
</glide-core-dropdown>`);
|
964
839
|
// Wait for it to open.
|
965
840
|
await aTimeout(0);
|
@@ -975,15 +850,8 @@ it('sets Select All as selected when all options are selected', async () => {
|
|
975
850
|
multiple
|
976
851
|
select-all
|
977
852
|
>
|
978
|
-
<glide-core-dropdown-option
|
979
|
-
|
980
|
-
value="one"
|
981
|
-
></glide-core-dropdown-option>
|
982
|
-
|
983
|
-
<glide-core-dropdown-option
|
984
|
-
label="Two"
|
985
|
-
value="two"
|
986
|
-
></glide-core-dropdown-option>
|
853
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
854
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
987
855
|
</glide-core-dropdown>`);
|
988
856
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
989
857
|
options[0].click();
|
@@ -998,15 +866,8 @@ it('sets Select All as deselected when no options are selected', async () => {
|
|
998
866
|
multiple
|
999
867
|
select-all
|
1000
868
|
>
|
1001
|
-
<glide-core-dropdown-option
|
1002
|
-
|
1003
|
-
value="one"
|
1004
|
-
></glide-core-dropdown-option>
|
1005
|
-
|
1006
|
-
<glide-core-dropdown-option
|
1007
|
-
label="Two"
|
1008
|
-
value="two"
|
1009
|
-
></glide-core-dropdown-option>
|
869
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
870
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1010
871
|
</glide-core-dropdown>`);
|
1011
872
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
1012
873
|
options[0].click();
|
@@ -1023,15 +884,8 @@ it('sets Select All as indeterminate when not all options are selected', async (
|
|
1023
884
|
multiple
|
1024
885
|
select-all
|
1025
886
|
>
|
1026
|
-
<glide-core-dropdown-option
|
1027
|
-
|
1028
|
-
value="one"
|
1029
|
-
></glide-core-dropdown-option>
|
1030
|
-
|
1031
|
-
<glide-core-dropdown-option
|
1032
|
-
label="Two"
|
1033
|
-
value="two"
|
1034
|
-
></glide-core-dropdown-option>
|
887
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
888
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1035
889
|
</glide-core-dropdown>`);
|
1036
890
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
1037
891
|
options[0].click();
|
@@ -1046,15 +900,8 @@ it('does not set Select All as indeterminate when no options are selected', asyn
|
|
1046
900
|
multiple
|
1047
901
|
select-all
|
1048
902
|
>
|
1049
|
-
<glide-core-dropdown-option
|
1050
|
-
|
1051
|
-
value="one"
|
1052
|
-
></glide-core-dropdown-option>
|
1053
|
-
|
1054
|
-
<glide-core-dropdown-option
|
1055
|
-
label="Two"
|
1056
|
-
value="two"
|
1057
|
-
></glide-core-dropdown-option>
|
903
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
904
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1058
905
|
</glide-core-dropdown>`);
|
1059
906
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
1060
907
|
options[0].click();
|
@@ -1069,15 +916,8 @@ it('does not set Select All as indeterminate when all options are selected', asy
|
|
1069
916
|
multiple
|
1070
917
|
select-all
|
1071
918
|
>
|
1072
|
-
<glide-core-dropdown-option
|
1073
|
-
|
1074
|
-
value="one"
|
1075
|
-
></glide-core-dropdown-option>
|
1076
|
-
|
1077
|
-
<glide-core-dropdown-option
|
1078
|
-
label="Two"
|
1079
|
-
value="two"
|
1080
|
-
></glide-core-dropdown-option>
|
919
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
920
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1081
921
|
</glide-core-dropdown>`);
|
1082
922
|
const options = component.querySelectorAll('glide-core-dropdown-option');
|
1083
923
|
options[0].click();
|
@@ -1089,14 +929,10 @@ it('closes when a tag is clicked', async () => {
|
|
1089
929
|
const component = await fixture(html `<glide-core-dropdown open multiple>
|
1090
930
|
<glide-core-dropdown-option
|
1091
931
|
label="One"
|
1092
|
-
value="one"
|
1093
932
|
selected
|
1094
933
|
></glide-core-dropdown-option>
|
1095
934
|
|
1096
|
-
<glide-core-dropdown-option
|
1097
|
-
label="Two"
|
1098
|
-
value="two"
|
1099
|
-
></glide-core-dropdown-option>
|
935
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1100
936
|
</glide-core-dropdown>`);
|
1101
937
|
const tag = component.shadowRoot?.querySelector('[data-test="tag"]');
|
1102
938
|
assert(tag);
|
@@ -1111,39 +947,76 @@ it('closes when a tag is clicked', async () => {
|
|
1111
947
|
await elementUpdated(component);
|
1112
948
|
expect(component.open).to.be.false;
|
1113
949
|
});
|
1114
|
-
it('
|
1115
|
-
await fixture(html `<glide-core-dropdown
|
1116
|
-
label="Label"
|
1117
|
-
placeholder="Placeholder"
|
1118
|
-
disabled
|
1119
|
-
multiple
|
1120
|
-
>
|
950
|
+
it('closes on edit via click', async () => {
|
951
|
+
const component = await fixture(html `<glide-core-dropdown open multiple>
|
1121
952
|
<glide-core-dropdown-option
|
1122
953
|
label="One"
|
1123
|
-
|
954
|
+
editable
|
955
|
+
selected
|
1124
956
|
></glide-core-dropdown-option>
|
1125
957
|
|
1126
|
-
<glide-core-dropdown-option
|
1127
|
-
label="Two"
|
1128
|
-
value="two"
|
1129
|
-
></glide-core-dropdown-option>
|
958
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1130
959
|
</glide-core-dropdown>`);
|
1131
|
-
|
1132
|
-
|
960
|
+
component.shadowRoot
|
961
|
+
?.querySelector('glide-core-tag')
|
962
|
+
?.shadowRoot?.querySelector('[data-test="edit-button"]')
|
963
|
+
?.click();
|
964
|
+
await elementUpdated(component);
|
965
|
+
expect(component.open).to.be.false;
|
1133
966
|
});
|
1134
|
-
it('
|
1135
|
-
const component = await fixture(html `<glide-core-dropdown
|
967
|
+
it('closes on edit via Enter', async () => {
|
968
|
+
const component = await fixture(html `<glide-core-dropdown open multiple>
|
1136
969
|
<glide-core-dropdown-option
|
1137
970
|
label="One"
|
1138
|
-
|
971
|
+
editable
|
972
|
+
selected
|
1139
973
|
></glide-core-dropdown-option>
|
1140
974
|
|
975
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
976
|
+
</glide-core-dropdown>`);
|
977
|
+
component.shadowRoot
|
978
|
+
?.querySelector('glide-core-tag')
|
979
|
+
?.shadowRoot?.querySelector('[data-test="edit-button"]')
|
980
|
+
?.focus();
|
981
|
+
await sendKeys({ press: 'Enter' });
|
982
|
+
expect(component.open).to.be.false;
|
983
|
+
});
|
984
|
+
it('closes on edit via Space', async () => {
|
985
|
+
const component = await fixture(html `<glide-core-dropdown open multiple>
|
1141
986
|
<glide-core-dropdown-option
|
1142
|
-
label="
|
1143
|
-
|
987
|
+
label="One"
|
988
|
+
editable
|
989
|
+
selected
|
1144
990
|
></glide-core-dropdown-option>
|
991
|
+
|
992
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
993
|
+
</glide-core-dropdown>`);
|
994
|
+
component.shadowRoot
|
995
|
+
?.querySelector('glide-core-tag')
|
996
|
+
?.shadowRoot?.querySelector('[data-test="edit-button"]')
|
997
|
+
?.focus();
|
998
|
+
await sendKeys({ press: ' ' });
|
999
|
+
expect(component.open).to.be.false;
|
1000
|
+
});
|
1001
|
+
it('cannot be tabbed to when `disabled`', async () => {
|
1002
|
+
await fixture(html `<glide-core-dropdown
|
1003
|
+
label="Label"
|
1004
|
+
placeholder="Placeholder"
|
1005
|
+
disabled
|
1006
|
+
multiple
|
1007
|
+
>
|
1008
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
1009
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1010
|
+
</glide-core-dropdown>`);
|
1011
|
+
await sendKeys({ press: 'Tab' });
|
1012
|
+
expect(document.activeElement).to.equal(document.body);
|
1013
|
+
});
|
1014
|
+
it('clicks the primary button when `click()` is called', async () => {
|
1015
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
1016
|
+
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
1017
|
+
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1145
1018
|
</glide-core-dropdown>`);
|
1146
|
-
const button = component.shadowRoot?.querySelector('[data-test="button"]');
|
1019
|
+
const button = component.shadowRoot?.querySelector('[data-test="primary-button"]');
|
1147
1020
|
assert(button);
|
1148
1021
|
setTimeout(() => {
|
1149
1022
|
component.click();
|