import m,{createContext as le,createRef as ne,useContext as K,useEffect as F,useMemo as v,useReducer as ae,useRef as W,useState as ie}from"react";import{match as I}from'../../utils/match.js';import{forwardRefWithAs as O,render as C,Features as q}from'../../utils/render.js';import{useSyncRefs as S}from'../../hooks/use-sync-refs.js';import{Keys as se}from'../keyboard.js';import{isDisabledReactIssue7711 as de}from'../../utils/bugs.js';import{useId as L}from'../../hooks/use-id.js';import{FocusTrap as M}from'../../components/focus-trap/focus-trap.js';import{useInertOthers as pe}from'../../hooks/use-inert-others.js';import{Portal as B}from'../../components/portal/portal.js';import{ForcePortalRoot as G}from'../../internal/portal-force-root.js';import{Description as ue,useDescriptions as fe}from'../description/description.js';import{useOpenClosed as ce,State as z}from'../../internal/open-closed.js';import{useServerHandoffComplete as ge}from'../../hooks/use-server-handoff-complete.js';import{StackProvider as Te,StackMessage as J}from'../../internal/stack-context.js';import{useOutsideClick as me}from'../../hooks/use-outside-click.js';import{useOwnerDocument as De}from'../../hooks/use-owner.js';import{useEventListener as Pe}from'../../hooks/use-event-listener.js';import{Hidden as ye,Features as Ee}from'../../internal/hidden.js';import{useEvent as A}from'../../hooks/use-event.js';import{disposables as he}from'../../utils/disposables.js';import{isIOS as Re}from'../../utils/platform.js';var be=(r=>(r[r.Open=0]="Open",r[r.Closed=1]="Closed",r))(be||{}),ve=(e=>(e[e.SetTitleId=0]="SetTitleId",e))(ve||{});let Ae={[0](t,e){return t.titleId===e.id?t:{...t,titleId:e.id}}},H=le(null);H.displayName="DialogContext";function k(t){let e=K(H);if(e===null){let r=new Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,k),r}return e}function Oe(t,e,r=()=>[document.body]){F(()=>{var c;if(!e||!t)return;let s=he(),d=window.pageYOffset;function a(n,i,l){let P=n.style.getPropertyValue(i);return Object.assign(n.style,{[i]:l}),s.add(()=>{Object.assign(n.style,{[i]:P})})}let o=t.documentElement,f=((c=t.defaultView)!=null?c:window).innerWidth-o.clientWidth;if(a(o,"overflow","hidden"),f>0){let n=o.clientWidth-o.offsetWidth,i=f-n;a(o,"paddingRight",`${i}px`)}if(Re()){a(t.body,"marginTop",`-${d}px`),window.scrollTo(0,0);let n=null;s.addEventListener(t,"click",i=>{if(i.target instanceof HTMLElement)try{let l=i.target.closest("a");if(!l)return;let{hash:P}=new URL(l.href),u=t.querySelector(P);u&&!r().some(_=>_.contains(u))&&(n=u)}catch{}},!0),s.addEventListener(t,"touchmove",i=>{i.target instanceof HTMLElement&&!r().some(l=>l.contains(i.target))&&i.preventDefault()},{passive:!1}),s.add(()=>{window.scrollTo(0,window.pageYOffset+d),n&&n.isConnected&&(n.scrollIntoView({block:"nearest"}),n=null)})}return s.dispose},[t,e])}function Ce(t,e){return I(e.type,Ae,t,e)}let Se="div",Le=q.RenderStrategy|q.Static,Me=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-${s}`,open:a,onClose:o,initialFocus:p,__demoMode:f=!1,...c}=e,[n,i]=ie(0),l=ce();a===void 0&&l!==null&&(a=I(l,{[z.Open]:!0,[z.Closed]:!1}));let P=W(new Set),u=W(null),_=S(u,r),U=W(null),y=De(u),$=e.hasOwnProperty("open")||l!==null,Y=e.hasOwnProperty("onClose");if(!$&&!Y)throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");if(!$)throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");if(!Y)throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");if(typeof a!="boolean")throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${a}`);if(typeof o!="function")throw new Error(`You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${o}`);let g=a?0:1,[h,Q]=ae(Ce,{titleId:null,descriptionId:null,panelRef:ne()}),R=A(()=>o(!1)),j=A(T=>Q({type:0,id:T})),x=ge()?f?!1:g===0:!1,w=n>1,X=K(H)!==null,Z=w?"parent":"leaf";pe(u,w?x:!1);let N=A(()=>{var b,D;return[...Array.from((b=y==null?void 0:y.querySelectorAll("body > *, [data-headlessui-portal]"))!=null?b:[]).filter(E=>!(!(E instanceof HTMLElement)||E.contains(U.current)||h.panelRef.current&&E.contains(h.panelRef.current))),(D=h.panelRef.current)!=null?D:u.current]});me(()=>N(),R,x&&!w),Pe(y==null?void 0:y.defaultView,"keydown",T=>{T.defaultPrevented||T.key===se.Escape&&g===0&&(w||(T.preventDefault(),T.stopPropagation(),R()))}),Oe(y,g===0&&!X,N),F(()=>{if(g!==0||!u.current)return;let T=new IntersectionObserver(b=>{for(let D of b)D.boundingClientRect.x===0&&D.boundingClientRect.y===0&&D.boundingClientRect.width===0&&D.boundingClientRect.height===0&&R()});return T.observe(u.current),()=>T.disconnect()},[g,u,R]);let[ee,te]=fe(),oe=v(()=>[{dialogState:g,close:R,setTitleId:j},h],[g,h,R,j]),V=v(()=>({open:g===0}),[g]),re={ref:_,id:d,role:"dialog","aria-modal":g===0?!0:void 0,"aria-labelledby":h.titleId,"aria-describedby":ee};return m.createElement(Te,{type:"Dialog",enabled:g===0,element:u,onUpdate:A((T,b,D)=>{b==="Dialog"&&I(T,{[J.Add](){P.current.add(D),i(E=>E+1)},[J.Remove](){P.current.add(D),i(E=>E-1)}})})},m.createElement(G,{force:!0},m.createElement(B,null,m.createElement(H.Provider,{value:oe},m.createElement(B.Group,{target:u},m.createElement(G,{force:!1},m.createElement(te,{slot:V,name:"Dialog.Description"},m.createElement(M,{initialFocus:p,containers:P,features:x?I(Z,{parent:M.features.RestoreFocus,leaf:M.features.All&~M.features.FocusLock}):M.features.None},C({ourProps:re,theirProps:c,slot:V,defaultTag:Se,features:Le,visible:g===0,name:"Dialog"})))))))),m.createElement(ye,{features:Ee.Hidden,ref:U}))}),ke="div",we=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-overlay-${s}`,...a}=e,[{dialogState:o,close:p}]=k("Dialog.Overlay"),f=S(r),c=A(l=>{if(l.target===l.currentTarget){if(de(l.currentTarget))return l.preventDefault();l.preventDefault(),l.stopPropagation(),p()}}),n=v(()=>({open:o===0}),[o]);return C({ourProps:{ref:f,id:d,"aria-hidden":!0,onClick:c},theirProps:a,slot:n,defaultTag:ke,name:"Dialog.Overlay"})}),Fe="div",Ie=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-backdrop-${s}`,...a}=e,[{dialogState:o},p]=k("Dialog.Backdrop"),f=S(r);F(()=>{if(p.panelRef.current===null)throw new Error("A component is being used, but a component is missing.")},[p.panelRef]);let c=v(()=>({open:o===0}),[o]);return m.createElement(G,{force:!0},m.createElement(B,null,C({ourProps:{ref:f,id:d,"aria-hidden":!0},theirProps:a,slot:c,defaultTag:Fe,name:"Dialog.Backdrop"})))}),He="div",_e=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-panel-${s}`,...a}=e,[{dialogState:o},p]=k("Dialog.Panel"),f=S(r,p.panelRef),c=v(()=>({open:o===0}),[o]),n=A(l=>{l.stopPropagation()});return C({ourProps:{ref:f,id:d,onClick:n},theirProps:a,slot:c,defaultTag:He,name:"Dialog.Panel"})}),xe="h2",We=O(function(e,r){let s=L(),{id:d=`headlessui-dialog-title-${s}`,...a}=e,[{dialogState:o,setTitleId:p}]=k("Dialog.Title"),f=S(r);F(()=>(p(d),()=>p(null)),[d,p]);let c=v(()=>({open:o===0}),[o]);return C({ourProps:{ref:f,id:d},theirProps:a,slot:c,defaultTag:xe,name:"Dialog.Title"})}),mt=Object.assign(Me,{Backdrop:Ie,Panel:_e,Overlay:we,Title:We,Description:ue});export{mt as Dialog};