@m3e/menu 1.0.0-rc.1 → 1.0.0-rc.3
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/README.md +1 -2
- package/dist/custom-elements.json +3262 -34
- package/dist/html-custom-data.json +12 -6
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +7 -7
- package/dist/index.min.js.map +1 -1
- package/dist/src/MenuElement.d.ts +0 -1
- package/dist/src/MenuElement.d.ts.map +1 -1
- package/dist/src/MenuItemCheckboxElement.d.ts +2 -1
- package/dist/src/MenuItemCheckboxElement.d.ts.map +1 -1
- package/dist/src/MenuItemElement.d.ts +2 -1
- package/dist/src/MenuItemElement.d.ts.map +1 -1
- package/dist/src/MenuItemGroupElement.d.ts +0 -1
- package/dist/src/MenuItemGroupElement.d.ts.map +1 -1
- package/dist/src/MenuItemRadioElement.d.ts +2 -1
- package/dist/src/MenuItemRadioElement.d.ts.map +1 -1
- package/dist/src/MenuTriggerElement.d.ts +1 -2
- package/dist/src/MenuTriggerElement.d.ts.map +1 -1
- package/package.json +4 -4
- package/cem.config.mjs +0 -16
- package/demo/index.html +0 -112
- package/eslint.config.mjs +0 -13
- package/rollup.config.js +0 -32
- package/src/MenuElement.ts +0 -449
- package/src/MenuItemCheckboxElement.ts +0 -178
- package/src/MenuItemElement.ts +0 -210
- package/src/MenuItemElementBase.ts +0 -158
- package/src/MenuItemGroupElement.ts +0 -37
- package/src/MenuItemRadioElement.ts +0 -169
- package/src/MenuPosition.ts +0 -5
- package/src/MenuTriggerElement.ts +0 -154
- package/src/index.ts +0 -7
- package/tsconfig.json +0 -9
package/dist/index.min.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright (c) 2025 matraic
|
|
4
4
|
* See LICENSE file in the project root for full license text.
|
|
5
5
|
*/
|
|
6
|
-
import{LitElement as e,nothing as t,html as s,css as i,unsafeCSS as n}from"lit";import{KeyboardClick as o,Focusable as r,AttachInternals as a,Disabled as c,isLinkButtonMixin as l,renderPseudoLink as h,DesignToken as d,HtmlFor as u,
|
|
6
|
+
import{LitElement as e,nothing as t,html as s,css as i,unsafeCSS as n}from"lit";import{KeyboardClick as o,Focusable as r,AttachInternals as a,Disabled as c,isLinkButtonMixin as l,renderPseudoLink as h,DesignToken as d,HtmlFor as u,LinkButton as m,Role as p,HoverController as f,hasAssignedNodes as v,ScrollController as b,Checked as g}from"@m3e/core";import{addAriaReferencedId as y,removeAriaReferencedId as w,RovingTabIndexManager as E}from"@m3e/core/a11y";import{positionAnchor as k}from"@m3e/core/anchoring";function $(e,t,s,i){var n,o=arguments.length,r=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,s):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,s,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(r=(o<3?n(r):o>3?n(t,s,r):n(t,s))||r);return o>3&&r&&Object.defineProperty(t,s,r),r}function S(e,t,s,i){if("a"===s&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?i:"a"===s?i.call(e):i?i.value:t.get(e)}function _(e,t,s,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,s):n?n.value=s:t.set(e,s),s}"function"==typeof SuppressedError&&SuppressedError;
|
|
7
7
|
/**
|
|
8
8
|
* @license
|
|
9
9
|
* Copyright 2017 Google LLC
|
|
@@ -146,14 +146,14 @@ function F(e,t){return(t,s,i)=>((e,t,s)=>(s.configurable=!0,s.enumerable=!0,Refl
|
|
|
146
146
|
color: GrayText;
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
`,$([F(".focus-ring")],Q.prototype,"_focusRing",void 0),$([F(".state-layer")],Q.prototype,"_stateLayer",void 0),$([F(".ripple")],Q.prototype,"_ripple",void 0);let ie=class extends(u(
|
|
149
|
+
`,$([F(".focus-ring")],Q.prototype,"_focusRing",void 0),$([F(".state-layer")],Q.prototype,"_stateLayer",void 0),$([F(".ripple")],Q.prototype,"_ripple",void 0);let ie=class extends(u(e)){constructor(){super(...arguments),ee.add(this),te.set(this,async e=>S(this,ee,"m",se).call(this,e))}get menu(){return"M3E-MENU"===this.control?.tagName?this.control:null}connectedCallback(){super.connectedCallback(),this.parentElement?.addEventListener("click",S(this,te,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.parentElement?.removeEventListener("click",S(this,te,"f"))}attach(e){super.attach(e);const t=this.menu;t&&(this.parentElement&&(this.parentElement.ariaHasPopup="menu",this.parentElement.ariaExpanded="false",t.id&&y(this.parentElement,"aria-controls",t.id)),this.closest("m3e-menu")&&(t.submenu=!0))}detach(){if(this.parentElement){this.parentElement.ariaHasPopup=null,this.parentElement.ariaExpanded=null;const e=this.menu;e?.id&&w(this.parentElement,"aria-controls",e.id)}super.detach()}render(){return s`<slot></slot>`}};var ne,oe,re,ae,ce,le,he,de,ue,me,pe,fe;te=new WeakMap,ee=new WeakSet,se=function(e){!e.defaultPrevented&&this.parentElement&&("M3E-MENU-ITEM"===this.parentElement.tagName?this.menu?.show(this.parentElement):this.menu?.toggle(this.parentElement))},ie.styles=i`
|
|
150
150
|
:host {
|
|
151
151
|
display: contents;
|
|
152
152
|
}
|
|
153
153
|
::slotted(.material-icons) {
|
|
154
154
|
font-size: inherit !important;
|
|
155
155
|
}
|
|
156
|
-
`,ie=$([C("m3e-menu-trigger")],ie);let ve=fe=class extends(p(
|
|
156
|
+
`,ie=$([C("m3e-menu-trigger")],ie);let ve=fe=class extends(m(p(Q,"menuitem"))){constructor(){super(),ne.add(this),oe.set(this,e=>S(this,ne,"m",ue).call(this,e)),re.set(this,e=>S(this,ne,"m",me).call(this,e)),ae.set(this,()=>S(this,ne,"m",pe).call(this)),this._hasSubmenu=!1,ce.set(this,void 0),new f(this,{startDelay:500,endDelay:500,callback:e=>{e&&!this.disabled&&S(this,ce,"f")&&S(this,ce,"f").menu?.show(this)}})}get submenu(){return S(this,ce,"f")?.menu??null}connectedCallback(){super.connectedCallback(),this.addEventListener("click",S(this,oe,"f")),this.addEventListener("keydown",S(this,re,"f")),this.addEventListener("mouseenter",S(this,ae,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",S(this,oe,"f")),this.removeEventListener("keydown",S(this,re,"f")),this.removeEventListener("mouseenter",S(this,ae,"f"))}_renderContent(){return s`<slot name="icon" aria-hidden="true" @slotchange="${S(this,ne,"m",he)}"></slot>
|
|
157
157
|
<span class="content"><slot @slotchange="${S(this,ne,"m",le)}"></slot></span>
|
|
158
158
|
${this._hasSubmenu?s`<svg class="trailing-icon" aria-hidden="true" viewBox="0 -960 960 960" fill="currentColor">
|
|
159
159
|
<path d="M400-280v-400l200 200-200 200Z" />
|
|
@@ -163,7 +163,7 @@ function F(e,t){return(t,s,i)=>((e,t,s)=>(s.configurable=!0,s.enumerable=!0,Refl
|
|
|
163
163
|
* @license
|
|
164
164
|
* Copyright 2017 Google LLC
|
|
165
165
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
166
|
-
*/()],ve.prototype,"_hasSubmenu",void 0),ve=fe=$([C("m3e-menu-item")],ve);let Me=Le=class extends(
|
|
166
|
+
*/()],ve.prototype,"_hasSubmenu",void 0),ve=fe=$([C("m3e-menu-item")],ve);let Me=Le=class extends(p(e,"menu")){constructor(){super(...arguments),be.add(this),ge.set(this,void 0),ye.set(this,void 0),we.set(this,(new E).withWrap().withHomeAndEnd().withVerticalOrientation()),Ee.set(this,e=>S(this,be,"m",Ce).call(this,e)),ke.set(this,e=>S(this,be,"m",Pe).call(this,e)),$e.set(this,new b(this,{target:null,callback:e=>e instanceof Le?e.items.filter(e=>e instanceof ve).forEach(e=>e.submenu?.hide()):this.hideAll()})),Se.set(this,e=>{"closed"===e.newState?(S(this,ye,"f")?.call(this),_(this,ye,void 0,"f")):setTimeout(()=>{S(this,we,"f").setActiveItem(S(this,we,"f").items.find(e=>!e.disabled))},40)}),this.positionX="after",this.positionY="below",this.submenu=!1}get items(){return S(this,we,"f").items}get isOpen(){return void 0!==S(this,ge,"f")}connectedCallback(){super.connectedCallback(),this.tabIndex=-1,this.setAttribute("popover","manual"),this.addEventListener("keydown",S(this,Ee,"f")),this.addEventListener("toggle",S(this,Se,"f")),document.addEventListener("click",S(this,ke,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",S(this,Ee,"f")),this.removeEventListener("toggle",S(this,Se,"f")),document.removeEventListener("click",S(this,ke,"f"))}async show(e){S(this,ge,"f")&&S(this,ge,"f")!==e&&this.hide(),_(this,ye,await k(this,e,{position:this.submenu?"before"===this.positionX?"left-start":"right-start":"above"===this.positionY?"before"===this.positionX?"top-end":"top-start":"before"===this.positionX?"bottom-end":"bottom-start",inline:!0,flip:!0,shift:!0,offset:this.submenu?void 0:4},(e,t,s)=>{if(this.submenu){if(S(this,ge,"f")){const e=S(this,be,"m",xe).call(this,S(this,ge,"f")).y;this.classList.toggle("-shift-down",!1),this.classList.toggle("-shift-up",!1),this.classList.toggle(Math.round(t)===Math.round(e)?"-shift-down":"-shift-up",!0)}}else this.classList.toggle("-top",s.includes("top")),this.classList.toggle("-bottom",s.includes("bottom"));this.style.left=`${e}px`,this.style.top=`${t}px`}),"f"),this.showPopover(),_(this,ge,e,"f"),S(this,ge,"f").ariaExpanded="true",S(this,$e,"f").observe(S(this,ge,"f"))}hide(e=!1){for(const e of S(this,we,"f").items){const t=e.submenu;t&&t.isOpen&&t.hide()}this.hidePopover(),S(this,ge,"f")&&(S(this,ge,"f").ariaExpanded="false",e&&S(this,ge,"f").focus(),S(this,$e,"f").unobserve(S(this,ge,"f")),_(this,ge,void 0,"f"))}hideAll(e=!1){let t=this;for(;S(t,ge,"f");){const e=S(t,ge,"f").closest("m3e-menu");if(!e)break;t=e}t.hide(e)}async toggle(e){S(this,ge,"f")?this.hide():await this.show(e)}render(){return s`<slot @slotchange="${S(this,be,"m",_e)}"></slot>`}};var Ae,Ue,Oe,We,Te,Re,ze,je,De,qe,Ne,Ie;ge=new WeakMap,ye=new WeakMap,we=new WeakMap,Ee=new WeakMap,ke=new WeakMap,$e=new WeakMap,Se=new WeakMap,be=new WeakSet,_e=function(){const{added:e}=S(this,we,"f").setItems([...this.querySelectorAll("m3e-menu-item,m3e-menu-item-checkbox,m3e-menu-item-radio")].filter(e=>e.closest("m3e-menu")===this));S(this,we,"f").activeItem||S(this,we,"f").updateActiveItem(e.find(e=>!e.disabled))},Ce=function(e){switch(e.key){case"Left":case"ArrowLeft":e.preventDefault(),this.hide(!0);break;case"Tab":this.hideAll();break;case"Escape":e.shiftKey||e.ctrlKey||this.hide(!0);break;default:S(this,we,"f").onKeyDown(e)}},Pe=function(e){this.submenu||e.composedPath().some(e=>e instanceof Le||e===S(this,ge,"f"))||this.hide()},xe=function(e){let t=0,s=0;for(let i=e;i;i=i.offsetParent instanceof HTMLElement?i.offsetParent:null)t+=i.offsetLeft-i.scrollLeft+i.clientLeft,s+=i.offsetTop-i.scrollTop+i.clientTop;return{x:t,y:s}},Me.styles=i`
|
|
167
167
|
:host {
|
|
168
168
|
position: absolute;
|
|
169
169
|
flex-direction: column;
|
|
@@ -232,7 +232,7 @@ function F(e,t){return(t,s,i)=>((e,t,s)=>(s.configurable=!0,s.enumerable=!0,Refl
|
|
|
232
232
|
border: 1px solid CanvasText;
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
|
-
`,$([G({attribute:"position-x"})],Me.prototype,"positionX",void 0),$([G({attribute:"position-y"})],Me.prototype,"positionY",void 0),$([G({type:Boolean,reflect:!0})],Me.prototype,"submenu",void 0),Me=Le=$([C("m3e-menu")],Me);let Be=class extends(g(
|
|
235
|
+
`,$([G({attribute:"position-x"})],Me.prototype,"positionX",void 0),$([G({attribute:"position-y"})],Me.prototype,"positionY",void 0),$([G({type:Boolean,reflect:!0})],Me.prototype,"submenu",void 0),Me=Le=$([C("m3e-menu")],Me);let Be=class extends(g(p(Q,"menuitemcheckbox"))){constructor(){super(...arguments),Ae.add(this),Ue.set(this,e=>S(this,Ae,"m",De).call(this,e)),Oe.set(this,e=>S(this,Ae,"m",qe).call(this,e)),We.set(this,()=>S(this,Ae,"m",Ne).call(this)),Te.set(this,()=>S(this,Ae,"m",Ie).call(this)),Re.set(this,!1)}connectedCallback(){super.connectedCallback(),this.addEventListener("click",S(this,Ue,"f")),this.addEventListener("keydown",S(this,Oe,"f")),this.addEventListener("keyup",S(this,We,"f")),this.addEventListener("mouseenter",S(this,Te,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",S(this,Ue,"f")),this.removeEventListener("keydown",S(this,Oe,"f")),this.removeEventListener("keyup",S(this,We,"f")),this.removeEventListener("mouseenter",S(this,Te,"f"))}_renderContent(){return s` <div class="icon">
|
|
236
236
|
<svg class="check" viewBox="0 -960 960 960" aria-hidden="true">
|
|
237
237
|
<path fill="currentColor" d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z" />
|
|
238
238
|
</svg>
|
|
@@ -261,11 +261,11 @@ function F(e,t){return(t,s,i)=>((e,t,s)=>(s.configurable=!0,s.enumerable=!0,Refl
|
|
|
261
261
|
:host([checked]) ::slotted([slot="icon"]) {
|
|
262
262
|
display: none !important;
|
|
263
263
|
}
|
|
264
|
-
`],Be=$([C("m3e-menu-item-checkbox")],Be);let He=class extends(
|
|
264
|
+
`],Be=$([C("m3e-menu-item-checkbox")],Be);let He=class extends(p(e,"group")){render(){return s`<slot></slot>`}};var Ye,Ke,Xe,Ze,Je,Ve,Ge,Fe,Qe,et,tt,st;He.styles=i`
|
|
265
265
|
:host {
|
|
266
266
|
display: contents;
|
|
267
267
|
}
|
|
268
|
-
`,He=$([C("m3e-menu-item-group")],He);let it=class extends(g(
|
|
268
|
+
`,He=$([C("m3e-menu-item-group")],He);let it=class extends(g(p(Q,"menuitemradio"))){constructor(){super(...arguments),Ye.add(this),Ke.set(this,e=>S(this,Ye,"m",Qe).call(this,e)),Xe.set(this,e=>S(this,Ye,"m",et).call(this,e)),Ze.set(this,()=>S(this,Ye,"m",tt).call(this)),Je.set(this,()=>S(this,Ye,"m",st).call(this)),Ve.set(this,!1)}connectedCallback(){super.connectedCallback(),this.addEventListener("click",S(this,Ke,"f")),this.addEventListener("keydown",S(this,Xe,"f")),this.addEventListener("keyup",S(this,Ze,"f")),this.addEventListener("mouseenter",S(this,Je,"f"))}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",S(this,Ke,"f")),this.removeEventListener("keydown",S(this,Xe,"f")),this.removeEventListener("keyup",S(this,Ze,"f")),this.removeEventListener("mouseenter",S(this,Je,"f"))}update(e){super.update(e),e.has("checked")&&this.checked&&(this.closest("[role='group']")??this.closest("m3e-menu"))?.querySelectorAll("m3e-menu-item-radio").forEach(e=>{e!==this&&e.checked&&(e.checked=!1)})}_renderContent(){return s` <div class="icon">
|
|
269
269
|
<svg class="check" viewBox="0 -960 960 960" aria-hidden="true">
|
|
270
270
|
<path fill="currentColor" d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z" />
|
|
271
271
|
</svg>
|