Files
infocom-systems-design/node_modules/@headlessui/react/dist/components/menu/menu-machine.js
2025-10-03 22:27:28 +03:00

2 lines
5.9 KiB
JavaScript

var y=Object.defineProperty;var M=(e,i,t)=>i in e?y(e,i,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[i]=t;var S=(e,i,t)=>(M(e,typeof i!="symbol"?i+"":i,t),t);import{Machine as b,batch as v}from'../../machine.js';import{ActionTypes as A,stackMachines as T}from'../../machines/stack-machine.js';import{Focus as m,calculateActiveIndex as p}from'../../utils/calculate-active-index.js';import{ElementPositionState as g,computeVisualPosition as E,detectMovement as R}from'../../utils/element-movement.js';import{sortByDomNode as O}from'../../utils/focus-management.js';import{match as F}from'../../utils/match.js';var P=(t=>(t[t.Open=0]="Open",t[t.Closed=1]="Closed",t))(P||{}),D=(t=>(t[t.Pointer=0]="Pointer",t[t.Other=1]="Other",t))(D||{}),C=(o=>(o[o.OpenMenu=0]="OpenMenu",o[o.CloseMenu=1]="CloseMenu",o[o.GoToItem=2]="GoToItem",o[o.Search=3]="Search",o[o.ClearSearch=4]="ClearSearch",o[o.RegisterItems=5]="RegisterItems",o[o.UnregisterItems=6]="UnregisterItems",o[o.SetButtonElement=7]="SetButtonElement",o[o.SetItemsElement=8]="SetItemsElement",o[o.SortItems=9]="SortItems",o[o.MarkButtonAsMoved=10]="MarkButtonAsMoved",o))(C||{});function x(e,i=t=>t){let t=e.activeItemIndex!==null?e.items[e.activeItemIndex]:null,n=O(i(e.items.slice()),s=>s.dataRef.current.domRef.current),r=t?n.indexOf(t):null;return r===-1&&(r=null),{items:n,activeItemIndex:r}}let k={[1](e){if(e.menuState===1)return e;let i=e.buttonElement?g.Tracked(E(e.buttonElement)):e.buttonPositionState;return{...e,activeItemIndex:null,pendingFocus:{focus:m.Nothing},menuState:1,buttonPositionState:i}},[0](e,i){return e.menuState===0?e:{...e,__demoMode:!1,pendingFocus:i.focus,menuState:0,buttonPositionState:g.Idle}},[2]:(e,i)=>{var s,l,a,I,f;if(e.menuState===1)return e;let t={...e,searchQuery:"",activationTrigger:(s=i.trigger)!=null?s:1,__demoMode:!1};if(i.focus===m.Nothing)return{...t,activeItemIndex:null};if(i.focus===m.Specific)return{...t,activeItemIndex:e.items.findIndex(d=>d.id===i.id)};if(i.focus===m.Previous){let d=e.activeItemIndex;if(d!==null){let o=e.items[d].dataRef.current.domRef,c=p(i,{resolveItems:()=>e.items,resolveActiveIndex:()=>e.activeItemIndex,resolveId:u=>u.id,resolveDisabled:u=>u.dataRef.current.disabled});if(c!==null){let u=e.items[c].dataRef.current.domRef;if(((l=o.current)==null?void 0:l.previousElementSibling)===u.current||((a=u.current)==null?void 0:a.previousElementSibling)===null)return{...t,activeItemIndex:c}}}}else if(i.focus===m.Next){let d=e.activeItemIndex;if(d!==null){let o=e.items[d].dataRef.current.domRef,c=p(i,{resolveItems:()=>e.items,resolveActiveIndex:()=>e.activeItemIndex,resolveId:u=>u.id,resolveDisabled:u=>u.dataRef.current.disabled});if(c!==null){let u=e.items[c].dataRef.current.domRef;if(((I=o.current)==null?void 0:I.nextElementSibling)===u.current||((f=u.current)==null?void 0:f.nextElementSibling)===null)return{...t,activeItemIndex:c}}}}let n=x(e),r=p(i,{resolveItems:()=>n.items,resolveActiveIndex:()=>n.activeItemIndex,resolveId:d=>d.id,resolveDisabled:d=>d.dataRef.current.disabled});return{...t,...n,activeItemIndex:r}},[3]:(e,i)=>{let n=e.searchQuery!==""?0:1,r=e.searchQuery+i.value.toLowerCase(),l=(e.activeItemIndex!==null?e.items.slice(e.activeItemIndex+n).concat(e.items.slice(0,e.activeItemIndex+n)):e.items).find(I=>{var f;return((f=I.dataRef.current.textValue)==null?void 0:f.startsWith(r))&&!I.dataRef.current.disabled}),a=l?e.items.indexOf(l):-1;return a===-1||a===e.activeItemIndex?{...e,searchQuery:r}:{...e,searchQuery:r,activeItemIndex:a,activationTrigger:1}},[4](e){return e.searchQuery===""?e:{...e,searchQuery:"",searchActiveItemIndex:null}},[5]:(e,i)=>{let t=e.items.concat(i.items.map(r=>r)),n=e.activeItemIndex;return e.pendingFocus.focus!==m.Nothing&&(n=p(e.pendingFocus,{resolveItems:()=>t,resolveActiveIndex:()=>e.activeItemIndex,resolveId:r=>r.id,resolveDisabled:r=>r.dataRef.current.disabled})),{...e,items:t,activeItemIndex:n,pendingFocus:{focus:m.Nothing},pendingShouldSort:!0}},[6]:(e,i)=>{let t=e.items,n=[],r=new Set(i.items);for(let[s,l]of t.entries())if(r.has(l.id)&&(n.push(s),r.delete(l.id),r.size===0))break;if(n.length>0){t=t.slice();for(let s of n.reverse())t.splice(s,1)}return{...e,items:t,activationTrigger:1}},[7]:(e,i)=>e.buttonElement===i.element?e:{...e,buttonElement:i.element},[8]:(e,i)=>e.itemsElement===i.element?e:{...e,itemsElement:i.element},[9]:e=>e.pendingShouldSort?{...e,...x(e),pendingShouldSort:!1}:e,[10](e){return e.buttonPositionState.kind!=="Tracked"?e:{...e,buttonPositionState:g.Moved}}};class h extends b{constructor(t){super(t);S(this,"actions",{registerItem:v(()=>{let t=[],n=new Set;return[(r,s)=>{n.has(s)||(n.add(s),t.push({id:r,dataRef:s}))},()=>(n.clear(),this.send({type:5,items:t.splice(0)}))]}),unregisterItem:v(()=>{let t=[];return[n=>t.push(n),()=>this.send({type:6,items:t.splice(0)})]})});S(this,"selectors",{activeDescendantId(t){var s;let n=t.activeItemIndex,r=t.items;return n===null||(s=r[n])==null?void 0:s.id},isActive(t,n){var l;let r=t.activeItemIndex,s=t.items;return r!==null?((l=s[r])==null?void 0:l.id)===n:!1},shouldScrollIntoView(t,n){return t.__demoMode||t.menuState!==0||t.activationTrigger===0?!1:this.isActive(t,n)},didButtonMove(t){return t.buttonPositionState.kind==="Moved"}});this.on(5,()=>{this.disposables.requestAnimationFrame(()=>{this.send({type:9})})});{let n=this.state.id,r=T.get(null);this.disposables.add(r.on(A.Push,s=>{!r.selectors.isTop(s,n)&&this.state.menuState===0&&this.send({type:1})})),this.on(0,()=>r.actions.push(n)),this.on(1,()=>r.actions.pop(n))}this.disposables.group(n=>{this.on(1,r=>{r.buttonElement&&(n.dispose(),n.add(R(r.buttonElement,r.buttonPositionState,()=>{this.send({type:10})})))})})}static new({id:t,__demoMode:n=!1}){return new h({id:t,__demoMode:n,menuState:n?0:1,buttonElement:null,itemsElement:null,items:[],searchQuery:"",activeItemIndex:null,activationTrigger:1,pendingShouldSort:!1,pendingFocus:{focus:m.Nothing},buttonPositionState:g.Idle})}reduce(t,n){return F(n.type,k,t,n)}}export{C as ActionTypes,D as ActivationTrigger,h as MenuMachine,P as MenuState};