mirror of
https://github.com/nunocoracao/blowfish.git
synced 2025-04-22 06:31:52 +02:00
1 line
8.5 KiB
JavaScript
1 line
8.5 KiB
JavaScript
import K,{Fragment as _,createContext as q,createRef as N,useContext as J,useEffect as z,useMemo as P,useReducer as X,useRef as H}from"react";import{match as j}from'../../utils/match.js';import{forwardRefWithAs as E,render as x,Features as Q}from'../../utils/render.js';import{disposables as L}from'../../utils/disposables.js';import{useDisposables as W}from'../../hooks/use-disposables.js';import{useIsoMorphicEffect as D}from'../../hooks/use-iso-morphic-effect.js';import{useSyncRefs as C}from'../../hooks/use-sync-refs.js';import{useId as k}from'../../hooks/use-id.js';import{Keys as m}from'../keyboard.js';import{Focus as I,calculateActiveIndex as Y}from'../../utils/calculate-active-index.js';import{isDisabledReactIssue7711 as Z}from'../../utils/bugs.js';import{isFocusableElement as ee,FocusableMode as te,sortByDomNode as ne,Focus as V,focusFrom as re,restoreFocusIfNecessary as $}from'../../utils/focus-management.js';import{useOutsideClick as oe}from'../../hooks/use-outside-click.js';import{useTreeWalker as ae}from'../../hooks/use-tree-walker.js';import{useOpenClosed as ie,State as w,OpenClosedProvider as ue}from'../../internal/open-closed.js';import{useResolveButtonType as se}from'../../hooks/use-resolve-button-type.js';import{useOwnerDocument as le}from'../../hooks/use-owner.js';import{useEvent as y}from'../../hooks/use-event.js';import{useTrackedPointer as ce}from'../../hooks/use-tracked-pointer.js';var pe=(o=>(o[o.Open=0]="Open",o[o.Closed=1]="Closed",o))(pe||{}),de=(o=>(o[o.Pointer=0]="Pointer",o[o.Other=1]="Other",o))(de||{}),me=(e=>(e[e.OpenMenu=0]="OpenMenu",e[e.CloseMenu=1]="CloseMenu",e[e.GoToItem=2]="GoToItem",e[e.Search=3]="Search",e[e.ClearSearch=4]="ClearSearch",e[e.RegisterItem=5]="RegisterItem",e[e.UnregisterItem=6]="UnregisterItem",e))(me||{});function U(t,i=o=>o){let o=t.activeItemIndex!==null?t.items[t.activeItemIndex]:null,s=ne(i(t.items.slice()),u=>u.dataRef.current.domRef.current),a=o?s.indexOf(o):null;return a===-1&&(a=null),{items:s,activeItemIndex:a}}let fe={[1](t){return t.menuState===1?t:{...t,activeItemIndex:null,menuState:1}},[0](t){return t.menuState===0?t:{...t,menuState:0}},[2]:(t,i)=>{var a;let o=U(t),s=Y(i,{resolveItems:()=>o.items,resolveActiveIndex:()=>o.activeItemIndex,resolveId:u=>u.id,resolveDisabled:u=>u.dataRef.current.disabled});return{...t,...o,searchQuery:"",activeItemIndex:s,activationTrigger:(a=i.trigger)!=null?a:1}},[3]:(t,i)=>{let s=t.searchQuery!==""?0:1,a=t.searchQuery+i.value.toLowerCase(),n=(t.activeItemIndex!==null?t.items.slice(t.activeItemIndex+s).concat(t.items.slice(0,t.activeItemIndex+s)):t.items).find(d=>{var l;return((l=d.dataRef.current.textValue)==null?void 0:l.startsWith(a))&&!d.dataRef.current.disabled}),e=n?t.items.indexOf(n):-1;return e===-1||e===t.activeItemIndex?{...t,searchQuery:a}:{...t,searchQuery:a,activeItemIndex:e,activationTrigger:1}},[4](t){return t.searchQuery===""?t:{...t,searchQuery:"",searchActiveItemIndex:null}},[5]:(t,i)=>{let o=U(t,s=>[...s,{id:i.id,dataRef:i.dataRef}]);return{...t,...o}},[6]:(t,i)=>{let o=U(t,s=>{let a=s.findIndex(u=>u.id===i.id);return a!==-1&&s.splice(a,1),s});return{...t,...o,activationTrigger:1}}},G=q(null);G.displayName="MenuContext";function O(t){let i=J(G);if(i===null){let o=new Error(`<${t} /> is missing a parent <Menu /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,O),o}return i}function Te(t,i){return j(i.type,fe,t,i)}let ye=_,Ie=E(function(i,o){let s=X(Te,{menuState:1,buttonRef:N(),itemsRef:N(),items:[],searchQuery:"",activeItemIndex:null,activationTrigger:1}),[{menuState:a,itemsRef:u,buttonRef:n},e]=s,d=C(o);oe([n,u],(R,A)=>{var g;e({type:1}),ee(A,te.Loose)||(R.preventDefault(),(g=n.current)==null||g.focus())},a===0);let l=y(()=>{e({type:1})}),f=P(()=>({open:a===0,close:l}),[a,l]),M=i,T={ref:d};return K.createElement(G.Provider,{value:s},K.createElement(ue,{value:j(a,{[0]:w.Open,[1]:w.Closed})},x({ourProps:T,theirProps:M,slot:f,defaultTag:ye,name:"Menu"})))}),ge="button",Me=E(function(i,o){var g;let s=k(),{id:a=`headlessui-menu-button-${s}`,...u}=i,[n,e]=O("Menu.Button"),d=C(n.buttonRef,o),l=W(),f=y(c=>{switch(c.key){case m.Space:case m.Enter:case m.ArrowDown:c.preventDefault(),c.stopPropagation(),e({type:0}),l.nextFrame(()=>e({type:2,focus:I.First}));break;case m.ArrowUp:c.preventDefault(),c.stopPropagation(),e({type:0}),l.nextFrame(()=>e({type:2,focus:I.Last}));break}}),M=y(c=>{switch(c.key){case m.Space:c.preventDefault();break}}),T=y(c=>{if(Z(c.currentTarget))return c.preventDefault();i.disabled||(n.menuState===0?(e({type:1}),l.nextFrame(()=>{var b;return(b=n.buttonRef.current)==null?void 0:b.focus({preventScroll:!0})})):(c.preventDefault(),e({type:0})))}),R=P(()=>({open:n.menuState===0}),[n]),A={ref:d,id:a,type:se(i,n.buttonRef),"aria-haspopup":"menu","aria-controls":(g=n.itemsRef.current)==null?void 0:g.id,"aria-expanded":i.disabled?void 0:n.menuState===0,onKeyDown:f,onKeyUp:M,onClick:T};return x({ourProps:A,theirProps:u,slot:R,defaultTag:ge,name:"Menu.Button"})}),Re="div",be=Q.RenderStrategy|Q.Static,Ae=E(function(i,o){var b,S;let s=k(),{id:a=`headlessui-menu-items-${s}`,...u}=i,[n,e]=O("Menu.Items"),d=C(n.itemsRef,o),l=le(n.itemsRef),f=W(),M=ie(),T=(()=>M!==null?M===w.Open:n.menuState===0)();z(()=>{let r=n.itemsRef.current;!r||n.menuState===0&&r!==(l==null?void 0:l.activeElement)&&r.focus({preventScroll:!0})},[n.menuState,n.itemsRef,l]),ae({container:n.itemsRef.current,enabled:n.menuState===0,accept(r){return r.getAttribute("role")==="menuitem"?NodeFilter.FILTER_REJECT:r.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(r){r.setAttribute("role","none")}});let R=y(r=>{var h,F;switch(f.dispose(),r.key){case m.Space:if(n.searchQuery!=="")return r.preventDefault(),r.stopPropagation(),e({type:3,value:r.key});case m.Enter:if(r.preventDefault(),r.stopPropagation(),e({type:1}),n.activeItemIndex!==null){let{dataRef:p}=n.items[n.activeItemIndex];(F=(h=p.current)==null?void 0:h.domRef.current)==null||F.click()}$(n.buttonRef.current);break;case m.ArrowDown:return r.preventDefault(),r.stopPropagation(),e({type:2,focus:I.Next});case m.ArrowUp:return r.preventDefault(),r.stopPropagation(),e({type:2,focus:I.Previous});case m.Home:case m.PageUp:return r.preventDefault(),r.stopPropagation(),e({type:2,focus:I.First});case m.End:case m.PageDown:return r.preventDefault(),r.stopPropagation(),e({type:2,focus:I.Last});case m.Escape:r.preventDefault(),r.stopPropagation(),e({type:1}),L().nextFrame(()=>{var p;return(p=n.buttonRef.current)==null?void 0:p.focus({preventScroll:!0})});break;case m.Tab:r.preventDefault(),r.stopPropagation(),e({type:1}),L().nextFrame(()=>{re(n.buttonRef.current,r.shiftKey?V.Previous:V.Next)});break;default:r.key.length===1&&(e({type:3,value:r.key}),f.setTimeout(()=>e({type:4}),350));break}}),A=y(r=>{switch(r.key){case m.Space:r.preventDefault();break}}),g=P(()=>({open:n.menuState===0}),[n]),c={"aria-activedescendant":n.activeItemIndex===null||(b=n.items[n.activeItemIndex])==null?void 0:b.id,"aria-labelledby":(S=n.buttonRef.current)==null?void 0:S.id,id:a,onKeyDown:R,onKeyUp:A,role:"menu",tabIndex:0,ref:d};return x({ourProps:c,theirProps:u,slot:g,defaultTag:Re,features:be,visible:T,name:"Menu.Items"})}),ve=_,Se=E(function(i,o){let s=k(),{id:a=`headlessui-menu-item-${s}`,disabled:u=!1,...n}=i,[e,d]=O("Menu.Item"),l=e.activeItemIndex!==null?e.items[e.activeItemIndex].id===a:!1,f=H(null),M=C(o,f);D(()=>{if(e.menuState!==0||!l||e.activationTrigger===0)return;let p=L();return p.requestAnimationFrame(()=>{var v,B;(B=(v=f.current)==null?void 0:v.scrollIntoView)==null||B.call(v,{block:"nearest"})}),p.dispose},[f,l,e.menuState,e.activationTrigger,e.activeItemIndex]);let T=H({disabled:u,domRef:f});D(()=>{T.current.disabled=u},[T,u]),D(()=>{var p,v;T.current.textValue=(v=(p=f.current)==null?void 0:p.textContent)==null?void 0:v.toLowerCase()},[T,f]),D(()=>(d({type:5,id:a,dataRef:T}),()=>d({type:6,id:a})),[T,a]);let R=y(()=>{d({type:1})}),A=y(p=>{if(u)return p.preventDefault();d({type:1}),$(e.buttonRef.current)}),g=y(()=>{if(u)return d({type:2,focus:I.Nothing});d({type:2,focus:I.Specific,id:a})}),c=ce(),b=y(p=>c.update(p)),S=y(p=>{!c.wasMoved(p)||u||l||d({type:2,focus:I.Specific,id:a,trigger:0})}),r=y(p=>{!c.wasMoved(p)||u||!l||d({type:2,focus:I.Nothing})}),h=P(()=>({active:l,disabled:u,close:R}),[l,u,R]);return x({ourProps:{id:a,ref:M,role:"menuitem",tabIndex:u===!0?void 0:-1,"aria-disabled":u===!0?!0:void 0,disabled:void 0,onClick:A,onFocus:g,onPointerEnter:b,onMouseEnter:b,onPointerMove:S,onMouseMove:S,onPointerLeave:r,onMouseLeave:r},theirProps:n,slot:h,defaultTag:ve,name:"Menu.Item"})}),Ze=Object.assign(Ie,{Button:Me,Items:Ae,Item:Se});export{Ze as Menu};
|