UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

3 lines (2 loc) 2.54 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */ import{a as p}from"./SQ6RHDDF.js";import{a as c}from"./3XLPUKLV.js";import"./3YEM2IPT.js";import{c as f}from"./QUTTHRH3.js";import"./MNIRD7Q7.js";import{l as h,u as m,y as l}from"./ZQBZ5QPB.js";import"./CIYXQ5G6.js";import{E as u,Q as r,g as o,h as n}from"./G7AHLVJ5.js";var d=o`:host{display:flex}ul{margin:0;display:inline-flex;block-size:100%;align-items:center;padding:0}:host([layout=vertical]) ul{display:flex;inline-size:100%;flex-direction:column}:host([hidden]){display:none}[hidden]{display:none}`,a=class extends u{constructor(){super(),this.attributeWatch=f(["role"],this.handleGlobalAttributesChanged),this.menuItems=[],this.messages=p(),this.focusSetter=c()(this),this.layout="horizontal",this.listen("calciteInternalMenuItemKeyEvent",this.calciteInternalNavMenuItemKeyEvent)}static{this.properties={label:1,layout:[3,{},{reflect:!0}],messageOverrides:[0,{},{attribute:!1}]}}static{this.shadowRootOptions={mode:"open",delegatesFocus:!0}}static{this.styles=d}async setFocus(e){return this.focusSetter(()=>this.menuItems[0],e)}willUpdate(e){e.has("layout")&&(this.hasUpdated||this.layout!=="horizontal")&&this.setMenuItemLayout(this.menuItems,this.layout)}handleGlobalAttributesChanged(){this.requestUpdate(),this.setMenuItemLayout(this.menuItems,this.layout)}calciteInternalNavMenuItemKeyEvent(e){let t=e.target,s=e.detail.children,i=e.detail.event.key;e.stopPropagation(),i==="ArrowDown"?t.layout==="vertical"?l(this.menuItems,t,"next",!1,!1):e.detail.isSubmenuOpen&&s[0].setFocus():i==="ArrowUp"?this.layout==="vertical"?l(this.menuItems,t,"previous",!1,!1):e.detail.isSubmenuOpen&&s[s.length-1].setFocus():i==="ArrowRight"?this.layout==="horizontal"?l(this.menuItems,t,"next",!1,!1):e.detail.isSubmenuOpen&&s[0].setFocus():i==="ArrowLeft"?this.layout==="horizontal"?l(this.menuItems,t,"previous",!1,!1):e.detail.isSubmenuOpen&&this.focusParentElement(e.target):i==="Escape"&&this.focusParentElement(e.target),e.preventDefault()}handleMenuSlotChange(e){this.menuItems=m(e),this.setMenuItemLayout(this.menuItems,this.layout)}focusParentElement(e){let t=e.parentElement;t&&(h(t),t.open=!1)}setMenuItemLayout(e,t){e.forEach(s=>{s.layout=t,this.getEffectiveRole()==="menubar"&&(s.isTopLevelItem=!0,s.topLevelMenuLayout=this.layout)})}getEffectiveRole(){return this.el.role||"menubar"}render(){return n`<ul .ariaLabel=${this.label} .role=${this.getEffectiveRole()}><slot @slotchange=${this.handleMenuSlotChange}></slot></ul>`}};r("calcite-menu",a);export{a as Menu};