1import{d as I,D as R,z as K,A as y,aC as N,h as $,g as W,b0 as H,K as P,p as r,ac as U,be as Z,o as x,aK as z,c as l,aZ as j,q as E}from"./Ck0ep-WL.js";const G={name:"WsMenu"},Q=I({...G,props:{modelValue:{type:Boolean,default:!1},allowOutsideClick:{type:Boolean,default:!1},allowOutsideFocus:{type:Boolean,default:!1},allowRouteChange:{type:Boolean,default:!1},disableContentRole:{type:Boolean,default:!1},tag:{default:"div"},teleport:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(m,{expose:T,emit:S}){const v=".ws-menu__content",n=m,u=`ws-menu-${Z()}`,q=E(()=>({"aria-controls":u,"aria-expanded":n.modelValue})),_=r(!1),b=r(!1),F=E(()=>n.modelValue&&!n.allowOutsideClick),M=E(()=>n.modelValue&&!n.allowOutsideFocus),d=S;R(()=>{const e=K();y(e,()=>{n.allowRouteChange||d("update:modelValue",!1)})});const o=r(null),h=r(!1),a=E(()=>n.teleport&&h.value),B=r({}),C=r("body"),A=()=>{if(!o.value)return;const{bottom:e,left:t,width:s}=o.value.getBoundingClientRect();B.value={top:`${e}px`,left:`${t}px`,width:`${s}px`,minWidth:"0"}},i=e=>{const{target:t}=e;e.type==="scroll"&&t instanceof Node&&document.getElementById(u)?.contains(t)||d("update:modelValue",!1)},w=e=>{const{target:t}=e;if(!(t instanceof HTMLElement))return;const s=document.getElementById(u);!o.value?.contains(t)&&!s?.contains(t)&&d("update:modelValue",!1)},k=(e,t)=>{e?document.body.addEventListener(t,w):document.body.removeEventListener(t,w)};y(F,e=>{k(e,"mousedown")}),y(M,e=>{k(e,"focusin")});const g=e=>{o.value&&e.key==="Escape"&&(e.stopPropagation(),o.value?.querySelector(`[aria-controls="${u}"]`)?.focus(),d("update:modelValue",!1))},L=()=>{const e=o?.value?.querySelector(v)?.getBoundingClientRect();if(!e)return;const s=(o?.value?.closest(".ws-dialog__content")??o?.value?.closest(".ws-layout-default__main")??document.body).getBoundingClientRect();b.value=s.left>e.left,_.value=s.right<e.right},O=()=>{window.requestAnimationFrame(()=>{V(),U(()=>{L()})})},V=()=>{b.value=!1,_.value=!1},D=()=>{d("update:modelValue",!n.modelValue)};let p=0,c,f;return R(()=>{h.value=!0,C.value=o.value?.closest(".ws-dialog")??"body",p=0,c=new ResizeObserver(()=>{const e=o?.value?.querySelector(v)?.getBoundingClientRect().width;e!==p&&(L(),p=e)}),f=new MutationObserver(()=>{const e=o?.value?.querySelector(v);e&&(c?.observe(e),f?.disconnect())})}),y(()=>n.modelValue,e=>{if(e){if((n.allowOutsideFocus||a.value)&&document.body.addEventListener("keydown",g),a.value){A(),window.addEventListener("scroll",i,{capture:!0,passive:!0}),window.addEventListener("resize",i);return}window.addEventListener("resize",O),V();const t=o?.value?.querySelector(v);t?c?.observe(t):o.value&&f?.observe(o.value,{childList:!0})}else{if(document.body.removeEventListener("keydown",g),a.value){window.removeEventListener("scroll",i,{capture:!0}),window.removeEventListener("resize",i);return}window.removeEventListener("resize",O),f?.disconnect(),c?.disconnect(),p=0}}),N(()=>{document.body.removeEventListener("keydown",g),document.body.removeEventListener("mousedown",w),document.body.removeEventListener("focusin",w),window.removeEventListener("resize",O),window.removeEventListener("resize",i),window.removeEventListener("scroll",i,{capture:!0}),f?.disconnect(),c?.disconnect()}),T({checkOverflow:L}),(e,t)=>(x(),$(P(m.tag),{ref_key:"rootRef",ref:o,class:"ws-menu",onKeydown:t[0]||(t[0]=H(s=>m.modelValue?g(s):void 0,["esc"]))},{default:W(()=>[z(e.$slots,"trigger",{attrs:{...l(q),class:"ws-menu__trigger"},toggle:D}),(x(),$(j,{to:l(C),disabled:!l(a)},[z(e.$slots,"content",{attrs:{class:["ws-menu__content",{"ws-menu__content--teleported":l(a),"ws-menu__content--overflowing-left":l(b),"ws-menu__content--overflowing-right":l(_)}],style:l(a)?l(B):void 0,hidden:!m.modelValue,id:u}})],8,["to","disabled"]))]),_:3},544))}});export{Q as _};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.