@spectrum-web-components/picker 0.31.1-react.3 → 0.32.1-overlay.33

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/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,
@@ -15,7 +16,6 @@ import {
15
16
  arrowLeftEvent,
16
17
  arrowRightEvent,
17
18
  arrowUpEvent,
18
- escapeEvent,
19
19
  testForLitDevWarnings,
20
20
  tEvent
21
21
  } from "../../../test/testing-helpers.js";
@@ -27,18 +27,19 @@ import {
27
27
  import { iconsOnly } from "../stories/picker.stories.js";
28
28
  import { sendMouse } from "../../../test/plugins/browser.js";
29
29
  import { ignoreResizeObserverLoopError } from "../../../test/testing-helpers.js";
30
- import { isWebKit } from "@spectrum-web-components/shared/src/platform.js";
30
+ import "@spectrum-web-components/theme/sp-theme.js";
31
+ import "@spectrum-web-components/theme/src/themes.js";
31
32
  ignoreResizeObserverLoopError(before, after);
32
- const isMenuActiveElement = function() {
33
+ const isMenuActiveElement = function(el) {
33
34
  var _a;
34
- return ((_a = document.activeElement) == null ? void 0 : _a.localName) === "sp-menu";
35
+ return ((_a = el.shadowRoot.activeElement) == null ? void 0 : _a.localName) === "sp-menu";
35
36
  };
36
37
  export function runPickerTests() {
37
38
  let el;
38
39
  const pickerFixture = async () => {
39
40
  const test = await fixture(
40
41
  html`
41
- <div>
42
+ <sp-theme scale="medium" color="light">
42
43
  <sp-field-label for="picker">
43
44
  Where do you live?
44
45
  </sp-field-label>
@@ -56,7 +57,7 @@ export function runPickerTests() {
56
57
  <sp-menu-item>Save Selection</sp-menu-item>
57
58
  <sp-menu-item disabled>Make Work Path</sp-menu-item>
58
59
  </sp-picker>
59
- </div>
60
+ </sp-theme>
60
61
  `
61
62
  );
62
63
  return test.querySelector("sp-picker");
@@ -66,34 +67,40 @@ export function runPickerTests() {
66
67
  el = await pickerFixture();
67
68
  await elementUpdated(el);
68
69
  });
69
- afterEach(async () => {
70
- if (el.open) {
71
- const closed = oneEvent(el, "sp-closed");
72
- el.open = false;
73
- await closed;
74
- }
75
- });
76
70
  it("loads accessibly", async () => {
77
71
  await expect(el).to.be.accessible();
78
72
  });
79
73
  it("closes accessibly", async () => {
74
+ el.focus();
75
+ await elementUpdated(el);
76
+ expect(el.shadowRoot.activeElement).to.equal(el.button);
80
77
  const opened = oneEvent(el, "sp-opened");
81
78
  el.open = true;
82
79
  await opened;
83
80
  expect(el.open).to.be.true;
84
- const accessibleCloseButton = document.querySelector(
81
+ const accessibleCloseButton = el.shadowRoot.querySelector(
85
82
  ".visually-hidden button"
86
83
  );
84
+ expect(accessibleCloseButton).to.have.attribute(
85
+ "aria-label",
86
+ "Dismiss"
87
+ );
87
88
  const closed = oneEvent(el, "sp-closed");
88
89
  accessibleCloseButton.click();
89
90
  await closed;
91
+ await elementUpdated(el);
90
92
  expect(el.open).to.be.false;
93
+ expect(el.shadowRoot.activeElement).to.equal(el.button);
94
+ expect(document.activeElement).to.eq(el);
91
95
  });
92
96
  it("accepts new selected item content", async () => {
97
+ await nextFrame();
98
+ await nextFrame();
93
99
  const option2 = el.querySelector('[value="option-2"');
94
100
  el.value = "option-2";
95
101
  await elementUpdated(option2);
96
102
  await elementUpdated(el);
103
+ await aTimeout(150);
97
104
  expect(el.value).to.equal("option-2");
98
105
  expect((el.button.textContent || "").trim()).to.equal(
99
106
  "Select Inverse"
@@ -114,9 +121,11 @@ export function runPickerTests() {
114
121
  expect((el.button.textContent || "").trim()).to.equal(newLabel2);
115
122
  });
116
123
  it("accepts new selected item content when open", async () => {
124
+ await nextFrame();
117
125
  const option2 = el.querySelector('[value="option-2"');
118
126
  el.value = "option-2";
119
127
  await elementUpdated(el);
128
+ await aTimeout(150);
120
129
  expect(el.value).to.equal("option-2");
121
130
  expect((el.button.textContent || "").trim()).to.equal(
122
131
  "Select Inverse"
@@ -137,8 +146,10 @@ export function runPickerTests() {
137
146
  );
138
147
  });
139
148
  it("unsets value when children removed", async () => {
149
+ await nextFrame();
140
150
  el.value = "option-2";
141
151
  await elementUpdated(el);
152
+ await aTimeout(150);
142
153
  expect(el.value).to.equal("option-2");
143
154
  expect((el.button.textContent || "").trim()).to.equal(
144
155
  "Select Inverse"
@@ -152,8 +163,14 @@ export function runPickerTests() {
152
163
  });
153
164
  await Promise.all(removals);
154
165
  await elementUpdated(el);
155
- expect(el.value).to.equal("");
166
+ await nextFrame();
167
+ await aTimeout(150);
168
+ expect(el.optionsMenu.childItems.length).to.equal(0);
169
+ if ("showPopover" in document.createElement("div")) {
170
+ return;
171
+ }
156
172
  expect((el.button.textContent || "").trim()).to.equal("");
173
+ expect(el.value).to.equal("");
157
174
  });
158
175
  it("accepts a new item and value at the same time", async () => {
159
176
  el.value = "option-2";
@@ -176,7 +193,7 @@ export function runPickerTests() {
176
193
  item.value = "option-new";
177
194
  item.textContent = "New Option";
178
195
  el.append(item);
179
- await elementUpdated(item);
196
+ await nextFrame();
180
197
  await elementUpdated(el);
181
198
  let opened = oneEvent(el, "sp-opened");
182
199
  el.open = true;
@@ -194,6 +211,7 @@ export function runPickerTests() {
194
211
  expect(el.value, "second time").to.equal("option-new");
195
212
  });
196
213
  it('manages its "name" value in the accessibility tree', async () => {
214
+ await nextFrame();
197
215
  let snapshot = await a11ySnapshot({});
198
216
  expect(
199
217
  findAccessibilityNode(
@@ -204,6 +222,8 @@ export function runPickerTests() {
204
222
  ).to.not.be.null;
205
223
  el.value = "option-2";
206
224
  await elementUpdated(el);
225
+ await nextFrame();
226
+ await nextFrame();
207
227
  snapshot = await a11ySnapshot({});
208
228
  expect(
209
229
  findAccessibilityNode(
@@ -240,6 +260,7 @@ export function runPickerTests() {
240
260
  await expect(el).to.be.accessible();
241
261
  });
242
262
  it("opens with visible focus on a menu item on `DownArrow`", async () => {
263
+ var _a, _b;
243
264
  const firstItem = el.querySelector("sp-menu-item");
244
265
  await elementUpdated(el);
245
266
  expect(firstItem.focused, "should not visually focused").to.be.false;
@@ -258,12 +279,24 @@ export function runPickerTests() {
258
279
  });
259
280
  await closed;
260
281
  expect(el.open).to.be.false;
261
- await waitUntil(() => !firstItem.focused, "not visually focused");
282
+ expect(
283
+ document.activeElement === el,
284
+ `focused ${(_a = document.activeElement) == null ? void 0 : _a.localName} instead of back on Picker`
285
+ ).to.be.true;
286
+ expect(
287
+ el.shadowRoot.activeElement === el.button,
288
+ `focused ${(_b = el.shadowRoot.activeElement) == null ? void 0 : _b.localName} instead of back on button`
289
+ ).to.be.true;
290
+ await waitUntil(
291
+ () => !firstItem.focused,
292
+ "finally, not visually focused"
293
+ );
262
294
  });
263
- it("opens without visible focus on a menu item on click", async () => {
295
+ it("opens, on click, without visible focus on a menu item", async () => {
296
+ await nextFrame();
297
+ await nextFrame();
264
298
  const firstItem = el.querySelector("sp-menu-item");
265
- await elementUpdated(el);
266
- const boundingRect = el.getBoundingClientRect();
299
+ const boundingRect = el.button.getBoundingClientRect();
267
300
  expect(firstItem.focused, "not visually focused").to.be.false;
268
301
  const opened = oneEvent(el, "sp-opened");
269
302
  sendMouse({
@@ -278,10 +311,69 @@ export function runPickerTests() {
278
311
  ]
279
312
  });
280
313
  await opened;
281
- await elementUpdated(el);
282
314
  expect(el.open).to.be.true;
283
315
  expect(firstItem.focused, "still not visually focused").to.be.false;
284
316
  });
317
+ it("opens/closes multiple times", async () => {
318
+ expect(el.open).to.be.false;
319
+ const boundingRect = el.button.getBoundingClientRect();
320
+ let opened = oneEvent(el, "sp-opened");
321
+ sendMouse({
322
+ steps: [
323
+ {
324
+ type: "click",
325
+ position: [
326
+ boundingRect.x + boundingRect.width / 2,
327
+ boundingRect.y + boundingRect.height / 2
328
+ ]
329
+ }
330
+ ]
331
+ });
332
+ await opened;
333
+ expect(el.open).to.be.true;
334
+ let closed = oneEvent(el, "sp-closed");
335
+ sendMouse({
336
+ steps: [
337
+ {
338
+ type: "click",
339
+ position: [
340
+ boundingRect.x + boundingRect.width / 2,
341
+ boundingRect.y + boundingRect.height / 2
342
+ ]
343
+ }
344
+ ]
345
+ });
346
+ await closed;
347
+ expect(el.open).to.be.false;
348
+ opened = oneEvent(el, "sp-opened");
349
+ sendMouse({
350
+ steps: [
351
+ {
352
+ type: "click",
353
+ position: [
354
+ boundingRect.x + boundingRect.width / 2,
355
+ boundingRect.y + boundingRect.height / 2
356
+ ]
357
+ }
358
+ ]
359
+ });
360
+ await opened;
361
+ expect(el.open).to.be.true;
362
+ closed = oneEvent(el, "sp-closed");
363
+ sendMouse({
364
+ steps: [
365
+ {
366
+ type: "click",
367
+ position: [
368
+ boundingRect.x + boundingRect.width / 2,
369
+ boundingRect.y + boundingRect.height / 2
370
+ ]
371
+ }
372
+ ]
373
+ });
374
+ await closed;
375
+ expect(el.open).to.be.false;
376
+ });
285
377
  it("closes when becoming disabled", async () => {
286
378
  expect(el.open).to.be.false;
287
379
  el.click();
@@ -297,11 +389,15 @@ export function runPickerTests() {
297
389
  document.body.append(other);
298
390
  await elementUpdated(el);
299
391
  expect(el.open).to.be.false;
392
+ const opened = oneEvent(el, "sp-opened");
300
393
  el.click();
394
+ await opened;
301
395
  await elementUpdated(el);
302
396
  expect(el.open).to.be.true;
397
+ const closed = oneEvent(el, "sp-closed");
303
398
  other.click();
304
- await waitUntil(() => !el.open, "closed");
399
+ closed;
400
+ await elementUpdated(el);
305
401
  other.remove();
306
402
  });
307
403
  it("selects", async () => {
@@ -313,7 +409,6 @@ export function runPickerTests() {
313
409
  const opened = oneEvent(el, "sp-opened");
314
410
  button.click();
315
411
  await opened;
316
- await elementUpdated(el);
317
412
  expect(el.open).to.be.true;
318
413
  expect((_a = el.selectedItem) == null ? void 0 : _a.itemText).to.be.undefined;
319
414
  expect(el.value).to.equal("");
@@ -333,31 +428,27 @@ export function runPickerTests() {
333
428
  "sp-menu-item:nth-of-type(2)"
334
429
  );
335
430
  const button = el.button;
336
- const opened = oneEvent(el, "sp-opened");
431
+ let opened = oneEvent(el, "sp-opened");
337
432
  button.click();
338
433
  await opened;
339
- await nextFrame();
340
434
  expect(el.open).to.be.true;
341
435
  expect((_a = el.selectedItem) == null ? void 0 : _a.itemText).to.be.undefined;
342
436
  expect(el.value).to.equal("");
343
- const closed = oneEvent(el, "sp-closed");
437
+ let closed = oneEvent(el, "sp-closed");
344
438
  secondItem.click();
345
439
  await closed;
346
- await nextFrame();
347
440
  expect(el.open).to.be.false;
348
441
  expect((_b = el.selectedItem) == null ? void 0 : _b.itemText).to.equal("Select Inverse");
349
442
  expect(el.value).to.equal("option-2");
350
- const opened2 = oneEvent(el, "sp-opened");
443
+ opened = oneEvent(el, "sp-opened");
351
444
  button.click();
352
- await opened2;
353
- await nextFrame();
445
+ await opened;
354
446
  expect(el.open).to.be.true;
355
447
  expect((_c = el.selectedItem) == null ? void 0 : _c.itemText).to.equal("Select Inverse");
356
448
  expect(el.value).to.equal("option-2");
357
- const closed2 = oneEvent(el, "sp-closed");
449
+ closed = oneEvent(el, "sp-closed");
358
450
  firstItem.click();
359
- await closed2;
360
- await nextFrame();
451
+ await closed;
361
452
  expect(el.open).to.be.false;
362
453
  expect((_d = el.selectedItem) == null ? void 0 : _d.itemText).to.equal("Deselect");
363
454
  expect(el.value).to.equal("Deselect");
@@ -365,7 +456,6 @@ export function runPickerTests() {
365
456
  it("dispatches bubbling and composed events", async () => {
366
457
  const changeSpy = spy();
367
458
  const parent = el.parentElement;
368
- parent.attachShadow({ mode: "open" });
369
459
  parent.shadowRoot.append(el);
370
460
  const secondItem = el.querySelector(
371
461
  "sp-menu-item:nth-of-type(2)"
@@ -375,11 +465,9 @@ export function runPickerTests() {
375
465
  const opened = oneEvent(el, "sp-opened");
376
466
  el.open = true;
377
467
  await opened;
378
- await elementUpdated(el);
379
468
  const closed = oneEvent(el, "sp-closed");
380
469
  secondItem.click();
381
470
  await closed;
382
- await elementUpdated(el);
383
471
  expect(el.value).to.equal(secondItem.value);
384
472
  expect(changeSpy.calledOnce).to.be.true;
385
473
  });
@@ -390,10 +478,9 @@ export function runPickerTests() {
390
478
  "sp-menu-item:nth-of-type(2)"
391
479
  );
392
480
  const button = el.button;
393
- let opened = oneEvent(el, "sp-opened");
481
+ const opened = oneEvent(el, "sp-opened");
394
482
  button.click();
395
483
  await opened;
396
- await elementUpdated(el);
397
484
  expect(el.open).to.be.true;
398
485
  expect((_a = el.selectedItem) == null ? void 0 : _a.itemText).to.be.undefined;
399
486
  expect(el.value).to.equal("");
@@ -402,14 +489,12 @@ export function runPickerTests() {
402
489
  event.preventDefault();
403
490
  preventChangeSpy();
404
491
  });
405
- const closed = oneEvent(el, "sp-closed");
406
- opened = oneEvent(el, "sp-opened");
407
492
  secondItem.click();
408
- await closed;
409
- await opened;
410
- await elementUpdated(el);
493
+ await nextFrame();
494
+ await nextFrame();
411
495
  expect(preventChangeSpy.calledOnce).to.be.true;
412
496
  expect(secondItem.selected, "selection prevented").to.be.false;
497
+ expect(el.open).to.be.true;
413
498
  });
414
499
  it("can throw focus after `change`", async () => {
415
500
  var _a;
@@ -452,20 +537,17 @@ export function runPickerTests() {
452
537
  button.dispatchEvent(tEvent());
453
538
  await elementUpdated(el);
454
539
  expect(el.open, "still closed").to.be.false;
540
+ const opened = oneEvent(el, "sp-opened");
455
541
  button.dispatchEvent(arrowUpEvent());
456
542
  await elementUpdated(el);
457
543
  expect(el.open, "open by ArrowUp").to.be.true;
458
- await waitUntil(
459
- () => document.querySelector("active-overlay") !== null,
460
- "an active-overlay has been inserted on the page"
461
- );
462
- button.dispatchEvent(escapeEvent());
463
- await elementUpdated(el);
464
- await waitUntil(() => el.open === false, "closed by Escape");
465
- await waitUntil(
466
- () => document.querySelector("active-overlay") === null,
467
- "an active-overlay has been inserted on the page"
468
- );
544
+ await opened;
545
+ const closed = oneEvent(el, "sp-closed");
546
+ sendKeys({
547
+ press: "Escape"
548
+ });
549
+ await closed;
550
+ expect(el.open).to.be.false;
469
551
  });
470
552
  it("opens on ArrowDown", async () => {
471
553
  var _a, _b;
@@ -479,19 +561,18 @@ export function runPickerTests() {
479
561
  const opened = oneEvent(el, "sp-opened");
480
562
  button.dispatchEvent(arrowDownEvent());
481
563
  await opened;
482
- await elementUpdated(el);
483
564
  expect(el.open, "open by ArrowDown").to.be.true;
484
565
  expect((_a = el.selectedItem) == null ? void 0 : _a.itemText).to.be.undefined;
485
566
  expect(el.value).to.equal("");
486
567
  const closed = oneEvent(el, "sp-closed");
487
568
  firstItem.click();
488
569
  await closed;
489
- await elementUpdated(el);
490
570
  expect(el.open).to.be.false;
491
571
  expect((_b = el.selectedItem) == null ? void 0 : _b.itemText).to.equal("Deselect");
492
572
  expect(el.value).to.equal("Deselect");
493
573
  });
494
574
  it("quick selects on ArrowLeft/Right", async () => {
575
+ await nextFrame();
495
576
  const selectionSpy = spy();
496
577
  el.addEventListener("change", (event) => {
497
578
  const { value } = event.target;
@@ -519,6 +600,7 @@ export function runPickerTests() {
519
600
  expect(selectionSpy.calledWith("Make Work Path")).to.be.false;
520
601
  });
521
602
  it("quick selects first item on ArrowRight when no value", async () => {
603
+ await nextFrame();
522
604
  const selectionSpy = spy();
523
605
  el.addEventListener("change", (event) => {
524
606
  const { value } = event.target;
@@ -536,6 +618,10 @@ export function runPickerTests() {
536
618
  });
537
619
  it("refocuses on list when open", async () => {
538
620
  const firstItem = el.querySelector("sp-menu-item");
621
+ const thirdItem = el.querySelector(
622
+ "sp-menu-item:nth-of-type(3)"
623
+ );
624
+ const button = el.button;
539
625
  const input = document.createElement("input");
540
626
  el.insertAdjacentElement("afterend", input);
541
627
  el.focus();
@@ -543,44 +629,41 @@ export function runPickerTests() {
543
629
  expect(document.activeElement === input).to.be.true;
544
630
  await sendKeys({ press: "Shift+Tab" });
545
631
  expect(document.activeElement === el).to.be.true;
546
- await sendKeys({ press: "Enter" });
547
632
  const opened = oneEvent(el, "sp-opened");
548
- el.open = true;
633
+ sendKeys({ press: "Enter" });
549
634
  await opened;
550
635
  await elementUpdated(el);
551
636
  await waitUntil(
552
637
  () => firstItem.focused,
553
638
  "The first items should have become focused visually."
554
639
  );
555
- el.blur();
556
- await elementUpdated(el);
557
- expect(el.open).to.be.true;
640
+ await sendKeys({ press: "ArrowDown" });
641
+ await sendKeys({ press: "ArrowDown" });
642
+ expect(thirdItem.focused).to.be.true;
643
+ button.focus();
644
+ expect(isMenuActiveElement(el)).to.be.false;
558
645
  el.focus();
559
646
  await elementUpdated(el);
560
647
  await waitUntil(
561
- () => isMenuActiveElement(),
648
+ () => isMenuActiveElement(el),
562
649
  "first item refocused"
563
650
  );
564
- expect(el.open).to.be.true;
565
- expect(isMenuActiveElement()).to.be.true;
566
- await sendKeys({ press: "ArrowDown" });
567
- await sendKeys({ press: "ArrowUp" });
568
- expect(firstItem.focused).to.be.true;
651
+ expect(isMenuActiveElement(el)).to.be.true;
652
+ expect(thirdItem.focused).to.be.true;
569
653
  });
570
- it("does not allow tabing to close", async () => {
654
+ it("allows tabing to close", async () => {
655
+ const input = document.createElement("input");
656
+ el.insertAdjacentElement("afterend", input);
657
+ const opened = oneEvent(el, "sp-opened");
571
658
  el.open = true;
572
- await elementUpdated(el);
659
+ await opened;
660
+ await nextFrame();
573
661
  expect(el.open).to.be.true;
574
662
  el.focus();
575
- await elementUpdated(el);
576
- await waitUntil(
577
- () => isMenuActiveElement(),
578
- "first item refocused"
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;
663
+ const closed = oneEvent(el, "sp-closed");
664
+ sendKeys({ press: "Tab" });
665
+ await closed;
666
+ expect(el.open, "closes").to.be.false;
584
667
  });
585
668
  describe("tab order", () => {
586
669
  let input1;
@@ -635,51 +718,7 @@ export function runPickerTests() {
635
718
  input1
636
719
  );
637
720
  });
638
- it('traps tab in the menu as a `type="modal"` overlay forward', async () => {
639
- el.focus();
640
- await nextFrame();
641
- expect(document.activeElement, "focuses el").to.equal(el);
642
- const opened = oneEvent(el, "sp-opened");
643
- sendKeys({ press: "ArrowDown" });
644
- await opened;
645
- expect(el.open, "opened").to.be.true;
646
- await waitUntil(
647
- () => isMenuActiveElement(),
648
- "first item focused"
649
- );
650
- const activeElement = document.activeElement;
651
- if (!isWebKit()) {
652
- const blured = oneEvent(activeElement, "blur");
653
- sendKeys({ press: "Tab" });
654
- await blured;
655
- expect(el.open, "picker still open").to.be.true;
656
- expect(document.activeElement === input1).to.be.false;
657
- expect(document.activeElement === input2).to.be.false;
658
- }
659
- });
660
- it('traps tab in the menu as a `type="modal"` overlay backwards', async () => {
661
- el.focus();
662
- await nextFrame();
663
- expect(document.activeElement, "focuses el").to.equal(el);
664
- const opened = oneEvent(el, "sp-opened");
665
- await sendKeys({ press: "ArrowDown" });
666
- await opened;
667
- expect(el.open, "opened").to.be.true;
668
- await waitUntil(
669
- () => isMenuActiveElement(),
670
- "first item focused"
671
- );
672
- const activeElement = document.activeElement;
673
- if (!isWebKit()) {
674
- const blured = oneEvent(activeElement, "blur");
675
- sendKeys({ press: "Shift+Tab" });
676
- await blured;
677
- expect(el.open, "picker still open").to.be.true;
678
- expect(document.activeElement === input1).to.be.false;
679
- expect(document.activeElement === input2).to.be.false;
680
- }
681
- });
682
- it("can close and immediate tab to the next tab stop", async () => {
721
+ it("can close and immediately tab to the next tab stop", async () => {
683
722
  el.focus();
684
723
  await nextFrame();
685
724
  expect(document.activeElement, "focuses el").to.equal(el);
@@ -688,7 +727,7 @@ export function runPickerTests() {
688
727
  await opened;
689
728
  expect(el.open, "opened").to.be.true;
690
729
  await waitUntil(
691
- () => isMenuActiveElement(),
730
+ () => isMenuActiveElement(el),
692
731
  "first item focused"
693
732
  );
694
733
  const closed = oneEvent(el, "sp-closed");
@@ -705,13 +744,13 @@ export function runPickerTests() {
705
744
  it("can close and immediate shift+tab to the previous tab stop", async () => {
706
745
  el.focus();
707
746
  await nextFrame();
708
- expect(document.activeElement, "focuses el").to.equal(el);
747
+ expect(document.activeElement === el, "focuses el").to.be.true;
709
748
  const opened = oneEvent(el, "sp-opened");
710
749
  await sendKeys({ press: "ArrowUp" });
711
750
  await opened;
712
751
  expect(el.open, "opened").to.be.true;
713
752
  await waitUntil(
714
- () => isMenuActiveElement(),
753
+ () => isMenuActiveElement(el),
715
754
  "first item focused"
716
755
  );
717
756
  const closed = oneEvent(el, "sp-closed");
@@ -720,7 +759,7 @@ export function runPickerTests() {
720
759
  expect(el.open).to.be.false;
721
760
  expect(document.activeElement === el).to.be.true;
722
761
  const focused = oneEvent(input1, "focus");
723
- await sendKeys({ press: "Shift+Tab" });
762
+ sendKeys({ press: "Shift+Tab" });
724
763
  await focused;
725
764
  expect(el.open).to.be.false;
726
765
  expect(document.activeElement === input1).to.be.true;
@@ -735,8 +774,7 @@ export function runPickerTests() {
735
774
  expect(el.open).to.be.false;
736
775
  });
737
776
  it("scrolls selected into view on open", async () => {
738
- await el.generatePopover();
739
- el.popoverEl.style.height = "40px";
777
+ el.shadowRoot.querySelector("sp-popover").style.height = "40px";
740
778
  const firstItem = el.querySelector(
741
779
  "sp-menu-item:first-child"
742
780
  );
@@ -746,11 +784,15 @@ export function runPickerTests() {
746
784
  lastItem.disabled = false;
747
785
  el.value = lastItem.value;
748
786
  await elementUpdated(el);
787
+ const opened = oneEvent(el, "sp-opened");
749
788
  el.open = true;
750
- await elementUpdated(el);
751
- await waitUntil(() => isMenuActiveElement(), "first item focused");
789
+ await opened;
790
+ await waitUntil(
791
+ () => isMenuActiveElement(el),
792
+ "first item focused"
793
+ );
752
794
  const getParentOffset = (el2) => {
753
- const parentScroll = el2.parentElement.scrollTop;
795
+ const parentScroll = el2.assignedSlot.parentElement.scrollTop;
754
796
  const parentOffset = el2.offsetTop - parentScroll;
755
797
  return parentOffset;
756
798
  };
@@ -759,7 +801,9 @@ export function runPickerTests() {
759
801
  lastItem.dispatchEvent(
760
802
  new FocusEvent("focusin", { bubbles: true })
761
803
  );
762
- lastItem.dispatchEvent(arrowDownEvent());
804
+ await sendKeys({
805
+ press: "ArrowDown"
806
+ });
763
807
  await elementUpdated(el);
764
808
  await nextFrame();
765
809
  expect(getParentOffset(lastItem)).to.be.greaterThan(40);
@@ -797,6 +841,8 @@ export function runPickerTests() {
797
841
  beforeEach(async () => {
798
842
  el = await groupedFixture();
799
843
  await elementUpdated(el);
844
+ await nextFrame();
845
+ await nextFrame();
800
846
  });
801
847
  it("selects the item with a matching value in a group", async () => {
802
848
  const item = el.querySelector("#should-be-selected");
@@ -834,6 +880,7 @@ export function runPickerTests() {
834
880
  beforeEach(async () => {
835
881
  el = await pickerFixture2();
836
882
  await elementUpdated(el);
883
+ await nextFrame();
837
884
  });
838
885
  afterEach(async () => {
839
886
  if (el.open) {
@@ -919,6 +966,7 @@ export function runPickerTests() {
919
966
  beforeEach(async () => {
920
967
  el = await pickerFixture2();
921
968
  await elementUpdated(el);
969
+ await nextFrame();
922
970
  });
923
971
  afterEach(async () => {
924
972
  if (el.open) {
@@ -935,7 +983,6 @@ export function runPickerTests() {
935
983
  const opened = oneEvent(el, "sp-opened");
936
984
  el.button.click();
937
985
  await opened;
938
- await elementUpdated(el);
939
986
  expect(el.open).to.be.true;
940
987
  expect((_a = el.selectedItem) == null ? void 0 : _a.itemText).to.be.undefined;
941
988
  expect(el.value).to.equal("");
@@ -955,6 +1002,7 @@ export function runPickerTests() {
955
1002
  `);
956
1003
  const el2 = test.querySelector("sp-picker");
957
1004
  await elementUpdated(el2);
1005
+ await nextFrame();
958
1006
  let snapshot = await a11ySnapshot({});
959
1007
  expect(
960
1008
  findAccessibilityNode(
@@ -965,6 +1013,9 @@ export function runPickerTests() {
965
1013
  ).to.not.be.null;
966
1014
  el2.value = "2";
967
1015
  await elementUpdated(el2);
1016
+ await nextFrame();
1017
+ await nextFrame();
1018
+ expect(el2.value).to.equal("2");
968
1019
  snapshot = await a11ySnapshot({});
969
1020
  expect(
970
1021
  findAccessibilityNode(
@@ -977,6 +1028,8 @@ export function runPickerTests() {
977
1028
  it("toggles between pickers", async () => {
978
1029
  const el2 = await pickerFixture();
979
1030
  const el1 = await pickerFixture();
1031
+ el1.parentElement.style.float = "left";
1032
+ el2.parentElement.style.float = "left";
980
1033
  el1.id = "away";
981
1034
  el2.id = "other";
982
1035
  await Promise.all([elementUpdated(el1), elementUpdated(el2)]);
@@ -997,8 +1050,8 @@ export function runPickerTests() {
997
1050
  closed = oneEvent(el2, "sp-closed");
998
1051
  el1.click();
999
1052
  await Promise.all([open, closed]);
1000
- expect(el1.open).to.be.true;
1001
1053
  expect(el2.open).to.be.false;
1054
+ expect(el1.open).to.be.true;
1002
1055
  closed = oneEvent(el1, "sp-closed");
1003
1056
  sendKeys({
1004
1057
  press: "Escape"
@@ -1007,7 +1060,7 @@ export function runPickerTests() {
1007
1060
  expect(el1.open).to.be.false;
1008
1061
  });
1009
1062
  it("displays selected item text by default", async () => {
1010
- var _a, _b, _c, _d;
1063
+ var _a, _b, _c, _d, _e;
1011
1064
  const el2 = await fixture(
1012
1065
  html`
1013
1066
  <sp-picker
@@ -1024,6 +1077,7 @@ export function runPickerTests() {
1024
1077
  </sp-picker>
1025
1078
  `
1026
1079
  );
1080
+ await nextFrame();
1027
1081
  await elementUpdated(el2);
1028
1082
  await waitUntil(
1029
1083
  () => {
@@ -1049,11 +1103,14 @@ export function runPickerTests() {
1049
1103
  const opened = oneEvent(el2, "sp-opened");
1050
1104
  sendKeys({ press: "Enter" });
1051
1105
  await opened;
1052
- await elementUpdated(el2.optionsMenu);
1053
1106
  expect(
1054
- el2.optionsMenu === document.activeElement,
1107
+ el2 === document.activeElement,
1055
1108
  `activeElement is ${(_d = document.activeElement) == null ? void 0 : _d.localName}`
1056
1109
  ).to.be.true;
1110
+ expect(
1111
+ el2.optionsMenu === el2.shadowRoot.activeElement,
1112
+ `activeElement is ${(_e = el2.shadowRoot.activeElement) == null ? void 0 : _e.localName}`
1113
+ ).to.be.true;
1057
1114
  expect(firstItem.focused, 'firstItem NOT "focused"').to.be.false;
1058
1115
  expect(secondItem.focused, 'secondItem "focused"').to.be.true;
1059
1116
  expect(el2.optionsMenu.getAttribute("aria-activedescendant")).to.equal(
@@ -1140,15 +1197,11 @@ export function runPickerTests() {
1140
1197
  await elementUpdated(el2);
1141
1198
  expect(openedSpy.calledOnce).to.be.true;
1142
1199
  expect(closedSpy.calledOnce).to.be.false;
1143
- const openedEvent = openedSpy.args[0][0];
1144
- expect(openedEvent.detail.interaction).to.equal("modal");
1145
1200
  const closed = oneEvent(el2, "sp-closed");
1146
1201
  el2.open = false;
1147
1202
  await closed;
1148
1203
  await elementUpdated(el2);
1149
1204
  expect(closedSpy.calledOnce).to.be.true;
1150
- const closedEvent = closedSpy.args[0][0];
1151
- expect(closedEvent.detail.interaction).to.equal("modal");
1152
1205
  });
1153
1206
  }
1154
1207
  //# sourceMappingURL=index.js.map