import F,{Fragment as le,createContext as K,useContext as $,useMemo as h,useReducer as oe,useRef as H}from"react";import{render as _,Features as ee,forwardRefWithAs as U}from'../../utils/render.js';import{useId as te}from'../../hooks/use-id.js';import{match as re}from'../../utils/match.js';import{Keys as T}from'../../components/keyboard.js';import{focusIn as D,Focus as m,sortByDomNode as ne,FocusResult as O}from'../../utils/focus-management.js';import{useIsoMorphicEffect as z}from'../../hooks/use-iso-morphic-effect.js';import{useSyncRefs as w}from'../../hooks/use-sync-refs.js';import{useResolveButtonType as se}from'../../hooks/use-resolve-button-type.js';import{useLatestValue as V}from'../../hooks/use-latest-value.js';import{FocusSentinel as ie}from'../../internal/focus-sentinel.js';import{useEvent as S}from'../../hooks/use-event.js';import{microTask as ue}from'../../utils/micro-task.js';import{Hidden as ce}from'../../internal/hidden.js';import{getOwnerDocument as de}from'../../utils/owner.js';var pe=(n=>(n[n.SetSelectedIndex=0]="SetSelectedIndex",n[n.RegisterTab=1]="RegisterTab",n[n.UnregisterTab=2]="UnregisterTab",n[n.RegisterPanel=3]="RegisterPanel",n[n.UnregisterPanel=4]="UnregisterPanel",n))(pe||{});let fe={[0](e,t){let r=e.tabs.filter(c=>{var s;return!((s=c.current)!=null&&s.hasAttribute("disabled"))});if(t.index<0)return{...e,selectedIndex:e.tabs.indexOf(r[0])};if(t.index>e.tabs.length)return{...e,selectedIndex:e.tabs.indexOf(r[r.length-1])};let i=e.tabs.slice(0,t.index),n=[...e.tabs.slice(t.index),...i].find(c=>r.includes(c));return n?{...e,selectedIndex:e.tabs.indexOf(n)}:e},[1](e,t){var n;if(e.tabs.includes(t.tab))return e;let r=e.tabs[e.selectedIndex],i=ne([...e.tabs,t.tab],c=>c.current),o=(n=i.indexOf(r))!=null?n:e.selectedIndex;return o===-1&&(o=e.selectedIndex),{...e,tabs:i,selectedIndex:o}},[2](e,t){return{...e,tabs:e.tabs.filter(r=>r!==t.tab)}},[3](e,t){return e.panels.includes(t.panel)?e:{...e,panels:ne([...e.panels,t.panel],r=>r.current)}},[4](e,t){return{...e,panels:e.panels.filter(r=>r!==t.panel)}}},q=K(null);q.displayName="TabsSSRContext";function J(e){let t=$(q);if(t===null){let r=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,J),r}return t}let Q=K(null);Q.displayName="TabsDataContext";function M(e){let t=$(Q);if(t===null){let r=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,M),r}return t}let X=K(null);X.displayName="TabsActionsContext";function Y(e){let t=$(X);if(t===null){let r=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,Y),r}return t}function be(e,t){return re(t.type,fe,e,t)}let Te=le,me=U(function(t,r){let{defaultIndex:i=0,vertical:o=!1,manual:n=!1,onChange:c,selectedIndex:s=null,...L}=t;const g=o?"vertical":"horizontal",A=n?"manual":"auto";let d=s!==null,v=w(r),[p,l]=oe(be,{selectedIndex:s!=null?s:i,tabs:[],panels:[]}),P=h(()=>({selectedIndex:p.selectedIndex}),[p.selectedIndex]),E=V(c||(()=>{})),f=V(p.tabs),b=h(()=>({orientation:g,activation:A,...p}),[g,A,p]),y=S(u=>(l({type:1,tab:u}),()=>l({type:2,tab:u}))),I=S(u=>(l({type:3,panel:u}),()=>l({type:4,panel:u}))),R=S(u=>{k.current!==u&&E.current(u),d||l({type:0,index:u})}),k=V(d?t.selectedIndex:p.selectedIndex),G=h(()=>({registerTab:y,registerPanel:I,change:R}),[]);z(()=>{l({type:0,index:s!=null?s:i})},[s]);let j=H({tabs:[],panels:[]}),W={ref:v};return F.createElement(q.Provider,{value:j},F.createElement(X.Provider,{value:G},F.createElement(Q.Provider,{value:b},b.tabs.length<=0&&F.createElement(ie,{onFocus:()=>{var u,C;for(let a of f.current)if(((u=a.current)==null?void 0:u.tabIndex)===0)return(C=a.current)==null||C.focus(),!0;return!1}}),_({ourProps:W,theirProps:L,slot:P,defaultTag:Te,name:"Tabs"}))))}),Pe="div",xe=U(function(t,r){let{orientation:i,selectedIndex:o}=M("Tab.List"),n=w(r);return _({ourProps:{ref:n,role:"tablist","aria-orientation":i},theirProps:t,slot:{selectedIndex:o},defaultTag:Pe,name:"Tabs.List"})}),ge="button",ye=U(function(t,r){var u,C;let i=te(),{id:o=`headlessui-tabs-tab-${i}`,...n}=t,{orientation:c,activation:s,selectedIndex:L,tabs:g,panels:A}=M("Tab"),d=Y("Tab"),v=M("Tab"),p=J("Tab"),l=H(null),P=w(l,r);z(()=>d.registerTab(l),[d,l]);let E=p.current.tabs.indexOf(o);E===-1&&(E=p.current.tabs.push(o)-1);let f=g.indexOf(l);f===-1&&(f=E);let b=f===L,y=S(a=>{var N;let x=a();if(x===O.Success&&s==="auto"){let B=(N=de(l))==null?void 0:N.activeElement,Z=v.tabs.findIndex(ae=>ae.current===B);Z!==-1&&d.change(Z)}return x}),I=S(a=>{let x=g.map(B=>B.current).filter(Boolean);if(a.key===T.Space||a.key===T.Enter){a.preventDefault(),a.stopPropagation(),d.change(f);return}switch(a.key){case T.Home:case T.PageUp:return a.preventDefault(),a.stopPropagation(),y(()=>D(x,m.First));case T.End:case T.PageDown:return a.preventDefault(),a.stopPropagation(),y(()=>D(x,m.Last))}if(y(()=>re(c,{vertical(){return a.key===T.ArrowUp?D(x,m.Previous|m.WrapAround):a.key===T.ArrowDown?D(x,m.Next|m.WrapAround):O.Error},horizontal(){return a.key===T.ArrowLeft?D(x,m.Previous|m.WrapAround):a.key===T.ArrowRight?D(x,m.Next|m.WrapAround):O.Error}}))===O.Success)return a.preventDefault()}),R=H(!1),k=S(()=>{var a;R.current||(R.current=!0,(a=l.current)==null||a.focus(),d.change(f),ue(()=>{R.current=!1}))}),G=S(a=>{a.preventDefault()}),j=h(()=>({selected:b}),[b]),W={ref:P,onKeyDown:I,onMouseDown:G,onClick:k,id:o,role:"tab",type:se(t,l),"aria-controls":(C=(u=A[f])==null?void 0:u.current)==null?void 0:C.id,"aria-selected":b,tabIndex:b?0:-1};return _({ourProps:W,theirProps:n,slot:j,defaultTag:ge,name:"Tabs.Tab"})}),Re="div",Ae=U(function(t,r){let{selectedIndex:i}=M("Tab.Panels"),o=w(r),n=h(()=>({selectedIndex:i}),[i]);return _({ourProps:{ref:o},theirProps:t,slot:n,defaultTag:Re,name:"Tabs.Panels"})}),Ee="div",Se=ee.RenderStrategy|ee.Static,Le=U(function(t,r){var b,y,I,R;let i=te(),{id:o=`headlessui-tabs-panel-${i}`,...n}=t,{selectedIndex:c,tabs:s,panels:L}=M("Tab.Panel"),g=Y("Tab.Panel"),A=J("Tab.Panel"),d=H(null),v=w(d,r);z(()=>g.registerPanel(d),[g,d]);let p=A.current.panels.indexOf(o);p===-1&&(p=A.current.panels.push(o)-1);let l=L.indexOf(d);l===-1&&(l=p);let P=l===c,E=h(()=>({selected:P}),[P]),f={ref:v,id:o,role:"tabpanel","aria-labelledby":(y=(b=s[l])==null?void 0:b.current)==null?void 0:y.id,tabIndex:P?0:-1};return!P&&((I=n.unmount)!=null?I:!0)&&!((R=n.static)!=null&&R)?F.createElement(ce,{as:"span",...f}):_({ourProps:f,theirProps:n,slot:E,defaultTag:Ee,features:Se,visible:P,name:"Tabs.Panel"})}),Je=Object.assign(ye,{Group:me,List:xe,Panels:Ae,Panel:Le});export{Je as Tab};