@spectrum-web-components/picker 0.15.0 → 0.15.1-overlay.7
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 +5 -5
- package/src/Picker.d.ts +18 -30
- package/src/Picker.dev.js +118 -167
- package/src/Picker.dev.js.map +3 -3
- package/src/Picker.js +29 -16
- package/src/Picker.js.map +3 -3
- package/src/picker.css.dev.js +1 -1
- package/src/picker.css.dev.js.map +1 -1
- package/src/picker.css.js +1 -1
- package/src/picker.css.js.map +1 -1
- package/sync/index.d.ts +4 -1
- package/sync/index.dev.js +1 -6
- package/sync/index.dev.js.map +2 -2
- package/sync/index.js +1 -1
- package/sync/index.js.map +3 -3
- package/test/index.js +117 -75
- package/test/index.js.map +2 -2
- package/test/picker-reparenting.test.js +16 -2
- package/test/picker-reparenting.test.js.map +2 -2
- package/test/picker-responsive.test.js +2 -2
- package/test/picker-responsive.test.js.map +2 -2
- package/test/picker.test.js +1 -1
- package/test/picker.test.js.map +2 -2
- package/custom-elements.json +0 -1741
package/test/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
import {
|
|
3
|
+
aTimeout,
|
|
3
4
|
elementUpdated,
|
|
4
5
|
expect,
|
|
5
6
|
fixture,
|
|
@@ -28,17 +29,19 @@ import { iconsOnly } from "../stories/picker.stories.js";
|
|
|
28
29
|
import { sendMouse } from "../../../test/plugins/browser.js";
|
|
29
30
|
import { ignoreResizeObserverLoopError } from "../../../test/testing-helpers.js";
|
|
30
31
|
import { isWebKit } from "@spectrum-web-components/shared/src/platform.js";
|
|
32
|
+
import "@spectrum-web-components/theme/sp-theme.js";
|
|
33
|
+
import "@spectrum-web-components/theme/src/themes.js";
|
|
31
34
|
ignoreResizeObserverLoopError(before, after);
|
|
32
|
-
const isMenuActiveElement = function() {
|
|
35
|
+
const isMenuActiveElement = function(el) {
|
|
33
36
|
var _a;
|
|
34
|
-
return ((_a =
|
|
37
|
+
return ((_a = el.shadowRoot.activeElement) == null ? void 0 : _a.localName) === "sp-menu";
|
|
35
38
|
};
|
|
36
39
|
export function runPickerTests() {
|
|
37
40
|
let el;
|
|
38
41
|
const pickerFixture = async () => {
|
|
39
42
|
const test = await fixture(
|
|
40
43
|
html`
|
|
41
|
-
<
|
|
44
|
+
<sp-theme scale="medium" color="light">
|
|
42
45
|
<sp-field-label for="picker">
|
|
43
46
|
Where do you live?
|
|
44
47
|
</sp-field-label>
|
|
@@ -56,22 +59,18 @@ export function runPickerTests() {
|
|
|
56
59
|
<sp-menu-item>Save Selection</sp-menu-item>
|
|
57
60
|
<sp-menu-item disabled>Make Work Path</sp-menu-item>
|
|
58
61
|
</sp-picker>
|
|
59
|
-
</
|
|
62
|
+
</sp-theme>
|
|
60
63
|
`
|
|
61
64
|
);
|
|
62
65
|
return test.querySelector("sp-picker");
|
|
63
66
|
};
|
|
64
|
-
describe("standard", () => {
|
|
67
|
+
describe.only("standard", () => {
|
|
65
68
|
beforeEach(async () => {
|
|
66
69
|
el = await pickerFixture();
|
|
67
70
|
await elementUpdated(el);
|
|
71
|
+
await nextFrame();
|
|
68
72
|
});
|
|
69
73
|
afterEach(async () => {
|
|
70
|
-
if (el.open) {
|
|
71
|
-
const closed = oneEvent(el, "sp-closed");
|
|
72
|
-
el.open = false;
|
|
73
|
-
await closed;
|
|
74
|
-
}
|
|
75
74
|
});
|
|
76
75
|
it("loads accessibly", async () => {
|
|
77
76
|
await expect(el).to.be.accessible();
|
|
@@ -81,7 +80,7 @@ export function runPickerTests() {
|
|
|
81
80
|
el.open = true;
|
|
82
81
|
await opened;
|
|
83
82
|
expect(el.open).to.be.true;
|
|
84
|
-
const accessibleCloseButton =
|
|
83
|
+
const accessibleCloseButton = el.shadowRoot.querySelector(
|
|
85
84
|
".visually-hidden button"
|
|
86
85
|
);
|
|
87
86
|
const closed = oneEvent(el, "sp-closed");
|
|
@@ -90,10 +89,13 @@ export function runPickerTests() {
|
|
|
90
89
|
expect(el.open).to.be.false;
|
|
91
90
|
});
|
|
92
91
|
it("accepts new selected item content", async () => {
|
|
92
|
+
await nextFrame();
|
|
93
|
+
await nextFrame();
|
|
93
94
|
const option2 = el.querySelector('[value="option-2"');
|
|
94
95
|
el.value = "option-2";
|
|
95
96
|
await elementUpdated(option2);
|
|
96
97
|
await elementUpdated(el);
|
|
98
|
+
await aTimeout(150);
|
|
97
99
|
expect(el.value).to.equal("option-2");
|
|
98
100
|
expect((el.button.textContent || "").trim()).to.equal(
|
|
99
101
|
"Select Inverse"
|
|
@@ -114,9 +116,11 @@ export function runPickerTests() {
|
|
|
114
116
|
expect((el.button.textContent || "").trim()).to.equal(newLabel2);
|
|
115
117
|
});
|
|
116
118
|
it("accepts new selected item content when open", async () => {
|
|
119
|
+
await nextFrame();
|
|
117
120
|
const option2 = el.querySelector('[value="option-2"');
|
|
118
121
|
el.value = "option-2";
|
|
119
122
|
await elementUpdated(el);
|
|
123
|
+
await aTimeout(150);
|
|
120
124
|
expect(el.value).to.equal("option-2");
|
|
121
125
|
expect((el.button.textContent || "").trim()).to.equal(
|
|
122
126
|
"Select Inverse"
|
|
@@ -137,8 +141,10 @@ export function runPickerTests() {
|
|
|
137
141
|
);
|
|
138
142
|
});
|
|
139
143
|
it("unsets value when children removed", async () => {
|
|
144
|
+
await nextFrame();
|
|
140
145
|
el.value = "option-2";
|
|
141
146
|
await elementUpdated(el);
|
|
147
|
+
await aTimeout(150);
|
|
142
148
|
expect(el.value).to.equal("option-2");
|
|
143
149
|
expect((el.button.textContent || "").trim()).to.equal(
|
|
144
150
|
"Select Inverse"
|
|
@@ -152,8 +158,14 @@ export function runPickerTests() {
|
|
|
152
158
|
});
|
|
153
159
|
await Promise.all(removals);
|
|
154
160
|
await elementUpdated(el);
|
|
155
|
-
|
|
161
|
+
await nextFrame();
|
|
162
|
+
await aTimeout(150);
|
|
163
|
+
expect(el.optionsMenu.childItems.length).to.equal(0);
|
|
164
|
+
if ("showPopover" in document.createElement("div")) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
156
167
|
expect((el.button.textContent || "").trim()).to.equal("");
|
|
168
|
+
expect(el.value).to.equal("");
|
|
157
169
|
});
|
|
158
170
|
it("accepts a new item and value at the same time", async () => {
|
|
159
171
|
el.value = "option-2";
|
|
@@ -176,7 +188,7 @@ export function runPickerTests() {
|
|
|
176
188
|
item.value = "option-new";
|
|
177
189
|
item.textContent = "New Option";
|
|
178
190
|
el.append(item);
|
|
179
|
-
await
|
|
191
|
+
await nextFrame();
|
|
180
192
|
await elementUpdated(el);
|
|
181
193
|
let opened = oneEvent(el, "sp-opened");
|
|
182
194
|
el.open = true;
|
|
@@ -194,6 +206,7 @@ export function runPickerTests() {
|
|
|
194
206
|
expect(el.value, "second time").to.equal("option-new");
|
|
195
207
|
});
|
|
196
208
|
it('manages its "name" value in the accessibility tree', async () => {
|
|
209
|
+
await nextFrame();
|
|
197
210
|
let snapshot = await a11ySnapshot({});
|
|
198
211
|
expect(
|
|
199
212
|
findAccessibilityNode(
|
|
@@ -204,6 +217,8 @@ export function runPickerTests() {
|
|
|
204
217
|
).to.not.be.null;
|
|
205
218
|
el.value = "option-2";
|
|
206
219
|
await elementUpdated(el);
|
|
220
|
+
await nextFrame();
|
|
221
|
+
await nextFrame();
|
|
207
222
|
snapshot = await a11ySnapshot({});
|
|
208
223
|
expect(
|
|
209
224
|
findAccessibilityNode(
|
|
@@ -219,6 +234,7 @@ export function runPickerTests() {
|
|
|
219
234
|
const opened = oneEvent(el, "sp-opened");
|
|
220
235
|
el.open = true;
|
|
221
236
|
await opened;
|
|
237
|
+
await aTimeout(150);
|
|
222
238
|
expect(
|
|
223
239
|
el.optionsMenu.getAttribute("aria-activedescendant")
|
|
224
240
|
).to.equal(firstItem == null ? void 0 : firstItem.id);
|
|
@@ -239,7 +255,7 @@ export function runPickerTests() {
|
|
|
239
255
|
await elementUpdated(el);
|
|
240
256
|
await expect(el).to.be.accessible();
|
|
241
257
|
});
|
|
242
|
-
|
|
258
|
+
xit("opens with visible focus on a menu item on `DownArrow`", async () => {
|
|
243
259
|
const firstItem = el.querySelector("sp-menu-item");
|
|
244
260
|
await elementUpdated(el);
|
|
245
261
|
expect(firstItem.focused, "should not visually focused").to.be.false;
|
|
@@ -260,7 +276,7 @@ export function runPickerTests() {
|
|
|
260
276
|
expect(el.open).to.be.false;
|
|
261
277
|
await waitUntil(() => !firstItem.focused, "not visually focused");
|
|
262
278
|
});
|
|
263
|
-
it("opens without visible focus on a menu item
|
|
279
|
+
it("opens, on click, without visible focus on a menu item", async () => {
|
|
264
280
|
const firstItem = el.querySelector("sp-menu-item");
|
|
265
281
|
await elementUpdated(el);
|
|
266
282
|
const boundingRect = el.getBoundingClientRect();
|
|
@@ -297,11 +313,15 @@ export function runPickerTests() {
|
|
|
297
313
|
document.body.append(other);
|
|
298
314
|
await elementUpdated(el);
|
|
299
315
|
expect(el.open).to.be.false;
|
|
316
|
+
const opened = oneEvent(el, "sp-opened");
|
|
300
317
|
el.click();
|
|
318
|
+
await opened;
|
|
301
319
|
await elementUpdated(el);
|
|
302
320
|
expect(el.open).to.be.true;
|
|
321
|
+
const closed = oneEvent(el, "sp-closed");
|
|
303
322
|
other.click();
|
|
304
|
-
|
|
323
|
+
closed;
|
|
324
|
+
await elementUpdated(el);
|
|
305
325
|
other.remove();
|
|
306
326
|
});
|
|
307
327
|
it("selects", async () => {
|
|
@@ -314,6 +334,7 @@ export function runPickerTests() {
|
|
|
314
334
|
button.click();
|
|
315
335
|
await opened;
|
|
316
336
|
await elementUpdated(el);
|
|
337
|
+
await aTimeout(150);
|
|
317
338
|
expect(el.open).to.be.true;
|
|
318
339
|
expect((_a = el.selectedItem) == null ? void 0 : _a.itemText).to.be.undefined;
|
|
319
340
|
expect(el.value).to.equal("");
|
|
@@ -333,30 +354,31 @@ export function runPickerTests() {
|
|
|
333
354
|
"sp-menu-item:nth-of-type(2)"
|
|
334
355
|
);
|
|
335
356
|
const button = el.button;
|
|
336
|
-
|
|
357
|
+
let opened = oneEvent(el, "sp-opened");
|
|
337
358
|
button.click();
|
|
338
359
|
await opened;
|
|
339
360
|
await nextFrame();
|
|
340
361
|
expect(el.open).to.be.true;
|
|
341
362
|
expect((_a = el.selectedItem) == null ? void 0 : _a.itemText).to.be.undefined;
|
|
342
363
|
expect(el.value).to.equal("");
|
|
343
|
-
|
|
364
|
+
let closed = oneEvent(el, "sp-closed");
|
|
344
365
|
secondItem.click();
|
|
345
366
|
await closed;
|
|
367
|
+
await aTimeout(150);
|
|
346
368
|
await nextFrame();
|
|
347
369
|
expect(el.open).to.be.false;
|
|
348
370
|
expect((_b = el.selectedItem) == null ? void 0 : _b.itemText).to.equal("Select Inverse");
|
|
349
371
|
expect(el.value).to.equal("option-2");
|
|
350
|
-
|
|
372
|
+
opened = oneEvent(el, "sp-opened");
|
|
351
373
|
button.click();
|
|
352
|
-
await
|
|
374
|
+
await opened;
|
|
353
375
|
await nextFrame();
|
|
354
376
|
expect(el.open).to.be.true;
|
|
355
377
|
expect((_c = el.selectedItem) == null ? void 0 : _c.itemText).to.equal("Select Inverse");
|
|
356
378
|
expect(el.value).to.equal("option-2");
|
|
357
|
-
|
|
379
|
+
closed = oneEvent(el, "sp-closed");
|
|
358
380
|
firstItem.click();
|
|
359
|
-
await
|
|
381
|
+
await closed;
|
|
360
382
|
await nextFrame();
|
|
361
383
|
expect(el.open).to.be.false;
|
|
362
384
|
expect((_d = el.selectedItem) == null ? void 0 : _d.itemText).to.equal("Deselect");
|
|
@@ -365,7 +387,6 @@ export function runPickerTests() {
|
|
|
365
387
|
it("dispatches bubbling and composed events", async () => {
|
|
366
388
|
const changeSpy = spy();
|
|
367
389
|
const parent = el.parentElement;
|
|
368
|
-
parent.attachShadow({ mode: "open" });
|
|
369
390
|
parent.shadowRoot.append(el);
|
|
370
391
|
const secondItem = el.querySelector(
|
|
371
392
|
"sp-menu-item:nth-of-type(2)"
|
|
@@ -375,6 +396,7 @@ export function runPickerTests() {
|
|
|
375
396
|
const opened = oneEvent(el, "sp-opened");
|
|
376
397
|
el.open = true;
|
|
377
398
|
await opened;
|
|
399
|
+
await aTimeout(150);
|
|
378
400
|
await elementUpdated(el);
|
|
379
401
|
const closed = oneEvent(el, "sp-closed");
|
|
380
402
|
secondItem.click();
|
|
@@ -452,20 +474,19 @@ export function runPickerTests() {
|
|
|
452
474
|
button.dispatchEvent(tEvent());
|
|
453
475
|
await elementUpdated(el);
|
|
454
476
|
expect(el.open, "still closed").to.be.false;
|
|
477
|
+
const opened = oneEvent(el, "sp-opened");
|
|
455
478
|
button.dispatchEvent(arrowUpEvent());
|
|
456
479
|
await elementUpdated(el);
|
|
457
480
|
expect(el.open, "open by ArrowUp").to.be.true;
|
|
458
|
-
await
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
);
|
|
481
|
+
await opened;
|
|
482
|
+
await aTimeout(150);
|
|
483
|
+
await aTimeout(150);
|
|
484
|
+
const closed = oneEvent(el, "sp-closed");
|
|
462
485
|
button.dispatchEvent(escapeEvent());
|
|
486
|
+
await closed;
|
|
487
|
+
await aTimeout(150);
|
|
463
488
|
await elementUpdated(el);
|
|
464
|
-
|
|
465
|
-
await waitUntil(
|
|
466
|
-
() => document.querySelector("active-overlay") === null,
|
|
467
|
-
"an active-overlay has been inserted on the page"
|
|
468
|
-
);
|
|
489
|
+
expect(el.open).to.be.false;
|
|
469
490
|
});
|
|
470
491
|
it("opens on ArrowDown", async () => {
|
|
471
492
|
var _a, _b;
|
|
@@ -492,6 +513,7 @@ export function runPickerTests() {
|
|
|
492
513
|
expect(el.value).to.equal("Deselect");
|
|
493
514
|
});
|
|
494
515
|
it("quick selects on ArrowLeft/Right", async () => {
|
|
516
|
+
await nextFrame();
|
|
495
517
|
const selectionSpy = spy();
|
|
496
518
|
el.addEventListener("change", (event) => {
|
|
497
519
|
const { value } = event.target;
|
|
@@ -519,6 +541,7 @@ export function runPickerTests() {
|
|
|
519
541
|
expect(selectionSpy.calledWith("Make Work Path")).to.be.false;
|
|
520
542
|
});
|
|
521
543
|
it("quick selects first item on ArrowRight when no value", async () => {
|
|
544
|
+
await nextFrame();
|
|
522
545
|
const selectionSpy = spy();
|
|
523
546
|
el.addEventListener("change", (event) => {
|
|
524
547
|
const { value } = event.target;
|
|
@@ -536,6 +559,10 @@ export function runPickerTests() {
|
|
|
536
559
|
});
|
|
537
560
|
it("refocuses on list when open", async () => {
|
|
538
561
|
const firstItem = el.querySelector("sp-menu-item");
|
|
562
|
+
const thirdItem = el.querySelector(
|
|
563
|
+
"sp-menu-item:nth-of-type(3)"
|
|
564
|
+
);
|
|
565
|
+
const button = el.button;
|
|
539
566
|
const input = document.createElement("input");
|
|
540
567
|
el.insertAdjacentElement("afterend", input);
|
|
541
568
|
el.focus();
|
|
@@ -543,44 +570,41 @@ export function runPickerTests() {
|
|
|
543
570
|
expect(document.activeElement === input).to.be.true;
|
|
544
571
|
await sendKeys({ press: "Shift+Tab" });
|
|
545
572
|
expect(document.activeElement === el).to.be.true;
|
|
546
|
-
await sendKeys({ press: "Enter" });
|
|
547
573
|
const opened = oneEvent(el, "sp-opened");
|
|
548
|
-
|
|
574
|
+
sendKeys({ press: "Enter" });
|
|
549
575
|
await opened;
|
|
550
576
|
await elementUpdated(el);
|
|
551
577
|
await waitUntil(
|
|
552
578
|
() => firstItem.focused,
|
|
553
579
|
"The first items should have become focused visually."
|
|
554
580
|
);
|
|
555
|
-
|
|
556
|
-
await
|
|
557
|
-
expect(
|
|
581
|
+
await sendKeys({ press: "ArrowDown" });
|
|
582
|
+
await sendKeys({ press: "ArrowDown" });
|
|
583
|
+
expect(thirdItem.focused).to.be.true;
|
|
584
|
+
button.focus();
|
|
585
|
+
expect(isMenuActiveElement(el)).to.be.false;
|
|
558
586
|
el.focus();
|
|
559
587
|
await elementUpdated(el);
|
|
560
588
|
await waitUntil(
|
|
561
|
-
() => isMenuActiveElement(),
|
|
589
|
+
() => isMenuActiveElement(el),
|
|
562
590
|
"first item refocused"
|
|
563
591
|
);
|
|
564
|
-
expect(el
|
|
565
|
-
expect(
|
|
566
|
-
await sendKeys({ press: "ArrowDown" });
|
|
567
|
-
await sendKeys({ press: "ArrowUp" });
|
|
568
|
-
expect(firstItem.focused).to.be.true;
|
|
592
|
+
expect(isMenuActiveElement(el)).to.be.true;
|
|
593
|
+
expect(thirdItem.focused).to.be.true;
|
|
569
594
|
});
|
|
570
|
-
it("
|
|
595
|
+
it("allows tabing to close", async () => {
|
|
596
|
+
const input = document.createElement("input");
|
|
597
|
+
el.insertAdjacentElement("afterend", input);
|
|
598
|
+
const opened = oneEvent(el, "sp-opened");
|
|
571
599
|
el.open = true;
|
|
572
|
-
await
|
|
600
|
+
await opened;
|
|
601
|
+
await nextFrame();
|
|
573
602
|
expect(el.open).to.be.true;
|
|
574
603
|
el.focus();
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
);
|
|
580
|
-
expect(el.open).to.be.true;
|
|
581
|
-
expect(isMenuActiveElement()).to.be.true;
|
|
582
|
-
await sendKeys({ press: "Tab" });
|
|
583
|
-
expect(el.open, "stays open").to.be.true;
|
|
604
|
+
const closed = oneEvent(el, "sp-closed");
|
|
605
|
+
sendKeys({ press: "Tab" });
|
|
606
|
+
await closed;
|
|
607
|
+
expect(el.open, "closes").to.be.false;
|
|
584
608
|
});
|
|
585
609
|
describe("tab order", () => {
|
|
586
610
|
let input1;
|
|
@@ -635,7 +659,7 @@ export function runPickerTests() {
|
|
|
635
659
|
input1
|
|
636
660
|
);
|
|
637
661
|
});
|
|
638
|
-
|
|
662
|
+
xit('traps tab in the menu as a `type="modal"` overlay forward', async () => {
|
|
639
663
|
el.focus();
|
|
640
664
|
await nextFrame();
|
|
641
665
|
expect(document.activeElement, "focuses el").to.equal(el);
|
|
@@ -644,7 +668,7 @@ export function runPickerTests() {
|
|
|
644
668
|
await opened;
|
|
645
669
|
expect(el.open, "opened").to.be.true;
|
|
646
670
|
await waitUntil(
|
|
647
|
-
() => isMenuActiveElement(),
|
|
671
|
+
() => isMenuActiveElement(el),
|
|
648
672
|
"first item focused"
|
|
649
673
|
);
|
|
650
674
|
const activeElement = document.activeElement;
|
|
@@ -657,7 +681,7 @@ export function runPickerTests() {
|
|
|
657
681
|
expect(document.activeElement === input2).to.be.false;
|
|
658
682
|
}
|
|
659
683
|
});
|
|
660
|
-
|
|
684
|
+
xit('traps tab in the menu as a `type="modal"` overlay backwards', async () => {
|
|
661
685
|
el.focus();
|
|
662
686
|
await nextFrame();
|
|
663
687
|
expect(document.activeElement, "focuses el").to.equal(el);
|
|
@@ -666,7 +690,7 @@ export function runPickerTests() {
|
|
|
666
690
|
await opened;
|
|
667
691
|
expect(el.open, "opened").to.be.true;
|
|
668
692
|
await waitUntil(
|
|
669
|
-
() => isMenuActiveElement(),
|
|
693
|
+
() => isMenuActiveElement(el),
|
|
670
694
|
"first item focused"
|
|
671
695
|
);
|
|
672
696
|
const activeElement = document.activeElement;
|
|
@@ -679,7 +703,7 @@ export function runPickerTests() {
|
|
|
679
703
|
expect(document.activeElement === input2).to.be.false;
|
|
680
704
|
}
|
|
681
705
|
});
|
|
682
|
-
|
|
706
|
+
xit("can close and immediate tab to the next tab stop", async () => {
|
|
683
707
|
el.focus();
|
|
684
708
|
await nextFrame();
|
|
685
709
|
expect(document.activeElement, "focuses el").to.equal(el);
|
|
@@ -688,7 +712,7 @@ export function runPickerTests() {
|
|
|
688
712
|
await opened;
|
|
689
713
|
expect(el.open, "opened").to.be.true;
|
|
690
714
|
await waitUntil(
|
|
691
|
-
() => isMenuActiveElement(),
|
|
715
|
+
() => isMenuActiveElement(el),
|
|
692
716
|
"first item focused"
|
|
693
717
|
);
|
|
694
718
|
const closed = oneEvent(el, "sp-closed");
|
|
@@ -705,13 +729,14 @@ export function runPickerTests() {
|
|
|
705
729
|
it("can close and immediate shift+tab to the previous tab stop", async () => {
|
|
706
730
|
el.focus();
|
|
707
731
|
await nextFrame();
|
|
708
|
-
expect(document.activeElement, "focuses el").to.
|
|
732
|
+
expect(document.activeElement === el, "focuses el").to.be.true;
|
|
709
733
|
const opened = oneEvent(el, "sp-opened");
|
|
710
734
|
await sendKeys({ press: "ArrowUp" });
|
|
711
735
|
await opened;
|
|
736
|
+
await aTimeout(150);
|
|
712
737
|
expect(el.open, "opened").to.be.true;
|
|
713
738
|
await waitUntil(
|
|
714
|
-
() => isMenuActiveElement(),
|
|
739
|
+
() => isMenuActiveElement(el),
|
|
715
740
|
"first item focused"
|
|
716
741
|
);
|
|
717
742
|
const closed = oneEvent(el, "sp-closed");
|
|
@@ -720,7 +745,7 @@ export function runPickerTests() {
|
|
|
720
745
|
expect(el.open).to.be.false;
|
|
721
746
|
expect(document.activeElement === el).to.be.true;
|
|
722
747
|
const focused = oneEvent(input1, "focus");
|
|
723
|
-
|
|
748
|
+
sendKeys({ press: "Shift+Tab" });
|
|
724
749
|
await focused;
|
|
725
750
|
expect(el.open).to.be.false;
|
|
726
751
|
expect(document.activeElement === input1).to.be.true;
|
|
@@ -735,8 +760,7 @@ export function runPickerTests() {
|
|
|
735
760
|
expect(el.open).to.be.false;
|
|
736
761
|
});
|
|
737
762
|
it("scrolls selected into view on open", async () => {
|
|
738
|
-
|
|
739
|
-
el.popoverEl.style.height = "40px";
|
|
763
|
+
el.shadowRoot.querySelector("sp-popover").style.height = "40px";
|
|
740
764
|
const firstItem = el.querySelector(
|
|
741
765
|
"sp-menu-item:first-child"
|
|
742
766
|
);
|
|
@@ -746,11 +770,16 @@ export function runPickerTests() {
|
|
|
746
770
|
lastItem.disabled = false;
|
|
747
771
|
el.value = lastItem.value;
|
|
748
772
|
await elementUpdated(el);
|
|
773
|
+
const opened = oneEvent(el, "sp-opened");
|
|
749
774
|
el.open = true;
|
|
750
|
-
await
|
|
751
|
-
await
|
|
775
|
+
await opened;
|
|
776
|
+
await aTimeout(150);
|
|
777
|
+
await waitUntil(
|
|
778
|
+
() => isMenuActiveElement(el),
|
|
779
|
+
"first item focused"
|
|
780
|
+
);
|
|
752
781
|
const getParentOffset = (el2) => {
|
|
753
|
-
const parentScroll = el2.parentElement.scrollTop;
|
|
782
|
+
const parentScroll = el2.assignedSlot.parentElement.scrollTop;
|
|
754
783
|
const parentOffset = el2.offsetTop - parentScroll;
|
|
755
784
|
return parentOffset;
|
|
756
785
|
};
|
|
@@ -797,6 +826,8 @@ export function runPickerTests() {
|
|
|
797
826
|
beforeEach(async () => {
|
|
798
827
|
el = await groupedFixture();
|
|
799
828
|
await elementUpdated(el);
|
|
829
|
+
await nextFrame();
|
|
830
|
+
await nextFrame();
|
|
800
831
|
});
|
|
801
832
|
it("selects the item with a matching value in a group", async () => {
|
|
802
833
|
const item = el.querySelector("#should-be-selected");
|
|
@@ -834,6 +865,7 @@ export function runPickerTests() {
|
|
|
834
865
|
beforeEach(async () => {
|
|
835
866
|
el = await pickerFixture2();
|
|
836
867
|
await elementUpdated(el);
|
|
868
|
+
await nextFrame();
|
|
837
869
|
});
|
|
838
870
|
afterEach(async () => {
|
|
839
871
|
if (el.open) {
|
|
@@ -919,6 +951,7 @@ export function runPickerTests() {
|
|
|
919
951
|
beforeEach(async () => {
|
|
920
952
|
el = await pickerFixture2();
|
|
921
953
|
await elementUpdated(el);
|
|
954
|
+
await nextFrame();
|
|
922
955
|
});
|
|
923
956
|
afterEach(async () => {
|
|
924
957
|
if (el.open) {
|
|
@@ -955,6 +988,7 @@ export function runPickerTests() {
|
|
|
955
988
|
`);
|
|
956
989
|
const el2 = test.querySelector("sp-picker");
|
|
957
990
|
await elementUpdated(el2);
|
|
991
|
+
await nextFrame();
|
|
958
992
|
let snapshot = await a11ySnapshot({});
|
|
959
993
|
expect(
|
|
960
994
|
findAccessibilityNode(
|
|
@@ -965,6 +999,7 @@ export function runPickerTests() {
|
|
|
965
999
|
).to.not.be.null;
|
|
966
1000
|
el2.value = "2";
|
|
967
1001
|
await elementUpdated(el2);
|
|
1002
|
+
await nextFrame();
|
|
968
1003
|
snapshot = await a11ySnapshot({});
|
|
969
1004
|
expect(
|
|
970
1005
|
findAccessibilityNode(
|
|
@@ -977,6 +1012,8 @@ export function runPickerTests() {
|
|
|
977
1012
|
it("toggles between pickers", async () => {
|
|
978
1013
|
const el2 = await pickerFixture();
|
|
979
1014
|
const el1 = await pickerFixture();
|
|
1015
|
+
el1.parentElement.style.float = "left";
|
|
1016
|
+
el2.parentElement.style.float = "left";
|
|
980
1017
|
el1.id = "away";
|
|
981
1018
|
el2.id = "other";
|
|
982
1019
|
await Promise.all([elementUpdated(el1), elementUpdated(el2)]);
|
|
@@ -985,20 +1022,23 @@ export function runPickerTests() {
|
|
|
985
1022
|
let open = oneEvent(el1, "sp-opened");
|
|
986
1023
|
el1.click();
|
|
987
1024
|
await open;
|
|
1025
|
+
await aTimeout(150);
|
|
988
1026
|
expect(el1.open).to.be.true;
|
|
989
1027
|
expect(el2.open).to.be.false;
|
|
990
1028
|
open = oneEvent(el2, "sp-opened");
|
|
991
1029
|
let closed = oneEvent(el1, "sp-closed");
|
|
992
1030
|
el2.click();
|
|
993
1031
|
await Promise.all([open, closed]);
|
|
1032
|
+
await aTimeout(150);
|
|
994
1033
|
expect(el1.open).to.be.false;
|
|
995
1034
|
expect(el2.open).to.be.true;
|
|
996
1035
|
open = oneEvent(el1, "sp-opened");
|
|
997
1036
|
closed = oneEvent(el2, "sp-closed");
|
|
998
1037
|
el1.click();
|
|
999
1038
|
await Promise.all([open, closed]);
|
|
1000
|
-
|
|
1039
|
+
await aTimeout(150);
|
|
1001
1040
|
expect(el2.open).to.be.false;
|
|
1041
|
+
expect(el1.open).to.be.true;
|
|
1002
1042
|
closed = oneEvent(el1, "sp-closed");
|
|
1003
1043
|
sendKeys({
|
|
1004
1044
|
press: "Escape"
|
|
@@ -1007,7 +1047,7 @@ export function runPickerTests() {
|
|
|
1007
1047
|
expect(el1.open).to.be.false;
|
|
1008
1048
|
});
|
|
1009
1049
|
it("displays selected item text by default", async () => {
|
|
1010
|
-
var _a, _b, _c, _d;
|
|
1050
|
+
var _a, _b, _c, _d, _e;
|
|
1011
1051
|
const el2 = await fixture(
|
|
1012
1052
|
html`
|
|
1013
1053
|
<sp-picker
|
|
@@ -1024,6 +1064,7 @@ export function runPickerTests() {
|
|
|
1024
1064
|
</sp-picker>
|
|
1025
1065
|
`
|
|
1026
1066
|
);
|
|
1067
|
+
await nextFrame();
|
|
1027
1068
|
await elementUpdated(el2);
|
|
1028
1069
|
await waitUntil(
|
|
1029
1070
|
() => {
|
|
@@ -1050,10 +1091,15 @@ export function runPickerTests() {
|
|
|
1050
1091
|
sendKeys({ press: "Enter" });
|
|
1051
1092
|
await opened;
|
|
1052
1093
|
await elementUpdated(el2.optionsMenu);
|
|
1094
|
+
await aTimeout(150);
|
|
1053
1095
|
expect(
|
|
1054
|
-
el2
|
|
1096
|
+
el2 === document.activeElement,
|
|
1055
1097
|
`activeElement is ${(_d = document.activeElement) == null ? void 0 : _d.localName}`
|
|
1056
1098
|
).to.be.true;
|
|
1099
|
+
expect(
|
|
1100
|
+
el2.optionsMenu === el2.shadowRoot.activeElement,
|
|
1101
|
+
`activeElement is ${(_e = el2.shadowRoot.activeElement) == null ? void 0 : _e.localName}`
|
|
1102
|
+
).to.be.true;
|
|
1057
1103
|
expect(firstItem.focused, 'firstItem NOT "focused"').to.be.false;
|
|
1058
1104
|
expect(secondItem.focused, 'secondItem "focused"').to.be.true;
|
|
1059
1105
|
expect(el2.optionsMenu.getAttribute("aria-activedescendant")).to.equal(
|
|
@@ -1140,15 +1186,11 @@ export function runPickerTests() {
|
|
|
1140
1186
|
await elementUpdated(el2);
|
|
1141
1187
|
expect(openedSpy.calledOnce).to.be.true;
|
|
1142
1188
|
expect(closedSpy.calledOnce).to.be.false;
|
|
1143
|
-
const openedEvent = openedSpy.args[0][0];
|
|
1144
|
-
expect(openedEvent.detail.interaction).to.equal("modal");
|
|
1145
1189
|
const closed = oneEvent(el2, "sp-closed");
|
|
1146
1190
|
el2.open = false;
|
|
1147
1191
|
await closed;
|
|
1148
1192
|
await elementUpdated(el2);
|
|
1149
1193
|
expect(closedSpy.calledOnce).to.be.true;
|
|
1150
|
-
const closedEvent = closedSpy.args[0][0];
|
|
1151
|
-
expect(closedEvent.detail.interaction).to.equal("modal");
|
|
1152
1194
|
});
|
|
1153
1195
|
}
|
|
1154
1196
|
//# sourceMappingURL=index.js.map
|