@ecopages/radiant-ui 0.1.0-rc.4 → 0.1.0-rc.5
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/dist/components/ui/menu-button/index.d.ts +1 -1
- package/dist/components/ui/menu-button/index.js +1 -1
- package/dist/components/ui/menu-button/index.js.map +4 -4
- package/dist/components/ui/menu-button/menu-button.css +15 -0
- package/dist/components/ui/menu-button/menu-button.d.ts +15 -9
- package/dist/components/ui/menu-button/menu-button.script.d.ts +13 -2
- package/dist/components/ui/menubar/index.d.ts +1 -1
- package/dist/components/ui/menubar/index.js +1 -1
- package/dist/components/ui/menubar/index.js.map +4 -4
- package/dist/components/ui/menubar/menubar.css +16 -0
- package/dist/components/ui/menubar/menubar.d.ts +28 -6
- package/dist/components/ui/menubar/menubar.script.d.ts +12 -1
- package/dist/components/ui/separator/index.d.ts +1 -0
- package/dist/components/ui/separator/index.js +2 -0
- package/dist/components/ui/separator/index.js.map +7 -0
- package/dist/components/ui/separator/separator.css +32 -0
- package/dist/components/ui/separator/separator.d.ts +12 -0
- package/dist/components/ui/shared/menu-entry.d.ts +32 -0
- package/dist/components/ui/shared/menu-tree.d.ts +46 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/styles/radiant-ui-core.css +3 -0
- package/dist/styles/radiant-ui.css +3 -0
- package/dist/styles/style-dependencies.json +12 -2
- package/dist/styles/styles.css +74 -0
- package/dist/styles/tailwind.css +3 -0
- package/package.json +8 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { RuiMenuButton as RuiMenuButtonElement, type RuiMenuButtonProps, type RuiMenuButtonSelectDetail, } from './menu-button.script';
|
|
2
|
-
export { RuiMenuButton, RuiMenuButtonContent, RuiMenuButtonItem, RuiMenuButtonTrigger, type RuiMenuItem, } from './menu-button';
|
|
2
|
+
export { RuiMenuButton, RuiMenuButtonContent, RuiMenuButtonItem, RuiMenuButtonSubmenuContent, RuiMenuButtonTrigger, type RuiMenuEntry, type RuiMenuItem, type RuiMenuSeparator, type RuiMenuButtonSubmenuContentProps, } from './menu-button';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{RadiantElement as Dt,bound as te,customElement as ee,event as Rt,onEvent as H,onUpdated as ne,prop as Mt,query as Ft}from"@ecopages/radiant";var Lt={top:"bottom",bottom:"top",left:"right",right:"left"},Kt=8;function Ut(e){let t=e.indexOf("-");if(t===-1)return{side:e,align:"center"};let n=e.slice(0,t),r=e.slice(t+1);return{side:n,align:r==="start"||r==="end"?r:"center"}}function ct(e){return e==="top"||e==="bottom"?"y":"x"}function at(e,t,n,r,i){let{width:o,height:u}=t,s=0,c=0;switch(n){case"top":c=e.top-u-i;break;case"bottom":c=e.bottom+i;break;case"left":s=e.left-o-i;break;case"right":s=e.right+i;break}return ct(n)==="y"?r==="start"?s=e.left:r==="end"?s=e.right-o:s=e.left+(e.width-o)/2:r==="start"?c=e.top:r==="end"?c=e.bottom-u:c=e.top+(e.height-u)/2,{x:s,y:c}}function Vt(e,t,n,r){let{padding:i,width:o,height:u}=r;return n==="top"?Math.max(0,i-e.y):n==="bottom"?Math.max(0,e.y+t.height-(u-i)):n==="left"?Math.max(0,i-e.x):Math.max(0,e.x+t.width-(o-i))}function lt(e,t,n,r){let{padding:i,width:o,height:u}=r;return n==="top"?e.top-i-t.height:n==="bottom"?u-i-t.height-e.bottom:n==="left"?e.left-i-t.width:o-i-t.width-e.right}function Gt(e,t){return t==="center"?e:`${e}-${t}`}function Xt(e,t,n,r){let{padding:i,width:o,height:u}=r;if(ct(n)==="y"){let c=Math.max(i,o-i-t.width);return{x:Math.min(Math.max(e.x,i),c),y:e.y}}let s=Math.max(i,u-i-t.height);return{x:e.x,y:Math.min(Math.max(e.y,i),s)}}function Yt(e,t,n,r,i={width:typeof window>"u"?0:window.innerWidth,height:typeof window>"u"?0:window.innerHeight,padding:Kt}){let{side:o,align:u}=Ut(n),s=at(e,t,o,u,r),c=Vt(s,t,o,i),E=o,g=s;if(c>0){let y=Lt[o],C=at(e,t,y,u,r),M=lt(e,t,o,i);lt(e,t,y,i)>M&&(E=y,g=C)}return{coords:Xt(g,t,E,i),placement:Gt(E,u)}}function Jt(e,t,n,r,i={}){let{coords:o,placement:u}=Yt(e.getBoundingClientRect(),{width:t.offsetWidth,height:t.offsetHeight},n,r);return Object.assign(t.style,{position:"fixed",left:`${o.x}px`,top:`${o.y}px`,right:"auto",bottom:"auto",visibility:"visible"}),i.matchAnchorWidth&&(t.style.width=`${e.offsetWidth}px`),t.setAttribute("data-placement",u),u}function ft({anchor:e,floating:t,getPlacement:n,gap:r,matchAnchorWidth:i}){let o=()=>{t.hidden||Jt(e,t,n(),r,{matchAnchorWidth:i})};o(),window.addEventListener("resize",o),window.addEventListener("scroll",o,!0);let u=new ResizeObserver(o);return u.observe(e),u.observe(t),()=>{window.removeEventListener("resize",o),window.removeEventListener("scroll",o,!0),u.disconnect()}}function dt(e,t=document.body){let n=e.parentNode;if(!n)return{unmount:()=>{}};let r=document.createComment("rui-portal");return n.insertBefore(r,e),t.appendChild(e),{unmount:()=>{let i=r.parentNode;i&&(i.insertBefore(e,r),r.remove())}}}function ht(e,t,n){return n?!!(e?.contains(n)||t?.contains(n)):!1}function pt(e,t,n){return!ht(e,t,n)}var G=class{config;cleanupFloating=null;portalHandle=null;floatingElement=null;constructor(t){this.config=t}updateConfig(t){this.config={...this.config,...t}}sync(){let t=this.resolveFloating();if(!t)return;if(!this.config.getOpen()){this.teardown(),t.toggleAttribute("hidden",!0);return}let r=this.config.getAnchor();if(!r)return;t.toggleAttribute("hidden",!1),this.config.portal!==!1?this.portalHandle||(this.portalHandle=dt(t,this.config.portalContainer??document.body)):this.portalHandle&&(this.portalHandle.unmount(),this.portalHandle=null),this.teardownFloating(),this.cleanupFloating=ft({anchor:r,floating:t,getPlacement:this.config.getPlacement,gap:this.config.gap??8,matchAnchorWidth:this.config.matchAnchorWidth})}contains(t){return ht(this.config.getAnchor(),this.resolveFloating(),t)}getFloatingElement(){return this.resolveFloating()}teardown(){this.teardownFloating(),this.portalHandle&&(this.portalHandle.unmount(),this.portalHandle=null)}destroy(){this.teardown(),this.floatingElement=null}resolveFloating(){let t=this.config.getFloating();return t&&(this.floatingElement=t),t??this.floatingElement}teardownFloating(){this.cleanupFloating?.(),this.cleanupFloating=null}};var gt,mt,vt,bt,wt,yt,xt,_t,Et,Ct,kt,Tt,At,It;function Qt(e,t,n,r,i,o){var u,s,c,E,g,y,C,M=Symbol.metadata||Symbol.for("Symbol.metadata"),A=Object.defineProperty,I=Object.create,F=[I(null),I(null)],$=t.length;function P(a,m,v){return function(l,f){m&&(f=l,l=e);for(var _=0;_<a.length;_++)f=a[_].apply(l,v?[f]:[]);return v?f:l}}function x(a,m,v,l){if(typeof a!="function"&&(l||a!==void 0))throw new TypeError(m+" must "+(v||"be")+" a function"+(l?"":" or undefined"));return a}function q(a,m,v,l,f,_,D,b,k,T,tt){function X(h){if(!tt(h))throw new TypeError("Attempted to access private element on non-instance")}var Y=[].concat(m[0]),et=m[3],J=!D,B=f===1,nt=f===3,rt=f===4,L=f===2;function K(h,S,st){return function(V,ut){return S&&(ut=V,V=a),st&&st(V),d[h].call(V,ut)}}if(!J){var d={},Q=[],O=nt?"get":rt||B?"set":"value";if(k?(T||B?d={get:Ot(function(){return et(this)},l,"get"),set:function(h){m[4](this,h)}}:d[O]=et,T||Ot(d[O],l,L?"":O)):T||(d=Object.getOwnPropertyDescriptor(a,l)),!T&&!k){if((s=F[+b][l])&&(s^f)!==7)throw Error("Decorating two elements with the same name ("+d[O].name+") is not supported yet");F[+b][l]=f<3?1:f}}for(var p=a,U=Y.length-1;U>=0;U-=v?2:1){var it=x(Y[U],"A decorator","be",!0),ot=v?Y[U-1]:void 0,Z={},j={kind:["field","accessor","method","getter","setter","class"][f],name:l,metadata:u,addInitializer:function(h,S){if(h.v)throw new TypeError("attempted to call addInitializer after decoration was finished");x(S,"An initializer","be",!0),_.push(S)}.bind(null,Z)};if(J)s=it.call(ot,p,j),Z.v=1,x(s,"class decorators","return")&&(p=s);else if(j.static=b,j.private=k,s=j.access={has:k?tt.bind():function(h){return l in h}},rt||(s.get=k?L?function(h){return X(h),d.value}:K("get",0,X):function(h){return h[l]}),L||nt||(s.set=k?K("set",0,X):function(h,S){h[l]=S}),p=it.call(ot,B?{get:d.get,set:d.set}:d[O],j),Z.v=1,B){if(typeof p=="object"&&p)(s=x(p.get,"accessor.get"))&&(d.get=s),(s=x(p.set,"accessor.set"))&&(d.set=s),(s=x(p.init,"accessor.init"))&&Q.unshift(s);else if(p!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else x(p,(T?"field":"method")+" decorators","return")&&(T?Q.unshift(p):d[O]=p)}return f<2&&D.push(P(Q,b,1),P(_,b,0)),T||J||(k?B?D.splice(-1,0,K("get",b),K("set",b)):D.push(L?d[O]:x.call.bind(d[O])):A(a,l,d)),p}function W(a){return A(a,M,{configurable:!0,enumerable:!0,value:u})}return o!==void 0&&(u=o[M]),u=I(u??null),g=[],y=function(a){a&&g.push(P(a))},C=function(a,m){for(var v=0;v<n.length;v++){var l=n[v],f=l[1],_=7&f;if((8&f)==a&&!_==m){var D=l[2],b=!!l[3],k=16&f;q(a?e:e.prototype,l,k,b?"#"+D:Zt(D),_,_<2?[]:a?E=E||[]:c=c||[],g,!!a,b,m,a&&b?function(T){return Nt(T)===e}:i)}}},C(8,0),C(0,0),C(8,1),C(0,1),y(c),y(E),s=g,$||W(e),{e:s,get c(){var a=[];return $&&[W(e=q(e,[t],r,e.name,5,a)),P(a,1)]}}}function Zt(e){var t=zt(e,"string");return typeof t=="symbol"?t:t+""}function zt(e,t){if(typeof e!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Ot(e,t,n){typeof t=="symbol"&&(t=(t=t.description)?"["+t+"]":"");try{Object.defineProperty(e,"name",{configurable:!0,value:n?n+" "+t:t})}catch{}return e}function Nt(e){if(Object(e)!==e)throw TypeError("right-hand side of 'in' should be an object, got "+(e!==null?typeof e:"null"));return e}var re=6,St,Pt=class extends Dt{static{({e:[vt,bt,wt,yt,xt,_t,Et,Ct,kt,Tt,At,It,gt],c:[St,mt]}=Qt(this,[ee("rui-menu-button")],[[Mt({type:Boolean,reflect:!0,defaultValue:!1}),0,"open"],[Mt({type:String,defaultValue:"bottom-start"}),0,"placement"],[Ft({ref:"trigger"}),0,"triggerTarget"],[Ft({ref:"menu"}),0,"menuTarget"],[Rt({name:"rui-change",bubbles:!0,composed:!0}),0,"changeEvent"],[Rt({name:"rui-close",bubbles:!0,composed:!0}),0,"closeEvent"],[[te,ne(["open","placement"])],2,"syncOpenState"],[H({document:!0,type:"pointerdown"}),2,"onDocumentPointerDown"],[H({ref:"trigger",type:"click"}),2,"onTriggerClick"],[H({ref:"trigger",type:"keydown"}),2,"onTriggerKeydown"],[H({ref:"menu",type:"keydown"}),2,"onMenuKeydown"],[H({selector:'[role="menuitem"]',type:"click"}),2,"onItemClick"]],0,void 0,Dt))}open=(gt(this),vt(this));placement=(bt(this),wt(this));triggerTarget=(yt(this),xt(this));menuTarget=(_t(this),Et(this));changeEvent=(Ct(this),kt(this));closeEvent=(Tt(this),At(this));menuId=(It(this),`rui-menu-${Math.random().toString(36).slice(2,9)}`);popoverController=null;pendingFocus=null;onConnected(){this.syncOpenState()}disconnectedCallback(){this.popoverController?.destroy(),this.popoverController=null,super.disconnectedCallback()}getItems(){return Array.from(this.menuTarget?.querySelectorAll('[role="menuitem"]')??[]).filter(t=>!t.hidden&&t.getAttribute("aria-disabled")!=="true")}getSearchInput(){return this.menuTarget?.querySelector("[data-autocomplete-input]")??null}ensurePopoverController(){return this.popoverController||(this.popoverController=new G({getAnchor:()=>this.triggerTarget,getFloating:()=>this.menuTarget,getOpen:()=>this.open,getPlacement:()=>this.placement,gap:re,portal:!1})),this.popoverController}syncOpenState(){if(!this.triggerTarget||!this.menuTarget)return;this.menuTarget.id=this.menuId,this.triggerTarget.setAttribute("aria-controls",this.menuId),this.triggerTarget.setAttribute("aria-haspopup","menu"),this.triggerTarget.setAttribute("aria-expanded",String(this.open)),this.menuTarget.toggleAttribute("hidden",!this.open);let t=this.ensurePopoverController();t.updateConfig({getPlacement:()=>this.placement,getOpen:()=>this.open}),t.sync();let n=this.pendingFocus;if(this.pendingFocus=null,!n)return;if(n==="trigger"){this.triggerTarget?.focus();return}let r=this.getSearchInput();if(r){r.focus();return}if(n==="first"&&this.getItems()[0]?.focus(),n==="last"){let i=this.getItems();i[i.length-1]?.focus()}}setOpen(t,n=null){let r=this.open;this.pendingFocus=n,this.open=t,r&&!t&&this.closeEvent.emit(),r===t&&this.syncOpenState()}onDocumentPointerDown(t){if(!this.open)return;let n=t.target;pt(this.triggerTarget,this.menuTarget,n)&&this.setOpen(!1)}onTriggerClick(){this.setOpen(!this.open,this.open?null:"first")}onTriggerKeydown(t){switch(t.key){case"ArrowDown":case"Enter":case" ":t.preventDefault(),this.setOpen(!0,"first");break;case"ArrowUp":t.preventDefault(),this.setOpen(!0,"last");break;default:break}}onMenuKeydown(t){let n=this.getItems(),r=document.activeElement,i=r?n.indexOf(r):-1;switch(t.key){case"ArrowDown":{t.preventDefault(),n[(i+1)%n.length]?.focus();break}case"ArrowUp":{t.preventDefault(),n[(i-1+n.length)%n.length]?.focus();break}case"Home":t.preventDefault(),n[0]?.focus();break;case"End":t.preventDefault(),n[n.length-1]?.focus();break;case"Escape":t.preventDefault(),this.setOpen(!1,"trigger");break;case"Tab":this.setOpen(!1);break;case"Enter":case" ":r&&n.includes(r)&&(t.preventDefault(),this.activateItem(r));break;default:break}}onItemClick(t){let n=t.target.closest('[role="menuitem"]');!n||!this.contains(n)||this.activateItem(n)}activateItem(t){let n=t.getAttribute("data-value")||t.textContent?.trim()||"";this.changeEvent.emit({value:n}),this.setOpen(!1,"trigger")}static{mt()}};import{jsx as R,jsxs as Ht}from"@ecopages/jsx/jsx-runtime";function w(...e){return e.filter(Boolean).join(" ")}import{jsx as Bt}from"@ecopages/jsx/jsx-runtime";function z({class:e,size:t="sm",...n}){return Bt("svg",{...n,class:w("rui-icon",t==="md"&&"rui-icon--md",e),viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",children:Bt("path",{d:"m6 9 6 6 6-6"})})}import{jsx as jt}from"@ecopages/jsx/jsx-runtime";function ie(e,t,n){if(e!==void 0)return e;if(t)return n}function oe(e,t){if(typeof e=="function"){e(t);return}e!=null&&typeof e=="object"&&"handleEvent"in e&&e.handleEvent(t)}function N(e){if(e.href!==void 0){let{href:A,target:I,rel:F,download:$,children:P,class:x,variant:q,size:W,square:a,...m}=e;return jt("a",{...m,href:A,target:I,rel:F,download:$,class:w("rui-button",`rui-button--${q??"filled"}`,`rui-button--${W??"md"}`,a&&"rui-button--square",x),children:P})}let{variant:t,size:n,square:r,class:i,children:o,type:u="button",disabled:s,pressed:c,defaultPressed:E=!1,toggle:g=!1,"on:click":y,...C}=e,M=A=>{if(g&&c===void 0){let I=A.currentTarget,F=I.getAttribute("aria-pressed")!=="true";I.setAttribute("aria-pressed",String(F))}oe(y,A)};return jt("button",{...C,type:u,class:w("rui-button",`rui-button--${t??"filled"}`,`rui-button--${n??"md"}`,r&&"rui-button--square",i),disabled:s,"aria-pressed":ie(c,g,E),"data-toggle":g&&c===void 0?"":void 0,"on:click":g||y?M:void 0,children:o})}function $t({children:e,class:t,variant:n="filled",size:r="md",...i}){return Ht(N,{...i,variant:n,size:r,"data-ref":"trigger",class:w("rui-menu-button__trigger",t),"aria-haspopup":"menu",children:[e,R(z,{class:"rui-menu-button__chevron"})]})}function qt({children:e,class:t,...n}){return R("div",{...n,"data-ref":"menu",class:w("rui-menu-button__menu","rui-popover","rui-floating",t),role:"menu",children:e})}function Wt({children:e,value:t,disabled:n,class:r,...i}){return R("button",{...i,type:"button",class:w("rui-menu-button__item",r),role:"menuitem","data-value":t,"aria-disabled":n?"true":void 0,disabled:n,tabIndex:-1,children:e})}function se({trigger:e,items:t,children:n,class:r,...i}){return e==null&&t==null?R("rui-menu-button",{...i,class:w("rui-menu-button",r),children:n}):Ht("rui-menu-button",{...i,class:w("rui-menu-button",r),children:[R($t,{children:e}),R(qt,{children:t?.map(o=>R(Wt,{value:o.value,disabled:o.disabled,children:o.label}))})]})}export{se as RuiMenuButton,qt as RuiMenuButtonContent,St as RuiMenuButtonElement,Wt as RuiMenuButtonItem,$t as RuiMenuButtonTrigger};
|
|
1
|
+
import{RadiantElement as Re,bound as ut,customElement as at,event as Pe,onEvent as O,onUpdated as lt,prop as Be,query as ke}from"@ecopages/radiant";var Ve={top:"bottom",bottom:"top",left:"right",right:"left"},Ye=8;function Xe(n){let e=n.indexOf("-");if(e===-1)return{side:n,align:"center"};let t=n.slice(0,e),r=n.slice(e+1);return{side:t,align:r==="start"||r==="end"?r:"center"}}function pe(n){return n==="top"||n==="bottom"?"y":"x"}function he(n,e,t,r,i){let{width:o,height:u}=e,s=0,c=0;switch(t){case"top":c=n.top-u-i;break;case"bottom":c=n.bottom+i;break;case"left":s=n.left-o-i;break;case"right":s=n.right+i;break}return pe(t)==="y"?r==="start"?s=n.left:r==="end"?s=n.right-o:s=n.left+(n.width-o)/2:r==="start"?c=n.top:r==="end"?c=n.bottom-u:c=n.top+(n.height-u)/2,{x:s,y:c}}function Je(n,e,t,r){let{padding:i,width:o,height:u}=r;return t==="top"?Math.max(0,i-n.y):t==="bottom"?Math.max(0,n.y+e.height-(u-i)):t==="left"?Math.max(0,i-n.x):Math.max(0,n.x+e.width-(o-i))}function fe(n,e,t,r){let{padding:i,width:o,height:u}=r;return t==="top"?n.top-i-e.height:t==="bottom"?u-i-e.height-n.bottom:t==="left"?n.left-i-e.width:o-i-e.width-n.right}function Qe(n,e){return e==="center"?n:`${n}-${e}`}function Ze(n,e,t,r){let{padding:i,width:o,height:u}=r;if(pe(t)==="y"){let c=Math.max(i,o-i-e.width);return{x:Math.min(Math.max(n.x,i),c),y:n.y}}let s=Math.max(i,u-i-e.height);return{x:n.x,y:Math.min(Math.max(n.y,i),s)}}function ze(n,e,t,r,i={width:typeof window>"u"?0:window.innerWidth,height:typeof window>"u"?0:window.innerHeight,padding:Ye}){let{side:o,align:u}=Xe(t),s=he(n,e,o,u,r),c=Je(s,e,o,i),S=o,g=s;if(c>0){let y=Ve[o],A=he(n,e,y,u,r),R=fe(n,e,o,i);fe(n,e,y,i)>R&&(S=y,g=A)}return{coords:Ze(g,e,S,i),placement:Qe(S,u)}}function Ne(n,e,t,r,i={}){let{coords:o,placement:u}=ze(n.getBoundingClientRect(),{width:e.offsetWidth,height:e.offsetHeight},t,r);return Object.assign(e.style,{position:"fixed",left:`${o.x}px`,top:`${o.y}px`,right:"auto",bottom:"auto",visibility:"visible"}),i.matchAnchorWidth&&(e.style.width=`${n.offsetWidth}px`),e.setAttribute("data-placement",u),u}function me({anchor:n,floating:e,getPlacement:t,gap:r,matchAnchorWidth:i}){let o=()=>{e.hidden||Ne(n,e,t(),r,{matchAnchorWidth:i})};o(),window.addEventListener("resize",o),window.addEventListener("scroll",o,!0);let u=new ResizeObserver(o);return u.observe(n),u.observe(e),()=>{window.removeEventListener("resize",o),window.removeEventListener("scroll",o,!0),u.disconnect()}}function de(n,e=document.body){let t=n.parentNode;if(!t)return{unmount:()=>{}};let r=document.createComment("rui-portal");return t.insertBefore(r,n),e.appendChild(n),{unmount:()=>{let i=r.parentNode;i&&(i.insertBefore(n,r),r.remove())}}}function ge(n,e,t){return t?!!(n?.contains(t)||e?.contains(t)):!1}function be(n,e,t){return!ge(n,e,t)}var j=class{config;cleanupFloating=null;portalHandle=null;floatingElement=null;constructor(e){this.config=e}updateConfig(e){this.config={...this.config,...e}}sync(){let e=this.resolveFloating();if(!e)return;if(!this.config.getOpen()){this.teardown(),e.toggleAttribute("hidden",!0);return}let r=this.config.getAnchor();if(!r)return;e.toggleAttribute("hidden",!1),this.config.portal!==!1?this.portalHandle||(this.portalHandle=de(e,this.config.portalContainer??document.body)):this.portalHandle&&(this.portalHandle.unmount(),this.portalHandle=null),this.teardownFloating(),this.cleanupFloating=me({anchor:r,floating:e,getPlacement:this.config.getPlacement,gap:this.config.gap??8,matchAnchorWidth:this.config.matchAnchorWidth})}contains(e){return ge(this.config.getAnchor(),this.resolveFloating(),e)}getFloatingElement(){return this.resolveFloating()}teardown(){this.teardownFloating(),this.portalHandle&&(this.portalHandle.unmount(),this.portalHandle=null)}destroy(){this.teardown(),this.floatingElement=null}resolveFloating(){let e=this.config.getFloating();return e&&(this.floatingElement=e),e??this.floatingElement}teardownFloating(){this.cleanupFloating?.(),this.cleanupFloating=null}};var et=200,tt=250,nt=6,Y=class{config;popovers=new Map;openMenus=new Set;openTimers=new Map;closeTimers=new Map;constructor(e){this.config=e}sync(){for(let e of this.getMenus())for(let t of this.getDirectItems(e)){let r=this.getSubmenu(t);r&&(t.setAttribute("aria-haspopup","menu"),t.hasAttribute("aria-expanded")||t.setAttribute("aria-expanded","false"),r.id||(r.id=`rui-submenu-${Math.random().toString(36).slice(2,9)}`),t.setAttribute("aria-controls",r.id),r.hidden=t.getAttribute("aria-expanded")!=="true")}}handlePointerOver(e){let t=this.getDirectItem(e.target);if(!t||this.isDisabled(t)||(this.cancelCloseFor(t),this.cancelAncestorCloseTimers(t),!this.getSubmenu(t)||t.getAttribute("aria-expanded")==="true"))return;this.closeSiblingBranches(t),this.cancelOpenFor(t);let i=setTimeout(()=>{this.openTimers.delete(t),this.openSubmenu(t,!1)},et);this.openTimers.set(t,i)}handlePointerOut(e){let t=this.getDirectItem(e.target);if(!t)return;let r=e.relatedTarget,i=this.getSubmenu(t);i&&r&&i.contains(r)||r&&t.contains(r)||(this.cancelOpenFor(t),t.getAttribute("aria-expanded")==="true"&&this.scheduleClose(t))}handleFocusOut(e){let t=this.getDirectItem(e.target);if(!t||t.getAttribute("aria-expanded")!=="true")return;let r=this.getSubmenu(t),i=e.relatedTarget;r&&i&&r.contains(i)||this.closeSubmenu(t,!1)}handleKeydown(e){let t=this.getDirectItem(e.target),r=t?.parentElement;if(!t||!r||r.getAttribute("role")!=="menu")return!1;let i=this.getFocusableItems(r),o=i.indexOf(t),u=this.getSubmenu(t);switch(e.key){case"ArrowDown":return o<0||i.length===0?!1:(e.preventDefault(),i[(o+1)%i.length]?.focus(),!0);case"ArrowUp":return o<0||i.length===0?!1:(e.preventDefault(),i[(o-1+i.length)%i.length]?.focus(),!0);case"Home":return e.preventDefault(),i[0]?.focus(),!0;case"End":return e.preventDefault(),i[i.length-1]?.focus(),!0;case"ArrowRight":return u?(e.preventDefault(),this.openSubmenu(t,!0),!0):!1;case"ArrowLeft":{if(this.getRootMenu()===r)return!1;e.preventDefault();let s=this.getTriggerForMenu(r);return s&&this.closeSubmenu(s,!0),!0}case"Enter":case" ":return u?(e.preventDefault(),this.openSubmenu(t,!0),!0):(e.preventDefault(),this.config.onActivate(t),!0);case"Escape":return e.preventDefault(),this.config.onCloseRoot(!0),!0;case"Tab":return this.config.onCloseRoot(!1),!0;default:return!1}}handleClick(e){let t=this.getDirectItem(e.target);return!t||this.isDisabled(t)?!1:this.getSubmenu(t)?(e.preventDefault(),this.closeSiblingBranches(t),this.openSubmenu(t,!1),!0):(this.config.onActivate(t),!0)}closeAll(){for(let e of Array.from(this.openMenus)){let t=this.getTriggerForMenu(e);t&&this.closeSubmenu(t,!1)}this.clearTimers()}getFocusableItems(e){return this.getDirectItems(e).filter(t=>!this.isDisabled(t))}destroy(){this.closeAll();for(let e of this.popovers.values())e.destroy();this.popovers.clear()}openSubmenu(e,t){let r=this.getSubmenu(e);if(!r||this.isDisabled(e))return;this.cancelOpenFor(e),this.cancelCloseFor(e),this.closeSiblingBranches(e),e.setAttribute("aria-expanded","true"),r.hidden=!1,this.openMenus.add(r);let i=this.popovers.get(r);i||(i=new j({getAnchor:()=>e,getFloating:()=>r,getOpen:()=>e.getAttribute("aria-expanded")==="true",getPlacement:()=>"right-start",gap:nt,portal:!1}),this.popovers.set(r,i)),i.updateConfig({getAnchor:()=>e,getOpen:()=>e.getAttribute("aria-expanded")==="true"}),i.sync(),t&&this.getFocusableItems(r)[0]?.focus()}closeSubmenu(e,t){let r=this.getSubmenu(e);if(r){for(let i of this.getDirectItems(r))this.closeSubmenu(i,!1);this.cancelOpenFor(e),this.cancelCloseFor(e),e.setAttribute("aria-expanded","false"),r.hidden=!0,this.openMenus.delete(r),this.popovers.get(r)?.teardown(),t&&e.focus()}}closeSiblingBranches(e){let t=e.parentElement;if(t)for(let r of this.getDirectItems(t))r!==e&&r.getAttribute("aria-expanded")==="true"&&this.closeSubmenu(r,!1)}scheduleClose(e){this.cancelCloseFor(e);let t=setTimeout(()=>{this.closeTimers.delete(e),this.closeSubmenu(e,!1)},tt);this.closeTimers.set(e,t)}getMenus(){return Array.from(this.config.root.querySelectorAll('[role="menu"]'))}getRootMenu(){return this.config.getRootMenu()}getDirectItems(e){return Array.from(e.querySelectorAll('[role="menuitem"]')).filter(t=>t.closest('[role="menu"]')===e)}getDirectItem(e){if(!(e instanceof HTMLElement))return null;let t=e.closest('[role="menuitem"]');return t&&t.closest('[role="menu"]')&&this.config.root.contains(t)?t:null}getSubmenu(e){let t=e.nextElementSibling;return t instanceof HTMLElement&&t.getAttribute("role")==="menu"?t:null}getTriggerForMenu(e){let t=e.previousElementSibling;return t instanceof HTMLElement&&t.getAttribute("role")==="menuitem"?t:null}isDisabled(e){return e.getAttribute("aria-disabled")==="true"||e instanceof HTMLButtonElement&&e.disabled}cancelOpenFor(e){let t=this.openTimers.get(e);t&&clearTimeout(t),this.openTimers.delete(e)}cancelCloseFor(e){let t=this.closeTimers.get(e);t&&clearTimeout(t),this.closeTimers.delete(e)}cancelAncestorCloseTimers(e){let t=e.closest('[role="menu"]');for(;t;){let r=this.getTriggerForMenu(t);if(!r)return;this.cancelCloseFor(r),t=r.closest('[role="menu"]')}}clearTimers(){for(let e of this.openTimers.values())clearTimeout(e);for(let e of this.closeTimers.values())clearTimeout(e);this.openTimers.clear(),this.closeTimers.clear()}};var ve,we,ye,xe,Te,Me,Se,Ae,Ce,Ee,_e,De,Fe,Oe;function rt(n,e,t,r,i,o){var u,s,c,S,g,y,A,R=Symbol.metadata||Symbol.for("Symbol.metadata"),_=Object.defineProperty,D=Object.create,P=[D(null),D(null)],U=e.length;function B(a,b,v){return function(l,h){b&&(h=l,l=n);for(var T=0;T<a.length;T++)h=a[T].apply(l,v?[h]:[]);return v?h:l}}function x(a,b,v,l){if(typeof a!="function"&&(l||a!==void 0))throw new TypeError(b+" must "+(v||"be")+" a function"+(l?"":" or undefined"));return a}function $(a,b,v,l,h,T,I,w,C,E,re){function X(p){if(!re(p))throw new TypeError("Attempted to access private element on non-instance")}var J=[].concat(b[0]),ie=b[3],Q=!I,L=h===1,oe=h===3,se=h===4,W=h===2;function K(p,k,le){return function(V,ce){return k&&(ce=V,V=a),le&&le(V),f[p].call(V,ce)}}if(!Q){var f={},Z=[],F=oe?"get":se||L?"set":"value";if(C?(E||L?f={get:Ie(function(){return ie(this)},l,"get"),set:function(p){b[4](this,p)}}:f[F]=ie,E||Ie(f[F],l,W?"":F)):E||(f=Object.getOwnPropertyDescriptor(a,l)),!E&&!C){if((s=P[+w][l])&&(s^h)!==7)throw Error("Decorating two elements with the same name ("+f[F].name+") is not supported yet");P[+w][l]=h<3?1:h}}for(var d=a,G=J.length-1;G>=0;G-=v?2:1){var ue=x(J[G],"A decorator","be",!0),ae=v?J[G-1]:void 0,z={},H={kind:["field","accessor","method","getter","setter","class"][h],name:l,metadata:u,addInitializer:function(p,k){if(p.v)throw new TypeError("attempted to call addInitializer after decoration was finished");x(k,"An initializer","be",!0),T.push(k)}.bind(null,z)};if(Q)s=ue.call(ae,d,H),z.v=1,x(s,"class decorators","return")&&(d=s);else if(H.static=w,H.private=C,s=H.access={has:C?re.bind():function(p){return l in p}},se||(s.get=C?W?function(p){return X(p),f.value}:K("get",0,X):function(p){return p[l]}),W||oe||(s.set=C?K("set",0,X):function(p,k){p[l]=k}),d=ue.call(ae,L?{get:f.get,set:f.set}:f[F],H),z.v=1,L){if(typeof d=="object"&&d)(s=x(d.get,"accessor.get"))&&(f.get=s),(s=x(d.set,"accessor.set"))&&(f.set=s),(s=x(d.init,"accessor.init"))&&Z.unshift(s);else if(d!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else x(d,(E?"field":"method")+" decorators","return")&&(E?Z.unshift(d):f[F]=d)}return h<2&&I.push(B(Z,w,1),B(T,w,0)),E||Q||(C?L?I.splice(-1,0,K("get",w),K("set",w)):I.push(W?f[F]:x.call.bind(f[F])):_(a,l,f)),d}function q(a){return _(a,R,{configurable:!0,enumerable:!0,value:u})}return o!==void 0&&(u=o[R]),u=D(u??null),g=[],y=function(a){a&&g.push(B(a))},A=function(a,b){for(var v=0;v<t.length;v++){var l=t[v],h=l[1],T=7&h;if((8&h)==a&&!T==b){var I=l[2],w=!!l[3],C=16&h;$(a?n:n.prototype,l,C,w?"#"+I:it(I),T,T<2?[]:a?S=S||[]:c=c||[],g,!!a,w,b,a&&w?function(E){return st(E)===n}:i)}}},A(8,0),A(0,0),A(8,1),A(0,1),y(c),y(S),s=g,U||q(n),{e:s,get c(){var a=[];return U&&[q(n=$(n,[e],r,n.name,5,a)),B(a,1)]}}}function it(n){var e=ot(n,"string");return typeof e=="symbol"?e:e+""}function ot(n,e){if(typeof n!="object"||!n)return n;var t=n[Symbol.toPrimitive];if(t!==void 0){var r=t.call(n,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(n)}function Ie(n,e,t){typeof e=="symbol"&&(e=(e=e.description)?"["+e+"]":"");try{Object.defineProperty(n,"name",{configurable:!0,value:t?t+" "+e:e})}catch{}return n}function st(n){if(Object(n)!==n)throw TypeError("right-hand side of 'in' should be an object, got "+(n!==null?typeof n:"null"));return n}var ct=6,Le,je=class extends Re{static{({e:[ye,xe,Te,Me,Se,Ae,Ce,Ee,_e,De,Fe,Oe,ve],c:[Le,we]}=rt(this,[at("rui-menu-button")],[[Be({type:Boolean,reflect:!0,defaultValue:!1}),0,"open"],[Be({type:String,defaultValue:"bottom-start"}),0,"placement"],[ke({ref:"trigger"}),0,"triggerTarget"],[ke({ref:"menu"}),0,"menuTarget"],[Pe({name:"rui-change",bubbles:!0,composed:!0}),0,"changeEvent"],[Pe({name:"rui-close",bubbles:!0,composed:!0}),0,"closeEvent"],[[ut,lt(["open","placement"])],2,"syncOpenState"],[O({document:!0,type:"pointerdown"}),2,"onDocumentPointerDown"],[O({ref:"trigger",type:"click"}),2,"onTriggerClick"],[O({ref:"trigger",type:"keydown"}),2,"onTriggerKeydown"],[O({ref:"menu",type:"keydown"}),2,"onMenuKeydown"],[O({ref:"menu",type:"pointerover"}),2,"onMenuPointerOver"],[O({ref:"menu",type:"pointerout"}),2,"onMenuPointerOut"],[O({ref:"menu",type:"focusout"}),2,"onMenuFocusOut"],[O({selector:'[role="menuitem"]',type:"click"}),2,"onItemClick"]],0,void 0,Re))}open=(ve(this),ye(this));placement=(xe(this),Te(this));triggerTarget=(Me(this),Se(this));menuTarget=(Ae(this),Ce(this));changeEvent=(Ee(this),_e(this));closeEvent=(De(this),Fe(this));menuId=(Oe(this),`rui-menu-${Math.random().toString(36).slice(2,9)}`);popoverController=null;menuTree=null;pendingFocus=null;onConnected(){this.syncOpenState()}disconnectedCallback(){this.menuTree?.destroy(),this.menuTree=null,this.popoverController?.destroy(),this.popoverController=null,super.disconnectedCallback()}getItems(){return this.menuTarget?this.ensureMenuTree().getFocusableItems(this.menuTarget):[]}ensureMenuTree(){return this.menuTree||(this.menuTree=new Y({root:this,getRootMenu:()=>this.menuTarget,onActivate:e=>this.activateItem(e),onCloseRoot:e=>this.setOpen(!1,e?"trigger":null)})),this.menuTree}getSearchInput(){return this.menuTarget?.querySelector("[data-autocomplete-input]")??null}ensurePopoverController(){return this.popoverController||(this.popoverController=new j({getAnchor:()=>this.triggerTarget,getFloating:()=>this.menuTarget,getOpen:()=>this.open,getPlacement:()=>this.placement,gap:ct,portal:!1})),this.popoverController}syncOpenState(){if(!this.triggerTarget||!this.menuTarget)return;this.menuTarget.id=this.menuId,this.triggerTarget.setAttribute("aria-controls",this.menuId),this.triggerTarget.setAttribute("aria-haspopup","menu"),this.triggerTarget.setAttribute("aria-expanded",String(this.open)),this.menuTarget.toggleAttribute("hidden",!this.open);let e=this.ensureMenuTree();e.sync(),this.open||e.closeAll();let t=this.ensurePopoverController();t.updateConfig({getPlacement:()=>this.placement,getOpen:()=>this.open}),t.sync();let r=this.pendingFocus;if(this.pendingFocus=null,!r)return;if(r==="trigger"){this.triggerTarget?.focus();return}let i=this.getSearchInput();if(i){i.focus();return}if(r==="first"&&this.getItems()[0]?.focus(),r==="last"){let o=this.getItems();o[o.length-1]?.focus()}}setOpen(e,t=null){let r=this.open;this.pendingFocus=t,this.open=e,r&&!e&&this.closeEvent.emit(),r===e&&this.syncOpenState()}onDocumentPointerDown(e){if(!this.open)return;let t=e.target;be(this.triggerTarget,this.menuTarget,t)&&this.setOpen(!1)}onTriggerClick(){this.setOpen(!this.open,this.open?null:"first")}onTriggerKeydown(e){switch(e.key){case"ArrowDown":case"Enter":case" ":e.preventDefault(),this.setOpen(!0,"first");break;case"ArrowUp":e.preventDefault(),this.setOpen(!0,"last");break;default:break}}onMenuKeydown(e){this.ensureMenuTree().handleKeydown(e)}onMenuPointerOver(e){this.ensureMenuTree().handlePointerOver(e)}onMenuPointerOut(e){this.ensureMenuTree().handlePointerOut(e)}onMenuFocusOut(e){this.ensureMenuTree().handleFocusOut(e)}onItemClick(e){this.ensureMenuTree().handleClick(e)}activateItem(e){let t=e.getAttribute("data-value")||e.textContent?.trim()||"";this.changeEvent.emit({value:t}),this.setOpen(!1,"trigger")}static{we()}};import{jsx as M,jsxs as $e}from"@ecopages/jsx/jsx-runtime";function m(...n){return n.filter(Boolean).join(" ")}import{jsx as He}from"@ecopages/jsx/jsx-runtime";function N({class:n,size:e="sm",...t}){return He("svg",{...t,class:m("rui-icon",e==="md"&&"rui-icon--md",n),viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true",children:He("path",{d:"m6 9 6 6 6-6"})})}import{jsx as Ue}from"@ecopages/jsx/jsx-runtime";function ht(n,e,t){if(n!==void 0)return n;if(e)return t}function ft(n,e){if(typeof n=="function"){n(e);return}n!=null&&typeof n=="object"&&"handleEvent"in n&&n.handleEvent(e)}function ee(n){if(n.href!==void 0){let{href:_,target:D,rel:P,download:U,children:B,class:x,variant:$,size:q,square:a,...b}=n;return Ue("a",{...b,href:_,target:D,rel:P,download:U,class:m("rui-button",`rui-button--${$??"filled"}`,`rui-button--${q??"md"}`,a&&"rui-button--square",x),children:B})}let{variant:e,size:t,square:r,class:i,children:o,type:u="button",disabled:s,pressed:c,defaultPressed:S=!1,toggle:g=!1,"on:click":y,...A}=n,R=_=>{if(g&&c===void 0){let D=_.currentTarget,P=D.getAttribute("aria-pressed")!=="true";D.setAttribute("aria-pressed",String(P))}ft(y,_)};return Ue("button",{...A,type:u,class:m("rui-button",`rui-button--${e??"filled"}`,`rui-button--${t??"md"}`,r&&"rui-button--square",i),disabled:s,"aria-pressed":ht(c,g,S),"data-toggle":g&&c===void 0?"":void 0,"on:click":g||y?R:void 0,children:o})}import{jsx as pt}from"@ecopages/jsx/jsx-runtime";function te({orientation:n="horizontal",class:e,...t}){return pt("hr",{...t,class:m("rui-separator",e),role:"separator","aria-orientation":n,"data-orientation":n})}import{Fragment as mt,jsxs as dt}from"@ecopages/jsx/jsx-runtime";function ne(n,e){return n.map(t=>{if(t.type==="separator")return e.Separator({id:t.id});let r=!!t.items?.length;return dt(mt,{children:[e.Item({value:t.value,disabled:t.disabled,hasSubmenu:r,children:t.label}),r?e.Submenu({children:ne(t.items??[],e)}):null]})})}function qe({children:n,class:e,variant:t="filled",size:r="md",...i}){return $e(ee,{...i,variant:t,size:r,"data-ref":"trigger",class:m("rui-menu-button__trigger",e),"aria-haspopup":"menu",children:[n,M(N,{class:"rui-menu-button__chevron"})]})}function We({children:n,class:e,...t}){return M("div",{...t,"data-ref":"menu",class:m("rui-menu-button__menu","rui-popover","rui-floating",e),role:"menu",children:n})}function Ke({children:n,class:e,...t}){return M("div",{...t,"data-ref":"submenu-menu",class:m("rui-menu-button__menu","rui-menu-button__submenu","rui-popover","rui-floating",e),role:"menu",hidden:!0,children:n})}function Ge({children:n,value:e,disabled:t,hasSubmenu:r,class:i,...o}){return M("button",{...o,type:"button",class:m("rui-menu-button__item",i),role:"menuitem","data-value":e,"aria-haspopup":r?"menu":void 0,"aria-disabled":t?"true":void 0,disabled:t,tabIndex:-1,children:n})}function gt({trigger:n,items:e,children:t,class:r,...i}){return n==null&&e==null?M("rui-menu-button",{...i,class:m("rui-menu-button",r),children:t}):$e("rui-menu-button",{...i,class:m("rui-menu-button",r),children:[M(qe,{children:n}),M(We,{children:e?ne(e,{Item:o=>M(Ge,{...o}),Submenu:o=>M(Ke,{...o}),Separator:o=>M(te,{},o.id)}):t})]})}export{gt as RuiMenuButton,We as RuiMenuButtonContent,Le as RuiMenuButtonElement,Ge as RuiMenuButtonItem,Ke as RuiMenuButtonSubmenuContent,qe as RuiMenuButtonTrigger};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/components/ui/menu-button/menu-button.script.tsx", "../../../../src/components/ui/shared/floating-position.ts", "../../../../src/components/ui/shared/portal.ts", "../../../../src/components/ui/shared/popover-controller.ts", "../../../../src/components/ui/menu-button/menu-button.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/icons/chevron-down.tsx", "../../../../src/components/ui/button/button.tsx"],
|
|
4
|
-
"sourcesContent": ["let _initProto, _initClass, _init_open, _init_extra_open, _init_placement, _init_extra_placement, _init_triggerTarget, _init_extra_triggerTarget, _init_menuTarget, _init_extra_menuTarget, _init_changeEvent, _init_extra_changeEvent, _init_closeEvent, _init_extra_closeEvent;\nfunction _applyDecs(e, t, n, r, o, i) { var a, c, u, s, f, l, p, d = Symbol.metadata || Symbol.for(\"Symbol.metadata\"), m = Object.defineProperty, h = Object.create, y = [h(null), h(null)], v = t.length; function g(t, n, r) { return function (o, i) { n && (i = o, o = e); for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []); return r ? i : o; }; } function b(e, t, n, r) { if (\"function\" != typeof e && (r || void 0 !== e)) throw new TypeError(t + \" must \" + (n || \"be\") + \" a function\" + (r ? \"\" : \" or undefined\")); return e; } function applyDec(e, t, n, r, o, i, u, s, f, l, p) { function d(e) { if (!p(e)) throw new TypeError(\"Attempted to access private element on non-instance\"); } var h = [].concat(t[0]), v = t[3], w = !u, D = 1 === o, S = 3 === o, j = 4 === o, E = 2 === o; function I(t, n, r) { return function (o, i) { return n && (i = o, o = e), r && r(o), P[t].call(o, i); }; } if (!w) { var P = {}, k = [], F = S ? \"get\" : j || D ? \"set\" : \"value\"; if (f ? (l || D ? P = { get: _setFunctionName(function () { return v(this); }, r, \"get\"), set: function (e) { t[4](this, e); } } : P[F] = v, l || _setFunctionName(P[F], r, E ? \"\" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) { if ((c = y[+s][r]) && 7 !== (c ^ o)) throw Error(\"Decorating two elements with the same name (\" + P[F].name + \") is not supported yet\"); y[+s][r] = o < 3 ? 1 : o; } } for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) { var T = b(h[O], \"A decorator\", \"be\", !0), z = n ? h[O - 1] : void 0, A = {}, H = { kind: [\"field\", \"accessor\", \"method\", \"getter\", \"setter\", \"class\"][o], name: r, metadata: a, addInitializer: function (e, t) { if (e.v) throw new TypeError(\"attempted to call addInitializer after decoration was finished\"); b(t, \"An initializer\", \"be\", !0), i.push(t); }.bind(null, A) }; if (w) c = T.call(z, N, H), A.v = 1, b(c, \"class decorators\", \"return\") && (N = c);else if (H.static = s, H.private = f, c = H.access = { has: f ? p.bind() : function (e) { return r in e; } }, j || (c.get = f ? E ? function (e) { return d(e), P.value; } : I(\"get\", 0, d) : function (e) { return e[r]; }), E || S || (c.set = f ? I(\"set\", 0, d) : function (e, t) { e[r] = t; }), N = T.call(z, D ? { get: P.get, set: P.set } : P[F], H), A.v = 1, D) { if (\"object\" == typeof N && N) (c = b(N.get, \"accessor.get\")) && (P.get = c), (c = b(N.set, \"accessor.set\")) && (P.set = c), (c = b(N.init, \"accessor.init\")) && k.unshift(c);else if (void 0 !== N) throw new TypeError(\"accessor decorators must return an object with get, set, or init properties or undefined\"); } else b(N, (l ? \"field\" : \"method\") + \" decorators\", \"return\") && (l ? k.unshift(N) : P[F] = N); } return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I(\"get\", s), I(\"set\", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N; } function w(e) { return m(e, d, { configurable: !0, enumerable: !0, value: a }); } return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function (e) { e && f.push(g(e)); }, p = function (t, r) { for (var i = 0; i < n.length; i++) { var a = n[i], c = a[1], l = 7 & c; if ((8 & c) == t && !l == r) { var p = a[2], d = !!a[3], m = 16 & c; applyDec(t ? e : e.prototype, a, m, d ? \"#\" + p : _toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) { return _checkInRHS(t) === e; } : o); } } }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), { e: c, get c() { var n = []; return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)]; } }; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _setFunctionName(e, t, n) { \"symbol\" == typeof t && (t = (t = t.description) ? \"[\" + t + \"]\" : \"\"); try { Object.defineProperty(e, \"name\", { configurable: !0, value: n ? n + \" \" + t : t }); } catch (e) {} return e; }\nfunction _checkInRHS(e) { if (Object(e) !== e) throw TypeError(\"right-hand side of 'in' should be an object, got \" + (null !== e ? typeof e : \"null\")); return e; }\nimport { RadiantElement, bound, customElement, event, onEvent, onUpdated, prop, query } from \"@ecopages/radiant\";\nimport { PopoverController, shouldDismissPopoverPointer } from \"../shared/popover-controller\";\nconst MENU_GAP = 6;\nlet _RuiMenuButton;\nclass RuiMenuButton extends RadiantElement {\n static {\n ({\n e: [_init_open, _init_extra_open, _init_placement, _init_extra_placement, _init_triggerTarget, _init_extra_triggerTarget, _init_menuTarget, _init_extra_menuTarget, _init_changeEvent, _init_extra_changeEvent, _init_closeEvent, _init_extra_closeEvent, _initProto],\n c: [_RuiMenuButton, _initClass]\n } = _applyDecs(this, [customElement(\"rui-menu-button\")], [[prop({\n type: Boolean,\n reflect: true,\n defaultValue: false\n }), 0, \"open\"], [prop({\n type: String,\n defaultValue: \"bottom-start\"\n }), 0, \"placement\"], [query({\n ref: \"trigger\"\n }), 0, \"triggerTarget\"], [query({\n ref: \"menu\"\n }), 0, \"menuTarget\"], [event({\n name: \"rui-change\",\n bubbles: true,\n composed: true\n }), 0, \"changeEvent\"], [event({\n name: \"rui-close\",\n bubbles: true,\n composed: true\n }), 0, \"closeEvent\"], [[bound, onUpdated([\"open\", \"placement\"])], 2, \"syncOpenState\"], [onEvent({\n document: true,\n type: \"pointerdown\"\n }), 2, \"onDocumentPointerDown\"], [onEvent({\n ref: \"trigger\",\n type: \"click\"\n }), 2, \"onTriggerClick\"], [onEvent({\n ref: \"trigger\",\n type: \"keydown\"\n }), 2, \"onTriggerKeydown\"], [onEvent({\n ref: \"menu\",\n type: \"keydown\"\n }), 2, \"onMenuKeydown\"], [onEvent({\n selector: '[role=\"menuitem\"]',\n type: \"click\"\n }), 2, \"onItemClick\"]], 0, void 0, RadiantElement));\n }\n open = (_initProto(this), _init_open(this));\n placement = (_init_extra_open(this), _init_placement(this));\n triggerTarget = (_init_extra_placement(this), _init_triggerTarget(this));\n menuTarget = (_init_extra_triggerTarget(this), _init_menuTarget(this));\n changeEvent = (_init_extra_menuTarget(this), _init_changeEvent(this));\n closeEvent = (_init_extra_changeEvent(this), _init_closeEvent(this));\n menuId = (_init_extra_closeEvent(this), `rui-menu-${Math.random().toString(36).slice(2, 9)}`);\n popoverController = null;\n pendingFocus = null;\n onConnected() {\n this.syncOpenState();\n }\n disconnectedCallback() {\n this.popoverController?.destroy();\n this.popoverController = null;\n super.disconnectedCallback();\n }\n getItems() {\n return Array.from(this.menuTarget?.querySelectorAll('[role=\"menuitem\"]') ?? []).filter(item => !item.hidden && item.getAttribute(\"aria-disabled\") !== \"true\");\n }\n getSearchInput() {\n return this.menuTarget?.querySelector(\"[data-autocomplete-input]\") ?? null;\n }\n ensurePopoverController() {\n if (!this.popoverController) {\n this.popoverController = new PopoverController({\n getAnchor: () => this.triggerTarget,\n getFloating: () => this.menuTarget,\n getOpen: () => this.open,\n getPlacement: () => this.placement,\n gap: MENU_GAP,\n portal: false\n });\n }\n return this.popoverController;\n }\n syncOpenState() {\n if (!this.triggerTarget || !this.menuTarget) return;\n this.menuTarget.id = this.menuId;\n this.triggerTarget.setAttribute(\"aria-controls\", this.menuId);\n this.triggerTarget.setAttribute(\"aria-haspopup\", \"menu\");\n this.triggerTarget.setAttribute(\"aria-expanded\", String(this.open));\n this.menuTarget.toggleAttribute(\"hidden\", !this.open);\n const controller = this.ensurePopoverController();\n controller.updateConfig({\n getPlacement: () => this.placement,\n getOpen: () => this.open\n });\n controller.sync();\n const focus = this.pendingFocus;\n this.pendingFocus = null;\n if (!focus) return;\n if (focus === \"trigger\") {\n this.triggerTarget?.focus();\n return;\n }\n const search = this.getSearchInput();\n if (search) {\n search.focus();\n return;\n }\n if (focus === \"first\") this.getItems()[0]?.focus();\n if (focus === \"last\") {\n const items = this.getItems();\n items[items.length - 1]?.focus();\n }\n }\n setOpen(next, focus = null) {\n const wasOpen = this.open;\n this.pendingFocus = focus;\n this.open = next;\n if (wasOpen && !next) this.closeEvent.emit();\n if (wasOpen === next) this.syncOpenState();\n }\n onDocumentPointerDown(event2) {\n if (!this.open) return;\n const target = event2.target;\n if (!shouldDismissPopoverPointer(this.triggerTarget, this.menuTarget, target)) return;\n this.setOpen(false);\n }\n onTriggerClick() {\n this.setOpen(!this.open, this.open ? null : \"first\");\n }\n onTriggerKeydown(event2) {\n switch (event2.key) {\n case \"ArrowDown\":\n case \"Enter\":\n case \" \":\n event2.preventDefault();\n this.setOpen(true, \"first\");\n break;\n case \"ArrowUp\":\n event2.preventDefault();\n this.setOpen(true, \"last\");\n break;\n default:\n break;\n }\n }\n onMenuKeydown(event2) {\n const items = this.getItems();\n const current = document.activeElement;\n const index = current ? items.indexOf(current) : -1;\n switch (event2.key) {\n case \"ArrowDown\":\n {\n event2.preventDefault();\n const next = items[(index + 1) % items.length];\n next?.focus();\n break;\n }\n case \"ArrowUp\":\n {\n event2.preventDefault();\n const prev = items[(index - 1 + items.length) % items.length];\n prev?.focus();\n break;\n }\n case \"Home\":\n event2.preventDefault();\n items[0]?.focus();\n break;\n case \"End\":\n event2.preventDefault();\n items[items.length - 1]?.focus();\n break;\n case \"Escape\":\n event2.preventDefault();\n this.setOpen(false, \"trigger\");\n break;\n case \"Tab\":\n this.setOpen(false);\n break;\n case \"Enter\":\n case \" \":\n if (current && items.includes(current)) {\n event2.preventDefault();\n this.activateItem(current);\n }\n break;\n default:\n break;\n }\n }\n onItemClick(event2) {\n const item = event2.target.closest('[role=\"menuitem\"]');\n if (!item || !this.contains(item)) return;\n this.activateItem(item);\n }\n activateItem(item) {\n const value = item.getAttribute(\"data-value\") || item.textContent?.trim() || \"\";\n this.changeEvent.emit({\n value\n });\n this.setOpen(false, \"trigger\");\n }\n static {\n _initClass();\n }\n}\nexport { _RuiMenuButton as RuiMenuButton };", "const OPPOSITE = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\"\n};\nconst DEFAULT_VIEWPORT_PADDING = 8;\nfunction parsePlacement(placement) {\n const dash = placement.indexOf(\"-\");\n if (dash === -1) return {\n side: placement,\n align: \"center\"\n };\n const side = placement.slice(0, dash);\n const align = placement.slice(dash + 1);\n return {\n side,\n align: align === \"start\" || align === \"end\" ? align : \"center\"\n };\n}\nfunction primaryAxis(side) {\n return side === \"top\" || side === \"bottom\" ? \"y\" : \"x\";\n}\nfunction coordsFor(anchor, size, side, align, gap) {\n const {\n width,\n height\n } = size;\n let x = 0;\n let y = 0;\n switch (side) {\n case \"top\":\n y = anchor.top - height - gap;\n break;\n case \"bottom\":\n y = anchor.bottom + gap;\n break;\n case \"left\":\n x = anchor.left - width - gap;\n break;\n case \"right\":\n x = anchor.right + gap;\n break;\n }\n if (primaryAxis(side) === \"y\") {\n if (align === \"start\") x = anchor.left;else if (align === \"end\") x = anchor.right - width;else x = anchor.left + (anchor.width - width) / 2;\n } else {\n if (align === \"start\") y = anchor.top;else if (align === \"end\") y = anchor.bottom - height;else y = anchor.top + (anchor.height - height) / 2;\n }\n return {\n x,\n y\n };\n}\nfunction overflowOnPrimary(coords, size, side, viewport) {\n const {\n padding,\n width: vw,\n height: vh\n } = viewport;\n if (side === \"top\") return Math.max(0, padding - coords.y);\n if (side === \"bottom\") return Math.max(0, coords.y + size.height - (vh - padding));\n if (side === \"left\") return Math.max(0, padding - coords.x);\n return Math.max(0, coords.x + size.width - (vw - padding));\n}\nfunction freeSpaceOnSide(anchor, size, side, viewport) {\n const {\n padding,\n width: vw,\n height: vh\n } = viewport;\n if (side === \"top\") return anchor.top - padding - size.height;\n if (side === \"bottom\") return vh - padding - size.height - anchor.bottom;\n if (side === \"left\") return anchor.left - padding - size.width;\n return vw - padding - size.width - anchor.right;\n}\nfunction toPlacement(side, align) {\n if (align === \"center\") {\n return side;\n }\n return `${side}-${align}`;\n}\nfunction clampCrossAxis(coords, size, side, viewport) {\n const {\n padding,\n width: vw,\n height: vh\n } = viewport;\n if (primaryAxis(side) === \"y\") {\n const maxX = Math.max(padding, vw - padding - size.width);\n return {\n x: Math.min(Math.max(coords.x, padding), maxX),\n y: coords.y\n };\n }\n const maxY = Math.max(padding, vh - padding - size.height);\n return {\n x: coords.x,\n y: Math.min(Math.max(coords.y, padding), maxY)\n };\n}\nexport function computeFloatingCoords(anchor, size, placement, gap, viewport = {\n width: typeof window === \"undefined\" ? 0 : window.innerWidth,\n height: typeof window === \"undefined\" ? 0 : window.innerHeight,\n padding: DEFAULT_VIEWPORT_PADDING\n}) {\n return computeFloatingPosition(anchor, size, placement, gap, viewport).coords;\n}\nexport function computeFloatingPosition(anchor, size, placement, gap, viewport = {\n width: typeof window === \"undefined\" ? 0 : window.innerWidth,\n height: typeof window === \"undefined\" ? 0 : window.innerHeight,\n padding: DEFAULT_VIEWPORT_PADDING\n}) {\n const {\n side: preferred,\n align\n } = parsePlacement(placement);\n const preferredCoords = coordsFor(anchor, size, preferred, align, gap);\n const preferredOverflow = overflowOnPrimary(preferredCoords, size, preferred, viewport);\n let side = preferred;\n let coords = preferredCoords;\n if (preferredOverflow > 0) {\n const flipped = OPPOSITE[preferred];\n const flippedCoords = coordsFor(anchor, size, flipped, align, gap);\n const preferredFree = freeSpaceOnSide(anchor, size, preferred, viewport);\n const flippedFree = freeSpaceOnSide(anchor, size, flipped, viewport);\n if (flippedFree > preferredFree) {\n side = flipped;\n coords = flippedCoords;\n }\n }\n return {\n coords: clampCrossAxis(coords, size, side, viewport),\n placement: toPlacement(side, align)\n };\n}\nexport function applyFloatingPosition(anchor, floating, placement, gap, options = {}) {\n const {\n coords,\n placement: resolved\n } = computeFloatingPosition(anchor.getBoundingClientRect(), {\n width: floating.offsetWidth,\n height: floating.offsetHeight\n }, placement, gap);\n Object.assign(floating.style, {\n position: \"fixed\",\n left: `${coords.x}px`,\n top: `${coords.y}px`,\n right: \"auto\",\n bottom: \"auto\",\n visibility: \"visible\"\n });\n if (options.matchAnchorWidth) {\n floating.style.width = `${anchor.offsetWidth}px`;\n }\n floating.setAttribute(\"data-placement\", resolved);\n return resolved;\n}\nexport function attachFloating({\n anchor,\n floating,\n getPlacement,\n gap,\n matchAnchorWidth\n}) {\n const update = () => {\n if (floating.hidden) return;\n applyFloatingPosition(anchor, floating, getPlacement(), gap, {\n matchAnchorWidth\n });\n };\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n const observer = new ResizeObserver(update);\n observer.observe(anchor);\n observer.observe(floating);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n observer.disconnect();\n };\n}", "export function mountPortal(node, container = document.body) {\n const parent = node.parentNode;\n if (!parent) {\n return {\n unmount: () => {}\n };\n }\n const placeholder = document.createComment(\"rui-portal\");\n parent.insertBefore(placeholder, node);\n container.appendChild(node);\n return {\n unmount: () => {\n const restoreParent = placeholder.parentNode;\n if (!restoreParent) {\n return;\n }\n restoreParent.insertBefore(node, placeholder);\n placeholder.remove();\n }\n };\n}", "import { attachFloating } from \"./floating-position\";\nimport { mountPortal } from \"./portal\";\nexport function popoverContains(anchor, floating, node) {\n if (!node) {\n return false;\n }\n return Boolean(anchor?.contains(node) || floating?.contains(node));\n}\nexport function shouldDismissPopoverFocus(anchor, floating, relatedTarget) {\n if (!(relatedTarget instanceof Node)) {\n return true;\n }\n return !popoverContains(anchor, floating, relatedTarget);\n}\nexport function shouldDismissPopoverPointer(anchor, floating, target) {\n return !popoverContains(anchor, floating, target);\n}\nexport class PopoverController {\n config;\n cleanupFloating = null;\n portalHandle = null;\n floatingElement = null;\n constructor(config) {\n this.config = config;\n }\n updateConfig(patch) {\n this.config = {\n ...this.config,\n ...patch\n };\n }\n sync() {\n const floating = this.resolveFloating();\n if (!floating) {\n return;\n }\n const open = this.config.getOpen();\n if (!open) {\n this.teardown();\n floating.toggleAttribute(\"hidden\", true);\n return;\n }\n const anchor = this.config.getAnchor();\n if (!anchor) {\n return;\n }\n floating.toggleAttribute(\"hidden\", false);\n const usePortal = this.config.portal !== false;\n if (usePortal) {\n if (!this.portalHandle) {\n this.portalHandle = mountPortal(floating, this.config.portalContainer ?? document.body);\n }\n } else if (this.portalHandle) {\n this.portalHandle.unmount();\n this.portalHandle = null;\n }\n this.teardownFloating();\n this.cleanupFloating = attachFloating({\n anchor,\n floating,\n getPlacement: this.config.getPlacement,\n gap: this.config.gap ?? 8,\n matchAnchorWidth: this.config.matchAnchorWidth\n });\n }\n contains(node) {\n return popoverContains(this.config.getAnchor(), this.resolveFloating(), node);\n }\n getFloatingElement() {\n return this.resolveFloating();\n }\n teardown() {\n this.teardownFloating();\n if (this.portalHandle) {\n this.portalHandle.unmount();\n this.portalHandle = null;\n }\n }\n destroy() {\n this.teardown();\n this.floatingElement = null;\n }\n resolveFloating() {\n const configuredFloating = this.config.getFloating();\n if (configuredFloating) {\n this.floatingElement = configuredFloating;\n }\n return configuredFloating ?? this.floatingElement;\n }\n teardownFloating() {\n this.cleanupFloating?.();\n this.cleanupFloating = null;\n }\n}", "import { jsx, jsxs } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { RuiIconChevronDown } from \"@/lib/icons\";\nimport { RuiButton } from \"../button\";\nimport \"./menu-button.script\";\nexport function RuiMenuButtonTrigger({\n children,\n class: className,\n variant = \"filled\",\n size = \"md\",\n ...props\n}) {\n return /* @__PURE__ */jsxs(RuiButton, {\n ...props,\n variant,\n size,\n \"data-ref\": \"trigger\",\n class: cx(\"rui-menu-button__trigger\", className),\n \"aria-haspopup\": \"menu\",\n children: [children, /* @__PURE__ */jsx(RuiIconChevronDown, {\n class: \"rui-menu-button__chevron\"\n })]\n });\n}\nexport function RuiMenuButtonContent({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"div\", {\n ...props,\n \"data-ref\": \"menu\",\n class: cx(\"rui-menu-button__menu\", \"rui-popover\", \"rui-floating\", className),\n role: \"menu\",\n children\n });\n}\nexport function RuiMenuButtonItem({\n children,\n value,\n disabled,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"button\", {\n ...props,\n type: \"button\",\n class: cx(\"rui-menu-button__item\", className),\n role: \"menuitem\",\n \"data-value\": value,\n \"aria-disabled\": disabled ? \"true\" : void 0,\n disabled,\n tabIndex: -1,\n children\n });\n}\nexport function RuiMenuButton({\n trigger,\n items,\n children,\n class: className,\n ...props\n}) {\n if (trigger == null && items == null) {\n return /* @__PURE__ */jsx(\"rui-menu-button\", {\n ...props,\n class: cx(\"rui-menu-button\", className),\n children\n });\n }\n return /* @__PURE__ */jsxs(\"rui-menu-button\", {\n ...props,\n class: cx(\"rui-menu-button\", className),\n children: [/* @__PURE__ */jsx(RuiMenuButtonTrigger, {\n children: trigger\n }), /* @__PURE__ */jsx(RuiMenuButtonContent, {\n children: items?.map(item => /* @__PURE__ */jsx(RuiMenuButtonItem, {\n value: item.value,\n disabled: item.disabled,\n children: item.label\n }))\n })]\n });\n}", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nexport function RuiIconChevronDown({\n class: className,\n size = \"sm\",\n ...props\n}) {\n return /* @__PURE__ */jsx(\"svg\", {\n ...props,\n class: cx(\"rui-icon\", size === \"md\" && \"rui-icon--md\", className),\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n \"aria-hidden\": \"true\",\n children: /* @__PURE__ */jsx(\"path\", {\n d: \"m6 9 6 6 6-6\"\n })\n });\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nfunction resolveAriaPressed(pressed, toggle, defaultPressed) {\n if (pressed !== void 0) {\n return pressed;\n }\n if (toggle) {\n return defaultPressed;\n }\n return void 0;\n}\nfunction invokeClickListener(listener, event) {\n if (typeof listener === \"function\") {\n listener(event);\n return;\n }\n if (listener != null && typeof listener === \"object\" && \"handleEvent\" in listener) {\n listener.handleEvent(event);\n }\n}\nexport function RuiButton(props) {\n if (props.href !== void 0) {\n const {\n href,\n target,\n rel,\n download,\n children: children2,\n class: className2,\n variant: variant2,\n size: size2,\n square: square2,\n ...host2\n } = props;\n return /* @__PURE__ */jsx(\"a\", {\n ...host2,\n href,\n target,\n rel,\n download,\n class: cx(\"rui-button\", `rui-button--${variant2 ?? \"filled\"}`, `rui-button--${size2 ?? \"md\"}`, square2 && \"rui-button--square\", className2),\n children: children2\n });\n }\n const {\n variant,\n size,\n square,\n class: className,\n children,\n type = \"button\",\n disabled,\n pressed,\n defaultPressed = false,\n toggle = false,\n \"on:click\": onClick,\n ...host\n } = props;\n const handleClick = event => {\n if (toggle && pressed === void 0) {\n const button = event.currentTarget;\n const next = button.getAttribute(\"aria-pressed\") !== \"true\";\n button.setAttribute(\"aria-pressed\", String(next));\n }\n invokeClickListener(onClick, event);\n };\n return /* @__PURE__ */jsx(\"button\", {\n ...host,\n type,\n class: cx(\"rui-button\", `rui-button--${variant ?? \"filled\"}`, `rui-button--${size ?? \"md\"}`, square && \"rui-button--square\", className),\n disabled,\n \"aria-pressed\": resolveAriaPressed(pressed, toggle, defaultPressed),\n \"data-toggle\": toggle && pressed === void 0 ? \"\" : void 0,\n \"on:click\": toggle || onClick ? handleClick : void 0,\n children\n });\n}"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["RadiantElement", "bound", "customElement", "event", "onEvent", "onUpdated", "prop", "query", "OPPOSITE", "DEFAULT_VIEWPORT_PADDING", "parsePlacement", "placement", "dash", "side", "align", "primaryAxis", "coordsFor", "anchor", "size", "gap", "width", "height", "x", "y", "overflowOnPrimary", "coords", "viewport", "padding", "vw", "vh", "freeSpaceOnSide", "toPlacement", "clampCrossAxis", "maxX", "maxY", "computeFloatingPosition", "anchor", "size", "placement", "gap", "viewport", "DEFAULT_VIEWPORT_PADDING", "preferred", "align", "parsePlacement", "preferredCoords", "coordsFor", "preferredOverflow", "overflowOnPrimary", "side", "coords", "flipped", "OPPOSITE", "flippedCoords", "preferredFree", "freeSpaceOnSide", "clampCrossAxis", "toPlacement", "applyFloatingPosition", "floating", "options", "resolved", "attachFloating", "getPlacement", "matchAnchorWidth", "update", "observer", "mountPortal", "node", "container", "parent", "placeholder", "restoreParent", "popoverContains", "anchor", "floating", "node", "shouldDismissPopoverPointer", "anchor", "floating", "target", "popoverContains", "PopoverController", "config", "patch", "mountPortal", "attachFloating", "node", "configuredFloating", "_initProto", "_initClass", "_init_open", "_init_extra_open", "_init_placement", "_init_extra_placement", "_init_triggerTarget", "_init_extra_triggerTarget", "_init_menuTarget", "_init_extra_menuTarget", "_init_changeEvent", "_init_extra_changeEvent", "_init_closeEvent", "_init_extra_closeEvent", "_applyDecs", "o", "i", "a", "c", "u", "s", "f", "l", "p", "d", "m", "h", "y", "v", "g", "
|
|
3
|
+
"sources": ["../../../../src/components/ui/menu-button/menu-button.script.tsx", "../../../../src/components/ui/shared/floating-position.ts", "../../../../src/components/ui/shared/portal.ts", "../../../../src/components/ui/shared/popover-controller.ts", "../../../../src/components/ui/shared/menu-tree.ts", "../../../../src/components/ui/menu-button/menu-button.tsx", "../../../../src/lib/cx.ts", "../../../../src/lib/icons/chevron-down.tsx", "../../../../src/components/ui/button/button.tsx", "../../../../src/components/ui/separator/separator.tsx", "../../../../src/components/ui/shared/menu-entry.tsx"],
|
|
4
|
+
"sourcesContent": ["let _initProto, _initClass, _init_open, _init_extra_open, _init_placement, _init_extra_placement, _init_triggerTarget, _init_extra_triggerTarget, _init_menuTarget, _init_extra_menuTarget, _init_changeEvent, _init_extra_changeEvent, _init_closeEvent, _init_extra_closeEvent;\nfunction _applyDecs(e, t, n, r, o, i) { var a, c, u, s, f, l, p, d = Symbol.metadata || Symbol.for(\"Symbol.metadata\"), m = Object.defineProperty, h = Object.create, y = [h(null), h(null)], v = t.length; function g(t, n, r) { return function (o, i) { n && (i = o, o = e); for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []); return r ? i : o; }; } function b(e, t, n, r) { if (\"function\" != typeof e && (r || void 0 !== e)) throw new TypeError(t + \" must \" + (n || \"be\") + \" a function\" + (r ? \"\" : \" or undefined\")); return e; } function applyDec(e, t, n, r, o, i, u, s, f, l, p) { function d(e) { if (!p(e)) throw new TypeError(\"Attempted to access private element on non-instance\"); } var h = [].concat(t[0]), v = t[3], w = !u, D = 1 === o, S = 3 === o, j = 4 === o, E = 2 === o; function I(t, n, r) { return function (o, i) { return n && (i = o, o = e), r && r(o), P[t].call(o, i); }; } if (!w) { var P = {}, k = [], F = S ? \"get\" : j || D ? \"set\" : \"value\"; if (f ? (l || D ? P = { get: _setFunctionName(function () { return v(this); }, r, \"get\"), set: function (e) { t[4](this, e); } } : P[F] = v, l || _setFunctionName(P[F], r, E ? \"\" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) { if ((c = y[+s][r]) && 7 !== (c ^ o)) throw Error(\"Decorating two elements with the same name (\" + P[F].name + \") is not supported yet\"); y[+s][r] = o < 3 ? 1 : o; } } for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) { var T = b(h[O], \"A decorator\", \"be\", !0), z = n ? h[O - 1] : void 0, A = {}, H = { kind: [\"field\", \"accessor\", \"method\", \"getter\", \"setter\", \"class\"][o], name: r, metadata: a, addInitializer: function (e, t) { if (e.v) throw new TypeError(\"attempted to call addInitializer after decoration was finished\"); b(t, \"An initializer\", \"be\", !0), i.push(t); }.bind(null, A) }; if (w) c = T.call(z, N, H), A.v = 1, b(c, \"class decorators\", \"return\") && (N = c);else if (H.static = s, H.private = f, c = H.access = { has: f ? p.bind() : function (e) { return r in e; } }, j || (c.get = f ? E ? function (e) { return d(e), P.value; } : I(\"get\", 0, d) : function (e) { return e[r]; }), E || S || (c.set = f ? I(\"set\", 0, d) : function (e, t) { e[r] = t; }), N = T.call(z, D ? { get: P.get, set: P.set } : P[F], H), A.v = 1, D) { if (\"object\" == typeof N && N) (c = b(N.get, \"accessor.get\")) && (P.get = c), (c = b(N.set, \"accessor.set\")) && (P.set = c), (c = b(N.init, \"accessor.init\")) && k.unshift(c);else if (void 0 !== N) throw new TypeError(\"accessor decorators must return an object with get, set, or init properties or undefined\"); } else b(N, (l ? \"field\" : \"method\") + \" decorators\", \"return\") && (l ? k.unshift(N) : P[F] = N); } return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I(\"get\", s), I(\"set\", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N; } function w(e) { return m(e, d, { configurable: !0, enumerable: !0, value: a }); } return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function (e) { e && f.push(g(e)); }, p = function (t, r) { for (var i = 0; i < n.length; i++) { var a = n[i], c = a[1], l = 7 & c; if ((8 & c) == t && !l == r) { var p = a[2], d = !!a[3], m = 16 & c; applyDec(t ? e : e.prototype, a, m, d ? \"#\" + p : _toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) { return _checkInRHS(t) === e; } : o); } } }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), { e: c, get c() { var n = []; return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)]; } }; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _setFunctionName(e, t, n) { \"symbol\" == typeof t && (t = (t = t.description) ? \"[\" + t + \"]\" : \"\"); try { Object.defineProperty(e, \"name\", { configurable: !0, value: n ? n + \" \" + t : t }); } catch (e) {} return e; }\nfunction _checkInRHS(e) { if (Object(e) !== e) throw TypeError(\"right-hand side of 'in' should be an object, got \" + (null !== e ? typeof e : \"null\")); return e; }\nimport { RadiantElement, bound, customElement, event, onEvent, onUpdated, prop, query } from \"@ecopages/radiant\";\nimport { PopoverController, shouldDismissPopoverPointer } from \"../shared/popover-controller\";\nimport { MenuTreeController } from \"../shared/menu-tree\";\nconst MENU_GAP = 6;\nlet _RuiMenuButton;\nclass RuiMenuButton extends RadiantElement {\n static {\n ({\n e: [_init_open, _init_extra_open, _init_placement, _init_extra_placement, _init_triggerTarget, _init_extra_triggerTarget, _init_menuTarget, _init_extra_menuTarget, _init_changeEvent, _init_extra_changeEvent, _init_closeEvent, _init_extra_closeEvent, _initProto],\n c: [_RuiMenuButton, _initClass]\n } = _applyDecs(this, [customElement(\"rui-menu-button\")], [[prop({\n type: Boolean,\n reflect: true,\n defaultValue: false\n }), 0, \"open\"], [prop({\n type: String,\n defaultValue: \"bottom-start\"\n }), 0, \"placement\"], [query({\n ref: \"trigger\"\n }), 0, \"triggerTarget\"], [query({\n ref: \"menu\"\n }), 0, \"menuTarget\"], [event({\n name: \"rui-change\",\n bubbles: true,\n composed: true\n }), 0, \"changeEvent\"], [event({\n name: \"rui-close\",\n bubbles: true,\n composed: true\n }), 0, \"closeEvent\"], [[bound, onUpdated([\"open\", \"placement\"])], 2, \"syncOpenState\"], [onEvent({\n document: true,\n type: \"pointerdown\"\n }), 2, \"onDocumentPointerDown\"], [onEvent({\n ref: \"trigger\",\n type: \"click\"\n }), 2, \"onTriggerClick\"], [onEvent({\n ref: \"trigger\",\n type: \"keydown\"\n }), 2, \"onTriggerKeydown\"], [onEvent({\n ref: \"menu\",\n type: \"keydown\"\n }), 2, \"onMenuKeydown\"], [onEvent({\n ref: \"menu\",\n type: \"pointerover\"\n }), 2, \"onMenuPointerOver\"], [onEvent({\n ref: \"menu\",\n type: \"pointerout\"\n }), 2, \"onMenuPointerOut\"], [onEvent({\n ref: \"menu\",\n type: \"focusout\"\n }), 2, \"onMenuFocusOut\"], [onEvent({\n selector: '[role=\"menuitem\"]',\n type: \"click\"\n }), 2, \"onItemClick\"]], 0, void 0, RadiantElement));\n }\n open = (_initProto(this), _init_open(this));\n placement = (_init_extra_open(this), _init_placement(this));\n triggerTarget = (_init_extra_placement(this), _init_triggerTarget(this));\n menuTarget = (_init_extra_triggerTarget(this), _init_menuTarget(this));\n changeEvent = (_init_extra_menuTarget(this), _init_changeEvent(this));\n closeEvent = (_init_extra_changeEvent(this), _init_closeEvent(this));\n menuId = (_init_extra_closeEvent(this), `rui-menu-${Math.random().toString(36).slice(2, 9)}`);\n popoverController = null;\n menuTree = null;\n pendingFocus = null;\n onConnected() {\n this.syncOpenState();\n }\n disconnectedCallback() {\n this.menuTree?.destroy();\n this.menuTree = null;\n this.popoverController?.destroy();\n this.popoverController = null;\n super.disconnectedCallback();\n }\n getItems() {\n if (!this.menuTarget) return [];\n return this.ensureMenuTree().getFocusableItems(this.menuTarget);\n }\n ensureMenuTree() {\n if (!this.menuTree) {\n this.menuTree = new MenuTreeController({\n root: this,\n getRootMenu: () => this.menuTarget,\n onActivate: item => this.activateItem(item),\n onCloseRoot: returnFocus => this.setOpen(false, returnFocus ? \"trigger\" : null)\n });\n }\n return this.menuTree;\n }\n getSearchInput() {\n return this.menuTarget?.querySelector(\"[data-autocomplete-input]\") ?? null;\n }\n ensurePopoverController() {\n if (!this.popoverController) {\n this.popoverController = new PopoverController({\n getAnchor: () => this.triggerTarget,\n getFloating: () => this.menuTarget,\n getOpen: () => this.open,\n getPlacement: () => this.placement,\n gap: MENU_GAP,\n portal: false\n });\n }\n return this.popoverController;\n }\n syncOpenState() {\n if (!this.triggerTarget || !this.menuTarget) return;\n this.menuTarget.id = this.menuId;\n this.triggerTarget.setAttribute(\"aria-controls\", this.menuId);\n this.triggerTarget.setAttribute(\"aria-haspopup\", \"menu\");\n this.triggerTarget.setAttribute(\"aria-expanded\", String(this.open));\n this.menuTarget.toggleAttribute(\"hidden\", !this.open);\n const menuTree = this.ensureMenuTree();\n menuTree.sync();\n if (!this.open) menuTree.closeAll();\n const controller = this.ensurePopoverController();\n controller.updateConfig({\n getPlacement: () => this.placement,\n getOpen: () => this.open\n });\n controller.sync();\n const focus = this.pendingFocus;\n this.pendingFocus = null;\n if (!focus) return;\n if (focus === \"trigger\") {\n this.triggerTarget?.focus();\n return;\n }\n const search = this.getSearchInput();\n if (search) {\n search.focus();\n return;\n }\n if (focus === \"first\") this.getItems()[0]?.focus();\n if (focus === \"last\") {\n const items = this.getItems();\n items[items.length - 1]?.focus();\n }\n }\n setOpen(next, focus = null) {\n const wasOpen = this.open;\n this.pendingFocus = focus;\n this.open = next;\n if (wasOpen && !next) this.closeEvent.emit();\n if (wasOpen === next) this.syncOpenState();\n }\n onDocumentPointerDown(event2) {\n if (!this.open) return;\n const target = event2.target;\n if (!shouldDismissPopoverPointer(this.triggerTarget, this.menuTarget, target)) return;\n this.setOpen(false);\n }\n onTriggerClick() {\n this.setOpen(!this.open, this.open ? null : \"first\");\n }\n onTriggerKeydown(event2) {\n switch (event2.key) {\n case \"ArrowDown\":\n case \"Enter\":\n case \" \":\n event2.preventDefault();\n this.setOpen(true, \"first\");\n break;\n case \"ArrowUp\":\n event2.preventDefault();\n this.setOpen(true, \"last\");\n break;\n default:\n break;\n }\n }\n onMenuKeydown(event2) {\n this.ensureMenuTree().handleKeydown(event2);\n }\n onMenuPointerOver(event2) {\n this.ensureMenuTree().handlePointerOver(event2);\n }\n onMenuPointerOut(event2) {\n this.ensureMenuTree().handlePointerOut(event2);\n }\n onMenuFocusOut(event2) {\n this.ensureMenuTree().handleFocusOut(event2);\n }\n onItemClick(event2) {\n this.ensureMenuTree().handleClick(event2);\n }\n activateItem(item) {\n const value = item.getAttribute(\"data-value\") || item.textContent?.trim() || \"\";\n this.changeEvent.emit({\n value\n });\n this.setOpen(false, \"trigger\");\n }\n static {\n _initClass();\n }\n}\nexport { _RuiMenuButton as RuiMenuButton };", "const OPPOSITE = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\"\n};\nconst DEFAULT_VIEWPORT_PADDING = 8;\nfunction parsePlacement(placement) {\n const dash = placement.indexOf(\"-\");\n if (dash === -1) return {\n side: placement,\n align: \"center\"\n };\n const side = placement.slice(0, dash);\n const align = placement.slice(dash + 1);\n return {\n side,\n align: align === \"start\" || align === \"end\" ? align : \"center\"\n };\n}\nfunction primaryAxis(side) {\n return side === \"top\" || side === \"bottom\" ? \"y\" : \"x\";\n}\nfunction coordsFor(anchor, size, side, align, gap) {\n const {\n width,\n height\n } = size;\n let x = 0;\n let y = 0;\n switch (side) {\n case \"top\":\n y = anchor.top - height - gap;\n break;\n case \"bottom\":\n y = anchor.bottom + gap;\n break;\n case \"left\":\n x = anchor.left - width - gap;\n break;\n case \"right\":\n x = anchor.right + gap;\n break;\n }\n if (primaryAxis(side) === \"y\") {\n if (align === \"start\") x = anchor.left;else if (align === \"end\") x = anchor.right - width;else x = anchor.left + (anchor.width - width) / 2;\n } else {\n if (align === \"start\") y = anchor.top;else if (align === \"end\") y = anchor.bottom - height;else y = anchor.top + (anchor.height - height) / 2;\n }\n return {\n x,\n y\n };\n}\nfunction overflowOnPrimary(coords, size, side, viewport) {\n const {\n padding,\n width: vw,\n height: vh\n } = viewport;\n if (side === \"top\") return Math.max(0, padding - coords.y);\n if (side === \"bottom\") return Math.max(0, coords.y + size.height - (vh - padding));\n if (side === \"left\") return Math.max(0, padding - coords.x);\n return Math.max(0, coords.x + size.width - (vw - padding));\n}\nfunction freeSpaceOnSide(anchor, size, side, viewport) {\n const {\n padding,\n width: vw,\n height: vh\n } = viewport;\n if (side === \"top\") return anchor.top - padding - size.height;\n if (side === \"bottom\") return vh - padding - size.height - anchor.bottom;\n if (side === \"left\") return anchor.left - padding - size.width;\n return vw - padding - size.width - anchor.right;\n}\nfunction toPlacement(side, align) {\n if (align === \"center\") {\n return side;\n }\n return `${side}-${align}`;\n}\nfunction clampCrossAxis(coords, size, side, viewport) {\n const {\n padding,\n width: vw,\n height: vh\n } = viewport;\n if (primaryAxis(side) === \"y\") {\n const maxX = Math.max(padding, vw - padding - size.width);\n return {\n x: Math.min(Math.max(coords.x, padding), maxX),\n y: coords.y\n };\n }\n const maxY = Math.max(padding, vh - padding - size.height);\n return {\n x: coords.x,\n y: Math.min(Math.max(coords.y, padding), maxY)\n };\n}\nexport function computeFloatingCoords(anchor, size, placement, gap, viewport = {\n width: typeof window === \"undefined\" ? 0 : window.innerWidth,\n height: typeof window === \"undefined\" ? 0 : window.innerHeight,\n padding: DEFAULT_VIEWPORT_PADDING\n}) {\n return computeFloatingPosition(anchor, size, placement, gap, viewport).coords;\n}\nexport function computeFloatingPosition(anchor, size, placement, gap, viewport = {\n width: typeof window === \"undefined\" ? 0 : window.innerWidth,\n height: typeof window === \"undefined\" ? 0 : window.innerHeight,\n padding: DEFAULT_VIEWPORT_PADDING\n}) {\n const {\n side: preferred,\n align\n } = parsePlacement(placement);\n const preferredCoords = coordsFor(anchor, size, preferred, align, gap);\n const preferredOverflow = overflowOnPrimary(preferredCoords, size, preferred, viewport);\n let side = preferred;\n let coords = preferredCoords;\n if (preferredOverflow > 0) {\n const flipped = OPPOSITE[preferred];\n const flippedCoords = coordsFor(anchor, size, flipped, align, gap);\n const preferredFree = freeSpaceOnSide(anchor, size, preferred, viewport);\n const flippedFree = freeSpaceOnSide(anchor, size, flipped, viewport);\n if (flippedFree > preferredFree) {\n side = flipped;\n coords = flippedCoords;\n }\n }\n return {\n coords: clampCrossAxis(coords, size, side, viewport),\n placement: toPlacement(side, align)\n };\n}\nexport function applyFloatingPosition(anchor, floating, placement, gap, options = {}) {\n const {\n coords,\n placement: resolved\n } = computeFloatingPosition(anchor.getBoundingClientRect(), {\n width: floating.offsetWidth,\n height: floating.offsetHeight\n }, placement, gap);\n Object.assign(floating.style, {\n position: \"fixed\",\n left: `${coords.x}px`,\n top: `${coords.y}px`,\n right: \"auto\",\n bottom: \"auto\",\n visibility: \"visible\"\n });\n if (options.matchAnchorWidth) {\n floating.style.width = `${anchor.offsetWidth}px`;\n }\n floating.setAttribute(\"data-placement\", resolved);\n return resolved;\n}\nexport function attachFloating({\n anchor,\n floating,\n getPlacement,\n gap,\n matchAnchorWidth\n}) {\n const update = () => {\n if (floating.hidden) return;\n applyFloatingPosition(anchor, floating, getPlacement(), gap, {\n matchAnchorWidth\n });\n };\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n const observer = new ResizeObserver(update);\n observer.observe(anchor);\n observer.observe(floating);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n observer.disconnect();\n };\n}", "export function mountPortal(node, container = document.body) {\n const parent = node.parentNode;\n if (!parent) {\n return {\n unmount: () => {}\n };\n }\n const placeholder = document.createComment(\"rui-portal\");\n parent.insertBefore(placeholder, node);\n container.appendChild(node);\n return {\n unmount: () => {\n const restoreParent = placeholder.parentNode;\n if (!restoreParent) {\n return;\n }\n restoreParent.insertBefore(node, placeholder);\n placeholder.remove();\n }\n };\n}", "import { attachFloating } from \"./floating-position\";\nimport { mountPortal } from \"./portal\";\nexport function popoverContains(anchor, floating, node) {\n if (!node) {\n return false;\n }\n return Boolean(anchor?.contains(node) || floating?.contains(node));\n}\nexport function shouldDismissPopoverFocus(anchor, floating, relatedTarget) {\n if (!(relatedTarget instanceof Node)) {\n return true;\n }\n return !popoverContains(anchor, floating, relatedTarget);\n}\nexport function shouldDismissPopoverPointer(anchor, floating, target) {\n return !popoverContains(anchor, floating, target);\n}\nexport class PopoverController {\n config;\n cleanupFloating = null;\n portalHandle = null;\n floatingElement = null;\n constructor(config) {\n this.config = config;\n }\n updateConfig(patch) {\n this.config = {\n ...this.config,\n ...patch\n };\n }\n sync() {\n const floating = this.resolveFloating();\n if (!floating) {\n return;\n }\n const open = this.config.getOpen();\n if (!open) {\n this.teardown();\n floating.toggleAttribute(\"hidden\", true);\n return;\n }\n const anchor = this.config.getAnchor();\n if (!anchor) {\n return;\n }\n floating.toggleAttribute(\"hidden\", false);\n const usePortal = this.config.portal !== false;\n if (usePortal) {\n if (!this.portalHandle) {\n this.portalHandle = mountPortal(floating, this.config.portalContainer ?? document.body);\n }\n } else if (this.portalHandle) {\n this.portalHandle.unmount();\n this.portalHandle = null;\n }\n this.teardownFloating();\n this.cleanupFloating = attachFloating({\n anchor,\n floating,\n getPlacement: this.config.getPlacement,\n gap: this.config.gap ?? 8,\n matchAnchorWidth: this.config.matchAnchorWidth\n });\n }\n contains(node) {\n return popoverContains(this.config.getAnchor(), this.resolveFloating(), node);\n }\n getFloatingElement() {\n return this.resolveFloating();\n }\n teardown() {\n this.teardownFloating();\n if (this.portalHandle) {\n this.portalHandle.unmount();\n this.portalHandle = null;\n }\n }\n destroy() {\n this.teardown();\n this.floatingElement = null;\n }\n resolveFloating() {\n const configuredFloating = this.config.getFloating();\n if (configuredFloating) {\n this.floatingElement = configuredFloating;\n }\n return configuredFloating ?? this.floatingElement;\n }\n teardownFloating() {\n this.cleanupFloating?.();\n this.cleanupFloating = null;\n }\n}", "import { PopoverController } from \"./popover-controller\";\nconst SUBMENU_DELAY = 200;\nconst SUBMENU_CLOSE_DELAY = 250;\nconst SUBMENU_GAP = 6;\nexport class MenuTreeController {\n config;\n popovers = /* @__PURE__ */new Map();\n openMenus = /* @__PURE__ */new Set();\n openTimers = /* @__PURE__ */new Map();\n closeTimers = /* @__PURE__ */new Map();\n constructor(config) {\n this.config = config;\n }\n sync() {\n for (const menu of this.getMenus()) {\n for (const item of this.getDirectItems(menu)) {\n const submenu = this.getSubmenu(item);\n if (!submenu) continue;\n item.setAttribute(\"aria-haspopup\", \"menu\");\n if (!item.hasAttribute(\"aria-expanded\")) item.setAttribute(\"aria-expanded\", \"false\");\n if (!submenu.id) submenu.id = `rui-submenu-${Math.random().toString(36).slice(2, 9)}`;\n item.setAttribute(\"aria-controls\", submenu.id);\n submenu.hidden = item.getAttribute(\"aria-expanded\") !== \"true\";\n }\n }\n }\n handlePointerOver(event) {\n const item = this.getDirectItem(event.target);\n if (!item || this.isDisabled(item)) return;\n this.cancelCloseFor(item);\n this.cancelAncestorCloseTimers(item);\n const submenu = this.getSubmenu(item);\n if (!submenu || item.getAttribute(\"aria-expanded\") === \"true\") return;\n this.closeSiblingBranches(item);\n this.cancelOpenFor(item);\n const timer = setTimeout(() => {\n this.openTimers.delete(item);\n this.openSubmenu(item, false);\n }, SUBMENU_DELAY);\n this.openTimers.set(item, timer);\n }\n handlePointerOut(event) {\n const item = this.getDirectItem(event.target);\n if (!item) return;\n const related = event.relatedTarget;\n const submenu = this.getSubmenu(item);\n if (submenu && related && submenu.contains(related)) return;\n if (related && item.contains(related)) return;\n this.cancelOpenFor(item);\n if (item.getAttribute(\"aria-expanded\") !== \"true\") return;\n this.scheduleClose(item);\n }\n handleFocusOut(event) {\n const item = this.getDirectItem(event.target);\n if (!item || item.getAttribute(\"aria-expanded\") !== \"true\") return;\n const submenu = this.getSubmenu(item);\n const related = event.relatedTarget;\n if (submenu && related && submenu.contains(related)) return;\n this.closeSubmenu(item, false);\n }\n handleKeydown(event) {\n const item = this.getDirectItem(event.target);\n const menu = item?.parentElement;\n if (!item || !menu || menu.getAttribute(\"role\") !== \"menu\") return false;\n const items = this.getFocusableItems(menu);\n const index = items.indexOf(item);\n const submenu = this.getSubmenu(item);\n switch (event.key) {\n case \"ArrowDown\":\n if (index < 0 || items.length === 0) return false;\n event.preventDefault();\n items[(index + 1) % items.length]?.focus();\n return true;\n case \"ArrowUp\":\n if (index < 0 || items.length === 0) return false;\n event.preventDefault();\n items[(index - 1 + items.length) % items.length]?.focus();\n return true;\n case \"Home\":\n event.preventDefault();\n items[0]?.focus();\n return true;\n case \"End\":\n event.preventDefault();\n items[items.length - 1]?.focus();\n return true;\n case \"ArrowRight\":\n if (!submenu) return false;\n event.preventDefault();\n this.openSubmenu(item, true);\n return true;\n case \"ArrowLeft\":\n {\n if (this.getRootMenu() === menu) return false;\n event.preventDefault();\n const trigger = this.getTriggerForMenu(menu);\n if (trigger) this.closeSubmenu(trigger, true);\n return true;\n }\n case \"Enter\":\n case \" \":\n if (submenu) {\n event.preventDefault();\n this.openSubmenu(item, true);\n return true;\n }\n event.preventDefault();\n this.config.onActivate(item);\n return true;\n case \"Escape\":\n event.preventDefault();\n this.config.onCloseRoot(true);\n return true;\n case \"Tab\":\n this.config.onCloseRoot(false);\n return true;\n default:\n return false;\n }\n }\n handleClick(event) {\n const item = this.getDirectItem(event.target);\n if (!item || this.isDisabled(item)) return false;\n if (this.getSubmenu(item)) {\n event.preventDefault();\n this.closeSiblingBranches(item);\n this.openSubmenu(item, false);\n return true;\n }\n this.config.onActivate(item);\n return true;\n }\n closeAll() {\n for (const menu of Array.from(this.openMenus)) {\n const trigger = this.getTriggerForMenu(menu);\n if (trigger) this.closeSubmenu(trigger, false);\n }\n this.clearTimers();\n }\n getFocusableItems(menu) {\n return this.getDirectItems(menu).filter(candidate => !this.isDisabled(candidate));\n }\n destroy() {\n this.closeAll();\n for (const controller of this.popovers.values()) controller.destroy();\n this.popovers.clear();\n }\n openSubmenu(item, focusFirst) {\n const submenu = this.getSubmenu(item);\n if (!submenu || this.isDisabled(item)) return;\n this.cancelOpenFor(item);\n this.cancelCloseFor(item);\n this.closeSiblingBranches(item);\n item.setAttribute(\"aria-expanded\", \"true\");\n submenu.hidden = false;\n this.openMenus.add(submenu);\n let popover = this.popovers.get(submenu);\n if (!popover) {\n popover = new PopoverController({\n getAnchor: () => item,\n getFloating: () => submenu,\n getOpen: () => item.getAttribute(\"aria-expanded\") === \"true\",\n getPlacement: () => \"right-start\",\n gap: SUBMENU_GAP,\n portal: false\n });\n this.popovers.set(submenu, popover);\n }\n popover.updateConfig({\n getAnchor: () => item,\n getOpen: () => item.getAttribute(\"aria-expanded\") === \"true\"\n });\n popover.sync();\n if (focusFirst) {\n this.getFocusableItems(submenu)[0]?.focus();\n }\n }\n closeSubmenu(item, returnFocus) {\n const submenu = this.getSubmenu(item);\n if (!submenu) return;\n for (const child of this.getDirectItems(submenu)) this.closeSubmenu(child, false);\n this.cancelOpenFor(item);\n this.cancelCloseFor(item);\n item.setAttribute(\"aria-expanded\", \"false\");\n submenu.hidden = true;\n this.openMenus.delete(submenu);\n this.popovers.get(submenu)?.teardown();\n if (returnFocus) item.focus();\n }\n closeSiblingBranches(item) {\n const menu = item.parentElement;\n if (!menu) return;\n for (const sibling of this.getDirectItems(menu)) {\n if (sibling !== item && sibling.getAttribute(\"aria-expanded\") === \"true\") this.closeSubmenu(sibling, false);\n }\n }\n scheduleClose(item) {\n this.cancelCloseFor(item);\n const timer = setTimeout(() => {\n this.closeTimers.delete(item);\n this.closeSubmenu(item, false);\n }, SUBMENU_CLOSE_DELAY);\n this.closeTimers.set(item, timer);\n }\n getMenus() {\n return Array.from(this.config.root.querySelectorAll('[role=\"menu\"]'));\n }\n getRootMenu() {\n return this.config.getRootMenu();\n }\n getDirectItems(menu) {\n return Array.from(menu.querySelectorAll('[role=\"menuitem\"]')).filter(item => item.closest('[role=\"menu\"]') === menu);\n }\n getDirectItem(target) {\n if (!(target instanceof HTMLElement)) return null;\n const item = target.closest('[role=\"menuitem\"]');\n return item && item.closest('[role=\"menu\"]') && this.config.root.contains(item) ? item : null;\n }\n getSubmenu(item) {\n const next = item.nextElementSibling;\n return next instanceof HTMLElement && next.getAttribute(\"role\") === \"menu\" ? next : null;\n }\n getTriggerForMenu(menu) {\n const previous = menu.previousElementSibling;\n return previous instanceof HTMLElement && previous.getAttribute(\"role\") === \"menuitem\" ? previous : null;\n }\n isDisabled(item) {\n return item.getAttribute(\"aria-disabled\") === \"true\" || item instanceof HTMLButtonElement && item.disabled;\n }\n cancelOpenFor(item) {\n const timer = this.openTimers.get(item);\n if (timer) clearTimeout(timer);\n this.openTimers.delete(item);\n }\n cancelCloseFor(item) {\n const timer = this.closeTimers.get(item);\n if (timer) clearTimeout(timer);\n this.closeTimers.delete(item);\n }\n cancelAncestorCloseTimers(item) {\n let menu = item.closest('[role=\"menu\"]');\n while (menu) {\n const trigger = this.getTriggerForMenu(menu);\n if (!trigger) return;\n this.cancelCloseFor(trigger);\n menu = trigger.closest('[role=\"menu\"]');\n }\n }\n clearTimers() {\n for (const timer of this.openTimers.values()) clearTimeout(timer);\n for (const timer of this.closeTimers.values()) clearTimeout(timer);\n this.openTimers.clear();\n this.closeTimers.clear();\n }\n}", "import { jsx, jsxs } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nimport { RuiIconChevronDown } from \"@/lib/icons\";\nimport { RuiButton } from \"../button\";\nimport { RuiSeparator } from \"../separator\";\nimport { renderMenuEntries } from \"../shared/menu-entry\";\nimport \"./menu-button.script\";\nexport function RuiMenuButtonTrigger({\n children,\n class: className,\n variant = \"filled\",\n size = \"md\",\n ...props\n}) {\n return /* @__PURE__ */jsxs(RuiButton, {\n ...props,\n variant,\n size,\n \"data-ref\": \"trigger\",\n class: cx(\"rui-menu-button__trigger\", className),\n \"aria-haspopup\": \"menu\",\n children: [children, /* @__PURE__ */jsx(RuiIconChevronDown, {\n class: \"rui-menu-button__chevron\"\n })]\n });\n}\nexport function RuiMenuButtonContent({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"div\", {\n ...props,\n \"data-ref\": \"menu\",\n class: cx(\"rui-menu-button__menu\", \"rui-popover\", \"rui-floating\", className),\n role: \"menu\",\n children\n });\n}\nexport function RuiMenuButtonSubmenuContent({\n children,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"div\", {\n ...props,\n \"data-ref\": \"submenu-menu\",\n class: cx(\"rui-menu-button__menu\", \"rui-menu-button__submenu\", \"rui-popover\", \"rui-floating\", className),\n role: \"menu\",\n hidden: true,\n children\n });\n}\nexport function RuiMenuButtonItem({\n children,\n value,\n disabled,\n hasSubmenu,\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"button\", {\n ...props,\n type: \"button\",\n class: cx(\"rui-menu-button__item\", className),\n role: \"menuitem\",\n \"data-value\": value,\n \"aria-haspopup\": hasSubmenu ? \"menu\" : void 0,\n \"aria-disabled\": disabled ? \"true\" : void 0,\n disabled,\n tabIndex: -1,\n children\n });\n}\nexport function RuiMenuButton({\n trigger,\n items,\n children,\n class: className,\n ...props\n}) {\n if (trigger == null && items == null) {\n return /* @__PURE__ */jsx(\"rui-menu-button\", {\n ...props,\n class: cx(\"rui-menu-button\", className),\n children\n });\n }\n return /* @__PURE__ */jsxs(\"rui-menu-button\", {\n ...props,\n class: cx(\"rui-menu-button\", className),\n children: [/* @__PURE__ */jsx(RuiMenuButtonTrigger, {\n children: trigger\n }), /* @__PURE__ */jsx(RuiMenuButtonContent, {\n children: items ? renderMenuEntries(items, {\n Item: itemProps => /* @__PURE__ */jsx(RuiMenuButtonItem, {\n ...itemProps\n }),\n Submenu: submenuProps => /* @__PURE__ */jsx(RuiMenuButtonSubmenuContent, {\n ...submenuProps\n }),\n Separator: separatorProps => /* @__PURE__ */jsx(RuiSeparator, {}, separatorProps.id)\n }) : children\n })]\n });\n}", "export function cx(...parts) {\n return parts.filter(Boolean).join(\" \");\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nexport function RuiIconChevronDown({\n class: className,\n size = \"sm\",\n ...props\n}) {\n return /* @__PURE__ */jsx(\"svg\", {\n ...props,\n class: cx(\"rui-icon\", size === \"md\" && \"rui-icon--md\", className),\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n \"aria-hidden\": \"true\",\n children: /* @__PURE__ */jsx(\"path\", {\n d: \"m6 9 6 6 6-6\"\n })\n });\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nfunction resolveAriaPressed(pressed, toggle, defaultPressed) {\n if (pressed !== void 0) {\n return pressed;\n }\n if (toggle) {\n return defaultPressed;\n }\n return void 0;\n}\nfunction invokeClickListener(listener, event) {\n if (typeof listener === \"function\") {\n listener(event);\n return;\n }\n if (listener != null && typeof listener === \"object\" && \"handleEvent\" in listener) {\n listener.handleEvent(event);\n }\n}\nexport function RuiButton(props) {\n if (props.href !== void 0) {\n const {\n href,\n target,\n rel,\n download,\n children: children2,\n class: className2,\n variant: variant2,\n size: size2,\n square: square2,\n ...host2\n } = props;\n return /* @__PURE__ */jsx(\"a\", {\n ...host2,\n href,\n target,\n rel,\n download,\n class: cx(\"rui-button\", `rui-button--${variant2 ?? \"filled\"}`, `rui-button--${size2 ?? \"md\"}`, square2 && \"rui-button--square\", className2),\n children: children2\n });\n }\n const {\n variant,\n size,\n square,\n class: className,\n children,\n type = \"button\",\n disabled,\n pressed,\n defaultPressed = false,\n toggle = false,\n \"on:click\": onClick,\n ...host\n } = props;\n const handleClick = event => {\n if (toggle && pressed === void 0) {\n const button = event.currentTarget;\n const next = button.getAttribute(\"aria-pressed\") !== \"true\";\n button.setAttribute(\"aria-pressed\", String(next));\n }\n invokeClickListener(onClick, event);\n };\n return /* @__PURE__ */jsx(\"button\", {\n ...host,\n type,\n class: cx(\"rui-button\", `rui-button--${variant ?? \"filled\"}`, `rui-button--${size ?? \"md\"}`, square && \"rui-button--square\", className),\n disabled,\n \"aria-pressed\": resolveAriaPressed(pressed, toggle, defaultPressed),\n \"data-toggle\": toggle && pressed === void 0 ? \"\" : void 0,\n \"on:click\": toggle || onClick ? handleClick : void 0,\n children\n });\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { cx } from \"@/lib/cx\";\nexport function RuiSeparator({\n orientation = \"horizontal\",\n class: className,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"hr\", {\n ...props,\n class: cx(\"rui-separator\", className),\n role: \"separator\",\n \"aria-orientation\": orientation,\n \"data-orientation\": orientation\n });\n}", "import { Fragment, jsxs } from \"@ecopages/jsx/jsx-runtime\";\nexport function renderMenuEntries(items, views) {\n return items.map(item => {\n if (item.type === \"separator\") return views.Separator({\n id: item.id\n });\n const hasSubmenu = Boolean(item.items?.length);\n return /* @__PURE__ */jsxs(Fragment, {\n children: [views.Item({\n value: item.value,\n disabled: item.disabled,\n hasSubmenu,\n children: item.label\n }), hasSubmenu ? views.Submenu({\n children: renderMenuEntries(item.items ?? [], views)\n }) : null]\n });\n });\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["RadiantElement", "bound", "customElement", "event", "onEvent", "onUpdated", "prop", "query", "OPPOSITE", "DEFAULT_VIEWPORT_PADDING", "parsePlacement", "placement", "dash", "side", "align", "primaryAxis", "coordsFor", "anchor", "size", "gap", "width", "height", "x", "y", "overflowOnPrimary", "coords", "viewport", "padding", "vw", "vh", "freeSpaceOnSide", "toPlacement", "clampCrossAxis", "maxX", "maxY", "computeFloatingPosition", "anchor", "size", "placement", "gap", "viewport", "DEFAULT_VIEWPORT_PADDING", "preferred", "align", "parsePlacement", "preferredCoords", "coordsFor", "preferredOverflow", "overflowOnPrimary", "side", "coords", "flipped", "OPPOSITE", "flippedCoords", "preferredFree", "freeSpaceOnSide", "clampCrossAxis", "toPlacement", "applyFloatingPosition", "floating", "options", "resolved", "attachFloating", "getPlacement", "matchAnchorWidth", "update", "observer", "mountPortal", "node", "container", "parent", "placeholder", "restoreParent", "popoverContains", "anchor", "floating", "node", "shouldDismissPopoverPointer", "anchor", "floating", "target", "popoverContains", "PopoverController", "config", "patch", "mountPortal", "attachFloating", "node", "configuredFloating", "SUBMENU_DELAY", "SUBMENU_CLOSE_DELAY", "SUBMENU_GAP", "MenuTreeController", "config", "menu", "item", "submenu", "event", "timer", "related", "items", "index", "trigger", "candidate", "controller", "focusFirst", "popover", "PopoverController", "returnFocus", "child", "sibling", "target", "next", "previous", "_initProto", "_initClass", "_init_open", "_init_extra_open", "_init_placement", "_init_extra_placement", "_init_triggerTarget", "_init_extra_triggerTarget", "_init_menuTarget", "_init_extra_menuTarget", "_init_changeEvent", "_init_extra_changeEvent", "_init_closeEvent", "_init_extra_closeEvent", "_applyDecs", "e", "t", "n", "o", "i", "a", "c", "u", "s", "f", "l", "p", "d", "m", "h", "y", "v", "g", "r", "b", "applyDec", "w", "D", "S", "j", "E", "I", "P", "k", "_setFunctionName", "N", "O", "T", "z", "A", "_toPropertyKey", "_checkInRHS", "_toPrimitive", "MENU_GAP", "_RuiMenuButton", "RuiMenuButton", "RadiantElement", "customElement", "prop", "query", "event", "bound", "onUpdated", "onEvent", "MenuTreeController", "item", "returnFocus", "PopoverController", "menuTree", "controller", "focus", "search", "items", "next", "wasOpen", "event2", "target", "shouldDismissPopoverPointer", "value", "jsx", "jsxs", "cx", "parts", "jsx", "RuiIconChevronDown", "className", "size", "props", "jsx", "cx", "jsx", "resolveAriaPressed", "pressed", "toggle", "defaultPressed", "invokeClickListener", "listener", "event", "RuiButton", "props", "href", "target", "rel", "download", "children2", "className2", "variant2", "size2", "square2", "host2", "jsx", "cx", "variant", "size", "square", "className", "children", "type", "disabled", "onClick", "host", "handleClick", "button", "next", "jsx", "RuiSeparator", "orientation", "className", "props", "jsx", "cx", "Fragment", "jsxs", "renderMenuEntries", "items", "views", "item", "hasSubmenu", "RuiMenuButtonTrigger", "children", "className", "variant", "size", "props", "jsxs", "RuiButton", "cx", "jsx", "RuiIconChevronDown", "RuiMenuButtonContent", "RuiMenuButtonSubmenuContent", "RuiMenuButtonItem", "value", "disabled", "hasSubmenu", "RuiMenuButton", "trigger", "items", "renderMenuEntries", "itemProps", "submenuProps", "separatorProps", "RuiSeparator"]
|
|
7
7
|
}
|
|
@@ -21,6 +21,9 @@ rui-menu-button {
|
|
|
21
21
|
.rui-menu-button__menu[hidden] {
|
|
22
22
|
display: none;
|
|
23
23
|
}
|
|
24
|
+
.rui-menu-button__menu > .rui-separator {
|
|
25
|
+
margin-block: var(--spacing-1, var(--space-1));
|
|
26
|
+
}
|
|
24
27
|
.rui-menu-button__item {
|
|
25
28
|
display: flex;
|
|
26
29
|
width: 100%;
|
|
@@ -47,6 +50,18 @@ rui-menu-button {
|
|
|
47
50
|
cursor: not-allowed;
|
|
48
51
|
opacity: var(--opacity-disabled, var(--opacity-disabled));
|
|
49
52
|
}
|
|
53
|
+
.rui-menu-button__item[aria-haspopup='menu'] {
|
|
54
|
+
justify-content: space-between;
|
|
55
|
+
}
|
|
56
|
+
.rui-menu-button__item[aria-haspopup='menu']::after {
|
|
57
|
+
content: '›';
|
|
58
|
+
margin-left: auto;
|
|
59
|
+
padding-left: var(--spacing-4, var(--space-4));
|
|
60
|
+
color: var(--color-on-background, var(--on-background));
|
|
61
|
+
}
|
|
62
|
+
.rui-menu-button__item[aria-expanded='true'] {
|
|
63
|
+
background-color: var(--color-surface, var(--surface));
|
|
64
|
+
}
|
|
50
65
|
}
|
|
51
66
|
@property --tw-border-style {
|
|
52
67
|
syntax: "*";
|
|
@@ -1,33 +1,39 @@
|
|
|
1
1
|
import type { JsxCustomElementAttributes, JsxElementProps, JsxRenderable } from '@ecopages/jsx';
|
|
2
2
|
import { type RuiButtonControlProps } from '../button';
|
|
3
|
+
import { type RuiMenuEntry } from '../shared/menu-entry';
|
|
3
4
|
import type { RuiMenuButton as RuiMenuButtonElement, RuiMenuButtonProps } from './menu-button.script';
|
|
4
5
|
import './menu-button.script';
|
|
5
|
-
export type RuiMenuItem
|
|
6
|
-
value: string;
|
|
7
|
-
label: JsxRenderable;
|
|
8
|
-
disabled?: boolean;
|
|
9
|
-
};
|
|
6
|
+
export type { RuiMenuEntry, RuiMenuItem, RuiMenuSeparator } from '../shared/menu-entry';
|
|
10
7
|
export type RuiMenuButtonTriggerProps = RuiButtonControlProps;
|
|
11
8
|
/** Trigger button for opening a menu-button popup. */
|
|
12
9
|
export declare function RuiMenuButtonTrigger({ children, class: className, variant, size, ...props }: RuiMenuButtonTriggerProps): JsxRenderable;
|
|
13
10
|
export type RuiMenuButtonContentProps = JsxElementProps<HTMLDivElement>;
|
|
14
11
|
/** Floating menu surface containing `RuiMenuButtonItem` elements. */
|
|
15
12
|
export declare function RuiMenuButtonContent({ children, class: className, ...props }: RuiMenuButtonContentProps): JsxRenderable;
|
|
13
|
+
export type RuiMenuButtonSubmenuContentProps = JsxElementProps<HTMLDivElement>;
|
|
14
|
+
/**
|
|
15
|
+
* Nested menu surface. Place it as the next sibling of the branch item so ARIA
|
|
16
|
+
* linkage and positioning can pair them.
|
|
17
|
+
*
|
|
18
|
+
* @cssclass rui-menu-button__submenu - Nested popup menu surface.
|
|
19
|
+
*/
|
|
20
|
+
export declare function RuiMenuButtonSubmenuContent({ children, class: className, ...props }: RuiMenuButtonSubmenuContentProps): JsxRenderable;
|
|
16
21
|
export type RuiMenuButtonItemProps = JsxElementProps<HTMLButtonElement> & {
|
|
17
22
|
value: string;
|
|
18
23
|
disabled?: boolean;
|
|
24
|
+
hasSubmenu?: boolean;
|
|
19
25
|
};
|
|
20
26
|
/** Action item inside `RuiMenuButtonContent`. */
|
|
21
|
-
export declare function RuiMenuButtonItem({ children, value, disabled, class: className, ...props }: RuiMenuButtonItemProps): JsxRenderable;
|
|
27
|
+
export declare function RuiMenuButtonItem({ children, value, disabled, hasSubmenu, class: className, ...props }: RuiMenuButtonItemProps): JsxRenderable;
|
|
22
28
|
/**
|
|
23
29
|
* Importable JSX helper around `<rui-menu-button>`.
|
|
24
30
|
*
|
|
25
|
-
* Accepts a `trigger` label and `items`; renders
|
|
26
|
-
* `role="menuitem"` buttons.
|
|
31
|
+
* Accepts a `trigger` label and recursive `items`; renders actions as
|
|
32
|
+
* `role="menuitem"` buttons and separator entries as non-interactive dividers.
|
|
27
33
|
*
|
|
28
34
|
* @cssclass rui-menu-button__item - Menu item (`role="menuitem"`).
|
|
29
35
|
*/
|
|
30
36
|
export declare function RuiMenuButton({ trigger, items, children, class: className, ...props }: JsxCustomElementAttributes<RuiMenuButtonElement, RuiMenuButtonProps & {
|
|
31
37
|
trigger?: JsxRenderable;
|
|
32
|
-
items?:
|
|
38
|
+
items?: RuiMenuEntry[];
|
|
33
39
|
}>): JsxRenderable;
|
|
@@ -28,9 +28,14 @@ export type RuiMenuButtonSelectDetail = {
|
|
|
28
28
|
* Keyboard interaction (open menu):
|
|
29
29
|
* - `ArrowDown` / `ArrowUp`: move between items (wraps)
|
|
30
30
|
* - `Home` / `End`: first / last item
|
|
31
|
-
* - `Enter` / `Space
|
|
31
|
+
* - `ArrowRight` / `Enter` / `Space` on a branch: open its submenu and focus its first item
|
|
32
|
+
* - `ArrowLeft` in a submenu: close it and return focus to its branch
|
|
33
|
+
* - `Enter` / `Space` on a leaf: activate it and close the tree
|
|
32
34
|
* - `Escape`: close and return focus to the trigger
|
|
33
35
|
*
|
|
36
|
+
* Nested branch menus open after a 200 ms pointer-hover delay without moving
|
|
37
|
+
* keyboard focus. Pointer travel from a branch into its flyout keeps it open.
|
|
38
|
+
*
|
|
34
39
|
* @remarks When the menu contains `[data-autocomplete-input]`, opening focuses
|
|
35
40
|
* that field so the user can filter items immediately.
|
|
36
41
|
*
|
|
@@ -38,7 +43,8 @@ export type RuiMenuButtonSelectDetail = {
|
|
|
38
43
|
* @attr {boolean} open - Whether the menu starts open. Default: `false`.
|
|
39
44
|
* @attr {('top'|'top-start'|'top-end'|'right'|'right-start'|'right-end'|'bottom'|'bottom-start'|'bottom-end'|'left'|'left-start'|'left-end')} placement - Placement of the menu surface relative to its trigger. Default: `bottom-start`.
|
|
40
45
|
* Compose with `RuiMenuButtonTrigger`, `RuiMenuButtonContent`, and
|
|
41
|
-
* `RuiMenuButtonItem
|
|
46
|
+
* `RuiMenuButtonItem`; use the submenu helpers for nested menus. The
|
|
47
|
+
* `trigger` / recursive `items` API supplies that composition.
|
|
42
48
|
* @fires rui-change - Emitted when a menu item is activated; `detail.value` is the item's `data-value` or text.
|
|
43
49
|
* @fires rui-close - Emitted when the menu closes.
|
|
44
50
|
* @cssclass rui-menu-button - Root wrapper around trigger and menu.
|
|
@@ -55,10 +61,12 @@ export declare class RuiMenuButton extends RadiantElement {
|
|
|
55
61
|
closeEvent: EventEmitter<void>;
|
|
56
62
|
private menuId;
|
|
57
63
|
private popoverController;
|
|
64
|
+
private menuTree;
|
|
58
65
|
private pendingFocus;
|
|
59
66
|
protected onConnected(): void;
|
|
60
67
|
disconnectedCallback(): void;
|
|
61
68
|
private getItems;
|
|
69
|
+
private ensureMenuTree;
|
|
62
70
|
private getSearchInput;
|
|
63
71
|
private ensurePopoverController;
|
|
64
72
|
syncOpenState(): void;
|
|
@@ -67,6 +75,9 @@ export declare class RuiMenuButton extends RadiantElement {
|
|
|
67
75
|
onTriggerClick(): void;
|
|
68
76
|
onTriggerKeydown(event: KeyboardEvent): void;
|
|
69
77
|
onMenuKeydown(event: KeyboardEvent): void;
|
|
78
|
+
onMenuPointerOver(event: PointerEvent): void;
|
|
79
|
+
onMenuPointerOut(event: PointerEvent): void;
|
|
80
|
+
onMenuFocusOut(event: FocusEvent): void;
|
|
70
81
|
onItemClick(event: Event): void;
|
|
71
82
|
private activateItem;
|
|
72
83
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { RuiMenubar as RuiMenubarElement, type RuiMenubarProps, type RuiMenubarChangeDetail } from './menubar.script';
|
|
2
|
-
export { RuiMenubar, type RuiMenubarItem } from './menubar';
|
|
2
|
+
export { RuiMenubar, RuiMenubarMenu, RuiMenubarMenuItem, RuiMenubarSubmenuContent, type RuiMenubarItem, type RuiMenuEntry, type RuiMenuItem, type RuiMenuSeparator, type RuiMenubarMenuItemProps, type RuiMenubarMenuProps, type RuiMenubarSubmenuContentProps, } from './menubar';
|