Build 582977stable
Module 86099
4,138 characters · in 415cd0b45c8d07e0.jsDependencies
Source Raw
function(e,t,n){n.d(t,{A:()=>y});var i=n(627968),l=n(64700),a=n(503698),s=n.n(a),r=n(617498),o=n(621466),c=n(982147),d=n(922016),u=n(821609),p=n(82495),h=n(324932);let m={north:0,east:90,south:180,west:270},A={tension:280,friction:30},f={tension:320,friction:30,clamp:!0},x=l.createContext(null);function g(){let e=l.useContext(x);if(null==e)throw Error("GuildRoomRadialMenu compound components must be rendered within <GuildRoomRadialMenu>");return e}function C(e){let{children:t,onExited:n,ariaLabel:a,dismissable:s=!1}=e,{isOpen:o,setOpen:d,triggerRef:u,menuId:m,spacing:x,startAngleDeg:C,centerSingleItem:y}=g(),j=l.useCallback(()=>{s&&d(!1)},[s,d]),v=(0,p.A)(null,j,u),E=l.useCallback(e=>{s&&"Escape"===e.key&&d(!1)},[s,d]),N=l.Children.toArray(t).filter(l.isValidElement),I=N.length,T=y&&1===I,b=l.useRef(o),_=l.useRef(n);l.useEffect(()=>{b.current=o},[o]),l.useEffect(()=>{_.current=n},[n]);let R=l.useRef([]),[S,P]=l.useState([]);l.useLayoutEffect(()=>{let e=R.current.slice(0,I);function t(){P(t=>{let n=e.map(e=>({width:e?.offsetWidth??0,height:e?.offsetHeight??0}));return t.length===n.length&&n.every((e,n)=>t[n]?.width===e.width&&t[n]?.height===e.height)?t:n})}t();let n=new ResizeObserver(t);for(let t of e)null!=t&&n.observe(t);return()=>n.disconnect()},[I]);let[L,O]=l.useState(0);l.useLayoutEffect(()=>{let e=u.current;if(null==e)return;function t(){if(null==e)return;let t=Math.max(e.offsetWidth,e.offsetHeight)/2;O(e=>e===t?e:t)}t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[u]);let w=L+x,[M]=(0,c.m)(I,e=>{var t,n;let i,l,a,s,r=S[e]??{width:0,height:0},c=T?{x:0,y:0}:(l=Math.sin(i=(C+360/I*e)*Math.PI/180),{x:(s=w+(a=-Math.cos(i),t=r.width/2,n=r.height/2,Math.min(0===l?1/0:t/Math.abs(l),0===a?1/0:n/Math.abs(a))))*l,y:s*a});return{from:{x:0,y:0,opacityProgress:0,scale:.5},to:o?{x:c.x,y:c.y,opacityProgress:1,scale:1}:{x:0,y:0,opacityProgress:0,scale:.5},config:o?A:f,onRest:t=>{!0!==t.finished||b.current||0!==e||_.current()}}},"respect-motion-settings",[o,I,w,C,T,S]);return l.useEffect(()=>{v.current?.focus({preventScroll:!0})},[v]),l.useEffect(()=>{o||0!==I||_.current()},[o,I]),(0,i.jsx)("div",{ref:v,id:m,role:"menu","aria-label":a,tabIndex:-1,className:h.EQ,onKeyDown:E,children:N.map((e,t)=>{let n=M[t];return(0,i.jsx)(r.animated.div,{ref:e=>{R.current[t]=e},className:h.D5,style:null==n?{}:{opacity:n.opacityProgress.to([0,.5,1],[0,0,1],"clamp"),transform:(0,r.to)([n.x,n.y,n.scale],(e,t,n)=>`translate(-50%, -50%) translate(${e}px, ${t}px) scale(${n})`)},children:e},t)})})}let y=Object.assign(function(e){let{isOpen:t,onOpenChange:n,defaultOpen:a=!1,spacing:s=16,startPosition:r="north",centerSingleItem:o=!1,children:c}=e,d=l.useRef(null),u=l.useId(),[p,h]=l.useState(a),A=void 0!==t,f=A?t:p,g=l.useCallback(e=>{A||h(e),n?.(e)},[A,n]),C=l.useMemo(()=>({isOpen:f,setOpen:g,triggerRef:d,menuId:u,spacing:s,startAngleDeg:m[r],centerSingleItem:o}),[f,g,u,s,r,o]);return(0,i.jsx)(x.Provider,{value:C,children:c})},{Trigger:function(e){let{children:t}=e,{isOpen:n,setOpen:i,triggerRef:l,menuId:a}=g();return t({ref:l,onClick:()=>i(!n),"aria-haspopup":"menu","aria-expanded":n,"aria-controls":n?a:void 0})},Popup:function(e){let{children:t,elevation:n="above","aria-label":a}=e,{isOpen:s,setOpen:r,triggerRef:c}=g(),[u,p]=l.useState(s),m=l.useRef(s);s&&!u&&p(!0),l.useEffect(()=>{let e=m.current;if(m.current=s,e&&!s){let e=c.current;(0,o.vq)(e,HTMLElement)&&e.focus({preventScroll:!0})}},[s,c]);let A=l.useCallback(()=>p(!1),[]);return"below"===n?u?(0,i.jsx)("div",{className:h.Fn,children:(0,i.jsx)(C,{onExited:A,ariaLabel:a,dismissable:!0,children:t})}):null:(0,i.jsx)(d.Y,{targetElementRef:c,shouldShow:u,position:"center",animation:d.Y.Animation.NONE,nudgeAlignIntoViewport:!1,autoInvert:!1,spacing:0,onRequestClose:()=>r(!1),renderPopout:()=>(0,i.jsx)(C,{onExited:A,ariaLabel:a,children:t}),children:()=>null})},Item:function(e){let{className:t,closeOnClick:n=!0,selected:l,onClick:a,...r}=e,{setOpen:o}=g();return(0,i.jsx)("div",{className:s()([h.AS,t]),children:(0,i.jsx)(u.$,{variant:l?"overlay-primary":"overlay-secondary",size:"sm",onClick:e=>{a?.(e),n&&o(!1)},...r})})}})}