@radix-ui/react-menu 0.1.7-rc.3 → 0.1.7-rc.32

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