blowfish/node_modules/@headlessui/react/dist/components/tabs/tabs.js

2 lines
6.5 KiB
JavaScript
Raw Normal View History

2023-01-29 22:30:24 +00:00
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 <Tab.Group /> 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 <Tab.Group /> 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 <Tab.Group /> 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"})