@radix-ui/react-menu 0.1.7-rc.4 → 0.1.7-rc.42

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