@spectrum-web-components/picker 0.12.1-devmode2.0 → 0.13.1
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/package.json +13 -13
- package/sp-picker.dev.js +1 -0
- package/sp-picker.dev.js.map +1 -1
- package/sp-picker.js +1 -2
- package/sp-picker.js.map +2 -2
- package/src/Picker.dev.js +40 -15
- package/src/Picker.dev.js.map +2 -2
- package/src/Picker.js +17 -442
- package/src/Picker.js.map +2 -2
- package/src/index.dev.js +1 -0
- package/src/index.dev.js.map +1 -1
- package/src/index.js +1 -1
- package/src/index.js.map +1 -1
- package/src/picker.css.dev.js +1 -0
- package/src/picker.css.dev.js.map +1 -1
- package/src/picker.css.js +2 -4
- package/src/picker.css.js.map +2 -2
- package/src/spectrum-picker.css.dev.js +1 -0
- package/src/spectrum-picker.css.dev.js.map +1 -1
- package/src/spectrum-picker.css.js +2 -4
- package/src/spectrum-picker.css.js.map +2 -2
- package/stories/picker-sizes.stories.js +1 -0
- package/stories/picker-sizes.stories.js.map +2 -2
- package/stories/picker.stories.js +5 -2
- package/stories/picker.stories.js.map +1 -1
- package/stories/states.js +1 -0
- package/stories/states.js.map +1 -1
- package/sync/index.dev.js +1 -0
- package/sync/index.dev.js.map +1 -1
- package/sync/index.js +1 -7
- package/sync/index.js.map +2 -2
- package/sync/sp-picker.dev.js +1 -0
- package/sync/sp-picker.dev.js.map +1 -1
- package/sync/sp-picker.js +1 -2
- package/sync/sp-picker.js.map +1 -1
- package/test/benchmark/basic-test.js +10 -4
- package/test/benchmark/basic-test.js.map +1 -1
- package/test/index.js +206 -69
- package/test/index.js.map +2 -2
- package/test/picker-reparenting.test.js +1 -0
- package/test/picker-reparenting.test.js.map +1 -1
- package/test/picker-responsive.test.js +5 -2
- package/test/picker-responsive.test.js.map +1 -1
- package/test/picker-sizes.test-vrt.js +1 -0
- package/test/picker-sizes.test-vrt.js.map +1 -1
- package/test/picker-sync.test.js +1 -0
- package/test/picker-sync.test.js.map +1 -1
- package/test/picker.test-vrt.js +1 -0
- package/test/picker.test-vrt.js.map +1 -1
- package/test/picker.test.js +1 -0
- package/test/picker.test.js.map +1 -1
package/test/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
import {
|
|
2
3
|
elementUpdated,
|
|
3
4
|
expect,
|
|
@@ -31,7 +32,8 @@ const isMenuActiveElement = function() {
|
|
|
31
32
|
export function runPickerTests() {
|
|
32
33
|
let el;
|
|
33
34
|
const pickerFixture = async () => {
|
|
34
|
-
const test = await fixture(
|
|
35
|
+
const test = await fixture(
|
|
36
|
+
html`
|
|
35
37
|
<div>
|
|
36
38
|
<sp-field-label for="picker">
|
|
37
39
|
Where do you live?
|
|
@@ -51,7 +53,8 @@ export function runPickerTests() {
|
|
|
51
53
|
<sp-menu-item disabled>Make Work Path</sp-menu-item>
|
|
52
54
|
</sp-picker>
|
|
53
55
|
</div>
|
|
54
|
-
`
|
|
56
|
+
`
|
|
57
|
+
);
|
|
55
58
|
return test.querySelector("sp-picker");
|
|
56
59
|
};
|
|
57
60
|
describe("standard", () => {
|
|
@@ -74,7 +77,9 @@ export function runPickerTests() {
|
|
|
74
77
|
el.open = true;
|
|
75
78
|
await opened;
|
|
76
79
|
expect(el.open).to.be.true;
|
|
77
|
-
const accessibleCloseButton = document.querySelector(
|
|
80
|
+
const accessibleCloseButton = document.querySelector(
|
|
81
|
+
".visually-hidden button"
|
|
82
|
+
);
|
|
78
83
|
const closed = oneEvent(el, "sp-closed");
|
|
79
84
|
accessibleCloseButton.click();
|
|
80
85
|
await closed;
|
|
@@ -86,7 +91,9 @@ export function runPickerTests() {
|
|
|
86
91
|
await elementUpdated(option2);
|
|
87
92
|
await elementUpdated(el);
|
|
88
93
|
expect(el.value).to.equal("option-2");
|
|
89
|
-
expect((el.button.textContent || "").trim()).to.equal(
|
|
94
|
+
expect((el.button.textContent || "").trim()).to.equal(
|
|
95
|
+
"Select Inverse"
|
|
96
|
+
);
|
|
90
97
|
let itemUpdated = oneEvent(el, "sp-menu-item-added-or-updated");
|
|
91
98
|
const newLabel1 = "Invert Selection";
|
|
92
99
|
option2.innerHTML = newLabel1;
|
|
@@ -107,22 +114,31 @@ export function runPickerTests() {
|
|
|
107
114
|
el.value = "option-2";
|
|
108
115
|
await elementUpdated(el);
|
|
109
116
|
expect(el.value).to.equal("option-2");
|
|
110
|
-
expect((el.button.textContent || "").trim()).to.equal(
|
|
117
|
+
expect((el.button.textContent || "").trim()).to.equal(
|
|
118
|
+
"Select Inverse"
|
|
119
|
+
);
|
|
111
120
|
const opened = oneEvent(el, "sp-opened");
|
|
112
121
|
el.open = true;
|
|
113
122
|
await opened;
|
|
114
|
-
const itemUpdated = oneEvent(
|
|
123
|
+
const itemUpdated = oneEvent(
|
|
124
|
+
option2,
|
|
125
|
+
"sp-menu-item-added-or-updated"
|
|
126
|
+
);
|
|
115
127
|
option2.innerHTML = "Invert Selection";
|
|
116
128
|
await itemUpdated;
|
|
117
129
|
await elementUpdated(el);
|
|
118
130
|
expect(el.value).to.equal("option-2");
|
|
119
|
-
expect((el.button.textContent || "").trim()).to.equal(
|
|
131
|
+
expect((el.button.textContent || "").trim()).to.equal(
|
|
132
|
+
"Invert Selection"
|
|
133
|
+
);
|
|
120
134
|
});
|
|
121
135
|
it("unsets value when children removed", async () => {
|
|
122
136
|
el.value = "option-2";
|
|
123
137
|
await elementUpdated(el);
|
|
124
138
|
expect(el.value).to.equal("option-2");
|
|
125
|
-
expect((el.button.textContent || "").trim()).to.equal(
|
|
139
|
+
expect((el.button.textContent || "").trim()).to.equal(
|
|
140
|
+
"Select Inverse"
|
|
141
|
+
);
|
|
126
142
|
const items = el.querySelectorAll("sp-menu-item");
|
|
127
143
|
const removals = [];
|
|
128
144
|
items.forEach((item) => {
|
|
@@ -175,11 +191,23 @@ export function runPickerTests() {
|
|
|
175
191
|
});
|
|
176
192
|
it('manages its "name" value in the accessibility tree', async () => {
|
|
177
193
|
let snapshot = await a11ySnapshot({});
|
|
178
|
-
expect(
|
|
194
|
+
expect(
|
|
195
|
+
findAccessibilityNode(
|
|
196
|
+
snapshot,
|
|
197
|
+
(node) => node.name === "Where do you live?"
|
|
198
|
+
),
|
|
199
|
+
"`name` is the label text"
|
|
200
|
+
).to.not.be.null;
|
|
179
201
|
el.value = "option-2";
|
|
180
202
|
await elementUpdated(el);
|
|
181
203
|
snapshot = await a11ySnapshot({});
|
|
182
|
-
expect(
|
|
204
|
+
expect(
|
|
205
|
+
findAccessibilityNode(
|
|
206
|
+
snapshot,
|
|
207
|
+
(node) => node.name === "Where do you live? Select Inverse"
|
|
208
|
+
),
|
|
209
|
+
"`name` is the label text plus the selected item text"
|
|
210
|
+
).to.not.be.null;
|
|
183
211
|
});
|
|
184
212
|
it("manages `aria-activedescendant`", async () => {
|
|
185
213
|
const firstItem = el.querySelector("sp-menu-item:nth-child(1)");
|
|
@@ -187,10 +215,14 @@ export function runPickerTests() {
|
|
|
187
215
|
const opened = oneEvent(el, "sp-opened");
|
|
188
216
|
el.open = true;
|
|
189
217
|
await opened;
|
|
190
|
-
expect(
|
|
218
|
+
expect(
|
|
219
|
+
el.optionsMenu.getAttribute("aria-activedescendant")
|
|
220
|
+
).to.equal(firstItem == null ? void 0 : firstItem.id);
|
|
191
221
|
await sendKeys({ press: "ArrowDown" });
|
|
192
222
|
await elementUpdated(el);
|
|
193
|
-
expect(
|
|
223
|
+
expect(
|
|
224
|
+
el.optionsMenu.getAttribute("aria-activedescendant")
|
|
225
|
+
).to.equal(secondItem == null ? void 0 : secondItem.id);
|
|
194
226
|
});
|
|
195
227
|
it("renders invalid accessibly", async () => {
|
|
196
228
|
el.invalid = true;
|
|
@@ -270,7 +302,9 @@ export function runPickerTests() {
|
|
|
270
302
|
});
|
|
271
303
|
it("selects", async () => {
|
|
272
304
|
var _a, _b;
|
|
273
|
-
const secondItem = el.querySelector(
|
|
305
|
+
const secondItem = el.querySelector(
|
|
306
|
+
"sp-menu-item:nth-of-type(2)"
|
|
307
|
+
);
|
|
274
308
|
const button = el.button;
|
|
275
309
|
const opened = oneEvent(el, "sp-opened");
|
|
276
310
|
button.click();
|
|
@@ -288,8 +322,12 @@ export function runPickerTests() {
|
|
|
288
322
|
});
|
|
289
323
|
it("re-selects", async () => {
|
|
290
324
|
var _a, _b, _c, _d;
|
|
291
|
-
const firstItem = el.querySelector(
|
|
292
|
-
|
|
325
|
+
const firstItem = el.querySelector(
|
|
326
|
+
"sp-menu-item:nth-of-type(1)"
|
|
327
|
+
);
|
|
328
|
+
const secondItem = el.querySelector(
|
|
329
|
+
"sp-menu-item:nth-of-type(2)"
|
|
330
|
+
);
|
|
293
331
|
const button = el.button;
|
|
294
332
|
const opened = oneEvent(el, "sp-opened");
|
|
295
333
|
button.click();
|
|
@@ -325,7 +363,9 @@ export function runPickerTests() {
|
|
|
325
363
|
const parent = el.parentElement;
|
|
326
364
|
parent.attachShadow({ mode: "open" });
|
|
327
365
|
parent.shadowRoot.append(el);
|
|
328
|
-
const secondItem = el.querySelector(
|
|
366
|
+
const secondItem = el.querySelector(
|
|
367
|
+
"sp-menu-item:nth-of-type(2)"
|
|
368
|
+
);
|
|
329
369
|
parent.addEventListener("change", () => changeSpy());
|
|
330
370
|
expect(el.value).to.equal("");
|
|
331
371
|
const opened = oneEvent(el, "sp-opened");
|
|
@@ -342,7 +382,9 @@ export function runPickerTests() {
|
|
|
342
382
|
it("can have selection prevented", async () => {
|
|
343
383
|
var _a;
|
|
344
384
|
const preventChangeSpy = spy();
|
|
345
|
-
const secondItem = el.querySelector(
|
|
385
|
+
const secondItem = el.querySelector(
|
|
386
|
+
"sp-menu-item:nth-of-type(2)"
|
|
387
|
+
);
|
|
346
388
|
const button = el.button;
|
|
347
389
|
let opened = oneEvent(el, "sp-opened");
|
|
348
390
|
button.click();
|
|
@@ -370,7 +412,9 @@ export function runPickerTests() {
|
|
|
370
412
|
const input = document.createElement("input");
|
|
371
413
|
document.body.append(input);
|
|
372
414
|
await elementUpdated(el);
|
|
373
|
-
const secondItem = el.querySelector(
|
|
415
|
+
const secondItem = el.querySelector(
|
|
416
|
+
"sp-menu-item:nth-of-type(2)"
|
|
417
|
+
);
|
|
374
418
|
const button = el.button;
|
|
375
419
|
const opened = oneEvent(el, "sp-opened");
|
|
376
420
|
button.click();
|
|
@@ -390,7 +434,10 @@ export function runPickerTests() {
|
|
|
390
434
|
expect(el.open).to.be.false;
|
|
391
435
|
expect(el.value, "value changed").to.equal("option-2");
|
|
392
436
|
expect(secondItem.selected, "selected changed").to.be.true;
|
|
393
|
-
await waitUntil(
|
|
437
|
+
await waitUntil(
|
|
438
|
+
() => document.activeElement === input,
|
|
439
|
+
"focus throw"
|
|
440
|
+
);
|
|
394
441
|
input.remove();
|
|
395
442
|
});
|
|
396
443
|
it("opens on ArrowUp", async () => {
|
|
@@ -404,21 +451,31 @@ export function runPickerTests() {
|
|
|
404
451
|
button.dispatchEvent(arrowUpEvent());
|
|
405
452
|
await elementUpdated(el);
|
|
406
453
|
expect(el.open, "open by ArrowUp").to.be.true;
|
|
407
|
-
await waitUntil(
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
454
|
+
await waitUntil(
|
|
455
|
+
() => document.querySelector("active-overlay") !== null,
|
|
456
|
+
"an active-overlay has been inserted on the page"
|
|
457
|
+
);
|
|
458
|
+
button.dispatchEvent(
|
|
459
|
+
new KeyboardEvent("keyup", {
|
|
460
|
+
bubbles: true,
|
|
461
|
+
composed: true,
|
|
462
|
+
cancelable: true,
|
|
463
|
+
key: "Escape",
|
|
464
|
+
code: "Escape"
|
|
465
|
+
})
|
|
466
|
+
);
|
|
415
467
|
await elementUpdated(el);
|
|
416
468
|
await waitUntil(() => el.open === false, "closed by Escape");
|
|
417
|
-
await waitUntil(
|
|
469
|
+
await waitUntil(
|
|
470
|
+
() => document.querySelector("active-overlay") === null,
|
|
471
|
+
"an active-overlay has been inserted on the page"
|
|
472
|
+
);
|
|
418
473
|
});
|
|
419
474
|
it("opens on ArrowDown", async () => {
|
|
420
475
|
var _a, _b;
|
|
421
|
-
const firstItem = el.querySelector(
|
|
476
|
+
const firstItem = el.querySelector(
|
|
477
|
+
"sp-menu-item:nth-of-type(1)"
|
|
478
|
+
);
|
|
422
479
|
const button = el.button;
|
|
423
480
|
el.focus();
|
|
424
481
|
await elementUpdated(el);
|
|
@@ -495,13 +552,19 @@ export function runPickerTests() {
|
|
|
495
552
|
el.open = true;
|
|
496
553
|
await opened;
|
|
497
554
|
await elementUpdated(el);
|
|
498
|
-
await waitUntil(
|
|
555
|
+
await waitUntil(
|
|
556
|
+
() => firstItem.focused,
|
|
557
|
+
"The first items should have become focused visually."
|
|
558
|
+
);
|
|
499
559
|
el.blur();
|
|
500
560
|
await elementUpdated(el);
|
|
501
561
|
expect(el.open).to.be.true;
|
|
502
562
|
el.focus();
|
|
503
563
|
await elementUpdated(el);
|
|
504
|
-
await waitUntil(
|
|
564
|
+
await waitUntil(
|
|
565
|
+
() => isMenuActiveElement(),
|
|
566
|
+
"first item refocused"
|
|
567
|
+
);
|
|
505
568
|
expect(el.open).to.be.true;
|
|
506
569
|
expect(isMenuActiveElement()).to.be.true;
|
|
507
570
|
await sendKeys({ press: "ArrowDown" });
|
|
@@ -514,7 +577,10 @@ export function runPickerTests() {
|
|
|
514
577
|
expect(el.open).to.be.true;
|
|
515
578
|
el.focus();
|
|
516
579
|
await elementUpdated(el);
|
|
517
|
-
await waitUntil(
|
|
580
|
+
await waitUntil(
|
|
581
|
+
() => isMenuActiveElement(),
|
|
582
|
+
"first item refocused"
|
|
583
|
+
);
|
|
518
584
|
expect(el.open).to.be.true;
|
|
519
585
|
expect(isMenuActiveElement()).to.be.true;
|
|
520
586
|
await sendKeys({ press: "Tab" });
|
|
@@ -557,7 +623,9 @@ export function runPickerTests() {
|
|
|
557
623
|
it("shift+tabs backwards through the element", async () => {
|
|
558
624
|
input2.focus();
|
|
559
625
|
await nextFrame();
|
|
560
|
-
expect(document.activeElement, "focuses input 2").to.equal(
|
|
626
|
+
expect(document.activeElement, "focuses input 2").to.equal(
|
|
627
|
+
input2
|
|
628
|
+
);
|
|
561
629
|
let focused = oneEvent(el, "focus");
|
|
562
630
|
await sendKeys({ press: "Shift+Tab" });
|
|
563
631
|
await focused;
|
|
@@ -567,7 +635,9 @@ export function runPickerTests() {
|
|
|
567
635
|
focused = oneEvent(input1, "focus");
|
|
568
636
|
await sendKeys({ press: "Shift+Tab" });
|
|
569
637
|
await focused;
|
|
570
|
-
expect(document.activeElement, "focuses input 1").to.equal(
|
|
638
|
+
expect(document.activeElement, "focuses input 1").to.equal(
|
|
639
|
+
input1
|
|
640
|
+
);
|
|
571
641
|
});
|
|
572
642
|
it('traps tab in the menu as a `type="modal"` overlay forward', async () => {
|
|
573
643
|
el.focus();
|
|
@@ -577,7 +647,10 @@ export function runPickerTests() {
|
|
|
577
647
|
await sendKeys({ press: "ArrowDown" });
|
|
578
648
|
await opened;
|
|
579
649
|
expect(el.open, "opened").to.be.true;
|
|
580
|
-
await waitUntil(
|
|
650
|
+
await waitUntil(
|
|
651
|
+
() => isMenuActiveElement(),
|
|
652
|
+
"first item focused"
|
|
653
|
+
);
|
|
581
654
|
const activeElement = document.activeElement;
|
|
582
655
|
const blured = oneEvent(activeElement, "blur");
|
|
583
656
|
await sendKeys({ press: "Tab" });
|
|
@@ -594,7 +667,10 @@ export function runPickerTests() {
|
|
|
594
667
|
await sendKeys({ press: "ArrowDown" });
|
|
595
668
|
await opened;
|
|
596
669
|
expect(el.open, "opened").to.be.true;
|
|
597
|
-
await waitUntil(
|
|
670
|
+
await waitUntil(
|
|
671
|
+
() => isMenuActiveElement(),
|
|
672
|
+
"first item focused"
|
|
673
|
+
);
|
|
598
674
|
const activeElement = document.activeElement;
|
|
599
675
|
const blured = oneEvent(activeElement, "blur");
|
|
600
676
|
await sendKeys({ press: "Shift+Tab" });
|
|
@@ -611,7 +687,10 @@ export function runPickerTests() {
|
|
|
611
687
|
await sendKeys({ press: "ArrowUp" });
|
|
612
688
|
await opened;
|
|
613
689
|
expect(el.open, "opened").to.be.true;
|
|
614
|
-
await waitUntil(
|
|
690
|
+
await waitUntil(
|
|
691
|
+
() => isMenuActiveElement(),
|
|
692
|
+
"first item focused"
|
|
693
|
+
);
|
|
615
694
|
const closed = oneEvent(el, "sp-closed");
|
|
616
695
|
el.open = false;
|
|
617
696
|
await closed;
|
|
@@ -631,7 +710,10 @@ export function runPickerTests() {
|
|
|
631
710
|
await sendKeys({ press: "ArrowUp" });
|
|
632
711
|
await opened;
|
|
633
712
|
expect(el.open, "opened").to.be.true;
|
|
634
|
-
await waitUntil(
|
|
713
|
+
await waitUntil(
|
|
714
|
+
() => isMenuActiveElement(),
|
|
715
|
+
"first item focused"
|
|
716
|
+
);
|
|
635
717
|
const closed = oneEvent(el, "sp-closed");
|
|
636
718
|
el.open = false;
|
|
637
719
|
await closed;
|
|
@@ -655,8 +737,12 @@ export function runPickerTests() {
|
|
|
655
737
|
it("scrolls selected into view on open", async () => {
|
|
656
738
|
await el.generatePopover();
|
|
657
739
|
el.popover.style.height = "40px";
|
|
658
|
-
const firstItem = el.querySelector(
|
|
659
|
-
|
|
740
|
+
const firstItem = el.querySelector(
|
|
741
|
+
"sp-menu-item:first-child"
|
|
742
|
+
);
|
|
743
|
+
const lastItem = el.querySelector(
|
|
744
|
+
"sp-menu-item:last-child"
|
|
745
|
+
);
|
|
660
746
|
lastItem.disabled = false;
|
|
661
747
|
el.value = lastItem.value;
|
|
662
748
|
await elementUpdated(el);
|
|
@@ -670,7 +756,9 @@ export function runPickerTests() {
|
|
|
670
756
|
};
|
|
671
757
|
expect(getParentOffset(lastItem)).to.be.lessThan(40);
|
|
672
758
|
expect(getParentOffset(firstItem)).to.be.lessThan(-1);
|
|
673
|
-
lastItem.dispatchEvent(
|
|
759
|
+
lastItem.dispatchEvent(
|
|
760
|
+
new FocusEvent("focusin", { bubbles: true })
|
|
761
|
+
);
|
|
674
762
|
lastItem.dispatchEvent(arrowDownEvent());
|
|
675
763
|
await elementUpdated(el);
|
|
676
764
|
await nextFrame();
|
|
@@ -680,7 +768,8 @@ export function runPickerTests() {
|
|
|
680
768
|
});
|
|
681
769
|
describe("grouped", async () => {
|
|
682
770
|
const groupedFixture = async () => {
|
|
683
|
-
return fixture(
|
|
771
|
+
return fixture(
|
|
772
|
+
html`
|
|
684
773
|
<sp-picker
|
|
685
774
|
quiet
|
|
686
775
|
label="I would like to use Spectrum Web Components"
|
|
@@ -702,7 +791,8 @@ export function runPickerTests() {
|
|
|
702
791
|
<sp-menu-item value="4">In the future</sp-menu-item>
|
|
703
792
|
</sp-menu-group>
|
|
704
793
|
</sp-picker>
|
|
705
|
-
`
|
|
794
|
+
`
|
|
795
|
+
);
|
|
706
796
|
};
|
|
707
797
|
beforeEach(async () => {
|
|
708
798
|
el = await groupedFixture();
|
|
@@ -715,7 +805,8 @@ export function runPickerTests() {
|
|
|
715
805
|
});
|
|
716
806
|
describe("slotted label", () => {
|
|
717
807
|
const pickerFixture2 = async () => {
|
|
718
|
-
const test = await fixture(
|
|
808
|
+
const test = await fixture(
|
|
809
|
+
html`
|
|
719
810
|
<div>
|
|
720
811
|
<sp-field-label for="picker-slotted">
|
|
721
812
|
Where do you live?
|
|
@@ -736,7 +827,8 @@ export function runPickerTests() {
|
|
|
736
827
|
<sp-menu-item disabled>Make Work Path</sp-menu-item>
|
|
737
828
|
</sp-picker>
|
|
738
829
|
</div>
|
|
739
|
-
`
|
|
830
|
+
`
|
|
831
|
+
);
|
|
740
832
|
return test.querySelector("sp-picker");
|
|
741
833
|
};
|
|
742
834
|
beforeEach(async () => {
|
|
@@ -756,7 +848,8 @@ export function runPickerTests() {
|
|
|
756
848
|
});
|
|
757
849
|
describe("deprecated", () => {
|
|
758
850
|
const pickerFixture2 = async () => {
|
|
759
|
-
const test = await fixture(
|
|
851
|
+
const test = await fixture(
|
|
852
|
+
html`
|
|
760
853
|
<div>
|
|
761
854
|
<sp-field-label for="picker-deprecated">
|
|
762
855
|
Where do you live?
|
|
@@ -780,7 +873,8 @@ export function runPickerTests() {
|
|
|
780
873
|
</sp-menu>
|
|
781
874
|
</sp-picker>
|
|
782
875
|
</div>
|
|
783
|
-
`
|
|
876
|
+
`
|
|
877
|
+
);
|
|
784
878
|
return test.querySelector("sp-picker");
|
|
785
879
|
};
|
|
786
880
|
describe("Dev mode", () => {
|
|
@@ -790,8 +884,14 @@ export function runPickerTests() {
|
|
|
790
884
|
await elementUpdated(el);
|
|
791
885
|
expect(consoleWarnStub.called).to.be.true;
|
|
792
886
|
const spyCall = consoleWarnStub.getCall(0);
|
|
793
|
-
expect(
|
|
794
|
-
|
|
887
|
+
expect(
|
|
888
|
+
spyCall.args.at(0).includes("<sp-menu>"),
|
|
889
|
+
"confirm <sp-menu>-centric message"
|
|
890
|
+
).to.be.true;
|
|
891
|
+
expect(
|
|
892
|
+
spyCall.args.at(-1),
|
|
893
|
+
"confirm `data` shape"
|
|
894
|
+
).to.deep.equal({
|
|
795
895
|
data: {
|
|
796
896
|
localName: "sp-picker",
|
|
797
897
|
type: "api",
|
|
@@ -829,7 +929,9 @@ export function runPickerTests() {
|
|
|
829
929
|
});
|
|
830
930
|
it("selects with deprecated syntax", async () => {
|
|
831
931
|
var _a, _b;
|
|
832
|
-
const secondItem = el.querySelector(
|
|
932
|
+
const secondItem = el.querySelector(
|
|
933
|
+
"sp-menu-item:nth-of-type(2)"
|
|
934
|
+
);
|
|
833
935
|
const opened = oneEvent(el, "sp-opened");
|
|
834
936
|
el.button.click();
|
|
835
937
|
await opened;
|
|
@@ -854,11 +956,23 @@ export function runPickerTests() {
|
|
|
854
956
|
const el2 = test.querySelector("sp-picker");
|
|
855
957
|
await elementUpdated(el2);
|
|
856
958
|
let snapshot = await a11ySnapshot({});
|
|
857
|
-
expect(
|
|
959
|
+
expect(
|
|
960
|
+
findAccessibilityNode(
|
|
961
|
+
snapshot,
|
|
962
|
+
(node) => node.name === "Choose an action type... Delete"
|
|
963
|
+
),
|
|
964
|
+
"`name` is the label text"
|
|
965
|
+
).to.not.be.null;
|
|
858
966
|
el2.value = "2";
|
|
859
967
|
await elementUpdated(el2);
|
|
860
968
|
snapshot = await a11ySnapshot({});
|
|
861
|
-
expect(
|
|
969
|
+
expect(
|
|
970
|
+
findAccessibilityNode(
|
|
971
|
+
snapshot,
|
|
972
|
+
(node) => node.name === "Choose an action type... Copy"
|
|
973
|
+
),
|
|
974
|
+
"`name` is the label text plus the selected item text"
|
|
975
|
+
).to.not.be.null;
|
|
862
976
|
});
|
|
863
977
|
it("toggles between pickers", async () => {
|
|
864
978
|
const el2 = await pickerFixture();
|
|
@@ -894,7 +1008,8 @@ export function runPickerTests() {
|
|
|
894
1008
|
});
|
|
895
1009
|
it("displays selected item text by default", async () => {
|
|
896
1010
|
var _a, _b, _c, _d;
|
|
897
|
-
const el2 = await fixture(
|
|
1011
|
+
const el2 = await fixture(
|
|
1012
|
+
html`
|
|
898
1013
|
<sp-picker
|
|
899
1014
|
value="inverse"
|
|
900
1015
|
label="Select a Country with a very long label, too long in fact"
|
|
@@ -907,31 +1022,48 @@ export function runPickerTests() {
|
|
|
907
1022
|
<sp-menu-item>Save Selection</sp-menu-item>
|
|
908
1023
|
<sp-menu-item disabled>Make Work Path</sp-menu-item>
|
|
909
1024
|
</sp-picker>
|
|
910
|
-
`
|
|
1025
|
+
`
|
|
1026
|
+
);
|
|
911
1027
|
await elementUpdated(el2);
|
|
912
|
-
await waitUntil(
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
1028
|
+
await waitUntil(
|
|
1029
|
+
() => {
|
|
1030
|
+
var _a2;
|
|
1031
|
+
return ((_a2 = el2.selectedItem) == null ? void 0 : _a2.itemText) === "Select Inverse";
|
|
1032
|
+
},
|
|
1033
|
+
`Selected Item Text: ${(_a = el2.selectedItem) == null ? void 0 : _a.itemText}`
|
|
1034
|
+
);
|
|
1035
|
+
const firstItem = el2.querySelector(
|
|
1036
|
+
"sp-menu-item:nth-of-type(1)"
|
|
1037
|
+
);
|
|
1038
|
+
const secondItem = el2.querySelector(
|
|
1039
|
+
"sp-menu-item:nth-of-type(2)"
|
|
1040
|
+
);
|
|
918
1041
|
expect(el2.value).to.equal("inverse");
|
|
919
1042
|
expect((_b = el2.selectedItem) == null ? void 0 : _b.itemText).to.equal("Select Inverse");
|
|
920
1043
|
el2.focus();
|
|
921
1044
|
await elementUpdated(el2);
|
|
922
|
-
expect(
|
|
1045
|
+
expect(
|
|
1046
|
+
el2 === document.activeElement,
|
|
1047
|
+
`activeElement is ${(_c = document.activeElement) == null ? void 0 : _c.localName}`
|
|
1048
|
+
).to.be.true;
|
|
923
1049
|
const opened = oneEvent(el2, "sp-opened");
|
|
924
1050
|
sendKeys({ press: "Enter" });
|
|
925
1051
|
await opened;
|
|
926
1052
|
await elementUpdated(el2.optionsMenu);
|
|
927
|
-
expect(
|
|
1053
|
+
expect(
|
|
1054
|
+
el2.optionsMenu === document.activeElement,
|
|
1055
|
+
`activeElement is ${(_d = document.activeElement) == null ? void 0 : _d.localName}`
|
|
1056
|
+
).to.be.true;
|
|
928
1057
|
expect(firstItem.focused, 'firstItem NOT "focused"').to.be.false;
|
|
929
1058
|
expect(secondItem.focused, 'secondItem "focused"').to.be.true;
|
|
930
|
-
expect(el2.optionsMenu.getAttribute("aria-activedescendant")).to.equal(
|
|
1059
|
+
expect(el2.optionsMenu.getAttribute("aria-activedescendant")).to.equal(
|
|
1060
|
+
secondItem.id
|
|
1061
|
+
);
|
|
931
1062
|
});
|
|
932
1063
|
it("resets value when item not available", async () => {
|
|
933
1064
|
var _a;
|
|
934
|
-
const el2 = await fixture(
|
|
1065
|
+
const el2 = await fixture(
|
|
1066
|
+
html`
|
|
935
1067
|
<sp-picker
|
|
936
1068
|
value="missing"
|
|
937
1069
|
label="Select a Country with a very long label, too long in fact"
|
|
@@ -944,7 +1076,8 @@ export function runPickerTests() {
|
|
|
944
1076
|
<sp-menu-item>Save Selection</sp-menu-item>
|
|
945
1077
|
<sp-menu-item disabled>Make Work Path</sp-menu-item>
|
|
946
1078
|
</sp-picker>
|
|
947
|
-
`
|
|
1079
|
+
`
|
|
1080
|
+
);
|
|
948
1081
|
await elementUpdated(el2);
|
|
949
1082
|
await waitUntil(() => el2.value === "");
|
|
950
1083
|
expect(el2.value).to.equal("");
|
|
@@ -953,7 +1086,8 @@ export function runPickerTests() {
|
|
|
953
1086
|
it("allows event listeners on child items", async () => {
|
|
954
1087
|
const mouseenterSpy = spy();
|
|
955
1088
|
const handleMouseenter = () => mouseenterSpy();
|
|
956
|
-
const el2 = await fixture(
|
|
1089
|
+
const el2 = await fixture(
|
|
1090
|
+
html`
|
|
957
1091
|
<sp-picker
|
|
958
1092
|
label="Select a Country with a very long label, too long in fact"
|
|
959
1093
|
>
|
|
@@ -964,7 +1098,8 @@ export function runPickerTests() {
|
|
|
964
1098
|
Deselect Text
|
|
965
1099
|
</sp-menu-item>
|
|
966
1100
|
</sp-picker>
|
|
967
|
-
`
|
|
1101
|
+
`
|
|
1102
|
+
);
|
|
968
1103
|
await elementUpdated(el2);
|
|
969
1104
|
const hoverEl = el2.querySelector("sp-menu-item");
|
|
970
1105
|
const opened = oneEvent(el2, "sp-opened");
|
|
@@ -987,7 +1122,8 @@ export function runPickerTests() {
|
|
|
987
1122
|
const closedSpy = spy();
|
|
988
1123
|
const handleOpenedSpy = (event) => openedSpy(event);
|
|
989
1124
|
const handleClosedSpy = (event) => closedSpy(event);
|
|
990
|
-
const el2 = await fixture(
|
|
1125
|
+
const el2 = await fixture(
|
|
1126
|
+
html`
|
|
991
1127
|
<sp-picker
|
|
992
1128
|
label="Select a Country with a very long label, too long in fact"
|
|
993
1129
|
@sp-opened=${handleOpenedSpy}
|
|
@@ -995,7 +1131,8 @@ export function runPickerTests() {
|
|
|
995
1131
|
>
|
|
996
1132
|
<sp-menu-item value="deselect">Deselect Text</sp-menu-item>
|
|
997
1133
|
</sp-picker>
|
|
998
|
-
`
|
|
1134
|
+
`
|
|
1135
|
+
);
|
|
999
1136
|
await elementUpdated(el2);
|
|
1000
1137
|
const opened = oneEvent(el2, "sp-opened");
|
|
1001
1138
|
el2.open = true;
|