@spectrum-web-components/action-menu 0.33.3-overlay.66 → 0.34.1-rc.0

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/action-menu",
3
- "version": "0.33.3-overlay.66+30e96d5ea",
3
+ "version": "0.34.1-rc.0+1647bfed5",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -61,12 +61,12 @@
61
61
  "lit-html"
62
62
  ],
63
63
  "dependencies": {
64
- "@spectrum-web-components/action-button": "^0.33.3-overlay.66+30e96d5ea",
65
- "@spectrum-web-components/base": "^0.33.3-overlay.66+30e96d5ea",
66
- "@spectrum-web-components/icon": "^0.33.3-overlay.66+30e96d5ea",
67
- "@spectrum-web-components/icons-workflow": "^0.33.3-overlay.66+30e96d5ea",
68
- "@spectrum-web-components/picker": "^0.33.3-overlay.66+30e96d5ea",
69
- "@spectrum-web-components/shared": "^0.33.3-overlay.66+30e96d5ea"
64
+ "@spectrum-web-components/action-button": "^0.34.1-rc.0+1647bfed5",
65
+ "@spectrum-web-components/base": "^0.34.1-rc.0+1647bfed5",
66
+ "@spectrum-web-components/icon": "^0.34.1-rc.0+1647bfed5",
67
+ "@spectrum-web-components/icons-workflow": "^0.34.1-rc.0+1647bfed5",
68
+ "@spectrum-web-components/picker": "^0.34.1-rc.0+1647bfed5",
69
+ "@spectrum-web-components/shared": "^0.34.1-rc.0+1647bfed5"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@spectrum-css/actionmenu": "^4.0.39"
@@ -78,5 +78,5 @@
78
78
  "./**/*.dev.js",
79
79
  "./sync/sp-*.js"
80
80
  ],
81
- "gitHead": "30e96d5eaed31b7b2af916d78cabccb722889fe3"
81
+ "gitHead": "1647bfed54cb29f3513343cd0d2c2d9e73e1c508"
82
82
  }
@@ -49,7 +49,7 @@ export class ActionMenu extends ObserveSlotText(PickerBase, "label") {
49
49
  ?quiet=${this.quiet}
50
50
  ?selected=${this.open}
51
51
  aria-haspopup="true"
52
- aria-controls="popover"
52
+ aria-controls=${ifDefined(this.open ? "menu" : void 0)}
53
53
  aria-expanded=${this.open ? "true" : "false"}
54
54
  aria-label=${ifDefined(this.label || void 0)}
55
55
  id="button"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ActionMenu.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 {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { PickerBase } from '@spectrum-web-components/picker';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport { ObserveSlotText } from '@spectrum-web-components/shared/src/observe-slot-text.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-more.js';\nimport actionMenuStyles from './action-menu.css.js';\n\n/**\n * @element sp-action-menu\n *\n * @slot - menu items to be listed in the Action Menu\n * @slot icon - The icon to use for Action Menu\n * @slot label - The label to use on for the Action Menu\n * @attr selects - By default `sp-action-menu` does not manage a selection. If\n * you'd like for a selection to be held by the `sp-menu` that it presents in\n * its overlay, use `selects=\"single\" to activate this functionality.\n */\nexport class ActionMenu extends ObserveSlotText(PickerBase, 'label') {\n public static override get styles(): CSSResultArray {\n return [actionMenuStyles];\n }\n\n @property({ type: String })\n public override selects: undefined | 'single' = undefined;\n\n protected override listRole: 'listbox' | 'menu' = 'menu';\n protected override itemRole = 'menuitem';\n private get hasLabel(): boolean {\n return this.slotHasContent;\n }\n\n protected override get buttonContent(): TemplateResult[] {\n return [\n html`\n <slot name=\"icon\" slot=\"icon\" ?icon-only=${!this.hasLabel}>\n <sp-icon-more class=\"icon\"></sp-icon-more>\n </slot>\n <slot name=\"label\" ?hidden=${!this.hasLabel}></slot>\n `,\n ];\n }\n\n protected override render(): TemplateResult {\n return html`\n <sp-action-button\n ?quiet=${this.quiet}\n ?selected=${this.open}\n aria-haspopup=\"true\"\n aria-controls=\"popover\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-label=${ifDefined(this.label || undefined)}\n id=\"button\"\n class=\"button\"\n size=${this.size}\n @blur=${this.onButtonBlur}\n @click=${this.onButtonClick}\n @focus=${this.onButtonFocus}\n @pointerdown=${this.handlePointerdown}\n ?disabled=${this.disabled}\n >\n ${this.buttonContent}\n </sp-action-button>\n ${this.renderOverlay}\n `;\n }\n\n protected override update(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('invalid')) {\n this.invalid = false;\n }\n super.update(changedProperties);\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;AAYA;AAAA,EAEI;AAAA,OAGG;AACP,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,OAAO;AACP,SAAS,uBAAuB;AAChC,OAAO;AACP,OAAO,sBAAsB;AAYtB,aAAM,mBAAmB,gBAAgB,YAAY,OAAO,EAAE;AAAA,EAA9D;AAAA;AAMH,SAAgB,UAAgC;AAEhD,SAAmB,WAA+B;AAClD,SAAmB,WAAW;AAAA;AAAA,EAR9B,WAA2B,SAAyB;AAChD,WAAO,CAAC,gBAAgB;AAAA,EAC5B;AAAA,EAOA,IAAY,WAAoB;AAC5B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAuB,gBAAkC;AACrD,WAAO;AAAA,MACH;AAAA,2DAC+C,CAAC,KAAK;AAAA;AAAA;AAAA,6CAGpB,CAAC,KAAK;AAAA;AAAA,IAE3C;AAAA,EACJ;AAAA,EAEmB,SAAyB;AACxC,WAAO;AAAA;AAAA,yBAEU,KAAK;AAAA,4BACF,KAAK;AAAA;AAAA;AAAA,gCAGD,KAAK,OAAO,SAAS;AAAA,6BACxB,UAAU,KAAK,SAAS,MAAS;AAAA;AAAA;AAAA,uBAGvC,KAAK;AAAA,wBACJ,KAAK;AAAA,yBACJ,KAAK;AAAA,yBACL,KAAK;AAAA,+BACC,KAAK;AAAA,4BACR,KAAK;AAAA;AAAA,kBAEf,KAAK;AAAA;AAAA,cAET,KAAK;AAAA;AAAA,EAEf;AAAA,EAEmB,OAAO,mBAA+C;AACrE,QAAI,kBAAkB,IAAI,SAAS,GAAG;AAClC,WAAK,UAAU;AAAA,IACnB;AACA,UAAM,OAAO,iBAAiB;AAAA,EAClC;AACJ;AAjDoB;AAAA,EADf,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GALjB,WAMO;",
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 {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { PickerBase } from '@spectrum-web-components/picker';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport { ObserveSlotText } from '@spectrum-web-components/shared/src/observe-slot-text.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-more.js';\nimport actionMenuStyles from './action-menu.css.js';\n\n/**\n * @element sp-action-menu\n *\n * @slot - menu items to be listed in the Action Menu\n * @slot icon - The icon to use for Action Menu\n * @slot label - The label to use on for the Action Menu\n * @attr selects - By default `sp-action-menu` does not manage a selection. If\n * you'd like for a selection to be held by the `sp-menu` that it presents in\n * its overlay, use `selects=\"single\" to activate this functionality.\n */\nexport class ActionMenu extends ObserveSlotText(PickerBase, 'label') {\n public static override get styles(): CSSResultArray {\n return [actionMenuStyles];\n }\n\n @property({ type: String })\n public override selects: undefined | 'single' = undefined;\n\n protected override listRole: 'listbox' | 'menu' = 'menu';\n protected override itemRole = 'menuitem';\n private get hasLabel(): boolean {\n return this.slotHasContent;\n }\n\n protected override get buttonContent(): TemplateResult[] {\n return [\n html`\n <slot name=\"icon\" slot=\"icon\" ?icon-only=${!this.hasLabel}>\n <sp-icon-more class=\"icon\"></sp-icon-more>\n </slot>\n <slot name=\"label\" ?hidden=${!this.hasLabel}></slot>\n `,\n ];\n }\n\n protected override render(): TemplateResult {\n return html`\n <sp-action-button\n ?quiet=${this.quiet}\n ?selected=${this.open}\n aria-haspopup=\"true\"\n aria-controls=${ifDefined(this.open ? 'menu' : undefined)}\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-label=${ifDefined(this.label || undefined)}\n id=\"button\"\n class=\"button\"\n size=${this.size}\n @blur=${this.onButtonBlur}\n @click=${this.onButtonClick}\n @focus=${this.onButtonFocus}\n @pointerdown=${this.handlePointerdown}\n ?disabled=${this.disabled}\n >\n ${this.buttonContent}\n </sp-action-button>\n ${this.renderOverlay}\n `;\n }\n\n protected override update(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('invalid')) {\n this.invalid = false;\n }\n super.update(changedProperties);\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;AAYA;AAAA,EAEI;AAAA,OAGG;AACP,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,OAAO;AACP,SAAS,uBAAuB;AAChC,OAAO;AACP,OAAO,sBAAsB;AAYtB,aAAM,mBAAmB,gBAAgB,YAAY,OAAO,EAAE;AAAA,EAA9D;AAAA;AAMH,SAAgB,UAAgC;AAEhD,SAAmB,WAA+B;AAClD,SAAmB,WAAW;AAAA;AAAA,EAR9B,WAA2B,SAAyB;AAChD,WAAO,CAAC,gBAAgB;AAAA,EAC5B;AAAA,EAOA,IAAY,WAAoB;AAC5B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAuB,gBAAkC;AACrD,WAAO;AAAA,MACH;AAAA,2DAC+C,CAAC,KAAK;AAAA;AAAA;AAAA,6CAGpB,CAAC,KAAK;AAAA;AAAA,IAE3C;AAAA,EACJ;AAAA,EAEmB,SAAyB;AACxC,WAAO;AAAA;AAAA,yBAEU,KAAK;AAAA,4BACF,KAAK;AAAA;AAAA,gCAED,UAAU,KAAK,OAAO,SAAS,MAAS;AAAA,gCACxC,KAAK,OAAO,SAAS;AAAA,6BACxB,UAAU,KAAK,SAAS,MAAS;AAAA;AAAA;AAAA,uBAGvC,KAAK;AAAA,wBACJ,KAAK;AAAA,yBACJ,KAAK;AAAA,yBACL,KAAK;AAAA,+BACC,KAAK;AAAA,4BACR,KAAK;AAAA;AAAA,kBAEf,KAAK;AAAA;AAAA,cAET,KAAK;AAAA;AAAA,EAEf;AAAA,EAEmB,OAAO,mBAA+C;AACrE,QAAI,kBAAkB,IAAI,SAAS,GAAG;AAClC,WAAK,UAAU;AAAA,IACnB;AACA,UAAM,OAAO,iBAAiB;AAAA,EAClC;AACJ;AAjDoB;AAAA,EADf,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GALjB,WAMO;",
6
6
  "names": []
7
7
  }
package/src/ActionMenu.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var u=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var l=(r,o,t,i)=>{for(var e=i>1?void 0:i?p(o,t):o,s=r.length-1,n;s>=0;s--)(n=r[s])&&(e=(i?n(o,t,e):n(e))||e);return i&&e&&u(o,t,e),e};import{html as a}from"@spectrum-web-components/base";import{ifDefined as d}from"@spectrum-web-components/base/src/directives.js";import{property as c}from"@spectrum-web-components/base/src/decorators.js";import{PickerBase as m}from"@spectrum-web-components/picker";import"@spectrum-web-components/action-button/sp-action-button.js";import{ObserveSlotText as h}from"@spectrum-web-components/shared/src/observe-slot-text.js";import"@spectrum-web-components/icons-workflow/icons/sp-icon-more.js";import b from"./action-menu.css.js";export class ActionMenu extends h(m,"label"){constructor(){super(...arguments);this.selects=void 0;this.listRole="menu";this.itemRole="menuitem"}static get styles(){return[b]}get hasLabel(){return this.slotHasContent}get buttonContent(){return[a`
1
+ "use strict";var d=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var l=(r,o,t,i)=>{for(var e=i>1?void 0:i?p(o,t):o,s=r.length-1,n;s>=0;s--)(n=r[s])&&(e=(i?n(o,t,e):n(e))||e);return i&&e&&d(o,t,e),e};import{html as a}from"@spectrum-web-components/base";import{ifDefined as u}from"@spectrum-web-components/base/src/directives.js";import{property as c}from"@spectrum-web-components/base/src/decorators.js";import{PickerBase as m}from"@spectrum-web-components/picker";import"@spectrum-web-components/action-button/sp-action-button.js";import{ObserveSlotText as h}from"@spectrum-web-components/shared/src/observe-slot-text.js";import"@spectrum-web-components/icons-workflow/icons/sp-icon-more.js";import b from"./action-menu.css.js";export class ActionMenu extends h(m,"label"){constructor(){super(...arguments);this.selects=void 0;this.listRole="menu";this.itemRole="menuitem"}static get styles(){return[b]}get hasLabel(){return this.slotHasContent}get buttonContent(){return[a`
2
2
  <slot name="icon" slot="icon" ?icon-only=${!this.hasLabel}>
3
3
  <sp-icon-more class="icon"></sp-icon-more>
4
4
  </slot>
@@ -8,9 +8,9 @@
8
8
  ?quiet=${this.quiet}
9
9
  ?selected=${this.open}
10
10
  aria-haspopup="true"
11
- aria-controls="popover"
11
+ aria-controls=${u(this.open?"menu":void 0)}
12
12
  aria-expanded=${this.open?"true":"false"}
13
- aria-label=${d(this.label||void 0)}
13
+ aria-label=${u(this.label||void 0)}
14
14
  id="button"
15
15
  class="button"
16
16
  size=${this.size}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["ActionMenu.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 {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { PickerBase } from '@spectrum-web-components/picker';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport { ObserveSlotText } from '@spectrum-web-components/shared/src/observe-slot-text.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-more.js';\nimport actionMenuStyles from './action-menu.css.js';\n\n/**\n * @element sp-action-menu\n *\n * @slot - menu items to be listed in the Action Menu\n * @slot icon - The icon to use for Action Menu\n * @slot label - The label to use on for the Action Menu\n * @attr selects - By default `sp-action-menu` does not manage a selection. If\n * you'd like for a selection to be held by the `sp-menu` that it presents in\n * its overlay, use `selects=\"single\" to activate this functionality.\n */\nexport class ActionMenu extends ObserveSlotText(PickerBase, 'label') {\n public static override get styles(): CSSResultArray {\n return [actionMenuStyles];\n }\n\n @property({ type: String })\n public override selects: undefined | 'single' = undefined;\n\n protected override listRole: 'listbox' | 'menu' = 'menu';\n protected override itemRole = 'menuitem';\n private get hasLabel(): boolean {\n return this.slotHasContent;\n }\n\n protected override get buttonContent(): TemplateResult[] {\n return [\n html`\n <slot name=\"icon\" slot=\"icon\" ?icon-only=${!this.hasLabel}>\n <sp-icon-more class=\"icon\"></sp-icon-more>\n </slot>\n <slot name=\"label\" ?hidden=${!this.hasLabel}></slot>\n `,\n ];\n }\n\n protected override render(): TemplateResult {\n return html`\n <sp-action-button\n ?quiet=${this.quiet}\n ?selected=${this.open}\n aria-haspopup=\"true\"\n aria-controls=\"popover\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-label=${ifDefined(this.label || undefined)}\n id=\"button\"\n class=\"button\"\n size=${this.size}\n @blur=${this.onButtonBlur}\n @click=${this.onButtonClick}\n @focus=${this.onButtonFocus}\n @pointerdown=${this.handlePointerdown}\n ?disabled=${this.disabled}\n >\n ${this.buttonContent}\n </sp-action-button>\n ${this.renderOverlay}\n `;\n }\n\n protected override update(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('invalid')) {\n this.invalid = false;\n }\n super.update(changedProperties);\n }\n}\n"],
5
- "mappings": "qNAYA,OAEI,QAAAA,MAGG,gCACP,OAAS,aAAAC,MAAiB,kDAC1B,OAAS,YAAAC,MAAgB,kDACzB,OAAS,cAAAC,MAAkB,kCAC3B,MAAO,6DACP,OAAS,mBAAAC,MAAuB,2DAChC,MAAO,gEACP,OAAOC,MAAsB,uBAYtB,aAAM,mBAAmBD,EAAgBD,EAAY,OAAO,CAAE,CAA9D,kCAMH,KAAgB,QAAgC,OAEhD,KAAmB,SAA+B,OAClD,KAAmB,SAAW,WAR9B,WAA2B,QAAyB,CAChD,MAAO,CAACE,CAAgB,CAC5B,CAOA,IAAY,UAAoB,CAC5B,OAAO,KAAK,cAChB,CAEA,IAAuB,eAAkC,CACrD,MAAO,CACHL;AAAA,2DAC+C,CAAC,KAAK;AAAA;AAAA;AAAA,6CAGpB,CAAC,KAAK;AAAA,aAE3C,CACJ,CAEmB,QAAyB,CACxC,OAAOA;AAAA;AAAA,yBAEU,KAAK;AAAA,4BACF,KAAK;AAAA;AAAA;AAAA,gCAGD,KAAK,KAAO,OAAS;AAAA,6BACxBC,EAAU,KAAK,OAAS,MAAS;AAAA;AAAA;AAAA,uBAGvC,KAAK;AAAA,wBACJ,KAAK;AAAA,yBACJ,KAAK;AAAA,yBACL,KAAK;AAAA,+BACC,KAAK;AAAA,4BACR,KAAK;AAAA;AAAA,kBAEf,KAAK;AAAA;AAAA,cAET,KAAK;AAAA,SAEf,CAEmB,OAAOK,EAA+C,CACjEA,EAAkB,IAAI,SAAS,IAC/B,KAAK,QAAU,IAEnB,MAAM,OAAOA,CAAiB,CAClC,CACJ,CAjDoBC,EAAA,CADfL,EAAS,CAAE,KAAM,MAAO,CAAC,GALjB,WAMO",
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 {\n CSSResultArray,\n html,\n PropertyValues,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { ifDefined } from '@spectrum-web-components/base/src/directives.js';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport { PickerBase } from '@spectrum-web-components/picker';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport { ObserveSlotText } from '@spectrum-web-components/shared/src/observe-slot-text.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-more.js';\nimport actionMenuStyles from './action-menu.css.js';\n\n/**\n * @element sp-action-menu\n *\n * @slot - menu items to be listed in the Action Menu\n * @slot icon - The icon to use for Action Menu\n * @slot label - The label to use on for the Action Menu\n * @attr selects - By default `sp-action-menu` does not manage a selection. If\n * you'd like for a selection to be held by the `sp-menu` that it presents in\n * its overlay, use `selects=\"single\" to activate this functionality.\n */\nexport class ActionMenu extends ObserveSlotText(PickerBase, 'label') {\n public static override get styles(): CSSResultArray {\n return [actionMenuStyles];\n }\n\n @property({ type: String })\n public override selects: undefined | 'single' = undefined;\n\n protected override listRole: 'listbox' | 'menu' = 'menu';\n protected override itemRole = 'menuitem';\n private get hasLabel(): boolean {\n return this.slotHasContent;\n }\n\n protected override get buttonContent(): TemplateResult[] {\n return [\n html`\n <slot name=\"icon\" slot=\"icon\" ?icon-only=${!this.hasLabel}>\n <sp-icon-more class=\"icon\"></sp-icon-more>\n </slot>\n <slot name=\"label\" ?hidden=${!this.hasLabel}></slot>\n `,\n ];\n }\n\n protected override render(): TemplateResult {\n return html`\n <sp-action-button\n ?quiet=${this.quiet}\n ?selected=${this.open}\n aria-haspopup=\"true\"\n aria-controls=${ifDefined(this.open ? 'menu' : undefined)}\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-label=${ifDefined(this.label || undefined)}\n id=\"button\"\n class=\"button\"\n size=${this.size}\n @blur=${this.onButtonBlur}\n @click=${this.onButtonClick}\n @focus=${this.onButtonFocus}\n @pointerdown=${this.handlePointerdown}\n ?disabled=${this.disabled}\n >\n ${this.buttonContent}\n </sp-action-button>\n ${this.renderOverlay}\n `;\n }\n\n protected override update(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('invalid')) {\n this.invalid = false;\n }\n super.update(changedProperties);\n }\n}\n"],
5
+ "mappings": "qNAYA,OAEI,QAAAA,MAGG,gCACP,OAAS,aAAAC,MAAiB,kDAC1B,OAAS,YAAAC,MAAgB,kDACzB,OAAS,cAAAC,MAAkB,kCAC3B,MAAO,6DACP,OAAS,mBAAAC,MAAuB,2DAChC,MAAO,gEACP,OAAOC,MAAsB,uBAYtB,aAAM,mBAAmBD,EAAgBD,EAAY,OAAO,CAAE,CAA9D,kCAMH,KAAgB,QAAgC,OAEhD,KAAmB,SAA+B,OAClD,KAAmB,SAAW,WAR9B,WAA2B,QAAyB,CAChD,MAAO,CAACE,CAAgB,CAC5B,CAOA,IAAY,UAAoB,CAC5B,OAAO,KAAK,cAChB,CAEA,IAAuB,eAAkC,CACrD,MAAO,CACHL;AAAA,2DAC+C,CAAC,KAAK;AAAA;AAAA;AAAA,6CAGpB,CAAC,KAAK;AAAA,aAE3C,CACJ,CAEmB,QAAyB,CACxC,OAAOA;AAAA;AAAA,yBAEU,KAAK;AAAA,4BACF,KAAK;AAAA;AAAA,gCAEDC,EAAU,KAAK,KAAO,OAAS,MAAS;AAAA,gCACxC,KAAK,KAAO,OAAS;AAAA,6BACxBA,EAAU,KAAK,OAAS,MAAS;AAAA;AAAA;AAAA,uBAGvC,KAAK;AAAA,wBACJ,KAAK;AAAA,yBACJ,KAAK;AAAA,yBACL,KAAK;AAAA,+BACC,KAAK;AAAA,4BACR,KAAK;AAAA;AAAA,kBAEf,KAAK;AAAA;AAAA,cAET,KAAK;AAAA,SAEf,CAEmB,OAAOK,EAA+C,CACjEA,EAAkB,IAAI,SAAS,IAC/B,KAAK,QAAU,IAEnB,MAAM,OAAOA,CAAiB,CAClC,CACJ,CAjDoBC,EAAA,CADfL,EAAS,CAAE,KAAM,MAAO,CAAC,GALjB,WAMO",
6
6
  "names": ["html", "ifDefined", "property", "PickerBase", "ObserveSlotText", "actionMenuStyles", "changedProperties", "__decorateClass"]
7
7
  }
package/test/index.js CHANGED
@@ -220,6 +220,9 @@ export const testActionMenu = (mode) => {
220
220
  button.click();
221
221
  await elementUpdated(el);
222
222
  expect(el.open).to.be.true;
223
+ expect(button).to.have.attribute("aria-haspopup", "true");
224
+ expect(button).to.have.attribute("aria-expanded", "true");
225
+ expect(button).to.have.attribute("aria-controls", "menu");
223
226
  });
224
227
  it("opens unmeasured with deprecated syntax", async () => {
225
228
  const el = await deprecatedActionMenuFixture();
@@ -230,22 +233,35 @@ export const testActionMenu = (mode) => {
230
233
  });
231
234
  it("toggles open/close multiple time", async () => {
232
235
  const el = await actionMenuFixture();
236
+ await elementUpdated(el);
237
+ const button = el.button;
238
+ expect(button).to.have.attribute("aria-haspopup", "true");
239
+ expect(button).to.have.attribute("aria-expanded", "false");
240
+ expect(button).not.to.have.attribute("aria-controls");
233
241
  let opened = oneEvent(el, "sp-opened");
234
242
  el.open = true;
235
243
  await opened;
236
244
  expect(el.open).to.be.true;
245
+ expect(button).to.have.attribute("aria-expanded", "true");
246
+ expect(button).to.have.attribute("aria-controls", "menu");
237
247
  let closed = oneEvent(el, "sp-closed");
238
248
  el.open = false;
239
249
  await closed;
240
250
  expect(el.open).to.be.false;
251
+ expect(button).to.have.attribute("aria-expanded", "false");
252
+ expect(button).not.to.have.attribute("aria-controls");
241
253
  opened = oneEvent(el, "sp-opened");
242
254
  el.open = true;
243
255
  await opened;
244
256
  expect(el.open).to.be.true;
257
+ expect(button).to.have.attribute("aria-expanded", "true");
258
+ expect(button).to.have.attribute("aria-controls", "menu");
245
259
  closed = oneEvent(el, "sp-closed");
246
260
  el.open = false;
247
261
  await closed;
248
262
  expect(el.open).to.be.false;
263
+ expect(button).to.have.attribute("aria-expanded", "false");
264
+ expect(button).not.to.have.attribute("aria-controls");
249
265
  });
250
266
  it("allows submenu items to be selected", async () => {
251
267
  const root = await actionSubmenuFixture();
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 {\n elementUpdated,\n expect,\n fixture,\n html,\n oneEvent,\n} from '@open-wc/testing';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers';\n\nimport { spy } from 'sinon';\n\nimport { ActionMenu } from '@spectrum-web-components/action-menu';\nimport type { Menu, MenuItem } from '@spectrum-web-components/menu';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/dialog/sp-dialog-base.js';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { TemplateResult } from '@spectrum-web-components/base';\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"dark\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\nignoreResizeObserverLoopError(before, after);\n\nconst deprecatedActionMenuFixture = async (): Promise<ActionMenu> =>\n await fixture<ActionMenu>(\n html`\n <sp-action-menu label=\"More Actions\">\n <sp-menu>\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-divider></sp-menu-divider>\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-action-menu>\n `\n );\n\nconst actionMenuFixture = async (): Promise<ActionMenu> =>\n await fixture<ActionMenu>(\n html`\n <sp-action-menu label=\"More Actions\">\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-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-action-menu>\n `\n );\n\nconst actionSubmenuFixture = async (): Promise<ActionMenu> =>\n await fixture<ActionMenu>(\n html`\n <sp-action-menu label=\"More Actions\">\n <sp-menu-item>One</sp-menu-item>\n <sp-menu-item selected id=\"root-selected-item\">\n Two\n </sp-menu-item>\n <sp-menu-item id=\"item-with-submenu\">\n B should be selected\n <sp-menu slot=\"submenu\">\n <sp-menu-item>A</sp-menu-item>\n <sp-menu-item selected id=\"sub-selected-item\">\n B\n </sp-menu-item>\n <sp-menu-item>C</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-action-menu>\n `\n );\n\nexport const testActionMenu = (mode: 'sync' | 'async'): void => {\n describe(`Action menu: ${mode}`, () => {\n testForLitDevWarnings(async () => await actionMenuFixture());\n it('loads', async () => {\n const el = await actionMenuFixture();\n await elementUpdated(el);\n\n expect(el).to.not.be.undefined;\n\n await expect(el).to.be.accessible();\n });\n it('loads - [slot=\"label\"]', async () => {\n const el = await fixture<ActionMenu>(\n html`\n <sp-action-menu>\n <span slot=\"label\">More Actions</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-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-action-menu>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [custom icon]', async () => {\n const el = await fixture<ActionMenu>(\n html`\n <sp-action-menu label=\"More Actions\">\n <sp-icon-settings slot=\"icon\"></sp-icon-settings>\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-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-action-menu>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('dispatches change events, no [href]', async () => {\n const changeSpy = spy();\n\n const el = await fixture<ActionMenu>(\n html`\n <sp-action-menu\n label=\"More Actions\"\n @change=${() => changeSpy()}\n >\n <sp-icon-settings slot=\"icon\"></sp-icon-settings>\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-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-action-menu>\n `\n );\n\n expect(changeSpy.callCount).to.equal(0);\n expect(el.open).to.be.false;\n\n const menuItem2 = el.querySelector(\n 'sp-menu-item:nth-child(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\n const closed = oneEvent(el, 'sp-closed');\n menuItem2.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(changeSpy.callCount).to.equal(1);\n });\n it('closes when Menu Item has [href]', async () => {\n const changeSpy = spy();\n\n const el = await fixture<ActionMenu>(\n html`\n <sp-action-menu\n label=\"More Actions\"\n @change=${() => {\n changeSpy();\n }}\n >\n <sp-icon-settings slot=\"icon\"></sp-icon-settings>\n <sp-menu-item href=\"#\">Deselect</sp-menu-item>\n <sp-menu-item href=\"#\">Select Inverse</sp-menu-item>\n <sp-menu-item href=\"#\">Feather...</sp-menu-item>\n <sp-menu-item href=\"#\">Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item href=\"#\">Save Selection</sp-menu-item>\n <sp-menu-item href=\"#\" disabled>\n Make Work Path\n </sp-menu-item>\n </sp-action-menu>\n `\n );\n\n expect(changeSpy.callCount).to.equal(0);\n expect(el.open).to.be.false;\n\n const menuItem2 = el.querySelector(\n 'sp-menu-item:nth-child(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\n const closed = oneEvent(el, 'sp-closed');\n menuItem2.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(changeSpy.callCount).to.equal(0);\n });\n it('can be `quiet`', async () => {\n const el = await actionMenuFixture();\n\n expect(el.quiet).to.be.false;\n\n el.quiet = true;\n await elementUpdated(el);\n\n expect(el.quiet).to.be.true;\n });\n it('stay `valid`', async () => {\n const el = await actionMenuFixture();\n\n expect(el.invalid).to.be.false;\n\n el.invalid = true;\n await elementUpdated(el);\n\n expect(el.invalid).to.be.false;\n });\n it('focus()', async () => {\n const el = await actionMenuFixture();\n\n el.focus();\n\n expect(document.activeElement).to.equal(el);\n expect(el.shadowRoot.activeElement).to.equal(el.focusElement);\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(document.activeElement).to.equal(el);\n expect(el.shadowRoot.activeElement).to.equal(el.focusElement);\n });\n it('opens unmeasured', async () => {\n const el = await actionMenuFixture();\n\n const button = el.button as HTMLButtonElement;\n\n button.click();\n await elementUpdated(el);\n expect(el.open).to.be.true;\n });\n it('opens unmeasured with deprecated syntax', async () => {\n const el = await deprecatedActionMenuFixture();\n\n const button = el.button as HTMLButtonElement;\n\n button.click();\n await elementUpdated(el);\n expect(el.open).to.be.true;\n });\n it('toggles open/close multiple time', async () => {\n const el = await actionMenuFixture();\n\n let opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n\n let closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n\n opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n\n closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n });\n it('allows submenu items to be selected', async () => {\n const root = await actionSubmenuFixture();\n const menuItem = root.querySelector('#item-with-submenu') as Menu;\n const submenu = menuItem.querySelector(\n 'sp-menu[slot=\"submenu\"]'\n ) as Menu;\n const selectedItem = submenu.querySelector(\n '#sub-selected-item'\n ) as MenuItem;\n\n expect(selectedItem.selected, 'item should be initially selected')\n .to.be.true;\n\n let opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n expect(root.open).to.be.true;\n\n opened = oneEvent(menuItem, 'sp-opened');\n menuItem.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n\n await elementUpdated(submenu);\n expect(\n selectedItem.selected,\n 'initially selected item should maintain selection'\n ).to.be.true;\n });\n it('allows top-level selection state to change', async () => {\n const root = await styledFixture<ActionMenu>(html`\n <sp-action-menu label=\"More Actions\">\n <sp-menu-item>One</sp-menu-item>\n <sp-menu-item selected id=\"root-selected-item\">\n Two\n </sp-menu-item>\n <sp-menu-item id=\"item-with-submenu\">\n B should be selected\n <sp-menu slot=\"submenu\">\n <sp-menu-item>A</sp-menu-item>\n <sp-menu-item selected id=\"sub-selected-item\">\n B\n </sp-menu-item>\n <sp-menu-item>C</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-action-menu>\n `);\n\n const unselectedItem = root.querySelector(\n 'sp-menu-item'\n ) as MenuItem;\n const selectedItem = root.querySelector(\n '#root-selected-item'\n ) as MenuItem;\n let selected = true;\n\n selectedItem.addEventListener('click', () => {\n selected = !selected;\n selectedItem.selected = selected;\n });\n\n expect(unselectedItem.textContent).to.include('One');\n expect(unselectedItem.selected).to.be.false;\n expect(selectedItem.textContent).to.include('Two');\n expect(selectedItem.selected).to.be.true;\n\n let opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n\n // close by clicking selected\n // (with event listener: should set selected = false)\n let closed = oneEvent(root, 'sp-closed');\n selectedItem.click();\n await closed;\n\n expect(root.open).to.be.false;\n opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n\n // close by clicking unselected\n // (no event listener: should remain selected = false)\n closed = oneEvent(root, 'sp-closed');\n unselectedItem.click();\n await closed;\n\n opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n\n expect(unselectedItem.textContent).to.include('One');\n expect(unselectedItem.selected).to.be.false;\n expect(selectedItem.textContent).to.include('Two');\n expect(selectedItem.selected).to.be.false;\n\n // close by clicking selected\n // (with event listener: should set selected = false)\n closed = oneEvent(root, 'sp-closed');\n selectedItem.click();\n await closed;\n\n opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n\n expect(unselectedItem.textContent).to.include('One');\n expect(unselectedItem.selected).to.be.false;\n expect(selectedItem.textContent).to.include('Two');\n expect(selectedItem.selected).to.be.true;\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 {\n elementUpdated,\n expect,\n fixture,\n html,\n oneEvent,\n} from '@open-wc/testing';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers';\n\nimport { spy } from 'sinon';\n\nimport { ActionMenu } from '@spectrum-web-components/action-menu';\nimport type { Menu, MenuItem } from '@spectrum-web-components/menu';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport '@spectrum-web-components/dialog/sp-dialog-base.js';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { TemplateResult } from '@spectrum-web-components/base';\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme theme=\"spectrum\" scale=\"medium\" color=\"dark\">\n ${story}\n </sp-theme>\n `);\n return test.children[0] as T;\n}\n\nignoreResizeObserverLoopError(before, after);\n\nconst deprecatedActionMenuFixture = async (): Promise<ActionMenu> =>\n await fixture<ActionMenu>(\n html`\n <sp-action-menu label=\"More Actions\">\n <sp-menu>\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-divider></sp-menu-divider>\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-action-menu>\n `\n );\n\nconst actionMenuFixture = async (): Promise<ActionMenu> =>\n await fixture<ActionMenu>(\n html`\n <sp-action-menu label=\"More Actions\">\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-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-action-menu>\n `\n );\n\nconst actionSubmenuFixture = async (): Promise<ActionMenu> =>\n await fixture<ActionMenu>(\n html`\n <sp-action-menu label=\"More Actions\">\n <sp-menu-item>One</sp-menu-item>\n <sp-menu-item selected id=\"root-selected-item\">\n Two\n </sp-menu-item>\n <sp-menu-item id=\"item-with-submenu\">\n B should be selected\n <sp-menu slot=\"submenu\">\n <sp-menu-item>A</sp-menu-item>\n <sp-menu-item selected id=\"sub-selected-item\">\n B\n </sp-menu-item>\n <sp-menu-item>C</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-action-menu>\n `\n );\n\nexport const testActionMenu = (mode: 'sync' | 'async'): void => {\n describe(`Action menu: ${mode}`, () => {\n testForLitDevWarnings(async () => await actionMenuFixture());\n it('loads', async () => {\n const el = await actionMenuFixture();\n await elementUpdated(el);\n\n expect(el).to.not.be.undefined;\n\n await expect(el).to.be.accessible();\n });\n it('loads - [slot=\"label\"]', async () => {\n const el = await fixture<ActionMenu>(\n html`\n <sp-action-menu>\n <span slot=\"label\">More Actions</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-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-action-menu>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [custom icon]', async () => {\n const el = await fixture<ActionMenu>(\n html`\n <sp-action-menu label=\"More Actions\">\n <sp-icon-settings slot=\"icon\"></sp-icon-settings>\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-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-action-menu>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('dispatches change events, no [href]', async () => {\n const changeSpy = spy();\n\n const el = await fixture<ActionMenu>(\n html`\n <sp-action-menu\n label=\"More Actions\"\n @change=${() => changeSpy()}\n >\n <sp-icon-settings slot=\"icon\"></sp-icon-settings>\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-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-action-menu>\n `\n );\n\n expect(changeSpy.callCount).to.equal(0);\n expect(el.open).to.be.false;\n\n const menuItem2 = el.querySelector(\n 'sp-menu-item:nth-child(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\n const closed = oneEvent(el, 'sp-closed');\n menuItem2.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(changeSpy.callCount).to.equal(1);\n });\n it('closes when Menu Item has [href]', async () => {\n const changeSpy = spy();\n\n const el = await fixture<ActionMenu>(\n html`\n <sp-action-menu\n label=\"More Actions\"\n @change=${() => {\n changeSpy();\n }}\n >\n <sp-icon-settings slot=\"icon\"></sp-icon-settings>\n <sp-menu-item href=\"#\">Deselect</sp-menu-item>\n <sp-menu-item href=\"#\">Select Inverse</sp-menu-item>\n <sp-menu-item href=\"#\">Feather...</sp-menu-item>\n <sp-menu-item href=\"#\">Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item href=\"#\">Save Selection</sp-menu-item>\n <sp-menu-item href=\"#\" disabled>\n Make Work Path\n </sp-menu-item>\n </sp-action-menu>\n `\n );\n\n expect(changeSpy.callCount).to.equal(0);\n expect(el.open).to.be.false;\n\n const menuItem2 = el.querySelector(\n 'sp-menu-item:nth-child(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\n const closed = oneEvent(el, 'sp-closed');\n menuItem2.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(changeSpy.callCount).to.equal(0);\n });\n it('can be `quiet`', async () => {\n const el = await actionMenuFixture();\n\n expect(el.quiet).to.be.false;\n\n el.quiet = true;\n await elementUpdated(el);\n\n expect(el.quiet).to.be.true;\n });\n it('stay `valid`', async () => {\n const el = await actionMenuFixture();\n\n expect(el.invalid).to.be.false;\n\n el.invalid = true;\n await elementUpdated(el);\n\n expect(el.invalid).to.be.false;\n });\n it('focus()', async () => {\n const el = await actionMenuFixture();\n\n el.focus();\n\n expect(document.activeElement).to.equal(el);\n expect(el.shadowRoot.activeElement).to.equal(el.focusElement);\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(document.activeElement).to.equal(el);\n expect(el.shadowRoot.activeElement).to.equal(el.focusElement);\n });\n it('opens unmeasured', async () => {\n const el = await actionMenuFixture();\n\n const button = el.button as HTMLButtonElement;\n\n button.click();\n await elementUpdated(el);\n expect(el.open).to.be.true;\n expect(button).to.have.attribute('aria-haspopup', 'true');\n expect(button).to.have.attribute('aria-expanded', 'true');\n expect(button).to.have.attribute('aria-controls', 'menu');\n });\n it('opens unmeasured with deprecated syntax', async () => {\n const el = await deprecatedActionMenuFixture();\n\n const button = el.button as HTMLButtonElement;\n\n button.click();\n await elementUpdated(el);\n expect(el.open).to.be.true;\n });\n it('toggles open/close multiple time', async () => {\n const el = await actionMenuFixture();\n\n await elementUpdated(el);\n\n const button = el.button as HTMLButtonElement;\n expect(button).to.have.attribute('aria-haspopup', 'true');\n expect(button).to.have.attribute('aria-expanded', 'false');\n expect(button).not.to.have.attribute('aria-controls');\n\n let opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n expect(button).to.have.attribute('aria-expanded', 'true');\n expect(button).to.have.attribute('aria-controls', 'menu');\n\n let closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(button).to.have.attribute('aria-expanded', 'false');\n expect(button).not.to.have.attribute('aria-controls');\n\n opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n expect(button).to.have.attribute('aria-expanded', 'true');\n expect(button).to.have.attribute('aria-controls', 'menu');\n\n closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(button).to.have.attribute('aria-expanded', 'false');\n expect(button).not.to.have.attribute('aria-controls');\n });\n it('allows submenu items to be selected', async () => {\n const root = await actionSubmenuFixture();\n const menuItem = root.querySelector('#item-with-submenu') as Menu;\n const submenu = menuItem.querySelector(\n 'sp-menu[slot=\"submenu\"]'\n ) as Menu;\n const selectedItem = submenu.querySelector(\n '#sub-selected-item'\n ) as MenuItem;\n\n expect(selectedItem.selected, 'item should be initially selected')\n .to.be.true;\n\n let opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n expect(root.open).to.be.true;\n\n opened = oneEvent(menuItem, 'sp-opened');\n menuItem.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n\n await elementUpdated(submenu);\n expect(\n selectedItem.selected,\n 'initially selected item should maintain selection'\n ).to.be.true;\n });\n it('allows top-level selection state to change', async () => {\n const root = await styledFixture<ActionMenu>(html`\n <sp-action-menu label=\"More Actions\">\n <sp-menu-item>One</sp-menu-item>\n <sp-menu-item selected id=\"root-selected-item\">\n Two\n </sp-menu-item>\n <sp-menu-item id=\"item-with-submenu\">\n B should be selected\n <sp-menu slot=\"submenu\">\n <sp-menu-item>A</sp-menu-item>\n <sp-menu-item selected id=\"sub-selected-item\">\n B\n </sp-menu-item>\n <sp-menu-item>C</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-action-menu>\n `);\n\n const unselectedItem = root.querySelector(\n 'sp-menu-item'\n ) as MenuItem;\n const selectedItem = root.querySelector(\n '#root-selected-item'\n ) as MenuItem;\n let selected = true;\n\n selectedItem.addEventListener('click', () => {\n selected = !selected;\n selectedItem.selected = selected;\n });\n\n expect(unselectedItem.textContent).to.include('One');\n expect(unselectedItem.selected).to.be.false;\n expect(selectedItem.textContent).to.include('Two');\n expect(selectedItem.selected).to.be.true;\n\n let opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n\n // close by clicking selected\n // (with event listener: should set selected = false)\n let closed = oneEvent(root, 'sp-closed');\n selectedItem.click();\n await closed;\n\n expect(root.open).to.be.false;\n opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n\n // close by clicking unselected\n // (no event listener: should remain selected = false)\n closed = oneEvent(root, 'sp-closed');\n unselectedItem.click();\n await closed;\n\n opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n\n expect(unselectedItem.textContent).to.include('One');\n expect(unselectedItem.selected).to.be.false;\n expect(selectedItem.textContent).to.include('Two');\n expect(selectedItem.selected).to.be.false;\n\n // close by clicking selected\n // (with event listener: should set selected = false)\n closed = oneEvent(root, 'sp-closed');\n selectedItem.click();\n await closed;\n\n opened = oneEvent(root, 'sp-opened');\n root.click();\n await opened;\n\n expect(unselectedItem.textContent).to.include('One');\n expect(unselectedItem.selected).to.be.false;\n expect(selectedItem.textContent).to.include('Two');\n expect(selectedItem.selected).to.be.true;\n });\n });\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }