@radix-ui/react-menu 0.1.7-rc.2 → 0.1.7-rc.22

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