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

2 lines
4.4 KiB
JavaScript
Raw Normal View History

2023-01-29 22:30:24 +00:00
import g,{Fragment as U,createContext as I,useContext as C,useEffect as w,useMemo as E,useReducer as j,useRef as R}from"react";import{match as L}from'../../utils/match.js';import{forwardRefWithAs as O,render as k,Features as F}from'../../utils/render.js';import{optionalRef as N,useSyncRefs as M}from'../../hooks/use-sync-refs.js';import{useId as _}from'../../hooks/use-id.js';import{Keys as m}from'../keyboard.js';import{isDisabledReactIssue7711 as G}from'../../utils/bugs.js';import{OpenClosedProvider as W,State as x,useOpenClosed as $}from'../../internal/open-closed.js';import{useResolveButtonType as q}from'../../hooks/use-resolve-button-type.js';import{getOwnerDocument as z}from'../../utils/owner.js';import{useEvent as b}from'../../hooks/use-event.js';var J=(l=>(l[l.Open=0]="Open",l[l.Closed=1]="Closed",l))(J||{}),Q=(t=>(t[t.ToggleDisclosure=0]="ToggleDisclosure",t[t.CloseDisclosure=1]="CloseDisclosure",t[t.SetButtonId=2]="SetButtonId",t[t.SetPanelId=3]="SetPanelId",t[t.LinkPanel=4]="LinkPanel",t[t.UnlinkPanel=5]="UnlinkPanel",t))(Q||{});let V={[0]:e=>({...e,disclosureState:L(e.disclosureState,{[0]:1,[1]:0})}),[1]:e=>e.disclosureState===1?e:{...e,disclosureState:1},[4](e){return e.linkedPanel===!0?e:{...e,linkedPanel:!0}},[5](e){return e.linkedPanel===!1?e:{...e,linkedPanel:!1}},[2](e,n){return e.buttonId===n.buttonId?e:{...e,buttonId:n.buttonId}},[3](e,n){return e.panelId===n.panelId?e:{...e,panelId:n.panelId}}},B=I(null);B.displayName="DisclosureContext";function v(e){let n=C(B);if(n===null){let l=new Error(`<${e} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(l,v),l}return n}let h=I(null);h.displayName="DisclosureAPIContext";function K(e){let n=C(h);if(n===null){let l=new Error(`<${e} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(l,K),l}return n}let H=I(null);H.displayName="DisclosurePanelContext";function X(){return C(H)}function Y(e,n){return L(n.type,V,e,n)}let Z=U,ee=O(function(n,l){let{defaultOpen:y=!1,...u}=n,T=R(null),t=M(l,N(a=>{T.current=a},n.as===void 0||n.as===U)),o=R(null),f=R(null),s=j(Y,{disclosureState:y?0:1,linkedPanel:!1,buttonRef:f,panelRef:o,buttonId:null,panelId:null}),[{disclosureState:i,buttonId:p},D]=s,d=b(a=>{D({type:1});let r=z(T);if(!r||!p)return;let c=(()=>a?a instanceof HTMLElement?a:a.current instanceof HTMLElement?a.current:r.getElementById(p):r.getElementById(p))();c==null||c.focus()}),P=E(()=>({close:d}),[d]),A=E(()=>({open:i===0,close:d}),[i,d]),S={ref:t};return g.createElement(B.Provider,{value:s},g.createElement(h.Provider,{value:P},g.createElement(W,{value:L(i,{[0]:x.Open,[1]:x.Closed})},k({ourProps:S,theirProps:u,slot:A,defaultTag:Z,name:"Disclosure"}))))}),te="button",ne=O(function(n,l){let y=_(),{id:u=`headlessui-disclosure-button-${y}`,...T}=n,[t,o]=v("Disclosure.Button"),f=X(),s=f===null?!1:f===t.panelId,i=R(null),p=M(i,l,s?null:t.buttonRef);w(()=>{if(!s)return o({type:2,buttonId:u}),()=>{o({type:2,buttonId:null})}},[u,o,s]);let D=b(r=>{var c;if(s){if(t.disclosureState===1)return;switch(r.key){case m.Space:case m.Enter:r.preventDefault(),r.stopPropagation(),o({type:0}),(c=t.buttonRef.current)==null||c.focus();break}}else switch(r.key){case m.Space:case m.Enter:r.preventDefault(),r.stopPropagation(),o({type:0});break}}),d=b(r=>{switch(r.key){case m.Space:r.preventDefault();break}}),P=b(r=>{var c;G(r.currentTarget)||n.disabled||(s?(o({type:0}),(c=t.buttonRef.current)==null||c.focus()):o({type:0}))}),A=E(()=>({open:t.disclosureState===0}),[t]),S=q(n,i),a=s?{ref:p,type:S,onKeyDown:D,onClick:P}:{ref:p,id:u,type:S,"aria-expanded":n.disabled?void 0:t.disclosureState===0,"aria-controls":t.linkedPanel?t.panelId:void 0,onKeyDown:D,onKeyUp:d,onClick:P};return k({ourProps:a,theirProps:T,slot:A,defaultTag:te,name:"Disclosure.Button"})}),le="div",re=F.RenderStrategy|F.Static,oe=O(function(n,l){let y=_(),{id:u=`headlessui-disclosure-panel-${y}`,...T}=n,[t,o]=v("Disclosure.Panel"),{close:f}=K("Disclosure.Panel"),s=M(l,t.panelRef,P=>{o({type:P?4:5})});w(()=>(o({type:3,panelId:u