@spectrum-web-components/picker 1.2.0-beta.7 → 1.2.0-beta.9

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/picker",
3
- "version": "1.2.0-beta.7",
3
+ "version": "1.2.0-beta.9",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -82,20 +82,20 @@
82
82
  "lit-html"
83
83
  ],
84
84
  "dependencies": {
85
- "@spectrum-web-components/base": "^1.2.0-beta.7",
86
- "@spectrum-web-components/button": "^1.2.0-beta.7",
87
- "@spectrum-web-components/field-label": "^1.2.0-beta.7",
88
- "@spectrum-web-components/icon": "^1.2.0-beta.7",
89
- "@spectrum-web-components/icons-ui": "^1.2.0-beta.7",
90
- "@spectrum-web-components/icons-workflow": "^1.2.0-beta.7",
91
- "@spectrum-web-components/menu": "^1.2.0-beta.7",
92
- "@spectrum-web-components/overlay": "^1.2.0-beta.7",
93
- "@spectrum-web-components/popover": "^1.2.0-beta.7",
94
- "@spectrum-web-components/progress-circle": "^1.2.0-beta.7",
95
- "@spectrum-web-components/reactive-controllers": "^1.2.0-beta.7",
96
- "@spectrum-web-components/shared": "^1.2.0-beta.7",
97
- "@spectrum-web-components/tooltip": "^1.2.0-beta.7",
98
- "@spectrum-web-components/tray": "^1.2.0-beta.7"
85
+ "@spectrum-web-components/base": "^1.2.0-beta.9",
86
+ "@spectrum-web-components/button": "^1.2.0-beta.9",
87
+ "@spectrum-web-components/field-label": "^1.2.0-beta.9",
88
+ "@spectrum-web-components/icon": "^1.2.0-beta.9",
89
+ "@spectrum-web-components/icons-ui": "^1.2.0-beta.9",
90
+ "@spectrum-web-components/icons-workflow": "^1.2.0-beta.9",
91
+ "@spectrum-web-components/menu": "^1.2.0-beta.9",
92
+ "@spectrum-web-components/overlay": "^1.2.0-beta.9",
93
+ "@spectrum-web-components/popover": "^1.2.0-beta.9",
94
+ "@spectrum-web-components/progress-circle": "^1.2.0-beta.9",
95
+ "@spectrum-web-components/reactive-controllers": "^1.2.0-beta.9",
96
+ "@spectrum-web-components/shared": "^1.2.0-beta.9",
97
+ "@spectrum-web-components/tooltip": "^1.2.0-beta.9",
98
+ "@spectrum-web-components/tray": "^1.2.0-beta.9"
99
99
  },
100
100
  "devDependencies": {
101
101
  "@spectrum-css/picker": "9.0.0-s2-foundations.17"
@@ -108,5 +108,5 @@
108
108
  "./sync/index.js",
109
109
  "./sync/sp-*.js"
110
110
  ],
111
- "gitHead": "8990e269acdc74e6b059a4cb7718cd804689122d"
111
+ "gitHead": "1f6549c7e7a8fdb9570a959fc44cef766cd4bee7"
112
112
  }
@@ -2,6 +2,7 @@
2
2
  import { html } from "@spectrum-web-components/base";
3
3
  import "@spectrum-web-components/button/sp-button.js";
4
4
  import "@spectrum-web-components/field-label/sp-field-label.js";
5
+ import "@spectrum-web-components/icon/sp-icon.js";
5
6
  import "@spectrum-web-components/icons-workflow/icons/sp-icon-copy.js";
6
7
  import "@spectrum-web-components/icons-workflow/icons/sp-icon-delete.js";
7
8
  import "@spectrum-web-components/icons-workflow/icons/sp-icon-edit.js";
@@ -446,6 +447,66 @@ iconsOnly.args = {
446
447
  open: true
447
448
  };
448
449
  iconsOnly.decorators = [isOverlayOpen];
450
+ export const dynamicIcons = (args) => {
451
+ return html`
452
+ <p>
453
+ The icon displayed in the picker should match the icon of the
454
+ selected menu item, even when the icons are updated dynamically.
455
+ </p>
456
+ <sp-field-label for="picker-quiet" size=${ifDefined(args.size)}>
457
+ Choose an action type...
458
+ </sp-field-label>
459
+ <sp-picker
460
+ ${spreadProps(args)}
461
+ id="picker-quiet"
462
+ @change=${handleChange(args)}
463
+ label="Pick an action"
464
+ value="2"
465
+ >
466
+ <sp-menu-item value="1">
467
+ <sp-icon
468
+ slot="icon"
469
+ src="https://loremicon.com/rect/20/20/1/png"
470
+ ></sp-icon>
471
+ Edit
472
+ </sp-menu-item>
473
+ <sp-menu-item value="2">
474
+ <sp-icon
475
+ slot="icon"
476
+ src="https://loremicon.com/rect/20/20/2/png"
477
+ ></sp-icon>
478
+ Copy
479
+ </sp-menu-item>
480
+ <sp-menu-item value="3">
481
+ <sp-icon
482
+ slot="icon"
483
+ src="https://loremicon.com/rect/20/20/3/png"
484
+ ></sp-icon>
485
+ Delete
486
+ </sp-menu-item>
487
+ </sp-picker>
488
+ <sp-button
489
+ @click=${() => {
490
+ const icons2 = document.querySelectorAll("sp-icon");
491
+ const seed = Math.round(Math.random() * 1e3);
492
+ icons2.forEach((icon, index) => {
493
+ icon.setAttribute(
494
+ "src",
495
+ `https://loremicon.com/rect/20/20/${seed + index}/png`
496
+ );
497
+ });
498
+ const picker = document.querySelector("sp-picker");
499
+ if (picker) picker.open = true;
500
+ }}
501
+ >
502
+ Change icons
503
+ </sp-button>
504
+ `;
505
+ };
506
+ dynamicIcons.args = {
507
+ open: true
508
+ };
509
+ dynamicIcons.decorators = [isOverlayOpen];
449
510
  export const Open = (args) => {
450
511
  return html`
451
512
  <style>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["picker.stories.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html, TemplateResult } from '@spectrum-web-components/base';\n\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-copy.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-delete.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-edit.js';\nimport '@spectrum-web-components/link/sp-link.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/picker/sp-picker.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { spreadProps } from '../../../test/lit-helpers.js';\nimport '../../overlay/stories/index.js';\nimport { isOverlayOpen } from '../../overlay/stories/index.js';\nimport { argTypes } from './args.js';\nimport { states } from './states.js';\nimport { handleChange, StoryArgs, Template } from './template.js';\n\nexport default {\n title: 'Picker',\n component: 'sp-picker',\n args: {\n disabled: false,\n invalid: false,\n open: false,\n quiet: false,\n pending: false,\n },\n argTypes: {\n ...argTypes,\n onChange: { action: 'change' },\n open: {\n name: 'open',\n type: { name: 'boolean', required: false },\n description: 'Whether the menu is open or not.',\n table: {\n type: { summary: 'boolean' },\n defaultValue: { summary: false },\n },\n control: 'boolean',\n },\n pending: {\n name: 'pending',\n type: { name: 'boolean', required: false },\n table: {\n type: { summary: 'boolean' },\n defaultValue: { summary: false },\n },\n control: {\n type: 'boolean',\n },\n },\n },\n};\n\nexport const Default = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-1\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-1\"\n @change=${handleChange(args)}\n label=\"Select a Country with a very long label, too long, in fact\"\n ${spreadProps(args)}\n >\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\n\nexport const forcePopoverOnMobile = (args: StoryArgs): TemplateResult => {\n return html`\n <div style=\"padding: 40px\">\n <h1>Force Popover on Mobile</h1>\n <p>\n The forcePopover attribute overrides the mobile device\n functionality of rendering a tray so that a popover will always\n render no matter the device.\n </p>\n <ol>\n <li>Open Chrome DevTools (or equivalent).</li>\n <li>Toggle the Device Toolbar (the phone/tablet icon).</li>\n <li>Select a device preset (e.g. iPhone 12).</li>\n <li>\n Chrome will set user-agent strings, simulate touch, and\n adjust DPI.\n </li>\n <li>Reload the page</li>\n <li>Click the Picker 1 and see a tray</li>\n <li>Click the Picker 2 and see a popover</li>\n </ol>\n <sp-field-label for=\"picker-1\" size=${ifDefined(args.size)}>\n Do you want to see a tray menu?\n </sp-field-label>\n <sp-picker\n id=\"picker-1\"\n @change=${handleChange(args)}\n label=\"Select an option\"\n >\n <sp-menu-item value=\"option-1\">Yes</sp-menu-item>\n <sp-menu-item value=\"option-2\">No</sp-menu-item>\n </sp-picker>\n <sp-field-label for=\"picker-2\" size=${ifDefined(args.size)}>\n Do you want to see a popover menu?\n </sp-field-label>\n <sp-picker\n id=\"picker-2\"\n forcePopover\n @change=${handleChange(args)}\n label=\"Select an option\"\n >\n <sp-menu-item value=\"option-1\">Yes</sp-menu-item>\n <sp-menu-item value=\"option-2\">No</sp-menu-item>\n </sp-picker>\n <div>\n <p>\n This button should't be clickable if a popover is open over\n it.\n </p>\n <sp-button\n @click=${() => console.log('Whoops! I was clicked.')}\n >\n Shouldn't be clickable\n </sp-button>\n </div>\n </div>\n `;\n};\n\nexport const disabled = (args: StoryArgs): TemplateResult => Template(args);\ndisabled.args = {\n disabled: true,\n};\n\nexport const invalid = (args: StoryArgs): TemplateResult => Template(args);\ninvalid.args = {\n invalid: true,\n};\n\nexport const tooltip = (args: StoryArgs): TemplateResult => {\n const { open, ...rest } = args;\n return html`\n <sp-field-label for=\"picker-1\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-1\"\n @change=${handleChange(args)}\n label=\"Select a Country with a very long label, too long, in fact\"\n ${spreadProps(rest)}\n >\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n <sp-tooltip\n slot=\"tooltip\"\n ?open=${open}\n self-managed\n placement=\"right\"\n >\n This Picker wants to know where you live.\n </sp-tooltip>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\ntooltip.args = {\n open: true,\n};\ntooltip.decorators = [isOverlayOpen];\n\nexport const leftSideLabel = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label\n side-aligned=\"start\"\n for=\"picker-1\"\n size=${ifDefined(args.size)}\n >\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-1\"\n @change=${handleChange(args)}\n label=\"Select a Country with a very long label, too long, in fact\"\n ${spreadProps(args)}\n >\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\n\nexport const noVisibleLabel = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-picker\n @change=${handleChange(args)}\n label=\"Where do you live?\"\n ${spreadProps(args)}\n >\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\n\nexport const slottedLabel = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-picker @change=${handleChange(args)} ${spreadProps(args)}>\n <span slot=\"label\">Where do you live?</span>\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\n\nexport const quiet = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an item\"\n >\n <sp-menu-item value=\"1\">Item 1</sp-menu-item>\n <sp-menu-item value=\"2\">Item 2</sp-menu-item>\n <sp-menu-item value=\"3\">Item 3</sp-menu-item>\n <sp-menu-item value=\"4\">Item 4</sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\nquiet.args = {\n quiet: true,\n};\n\nexport const quietSideLabel = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label\n side-aligned=\"start\"\n for=\"picker-quiet-sidelabel\"\n size=${ifDefined(args.size)}\n >\n Where do you live?\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet-sidelabel\"\n @change=${handleChange(args)}\n label=\"Pick an item\"\n >\n <sp-menu-item value=\"1\">Item 1</sp-menu-item>\n <sp-menu-item value=\"2\">Item 2</sp-menu-item>\n <sp-menu-item value=\"3\">Item 3</sp-menu-item>\n <sp-menu-item value=\"4\">Item 4</sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\nquietSideLabel.args = {\n quiet: true,\n};\n\nexport const icons = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n value=\"1\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon-edit slot=\"icon\"></sp-icon-edit>\n Edit\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon-copy slot=\"icon\"></sp-icon-copy>\n Copy\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon-delete slot=\"icon\"></sp-icon-delete>\n Delete\n </sp-menu-item>\n </sp-picker>\n `;\n};\n\nexport const iconsNone = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n value=\"1\"\n icons=\"none\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon-edit slot=\"icon\"></sp-icon-edit>\n Edit\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon-copy slot=\"icon\"></sp-icon-copy>\n Copy\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon-delete slot=\"icon\"></sp-icon-delete>\n Delete\n </sp-menu-item>\n </sp-picker>\n `;\n};\niconsNone.args = {\n open: true,\n};\niconsNone.decorators = [isOverlayOpen];\n\nexport const iconValue = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n icons=\"only\"\n style=\"width: 100px\"\n value=\"2\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon-edit slot=\"icon\"></sp-icon-edit>\n Edit\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon-copy slot=\"icon\"></sp-icon-copy>\n Copy\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon-delete slot=\"icon\"></sp-icon-delete>\n Delete\n </sp-menu-item>\n </sp-picker>\n `;\n};\n\nexport const iconsOnly = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n style=\"width: 100px\"\n value=\"3\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon-edit slot=\"icon\" label=\"Edit\"></sp-icon-edit>\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon-copy slot=\"icon\" label=\"Copy\"></sp-icon-copy>\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon-delete slot=\"icon\" label=\"Delete\"></sp-icon-delete>\n </sp-menu-item>\n </sp-picker>\n `;\n};\niconsOnly.args = {\n open: true,\n};\niconsOnly.decorators = [isOverlayOpen];\n\nexport const Open = (args: StoryArgs): TemplateResult => {\n return html`\n <style>\n fieldset {\n float: left;\n clear: left;\n margin-bottom: 15px;\n }\n </style>\n <fieldset class=\"backdrop-filter-test\">\n <sp-field-label for=\"picker-open\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-open\"\n label=\"Open picker\"\n ${spreadProps(args)}\n @change=${handleChange(args)}\n >\n <span slot=\"label\">\n Select a Country with a very long label, too long, in fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </fieldset>\n <fieldset>\n <sp-field-label for=\"picker-closed\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-closed\"\n label=\"Picker that displays below the options\"\n @change=${handleChange(args)}\n >\n <span slot=\"label\">\n Other menu that goes behind the open one\n </span>\n <sp-menu-item>Not so many options...</sp-menu-item>\n </sp-picker>\n </fieldset>\n `;\n};\nOpen.args = {\n open: true,\n};\nOpen.decorators = [isOverlayOpen];\n\nexport const OpenShowingEdgeCase = (args: StoryArgs): TemplateResult => {\n return html`\n <style>\n fieldset {\n float: left;\n clear: left;\n margin-bottom: 15px;\n }\n /* Enforce CSS stacking to test \"transition-behavior: allow-discrete\" */\n /* Breaks the story in non-[popover] supporting browsers */\n fieldset:nth-of-type(2) {\n position: relative;\n z-index: 2;\n }\n .backdrop-filter-test {\n backdrop-filter: saturate(80%);\n }\n </style>\n <p>\n In browser that do not support\n <code>[popover]</code>\n , the following \"open\"\n <code>sp-picker</code>\n will display behind both the closed\n <code>sp-picker</code>\n as well as the\n <code>fieldset</code>\n that contains it.\n </p>\n <p>\n Learn more about this situation in our\n <sp-link\n href=\"https://opensource.adobe.com/spectrum-web-components/components/overlay/#fallback-support\"\n >\n documentation site\n </sp-link>\n .\n </p>\n <fieldset class=\"backdrop-filter-test\">\n <sp-field-label for=\"picker-open\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-open\"\n label=\"Open picker\"\n ${spreadProps(args)}\n @change=${handleChange(args)}\n >\n <span slot=\"label\">\n Select a Country with a very long label, too long, in fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </fieldset>\n <fieldset>\n <sp-field-label for=\"picker-closed\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-closed\"\n label=\"Picker that displays below the options\"\n @change=${handleChange(args)}\n >\n <span slot=\"label\">\n Other menu that goes behind the open one\n </span>\n <sp-menu-item>Not so many options...</sp-menu-item>\n </sp-picker>\n </fieldset>\n `;\n};\nOpenShowingEdgeCase.args = {\n open: true,\n};\nOpenShowingEdgeCase.decorators = [isOverlayOpen];\nOpenShowingEdgeCase.swc_vrt = {\n skip: true,\n};\n\nOpenShowingEdgeCase.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const initialValue = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-initial\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-initial\"\n @change=${handleChange(args)}\n value=\"item-2\"\n ${spreadProps(args)}\n >\n <span slot=\"label\">\n Select a Country with a very long label, too long in fact\n </span>\n <sp-menu-item value=\"item-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"item-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"item-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"item-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"item-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"item-6\">Make Work Path</sp-menu-item>\n </sp-picker>\n `;\n};\n\nexport const readonly = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-picker\n @change=${handleChange(args)}\n readonly\n value=\"item-2\"\n ${spreadProps(args)}\n >\n <span slot=\"label\">\n Select a Country with a very long label, too long in fact\n </span>\n <sp-menu-item value=\"item-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"item-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"item-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"item-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"item-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"item-6\">Make Work Path</sp-menu-item>\n </sp-picker>\n `;\n};\n\nexport const custom = (args: StoryArgs): TemplateResult => {\n const initialState = 'lb1-mo';\n return html`\n <sp-field-label for=\"picker-state\" size=${ifDefined(args.size)}>\n What state do you live in?\n </sp-field-label>\n <sp-picker\n style=\"width: 400px;\"\n @change=${handleChange(args)}\n id=\"picker-state\"\n label=\"Pick a state\"\n ${spreadProps(args)}\n value=${initialState}\n >\n ${states.map(\n (state) => html`\n <sp-menu-item\n id=${state.id}\n value=${state.id}\n ?selected=${state.id === initialState}\n >\n ${state.label}\n </sp-menu-item>\n `\n )}\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\ncustom.args = {\n open: true,\n};\ncustom.decorators = [isOverlayOpen];\n\nexport const BackgroundClickTest = (): TemplateResult => {\n return html`\n <div style=\"display: flex; flex-direction: column;\">\n <sp-picker size=\"l\">\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n </sp-picker>\n <div style=\"position: absolute; bottom: 50px;\">\n <sp-button\n @click=${() => {\n console.log(\n 'this button should not have been clicked...'\n );\n }}\n size=\"l\"\n >\n I shall not be clicked\n </sp-button>\n </div>\n </div>\n `;\n};\nBackgroundClickTest.swc_vrt = {\n skip: true,\n};\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { html, TemplateResult } from '@spectrum-web-components/base';\n\nimport '@spectrum-web-components/button/sp-button.js';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/icon/sp-icon.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-copy.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-delete.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-edit.js';\nimport '@spectrum-web-components/link/sp-link.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/picker/sp-picker.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { spreadProps } from '../../../test/lit-helpers.js';\nimport '../../overlay/stories/index.js';\nimport { isOverlayOpen } from '../../overlay/stories/index.js';\nimport { argTypes } from './args.js';\nimport { states } from './states.js';\nimport { handleChange, StoryArgs, Template } from './template.js';\n\nexport default {\n title: 'Picker',\n component: 'sp-picker',\n args: {\n disabled: false,\n invalid: false,\n open: false,\n quiet: false,\n pending: false,\n },\n argTypes: {\n ...argTypes,\n onChange: { action: 'change' },\n open: {\n name: 'open',\n type: { name: 'boolean', required: false },\n description: 'Whether the menu is open or not.',\n table: {\n type: { summary: 'boolean' },\n defaultValue: { summary: false },\n },\n control: 'boolean',\n },\n pending: {\n name: 'pending',\n type: { name: 'boolean', required: false },\n table: {\n type: { summary: 'boolean' },\n defaultValue: { summary: false },\n },\n control: {\n type: 'boolean',\n },\n },\n },\n};\n\nexport const Default = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-1\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-1\"\n @change=${handleChange(args)}\n label=\"Select a Country with a very long label, too long, in fact\"\n ${spreadProps(args)}\n >\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\n\nexport const forcePopoverOnMobile = (args: StoryArgs): TemplateResult => {\n return html`\n <div style=\"padding: 40px\">\n <h1>Force Popover on Mobile</h1>\n <p>\n The forcePopover attribute overrides the mobile device\n functionality of rendering a tray so that a popover will always\n render no matter the device.\n </p>\n <ol>\n <li>Open Chrome DevTools (or equivalent).</li>\n <li>Toggle the Device Toolbar (the phone/tablet icon).</li>\n <li>Select a device preset (e.g. iPhone 12).</li>\n <li>\n Chrome will set user-agent strings, simulate touch, and\n adjust DPI.\n </li>\n <li>Reload the page</li>\n <li>Click the Picker 1 and see a tray</li>\n <li>Click the Picker 2 and see a popover</li>\n </ol>\n <sp-field-label for=\"picker-1\" size=${ifDefined(args.size)}>\n Do you want to see a tray menu?\n </sp-field-label>\n <sp-picker\n id=\"picker-1\"\n @change=${handleChange(args)}\n label=\"Select an option\"\n >\n <sp-menu-item value=\"option-1\">Yes</sp-menu-item>\n <sp-menu-item value=\"option-2\">No</sp-menu-item>\n </sp-picker>\n <sp-field-label for=\"picker-2\" size=${ifDefined(args.size)}>\n Do you want to see a popover menu?\n </sp-field-label>\n <sp-picker\n id=\"picker-2\"\n forcePopover\n @change=${handleChange(args)}\n label=\"Select an option\"\n >\n <sp-menu-item value=\"option-1\">Yes</sp-menu-item>\n <sp-menu-item value=\"option-2\">No</sp-menu-item>\n </sp-picker>\n <div>\n <p>\n This button should't be clickable if a popover is open over\n it.\n </p>\n <sp-button\n @click=${() => console.log('Whoops! I was clicked.')}\n >\n Shouldn't be clickable\n </sp-button>\n </div>\n </div>\n `;\n};\n\nexport const disabled = (args: StoryArgs): TemplateResult => Template(args);\ndisabled.args = {\n disabled: true,\n};\n\nexport const invalid = (args: StoryArgs): TemplateResult => Template(args);\ninvalid.args = {\n invalid: true,\n};\n\nexport const tooltip = (args: StoryArgs): TemplateResult => {\n const { open, ...rest } = args;\n return html`\n <sp-field-label for=\"picker-1\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-1\"\n @change=${handleChange(args)}\n label=\"Select a Country with a very long label, too long, in fact\"\n ${spreadProps(rest)}\n >\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n <sp-tooltip\n slot=\"tooltip\"\n ?open=${open}\n self-managed\n placement=\"right\"\n >\n This Picker wants to know where you live.\n </sp-tooltip>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\ntooltip.args = {\n open: true,\n};\ntooltip.decorators = [isOverlayOpen];\n\nexport const leftSideLabel = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label\n side-aligned=\"start\"\n for=\"picker-1\"\n size=${ifDefined(args.size)}\n >\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-1\"\n @change=${handleChange(args)}\n label=\"Select a Country with a very long label, too long, in fact\"\n ${spreadProps(args)}\n >\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\n\nexport const noVisibleLabel = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-picker\n @change=${handleChange(args)}\n label=\"Where do you live?\"\n ${spreadProps(args)}\n >\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\n\nexport const slottedLabel = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-picker @change=${handleChange(args)} ${spreadProps(args)}>\n <span slot=\"label\">Where do you live?</span>\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"option-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"option-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"option-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"option-6\">\n Make Work Path\n </sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\n\nexport const quiet = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an item\"\n >\n <sp-menu-item value=\"1\">Item 1</sp-menu-item>\n <sp-menu-item value=\"2\">Item 2</sp-menu-item>\n <sp-menu-item value=\"3\">Item 3</sp-menu-item>\n <sp-menu-item value=\"4\">Item 4</sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\nquiet.args = {\n quiet: true,\n};\n\nexport const quietSideLabel = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label\n side-aligned=\"start\"\n for=\"picker-quiet-sidelabel\"\n size=${ifDefined(args.size)}\n >\n Where do you live?\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet-sidelabel\"\n @change=${handleChange(args)}\n label=\"Pick an item\"\n >\n <sp-menu-item value=\"1\">Item 1</sp-menu-item>\n <sp-menu-item value=\"2\">Item 2</sp-menu-item>\n <sp-menu-item value=\"3\">Item 3</sp-menu-item>\n <sp-menu-item value=\"4\">Item 4</sp-menu-item>\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\nquietSideLabel.args = {\n quiet: true,\n};\n\nexport const icons = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n value=\"1\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon-edit slot=\"icon\"></sp-icon-edit>\n Edit\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon-copy slot=\"icon\"></sp-icon-copy>\n Copy\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon-delete slot=\"icon\"></sp-icon-delete>\n Delete\n </sp-menu-item>\n </sp-picker>\n `;\n};\n\nexport const iconsNone = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n value=\"1\"\n icons=\"none\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon-edit slot=\"icon\"></sp-icon-edit>\n Edit\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon-copy slot=\"icon\"></sp-icon-copy>\n Copy\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon-delete slot=\"icon\"></sp-icon-delete>\n Delete\n </sp-menu-item>\n </sp-picker>\n `;\n};\niconsNone.args = {\n open: true,\n};\niconsNone.decorators = [isOverlayOpen];\n\nexport const iconValue = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n icons=\"only\"\n style=\"width: 100px\"\n value=\"2\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon-edit slot=\"icon\"></sp-icon-edit>\n Edit\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon-copy slot=\"icon\"></sp-icon-copy>\n Copy\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon-delete slot=\"icon\"></sp-icon-delete>\n Delete\n </sp-menu-item>\n </sp-picker>\n `;\n};\n\nexport const iconsOnly = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n style=\"width: 100px\"\n value=\"3\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon-edit slot=\"icon\" label=\"Edit\"></sp-icon-edit>\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon-copy slot=\"icon\" label=\"Copy\"></sp-icon-copy>\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon-delete slot=\"icon\" label=\"Delete\"></sp-icon-delete>\n </sp-menu-item>\n </sp-picker>\n `;\n};\niconsOnly.args = {\n open: true,\n};\niconsOnly.decorators = [isOverlayOpen];\n\nexport const dynamicIcons = (args: StoryArgs): TemplateResult => {\n return html`\n <p>\n The icon displayed in the picker should match the icon of the\n selected menu item, even when the icons are updated dynamically.\n </p>\n <sp-field-label for=\"picker-quiet\" size=${ifDefined(args.size)}>\n Choose an action type...\n </sp-field-label>\n <sp-picker\n ${spreadProps(args)}\n id=\"picker-quiet\"\n @change=${handleChange(args)}\n label=\"Pick an action\"\n value=\"2\"\n >\n <sp-menu-item value=\"1\">\n <sp-icon\n slot=\"icon\"\n src=\"https://loremicon.com/rect/20/20/1/png\"\n ></sp-icon>\n Edit\n </sp-menu-item>\n <sp-menu-item value=\"2\">\n <sp-icon\n slot=\"icon\"\n src=\"https://loremicon.com/rect/20/20/2/png\"\n ></sp-icon>\n Copy\n </sp-menu-item>\n <sp-menu-item value=\"3\">\n <sp-icon\n slot=\"icon\"\n src=\"https://loremicon.com/rect/20/20/3/png\"\n ></sp-icon>\n Delete\n </sp-menu-item>\n </sp-picker>\n <sp-button\n @click=${() => {\n const icons = document.querySelectorAll('sp-icon');\n const seed = Math.round(Math.random() * 1000);\n icons.forEach((icon, index) => {\n icon.setAttribute(\n 'src',\n `https://loremicon.com/rect/20/20/${seed + index}/png`\n );\n });\n const picker = document.querySelector('sp-picker');\n if (picker) picker.open = true;\n }}\n >\n Change icons\n </sp-button>\n `;\n};\ndynamicIcons.args = {\n open: true,\n};\ndynamicIcons.decorators = [isOverlayOpen];\n\nexport const Open = (args: StoryArgs): TemplateResult => {\n return html`\n <style>\n fieldset {\n float: left;\n clear: left;\n margin-bottom: 15px;\n }\n </style>\n <fieldset class=\"backdrop-filter-test\">\n <sp-field-label for=\"picker-open\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-open\"\n label=\"Open picker\"\n ${spreadProps(args)}\n @change=${handleChange(args)}\n >\n <span slot=\"label\">\n Select a Country with a very long label, too long, in fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </fieldset>\n <fieldset>\n <sp-field-label for=\"picker-closed\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-closed\"\n label=\"Picker that displays below the options\"\n @change=${handleChange(args)}\n >\n <span slot=\"label\">\n Other menu that goes behind the open one\n </span>\n <sp-menu-item>Not so many options...</sp-menu-item>\n </sp-picker>\n </fieldset>\n `;\n};\nOpen.args = {\n open: true,\n};\nOpen.decorators = [isOverlayOpen];\n\nexport const OpenShowingEdgeCase = (args: StoryArgs): TemplateResult => {\n return html`\n <style>\n fieldset {\n float: left;\n clear: left;\n margin-bottom: 15px;\n }\n /* Enforce CSS stacking to test \"transition-behavior: allow-discrete\" */\n /* Breaks the story in non-[popover] supporting browsers */\n fieldset:nth-of-type(2) {\n position: relative;\n z-index: 2;\n }\n .backdrop-filter-test {\n backdrop-filter: saturate(80%);\n }\n </style>\n <p>\n In browser that do not support\n <code>[popover]</code>\n , the following \"open\"\n <code>sp-picker</code>\n will display behind both the closed\n <code>sp-picker</code>\n as well as the\n <code>fieldset</code>\n that contains it.\n </p>\n <p>\n Learn more about this situation in our\n <sp-link\n href=\"https://opensource.adobe.com/spectrum-web-components/components/overlay/#fallback-support\"\n >\n documentation site\n </sp-link>\n .\n </p>\n <fieldset class=\"backdrop-filter-test\">\n <sp-field-label for=\"picker-open\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-open\"\n label=\"Open picker\"\n ${spreadProps(args)}\n @change=${handleChange(args)}\n >\n <span slot=\"label\">\n Select a Country with a very long label, too long, in fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item>Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </fieldset>\n <fieldset>\n <sp-field-label for=\"picker-closed\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-closed\"\n label=\"Picker that displays below the options\"\n @change=${handleChange(args)}\n >\n <span slot=\"label\">\n Other menu that goes behind the open one\n </span>\n <sp-menu-item>Not so many options...</sp-menu-item>\n </sp-picker>\n </fieldset>\n `;\n};\nOpenShowingEdgeCase.args = {\n open: true,\n};\nOpenShowingEdgeCase.decorators = [isOverlayOpen];\nOpenShowingEdgeCase.swc_vrt = {\n skip: true,\n};\n\nOpenShowingEdgeCase.parameters = {\n // Disables Chromatic's snapshotting on a global level\n chromatic: { disableSnapshot: true },\n};\n\nexport const initialValue = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-field-label for=\"picker-initial\" size=${ifDefined(args.size)}>\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-initial\"\n @change=${handleChange(args)}\n value=\"item-2\"\n ${spreadProps(args)}\n >\n <span slot=\"label\">\n Select a Country with a very long label, too long in fact\n </span>\n <sp-menu-item value=\"item-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"item-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"item-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"item-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"item-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"item-6\">Make Work Path</sp-menu-item>\n </sp-picker>\n `;\n};\n\nexport const readonly = (args: StoryArgs): TemplateResult => {\n return html`\n <sp-picker\n @change=${handleChange(args)}\n readonly\n value=\"item-2\"\n ${spreadProps(args)}\n >\n <span slot=\"label\">\n Select a Country with a very long label, too long in fact\n </span>\n <sp-menu-item value=\"item-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"item-2\">Select Inverse</sp-menu-item>\n <sp-menu-item value=\"item-3\">Feather...</sp-menu-item>\n <sp-menu-item value=\"item-4\">Select and Mask...</sp-menu-item>\n <sp-menu-item value=\"item-5\">Save Selection</sp-menu-item>\n <sp-menu-item disabled value=\"item-6\">Make Work Path</sp-menu-item>\n </sp-picker>\n `;\n};\n\nexport const custom = (args: StoryArgs): TemplateResult => {\n const initialState = 'lb1-mo';\n return html`\n <sp-field-label for=\"picker-state\" size=${ifDefined(args.size)}>\n What state do you live in?\n </sp-field-label>\n <sp-picker\n style=\"width: 400px;\"\n @change=${handleChange(args)}\n id=\"picker-state\"\n label=\"Pick a state\"\n ${spreadProps(args)}\n value=${initialState}\n >\n ${states.map(\n (state) => html`\n <sp-menu-item\n id=${state.id}\n value=${state.id}\n ?selected=${state.id === initialState}\n >\n ${state.label}\n </sp-menu-item>\n `\n )}\n </sp-picker>\n <p>This is some text.</p>\n <p>This is some text.</p>\n <p>\n This is a\n <a href=\"#anchor\">link</a>\n .\n </p>\n `;\n};\ncustom.args = {\n open: true,\n};\ncustom.decorators = [isOverlayOpen];\n\nexport const BackgroundClickTest = (): TemplateResult => {\n return html`\n <div style=\"display: flex; flex-direction: column;\">\n <sp-picker size=\"l\">\n <sp-menu-item value=\"option-1\">Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n </sp-picker>\n <div style=\"position: absolute; bottom: 50px;\">\n <sp-button\n @click=${() => {\n console.log(\n 'this button should not have been clicked...'\n );\n }}\n size=\"l\"\n >\n I shall not be clicked\n </sp-button>\n </div>\n </div>\n `;\n};\nBackgroundClickTest.swc_vrt = {\n skip: true,\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["icons"]
7
7
  }
package/test/index.js CHANGED
@@ -27,6 +27,7 @@ import {
27
27
  import {
28
28
  Default,
29
29
  disabled,
30
+ dynamicIcons,
30
31
  iconsOnly,
31
32
  noVisibleLabel,
32
33
  slottedLabel,
@@ -1676,5 +1677,49 @@ export function runPickerTests() {
1676
1677
  ).to.not.be.null;
1677
1678
  });
1678
1679
  });
1680
+ describe("dynamic icons", function() {
1681
+ beforeEach(async function() {
1682
+ const test = await fixture(html`
1683
+ <div>${dynamicIcons(dynamicIcons.args)}</div>
1684
+ `);
1685
+ this.el = test.querySelector("sp-picker");
1686
+ await elementUpdated(this.el);
1687
+ });
1688
+ it("displays the same icon as the selected menu item", async function() {
1689
+ await nextFrame();
1690
+ await nextFrame();
1691
+ await nextFrame();
1692
+ const picker = this.el;
1693
+ const displayedIconBefore = picker.shadowRoot.querySelector("#icon > sp-icon");
1694
+ expect(displayedIconBefore).to.be.ok;
1695
+ const displayedIconSrcBefore = displayedIconBefore == null ? void 0 : displayedIconBefore.src;
1696
+ expect(displayedIconSrcBefore).to.be.a.string;
1697
+ const value = picker.value;
1698
+ expect(value).to.be.a.string;
1699
+ const selectedItem = picker.querySelector(
1700
+ `sp-menu-item[value="${value}"]`
1701
+ );
1702
+ expect(selectedItem).to.be.ok;
1703
+ const selectedItemIcon = selectedItem == null ? void 0 : selectedItem.querySelector("sp-icon");
1704
+ expect(selectedItemIcon).to.be.ok;
1705
+ const selectedItemIconSrcBefore = selectedItemIcon == null ? void 0 : selectedItemIcon.src;
1706
+ expect(selectedItemIconSrcBefore).to.be.a.string;
1707
+ expect(displayedIconSrcBefore).to.equal(selectedItemIconSrcBefore);
1708
+ const newSrc = "assets/new-icon.svg";
1709
+ if (selectedItemIcon) {
1710
+ selectedItemIcon.setAttribute("src", newSrc);
1711
+ }
1712
+ const selectedItemIconSrcAfter = selectedItemIcon == null ? void 0 : selectedItemIcon.src;
1713
+ expect(selectedItemIconSrcAfter).to.equal(newSrc);
1714
+ await nextFrame();
1715
+ await nextFrame();
1716
+ await nextFrame();
1717
+ const displayedIconAfter = picker.shadowRoot.querySelector("#icon > sp-icon");
1718
+ expect(displayedIconAfter).to.be.ok;
1719
+ const displayedIconSrcAfter = displayedIconAfter == null ? void 0 : displayedIconAfter.src;
1720
+ expect(displayedIconSrcAfter).to.be.a.string;
1721
+ expect(displayedIconSrcAfter).to.equal(newSrc);
1722
+ });
1723
+ });
1679
1724
  }
1680
1725
  //# sourceMappingURL=index.js.map
package/test/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { Picker } from '@spectrum-web-components/picker';\n\nimport type { MenuItem } from '@spectrum-web-components/menu';\nimport {\n aTimeout,\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/shared/src/focus-visible.js';\nimport { spy, stub } from 'sinon';\nimport {\n arrowDownEvent,\n arrowRightEvent,\n arrowUpEvent,\n testForLitDevWarnings,\n tEvent,\n} from '../../../test/testing-helpers.js';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n setViewport,\n} from '@web/test-runner-commands';\nimport {\n Default,\n disabled,\n iconsOnly,\n noVisibleLabel,\n slottedLabel,\n tooltip,\n} from '../stories/picker.stories.js';\nimport { M as pending } from '../stories/picker-pending.stories.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport {\n ignoreResizeObserverLoopError,\n fixture as styledFixture,\n} from '../../../test/testing-helpers.js';\nimport '@spectrum-web-components/picker/sp-picker.js';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport type { Menu } from '@spectrum-web-components/menu';\nimport { Tooltip } from '@spectrum-web-components/tooltip';\nimport { FieldLabel } from '@spectrum-web-components/field-label/src/FieldLabel.js';\nimport { isWebKit } from '@spectrum-web-components/shared';\nimport { SAFARI_FOCUS_RING_CLASS } from '@spectrum-web-components/picker/src/InteractionController.js';\n\nexport type TestablePicker = { optionsMenu: Menu };\n\nignoreResizeObserverLoopError(before, after);\n\nconst isMenuActiveElement = function (el: Picker): boolean {\n return el.shadowRoot.activeElement?.localName === 'sp-menu';\n};\n\nexport function runPickerTests(): void {\n let el: Picker;\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<HTMLDivElement>(html`\n <sp-theme scale=\"medium\" color=\"light\" system=\"spectrum\">\n <sp-field-label for=\"picker\">Where do you live?</sp-field-label>\n <sp-picker\n id=\"picker\"\n style=\"width: 200px; --spectrum-alias-ui-icon-chevron-size-100: 10px;\"\n >\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </sp-theme>\n `);\n\n return test.querySelector('sp-picker') as Picker;\n };\n describe('accessibility model', () => {\n it('accessible with \"<sp-field-label>\"', async function () {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n ${Default({\n onChange: () => {\n return;\n },\n })}\n </div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) =>\n node.name ===\n 'Select a Country with a very long label, too long, in fact Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n // Allow the snapshot to settle.\n await nextFrame();\n await nextFrame();\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Select Inverse Where do you live?'\n ),\n '`name` is the the selected item text plus the label text'\n ).to.not.be.null;\n });\n it('accessible with \"label\" attribute', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n ${noVisibleLabel({\n onChange: () => {\n return;\n },\n })}\n </div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n // Allow the snapshot to settle.\n await nextFrame();\n await nextFrame();\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Select Inverse Where do you live?'\n ),\n '`name` is the the selected item text plus the label text'\n ).to.not.be.null;\n });\n it('accessible with \"label\" slot', async function () {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n ${slottedLabel({\n onChange: () => {\n return;\n },\n })}\n </div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n type NamedNode = { name: string; description: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n let name = 'Where do you live?';\n\n let node = findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === name\n );\n\n expect(\n node,\n `node not available: ${JSON.stringify(snapshot, null, ' ')}`\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n // Allow the snapshot to settle.\n await nextFrame();\n await nextFrame();\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n name = 'Select Inverse Where do you live?';\n\n node = findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === name\n );\n\n expect(\n node,\n `node not available: ${JSON.stringify(snapshot, null, ' ')}`\n ).to.not.be.null;\n });\n });\n describe('standard', () => {\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n });\n it('loads accessibly', async () => {\n await expect(el).to.be.accessible();\n });\n it('closes accessibly', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.shadowRoot.activeElement).to.equal(el.button);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n const accessibleCloseButton = el.shadowRoot.querySelector(\n '.visually-hidden button'\n ) as HTMLButtonElement;\n expect(accessibleCloseButton).to.have.attribute(\n 'aria-label',\n 'Dismiss'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n accessibleCloseButton.click();\n await closed;\n\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.shadowRoot.activeElement).to.equal(el.button);\n expect(document.activeElement).to.eq(el);\n });\n it('accepts new selected item content', async () => {\n await nextFrame();\n await nextFrame();\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(option2);\n await elementUpdated(el);\n await aTimeout(150);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(\n 'Select Inverse'\n );\n let itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel1 = 'Invert Selection';\n option2.innerHTML = newLabel1;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(newLabel1);\n itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel2 = 'Other option';\n option2.childNodes[0].textContent = newLabel2;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(newLabel2);\n });\n it('accepts new selected item content when open', async () => {\n await nextFrame();\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(el);\n await aTimeout(150);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(\n 'Select Inverse'\n );\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n const itemUpdated = oneEvent(\n option2,\n 'sp-menu-item-added-or-updated'\n );\n option2.innerHTML = 'Invert Selection';\n await itemUpdated;\n await elementUpdated(el);\n await aTimeout(150);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(\n 'Invert Selection'\n );\n });\n it('unsets value when children removed', async () => {\n await nextFrame();\n el.value = 'option-2';\n\n await elementUpdated(el);\n await aTimeout(150);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(\n 'Select Inverse'\n );\n\n const items = el.querySelectorAll('sp-menu-item');\n items.forEach((item) => {\n item.remove();\n });\n await elementUpdated(el);\n await nextFrame();\n await aTimeout(150);\n expect(\n (el as unknown as TestablePicker).optionsMenu.childItems.length\n ).to.equal(0);\n if ('showPopover' in document.createElement('div')) {\n return;\n }\n expect(el.value).to.equal('');\n expect((el.button.textContent || '').trim()).to.not.include(\n 'Select Inverse'\n );\n });\n it('accepts a new item and value at the same time', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n await elementUpdated(el);\n\n el.value = 'option-new';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-new');\n });\n it('accepts a new item that can be selected', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n await nextFrame();\n await elementUpdated(el);\n\n let opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n const close = oneEvent(el, 'sp-closed');\n item.click();\n await close;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'first time').to.equal('option-new');\n\n opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'second time').to.equal('option-new');\n });\n it('manages its \"name\" value in the accessibility tree', async () => {\n await nextFrame();\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Select Inverse Where do you live?'\n ),\n '`name` is the selected item text plus the label text'\n ).to.not.be.null;\n });\n it('manages `aria-activedescendant`', async () => {\n const firstItem = el.querySelector('sp-menu-item:nth-child(1)');\n const secondItem = el.querySelector('sp-menu-item:nth-child(2)');\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n expect(\n (el as unknown as TestablePicker).optionsMenu.getAttribute(\n 'aria-activedescendant'\n )\n ).to.equal(firstItem?.id);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(\n (el as unknown as TestablePicker).optionsMenu.getAttribute(\n 'aria-activedescendant'\n )\n ).to.equal(secondItem?.id);\n });\n it('renders invalid accessibly', async () => {\n el.invalid = true;\n await elementUpdated(el);\n\n expect(el.invalid).to.be.true;\n await expect(el).to.be.accessible();\n });\n it('renders selection accessibly', async () => {\n el.value = 'option-2';\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('opens with visible focus on a menu item on `DownArrow`', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n\n expect(firstItem.focused, 'should not visually focused').to.be\n .false;\n\n el.focus();\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowRight' });\n await sendKeys({ press: 'ArrowLeft' });\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'should be visually focused').to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.false;\n expect(\n document.activeElement === el,\n `focused ${document.activeElement?.localName} instead of back on Picker`\n ).to.be.true;\n expect(\n el.shadowRoot.activeElement === el.button,\n `focused ${el.shadowRoot.activeElement?.localName} instead of back on button`\n ).to.be.true;\n await waitUntil(\n () => !firstItem.focused,\n 'finally, not visually focused'\n );\n });\n it('opens with visible focus on a menu item on `Space`', async function () {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n\n expect(firstItem.focused, 'should not visually focused').to.be\n .false;\n\n el.focus();\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowRight' });\n await sendKeys({ press: 'ArrowLeft' });\n await sendKeys({ press: 'Space' });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'should be visually focused').to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.false;\n expect(\n document.activeElement === el,\n `focused ${document.activeElement?.localName} instead of back on Picker`\n ).to.be.true;\n expect(\n el.shadowRoot.activeElement === el.button,\n `focused ${el.shadowRoot.activeElement?.localName} instead of back on button`\n ).to.be.true;\n await waitUntil(\n () => !firstItem.focused,\n 'finally, not visually focused'\n );\n });\n it('opens, on click, without visible focus on a menu item', async () => {\n await nextFrame();\n await nextFrame();\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const boundingRect = el.button.getBoundingClientRect();\n\n expect(firstItem.focused, 'not visually focused').to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'still not visually focused').to.be.false;\n });\n it('opens and selects in a single pointer button interaction', async () => {\n await nextFrame();\n await nextFrame();\n const thirdItem = el.querySelector(\n 'sp-menu-item:nth-of-type(3)'\n ) as MenuItem;\n const boundingRect = el.button.getBoundingClientRect();\n\n expect(el.value).to.not.equal(thirdItem.value);\n const opened = oneEvent(el, 'sp-opened');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n {\n type: 'down',\n },\n ],\n });\n await opened;\n\n const thirdItemRect = thirdItem.getBoundingClientRect();\n const closed = oneEvent(el, 'sp-closed');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n thirdItemRect.x + thirdItemRect.width / 2,\n thirdItemRect.y + thirdItemRect.height / 2,\n ],\n },\n {\n type: 'up',\n },\n ],\n });\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.value).to.equal(thirdItem.value);\n });\n it('opens/closes multiple times', async () => {\n await nextFrame();\n await nextFrame();\n expect(el.open).to.be.false;\n const boundingRect = el.button.getBoundingClientRect();\n let opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n expect(el.open).to.be.true;\n\n let closed = oneEvent(el, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n expect(el.open).to.be.false;\n\n opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n expect(el.open).to.be.true;\n\n closed = oneEvent(el, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n expect(el.open).to.be.false;\n });\n it('closes when becoming disabled', async () => {\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('closes when clicking away', async () => {\n el.id = 'closing';\n const other = document.createElement('div');\n document.body.append(other);\n\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n const closed = oneEvent(el, 'sp-closed');\n other.click();\n closed;\n await elementUpdated(el);\n\n other.remove();\n });\n it('selects', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n it('re-selects', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n let closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('dispatches bubbling and composed events', async () => {\n const changeSpy = spy();\n const parent = el.parentElement as HTMLElement;\n (parent.shadowRoot as ShadowRoot).append(el);\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n parent.addEventListener('change', () => changeSpy());\n\n expect(el.value).to.equal('');\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.value).to.equal(secondItem.value);\n expect(changeSpy.calledOnce).to.be.true;\n });\n it('can have selection prevented', async () => {\n const preventChangeSpy = spy();\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (event: Event): void => {\n event.preventDefault();\n preventChangeSpy();\n });\n\n const changed = oneEvent(el, 'change');\n secondItem.click();\n // The `change` event is dispatched _after_ the `updateComplete` promise.\n await changed;\n expect(\n preventChangeSpy.calledOnce,\n preventChangeSpy.callCount.toString()\n ).to.be.true;\n expect(secondItem.selected, 'selection prevented').to.be.false;\n expect(el.open).to.be.true;\n });\n it('can throw focus after `change`', async () => {\n const input = document.createElement('input');\n document.body.append(input);\n\n await elementUpdated(el);\n\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (): void => {\n input.focus();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.value, 'value changed').to.equal('option-2');\n expect(secondItem.selected, 'selected changed').to.be.true;\n await waitUntil(\n () => document.activeElement === input,\n 'focus throw'\n );\n input.remove();\n });\n it('opens on ArrowUp', async () => {\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n button.dispatchEvent(tEvent());\n await elementUpdated(el);\n\n expect(el.open, 'still closed').to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n button.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowUp').to.be.true;\n await opened;\n\n const closed = oneEvent(el, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(el.open).to.be.false;\n });\n it('opens on ArrowDown', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n button.dispatchEvent(arrowDownEvent());\n await opened;\n\n expect(el.open, 'open by ArrowDown').to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('quick selects on ArrowLeft/Right', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () =>\n (el as unknown as { menuItems: MenuItem[] }).menuItems\n .length === 6\n );\n\n await sendKeys({\n press: 'ArrowLeft',\n });\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n await sendKeys({\n press: 'ArrowLeft',\n });\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(1);\n await sendKeys({\n press: 'ArrowRight',\n });\n\n await nextFrame();\n await nextFrame();\n expect(selectionSpy.calledWith('option-2'));\n\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n expect(selectionSpy.calledWith('Save Selection'));\n expect(selectionSpy.calledWith('Make Work Path')).to.be.false;\n expect(selectionSpy.callCount).to.equal(5);\n });\n it('quick selects first item on ArrowRight when no value', async () => {\n await nextFrame();\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n });\n it('loads', async () => {\n expect(el).to.not.be.undefined;\n });\n it('closes when focusing away from the menu', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const thirdItem = el.querySelector(\n 'sp-menu-item:nth-of-type(3)'\n ) as MenuItem;\n const button = el.button;\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n\n el.focus();\n await sendKeys({ press: 'Tab' });\n expect(document.activeElement === input).to.be.true;\n await sendKeys({ press: 'Shift+Tab' });\n expect(document.activeElement === el).to.be.true;\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'Enter' });\n await opened;\n await elementUpdated(el);\n\n await waitUntil(\n () => firstItem.focused,\n 'The first items should have become focused visually.'\n );\n\n await sendKeys({ press: 'ArrowDown' });\n await sendKeys({ press: 'ArrowDown' });\n expect(thirdItem.focused).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n button.focus();\n await closed;\n expect(isMenuActiveElement(el)).to.be.false;\n expect(el.open).to.be.false;\n });\n it('does not listen to streaming `Enter` keydown', async () => {\n const openSpy = spy();\n const closedSpy = spy();\n el.addEventListener('sp-opened', () => openSpy());\n el.addEventListener('sp-closed', () => closedSpy());\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const thirdItem = el.querySelector(\n 'sp-menu-item:nth-of-type(3)'\n ) as MenuItem;\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n\n el.focus();\n await sendKeys({ press: 'Tab' });\n expect(document.activeElement === input).to.be.true;\n await sendKeys({ press: 'Shift+Tab' });\n expect(document.activeElement === el).to.be.true;\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ down: 'Enter' });\n await opened;\n await aTimeout(300);\n expect(openSpy.callCount).to.equal(1);\n await sendKeys({ up: 'Enter' });\n\n await waitUntil(\n () => firstItem.focused,\n 'The first items should have become focused visually.'\n );\n\n await sendKeys({ press: 'ArrowDown' });\n await sendKeys({ press: 'ArrowDown' });\n expect(thirdItem.focused).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n sendKeys({ down: 'Enter' });\n await closed;\n await aTimeout(300);\n\n expect(el.value).to.equal(thirdItem.value);\n expect(openSpy.callCount).to.equal(1);\n expect(closedSpy.callCount).to.equal(1);\n await sendKeys({ up: 'Enter' });\n });\n it('allows tabing to close', async () => {\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await nextFrame();\n\n expect(el.open).to.be.true;\n el.focus();\n\n const closed = oneEvent(el, 'sp-closed');\n sendKeys({ press: 'Tab' });\n await closed;\n\n expect(el.open, 'closes').to.be.false;\n });\n describe('tab order', () => {\n let input1: HTMLInputElement;\n let input2: HTMLInputElement;\n beforeEach(() => {\n const surroundingInput = (): HTMLInputElement => {\n const input = document.createElement('input');\n input.type = 'text';\n input.tabIndex = 0;\n return input;\n };\n input1 = surroundingInput();\n input2 = surroundingInput();\n\n el.insertAdjacentElement('beforebegin', input1);\n el.insertAdjacentElement('afterend', input2);\n });\n afterEach(() => {\n input1.remove();\n input2.remove();\n });\n it('tabs forward through the element', async () => {\n // start at input1\n input1.focus();\n await nextFrame();\n expect(document.activeElement === input1, 'focuses input 1').to\n .true;\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement === el, 'focuses el').to.be.true;\n // tab through the picker to input2\n focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n expect(document.activeElement === input2, 'focuses input 2').to\n .true;\n });\n it('shift+tabs backwards through the element', async () => {\n // start at input1\n input2.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses input 2').to.equal(\n input2\n );\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement, 'focuses el').to.equal(el);\n // tab through the picker to input2\n focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n expect(document.activeElement, 'focuses input 1').to.equal(\n input1\n );\n });\n it('can close and immediately tab to the next tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(el),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input2).to.be.true;\n });\n it('can close and immediate shift+tab to the previous tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement === el, 'focuses el').to.be.true;\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(el),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input1, 'focus');\n sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input1).to.be.true;\n });\n });\n it('does not open when [readonly]', async () => {\n el.readonly = true;\n\n await elementUpdated(el);\n\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('scrolls selected into view on open', async () => {\n // the Popover is transient, you need to be able to apply custom styles to it...\n const styles = document.createElement('style');\n styles.innerText = 'sp-popover { height: 40px; }';\n el.shadowRoot.append(styles);\n\n const firstItem = el.querySelector(\n 'sp-menu-item:first-child'\n ) as MenuItem;\n const lastItem = el.querySelector(\n 'sp-menu-item:last-child'\n ) as MenuItem;\n lastItem.disabled = false;\n el.value = lastItem.value;\n\n await elementUpdated(el);\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await waitUntil(\n () => isMenuActiveElement(el),\n 'first item focused'\n );\n const getParentOffset = (el: HTMLElement): number => {\n const parentScroll = (\n (el as HTMLElement & { assignedSlot: HTMLSlotElement })\n .assignedSlot.parentElement as HTMLElement\n ).scrollTop;\n const parentOffset = el.offsetTop - parentScroll;\n return parentOffset;\n };\n expect(getParentOffset(lastItem)).to.be.lessThan(40);\n expect(getParentOffset(firstItem)).to.be.lessThan(-1);\n\n lastItem.dispatchEvent(\n new FocusEvent('focusin', { bubbles: true })\n );\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n await nextFrame();\n expect(getParentOffset(lastItem)).to.be.greaterThan(40);\n expect(getParentOffset(firstItem)).to.be.greaterThan(-1);\n });\n it('manages focus-ring styles', async () => {\n if (!isWebKit()) {\n return;\n }\n /**\n * This is a hack to set the `isMobile` property to true so that we can test the MobileController\n */\n el.isMobile.matches = true;\n el.bindEvents();\n\n await setViewport({ width: 360, height: 640 });\n // Allow viewport update to propagate.\n await nextFrame();\n\n let opened = oneEvent(el, 'sp-opened');\n\n const boundingRect = el.button.getBoundingClientRect();\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n\n await opened;\n\n const tray = el.shadowRoot.querySelector('sp-tray');\n expect(tray).to.not.be.null;\n\n // Make a selection\n let closed = oneEvent(el, 'sp-closed');\n\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n firstItem.click();\n\n await elementUpdated(el);\n await closed;\n\n // expect the tray to be closed\n expect(el.open).to.be.false;\n\n const button = el.shadowRoot.querySelector(\n '#button'\n ) as HTMLButtonElement;\n expect(button).to.not.be.null;\n\n // we should have SAFARI_FOCUS_RING_CLASS in the classList\n expect(button.classList.contains(SAFARI_FOCUS_RING_CLASS)).to.be\n .true;\n\n // picker should still have focus\n expect(document.activeElement === el).to.be.true;\n\n // click outside (0,0)\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [0, 0],\n },\n ],\n });\n\n // picker should not have focus\n expect(document.activeElement === el).to.be.false;\n\n // Let's use keyboard to open the tray now\n opened = oneEvent(el, 'sp-opened');\n await sendKeys({\n press: 'Tab',\n });\n await sendKeys({\n press: 'Enter',\n });\n await elementUpdated(el);\n await opened;\n\n // Make a selection again\n closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await elementUpdated(el);\n await closed;\n\n // expect the tray to be closed\n expect(el.open).to.be.false;\n\n // we should not have SAFARI_FOCUS_RING_CLASS in the classList\n expect(button.classList.contains(SAFARI_FOCUS_RING_CLASS)).to.be\n .false;\n });\n });\n describe('grouped', async () => {\n const groupedFixture = async (): Promise<Picker> => {\n return fixture<Picker>(html`\n <sp-picker\n quiet\n label=\"I would like to use Spectrum Web Components\"\n value=\"0\"\n >\n <sp-menu-group>\n <span slot=\"header\">Timeline</span>\n <sp-menu-item value=\"0\" id=\"should-be-selected\">\n Immediately\n </sp-menu-item>\n <sp-menu-item value=\"1\">\n I'm already using them\n </sp-menu-item>\n <sp-menu-item value=\"2\">Soon</sp-menu-item>\n <sp-menu-item value=\"3\">\n As part of my next project\n </sp-menu-item>\n <sp-menu-item value=\"4\">In the future</sp-menu-item>\n </sp-menu-group>\n </sp-picker>\n `);\n };\n beforeEach(async () => {\n el = await groupedFixture();\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n });\n it('selects the item with a matching value in a group', async () => {\n const item = el.querySelector('#should-be-selected') as MenuItem;\n expect(item.selected).to.be.true;\n });\n });\n describe('slotted label', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(html`\n <div>\n <sp-field-label for=\"picker-slotted\">\n Where do you live?\n </sp-field-label>\n <sp-picker id=\"picker-slotted\">\n <span slot=\"label\">\n Select a Country with a very long label, too long in\n fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `);\n\n return test.querySelector('sp-picker') as Picker;\n };\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n await nextFrame();\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n\n it('loads accessibly w/ slotted label', async () => {\n await expect(el).to.be.accessible();\n });\n });\n describe('Dev mode', () => {\n let consoleWarnStub!: ReturnType<typeof stub>;\n before(() => {\n window.__swc.verbose = true;\n consoleWarnStub = stub(console, 'warn');\n });\n afterEach(() => {\n consoleWarnStub.resetHistory();\n });\n after(async () => {\n window.__swc.verbose = false;\n consoleWarnStub.restore();\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(html`\n <div>\n <sp-field-label for=\"picker-deprecated\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-deprecated\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-menu>\n </sp-picker>\n </div>\n `);\n\n return test.querySelector('sp-picker') as Picker;\n };\n it('does not warn in Dev Mode when accessible elements leveraged', async () => {\n const test = await fixture<Picker>(html`\n <div>\n <sp-field-label for=\"test\">Test label</sp-field-label>\n <sp-picker id=\"test\">\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n </sp-picker>\n </div>\n `);\n\n el = test.querySelector('sp-picker') as Picker;\n\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n expect(consoleWarnStub.called).to.be.false;\n });\n it('warns in Dev Mode when accessible attributes are not leveraged', async function () {\n this.retries(0);\n el = await fixture<Picker>(html`\n <sp-picker>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n </sp-picker>\n `);\n\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n (spyCall.args.at(0) as string).includes('accessible'),\n 'confirm accessibility-centric message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-picker',\n type: 'accessibility',\n level: 'default',\n },\n });\n });\n describe('deprecated', () => {\n it('warns in Dev Mode of deprecated `<sp-menu>` usage', async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n (spyCall.args.at(0) as string).includes('<sp-menu>'),\n 'confirm <sp-menu>-centric message'\n ).to.be.true;\n expect(\n spyCall.args.at(-1),\n 'confirm `data` shape'\n ).to.deep.equal({\n data: {\n localName: 'sp-picker',\n type: 'api',\n level: 'deprecation',\n },\n });\n });\n });\n describe('Dev mode ignored', () => {\n const { ignoreWarningLocalNames } = window.__swc;\n before(() => {\n window.__swc.ignoreWarningLocalNames = {\n 'sp-picker': true,\n };\n });\n before(() => {\n window.__swc.ignoreWarningLocalNames = ignoreWarningLocalNames;\n });\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n await nextFrame();\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('selects with deprecated syntax', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n });\n });\n testForLitDevWarnings(async () => await pickerFixture());\n it('manages its \"name\" value in the accessibility tree when [icons-only]', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>${iconsOnly({})}</div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n await elementUpdated(el);\n await nextFrame();\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Delete Choose an action type...'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = '2';\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n expect(el.value).to.equal('2');\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Copy Choose an action type...'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('toggles between pickers', async () => {\n const el2 = await pickerFixture();\n const el1 = await pickerFixture();\n\n (el1.parentElement as HTMLElement).style.float = 'left';\n (el2.parentElement as HTMLElement).style.float = 'left';\n el1.id = 'away';\n el2.id = 'other';\n\n await Promise.all([elementUpdated(el1), elementUpdated(el2)]);\n\n expect(el1.open, 'closed 1').to.be.false;\n expect(el2.open, 'closed 1').to.be.false;\n let open = oneEvent(el1, 'sp-opened');\n el1.click();\n await open;\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n open = oneEvent(el2, 'sp-opened');\n let closed = oneEvent(el1, 'sp-closed');\n el2.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.false;\n expect(el2.open).to.be.true;\n\n open = oneEvent(el1, 'sp-opened');\n closed = oneEvent(el2, 'sp-closed');\n el1.click();\n await Promise.all([open, closed]);\n expect(el2.open).to.be.false;\n expect(el1.open).to.be.true;\n\n closed = oneEvent(el1, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(el1.open).to.be.false;\n });\n it('displays selected item text by default', async () => {\n const el = await fixture<Picker>(html`\n <sp-picker\n value=\"inverse\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `);\n await nextFrame();\n\n await elementUpdated(el);\n await waitUntil(\n () => el.selectedItem?.itemText === 'Select Inverse',\n `Selected Item Text: ${el.selectedItem?.itemText}`\n );\n\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n expect(el.value).to.equal('inverse');\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n\n el.focus();\n await elementUpdated(el);\n expect(\n el === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'Enter' });\n await opened;\n\n expect(\n el === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n expect(\n (el as unknown as TestablePicker).optionsMenu ===\n el.shadowRoot.activeElement,\n `activeElement is ${el.shadowRoot.activeElement?.localName}`\n ).to.be.true;\n\n expect(firstItem.focused, 'firstItem NOT \"focused\"').to.be.false;\n expect(secondItem.focused, 'secondItem \"focused\"').to.be.true;\n expect(\n (el as unknown as TestablePicker).optionsMenu.getAttribute(\n 'aria-activedescendant'\n )\n ).to.equal(secondItem.id);\n });\n it('resets value when item not available', async () => {\n const el = await fixture<Picker>(html`\n <sp-picker\n value=\"missing\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `);\n\n await elementUpdated(el);\n await waitUntil(() => el.value === '');\n\n expect(el.value).to.equal('');\n expect(el.selectedItem?.itemText).to.be.undefined;\n });\n it('allows event listeners on child items', async () => {\n const mouseenterSpy = spy();\n const handleMouseenter = (): void => mouseenterSpy();\n const el = await fixture<Picker>(html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\" @mouseenter=${handleMouseenter}>\n Deselect Text\n </sp-menu-item>\n </sp-picker>\n `);\n\n await elementUpdated(el);\n\n const hoverEl = el.querySelector('sp-menu-item') as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n hoverEl.dispatchEvent(new MouseEvent('mouseenter'));\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(mouseenterSpy.calledOnce).to.be.true;\n });\n it('dispatches events on open/close', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const handleOpenedSpy = (event: Event): void => openedSpy(event);\n const handleClosedSpy = (event: Event): void => closedSpy(event);\n\n const el = await fixture<Picker>(html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n @sp-opened=${handleOpenedSpy}\n @sp-closed=${handleClosedSpy}\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n </sp-picker>\n `);\n\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(openedSpy.calledOnce).to.be.true;\n expect(closedSpy.calledOnce).to.be.false;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(closedSpy.calledOnce).to.be.true;\n });\n it('closes tooltip on button blur', async () => {\n const test = await styledFixture(html`\n <div>${tooltip(tooltip.args)}</div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(el);\n const input1 = document.createElement('input');\n const input2 = document.createElement('input');\n const tooltipEl = el.querySelector('sp-tooltip') as Tooltip;\n el.insertAdjacentElement('beforebegin', input1);\n el.insertAdjacentElement('afterend', input2);\n input1.focus();\n expect(document.activeElement === input1).to.be.true;\n const tooltipOpened = oneEvent(el, 'sp-opened');\n await sendKeys({\n press: 'Tab',\n });\n await tooltipOpened;\n expect(\n document.activeElement === el,\n `Actually, ${document.activeElement?.localName}`\n ).to.be.true;\n expect(tooltipEl.open).to.be.true;\n expect(el.open).to.be.false;\n expect(el.focused).to.be.true;\n\n const menuOpen = oneEvent(el, 'sp-opened');\n const tooltipClosed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'ArrowDown',\n });\n await menuOpen;\n await tooltipClosed;\n expect(document.activeElement === el).to.be.true;\n expect(tooltipEl.open).to.be.false;\n expect(el.open).to.be.true;\n\n const menuClosed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Tab',\n });\n await menuClosed;\n expect(document.activeElement === el).to.be.false;\n expect(tooltipEl.open).to.be.false;\n expect(el.open).to.be.false;\n });\n describe('disabled', function () {\n beforeEach(async function () {\n const test = await fixture(html`\n <div>${disabled(disabled.args)}</div>\n `);\n this.label = test.querySelector('sp-field-label') as FieldLabel;\n this.el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(this.elel);\n });\n it('does not recieve focus from an `<sp-field-label>`', async function () {\n expect(this.el.disabled).to.be.true;\n expect(this.el.focused).to.be.false;\n\n this.label.click();\n await elementUpdated(this.el);\n\n expect(this.el.focused).to.be.false;\n });\n it('does not open from `click()`', async function () {\n expect(this.el.disabled).to.be.true;\n expect(this.el.open).to.be.false;\n\n this.el.click();\n await elementUpdated(this.el);\n\n expect(this.el.open).to.be.false;\n });\n it('does not open from `sendMouse()`', async function () {\n expect(this.el.disabled).to.be.true;\n expect(this.el.open).to.be.false;\n\n const boundingRect = this.el.button.getBoundingClientRect();\n\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n // Synthetic delay for \"open\" but not \"sp-open\" as it would never come.\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(this.el.open).to.be.false;\n });\n });\n describe('pending', function () {\n beforeEach(async function () {\n const test = await fixture(html`\n <div>${pending({ pending: true })}</div>\n `);\n this.label = test.querySelector('sp-field-label') as FieldLabel;\n this.el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(this.elel);\n });\n it('receives focus from an `<sp-field-label>`', async function () {\n expect(this.el.focused).to.be.false;\n\n this.label.click();\n await elementUpdated(this.el);\n\n expect(this.el.focused).to.be.true;\n });\n it('does not open from `click()`', async function () {\n expect(this.el.open).to.be.false;\n\n this.el.click();\n await elementUpdated(this.el);\n\n expect(this.el.open).to.be.false;\n });\n it('manages its \"name\" value in the accessibility tree when [pending]', async () => {\n type NamedNode = { name: string; role: string };\n const snapshot = (await a11ySnapshot(\n {}\n )) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) =>\n node.name ===\n 'Pending Choose your neighborhood Where do you live?'\n )\n ).to.not.be.null;\n });\n });\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport type { Picker } from '@spectrum-web-components/picker';\n\nimport type { MenuItem } from '@spectrum-web-components/menu';\nimport {\n aTimeout,\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/shared/src/focus-visible.js';\nimport { spy, stub } from 'sinon';\nimport {\n arrowDownEvent,\n arrowRightEvent,\n arrowUpEvent,\n testForLitDevWarnings,\n tEvent,\n} from '../../../test/testing-helpers.js';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n setViewport,\n} from '@web/test-runner-commands';\nimport {\n Default,\n disabled,\n dynamicIcons,\n iconsOnly,\n noVisibleLabel,\n slottedLabel,\n tooltip,\n} from '../stories/picker.stories.js';\nimport { M as pending } from '../stories/picker-pending.stories.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport {\n ignoreResizeObserverLoopError,\n fixture as styledFixture,\n} from '../../../test/testing-helpers.js';\nimport '@spectrum-web-components/picker/sp-picker.js';\nimport '@spectrum-web-components/field-label/sp-field-label.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport type { Icon } from '@spectrum-web-components/icon';\nimport type { Menu } from '@spectrum-web-components/menu';\nimport { Tooltip } from '@spectrum-web-components/tooltip';\nimport { FieldLabel } from '@spectrum-web-components/field-label/src/FieldLabel.js';\nimport { isWebKit } from '@spectrum-web-components/shared';\nimport { SAFARI_FOCUS_RING_CLASS } from '@spectrum-web-components/picker/src/InteractionController.js';\n\nexport type TestablePicker = { optionsMenu: Menu };\n\nignoreResizeObserverLoopError(before, after);\n\nconst isMenuActiveElement = function (el: Picker): boolean {\n return el.shadowRoot.activeElement?.localName === 'sp-menu';\n};\n\nexport function runPickerTests(): void {\n let el: Picker;\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<HTMLDivElement>(html`\n <sp-theme scale=\"medium\" color=\"light\" system=\"spectrum\">\n <sp-field-label for=\"picker\">Where do you live?</sp-field-label>\n <sp-picker\n id=\"picker\"\n style=\"width: 200px; --spectrum-alias-ui-icon-chevron-size-100: 10px;\"\n >\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </sp-theme>\n `);\n\n return test.querySelector('sp-picker') as Picker;\n };\n describe('accessibility model', () => {\n it('accessible with \"<sp-field-label>\"', async function () {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n ${Default({\n onChange: () => {\n return;\n },\n })}\n </div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) =>\n node.name ===\n 'Select a Country with a very long label, too long, in fact Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n // Allow the snapshot to settle.\n await nextFrame();\n await nextFrame();\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Select Inverse Where do you live?'\n ),\n '`name` is the the selected item text plus the label text'\n ).to.not.be.null;\n });\n it('accessible with \"label\" attribute', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n ${noVisibleLabel({\n onChange: () => {\n return;\n },\n })}\n </div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n // Allow the snapshot to settle.\n await nextFrame();\n await nextFrame();\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Select Inverse Where do you live?'\n ),\n '`name` is the the selected item text plus the label text'\n ).to.not.be.null;\n });\n it('accessible with \"label\" slot', async function () {\n const test = await fixture<HTMLDivElement>(html`\n <div>\n ${slottedLabel({\n onChange: () => {\n return;\n },\n })}\n </div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n type NamedNode = { name: string; description: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n let name = 'Where do you live?';\n\n let node = findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === name\n );\n\n expect(\n node,\n `node not available: ${JSON.stringify(snapshot, null, ' ')}`\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n // Allow the snapshot to settle.\n await nextFrame();\n await nextFrame();\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n name = 'Select Inverse Where do you live?';\n\n node = findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === name\n );\n\n expect(\n node,\n `node not available: ${JSON.stringify(snapshot, null, ' ')}`\n ).to.not.be.null;\n });\n });\n describe('standard', () => {\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n });\n it('loads accessibly', async () => {\n await expect(el).to.be.accessible();\n });\n it('closes accessibly', async () => {\n el.focus();\n await elementUpdated(el);\n expect(el.shadowRoot.activeElement).to.equal(el.button);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n const accessibleCloseButton = el.shadowRoot.querySelector(\n '.visually-hidden button'\n ) as HTMLButtonElement;\n expect(accessibleCloseButton).to.have.attribute(\n 'aria-label',\n 'Dismiss'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n accessibleCloseButton.click();\n await closed;\n\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.shadowRoot.activeElement).to.equal(el.button);\n expect(document.activeElement).to.eq(el);\n });\n it('accepts new selected item content', async () => {\n await nextFrame();\n await nextFrame();\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(option2);\n await elementUpdated(el);\n await aTimeout(150);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(\n 'Select Inverse'\n );\n let itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel1 = 'Invert Selection';\n option2.innerHTML = newLabel1;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(newLabel1);\n itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel2 = 'Other option';\n option2.childNodes[0].textContent = newLabel2;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(newLabel2);\n });\n it('accepts new selected item content when open', async () => {\n await nextFrame();\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(el);\n await aTimeout(150);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(\n 'Select Inverse'\n );\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n const itemUpdated = oneEvent(\n option2,\n 'sp-menu-item-added-or-updated'\n );\n option2.innerHTML = 'Invert Selection';\n await itemUpdated;\n await elementUpdated(el);\n await aTimeout(150);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(\n 'Invert Selection'\n );\n });\n it('unsets value when children removed', async () => {\n await nextFrame();\n el.value = 'option-2';\n\n await elementUpdated(el);\n await aTimeout(150);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.include(\n 'Select Inverse'\n );\n\n const items = el.querySelectorAll('sp-menu-item');\n items.forEach((item) => {\n item.remove();\n });\n await elementUpdated(el);\n await nextFrame();\n await aTimeout(150);\n expect(\n (el as unknown as TestablePicker).optionsMenu.childItems.length\n ).to.equal(0);\n if ('showPopover' in document.createElement('div')) {\n return;\n }\n expect(el.value).to.equal('');\n expect((el.button.textContent || '').trim()).to.not.include(\n 'Select Inverse'\n );\n });\n it('accepts a new item and value at the same time', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n await elementUpdated(el);\n\n el.value = 'option-new';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-new');\n });\n it('accepts a new item that can be selected', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n await nextFrame();\n await elementUpdated(el);\n\n let opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n const close = oneEvent(el, 'sp-closed');\n item.click();\n await close;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'first time').to.equal('option-new');\n\n opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'second time').to.equal('option-new');\n });\n it('manages its \"name\" value in the accessibility tree', async () => {\n await nextFrame();\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Select Inverse Where do you live?'\n ),\n '`name` is the selected item text plus the label text'\n ).to.not.be.null;\n });\n it('manages `aria-activedescendant`', async () => {\n const firstItem = el.querySelector('sp-menu-item:nth-child(1)');\n const secondItem = el.querySelector('sp-menu-item:nth-child(2)');\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n expect(\n (el as unknown as TestablePicker).optionsMenu.getAttribute(\n 'aria-activedescendant'\n )\n ).to.equal(firstItem?.id);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(\n (el as unknown as TestablePicker).optionsMenu.getAttribute(\n 'aria-activedescendant'\n )\n ).to.equal(secondItem?.id);\n });\n it('renders invalid accessibly', async () => {\n el.invalid = true;\n await elementUpdated(el);\n\n expect(el.invalid).to.be.true;\n await expect(el).to.be.accessible();\n });\n it('renders selection accessibly', async () => {\n el.value = 'option-2';\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('opens with visible focus on a menu item on `DownArrow`', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n\n expect(firstItem.focused, 'should not visually focused').to.be\n .false;\n\n el.focus();\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowRight' });\n await sendKeys({ press: 'ArrowLeft' });\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'should be visually focused').to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.false;\n expect(\n document.activeElement === el,\n `focused ${document.activeElement?.localName} instead of back on Picker`\n ).to.be.true;\n expect(\n el.shadowRoot.activeElement === el.button,\n `focused ${el.shadowRoot.activeElement?.localName} instead of back on button`\n ).to.be.true;\n await waitUntil(\n () => !firstItem.focused,\n 'finally, not visually focused'\n );\n });\n it('opens with visible focus on a menu item on `Space`', async function () {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n\n expect(firstItem.focused, 'should not visually focused').to.be\n .false;\n\n el.focus();\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowRight' });\n await sendKeys({ press: 'ArrowLeft' });\n await sendKeys({ press: 'Space' });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'should be visually focused').to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.false;\n expect(\n document.activeElement === el,\n `focused ${document.activeElement?.localName} instead of back on Picker`\n ).to.be.true;\n expect(\n el.shadowRoot.activeElement === el.button,\n `focused ${el.shadowRoot.activeElement?.localName} instead of back on button`\n ).to.be.true;\n await waitUntil(\n () => !firstItem.focused,\n 'finally, not visually focused'\n );\n });\n it('opens, on click, without visible focus on a menu item', async () => {\n await nextFrame();\n await nextFrame();\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const boundingRect = el.button.getBoundingClientRect();\n\n expect(firstItem.focused, 'not visually focused').to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'still not visually focused').to.be.false;\n });\n it('opens and selects in a single pointer button interaction', async () => {\n await nextFrame();\n await nextFrame();\n const thirdItem = el.querySelector(\n 'sp-menu-item:nth-of-type(3)'\n ) as MenuItem;\n const boundingRect = el.button.getBoundingClientRect();\n\n expect(el.value).to.not.equal(thirdItem.value);\n const opened = oneEvent(el, 'sp-opened');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n {\n type: 'down',\n },\n ],\n });\n await opened;\n\n const thirdItemRect = thirdItem.getBoundingClientRect();\n const closed = oneEvent(el, 'sp-closed');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n thirdItemRect.x + thirdItemRect.width / 2,\n thirdItemRect.y + thirdItemRect.height / 2,\n ],\n },\n {\n type: 'up',\n },\n ],\n });\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.value).to.equal(thirdItem.value);\n });\n it('opens/closes multiple times', async () => {\n await nextFrame();\n await nextFrame();\n expect(el.open).to.be.false;\n const boundingRect = el.button.getBoundingClientRect();\n let opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n expect(el.open).to.be.true;\n\n let closed = oneEvent(el, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n expect(el.open).to.be.false;\n\n opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n expect(el.open).to.be.true;\n\n closed = oneEvent(el, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n expect(el.open).to.be.false;\n });\n it('closes when becoming disabled', async () => {\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('closes when clicking away', async () => {\n el.id = 'closing';\n const other = document.createElement('div');\n document.body.append(other);\n\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n const closed = oneEvent(el, 'sp-closed');\n other.click();\n closed;\n await elementUpdated(el);\n\n other.remove();\n });\n it('selects', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n it('re-selects', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n let closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('dispatches bubbling and composed events', async () => {\n const changeSpy = spy();\n const parent = el.parentElement as HTMLElement;\n (parent.shadowRoot as ShadowRoot).append(el);\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n parent.addEventListener('change', () => changeSpy());\n\n expect(el.value).to.equal('');\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.value).to.equal(secondItem.value);\n expect(changeSpy.calledOnce).to.be.true;\n });\n it('can have selection prevented', async () => {\n const preventChangeSpy = spy();\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (event: Event): void => {\n event.preventDefault();\n preventChangeSpy();\n });\n\n const changed = oneEvent(el, 'change');\n secondItem.click();\n // The `change` event is dispatched _after_ the `updateComplete` promise.\n await changed;\n expect(\n preventChangeSpy.calledOnce,\n preventChangeSpy.callCount.toString()\n ).to.be.true;\n expect(secondItem.selected, 'selection prevented').to.be.false;\n expect(el.open).to.be.true;\n });\n it('can throw focus after `change`', async () => {\n const input = document.createElement('input');\n document.body.append(input);\n\n await elementUpdated(el);\n\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (): void => {\n input.focus();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.value, 'value changed').to.equal('option-2');\n expect(secondItem.selected, 'selected changed').to.be.true;\n await waitUntil(\n () => document.activeElement === input,\n 'focus throw'\n );\n input.remove();\n });\n it('opens on ArrowUp', async () => {\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n button.dispatchEvent(tEvent());\n await elementUpdated(el);\n\n expect(el.open, 'still closed').to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n button.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowUp').to.be.true;\n await opened;\n\n const closed = oneEvent(el, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(el.open).to.be.false;\n });\n it('opens on ArrowDown', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n button.dispatchEvent(arrowDownEvent());\n await opened;\n\n expect(el.open, 'open by ArrowDown').to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('quick selects on ArrowLeft/Right', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () =>\n (el as unknown as { menuItems: MenuItem[] }).menuItems\n .length === 6\n );\n\n await sendKeys({\n press: 'ArrowLeft',\n });\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n await sendKeys({\n press: 'ArrowLeft',\n });\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(1);\n await sendKeys({\n press: 'ArrowRight',\n });\n\n await nextFrame();\n await nextFrame();\n expect(selectionSpy.calledWith('option-2'));\n\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n await sendKeys({\n press: 'ArrowRight',\n });\n await nextFrame();\n await nextFrame();\n expect(selectionSpy.calledWith('Save Selection'));\n expect(selectionSpy.calledWith('Make Work Path')).to.be.false;\n expect(selectionSpy.callCount).to.equal(5);\n });\n it('quick selects first item on ArrowRight when no value', async () => {\n await nextFrame();\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n });\n it('loads', async () => {\n expect(el).to.not.be.undefined;\n });\n it('closes when focusing away from the menu', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const thirdItem = el.querySelector(\n 'sp-menu-item:nth-of-type(3)'\n ) as MenuItem;\n const button = el.button;\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n\n el.focus();\n await sendKeys({ press: 'Tab' });\n expect(document.activeElement === input).to.be.true;\n await sendKeys({ press: 'Shift+Tab' });\n expect(document.activeElement === el).to.be.true;\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'Enter' });\n await opened;\n await elementUpdated(el);\n\n await waitUntil(\n () => firstItem.focused,\n 'The first items should have become focused visually.'\n );\n\n await sendKeys({ press: 'ArrowDown' });\n await sendKeys({ press: 'ArrowDown' });\n expect(thirdItem.focused).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n button.focus();\n await closed;\n expect(isMenuActiveElement(el)).to.be.false;\n expect(el.open).to.be.false;\n });\n it('does not listen to streaming `Enter` keydown', async () => {\n const openSpy = spy();\n const closedSpy = spy();\n el.addEventListener('sp-opened', () => openSpy());\n el.addEventListener('sp-closed', () => closedSpy());\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const thirdItem = el.querySelector(\n 'sp-menu-item:nth-of-type(3)'\n ) as MenuItem;\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n\n el.focus();\n await sendKeys({ press: 'Tab' });\n expect(document.activeElement === input).to.be.true;\n await sendKeys({ press: 'Shift+Tab' });\n expect(document.activeElement === el).to.be.true;\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ down: 'Enter' });\n await opened;\n await aTimeout(300);\n expect(openSpy.callCount).to.equal(1);\n await sendKeys({ up: 'Enter' });\n\n await waitUntil(\n () => firstItem.focused,\n 'The first items should have become focused visually.'\n );\n\n await sendKeys({ press: 'ArrowDown' });\n await sendKeys({ press: 'ArrowDown' });\n expect(thirdItem.focused).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n sendKeys({ down: 'Enter' });\n await closed;\n await aTimeout(300);\n\n expect(el.value).to.equal(thirdItem.value);\n expect(openSpy.callCount).to.equal(1);\n expect(closedSpy.callCount).to.equal(1);\n await sendKeys({ up: 'Enter' });\n });\n it('allows tabing to close', async () => {\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await nextFrame();\n\n expect(el.open).to.be.true;\n el.focus();\n\n const closed = oneEvent(el, 'sp-closed');\n sendKeys({ press: 'Tab' });\n await closed;\n\n expect(el.open, 'closes').to.be.false;\n });\n describe('tab order', () => {\n let input1: HTMLInputElement;\n let input2: HTMLInputElement;\n beforeEach(() => {\n const surroundingInput = (): HTMLInputElement => {\n const input = document.createElement('input');\n input.type = 'text';\n input.tabIndex = 0;\n return input;\n };\n input1 = surroundingInput();\n input2 = surroundingInput();\n\n el.insertAdjacentElement('beforebegin', input1);\n el.insertAdjacentElement('afterend', input2);\n });\n afterEach(() => {\n input1.remove();\n input2.remove();\n });\n it('tabs forward through the element', async () => {\n // start at input1\n input1.focus();\n await nextFrame();\n expect(document.activeElement === input1, 'focuses input 1').to\n .true;\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement === el, 'focuses el').to.be.true;\n // tab through the picker to input2\n focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n expect(document.activeElement === input2, 'focuses input 2').to\n .true;\n });\n it('shift+tabs backwards through the element', async () => {\n // start at input1\n input2.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses input 2').to.equal(\n input2\n );\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement, 'focuses el').to.equal(el);\n // tab through the picker to input2\n focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n expect(document.activeElement, 'focuses input 1').to.equal(\n input1\n );\n });\n it('can close and immediately tab to the next tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(el),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input2).to.be.true;\n });\n it('can close and immediate shift+tab to the previous tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement === el, 'focuses el').to.be.true;\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(el),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input1, 'focus');\n sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input1).to.be.true;\n });\n });\n it('does not open when [readonly]', async () => {\n el.readonly = true;\n\n await elementUpdated(el);\n\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('scrolls selected into view on open', async () => {\n // the Popover is transient, you need to be able to apply custom styles to it...\n const styles = document.createElement('style');\n styles.innerText = 'sp-popover { height: 40px; }';\n el.shadowRoot.append(styles);\n\n const firstItem = el.querySelector(\n 'sp-menu-item:first-child'\n ) as MenuItem;\n const lastItem = el.querySelector(\n 'sp-menu-item:last-child'\n ) as MenuItem;\n lastItem.disabled = false;\n el.value = lastItem.value;\n\n await elementUpdated(el);\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await waitUntil(\n () => isMenuActiveElement(el),\n 'first item focused'\n );\n const getParentOffset = (el: HTMLElement): number => {\n const parentScroll = (\n (el as HTMLElement & { assignedSlot: HTMLSlotElement })\n .assignedSlot.parentElement as HTMLElement\n ).scrollTop;\n const parentOffset = el.offsetTop - parentScroll;\n return parentOffset;\n };\n expect(getParentOffset(lastItem)).to.be.lessThan(40);\n expect(getParentOffset(firstItem)).to.be.lessThan(-1);\n\n lastItem.dispatchEvent(\n new FocusEvent('focusin', { bubbles: true })\n );\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n await nextFrame();\n expect(getParentOffset(lastItem)).to.be.greaterThan(40);\n expect(getParentOffset(firstItem)).to.be.greaterThan(-1);\n });\n it('manages focus-ring styles', async () => {\n if (!isWebKit()) {\n return;\n }\n /**\n * This is a hack to set the `isMobile` property to true so that we can test the MobileController\n */\n el.isMobile.matches = true;\n el.bindEvents();\n\n await setViewport({ width: 360, height: 640 });\n // Allow viewport update to propagate.\n await nextFrame();\n\n let opened = oneEvent(el, 'sp-opened');\n\n const boundingRect = el.button.getBoundingClientRect();\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n\n await opened;\n\n const tray = el.shadowRoot.querySelector('sp-tray');\n expect(tray).to.not.be.null;\n\n // Make a selection\n let closed = oneEvent(el, 'sp-closed');\n\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n firstItem.click();\n\n await elementUpdated(el);\n await closed;\n\n // expect the tray to be closed\n expect(el.open).to.be.false;\n\n const button = el.shadowRoot.querySelector(\n '#button'\n ) as HTMLButtonElement;\n expect(button).to.not.be.null;\n\n // we should have SAFARI_FOCUS_RING_CLASS in the classList\n expect(button.classList.contains(SAFARI_FOCUS_RING_CLASS)).to.be\n .true;\n\n // picker should still have focus\n expect(document.activeElement === el).to.be.true;\n\n // click outside (0,0)\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [0, 0],\n },\n ],\n });\n\n // picker should not have focus\n expect(document.activeElement === el).to.be.false;\n\n // Let's use keyboard to open the tray now\n opened = oneEvent(el, 'sp-opened');\n await sendKeys({\n press: 'Tab',\n });\n await sendKeys({\n press: 'Enter',\n });\n await elementUpdated(el);\n await opened;\n\n // Make a selection again\n closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await elementUpdated(el);\n await closed;\n\n // expect the tray to be closed\n expect(el.open).to.be.false;\n\n // we should not have SAFARI_FOCUS_RING_CLASS in the classList\n expect(button.classList.contains(SAFARI_FOCUS_RING_CLASS)).to.be\n .false;\n });\n });\n describe('grouped', async () => {\n const groupedFixture = async (): Promise<Picker> => {\n return fixture<Picker>(html`\n <sp-picker\n quiet\n label=\"I would like to use Spectrum Web Components\"\n value=\"0\"\n >\n <sp-menu-group>\n <span slot=\"header\">Timeline</span>\n <sp-menu-item value=\"0\" id=\"should-be-selected\">\n Immediately\n </sp-menu-item>\n <sp-menu-item value=\"1\">\n I'm already using them\n </sp-menu-item>\n <sp-menu-item value=\"2\">Soon</sp-menu-item>\n <sp-menu-item value=\"3\">\n As part of my next project\n </sp-menu-item>\n <sp-menu-item value=\"4\">In the future</sp-menu-item>\n </sp-menu-group>\n </sp-picker>\n `);\n };\n beforeEach(async () => {\n el = await groupedFixture();\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n });\n it('selects the item with a matching value in a group', async () => {\n const item = el.querySelector('#should-be-selected') as MenuItem;\n expect(item.selected).to.be.true;\n });\n });\n describe('slotted label', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(html`\n <div>\n <sp-field-label for=\"picker-slotted\">\n Where do you live?\n </sp-field-label>\n <sp-picker id=\"picker-slotted\">\n <span slot=\"label\">\n Select a Country with a very long label, too long in\n fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `);\n\n return test.querySelector('sp-picker') as Picker;\n };\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n await nextFrame();\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n\n it('loads accessibly w/ slotted label', async () => {\n await expect(el).to.be.accessible();\n });\n });\n describe('Dev mode', () => {\n let consoleWarnStub!: ReturnType<typeof stub>;\n before(() => {\n window.__swc.verbose = true;\n consoleWarnStub = stub(console, 'warn');\n });\n afterEach(() => {\n consoleWarnStub.resetHistory();\n });\n after(async () => {\n window.__swc.verbose = false;\n consoleWarnStub.restore();\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(html`\n <div>\n <sp-field-label for=\"picker-deprecated\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-deprecated\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-menu>\n </sp-picker>\n </div>\n `);\n\n return test.querySelector('sp-picker') as Picker;\n };\n it('does not warn in Dev Mode when accessible elements leveraged', async () => {\n const test = await fixture<Picker>(html`\n <div>\n <sp-field-label for=\"test\">Test label</sp-field-label>\n <sp-picker id=\"test\">\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n </sp-picker>\n </div>\n `);\n\n el = test.querySelector('sp-picker') as Picker;\n\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n expect(consoleWarnStub.called).to.be.false;\n });\n it('warns in Dev Mode when accessible attributes are not leveraged', async function () {\n this.retries(0);\n el = await fixture<Picker>(html`\n <sp-picker>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n </sp-picker>\n `);\n\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n (spyCall.args.at(0) as string).includes('accessible'),\n 'confirm accessibility-centric message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-picker',\n type: 'accessibility',\n level: 'default',\n },\n });\n });\n describe('deprecated', () => {\n it('warns in Dev Mode of deprecated `<sp-menu>` usage', async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n (spyCall.args.at(0) as string).includes('<sp-menu>'),\n 'confirm <sp-menu>-centric message'\n ).to.be.true;\n expect(\n spyCall.args.at(-1),\n 'confirm `data` shape'\n ).to.deep.equal({\n data: {\n localName: 'sp-picker',\n type: 'api',\n level: 'deprecation',\n },\n });\n });\n });\n describe('Dev mode ignored', () => {\n const { ignoreWarningLocalNames } = window.__swc;\n before(() => {\n window.__swc.ignoreWarningLocalNames = {\n 'sp-picker': true,\n };\n });\n before(() => {\n window.__swc.ignoreWarningLocalNames = ignoreWarningLocalNames;\n });\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n await nextFrame();\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('selects with deprecated syntax', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n });\n });\n testForLitDevWarnings(async () => await pickerFixture());\n it('manages its \"name\" value in the accessibility tree when [icons-only]', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>${iconsOnly({})}</div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n await elementUpdated(el);\n await nextFrame();\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Delete Choose an action type...'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = '2';\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n expect(el.value).to.equal('2');\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Copy Choose an action type...'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('toggles between pickers', async () => {\n const el2 = await pickerFixture();\n const el1 = await pickerFixture();\n\n (el1.parentElement as HTMLElement).style.float = 'left';\n (el2.parentElement as HTMLElement).style.float = 'left';\n el1.id = 'away';\n el2.id = 'other';\n\n await Promise.all([elementUpdated(el1), elementUpdated(el2)]);\n\n expect(el1.open, 'closed 1').to.be.false;\n expect(el2.open, 'closed 1').to.be.false;\n let open = oneEvent(el1, 'sp-opened');\n el1.click();\n await open;\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n open = oneEvent(el2, 'sp-opened');\n let closed = oneEvent(el1, 'sp-closed');\n el2.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.false;\n expect(el2.open).to.be.true;\n\n open = oneEvent(el1, 'sp-opened');\n closed = oneEvent(el2, 'sp-closed');\n el1.click();\n await Promise.all([open, closed]);\n expect(el2.open).to.be.false;\n expect(el1.open).to.be.true;\n\n closed = oneEvent(el1, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(el1.open).to.be.false;\n });\n it('displays selected item text by default', async () => {\n const el = await fixture<Picker>(html`\n <sp-picker\n value=\"inverse\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `);\n await nextFrame();\n\n await elementUpdated(el);\n await waitUntil(\n () => el.selectedItem?.itemText === 'Select Inverse',\n `Selected Item Text: ${el.selectedItem?.itemText}`\n );\n\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n expect(el.value).to.equal('inverse');\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n\n el.focus();\n await elementUpdated(el);\n expect(\n el === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'Enter' });\n await opened;\n\n expect(\n el === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n expect(\n (el as unknown as TestablePicker).optionsMenu ===\n el.shadowRoot.activeElement,\n `activeElement is ${el.shadowRoot.activeElement?.localName}`\n ).to.be.true;\n\n expect(firstItem.focused, 'firstItem NOT \"focused\"').to.be.false;\n expect(secondItem.focused, 'secondItem \"focused\"').to.be.true;\n expect(\n (el as unknown as TestablePicker).optionsMenu.getAttribute(\n 'aria-activedescendant'\n )\n ).to.equal(secondItem.id);\n });\n it('resets value when item not available', async () => {\n const el = await fixture<Picker>(html`\n <sp-picker\n value=\"missing\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `);\n\n await elementUpdated(el);\n await waitUntil(() => el.value === '');\n\n expect(el.value).to.equal('');\n expect(el.selectedItem?.itemText).to.be.undefined;\n });\n it('allows event listeners on child items', async () => {\n const mouseenterSpy = spy();\n const handleMouseenter = (): void => mouseenterSpy();\n const el = await fixture<Picker>(html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\" @mouseenter=${handleMouseenter}>\n Deselect Text\n </sp-menu-item>\n </sp-picker>\n `);\n\n await elementUpdated(el);\n\n const hoverEl = el.querySelector('sp-menu-item') as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n hoverEl.dispatchEvent(new MouseEvent('mouseenter'));\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(mouseenterSpy.calledOnce).to.be.true;\n });\n it('dispatches events on open/close', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const handleOpenedSpy = (event: Event): void => openedSpy(event);\n const handleClosedSpy = (event: Event): void => closedSpy(event);\n\n const el = await fixture<Picker>(html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n @sp-opened=${handleOpenedSpy}\n @sp-closed=${handleClosedSpy}\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n </sp-picker>\n `);\n\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(openedSpy.calledOnce).to.be.true;\n expect(closedSpy.calledOnce).to.be.false;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(closedSpy.calledOnce).to.be.true;\n });\n it('closes tooltip on button blur', async () => {\n const test = await styledFixture(html`\n <div>${tooltip(tooltip.args)}</div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(el);\n const input1 = document.createElement('input');\n const input2 = document.createElement('input');\n const tooltipEl = el.querySelector('sp-tooltip') as Tooltip;\n el.insertAdjacentElement('beforebegin', input1);\n el.insertAdjacentElement('afterend', input2);\n input1.focus();\n expect(document.activeElement === input1).to.be.true;\n const tooltipOpened = oneEvent(el, 'sp-opened');\n await sendKeys({\n press: 'Tab',\n });\n await tooltipOpened;\n expect(\n document.activeElement === el,\n `Actually, ${document.activeElement?.localName}`\n ).to.be.true;\n expect(tooltipEl.open).to.be.true;\n expect(el.open).to.be.false;\n expect(el.focused).to.be.true;\n\n const menuOpen = oneEvent(el, 'sp-opened');\n const tooltipClosed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'ArrowDown',\n });\n await menuOpen;\n await tooltipClosed;\n expect(document.activeElement === el).to.be.true;\n expect(tooltipEl.open).to.be.false;\n expect(el.open).to.be.true;\n\n const menuClosed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Tab',\n });\n await menuClosed;\n expect(document.activeElement === el).to.be.false;\n expect(tooltipEl.open).to.be.false;\n expect(el.open).to.be.false;\n });\n describe('disabled', function () {\n beforeEach(async function () {\n const test = await fixture(html`\n <div>${disabled(disabled.args)}</div>\n `);\n this.label = test.querySelector('sp-field-label') as FieldLabel;\n this.el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(this.elel);\n });\n it('does not recieve focus from an `<sp-field-label>`', async function () {\n expect(this.el.disabled).to.be.true;\n expect(this.el.focused).to.be.false;\n\n this.label.click();\n await elementUpdated(this.el);\n\n expect(this.el.focused).to.be.false;\n });\n it('does not open from `click()`', async function () {\n expect(this.el.disabled).to.be.true;\n expect(this.el.open).to.be.false;\n\n this.el.click();\n await elementUpdated(this.el);\n\n expect(this.el.open).to.be.false;\n });\n it('does not open from `sendMouse()`', async function () {\n expect(this.el.disabled).to.be.true;\n expect(this.el.open).to.be.false;\n\n const boundingRect = this.el.button.getBoundingClientRect();\n\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n // Synthetic delay for \"open\" but not \"sp-open\" as it would never come.\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n expect(this.el.open).to.be.false;\n });\n });\n describe('pending', function () {\n beforeEach(async function () {\n const test = await fixture(html`\n <div>${pending({ pending: true })}</div>\n `);\n this.label = test.querySelector('sp-field-label') as FieldLabel;\n this.el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(this.elel);\n });\n it('receives focus from an `<sp-field-label>`', async function () {\n expect(this.el.focused).to.be.false;\n\n this.label.click();\n await elementUpdated(this.el);\n\n expect(this.el.focused).to.be.true;\n });\n it('does not open from `click()`', async function () {\n expect(this.el.open).to.be.false;\n\n this.el.click();\n await elementUpdated(this.el);\n\n expect(this.el.open).to.be.false;\n });\n it('manages its \"name\" value in the accessibility tree when [pending]', async () => {\n type NamedNode = { name: string; role: string };\n const snapshot = (await a11ySnapshot(\n {}\n )) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) =>\n node.name ===\n 'Pending Choose your neighborhood Where do you live?'\n )\n ).to.not.be.null;\n });\n });\n describe('dynamic icons', function () {\n beforeEach(async function () {\n const test = await fixture(html`\n <div>${dynamicIcons(dynamicIcons.args)}</div>\n `);\n this.el = test.querySelector('sp-picker') as Picker;\n await elementUpdated(this.el);\n });\n it('displays the same icon as the selected menu item', async function () {\n // Delay long enough for the picker to display the selected item.\n // Chromium and Webkit require 2 frames, Firefox requires 3 frames.\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n // Check that the displayed icon matches the selected item's icon.\n const picker: Picker = this.el;\n const displayedIconBefore =\n picker.shadowRoot.querySelector<Icon>('#icon > sp-icon');\n expect(displayedIconBefore).to.be.ok;\n const displayedIconSrcBefore = displayedIconBefore?.src;\n expect(displayedIconSrcBefore).to.be.a.string;\n const value = picker.value;\n expect(value).to.be.a.string;\n const selectedItem = picker.querySelector<MenuItem>(\n `sp-menu-item[value=\"${value}\"]`\n );\n expect(selectedItem).to.be.ok;\n const selectedItemIcon = selectedItem?.querySelector('sp-icon');\n expect(selectedItemIcon).to.be.ok;\n const selectedItemIconSrcBefore = selectedItemIcon?.src;\n expect(selectedItemIconSrcBefore).to.be.a.string;\n expect(displayedIconSrcBefore).to.equal(selectedItemIconSrcBefore);\n\n // Change the icon src of the selected item.\n const newSrc = 'assets/new-icon.svg';\n if (selectedItemIcon) {\n selectedItemIcon.setAttribute('src', newSrc);\n }\n const selectedItemIconSrcAfter = selectedItemIcon?.src;\n expect(selectedItemIconSrcAfter).to.equal(newSrc);\n\n // Give the picker a chance to update. Chromium, Firefox, and Webkit require 3 frames.\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n // Check that the displayed icon matches the selected item's icon.\n const displayedIconAfter =\n picker.shadowRoot.querySelector<Icon>('#icon > sp-icon');\n expect(displayedIconAfter).to.be.ok;\n const displayedIconSrcAfter = displayedIconAfter?.src;\n expect(displayedIconSrcAfter).to.be.a.string;\n expect(displayedIconSrcAfter).to.equal(newSrc);\n });\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["el", "node", "pickerFixture", "_a"]
7
7
  }