@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.
Files changed (61) hide show
  1. package/dist/checkbox-group.styles.js +1 -1
  2. package/dist/dropdown.d.ts +5 -1
  3. package/dist/dropdown.js +126 -58
  4. package/dist/dropdown.option.d.ts +3 -0
  5. package/dist/dropdown.option.js +1 -1
  6. package/dist/dropdown.option.styles.js +81 -16
  7. package/dist/dropdown.option.test.basics.js +4 -33
  8. package/dist/dropdown.option.test.basics.multiple.js +9 -0
  9. package/dist/dropdown.option.test.basics.single.js +8 -0
  10. package/dist/dropdown.option.test.interactions.multiple.js +12 -0
  11. package/dist/dropdown.option.test.interactions.single.js +11 -0
  12. package/dist/dropdown.styles.js +127 -29
  13. package/dist/dropdown.test.basics.filterable.js +11 -54
  14. package/dist/dropdown.test.basics.js +24 -244
  15. package/dist/dropdown.test.basics.multiple.js +13 -60
  16. package/dist/dropdown.test.basics.single.js +2 -8
  17. package/dist/dropdown.test.events.filterable.js +12 -54
  18. package/dist/dropdown.test.events.js +139 -46
  19. package/dist/dropdown.test.events.multiple.js +17 -87
  20. package/dist/dropdown.test.events.single.js +99 -60
  21. package/dist/dropdown.test.focus.filterable.js +13 -60
  22. package/dist/dropdown.test.focus.js +64 -11
  23. package/dist/dropdown.test.focus.multiple.js +36 -46
  24. package/dist/dropdown.test.focus.single.js +28 -23
  25. package/dist/dropdown.test.form.js +22 -0
  26. package/dist/dropdown.test.interactions.filterable.js +86 -72
  27. package/dist/dropdown.test.interactions.js +361 -207
  28. package/dist/dropdown.test.interactions.multiple.js +152 -279
  29. package/dist/dropdown.test.interactions.single.js +62 -98
  30. package/dist/dropdown.test.validity.js +12 -49
  31. package/dist/icons/pencil.d.ts +2 -0
  32. package/dist/icons/pencil.js +1 -0
  33. package/dist/label.js +1 -1
  34. package/dist/label.styles.js +7 -3
  35. package/dist/library/localize.d.ts +2 -0
  36. package/dist/menu.js +1 -1
  37. package/dist/menu.options.js +1 -1
  38. package/dist/menu.options.test.events.d.ts +1 -0
  39. package/dist/menu.options.test.events.js +19 -0
  40. package/dist/menu.test.interactions.d.ts +1 -0
  41. package/dist/menu.test.interactions.js +38 -0
  42. package/dist/radio-group.styles.js +1 -1
  43. package/dist/tab.group.d.ts +8 -1
  44. package/dist/tab.group.js +1 -1
  45. package/dist/tab.group.styles.js +4 -0
  46. package/dist/tab.group.test.basics.js +77 -1
  47. package/dist/tab.panel.js +1 -1
  48. package/dist/tab.panel.styles.js +15 -0
  49. package/dist/tag.d.ts +2 -0
  50. package/dist/tag.js +1 -1
  51. package/dist/tag.styles.js +46 -5
  52. package/dist/tag.test.basics.js +1 -1
  53. package/dist/tag.test.events.js +76 -3
  54. package/dist/tag.test.focus.js +1 -1
  55. package/dist/textarea.styles.js +1 -1
  56. package/dist/translations/en.js +1 -1
  57. package/dist/translations/fr.d.ts +1 -1
  58. package/dist/translations/fr.js +1 -1
  59. package/dist/translations/ja.d.ts +1 -1
  60. package/dist/translations/ja.js +1 -1
  61. 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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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 the `label` of a selected option is changed programmatically', async () => {
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('has no internal label when an option is newly selected', async () => {
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.exist;
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
- label="One"
593
- value="one"
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
- label="One"
632
- value="one"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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
- label="One"
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('cannot be tabbed to when `disabled`', async () => {
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
- value="one"
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
- await sendKeys({ press: 'Tab' });
1132
- expect(document.activeElement).to.equal(document.body);
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('clicks the button when `click()` is called', async () => {
1135
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
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
- value="one"
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="Two"
1143
- value="two"
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();