@radix-ui/react-menu 0.1.7-rc.5 → 0.1.7-rc.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,1022 @@
1
- var e,n=require("@radix-ui/react-id").useId,t=require("@radix-ui/react-focus-guards").useFocusGuards,r=require("@radix-ui/react-use-callback-ref").useCallbackRef,o=require("@radix-ui/react-direction").useDirection,u=require("@radix-ui/react-roving-focus"),c=y({},u),a=u.createRovingFocusGroupScope,i=require("@radix-ui/react-portal").Portal,s=require("@radix-ui/react-popper"),l=y({},s),d=s.createPopperScope,p=require("@radix-ui/react-primitive").Primitive,f=require("@radix-ui/react-presence").Presence,m=require("@radix-ui/react-focus-scope").FocusScope,v=require("@radix-ui/react-dismissable-layer").DismissableLayer,g=require("@radix-ui/react-context").createContextScope,h=require("@radix-ui/react-compose-refs"),C=h.useComposedRefs,E=h.composeRefs,M=require("@radix-ui/react-collection").createCollection,w=require("@radix-ui/primitive").composeEventHandlers,b=require("aria-hidden").hideOthers,x=require("react-remove-scroll").RemoveScroll,R=y({},require("react")),_=(e=require("@babel/runtime/helpers/extends"))&&e.__esModule?e.default:e;function y(e,n){return Object.keys(n).forEach((function(t){"default"!==t&&"__esModule"!==t&&Object.defineProperty(e,t,{enumerable:!0,get:function(){return n[t]}})})),e}const k=["Enter"," "],P=["ArrowUp","PageDown","End"],I=["ArrowDown","PageUp","Home",...P],S={ltr:[...k,"ArrowRight"],rtl:[...k,"ArrowLeft"]},D={ltr:["ArrowLeft"],rtl:["ArrowRight"]},[O,T,F]=M("Menu"),[L,K]=g("Menu",[F,d,a]);exports.createMenuScope=K;const q=d(),A=a(),[G,U]=L("Menu"),V=e=>{const{__scopeMenu:n,open:t=!1,children:u,dir:c,onOpenChange:a,modal:i=!0}=e,s=q(n),[d,p]=R.useState(null),f=R.useRef(!1),m=r(a),v=o(c);return R.useEffect((()=>{const e=()=>{f.current=!0,document.addEventListener("pointerdown",n,{capture:!0,once:!0}),document.addEventListener("pointermove",n,{capture:!0,once:!0})},n=()=>f.current=!1;return document.addEventListener("keydown",e,{capture:!0}),()=>{document.removeEventListener("keydown",e,{capture:!0}),document.removeEventListener("pointerdown",n,{capture:!0}),document.removeEventListener("pointermove",n,{capture:!0})}}),[]),/*#__PURE__*/R.createElement(l.Root,s,/*#__PURE__*/R.createElement(G,{scope:n,isSubmenu:!1,isUsingKeyboardRef:f,dir:v,open:t,onOpenChange:m,content:d,onContentChange:p,onRootClose:R.useCallback((()=>m(!1)),[m]),modal:i},u))};exports.Menu=V;const X=e=>{const{__scopeMenu:t,children:o,open:u=!1,onOpenChange:c}=e,a=U("MenuSub",t),i=q(t),[s,d]=R.useState(null),[p,f]=R.useState(null),m=r(c);return R.useEffect((()=>(!1===a.open&&m(!1),()=>m(!1))),[a.open,m]),/*#__PURE__*/R.createElement(l.Root,i,/*#__PURE__*/R.createElement(G,{scope:t,isSubmenu:!0,isUsingKeyboardRef:a.isUsingKeyboardRef,dir:a.dir,open:u,onOpenChange:m,content:p,onContentChange:f,onRootClose:a.onRootClose,contentId:n(),trigger:s,onTriggerChange:d,triggerId:n(),modal:!1},o))};exports.MenuSub=X;const B=/*#__PURE__*/R.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e,o=q(t);/*#__PURE__*/return R.createElement(l.Anchor,_({},o,r,{ref:n}))}));exports.MenuAnchor=B;const[j,H]=L("MenuContent"),Y=/*#__PURE__*/R.forwardRef(((e,n)=>{const{forceMount:t,...r}=e,o=U("MenuContent",e.__scopeMenu);/*#__PURE__*/return R.createElement(O.Provider,{scope:e.__scopeMenu},/*#__PURE__*/R.createElement(f,{present:t||o.open},/*#__PURE__*/R.createElement(O.Slot,{scope:e.__scopeMenu},o.isSubmenu?/*#__PURE__*/R.createElement(J,_({},r,{ref:n})):/*#__PURE__*/R.createElement(Z,_({},r,{ref:n})))))}));exports.MenuContent=Y;const Z=/*#__PURE__*/R.forwardRef(((e,n)=>U("MenuContent",e.__scopeMenu).modal?/*#__PURE__*/R.createElement(z,_({},e,{ref:n})):/*#__PURE__*/R.createElement(W,_({},e,{ref:n})))),z=/*#__PURE__*/R.forwardRef(((e,n)=>{const t=U("MenuContent",e.__scopeMenu),r=R.useRef(null),o=C(n,r);return R.useEffect((()=>{const e=r.current;if(e)return b(e)}),[]),/*#__PURE__*/R.createElement(N,_({},e,{ref:o,trapFocus:t.open,disableOutsidePointerEvents:t.open,disableOutsideScroll:!0,onFocusOutside:w(e.onFocusOutside,(e=>e.preventDefault()),{checkForDefaultPrevented:!1}),onDismiss:()=>t.onOpenChange(!1)}))})),W=/*#__PURE__*/R.forwardRef(((e,n)=>{const t=U("MenuContent",e.__scopeMenu);/*#__PURE__*/return R.createElement(N,_({},e,{ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>t.onOpenChange(!1)}))})),J=/*#__PURE__*/R.forwardRef(((e,n)=>{const t=U("MenuContent",e.__scopeMenu),r=R.useRef(null),o=C(n,r);return t.isSubmenu?/*#__PURE__*/R.createElement(N,_({id:t.contentId,"aria-labelledby":t.triggerId},e,{ref:o,align:"start",side:"rtl"===t.dir?"left":"right",portalled:!0,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{var n;t.isUsingKeyboardRef.current&&(null===(n=r.current)||void 0===n||n.focus()),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:w(e.onFocusOutside,(e=>{e.target!==t.trigger&&t.onOpenChange(!1)})),onEscapeKeyDown:w(e.onEscapeKeyDown,t.onRootClose),onKeyDown:w(e.onKeyDown,(e=>{const n=e.currentTarget.contains(e.target),r=D[t.dir].includes(e.key);var o;n&&r&&(t.onOpenChange(!1),null===(o=t.trigger)||void 0===o||o.focus(),e.preventDefault())}))})):null})),N=/*#__PURE__*/R.forwardRef(((e,n)=>{const{__scopeMenu:r,loop:o=!1,trapFocus:u,onOpenAutoFocus:a,onCloseAutoFocus:s,disableOutsidePointerEvents:d,onEscapeKeyDown:p,onPointerDownOutside:f,onFocusOutside:g,onInteractOutside:h,onDismiss:E,disableOutsideScroll:M,allowPinchZoom:b,portalled:y,...k}=e,S=U("MenuContent",r),D=q(r),O=A(r),F=T(r),[L,K]=R.useState(null),G=R.useRef(null),V=C(n,G,S.onContentChange),X=R.useRef(0),B=R.useRef(""),H=R.useRef(0),Y=R.useRef(null),Z=R.useRef("right"),z=R.useRef(0),W=y?i:R.Fragment,J=M?x:R.Fragment,N=M?{allowPinchZoom:b}:void 0,Q=e=>{var n,t;const r=B.current+e,o=F().filter((e=>!e.disabled)),u=document.activeElement,c=null===(n=o.find((e=>e.ref.current===u)))||void 0===n?void 0:n.textValue,a=function(e,n,t){const r=n.length>1&&Array.from(n).every((e=>e===n[0]))?n[0]:n,o=t?e.indexOf(t):-1;let u=(c=e,a=Math.max(o,0),c.map(((e,n)=>c[(a+n)%c.length])));var c,a;1===r.length&&(u=u.filter((e=>e!==t)));const i=u.find((e=>e.toLowerCase().startsWith(r.toLowerCase())));return i!==t?i:void 0}(o.map((e=>e.textValue)),r,c),i=null===(t=o.find((e=>e.textValue===a)))||void 0===t?void 0:t.ref.current;!function e(n){B.current=n,window.clearTimeout(X.current),""!==n&&(X.current=window.setTimeout((()=>e("")),1e3))}(r),i&&setTimeout((()=>i.focus()))};R.useEffect((()=>()=>window.clearTimeout(X.current)),[]),t();const $=R.useCallback((e=>{var n,t;return Z.current===(null===(n=Y.current)||void 0===n?void 0:n.side)&&function(e,n){if(!n)return!1;return function(e,n){const{x:t,y:r}=e;let o=!1;for(let e=0,u=n.length-1;e<n.length;u=e++){const c=n[e].x,a=n[e].y,i=n[u].x,s=n[u].y;a>r!=s>r&&t<(i-c)*(r-a)/(s-a)+c&&(o=!o)}return o}({x:e.clientX,y:e.clientY},n)}(e,null===(t=Y.current)||void 0===t?void 0:t.area)}),[]);/*#__PURE__*/return R.createElement(W,null,/*#__PURE__*/R.createElement(J,N,/*#__PURE__*/R.createElement(j,{scope:r,searchRef:B,onItemEnter:R.useCallback((e=>{$(e)&&e.preventDefault()}),[$]),onItemLeave:R.useCallback((e=>{var n;$(e)||(null===(n=G.current)||void 0===n||n.focus(),K(null))}),[$]),onTriggerLeave:R.useCallback((e=>{$(e)&&e.preventDefault()}),[$]),pointerGraceTimerRef:H,onPointerGraceIntentChange:R.useCallback((e=>{Y.current=e}),[])},/*#__PURE__*/R.createElement(m,{asChild:!0,trapped:u,onMountAutoFocus:w(a,(e=>{var n;e.preventDefault(),null===(n=G.current)||void 0===n||n.focus()})),onUnmountAutoFocus:s},/*#__PURE__*/R.createElement(v,{asChild:!0,disableOutsidePointerEvents:d,onEscapeKeyDown:p,onPointerDownOutside:f,onFocusOutside:g,onInteractOutside:h,onDismiss:E},/*#__PURE__*/R.createElement(c.Root,_({asChild:!0},O,{dir:S.dir,orientation:"vertical",loop:o,currentTabStopId:L,onCurrentTabStopIdChange:K,onEntryFocus:e=>{S.isUsingKeyboardRef.current||e.preventDefault()}}),/*#__PURE__*/R.createElement(l.Content,_({role:"menu","aria-orientation":"vertical","data-state":fe(S.open),dir:S.dir},D,k,{ref:V,style:{outline:"none",...k.style},onKeyDown:w(k.onKeyDown,(e=>{const n=e.target,t=e.currentTarget.contains(n),r=e.ctrlKey||e.altKey||e.metaKey,o=1===e.key.length;t&&("Tab"===e.key&&e.preventDefault(),!r&&o&&Q(e.key));const u=G.current;if(e.target!==u)return;if(!I.includes(e.key))return;e.preventDefault();const c=F().filter((e=>!e.disabled)).map((e=>e.ref.current));P.includes(e.key)&&c.reverse(),function(e){const n=document.activeElement;for(const t of e){if(t===n)return;if(t.focus(),document.activeElement!==n)return}}(c)})),onBlur:w(e.onBlur,(e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(X.current),B.current="")})),onPointerMove:w(e.onPointerMove,ve((e=>{const n=e.target,t=z.current!==e.clientX;if(e.currentTarget.contains(n)&&t){const n=e.clientX>z.current?"right":"left";Z.current=n,z.current=e.clientX}})))}))))))))})),Q=/*#__PURE__*/R.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e;/*#__PURE__*/return R.createElement(p.div,_({role:"group"},r,{ref:n}))}));exports.MenuGroup=Q;const $=/*#__PURE__*/R.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e;/*#__PURE__*/return R.createElement(p.div,_({},r,{ref:n}))}));exports.MenuLabel=$;const ee=/*#__PURE__*/R.forwardRef(((e,n)=>{const{disabled:t=!1,onSelect:r,...o}=e,u=R.useRef(null),c=U("MenuItem",e.__scopeMenu),a=H("MenuItem",e.__scopeMenu),i=C(n,u),s=R.useRef(!1);/*#__PURE__*/return R.createElement(te,_({},o,{ref:i,disabled:t,onClick:w(e.onClick,(()=>{const e=u.current;if(!t&&e){const n=new Event("menu.itemSelect",{bubbles:!0,cancelable:!0});e.addEventListener("menu.itemSelect",(e=>null==r?void 0:r(e)),{once:!0}),e.dispatchEvent(n),n.defaultPrevented?s.current=!1:c.onRootClose()}})),onPointerDown:n=>{var t;null===(t=e.onPointerDown)||void 0===t||t.call(e,n),s.current=!0},onPointerUp:w(e.onPointerUp,(e=>{var n;s.current||null===(n=e.currentTarget)||void 0===n||n.click()})),onKeyDown:w(e.onKeyDown,(e=>{const n=""!==a.searchRef.current;t||n&&" "===e.key||k.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())}))}))}));exports.MenuItem=ee;const ne=/*#__PURE__*/R.forwardRef(((e,n)=>{const t=U("MenuSubTrigger",e.__scopeMenu),r=H("MenuSubTrigger",e.__scopeMenu),o=R.useRef(null),{pointerGraceTimerRef:u,onPointerGraceIntentChange:c}=r,a={__scopeMenu:e.__scopeMenu},i=R.useCallback((()=>{o.current&&window.clearTimeout(o.current),o.current=null}),[]);return R.useEffect((()=>i),[i]),R.useEffect((()=>{const e=u.current;return()=>{window.clearTimeout(e),c(null)}}),[u,c]),t.isSubmenu?/*#__PURE__*/R.createElement(B,_({asChild:!0},a),/*#__PURE__*/R.createElement(te,_({id:t.triggerId,"aria-haspopup":"menu","aria-expanded":t.open,"aria-controls":t.contentId,"data-state":fe(t.open)},e,{ref:E(n,t.onTriggerChange),onClick:n=>{var r;null===(r=e.onClick)||void 0===r||r.call(e,n),e.disabled||n.defaultPrevented||(n.currentTarget.focus(),t.open||t.onOpenChange(!0))},onPointerMove:w(e.onPointerMove,ve((n=>{r.onItemEnter(n),n.defaultPrevented||e.disabled||t.open||o.current||(r.onPointerGraceIntentChange(null),o.current=window.setTimeout((()=>{t.onOpenChange(!0),i()}),100))}))),onPointerLeave:w(e.onPointerLeave,ve((e=>{var n;i();const o=null===(n=t.content)||void 0===n?void 0:n.getBoundingClientRect();if(o){var c;const n=null===(c=t.content)||void 0===c?void 0:c.dataset.side,a="right"===n,i=a?-5:5,s=o[a?"left":"right"],l=o[a?"right":"left"];r.onPointerGraceIntentChange({area:[{x:e.clientX+i,y:e.clientY},{x:s,y:o.top},{x:l,y:o.top},{x:l,y:o.bottom},{x:s,y:o.bottom}],side:n}),window.clearTimeout(u.current),u.current=window.setTimeout((()=>r.onPointerGraceIntentChange(null)),300)}else{if(r.onTriggerLeave(e),e.defaultPrevented)return;r.onPointerGraceIntentChange(null)}}))),onKeyDown:w(e.onKeyDown,(n=>{const o=""!==r.searchRef.current;var u;e.disabled||o&&" "===n.key||S[t.dir].includes(n.key)&&(t.onOpenChange(!0),null===(u=t.content)||void 0===u||u.focus(),n.preventDefault())}))}))):null}));exports.MenuSubTrigger=ne;const te=/*#__PURE__*/R.forwardRef(((e,n)=>{const{__scopeMenu:t,disabled:r=!1,textValue:o,...u}=e,a=H("MenuItem",t),i=A(t),s=R.useRef(null),l=C(n,s),[d,f]=R.useState("");return R.useEffect((()=>{const e=s.current;var n;e&&f((null!==(n=e.textContent)&&void 0!==n?n:"").trim())}),[u.children]),/*#__PURE__*/R.createElement(O.ItemSlot,{scope:t,disabled:r,textValue:null!=o?o:d},/*#__PURE__*/R.createElement(c.Item,_({asChild:!0},i,{focusable:!r}),/*#__PURE__*/R.createElement(p.div,_({role:"menuitem","aria-disabled":r||void 0,"data-disabled":r?"":void 0},u,{ref:l,onPointerMove:w(e.onPointerMove,ve((e=>{if(r)a.onItemLeave(e);else if(a.onItemEnter(e),!e.defaultPrevented){e.currentTarget.focus()}}))),onPointerLeave:w(e.onPointerLeave,ve((e=>a.onItemLeave(e))))}))))})),re=/*#__PURE__*/R.forwardRef(((e,n)=>{const{checked:t=!1,onCheckedChange:r,...o}=e;/*#__PURE__*/return R.createElement(ie,{scope:e.__scopeMenu,checked:t},/*#__PURE__*/R.createElement(ee,_({role:"menuitemcheckbox","aria-checked":t},o,{ref:n,"data-state":me(t),onSelect:w(o.onSelect,(()=>null==r?void 0:r(!t)),{checkForDefaultPrevented:!1})})))}));exports.MenuCheckboxItem=re;const[oe,ue]=L("MenuRadioGroup",{value:void 0,onValueChange:()=>{}}),ce=/*#__PURE__*/R.forwardRef(((e,n)=>{const{value:t,onValueChange:o,...u}=e,c=r(o);/*#__PURE__*/return R.createElement(oe,{scope:e.__scopeMenu,value:t,onValueChange:c},/*#__PURE__*/R.createElement(Q,_({},u,{ref:n})))}));exports.MenuRadioGroup=ce;const ae=/*#__PURE__*/R.forwardRef(((e,n)=>{const{value:t,...r}=e,o=ue("MenuRadioItem",e.__scopeMenu),u=t===o.value;/*#__PURE__*/return R.createElement(ie,{scope:e.__scopeMenu,checked:u},/*#__PURE__*/R.createElement(ee,_({role:"menuitemradio","aria-checked":u},r,{ref:n,"data-state":me(u),onSelect:w(r.onSelect,(()=>{var e;return null===(e=o.onValueChange)||void 0===e?void 0:e.call(o,t)}),{checkForDefaultPrevented:!1})})))}));exports.MenuRadioItem=ae;const[ie,se]=L("MenuItemIndicator",{checked:!1}),le=/*#__PURE__*/R.forwardRef(((e,n)=>{const{__scopeMenu:t,forceMount:r,...o}=e,u=se("MenuItemIndicator",t);/*#__PURE__*/return R.createElement(f,{present:r||u.checked},/*#__PURE__*/R.createElement(p.span,_({},o,{ref:n,"data-state":me(u.checked)})))}));exports.MenuItemIndicator=le;const de=/*#__PURE__*/R.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e;/*#__PURE__*/return R.createElement(p.div,_({role:"separator","aria-orientation":"horizontal"},r,{ref:n}))}));exports.MenuSeparator=de;const pe=/*#__PURE__*/R.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e,o=q(t);/*#__PURE__*/return R.createElement(l.Arrow,_({},o,r,{ref:n}))}));function fe(e){return e?"open":"closed"}function me(e){return e?"checked":"unchecked"}function ve(e){return n=>"mouse"===n.pointerType?e(n):void 0}exports.MenuArrow=pe;const ge=V;exports.Root=ge;const he=X;exports.Sub=he;const Ce=B;exports.Anchor=Ce;const Ee=ne;exports.SubTrigger=Ee;const Me=Y;exports.Content=Me;const we=Q;exports.Group=we;const be=$;exports.Label=be;const xe=ee;exports.Item=xe;const Re=re;exports.CheckboxItem=Re;const _e=ce;exports.RadioGroup=_e;const ye=ae;exports.RadioItem=ye;const ke=le;exports.ItemIndicator=ke;const Pe=de;exports.Separator=Pe;const Ie=pe;exports.Arrow=Ie;
1
+ var $cnSS2$babelruntimehelpersextends = require("@babel/runtime/helpers/extends");
2
+ var $cnSS2$react = require("react");
3
+ var $cnSS2$radixuiprimitive = require("@radix-ui/primitive");
4
+ var $cnSS2$radixuireactcollection = require("@radix-ui/react-collection");
5
+ var $cnSS2$radixuireactcomposerefs = require("@radix-ui/react-compose-refs");
6
+ var $cnSS2$radixuireactcontext = require("@radix-ui/react-context");
7
+ var $cnSS2$radixuireactdirection = require("@radix-ui/react-direction");
8
+ var $cnSS2$radixuireactdismissablelayer = require("@radix-ui/react-dismissable-layer");
9
+ var $cnSS2$radixuireactfocusguards = require("@radix-ui/react-focus-guards");
10
+ var $cnSS2$radixuireactfocusscope = require("@radix-ui/react-focus-scope");
11
+ var $cnSS2$radixuireactid = require("@radix-ui/react-id");
12
+ var $cnSS2$radixuireactpopper = require("@radix-ui/react-popper");
13
+ var $cnSS2$radixuireactportal = require("@radix-ui/react-portal");
14
+ var $cnSS2$radixuireactpresence = require("@radix-ui/react-presence");
15
+ var $cnSS2$radixuireactprimitive = require("@radix-ui/react-primitive");
16
+ var $cnSS2$radixuireactrovingfocus = require("@radix-ui/react-roving-focus");
17
+ var $cnSS2$radixuireactslot = require("@radix-ui/react-slot");
18
+ var $cnSS2$radixuireactusecallbackref = require("@radix-ui/react-use-callback-ref");
19
+ var $cnSS2$ariahidden = require("aria-hidden");
20
+ var $cnSS2$reactremovescroll = require("react-remove-scroll");
21
+
22
+ function $parcel$export(e, n, v, s) {
23
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
24
+ }
25
+ function $parcel$interopDefault(a) {
26
+ return a && a.__esModule ? a.default : a;
27
+ }
28
+
29
+ $parcel$export(module.exports, "createMenuScope", () => $213e4d2df823067d$export$4027731b685e72eb);
30
+ $parcel$export(module.exports, "Menu", () => $213e4d2df823067d$export$d9b273488cd8ce6f);
31
+ $parcel$export(module.exports, "MenuAnchor", () => $213e4d2df823067d$export$9fa5ebd18bee4d43);
32
+ $parcel$export(module.exports, "MenuPortal", () => $213e4d2df823067d$export$793392f970497feb);
33
+ $parcel$export(module.exports, "MenuContent", () => $213e4d2df823067d$export$479f0f2f71193efe);
34
+ $parcel$export(module.exports, "MenuGroup", () => $213e4d2df823067d$export$22a631d1f72787bb);
35
+ $parcel$export(module.exports, "MenuLabel", () => $213e4d2df823067d$export$dd37bec0e8a99143);
36
+ $parcel$export(module.exports, "MenuItem", () => $213e4d2df823067d$export$2ce376c2cc3355c8);
37
+ $parcel$export(module.exports, "MenuCheckboxItem", () => $213e4d2df823067d$export$f6f243521332502d);
38
+ $parcel$export(module.exports, "MenuRadioGroup", () => $213e4d2df823067d$export$ea2200c9eee416b3);
39
+ $parcel$export(module.exports, "MenuRadioItem", () => $213e4d2df823067d$export$69bd225e9817f6d0);
40
+ $parcel$export(module.exports, "MenuItemIndicator", () => $213e4d2df823067d$export$a2593e23056970a3);
41
+ $parcel$export(module.exports, "MenuSeparator", () => $213e4d2df823067d$export$1cec7dcdd713e220);
42
+ $parcel$export(module.exports, "MenuArrow", () => $213e4d2df823067d$export$bcdda4773debf5fa);
43
+ $parcel$export(module.exports, "MenuSub", () => $213e4d2df823067d$export$71bdb9d1e2909932);
44
+ $parcel$export(module.exports, "MenuSubTrigger", () => $213e4d2df823067d$export$5fbbb3ba7297405f);
45
+ $parcel$export(module.exports, "MenuSubContent", () => $213e4d2df823067d$export$e7142ab31822bde6);
46
+ $parcel$export(module.exports, "Root", () => $213e4d2df823067d$export$be92b6f5f03c0fe9);
47
+ $parcel$export(module.exports, "Anchor", () => $213e4d2df823067d$export$b688253958b8dfe7);
48
+ $parcel$export(module.exports, "Portal", () => $213e4d2df823067d$export$602eac185826482c);
49
+ $parcel$export(module.exports, "Content", () => $213e4d2df823067d$export$7c6e2c02157bb7d2);
50
+ $parcel$export(module.exports, "Group", () => $213e4d2df823067d$export$eb2fcfdbd7ba97d4);
51
+ $parcel$export(module.exports, "Label", () => $213e4d2df823067d$export$b04be29aa201d4f5);
52
+ $parcel$export(module.exports, "Item", () => $213e4d2df823067d$export$6d08773d2e66f8f2);
53
+ $parcel$export(module.exports, "CheckboxItem", () => $213e4d2df823067d$export$16ce288f89fa631c);
54
+ $parcel$export(module.exports, "RadioGroup", () => $213e4d2df823067d$export$a98f0dcb43a68a25);
55
+ $parcel$export(module.exports, "RadioItem", () => $213e4d2df823067d$export$371ab307eab489c0);
56
+ $parcel$export(module.exports, "ItemIndicator", () => $213e4d2df823067d$export$c3468e2714d175fa);
57
+ $parcel$export(module.exports, "Separator", () => $213e4d2df823067d$export$1ff3c3f08ae963c0);
58
+ $parcel$export(module.exports, "Arrow", () => $213e4d2df823067d$export$21b07c8f274aebd5);
59
+ $parcel$export(module.exports, "Sub", () => $213e4d2df823067d$export$d7a01e11500dfb6f);
60
+ $parcel$export(module.exports, "SubTrigger", () => $213e4d2df823067d$export$2ea8a7a591ac5eac);
61
+ $parcel$export(module.exports, "SubContent", () => $213e4d2df823067d$export$6d4de93b380beddf);
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+ const $213e4d2df823067d$var$SELECTION_KEYS = [
85
+ 'Enter',
86
+ ' '
87
+ ];
88
+ const $213e4d2df823067d$var$FIRST_KEYS = [
89
+ 'ArrowDown',
90
+ 'PageUp',
91
+ 'Home'
92
+ ];
93
+ const $213e4d2df823067d$var$LAST_KEYS = [
94
+ 'ArrowUp',
95
+ 'PageDown',
96
+ 'End'
97
+ ];
98
+ const $213e4d2df823067d$var$FIRST_LAST_KEYS = [
99
+ ...$213e4d2df823067d$var$FIRST_KEYS,
100
+ ...$213e4d2df823067d$var$LAST_KEYS
101
+ ];
102
+ const $213e4d2df823067d$var$SUB_OPEN_KEYS = {
103
+ ltr: [
104
+ ...$213e4d2df823067d$var$SELECTION_KEYS,
105
+ 'ArrowRight'
106
+ ],
107
+ rtl: [
108
+ ...$213e4d2df823067d$var$SELECTION_KEYS,
109
+ 'ArrowLeft'
110
+ ]
111
+ };
112
+ const $213e4d2df823067d$var$SUB_CLOSE_KEYS = {
113
+ ltr: [
114
+ 'ArrowLeft'
115
+ ],
116
+ rtl: [
117
+ 'ArrowRight'
118
+ ]
119
+ };
120
+ /* -------------------------------------------------------------------------------------------------
121
+ * Menu
122
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$MENU_NAME = 'Menu';
123
+ const [$213e4d2df823067d$var$Collection, $213e4d2df823067d$var$useCollection, $213e4d2df823067d$var$createCollectionScope] = $cnSS2$radixuireactcollection.createCollection($213e4d2df823067d$var$MENU_NAME);
124
+ const [$213e4d2df823067d$var$createMenuContext, $213e4d2df823067d$export$4027731b685e72eb] = $cnSS2$radixuireactcontext.createContextScope($213e4d2df823067d$var$MENU_NAME, [
125
+ $213e4d2df823067d$var$createCollectionScope,
126
+ $cnSS2$radixuireactpopper.createPopperScope,
127
+ $cnSS2$radixuireactrovingfocus.createRovingFocusGroupScope
128
+ ]);
129
+ const $213e4d2df823067d$var$usePopperScope = $cnSS2$radixuireactpopper.createPopperScope();
130
+ const $213e4d2df823067d$var$useRovingFocusGroupScope = $cnSS2$radixuireactrovingfocus.createRovingFocusGroupScope();
131
+ const [$213e4d2df823067d$var$MenuProvider, $213e4d2df823067d$var$useMenuContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME);
132
+ const [$213e4d2df823067d$var$MenuRootProvider, $213e4d2df823067d$var$useMenuRootContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME);
133
+ const $213e4d2df823067d$export$d9b273488cd8ce6f = (props)=>{
134
+ const { __scopeMenu: __scopeMenu , open: open = false , children: children , dir: dir , onOpenChange: onOpenChange , modal: modal = true } = props;
135
+ const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
136
+ const [content, setContent] = $cnSS2$react.useState(null);
137
+ const isUsingKeyboardRef = $cnSS2$react.useRef(false);
138
+ const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange);
139
+ const direction = $cnSS2$radixuireactdirection.useDirection(dir);
140
+ $cnSS2$react.useEffect(()=>{
141
+ // Capture phase ensures we set the boolean before any side effects execute
142
+ // in response to the key or pointer event as they might depend on this value.
143
+ const handleKeyDown = ()=>{
144
+ isUsingKeyboardRef.current = true;
145
+ document.addEventListener('pointerdown', handlePointer, {
146
+ capture: true,
147
+ once: true
148
+ });
149
+ document.addEventListener('pointermove', handlePointer, {
150
+ capture: true,
151
+ once: true
152
+ });
153
+ };
154
+ const handlePointer = ()=>isUsingKeyboardRef.current = false
155
+ ;
156
+ document.addEventListener('keydown', handleKeyDown, {
157
+ capture: true
158
+ });
159
+ return ()=>{
160
+ document.removeEventListener('keydown', handleKeyDown, {
161
+ capture: true
162
+ });
163
+ document.removeEventListener('pointerdown', handlePointer, {
164
+ capture: true
165
+ });
166
+ document.removeEventListener('pointermove', handlePointer, {
167
+ capture: true
168
+ });
169
+ };
170
+ }, []);
171
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, {
172
+ scope: __scopeMenu,
173
+ open: open,
174
+ onOpenChange: handleOpenChange,
175
+ content: content,
176
+ onContentChange: setContent
177
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootProvider, {
178
+ scope: __scopeMenu,
179
+ onClose: $cnSS2$react.useCallback(()=>handleOpenChange(false)
180
+ , [
181
+ handleOpenChange
182
+ ]),
183
+ isUsingKeyboardRef: isUsingKeyboardRef,
184
+ dir: direction,
185
+ modal: modal
186
+ }, children)));
187
+ };
188
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$d9b273488cd8ce6f, {
189
+ displayName: $213e4d2df823067d$var$MENU_NAME
190
+ });
191
+ /* -------------------------------------------------------------------------------------------------
192
+ * MenuAnchor
193
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ANCHOR_NAME = 'MenuAnchor';
194
+ const $213e4d2df823067d$export$9fa5ebd18bee4d43 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
195
+ const { __scopeMenu: __scopeMenu , ...anchorProps } = props;
196
+ const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
197
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Anchor, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, popperScope, anchorProps, {
198
+ ref: forwardedRef
199
+ }));
200
+ });
201
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$9fa5ebd18bee4d43, {
202
+ displayName: $213e4d2df823067d$var$ANCHOR_NAME
203
+ });
204
+ /* -------------------------------------------------------------------------------------------------
205
+ * MenuPortal
206
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$PORTAL_NAME = 'MenuPortal';
207
+ const [$213e4d2df823067d$var$PortalProvider, $213e4d2df823067d$var$usePortalContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$PORTAL_NAME, {
208
+ forceMount: undefined
209
+ });
210
+ const $213e4d2df823067d$export$793392f970497feb = (props)=>{
211
+ const { __scopeMenu: __scopeMenu , forceMount: forceMount , children: children , container: container } = props;
212
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$PORTAL_NAME, __scopeMenu);
213
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$PortalProvider, {
214
+ scope: __scopeMenu,
215
+ forceMount: forceMount
216
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
217
+ present: forceMount || context.open
218
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactportal.Portal, {
219
+ asChild: true,
220
+ container: container
221
+ }, children)));
222
+ };
223
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$793392f970497feb, {
224
+ displayName: $213e4d2df823067d$var$PORTAL_NAME
225
+ });
226
+ /* -------------------------------------------------------------------------------------------------
227
+ * MenuContent
228
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$CONTENT_NAME = 'MenuContent';
229
+ const [$213e4d2df823067d$var$MenuContentProvider, $213e4d2df823067d$var$useMenuContentContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$CONTENT_NAME);
230
+ const $213e4d2df823067d$export$479f0f2f71193efe = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
231
+ const portalContext = $213e4d2df823067d$var$usePortalContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
232
+ const { forceMount: forceMount = portalContext.forceMount , ...contentProps } = props;
233
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
234
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
235
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, {
236
+ scope: props.__scopeMenu
237
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
238
+ present: forceMount || context.open
239
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, {
240
+ scope: props.__scopeMenu
241
+ }, rootContext.modal ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
242
+ ref: forwardedRef
243
+ })) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentNonModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, {
244
+ ref: forwardedRef
245
+ })))));
246
+ });
247
+ /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuRootContentModal = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
248
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
249
+ const ref = $cnSS2$react.useRef(null);
250
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); // Hide everything from ARIA except the `MenuContent`
251
+ $cnSS2$react.useEffect(()=>{
252
+ const content = ref.current;
253
+ if (content) return $cnSS2$ariahidden.hideOthers(content);
254
+ }, []);
255
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, props, {
256
+ ref: composedRefs // we make sure we're not trapping once it's been closed
257
+ ,
258
+ trapFocus: context.open // make sure to only disable pointer events when open
259
+ ,
260
+ disableOutsidePointerEvents: context.open,
261
+ disableOutsideScroll: true // When focus is trapped, a `focusout` event may still happen.
262
+ ,
263
+ onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, (event)=>event.preventDefault()
264
+ , {
265
+ checkForDefaultPrevented: false
266
+ }),
267
+ onDismiss: ()=>context.onOpenChange(false)
268
+ }));
269
+ });
270
+ const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
271
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
272
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, props, {
273
+ ref: forwardedRef,
274
+ trapFocus: false,
275
+ disableOutsidePointerEvents: false,
276
+ disableOutsideScroll: false,
277
+ onDismiss: ()=>context.onOpenChange(false)
278
+ }));
279
+ });
280
+ /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuContentImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
281
+ const { __scopeMenu: __scopeMenu , loop: loop = false , trapFocus: trapFocus , onOpenAutoFocus: onOpenAutoFocus , onCloseAutoFocus: onCloseAutoFocus , disableOutsidePointerEvents: disableOutsidePointerEvents , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , onFocusOutside: onFocusOutside , onInteractOutside: onInteractOutside , onDismiss: onDismiss , disableOutsideScroll: disableOutsideScroll , ...contentProps } = props;
282
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu);
283
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu);
284
+ const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
285
+ const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu);
286
+ const getItems = $213e4d2df823067d$var$useCollection(__scopeMenu);
287
+ const [currentItemId, setCurrentItemId] = $cnSS2$react.useState(null);
288
+ const contentRef = $cnSS2$react.useRef(null);
289
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, contentRef, context.onContentChange);
290
+ const timerRef = $cnSS2$react.useRef(0);
291
+ const searchRef = $cnSS2$react.useRef('');
292
+ const pointerGraceTimerRef = $cnSS2$react.useRef(0);
293
+ const pointerGraceIntentRef = $cnSS2$react.useRef(null);
294
+ const pointerDirRef = $cnSS2$react.useRef('right');
295
+ const lastPointerXRef = $cnSS2$react.useRef(0);
296
+ const ScrollLockWrapper = disableOutsideScroll ? $cnSS2$reactremovescroll.RemoveScroll : $cnSS2$react.Fragment;
297
+ const scrollLockWrapperProps = disableOutsideScroll ? {
298
+ as: $cnSS2$radixuireactslot.Slot,
299
+ allowPinchZoom: true
300
+ } : undefined;
301
+ const handleTypeaheadSearch = (key)=>{
302
+ var _items$find, _items$find2;
303
+ const search = searchRef.current + key;
304
+ const items = getItems().filter((item)=>!item.disabled
305
+ );
306
+ const currentItem = document.activeElement;
307
+ const currentMatch = (_items$find = items.find((item)=>item.ref.current === currentItem
308
+ )) === null || _items$find === void 0 ? void 0 : _items$find.textValue;
309
+ const values = items.map((item)=>item.textValue
310
+ );
311
+ const nextMatch = $213e4d2df823067d$var$getNextMatch(values, search, currentMatch);
312
+ const newItem = (_items$find2 = items.find((item)=>item.textValue === nextMatch
313
+ )) === null || _items$find2 === void 0 ? void 0 : _items$find2.ref.current; // Reset `searchRef` 1 second after it was last updated
314
+ (function updateSearch(value) {
315
+ searchRef.current = value;
316
+ window.clearTimeout(timerRef.current);
317
+ if (value !== '') timerRef.current = window.setTimeout(()=>updateSearch('')
318
+ , 1000);
319
+ })(search);
320
+ if (newItem) /**
321
+ * Imperative focus during keydown is risky so we prevent React's batching updates
322
+ * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332
323
+ */ setTimeout(()=>newItem.focus()
324
+ );
325
+ };
326
+ $cnSS2$react.useEffect(()=>{
327
+ return ()=>window.clearTimeout(timerRef.current)
328
+ ;
329
+ }, []); // Make sure the whole tree has focus guards as our `MenuContent` may be
330
+ // the last element in the DOM (beacuse of the `Portal`)
331
+ $cnSS2$radixuireactfocusguards.useFocusGuards();
332
+ const isPointerMovingToSubmenu = $cnSS2$react.useCallback((event)=>{
333
+ var _pointerGraceIntentRe, _pointerGraceIntentRe2;
334
+ const isMovingTowards = pointerDirRef.current === ((_pointerGraceIntentRe = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe === void 0 ? void 0 : _pointerGraceIntentRe.side);
335
+ return isMovingTowards && $213e4d2df823067d$var$isPointerInGraceArea(event, (_pointerGraceIntentRe2 = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe2 === void 0 ? void 0 : _pointerGraceIntentRe2.area);
336
+ }, []);
337
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentProvider, {
338
+ scope: __scopeMenu,
339
+ searchRef: searchRef,
340
+ onItemEnter: $cnSS2$react.useCallback((event)=>{
341
+ if (isPointerMovingToSubmenu(event)) event.preventDefault();
342
+ }, [
343
+ isPointerMovingToSubmenu
344
+ ]),
345
+ onItemLeave: $cnSS2$react.useCallback((event)=>{
346
+ var _contentRef$current;
347
+ if (isPointerMovingToSubmenu(event)) return;
348
+ (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 || _contentRef$current.focus();
349
+ setCurrentItemId(null);
350
+ }, [
351
+ isPointerMovingToSubmenu
352
+ ]),
353
+ onTriggerLeave: $cnSS2$react.useCallback((event)=>{
354
+ if (isPointerMovingToSubmenu(event)) event.preventDefault();
355
+ }, [
356
+ isPointerMovingToSubmenu
357
+ ]),
358
+ pointerGraceTimerRef: pointerGraceTimerRef,
359
+ onPointerGraceIntentChange: $cnSS2$react.useCallback((intent)=>{
360
+ pointerGraceIntentRef.current = intent;
361
+ }, [])
362
+ }, /*#__PURE__*/ $cnSS2$react.createElement(ScrollLockWrapper, scrollLockWrapperProps, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactfocusscope.FocusScope, {
363
+ asChild: true,
364
+ trapped: trapFocus,
365
+ onMountAutoFocus: $cnSS2$radixuiprimitive.composeEventHandlers(onOpenAutoFocus, (event)=>{
366
+ var _contentRef$current2;
367
+ // when opening, explicitly focus the content area only and leave
368
+ // `onEntryFocus` in control of focusing first item
369
+ event.preventDefault();
370
+ (_contentRef$current2 = contentRef.current) === null || _contentRef$current2 === void 0 || _contentRef$current2.focus();
371
+ }),
372
+ onUnmountAutoFocus: onCloseAutoFocus
373
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactdismissablelayer.DismissableLayer, {
374
+ asChild: true,
375
+ disableOutsidePointerEvents: disableOutsidePointerEvents,
376
+ onEscapeKeyDown: onEscapeKeyDown,
377
+ onPointerDownOutside: onPointerDownOutside,
378
+ onFocusOutside: onFocusOutside,
379
+ onInteractOutside: onInteractOutside,
380
+ onDismiss: onDismiss
381
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Root, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
382
+ asChild: true
383
+ }, rovingFocusGroupScope, {
384
+ dir: rootContext.dir,
385
+ orientation: "vertical",
386
+ loop: loop,
387
+ currentTabStopId: currentItemId,
388
+ onCurrentTabStopIdChange: setCurrentItemId,
389
+ onEntryFocus: (event)=>{
390
+ // only focus first item when using keyboard
391
+ if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();
392
+ }
393
+ }), /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Content, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
394
+ role: "menu",
395
+ "aria-orientation": "vertical",
396
+ "data-state": $213e4d2df823067d$var$getOpenState(context.open),
397
+ dir: rootContext.dir
398
+ }, popperScope, contentProps, {
399
+ ref: composedRefs,
400
+ style: {
401
+ outline: 'none',
402
+ ...contentProps.style
403
+ },
404
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(contentProps.onKeyDown, (event)=>{
405
+ // submenu key events bubble through portals. We only care about keys in this menu.
406
+ const target = event.target;
407
+ const isKeyDownInside = target.closest('[role="menu"]') === event.currentTarget;
408
+ const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
409
+ const isCharacterKey = event.key.length === 1;
410
+ if (isKeyDownInside) {
411
+ // menus should not be navigated using tab key so we prevent it
412
+ if (event.key === 'Tab') event.preventDefault();
413
+ if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);
414
+ } // focus first/last item based on key pressed
415
+ const content = contentRef.current;
416
+ if (event.target !== content) return;
417
+ if (!$213e4d2df823067d$var$FIRST_LAST_KEYS.includes(event.key)) return;
418
+ event.preventDefault();
419
+ const items = getItems().filter((item)=>!item.disabled
420
+ );
421
+ const candidateNodes = items.map((item)=>item.ref.current
422
+ );
423
+ if ($213e4d2df823067d$var$LAST_KEYS.includes(event.key)) candidateNodes.reverse();
424
+ $213e4d2df823067d$var$focusFirst(candidateNodes);
425
+ }),
426
+ onBlur: $cnSS2$radixuiprimitive.composeEventHandlers(props.onBlur, (event)=>{
427
+ // clear search buffer when leaving the menu
428
+ if (!event.currentTarget.contains(event.target)) {
429
+ window.clearTimeout(timerRef.current);
430
+ searchRef.current = '';
431
+ }
432
+ }),
433
+ onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{
434
+ const target = event.target;
435
+ const pointerXHasChanged = lastPointerXRef.current !== event.clientX; // We don't use `event.movementX` for this check because Safari will
436
+ // always return `0` on a pointer event.
437
+ if (event.currentTarget.contains(target) && pointerXHasChanged) {
438
+ const newDir = event.clientX > lastPointerXRef.current ? 'right' : 'left';
439
+ pointerDirRef.current = newDir;
440
+ lastPointerXRef.current = event.clientX;
441
+ }
442
+ }))
443
+ })))))));
444
+ });
445
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$479f0f2f71193efe, {
446
+ displayName: $213e4d2df823067d$var$CONTENT_NAME
447
+ });
448
+ /* -------------------------------------------------------------------------------------------------
449
+ * MenuGroup
450
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$GROUP_NAME = 'MenuGroup';
451
+ const $213e4d2df823067d$export$22a631d1f72787bb = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
452
+ const { __scopeMenu: __scopeMenu , ...groupProps } = props;
453
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
454
+ role: "group"
455
+ }, groupProps, {
456
+ ref: forwardedRef
457
+ }));
458
+ });
459
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$22a631d1f72787bb, {
460
+ displayName: $213e4d2df823067d$var$GROUP_NAME
461
+ });
462
+ /* -------------------------------------------------------------------------------------------------
463
+ * MenuLabel
464
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$LABEL_NAME = 'MenuLabel';
465
+ const $213e4d2df823067d$export$dd37bec0e8a99143 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
466
+ const { __scopeMenu: __scopeMenu , ...labelProps } = props;
467
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, labelProps, {
468
+ ref: forwardedRef
469
+ }));
470
+ });
471
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$dd37bec0e8a99143, {
472
+ displayName: $213e4d2df823067d$var$LABEL_NAME
473
+ });
474
+ /* -------------------------------------------------------------------------------------------------
475
+ * MenuItem
476
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ITEM_NAME = 'MenuItem';
477
+ const $213e4d2df823067d$var$ITEM_SELECT = 'menu.itemSelect';
478
+ const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
479
+ const { disabled: disabled = false , onSelect: onSelect , ...itemProps } = props;
480
+ const ref = $cnSS2$react.useRef(null);
481
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
482
+ const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu);
483
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
484
+ const isPointerDownRef = $cnSS2$react.useRef(false);
485
+ const handleSelect = ()=>{
486
+ const menuItem = ref.current;
487
+ if (!disabled && menuItem) {
488
+ const itemSelectEvent = new CustomEvent($213e4d2df823067d$var$ITEM_SELECT, {
489
+ bubbles: true,
490
+ cancelable: true
491
+ });
492
+ menuItem.addEventListener($213e4d2df823067d$var$ITEM_SELECT, (event)=>onSelect === null || onSelect === void 0 ? void 0 : onSelect(event)
493
+ , {
494
+ once: true
495
+ });
496
+ $cnSS2$radixuireactprimitive.dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);
497
+ if (itemSelectEvent.defaultPrevented) isPointerDownRef.current = false;
498
+ else rootContext.onClose();
499
+ }
500
+ };
501
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, itemProps, {
502
+ ref: composedRefs,
503
+ disabled: disabled,
504
+ onClick: $cnSS2$radixuiprimitive.composeEventHandlers(props.onClick, handleSelect),
505
+ onPointerDown: (event)=>{
506
+ var _props$onPointerDown;
507
+ (_props$onPointerDown = props.onPointerDown) === null || _props$onPointerDown === void 0 || _props$onPointerDown.call(props, event);
508
+ isPointerDownRef.current = true;
509
+ },
510
+ onPointerUp: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerUp, (event)=>{
511
+ var _event$currentTarget;
512
+ // Pointer down can move to a different menu item which should activate it on pointer up.
513
+ // We dispatch a click for selection to allow composition with click based triggers and to
514
+ // prevent Firefox from getting stuck in text selection mode when the menu closes.
515
+ if (!isPointerDownRef.current) (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || _event$currentTarget.click();
516
+ }),
517
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
518
+ const isTypingAhead = contentContext.searchRef.current !== '';
519
+ if (disabled || isTypingAhead && event.key === ' ') return;
520
+ if ($213e4d2df823067d$var$SELECTION_KEYS.includes(event.key)) {
521
+ event.currentTarget.click();
522
+ /**
523
+ * We prevent default browser behaviour for selection keys as they should trigger
524
+ * a selection only:
525
+ * - prevents space from scrolling the page.
526
+ * - if keydown causes focus to move, prevents keydown from firing on the new target.
527
+ */ event.preventDefault();
528
+ }
529
+ })
530
+ }));
531
+ });
532
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$2ce376c2cc3355c8, {
533
+ displayName: $213e4d2df823067d$var$ITEM_NAME
534
+ });
535
+ /* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuItemImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
536
+ const { __scopeMenu: __scopeMenu , disabled: disabled = false , textValue: textValue , ...itemProps } = props;
537
+ const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, __scopeMenu);
538
+ const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu);
539
+ const ref = $cnSS2$react.useRef(null);
540
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
541
+ const [isFocused, setIsFocused] = $cnSS2$react.useState(false); // get the item's `.textContent` as default strategy for typeahead `textValue`
542
+ const [textContent, setTextContent] = $cnSS2$react.useState('');
543
+ $cnSS2$react.useEffect(()=>{
544
+ const menuItem = ref.current;
545
+ if (menuItem) {
546
+ var _menuItem$textContent;
547
+ setTextContent(((_menuItem$textContent = menuItem.textContent) !== null && _menuItem$textContent !== void 0 ? _menuItem$textContent : '').trim());
548
+ }
549
+ }, [
550
+ itemProps.children
551
+ ]);
552
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.ItemSlot, {
553
+ scope: __scopeMenu,
554
+ disabled: disabled,
555
+ textValue: textValue !== null && textValue !== void 0 ? textValue : textContent
556
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Item, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
557
+ asChild: true
558
+ }, rovingFocusGroupScope, {
559
+ focusable: !disabled
560
+ }), /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
561
+ role: "menuitem",
562
+ "data-highlighted": isFocused ? '' : undefined,
563
+ "aria-disabled": disabled || undefined,
564
+ "data-disabled": disabled ? '' : undefined
565
+ }, itemProps, {
566
+ ref: composedRefs,
567
+ onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{
568
+ if (disabled) contentContext.onItemLeave(event);
569
+ else {
570
+ contentContext.onItemEnter(event);
571
+ if (!event.defaultPrevented) {
572
+ const item = event.currentTarget;
573
+ item.focus();
574
+ }
575
+ }
576
+ })),
577
+ onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>contentContext.onItemLeave(event)
578
+ )),
579
+ onFocus: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocus, ()=>setIsFocused(true)
580
+ ),
581
+ onBlur: $cnSS2$radixuiprimitive.composeEventHandlers(props.onBlur, ()=>setIsFocused(false)
582
+ )
583
+ }))));
584
+ });
585
+ /* -------------------------------------------------------------------------------------------------
586
+ * MenuCheckboxItem
587
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$CHECKBOX_ITEM_NAME = 'MenuCheckboxItem';
588
+ const $213e4d2df823067d$export$f6f243521332502d = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
589
+ const { checked: checked = false , onCheckedChange: onCheckedChange , ...checkboxItemProps } = props;
590
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$ItemIndicatorProvider, {
591
+ scope: props.__scopeMenu,
592
+ checked: checked
593
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$2ce376c2cc3355c8, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
594
+ role: "menuitemcheckbox",
595
+ "aria-checked": checked
596
+ }, checkboxItemProps, {
597
+ ref: forwardedRef,
598
+ "data-state": $213e4d2df823067d$var$getCheckedState(checked),
599
+ onSelect: $cnSS2$radixuiprimitive.composeEventHandlers(checkboxItemProps.onSelect, ()=>onCheckedChange === null || onCheckedChange === void 0 ? void 0 : onCheckedChange(!checked)
600
+ , {
601
+ checkForDefaultPrevented: false
602
+ })
603
+ })));
604
+ });
605
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$f6f243521332502d, {
606
+ displayName: $213e4d2df823067d$var$CHECKBOX_ITEM_NAME
607
+ });
608
+ /* -------------------------------------------------------------------------------------------------
609
+ * MenuRadioGroup
610
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$RADIO_GROUP_NAME = 'MenuRadioGroup';
611
+ const [$213e4d2df823067d$var$RadioGroupProvider, $213e4d2df823067d$var$useRadioGroupContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$RADIO_GROUP_NAME, {
612
+ value: undefined,
613
+ onValueChange: ()=>{}
614
+ });
615
+ const $213e4d2df823067d$export$ea2200c9eee416b3 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
616
+ const { value: value , onValueChange: onValueChange , ...groupProps } = props;
617
+ const handleValueChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onValueChange);
618
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$RadioGroupProvider, {
619
+ scope: props.__scopeMenu,
620
+ value: value,
621
+ onValueChange: handleValueChange
622
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$22a631d1f72787bb, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, groupProps, {
623
+ ref: forwardedRef
624
+ })));
625
+ });
626
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$ea2200c9eee416b3, {
627
+ displayName: $213e4d2df823067d$var$RADIO_GROUP_NAME
628
+ });
629
+ /* -------------------------------------------------------------------------------------------------
630
+ * MenuRadioItem
631
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$RADIO_ITEM_NAME = 'MenuRadioItem';
632
+ const $213e4d2df823067d$export$69bd225e9817f6d0 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
633
+ const { value: value , ...radioItemProps } = props;
634
+ const context = $213e4d2df823067d$var$useRadioGroupContext($213e4d2df823067d$var$RADIO_ITEM_NAME, props.__scopeMenu);
635
+ const checked = value === context.value;
636
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$ItemIndicatorProvider, {
637
+ scope: props.__scopeMenu,
638
+ checked: checked
639
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$2ce376c2cc3355c8, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
640
+ role: "menuitemradio",
641
+ "aria-checked": checked
642
+ }, radioItemProps, {
643
+ ref: forwardedRef,
644
+ "data-state": $213e4d2df823067d$var$getCheckedState(checked),
645
+ onSelect: $cnSS2$radixuiprimitive.composeEventHandlers(radioItemProps.onSelect, ()=>{
646
+ var _context$onValueChang;
647
+ return (_context$onValueChang = context.onValueChange) === null || _context$onValueChang === void 0 ? void 0 : _context$onValueChang.call(context, value);
648
+ }, {
649
+ checkForDefaultPrevented: false
650
+ })
651
+ })));
652
+ });
653
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$69bd225e9817f6d0, {
654
+ displayName: $213e4d2df823067d$var$RADIO_ITEM_NAME
655
+ });
656
+ /* -------------------------------------------------------------------------------------------------
657
+ * MenuItemIndicator
658
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ITEM_INDICATOR_NAME = 'MenuItemIndicator';
659
+ const [$213e4d2df823067d$var$ItemIndicatorProvider, $213e4d2df823067d$var$useItemIndicatorContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$ITEM_INDICATOR_NAME, {
660
+ checked: false
661
+ });
662
+ const $213e4d2df823067d$export$a2593e23056970a3 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
663
+ const { __scopeMenu: __scopeMenu , forceMount: forceMount , ...itemIndicatorProps } = props;
664
+ const indicatorContext = $213e4d2df823067d$var$useItemIndicatorContext($213e4d2df823067d$var$ITEM_INDICATOR_NAME, __scopeMenu);
665
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
666
+ present: forceMount || indicatorContext.checked
667
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, itemIndicatorProps, {
668
+ ref: forwardedRef,
669
+ "data-state": $213e4d2df823067d$var$getCheckedState(indicatorContext.checked)
670
+ })));
671
+ });
672
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$a2593e23056970a3, {
673
+ displayName: $213e4d2df823067d$var$ITEM_INDICATOR_NAME
674
+ });
675
+ /* -------------------------------------------------------------------------------------------------
676
+ * MenuSeparator
677
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SEPARATOR_NAME = 'MenuSeparator';
678
+ const $213e4d2df823067d$export$1cec7dcdd713e220 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
679
+ const { __scopeMenu: __scopeMenu , ...separatorProps } = props;
680
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
681
+ role: "separator",
682
+ "aria-orientation": "horizontal"
683
+ }, separatorProps, {
684
+ ref: forwardedRef
685
+ }));
686
+ });
687
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$1cec7dcdd713e220, {
688
+ displayName: $213e4d2df823067d$var$SEPARATOR_NAME
689
+ });
690
+ /* -------------------------------------------------------------------------------------------------
691
+ * MenuArrow
692
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ARROW_NAME = 'MenuArrow';
693
+ const $213e4d2df823067d$export$bcdda4773debf5fa = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
694
+ const { __scopeMenu: __scopeMenu , ...arrowProps } = props;
695
+ const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
696
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Arrow, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, popperScope, arrowProps, {
697
+ ref: forwardedRef
698
+ }));
699
+ });
700
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$bcdda4773debf5fa, {
701
+ displayName: $213e4d2df823067d$var$ARROW_NAME
702
+ });
703
+ /* -------------------------------------------------------------------------------------------------
704
+ * MenuSub
705
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_NAME = 'MenuSub';
706
+ const [$213e4d2df823067d$var$MenuSubProvider, $213e4d2df823067d$var$useMenuSubContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$SUB_NAME);
707
+ const $213e4d2df823067d$export$71bdb9d1e2909932 = (props)=>{
708
+ const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props;
709
+ const parentMenuContext = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_NAME, __scopeMenu);
710
+ const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu);
711
+ const [trigger, setTrigger] = $cnSS2$react.useState(null);
712
+ const [content, setContent] = $cnSS2$react.useState(null);
713
+ const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus.
714
+ $cnSS2$react.useEffect(()=>{
715
+ if (parentMenuContext.open === false) handleOpenChange(false);
716
+ return ()=>handleOpenChange(false)
717
+ ;
718
+ }, [
719
+ parentMenuContext.open,
720
+ handleOpenChange
721
+ ]);
722
+ return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, {
723
+ scope: __scopeMenu,
724
+ open: open,
725
+ onOpenChange: handleOpenChange,
726
+ content: content,
727
+ onContentChange: setContent
728
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuSubProvider, {
729
+ scope: __scopeMenu,
730
+ contentId: $cnSS2$radixuireactid.useId(),
731
+ triggerId: $cnSS2$radixuireactid.useId(),
732
+ trigger: trigger,
733
+ onTriggerChange: setTrigger
734
+ }, children)));
735
+ };
736
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$71bdb9d1e2909932, {
737
+ displayName: $213e4d2df823067d$var$SUB_NAME
738
+ });
739
+ /* -------------------------------------------------------------------------------------------------
740
+ * MenuSubTrigger
741
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_TRIGGER_NAME = 'MenuSubTrigger';
742
+ const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
743
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
744
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
745
+ const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
746
+ const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu);
747
+ const openTimerRef = $cnSS2$react.useRef(null);
748
+ const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext;
749
+ const scope = {
750
+ __scopeMenu: props.__scopeMenu
751
+ };
752
+ const clearOpenTimer = $cnSS2$react.useCallback(()=>{
753
+ if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
754
+ openTimerRef.current = null;
755
+ }, []);
756
+ $cnSS2$react.useEffect(()=>clearOpenTimer
757
+ , [
758
+ clearOpenTimer
759
+ ]);
760
+ $cnSS2$react.useEffect(()=>{
761
+ const pointerGraceTimer = pointerGraceTimerRef.current;
762
+ return ()=>{
763
+ window.clearTimeout(pointerGraceTimer);
764
+ onPointerGraceIntentChange(null);
765
+ };
766
+ }, [
767
+ pointerGraceTimerRef,
768
+ onPointerGraceIntentChange
769
+ ]);
770
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$9fa5ebd18bee4d43, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
771
+ asChild: true
772
+ }, scope), /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
773
+ id: subContext.triggerId,
774
+ "aria-haspopup": "menu",
775
+ "aria-expanded": context.open,
776
+ "aria-controls": subContext.contentId,
777
+ "data-state": $213e4d2df823067d$var$getOpenState(context.open)
778
+ }, props, {
779
+ ref: $cnSS2$radixuireactcomposerefs.composeRefs(forwardedRef, subContext.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from
780
+ ,
781
+ onClick: (event)=>{
782
+ var _props$onClick;
783
+ (_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event);
784
+ if (props.disabled || event.defaultPrevented) return;
785
+ /**
786
+ * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)
787
+ * and we rely heavily on `onFocusOutside` for submenus to close when switching
788
+ * between separate submenus.
789
+ */ event.currentTarget.focus();
790
+ if (!context.open) context.onOpenChange(true);
791
+ },
792
+ onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{
793
+ contentContext.onItemEnter(event);
794
+ if (event.defaultPrevented) return;
795
+ if (!props.disabled && !context.open && !openTimerRef.current) {
796
+ contentContext.onPointerGraceIntentChange(null);
797
+ openTimerRef.current = window.setTimeout(()=>{
798
+ context.onOpenChange(true);
799
+ clearOpenTimer();
800
+ }, 100);
801
+ }
802
+ })),
803
+ onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>{
804
+ var _context$content;
805
+ clearOpenTimer();
806
+ const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect();
807
+ if (contentRect) {
808
+ var _context$content2;
809
+ // TODO: make sure to update this when we change positioning logic
810
+ const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side;
811
+ const rightSide = side === 'right';
812
+ const bleed = rightSide ? -5 : 5;
813
+ const contentNearEdge = contentRect[rightSide ? 'left' : 'right'];
814
+ const contentFarEdge = contentRect[rightSide ? 'right' : 'left'];
815
+ contentContext.onPointerGraceIntentChange({
816
+ area: [
817
+ // consistently within polygon bounds
818
+ {
819
+ x: event.clientX + bleed,
820
+ y: event.clientY
821
+ },
822
+ {
823
+ x: contentNearEdge,
824
+ y: contentRect.top
825
+ },
826
+ {
827
+ x: contentFarEdge,
828
+ y: contentRect.top
829
+ },
830
+ {
831
+ x: contentFarEdge,
832
+ y: contentRect.bottom
833
+ },
834
+ {
835
+ x: contentNearEdge,
836
+ y: contentRect.bottom
837
+ }
838
+ ],
839
+ side: side
840
+ });
841
+ window.clearTimeout(pointerGraceTimerRef.current);
842
+ pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null)
843
+ , 300);
844
+ } else {
845
+ contentContext.onTriggerLeave(event);
846
+ if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened.
847
+ contentContext.onPointerGraceIntentChange(null);
848
+ }
849
+ })),
850
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
851
+ const isTypingAhead = contentContext.searchRef.current !== '';
852
+ if (props.disabled || isTypingAhead && event.key === ' ') return;
853
+ if ($213e4d2df823067d$var$SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {
854
+ var _context$content3;
855
+ context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction
856
+ // so we ensure content is given focus again when switching to keyboard.
857
+ (_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling
858
+ event.preventDefault();
859
+ }
860
+ })
861
+ })));
862
+ });
863
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$5fbbb3ba7297405f, {
864
+ displayName: $213e4d2df823067d$var$SUB_TRIGGER_NAME
865
+ });
866
+ /* -------------------------------------------------------------------------------------------------
867
+ * MenuSubContent
868
+ * -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_CONTENT_NAME = 'MenuSubContent';
869
+ const $213e4d2df823067d$export$e7142ab31822bde6 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{
870
+ const portalContext = $213e4d2df823067d$var$usePortalContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
871
+ const { forceMount: forceMount = portalContext.forceMount , ...subContentProps } = props;
872
+ const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
873
+ const rootContext = $213e4d2df823067d$var$useMenuRootContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu);
874
+ const subContext = $213e4d2df823067d$var$useMenuSubContext($213e4d2df823067d$var$SUB_CONTENT_NAME, props.__scopeMenu);
875
+ const ref = $cnSS2$react.useRef(null);
876
+ const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
877
+ return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, {
878
+ scope: props.__scopeMenu
879
+ }, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, {
880
+ present: forceMount || context.open
881
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, {
882
+ scope: props.__scopeMenu
883
+ }, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({
884
+ id: subContext.contentId,
885
+ "aria-labelledby": subContext.triggerId
886
+ }, subContentProps, {
887
+ ref: composedRefs,
888
+ align: "start",
889
+ side: rootContext.dir === 'rtl' ? 'left' : 'right',
890
+ disableOutsidePointerEvents: false,
891
+ disableOutsideScroll: false,
892
+ trapFocus: false,
893
+ onOpenAutoFocus: (event)=>{
894
+ var _ref$current;
895
+ // when opening a submenu, focus content for keyboard users only
896
+ if (rootContext.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus();
897
+ event.preventDefault();
898
+ } // The menu might close because of focusing another menu item in the parent menu. We
899
+ ,
900
+ onCloseAutoFocus: (event)=>event.preventDefault()
901
+ ,
902
+ onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, (event)=>{
903
+ // We prevent closing when the trigger is focused to avoid triggering a re-open animation
904
+ // on pointer interaction.
905
+ if (event.target !== subContext.trigger) context.onOpenChange(false);
906
+ }),
907
+ onEscapeKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onEscapeKeyDown, rootContext.onClose),
908
+ onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{
909
+ // Submenu key events bubble through portals. We only care about keys in this menu.
910
+ const isKeyDownInside = event.currentTarget.contains(event.target);
911
+ const isCloseKey = $213e4d2df823067d$var$SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);
912
+ if (isKeyDownInside && isCloseKey) {
913
+ var _subContext$trigger;
914
+ context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus`
915
+ (_subContext$trigger = subContext.trigger) === null || _subContext$trigger === void 0 || _subContext$trigger.focus(); // prevent window from scrolling
916
+ event.preventDefault();
917
+ }
918
+ })
919
+ })))));
920
+ });
921
+ /*#__PURE__*/ Object.assign($213e4d2df823067d$export$e7142ab31822bde6, {
922
+ displayName: $213e4d2df823067d$var$SUB_CONTENT_NAME
923
+ });
924
+ /* -----------------------------------------------------------------------------------------------*/ function $213e4d2df823067d$var$getOpenState(open) {
925
+ return open ? 'open' : 'closed';
926
+ }
927
+ function $213e4d2df823067d$var$getCheckedState(checked) {
928
+ return checked ? 'checked' : 'unchecked';
929
+ }
930
+ function $213e4d2df823067d$var$focusFirst(candidates) {
931
+ const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
932
+ for (const candidate of candidates){
933
+ // if focus is already where we want to go, we don't want to keep going through the candidates
934
+ if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
935
+ candidate.focus();
936
+ if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
937
+ }
938
+ }
939
+ /**
940
+ * Wraps an array around itself at a given start index
941
+ * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`
942
+ */ function $213e4d2df823067d$var$wrapArray(array, startIndex) {
943
+ return array.map((_, index)=>array[(startIndex + index) % array.length]
944
+ );
945
+ }
946
+ /**
947
+ * This is the "meat" of the typeahead matching logic. It takes in all the values,
948
+ * the search and the current match, and returns the next match (or `undefined`).
949
+ *
950
+ * We normalize the search because if a user has repeatedly pressed a character,
951
+ * we want the exact same behavior as if we only had that one character
952
+ * (ie. cycle through options starting with that character)
953
+ *
954
+ * We also reorder the values by wrapping the array around the current match.
955
+ * This is so we always look forward from the current match, and picking the first
956
+ * match will always be the correct one.
957
+ *
958
+ * Finally, if the normalized search is exactly one character, we exclude the
959
+ * current match from the values because otherwise it would be the first to match always
960
+ * and focus would never move. This is as opposed to the regular case, where we
961
+ * don't want focus to move if the current match still matches.
962
+ */ function $213e4d2df823067d$var$getNextMatch(values, search, currentMatch) {
963
+ const isRepeated = search.length > 1 && Array.from(search).every((char)=>char === search[0]
964
+ );
965
+ const normalizedSearch = isRepeated ? search[0] : search;
966
+ const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;
967
+ let wrappedValues = $213e4d2df823067d$var$wrapArray(values, Math.max(currentMatchIndex, 0));
968
+ const excludeCurrentMatch = normalizedSearch.length === 1;
969
+ if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v)=>v !== currentMatch
970
+ );
971
+ const nextMatch = wrappedValues.find((value)=>value.toLowerCase().startsWith(normalizedSearch.toLowerCase())
972
+ );
973
+ return nextMatch !== currentMatch ? nextMatch : undefined;
974
+ }
975
+ // Determine if a point is inside of a polygon.
976
+ // Based on https://github.com/substack/point-in-polygon
977
+ function $213e4d2df823067d$var$isPointInPolygon(point, polygon) {
978
+ const { x: x , y: y } = point;
979
+ let inside = false;
980
+ for(let i = 0, j = polygon.length - 1; i < polygon.length; j = i++){
981
+ const xi = polygon[i].x;
982
+ const yi = polygon[i].y;
983
+ const xj = polygon[j].x;
984
+ const yj = polygon[j].y; // prettier-ignore
985
+ const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
986
+ if (intersect) inside = !inside;
987
+ }
988
+ return inside;
989
+ }
990
+ function $213e4d2df823067d$var$isPointerInGraceArea(event, area) {
991
+ if (!area) return false;
992
+ const cursorPos = {
993
+ x: event.clientX,
994
+ y: event.clientY
995
+ };
996
+ return $213e4d2df823067d$var$isPointInPolygon(cursorPos, area);
997
+ }
998
+ function $213e4d2df823067d$var$whenMouse(handler) {
999
+ return (event)=>event.pointerType === 'mouse' ? handler(event) : undefined
1000
+ ;
1001
+ }
1002
+ const $213e4d2df823067d$export$be92b6f5f03c0fe9 = $213e4d2df823067d$export$d9b273488cd8ce6f;
1003
+ const $213e4d2df823067d$export$b688253958b8dfe7 = $213e4d2df823067d$export$9fa5ebd18bee4d43;
1004
+ const $213e4d2df823067d$export$602eac185826482c = $213e4d2df823067d$export$793392f970497feb;
1005
+ const $213e4d2df823067d$export$7c6e2c02157bb7d2 = $213e4d2df823067d$export$479f0f2f71193efe;
1006
+ const $213e4d2df823067d$export$eb2fcfdbd7ba97d4 = $213e4d2df823067d$export$22a631d1f72787bb;
1007
+ const $213e4d2df823067d$export$b04be29aa201d4f5 = $213e4d2df823067d$export$dd37bec0e8a99143;
1008
+ const $213e4d2df823067d$export$6d08773d2e66f8f2 = $213e4d2df823067d$export$2ce376c2cc3355c8;
1009
+ const $213e4d2df823067d$export$16ce288f89fa631c = $213e4d2df823067d$export$f6f243521332502d;
1010
+ const $213e4d2df823067d$export$a98f0dcb43a68a25 = $213e4d2df823067d$export$ea2200c9eee416b3;
1011
+ const $213e4d2df823067d$export$371ab307eab489c0 = $213e4d2df823067d$export$69bd225e9817f6d0;
1012
+ const $213e4d2df823067d$export$c3468e2714d175fa = $213e4d2df823067d$export$a2593e23056970a3;
1013
+ const $213e4d2df823067d$export$1ff3c3f08ae963c0 = $213e4d2df823067d$export$1cec7dcdd713e220;
1014
+ const $213e4d2df823067d$export$21b07c8f274aebd5 = $213e4d2df823067d$export$bcdda4773debf5fa;
1015
+ const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932;
1016
+ const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f;
1017
+ const $213e4d2df823067d$export$6d4de93b380beddf = $213e4d2df823067d$export$e7142ab31822bde6;
1018
+
1019
+
1020
+
1021
+
2
1022
  //# sourceMappingURL=index.js.map