@radix-ui/react-menu
Advanced tools
Comparing version 0.1.7-rc.5 to 0.1.7-rc.6
@@ -1,2 +0,990 @@ | ||
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; | ||
var $cnSS2$babelruntimehelpersextends = require("@babel/runtime/helpers/extends"); | ||
var $cnSS2$react = require("react"); | ||
var $cnSS2$reactremovescroll = require("react-remove-scroll"); | ||
var $cnSS2$ariahidden = require("aria-hidden"); | ||
var $cnSS2$radixuiprimitive = require("@radix-ui/primitive"); | ||
var $cnSS2$radixuireactcollection = require("@radix-ui/react-collection"); | ||
var $cnSS2$radixuireactcomposerefs = require("@radix-ui/react-compose-refs"); | ||
var $cnSS2$radixuireactcontext = require("@radix-ui/react-context"); | ||
var $cnSS2$radixuireactdismissablelayer = require("@radix-ui/react-dismissable-layer"); | ||
var $cnSS2$radixuireactfocusscope = require("@radix-ui/react-focus-scope"); | ||
var $cnSS2$radixuireactpresence = require("@radix-ui/react-presence"); | ||
var $cnSS2$radixuireactprimitive = require("@radix-ui/react-primitive"); | ||
var $cnSS2$radixuireactpopper = require("@radix-ui/react-popper"); | ||
var $cnSS2$radixuireactportal = require("@radix-ui/react-portal"); | ||
var $cnSS2$radixuireactrovingfocus = require("@radix-ui/react-roving-focus"); | ||
var $cnSS2$radixuireactdirection = require("@radix-ui/react-direction"); | ||
var $cnSS2$radixuireactusecallbackref = require("@radix-ui/react-use-callback-ref"); | ||
var $cnSS2$radixuireactfocusguards = require("@radix-ui/react-focus-guards"); | ||
var $cnSS2$radixuireactid = require("@radix-ui/react-id"); | ||
function $parcel$exportWildcard(dest, source) { | ||
Object.keys(source).forEach(function(key) { | ||
if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) { | ||
return; | ||
} | ||
Object.defineProperty(dest, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return source[key]; | ||
} | ||
}); | ||
}); | ||
return dest; | ||
} | ||
function $parcel$interopDefault(a) { | ||
return a && a.__esModule ? a.default : a; | ||
} | ||
function $parcel$export(e, n, v, s) { | ||
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); | ||
} | ||
var $213e4d2df823067d$exports = {}; | ||
$parcel$export($213e4d2df823067d$exports, "createMenuScope", () => $213e4d2df823067d$export$4027731b685e72eb); | ||
$parcel$export($213e4d2df823067d$exports, "Menu", () => $213e4d2df823067d$export$d9b273488cd8ce6f); | ||
$parcel$export($213e4d2df823067d$exports, "MenuSub", () => $213e4d2df823067d$export$71bdb9d1e2909932); | ||
$parcel$export($213e4d2df823067d$exports, "MenuAnchor", () => $213e4d2df823067d$export$9fa5ebd18bee4d43); | ||
$parcel$export($213e4d2df823067d$exports, "MenuContent", () => $213e4d2df823067d$export$479f0f2f71193efe); | ||
$parcel$export($213e4d2df823067d$exports, "MenuGroup", () => $213e4d2df823067d$export$22a631d1f72787bb); | ||
$parcel$export($213e4d2df823067d$exports, "MenuLabel", () => $213e4d2df823067d$export$dd37bec0e8a99143); | ||
$parcel$export($213e4d2df823067d$exports, "MenuItem", () => $213e4d2df823067d$export$2ce376c2cc3355c8); | ||
$parcel$export($213e4d2df823067d$exports, "MenuSubTrigger", () => $213e4d2df823067d$export$5fbbb3ba7297405f); | ||
$parcel$export($213e4d2df823067d$exports, "MenuCheckboxItem", () => $213e4d2df823067d$export$f6f243521332502d); | ||
$parcel$export($213e4d2df823067d$exports, "MenuRadioGroup", () => $213e4d2df823067d$export$ea2200c9eee416b3); | ||
$parcel$export($213e4d2df823067d$exports, "MenuRadioItem", () => $213e4d2df823067d$export$69bd225e9817f6d0); | ||
$parcel$export($213e4d2df823067d$exports, "MenuItemIndicator", () => $213e4d2df823067d$export$a2593e23056970a3); | ||
$parcel$export($213e4d2df823067d$exports, "MenuSeparator", () => $213e4d2df823067d$export$1cec7dcdd713e220); | ||
$parcel$export($213e4d2df823067d$exports, "MenuArrow", () => $213e4d2df823067d$export$bcdda4773debf5fa); | ||
$parcel$export($213e4d2df823067d$exports, "Root", () => $213e4d2df823067d$export$be92b6f5f03c0fe9); | ||
$parcel$export($213e4d2df823067d$exports, "Sub", () => $213e4d2df823067d$export$d7a01e11500dfb6f); | ||
$parcel$export($213e4d2df823067d$exports, "Anchor", () => $213e4d2df823067d$export$b688253958b8dfe7); | ||
$parcel$export($213e4d2df823067d$exports, "SubTrigger", () => $213e4d2df823067d$export$2ea8a7a591ac5eac); | ||
$parcel$export($213e4d2df823067d$exports, "Content", () => $213e4d2df823067d$export$7c6e2c02157bb7d2); | ||
$parcel$export($213e4d2df823067d$exports, "Group", () => $213e4d2df823067d$export$eb2fcfdbd7ba97d4); | ||
$parcel$export($213e4d2df823067d$exports, "Label", () => $213e4d2df823067d$export$b04be29aa201d4f5); | ||
$parcel$export($213e4d2df823067d$exports, "Item", () => $213e4d2df823067d$export$6d08773d2e66f8f2); | ||
$parcel$export($213e4d2df823067d$exports, "CheckboxItem", () => $213e4d2df823067d$export$16ce288f89fa631c); | ||
$parcel$export($213e4d2df823067d$exports, "RadioGroup", () => $213e4d2df823067d$export$a98f0dcb43a68a25); | ||
$parcel$export($213e4d2df823067d$exports, "RadioItem", () => $213e4d2df823067d$export$371ab307eab489c0); | ||
$parcel$export($213e4d2df823067d$exports, "ItemIndicator", () => $213e4d2df823067d$export$c3468e2714d175fa); | ||
$parcel$export($213e4d2df823067d$exports, "Separator", () => $213e4d2df823067d$export$1ff3c3f08ae963c0); | ||
$parcel$export($213e4d2df823067d$exports, "Arrow", () => $213e4d2df823067d$export$21b07c8f274aebd5); | ||
const $213e4d2df823067d$var$SELECTION_KEYS = [ | ||
'Enter', | ||
' ' | ||
]; | ||
const $213e4d2df823067d$var$FIRST_KEYS = [ | ||
'ArrowDown', | ||
'PageUp', | ||
'Home' | ||
]; | ||
const $213e4d2df823067d$var$LAST_KEYS = [ | ||
'ArrowUp', | ||
'PageDown', | ||
'End' | ||
]; | ||
const $213e4d2df823067d$var$FIRST_LAST_KEYS = [ | ||
...$213e4d2df823067d$var$FIRST_KEYS, | ||
...$213e4d2df823067d$var$LAST_KEYS | ||
]; | ||
const $213e4d2df823067d$var$SUB_OPEN_KEYS = { | ||
ltr: [ | ||
...$213e4d2df823067d$var$SELECTION_KEYS, | ||
'ArrowRight' | ||
], | ||
rtl: [ | ||
...$213e4d2df823067d$var$SELECTION_KEYS, | ||
'ArrowLeft' | ||
] | ||
}; | ||
const $213e4d2df823067d$var$SUB_CLOSE_KEYS = { | ||
ltr: [ | ||
'ArrowLeft' | ||
], | ||
rtl: [ | ||
'ArrowRight' | ||
] | ||
}; | ||
/* ------------------------------------------------------------------------------------------------- | ||
* Menu | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$MENU_NAME = 'Menu'; | ||
const [$213e4d2df823067d$var$Collection, $213e4d2df823067d$var$useCollection, $213e4d2df823067d$var$createCollectionScope] = $cnSS2$radixuireactcollection.createCollection($213e4d2df823067d$var$MENU_NAME); | ||
const [$213e4d2df823067d$var$createMenuContext, $213e4d2df823067d$export$4027731b685e72eb] = $cnSS2$radixuireactcontext.createContextScope($213e4d2df823067d$var$MENU_NAME, [ | ||
$213e4d2df823067d$var$createCollectionScope, | ||
$cnSS2$radixuireactpopper.createPopperScope, | ||
$cnSS2$radixuireactrovingfocus.createRovingFocusGroupScope | ||
]); | ||
const $213e4d2df823067d$var$usePopperScope = $cnSS2$radixuireactpopper.createPopperScope(); | ||
const $213e4d2df823067d$var$useRovingFocusGroupScope = $cnSS2$radixuireactrovingfocus.createRovingFocusGroupScope(); | ||
const [$213e4d2df823067d$var$MenuProvider, $213e4d2df823067d$var$useMenuContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$MENU_NAME); | ||
const $213e4d2df823067d$export$d9b273488cd8ce6f = (props)=>{ | ||
const { __scopeMenu: __scopeMenu , open: open = false , children: children , dir: dir , onOpenChange: onOpenChange , modal: modal = true } = props; | ||
const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); | ||
const [content, setContent] = $cnSS2$react.useState(null); | ||
const isUsingKeyboardRef = $cnSS2$react.useRef(false); | ||
const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); | ||
const direction = $cnSS2$radixuireactdirection.useDirection(dir); | ||
$cnSS2$react.useEffect(()=>{ | ||
// Capture phase ensures we set the boolean before any side effects execute | ||
// in response to the key or pointer event as they might depend on this value. | ||
const handleKeyDown = ()=>{ | ||
isUsingKeyboardRef.current = true; | ||
document.addEventListener('pointerdown', handlePointer, { | ||
capture: true, | ||
once: true | ||
}); | ||
document.addEventListener('pointermove', handlePointer, { | ||
capture: true, | ||
once: true | ||
}); | ||
}; | ||
const handlePointer = ()=>isUsingKeyboardRef.current = false | ||
; | ||
document.addEventListener('keydown', handleKeyDown, { | ||
capture: true | ||
}); | ||
return ()=>{ | ||
document.removeEventListener('keydown', handleKeyDown, { | ||
capture: true | ||
}); | ||
document.removeEventListener('pointerdown', handlePointer, { | ||
capture: true | ||
}); | ||
document.removeEventListener('pointermove', handlePointer, { | ||
capture: true | ||
}); | ||
}; | ||
}, []); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, { | ||
scope: __scopeMenu, | ||
isSubmenu: false, | ||
isUsingKeyboardRef: isUsingKeyboardRef, | ||
dir: direction, | ||
open: open, | ||
onOpenChange: handleOpenChange, | ||
content: content, | ||
onContentChange: setContent, | ||
onRootClose: $cnSS2$react.useCallback(()=>handleOpenChange(false) | ||
, [ | ||
handleOpenChange | ||
]), | ||
modal: modal | ||
}, children)); | ||
}; | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$d9b273488cd8ce6f, { | ||
displayName: $213e4d2df823067d$var$MENU_NAME | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$SUB_NAME = 'MenuSub'; | ||
const $213e4d2df823067d$export$71bdb9d1e2909932 = (props)=>{ | ||
const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props; | ||
const parentMenuContext = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_NAME, __scopeMenu); | ||
const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); | ||
const [trigger, setTrigger] = $cnSS2$react.useState(null); | ||
const [content, setContent] = $cnSS2$react.useState(null); | ||
const handleOpenChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus. | ||
$cnSS2$react.useEffect(()=>{ | ||
if (parentMenuContext.open === false) handleOpenChange(false); | ||
return ()=>handleOpenChange(false) | ||
; | ||
}, [ | ||
parentMenuContext.open, | ||
handleOpenChange | ||
]); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuProvider, { | ||
scope: __scopeMenu, | ||
isSubmenu: true, | ||
isUsingKeyboardRef: parentMenuContext.isUsingKeyboardRef, | ||
dir: parentMenuContext.dir, | ||
open: open, | ||
onOpenChange: handleOpenChange, | ||
content: content, | ||
onContentChange: setContent, | ||
onRootClose: parentMenuContext.onRootClose, | ||
contentId: $cnSS2$radixuireactid.useId(), | ||
trigger: trigger, | ||
onTriggerChange: setTrigger, | ||
triggerId: $cnSS2$radixuireactid.useId(), | ||
modal: false | ||
}, children)); | ||
}; | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$71bdb9d1e2909932, { | ||
displayName: $213e4d2df823067d$var$SUB_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuAnchor | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ANCHOR_NAME = 'MenuAnchor'; | ||
const $213e4d2df823067d$export$9fa5ebd18bee4d43 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...anchorProps } = props; | ||
const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Anchor, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, popperScope, anchorProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$9fa5ebd18bee4d43, { | ||
displayName: $213e4d2df823067d$var$ANCHOR_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuContent | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$CONTENT_NAME = 'MenuContent'; | ||
const [$213e4d2df823067d$var$MenuContentProvider, $213e4d2df823067d$var$useMenuContentContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$CONTENT_NAME); | ||
const $213e4d2df823067d$export$479f0f2f71193efe = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { forceMount: forceMount , ...contentProps } = props; | ||
const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Provider, { | ||
scope: props.__scopeMenu | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, { | ||
present: forceMount || context.open | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.Slot, { | ||
scope: props.__scopeMenu | ||
}, context.isSubmenu ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuSubContent, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, { | ||
ref: forwardedRef | ||
})) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContent, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, contentProps, { | ||
ref: forwardedRef | ||
}))))); | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuRootContent = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); | ||
return context.modal ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, props, { | ||
ref: forwardedRef | ||
})) : /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuRootContentNonModal, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, props, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
const $213e4d2df823067d$var$MenuRootContentModal = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); | ||
const ref = $cnSS2$react.useRef(null); | ||
const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); // Hide everything from ARIA except the `MenuContent` | ||
$cnSS2$react.useEffect(()=>{ | ||
const content = ref.current; | ||
if (content) return $cnSS2$ariahidden.hideOthers(content); | ||
}, []); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, props, { | ||
ref: composedRefs // we make sure we're not trapping once it's been closed | ||
, | ||
trapFocus: context.open // make sure to only disable pointer events when open | ||
, | ||
disableOutsidePointerEvents: context.open, | ||
disableOutsideScroll: true // When focus is trapped, a `focusout` event may still happen. | ||
, | ||
onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, (event)=>event.preventDefault() | ||
, { | ||
checkForDefaultPrevented: false | ||
}), | ||
onDismiss: ()=>context.onOpenChange(false) | ||
})); | ||
}); | ||
const $213e4d2df823067d$var$MenuRootContentNonModal = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, props, { | ||
ref: forwardedRef, | ||
trapFocus: false, | ||
disableOutsidePointerEvents: false, | ||
disableOutsideScroll: false, | ||
onDismiss: ()=>context.onOpenChange(false) | ||
})); | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuSubContent = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, props.__scopeMenu); | ||
const ref = $cnSS2$react.useRef(null); | ||
const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); | ||
return context.isSubmenu ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
id: context.contentId, | ||
"aria-labelledby": context.triggerId | ||
}, props, { | ||
ref: composedRefs, | ||
align: "start", | ||
side: context.dir === 'rtl' ? 'left' : 'right', | ||
portalled: true, | ||
disableOutsidePointerEvents: false, | ||
disableOutsideScroll: false, | ||
trapFocus: false, | ||
onOpenAutoFocus: (event)=>{ | ||
var _ref$current; | ||
// when opening a submenu, focus content for keyboard users only | ||
if (context.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus(); | ||
event.preventDefault(); | ||
} // The menu might close because of focusing another menu item in the parent menu. We | ||
, | ||
onCloseAutoFocus: (event)=>event.preventDefault() | ||
, | ||
onFocusOutside: $cnSS2$radixuiprimitive.composeEventHandlers(props.onFocusOutside, (event)=>{ | ||
// We prevent closing when the trigger is focused to avoid triggering a re-open animation | ||
// on pointer interaction. | ||
if (event.target !== context.trigger) context.onOpenChange(false); | ||
}), | ||
onEscapeKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onEscapeKeyDown, context.onRootClose), | ||
onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{ | ||
// Submenu key events bubble through portals. We only care about keys in this menu. | ||
const isKeyDownInside = event.currentTarget.contains(event.target); | ||
const isCloseKey = $213e4d2df823067d$var$SUB_CLOSE_KEYS[context.dir].includes(event.key); | ||
if (isKeyDownInside && isCloseKey) { | ||
var _context$trigger; | ||
context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus` | ||
(_context$trigger = context.trigger) === null || _context$trigger === void 0 || _context$trigger.focus(); // prevent window from scrolling | ||
event.preventDefault(); | ||
} | ||
}) | ||
})) : null; | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuContentImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , loop: loop = false , trapFocus: trapFocus , onOpenAutoFocus: onOpenAutoFocus , onCloseAutoFocus: onCloseAutoFocus , disableOutsidePointerEvents: disableOutsidePointerEvents , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , onFocusOutside: onFocusOutside , onInteractOutside: onInteractOutside , onDismiss: onDismiss , disableOutsideScroll: disableOutsideScroll , allowPinchZoom: allowPinchZoom , portalled: portalled , ...contentProps } = props; | ||
const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$CONTENT_NAME, __scopeMenu); | ||
const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); | ||
const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu); | ||
const getItems = $213e4d2df823067d$var$useCollection(__scopeMenu); | ||
const [currentItemId, setCurrentItemId] = $cnSS2$react.useState(null); | ||
const contentRef = $cnSS2$react.useRef(null); | ||
const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, contentRef, context.onContentChange); | ||
const timerRef = $cnSS2$react.useRef(0); | ||
const searchRef = $cnSS2$react.useRef(''); | ||
const pointerGraceTimerRef = $cnSS2$react.useRef(0); | ||
const pointerGraceIntentRef = $cnSS2$react.useRef(null); | ||
const pointerDirRef = $cnSS2$react.useRef('right'); | ||
const lastPointerXRef = $cnSS2$react.useRef(0); | ||
const PortalWrapper = portalled ? $cnSS2$radixuireactportal.Portal : $cnSS2$react.Fragment; | ||
const ScrollLockWrapper = disableOutsideScroll ? $cnSS2$reactremovescroll.RemoveScroll : $cnSS2$react.Fragment; | ||
const scrollLockWrapperProps = disableOutsideScroll ? { | ||
allowPinchZoom: allowPinchZoom | ||
} : undefined; | ||
const handleTypeaheadSearch = (key)=>{ | ||
var _items$find, _items$find2; | ||
const search = searchRef.current + key; | ||
const items = getItems().filter((item)=>!item.disabled | ||
); | ||
const currentItem = document.activeElement; | ||
const currentMatch = (_items$find = items.find((item)=>item.ref.current === currentItem | ||
)) === null || _items$find === void 0 ? void 0 : _items$find.textValue; | ||
const values = items.map((item)=>item.textValue | ||
); | ||
const nextMatch = $213e4d2df823067d$var$getNextMatch(values, search, currentMatch); | ||
const newItem = (_items$find2 = items.find((item)=>item.textValue === nextMatch | ||
)) === null || _items$find2 === void 0 ? void 0 : _items$find2.ref.current; // Reset `searchRef` 1 second after it was last updated | ||
(function updateSearch(value) { | ||
searchRef.current = value; | ||
window.clearTimeout(timerRef.current); | ||
if (value !== '') timerRef.current = window.setTimeout(()=>updateSearch('') | ||
, 1000); | ||
})(search); | ||
if (newItem) /** | ||
* Imperative focus during keydown is risky so we prevent React's batching updates | ||
* to avoid potential bugs. See: https://github.com/facebook/react/issues/20332 | ||
*/ setTimeout(()=>newItem.focus() | ||
); | ||
}; | ||
$cnSS2$react.useEffect(()=>{ | ||
return ()=>window.clearTimeout(timerRef.current) | ||
; | ||
}, []); // Make sure the whole tree has focus guards as our `MenuContent` may be | ||
// the last element in the DOM (beacuse of the `Portal`) | ||
$cnSS2$radixuireactfocusguards.useFocusGuards(); | ||
const isPointerMovingToSubmenu = $cnSS2$react.useCallback((event)=>{ | ||
var _pointerGraceIntentRe, _pointerGraceIntentRe2; | ||
const isMovingTowards = pointerDirRef.current === ((_pointerGraceIntentRe = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe === void 0 ? void 0 : _pointerGraceIntentRe.side); | ||
return isMovingTowards && $213e4d2df823067d$var$isPointerInGraceArea(event, (_pointerGraceIntentRe2 = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe2 === void 0 ? void 0 : _pointerGraceIntentRe2.area); | ||
}, []); | ||
return /*#__PURE__*/ $cnSS2$react.createElement(PortalWrapper, null, /*#__PURE__*/ $cnSS2$react.createElement(ScrollLockWrapper, scrollLockWrapperProps, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuContentProvider, { | ||
scope: __scopeMenu, | ||
searchRef: searchRef, | ||
onItemEnter: $cnSS2$react.useCallback((event)=>{ | ||
if (isPointerMovingToSubmenu(event)) event.preventDefault(); | ||
}, [ | ||
isPointerMovingToSubmenu | ||
]), | ||
onItemLeave: $cnSS2$react.useCallback((event)=>{ | ||
var _contentRef$current; | ||
if (isPointerMovingToSubmenu(event)) return; | ||
(_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 || _contentRef$current.focus(); | ||
setCurrentItemId(null); | ||
}, [ | ||
isPointerMovingToSubmenu | ||
]), | ||
onTriggerLeave: $cnSS2$react.useCallback((event)=>{ | ||
if (isPointerMovingToSubmenu(event)) event.preventDefault(); | ||
}, [ | ||
isPointerMovingToSubmenu | ||
]), | ||
pointerGraceTimerRef: pointerGraceTimerRef, | ||
onPointerGraceIntentChange: $cnSS2$react.useCallback((intent)=>{ | ||
pointerGraceIntentRef.current = intent; | ||
}, []) | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactfocusscope.FocusScope, { | ||
asChild: true, | ||
trapped: trapFocus, | ||
onMountAutoFocus: $cnSS2$radixuiprimitive.composeEventHandlers(onOpenAutoFocus, (event)=>{ | ||
var _contentRef$current2; | ||
// when opening, explicitly focus the content area only and leave | ||
// `onEntryFocus` in control of focusing first item | ||
event.preventDefault(); | ||
(_contentRef$current2 = contentRef.current) === null || _contentRef$current2 === void 0 || _contentRef$current2.focus(); | ||
}), | ||
onUnmountAutoFocus: onCloseAutoFocus | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactdismissablelayer.DismissableLayer, { | ||
asChild: true, | ||
disableOutsidePointerEvents: disableOutsidePointerEvents, | ||
onEscapeKeyDown: onEscapeKeyDown, | ||
onPointerDownOutside: onPointerDownOutside, | ||
onFocusOutside: onFocusOutside, | ||
onInteractOutside: onInteractOutside, | ||
onDismiss: onDismiss | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Root, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
asChild: true | ||
}, rovingFocusGroupScope, { | ||
dir: context.dir, | ||
orientation: "vertical", | ||
loop: loop, | ||
currentTabStopId: currentItemId, | ||
onCurrentTabStopIdChange: setCurrentItemId, | ||
onEntryFocus: (event)=>{ | ||
// only focus first item when using keyboard | ||
if (!context.isUsingKeyboardRef.current) event.preventDefault(); | ||
} | ||
}), /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Content, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
role: "menu", | ||
"aria-orientation": "vertical", | ||
"data-state": $213e4d2df823067d$var$getOpenState(context.open), | ||
dir: context.dir | ||
}, popperScope, contentProps, { | ||
ref: composedRefs, | ||
style: { | ||
outline: 'none', | ||
...contentProps.style | ||
}, | ||
onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(contentProps.onKeyDown, (event)=>{ | ||
// submenu key events bubble through portals. We only care about keys in this menu. | ||
const target = event.target; | ||
const isKeyDownInside = event.currentTarget.contains(target); | ||
const isModifierKey = event.ctrlKey || event.altKey || event.metaKey; | ||
const isCharacterKey = event.key.length === 1; | ||
if (isKeyDownInside) { | ||
// menus should not be navigated using tab key so we prevent it | ||
if (event.key === 'Tab') event.preventDefault(); | ||
if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key); | ||
} // focus first/last item based on key pressed | ||
const content = contentRef.current; | ||
if (event.target !== content) return; | ||
if (!$213e4d2df823067d$var$FIRST_LAST_KEYS.includes(event.key)) return; | ||
event.preventDefault(); | ||
const items = getItems().filter((item)=>!item.disabled | ||
); | ||
const candidateNodes = items.map((item)=>item.ref.current | ||
); | ||
if ($213e4d2df823067d$var$LAST_KEYS.includes(event.key)) candidateNodes.reverse(); | ||
$213e4d2df823067d$var$focusFirst(candidateNodes); | ||
}), | ||
onBlur: $cnSS2$radixuiprimitive.composeEventHandlers(props.onBlur, (event)=>{ | ||
// clear search buffer when leaving the menu | ||
if (!event.currentTarget.contains(event.target)) { | ||
window.clearTimeout(timerRef.current); | ||
searchRef.current = ''; | ||
} | ||
}), | ||
onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{ | ||
const target = event.target; | ||
const pointerXHasChanged = lastPointerXRef.current !== event.clientX; // We don't use `event.movementX` for this check because Safari will | ||
// always return `0` on a pointer event. | ||
if (event.currentTarget.contains(target) && pointerXHasChanged) { | ||
const newDir = event.clientX > lastPointerXRef.current ? 'right' : 'left'; | ||
pointerDirRef.current = newDir; | ||
lastPointerXRef.current = event.clientX; | ||
} | ||
})) | ||
})))))))); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$479f0f2f71193efe, { | ||
displayName: $213e4d2df823067d$var$CONTENT_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuGroup | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$GROUP_NAME = 'MenuGroup'; | ||
const $213e4d2df823067d$export$22a631d1f72787bb = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...groupProps } = props; | ||
return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
role: "group" | ||
}, groupProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$22a631d1f72787bb, { | ||
displayName: $213e4d2df823067d$var$GROUP_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuLabel | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$LABEL_NAME = 'MenuLabel'; | ||
const $213e4d2df823067d$export$dd37bec0e8a99143 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...labelProps } = props; | ||
return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, labelProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$dd37bec0e8a99143, { | ||
displayName: $213e4d2df823067d$var$LABEL_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuItem | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ITEM_NAME = 'MenuItem'; | ||
const $213e4d2df823067d$var$ITEM_SELECT = 'menu.itemSelect'; | ||
const $213e4d2df823067d$export$2ce376c2cc3355c8 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { disabled: disabled = false , onSelect: onSelect , ...itemProps } = props; | ||
const ref = $cnSS2$react.useRef(null); | ||
const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu); | ||
const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, props.__scopeMenu); | ||
const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); | ||
const isPointerDownRef = $cnSS2$react.useRef(false); | ||
const handleSelect = ()=>{ | ||
const menuItem = ref.current; | ||
if (!disabled && menuItem) { | ||
const itemSelectEvent = new Event($213e4d2df823067d$var$ITEM_SELECT, { | ||
bubbles: true, | ||
cancelable: true | ||
}); | ||
menuItem.addEventListener($213e4d2df823067d$var$ITEM_SELECT, (event)=>onSelect === null || onSelect === void 0 ? void 0 : onSelect(event) | ||
, { | ||
once: true | ||
}); | ||
menuItem.dispatchEvent(itemSelectEvent); | ||
if (itemSelectEvent.defaultPrevented) isPointerDownRef.current = false; | ||
else context.onRootClose(); | ||
} | ||
}; | ||
return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, itemProps, { | ||
ref: composedRefs, | ||
disabled: disabled, | ||
onClick: $cnSS2$radixuiprimitive.composeEventHandlers(props.onClick, handleSelect), | ||
onPointerDown: (event)=>{ | ||
var _props$onPointerDown; | ||
(_props$onPointerDown = props.onPointerDown) === null || _props$onPointerDown === void 0 || _props$onPointerDown.call(props, event); | ||
isPointerDownRef.current = true; | ||
}, | ||
onPointerUp: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerUp, (event)=>{ | ||
var _event$currentTarget; | ||
// Pointer down can move to a different menu item which should activate it on pointer up. | ||
// We dispatch a click for selection to allow composition with click based triggers and to | ||
// prevent Firefox from getting stuck in text selection mode when the menu closes. | ||
if (!isPointerDownRef.current) (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || _event$currentTarget.click(); | ||
}), | ||
onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{ | ||
const isTypingAhead = contentContext.searchRef.current !== ''; | ||
if (disabled || isTypingAhead && event.key === ' ') return; | ||
if ($213e4d2df823067d$var$SELECTION_KEYS.includes(event.key)) { | ||
event.currentTarget.click(); | ||
/** | ||
* We prevent default browser behaviour for selection keys as they should trigger | ||
* a selection only: | ||
* - prevents space from scrolling the page. | ||
* - if keydown causes focus to move, prevents keydown from firing on the new target. | ||
*/ event.preventDefault(); | ||
} | ||
}) | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$2ce376c2cc3355c8, { | ||
displayName: $213e4d2df823067d$var$ITEM_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuSubTrigger | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SUB_TRIGGER_NAME = 'MenuSubTrigger'; | ||
const $213e4d2df823067d$export$5fbbb3ba7297405f = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const context = $213e4d2df823067d$var$useMenuContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu); | ||
const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$SUB_TRIGGER_NAME, props.__scopeMenu); | ||
const openTimerRef = $cnSS2$react.useRef(null); | ||
const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext; | ||
const scope = { | ||
__scopeMenu: props.__scopeMenu | ||
}; | ||
const clearOpenTimer = $cnSS2$react.useCallback(()=>{ | ||
if (openTimerRef.current) window.clearTimeout(openTimerRef.current); | ||
openTimerRef.current = null; | ||
}, []); | ||
$cnSS2$react.useEffect(()=>clearOpenTimer | ||
, [ | ||
clearOpenTimer | ||
]); | ||
$cnSS2$react.useEffect(()=>{ | ||
const pointerGraceTimer = pointerGraceTimerRef.current; | ||
return ()=>{ | ||
window.clearTimeout(pointerGraceTimer); | ||
onPointerGraceIntentChange(null); | ||
}; | ||
}, [ | ||
pointerGraceTimerRef, | ||
onPointerGraceIntentChange | ||
]); | ||
return context.isSubmenu ? /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$9fa5ebd18bee4d43, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
asChild: true | ||
}, scope), /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$MenuItemImpl, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
id: context.triggerId, | ||
"aria-haspopup": "menu", | ||
"aria-expanded": context.open, | ||
"aria-controls": context.contentId, | ||
"data-state": $213e4d2df823067d$var$getOpenState(context.open) | ||
}, props, { | ||
ref: $cnSS2$radixuireactcomposerefs.composeRefs(forwardedRef, context.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from | ||
, | ||
onClick: (event)=>{ | ||
var _props$onClick; | ||
(_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event); | ||
if (props.disabled || event.defaultPrevented) return; | ||
/** | ||
* We manually focus because iOS Safari doesn't always focus on click (e.g. buttons) | ||
* and we rely heavily on `onFocusOutside` for submenus to close when switching | ||
* between separate submenus. | ||
*/ event.currentTarget.focus(); | ||
if (!context.open) context.onOpenChange(true); | ||
}, | ||
onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{ | ||
contentContext.onItemEnter(event); | ||
if (event.defaultPrevented) return; | ||
if (!props.disabled && !context.open && !openTimerRef.current) { | ||
contentContext.onPointerGraceIntentChange(null); | ||
openTimerRef.current = window.setTimeout(()=>{ | ||
context.onOpenChange(true); | ||
clearOpenTimer(); | ||
}, 100); | ||
} | ||
})), | ||
onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>{ | ||
var _context$content; | ||
clearOpenTimer(); | ||
const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect(); | ||
if (contentRect) { | ||
var _context$content2; | ||
// TODO: make sure to update this when we change positioning logic | ||
const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side; | ||
const rightSide = side === 'right'; | ||
const bleed = rightSide ? -5 : 5; | ||
const contentNearEdge = contentRect[rightSide ? 'left' : 'right']; | ||
const contentFarEdge = contentRect[rightSide ? 'right' : 'left']; | ||
contentContext.onPointerGraceIntentChange({ | ||
area: [ | ||
// consistently within polygon bounds | ||
{ | ||
x: event.clientX + bleed, | ||
y: event.clientY | ||
}, | ||
{ | ||
x: contentNearEdge, | ||
y: contentRect.top | ||
}, | ||
{ | ||
x: contentFarEdge, | ||
y: contentRect.top | ||
}, | ||
{ | ||
x: contentFarEdge, | ||
y: contentRect.bottom | ||
}, | ||
{ | ||
x: contentNearEdge, | ||
y: contentRect.bottom | ||
} | ||
], | ||
side: side | ||
}); | ||
window.clearTimeout(pointerGraceTimerRef.current); | ||
pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null) | ||
, 300); | ||
} else { | ||
contentContext.onTriggerLeave(event); | ||
if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened. | ||
contentContext.onPointerGraceIntentChange(null); | ||
} | ||
})), | ||
onKeyDown: $cnSS2$radixuiprimitive.composeEventHandlers(props.onKeyDown, (event)=>{ | ||
const isTypingAhead = contentContext.searchRef.current !== ''; | ||
if (props.disabled || isTypingAhead && event.key === ' ') return; | ||
if ($213e4d2df823067d$var$SUB_OPEN_KEYS[context.dir].includes(event.key)) { | ||
var _context$content3; | ||
context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction | ||
// so we ensure content is given focus again when switching to keyboard. | ||
(_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling | ||
event.preventDefault(); | ||
} | ||
}) | ||
}))) : null; | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$5fbbb3ba7297405f, { | ||
displayName: $213e4d2df823067d$var$SUB_TRIGGER_NAME | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $213e4d2df823067d$var$MenuItemImpl = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , disabled: disabled = false , textValue: textValue , ...itemProps } = props; | ||
const contentContext = $213e4d2df823067d$var$useMenuContentContext($213e4d2df823067d$var$ITEM_NAME, __scopeMenu); | ||
const rovingFocusGroupScope = $213e4d2df823067d$var$useRovingFocusGroupScope(__scopeMenu); | ||
const ref = $cnSS2$react.useRef(null); | ||
const composedRefs = $cnSS2$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref); // get the item's `.textContent` as default strategy for typeahead `textValue` | ||
const [textContent, setTextContent] = $cnSS2$react.useState(''); | ||
$cnSS2$react.useEffect(()=>{ | ||
const menuItem = ref.current; | ||
if (menuItem) { | ||
var _menuItem$textContent; | ||
setTextContent(((_menuItem$textContent = menuItem.textContent) !== null && _menuItem$textContent !== void 0 ? _menuItem$textContent : '').trim()); | ||
} | ||
}, [ | ||
itemProps.children | ||
]); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$Collection.ItemSlot, { | ||
scope: __scopeMenu, | ||
disabled: disabled, | ||
textValue: textValue !== null && textValue !== void 0 ? textValue : textContent | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactrovingfocus.Item, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
asChild: true | ||
}, rovingFocusGroupScope, { | ||
focusable: !disabled | ||
}), /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
role: "menuitem", | ||
"aria-disabled": disabled || undefined, | ||
"data-disabled": disabled ? '' : undefined | ||
}, itemProps, { | ||
ref: composedRefs, | ||
onPointerMove: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerMove, $213e4d2df823067d$var$whenMouse((event)=>{ | ||
if (disabled) contentContext.onItemLeave(event); | ||
else { | ||
contentContext.onItemEnter(event); | ||
if (!event.defaultPrevented) { | ||
const item = event.currentTarget; | ||
item.focus(); | ||
} | ||
} | ||
})), | ||
onPointerLeave: $cnSS2$radixuiprimitive.composeEventHandlers(props.onPointerLeave, $213e4d2df823067d$var$whenMouse((event)=>contentContext.onItemLeave(event) | ||
)) | ||
})))); | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuCheckboxItem | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$CHECKBOX_ITEM_NAME = 'MenuCheckboxItem'; | ||
const $213e4d2df823067d$export$f6f243521332502d = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { checked: checked = false , onCheckedChange: onCheckedChange , ...checkboxItemProps } = props; | ||
return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$ItemIndicatorProvider, { | ||
scope: props.__scopeMenu, | ||
checked: checked | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$2ce376c2cc3355c8, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
role: "menuitemcheckbox", | ||
"aria-checked": checked | ||
}, checkboxItemProps, { | ||
ref: forwardedRef, | ||
"data-state": $213e4d2df823067d$var$getCheckedState(checked), | ||
onSelect: $cnSS2$radixuiprimitive.composeEventHandlers(checkboxItemProps.onSelect, ()=>onCheckedChange === null || onCheckedChange === void 0 ? void 0 : onCheckedChange(!checked) | ||
, { | ||
checkForDefaultPrevented: false | ||
}) | ||
}))); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$f6f243521332502d, { | ||
displayName: $213e4d2df823067d$var$CHECKBOX_ITEM_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuRadioGroup | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$RADIO_GROUP_NAME = 'MenuRadioGroup'; | ||
const [$213e4d2df823067d$var$RadioGroupProvider, $213e4d2df823067d$var$useRadioGroupContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$RADIO_GROUP_NAME, { | ||
value: undefined, | ||
onValueChange: ()=>{} | ||
}); | ||
const $213e4d2df823067d$export$ea2200c9eee416b3 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { value: value , onValueChange: onValueChange , ...groupProps } = props; | ||
const handleValueChange = $cnSS2$radixuireactusecallbackref.useCallbackRef(onValueChange); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$RadioGroupProvider, { | ||
scope: props.__scopeMenu, | ||
value: value, | ||
onValueChange: handleValueChange | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$22a631d1f72787bb, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, groupProps, { | ||
ref: forwardedRef | ||
}))); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$ea2200c9eee416b3, { | ||
displayName: $213e4d2df823067d$var$RADIO_GROUP_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuRadioItem | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$RADIO_ITEM_NAME = 'MenuRadioItem'; | ||
const $213e4d2df823067d$export$69bd225e9817f6d0 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { value: value , ...radioItemProps } = props; | ||
const context = $213e4d2df823067d$var$useRadioGroupContext($213e4d2df823067d$var$RADIO_ITEM_NAME, props.__scopeMenu); | ||
const checked = value === context.value; | ||
return /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$var$ItemIndicatorProvider, { | ||
scope: props.__scopeMenu, | ||
checked: checked | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($213e4d2df823067d$export$2ce376c2cc3355c8, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
role: "menuitemradio", | ||
"aria-checked": checked | ||
}, radioItemProps, { | ||
ref: forwardedRef, | ||
"data-state": $213e4d2df823067d$var$getCheckedState(checked), | ||
onSelect: $cnSS2$radixuiprimitive.composeEventHandlers(radioItemProps.onSelect, ()=>{ | ||
var _context$onValueChang; | ||
return (_context$onValueChang = context.onValueChange) === null || _context$onValueChang === void 0 ? void 0 : _context$onValueChang.call(context, value); | ||
}, { | ||
checkForDefaultPrevented: false | ||
}) | ||
}))); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$69bd225e9817f6d0, { | ||
displayName: $213e4d2df823067d$var$RADIO_ITEM_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuItemIndicator | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ITEM_INDICATOR_NAME = 'MenuItemIndicator'; | ||
const [$213e4d2df823067d$var$ItemIndicatorProvider, $213e4d2df823067d$var$useItemIndicatorContext] = $213e4d2df823067d$var$createMenuContext($213e4d2df823067d$var$ITEM_INDICATOR_NAME, { | ||
checked: false | ||
}); | ||
const $213e4d2df823067d$export$a2593e23056970a3 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , forceMount: forceMount , ...itemIndicatorProps } = props; | ||
const indicatorContext = $213e4d2df823067d$var$useItemIndicatorContext($213e4d2df823067d$var$ITEM_INDICATOR_NAME, __scopeMenu); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpresence.Presence, { | ||
present: forceMount || indicatorContext.checked | ||
}, /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, itemIndicatorProps, { | ||
ref: forwardedRef, | ||
"data-state": $213e4d2df823067d$var$getCheckedState(indicatorContext.checked) | ||
}))); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$a2593e23056970a3, { | ||
displayName: $213e4d2df823067d$var$ITEM_INDICATOR_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuSeparator | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$SEPARATOR_NAME = 'MenuSeparator'; | ||
const $213e4d2df823067d$export$1cec7dcdd713e220 = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...separatorProps } = props; | ||
return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({ | ||
role: "separator", | ||
"aria-orientation": "horizontal" | ||
}, separatorProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$1cec7dcdd713e220, { | ||
displayName: $213e4d2df823067d$var$SEPARATOR_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuArrow | ||
* -----------------------------------------------------------------------------------------------*/ const $213e4d2df823067d$var$ARROW_NAME = 'MenuArrow'; | ||
const $213e4d2df823067d$export$bcdda4773debf5fa = /*#__PURE__*/ $cnSS2$react.forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...arrowProps } = props; | ||
const popperScope = $213e4d2df823067d$var$usePopperScope(__scopeMenu); | ||
return /*#__PURE__*/ $cnSS2$react.createElement($cnSS2$radixuireactpopper.Arrow, ($parcel$interopDefault($cnSS2$babelruntimehelpersextends))({}, popperScope, arrowProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($213e4d2df823067d$export$bcdda4773debf5fa, { | ||
displayName: $213e4d2df823067d$var$ARROW_NAME | ||
}); | ||
/* -----------------------------------------------------------------------------------------------*/ function $213e4d2df823067d$var$getOpenState(open) { | ||
return open ? 'open' : 'closed'; | ||
} | ||
function $213e4d2df823067d$var$getCheckedState(checked) { | ||
return checked ? 'checked' : 'unchecked'; | ||
} | ||
function $213e4d2df823067d$var$focusFirst(candidates) { | ||
const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement; | ||
for (const candidate of candidates){ | ||
// if focus is already where we want to go, we don't want to keep going through the candidates | ||
if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return; | ||
candidate.focus(); | ||
if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return; | ||
} | ||
} | ||
/** | ||
* Wraps an array around itself at a given start index | ||
* Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']` | ||
*/ function $213e4d2df823067d$var$wrapArray(array, startIndex) { | ||
return array.map((_, index)=>array[(startIndex + index) % array.length] | ||
); | ||
} | ||
/** | ||
* This is the "meat" of the typeahead matching logic. It takes in all the values, | ||
* the search and the current match, and returns the next match (or `undefined`). | ||
* | ||
* We normalize the search because if a user has repeatedly pressed a character, | ||
* we want the exact same behavior as if we only had that one character | ||
* (ie. cycle through options starting with that character) | ||
* | ||
* We also reorder the values by wrapping the array around the current match. | ||
* This is so we always look forward from the current match, and picking the first | ||
* match will always be the correct one. | ||
* | ||
* Finally, if the normalized search is exactly one character, we exclude the | ||
* current match from the values because otherwise it would be the first to match always | ||
* and focus would never move. This is as opposed to the regular case, where we | ||
* don't want focus to move if the current match still matches. | ||
*/ function $213e4d2df823067d$var$getNextMatch(values, search, currentMatch) { | ||
const isRepeated = search.length > 1 && Array.from(search).every((char)=>char === search[0] | ||
); | ||
const normalizedSearch = isRepeated ? search[0] : search; | ||
const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1; | ||
let wrappedValues = $213e4d2df823067d$var$wrapArray(values, Math.max(currentMatchIndex, 0)); | ||
const excludeCurrentMatch = normalizedSearch.length === 1; | ||
if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v)=>v !== currentMatch | ||
); | ||
const nextMatch = wrappedValues.find((value)=>value.toLowerCase().startsWith(normalizedSearch.toLowerCase()) | ||
); | ||
return nextMatch !== currentMatch ? nextMatch : undefined; | ||
} | ||
// Determine if a point is inside of a polygon. | ||
// Based on https://github.com/substack/point-in-polygon | ||
function $213e4d2df823067d$var$isPointInPolygon(point, polygon) { | ||
const { x: x , y: y } = point; | ||
let inside = false; | ||
for(let i = 0, j = polygon.length - 1; i < polygon.length; j = i++){ | ||
const xi = polygon[i].x; | ||
const yi = polygon[i].y; | ||
const xj = polygon[j].x; | ||
const yj = polygon[j].y; // prettier-ignore | ||
const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; | ||
if (intersect) inside = !inside; | ||
} | ||
return inside; | ||
} | ||
function $213e4d2df823067d$var$isPointerInGraceArea(event, area) { | ||
if (!area) return false; | ||
const cursorPos = { | ||
x: event.clientX, | ||
y: event.clientY | ||
}; | ||
return $213e4d2df823067d$var$isPointInPolygon(cursorPos, area); | ||
} | ||
function $213e4d2df823067d$var$whenMouse(handler) { | ||
return (event)=>event.pointerType === 'mouse' ? handler(event) : undefined | ||
; | ||
} | ||
const $213e4d2df823067d$export$be92b6f5f03c0fe9 = $213e4d2df823067d$export$d9b273488cd8ce6f; | ||
const $213e4d2df823067d$export$d7a01e11500dfb6f = $213e4d2df823067d$export$71bdb9d1e2909932; | ||
const $213e4d2df823067d$export$b688253958b8dfe7 = $213e4d2df823067d$export$9fa5ebd18bee4d43; | ||
const $213e4d2df823067d$export$2ea8a7a591ac5eac = $213e4d2df823067d$export$5fbbb3ba7297405f; | ||
const $213e4d2df823067d$export$7c6e2c02157bb7d2 = $213e4d2df823067d$export$479f0f2f71193efe; | ||
const $213e4d2df823067d$export$eb2fcfdbd7ba97d4 = $213e4d2df823067d$export$22a631d1f72787bb; | ||
const $213e4d2df823067d$export$b04be29aa201d4f5 = $213e4d2df823067d$export$dd37bec0e8a99143; | ||
const $213e4d2df823067d$export$6d08773d2e66f8f2 = $213e4d2df823067d$export$2ce376c2cc3355c8; | ||
const $213e4d2df823067d$export$16ce288f89fa631c = $213e4d2df823067d$export$f6f243521332502d; | ||
const $213e4d2df823067d$export$a98f0dcb43a68a25 = $213e4d2df823067d$export$ea2200c9eee416b3; | ||
const $213e4d2df823067d$export$371ab307eab489c0 = $213e4d2df823067d$export$69bd225e9817f6d0; | ||
const $213e4d2df823067d$export$c3468e2714d175fa = $213e4d2df823067d$export$a2593e23056970a3; | ||
const $213e4d2df823067d$export$1ff3c3f08ae963c0 = $213e4d2df823067d$export$1cec7dcdd713e220; | ||
const $213e4d2df823067d$export$21b07c8f274aebd5 = $213e4d2df823067d$export$bcdda4773debf5fa; | ||
$parcel$exportWildcard(module.exports, $213e4d2df823067d$exports); | ||
//# sourceMappingURL=index.js.map |
@@ -1,2 +0,971 @@ | ||
import{useId as e}from"@radix-ui/react-id";import{useFocusGuards as n}from"@radix-ui/react-focus-guards";import{useCallbackRef as t}from"@radix-ui/react-use-callback-ref";import{useDirection as r}from"@radix-ui/react-direction";import*as o from"@radix-ui/react-roving-focus";import{createRovingFocusGroupScope as c}from"@radix-ui/react-roving-focus";import{Portal as u}from"@radix-ui/react-portal";import*as a from"@radix-ui/react-popper";import{createPopperScope as i}from"@radix-ui/react-popper";import{Primitive as s}from"@radix-ui/react-primitive";import{Presence as l}from"@radix-ui/react-presence";import{FocusScope as d}from"@radix-ui/react-focus-scope";import{DismissableLayer as p}from"@radix-ui/react-dismissable-layer";import{createContextScope as f}from"@radix-ui/react-context";import{useComposedRefs as m,composeRefs as v}from"@radix-ui/react-compose-refs";import{createCollection as g}from"@radix-ui/react-collection";import{composeEventHandlers as M}from"@radix-ui/primitive";import{hideOthers as h}from"aria-hidden";import{RemoveScroll as C}from"react-remove-scroll";import*as E from"react";import w from"@babel/runtime/helpers/esm/extends";const x=["Enter"," "],b=["ArrowUp","PageDown","End"],R=["ArrowDown","PageUp","Home",...b],_={ltr:[...x,"ArrowRight"],rtl:[...x,"ArrowLeft"]},y={ltr:["ArrowLeft"],rtl:["ArrowRight"]},[I,k,P]=g("Menu"),[D,S]=f("Menu",[P,i,c]);export{S as createMenuScope};const O=i(),T=c(),[L,A]=D("Menu");export const Menu=e=>{const{__scopeMenu:n,open:o=!1,children:c,dir:u,onOpenChange:i,modal:s=!0}=e,l=O(n),[d,p]=E.useState(null),f=E.useRef(!1),m=t(i),v=r(u);return E.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__*/E.createElement(a.Root,l,/*#__PURE__*/E.createElement(L,{scope:n,isSubmenu:!1,isUsingKeyboardRef:f,dir:v,open:o,onOpenChange:m,content:d,onContentChange:p,onRootClose:E.useCallback((()=>m(!1)),[m]),modal:s},c))};/*#__PURE__*/export const MenuSub=n=>{const{__scopeMenu:r,children:o,open:c=!1,onOpenChange:u}=n,i=A("MenuSub",r),s=O(r),[l,d]=E.useState(null),[p,f]=E.useState(null),m=t(u);return E.useEffect((()=>(!1===i.open&&m(!1),()=>m(!1))),[i.open,m]),/*#__PURE__*/E.createElement(a.Root,s,/*#__PURE__*/E.createElement(L,{scope:r,isSubmenu:!0,isUsingKeyboardRef:i.isUsingKeyboardRef,dir:i.dir,open:c,onOpenChange:m,content:p,onContentChange:f,onRootClose:i.onRootClose,contentId:e(),trigger:l,onTriggerChange:d,triggerId:e(),modal:!1},o))};/*#__PURE__*/export const MenuAnchor=/*#__PURE__*/E.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e,o=O(t);/*#__PURE__*/return E.createElement(a.Anchor,w({},o,r,{ref:n}))}));/*#__PURE__*/const[F,K]=D("MenuContent");export const MenuContent=/*#__PURE__*/E.forwardRef(((e,n)=>{const{forceMount:t,...r}=e,o=A("MenuContent",e.__scopeMenu);/*#__PURE__*/return E.createElement(I.Provider,{scope:e.__scopeMenu},/*#__PURE__*/E.createElement(l,{present:t||o.open},/*#__PURE__*/E.createElement(I.Slot,{scope:e.__scopeMenu},o.isSubmenu?/*#__PURE__*/E.createElement(X,w({},r,{ref:n})):/*#__PURE__*/E.createElement(G,w({},r,{ref:n})))))}));const G=/*#__PURE__*/E.forwardRef(((e,n)=>A("MenuContent",e.__scopeMenu).modal?/*#__PURE__*/E.createElement(U,w({},e,{ref:n})):/*#__PURE__*/E.createElement(V,w({},e,{ref:n})))),U=/*#__PURE__*/E.forwardRef(((e,n)=>{const t=A("MenuContent",e.__scopeMenu),r=E.useRef(null),o=m(n,r);return E.useEffect((()=>{const e=r.current;if(e)return h(e)}),[]),/*#__PURE__*/E.createElement(B,w({},e,{ref:o,trapFocus:t.open,disableOutsidePointerEvents:t.open,disableOutsideScroll:!0,onFocusOutside:M(e.onFocusOutside,(e=>e.preventDefault()),{checkForDefaultPrevented:!1}),onDismiss:()=>t.onOpenChange(!1)}))})),V=/*#__PURE__*/E.forwardRef(((e,n)=>{const t=A("MenuContent",e.__scopeMenu);/*#__PURE__*/return E.createElement(B,w({},e,{ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>t.onOpenChange(!1)}))})),X=/*#__PURE__*/E.forwardRef(((e,n)=>{const t=A("MenuContent",e.__scopeMenu),r=E.useRef(null),o=m(n,r);return t.isSubmenu?/*#__PURE__*/E.createElement(B,w({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:M(e.onFocusOutside,(e=>{e.target!==t.trigger&&t.onOpenChange(!1)})),onEscapeKeyDown:M(e.onEscapeKeyDown,t.onRootClose),onKeyDown:M(e.onKeyDown,(e=>{const n=e.currentTarget.contains(e.target),r=y[t.dir].includes(e.key);var o;n&&r&&(t.onOpenChange(!1),null===(o=t.trigger)||void 0===o||o.focus(),e.preventDefault())}))})):null})),B=/*#__PURE__*/E.forwardRef(((e,t)=>{const{__scopeMenu:r,loop:c=!1,trapFocus:i,onOpenAutoFocus:s,onCloseAutoFocus:l,disableOutsidePointerEvents:f,onEscapeKeyDown:v,onPointerDownOutside:g,onFocusOutside:h,onInteractOutside:x,onDismiss:_,disableOutsideScroll:y,allowPinchZoom:I,portalled:P,...D}=e,S=A("MenuContent",r),L=O(r),K=T(r),G=k(r),[U,V]=E.useState(null),X=E.useRef(null),B=m(t,X,S.onContentChange),Y=E.useRef(0),Z=E.useRef(""),z=E.useRef(0),H=E.useRef(null),W=E.useRef("right"),q=E.useRef(0),N=P?u:E.Fragment,Q=y?C:E.Fragment,$=y?{allowPinchZoom:I}:void 0,ee=e=>{var n,t;const r=Z.current+e,o=G().filter((e=>!e.disabled)),c=document.activeElement,u=null===(n=o.find((e=>e.ref.current===c)))||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 c=(u=e,a=Math.max(o,0),u.map(((e,n)=>u[(a+n)%u.length])));var u,a;1===r.length&&(c=c.filter((e=>e!==t)));const i=c.find((e=>e.toLowerCase().startsWith(r.toLowerCase())));return i!==t?i:void 0}(o.map((e=>e.textValue)),r,u),i=null===(t=o.find((e=>e.textValue===a)))||void 0===t?void 0:t.ref.current;!function e(n){Z.current=n,window.clearTimeout(Y.current),""!==n&&(Y.current=window.setTimeout((()=>e("")),1e3))}(r),i&&setTimeout((()=>i.focus()))};E.useEffect((()=>()=>window.clearTimeout(Y.current)),[]),n();const ne=E.useCallback((e=>{var n,t;return W.current===(null===(n=H.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,c=n.length-1;e<n.length;c=e++){const u=n[e].x,a=n[e].y,i=n[c].x,s=n[c].y;a>r!=s>r&&t<(i-u)*(r-a)/(s-a)+u&&(o=!o)}return o}({x:e.clientX,y:e.clientY},n)}(e,null===(t=H.current)||void 0===t?void 0:t.area)}),[]);/*#__PURE__*/return E.createElement(N,null,/*#__PURE__*/E.createElement(Q,$,/*#__PURE__*/E.createElement(F,{scope:r,searchRef:Z,onItemEnter:E.useCallback((e=>{ne(e)&&e.preventDefault()}),[ne]),onItemLeave:E.useCallback((e=>{var n;ne(e)||(null===(n=X.current)||void 0===n||n.focus(),V(null))}),[ne]),onTriggerLeave:E.useCallback((e=>{ne(e)&&e.preventDefault()}),[ne]),pointerGraceTimerRef:z,onPointerGraceIntentChange:E.useCallback((e=>{H.current=e}),[])},/*#__PURE__*/E.createElement(d,{asChild:!0,trapped:i,onMountAutoFocus:M(s,(e=>{var n;e.preventDefault(),null===(n=X.current)||void 0===n||n.focus()})),onUnmountAutoFocus:l},/*#__PURE__*/E.createElement(p,{asChild:!0,disableOutsidePointerEvents:f,onEscapeKeyDown:v,onPointerDownOutside:g,onFocusOutside:h,onInteractOutside:x,onDismiss:_},/*#__PURE__*/E.createElement(o.Root,w({asChild:!0},K,{dir:S.dir,orientation:"vertical",loop:c,currentTabStopId:U,onCurrentTabStopIdChange:V,onEntryFocus:e=>{S.isUsingKeyboardRef.current||e.preventDefault()}}),/*#__PURE__*/E.createElement(a.Content,w({role:"menu","aria-orientation":"vertical","data-state":j(S.open),dir:S.dir},L,D,{ref:B,style:{outline:"none",...D.style},onKeyDown:M(D.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&&ee(e.key));const c=X.current;if(e.target!==c)return;if(!R.includes(e.key))return;e.preventDefault();const u=G().filter((e=>!e.disabled)).map((e=>e.ref.current));b.includes(e.key)&&u.reverse(),function(e){const n=document.activeElement;for(const t of e){if(t===n)return;if(t.focus(),document.activeElement!==n)return}}(u)})),onBlur:M(e.onBlur,(e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(Y.current),Z.current="")})),onPointerMove:M(e.onPointerMove,J((e=>{const n=e.target,t=q.current!==e.clientX;if(e.currentTarget.contains(n)&&t){const n=e.clientX>q.current?"right":"left";W.current=n,q.current=e.clientX}})))}))))))))}));export const MenuGroup=/*#__PURE__*/E.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e;/*#__PURE__*/return E.createElement(s.div,w({role:"group"},r,{ref:n}))}));/*#__PURE__*/export const MenuLabel=/*#__PURE__*/E.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e;/*#__PURE__*/return E.createElement(s.div,w({},r,{ref:n}))}));/*#__PURE__*/export const MenuItem=/*#__PURE__*/E.forwardRef(((e,n)=>{const{disabled:t=!1,onSelect:r,...o}=e,c=E.useRef(null),u=A("MenuItem",e.__scopeMenu),a=K("MenuItem",e.__scopeMenu),i=m(n,c),s=E.useRef(!1);/*#__PURE__*/return E.createElement(Y,w({},o,{ref:i,disabled:t,onClick:M(e.onClick,(()=>{const e=c.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:u.onRootClose()}})),onPointerDown:n=>{var t;null===(t=e.onPointerDown)||void 0===t||t.call(e,n),s.current=!0},onPointerUp:M(e.onPointerUp,(e=>{var n;s.current||null===(n=e.currentTarget)||void 0===n||n.click()})),onKeyDown:M(e.onKeyDown,(e=>{const n=""!==a.searchRef.current;t||n&&" "===e.key||x.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())}))}))}));/*#__PURE__*/export const MenuSubTrigger=/*#__PURE__*/E.forwardRef(((e,n)=>{const t=A("MenuSubTrigger",e.__scopeMenu),r=K("MenuSubTrigger",e.__scopeMenu),o=E.useRef(null),{pointerGraceTimerRef:c,onPointerGraceIntentChange:u}=r,a={__scopeMenu:e.__scopeMenu},i=E.useCallback((()=>{o.current&&window.clearTimeout(o.current),o.current=null}),[]);return E.useEffect((()=>i),[i]),E.useEffect((()=>{const e=c.current;return()=>{window.clearTimeout(e),u(null)}}),[c,u]),t.isSubmenu?/*#__PURE__*/E.createElement(MenuAnchor,w({asChild:!0},a),/*#__PURE__*/E.createElement(Y,w({id:t.triggerId,"aria-haspopup":"menu","aria-expanded":t.open,"aria-controls":t.contentId,"data-state":j(t.open)},e,{ref:v(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:M(e.onPointerMove,J((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:M(e.onPointerLeave,J((e=>{var n;i();const o=null===(n=t.content)||void 0===n?void 0:n.getBoundingClientRect();if(o){var u;const n=null===(u=t.content)||void 0===u?void 0:u.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(c.current),c.current=window.setTimeout((()=>r.onPointerGraceIntentChange(null)),300)}else{if(r.onTriggerLeave(e),e.defaultPrevented)return;r.onPointerGraceIntentChange(null)}}))),onKeyDown:M(e.onKeyDown,(n=>{const o=""!==r.searchRef.current;var c;e.disabled||o&&" "===n.key||_[t.dir].includes(n.key)&&(t.onOpenChange(!0),null===(c=t.content)||void 0===c||c.focus(),n.preventDefault())}))}))):null}));/*#__PURE__*/const Y=/*#__PURE__*/E.forwardRef(((e,n)=>{const{__scopeMenu:t,disabled:r=!1,textValue:c,...u}=e,a=K("MenuItem",t),i=T(t),l=E.useRef(null),d=m(n,l),[p,f]=E.useState("");return E.useEffect((()=>{const e=l.current;var n;e&&f((null!==(n=e.textContent)&&void 0!==n?n:"").trim())}),[u.children]),/*#__PURE__*/E.createElement(I.ItemSlot,{scope:t,disabled:r,textValue:null!=c?c:p},/*#__PURE__*/E.createElement(o.Item,w({asChild:!0},i,{focusable:!r}),/*#__PURE__*/E.createElement(s.div,w({role:"menuitem","aria-disabled":r||void 0,"data-disabled":r?"":void 0},u,{ref:d,onPointerMove:M(e.onPointerMove,J((e=>{if(r)a.onItemLeave(e);else if(a.onItemEnter(e),!e.defaultPrevented){e.currentTarget.focus()}}))),onPointerLeave:M(e.onPointerLeave,J((e=>a.onItemLeave(e))))}))))}));export const MenuCheckboxItem=/*#__PURE__*/E.forwardRef(((e,n)=>{const{checked:t=!1,onCheckedChange:r,...o}=e;/*#__PURE__*/return E.createElement(H,{scope:e.__scopeMenu,checked:t},/*#__PURE__*/E.createElement(MenuItem,w({role:"menuitemcheckbox","aria-checked":t},o,{ref:n,"data-state":q(t),onSelect:M(o.onSelect,(()=>null==r?void 0:r(!t)),{checkForDefaultPrevented:!1})})))}));/*#__PURE__*/const[Z,z]=D("MenuRadioGroup",{value:void 0,onValueChange:()=>{}});export const MenuRadioGroup=/*#__PURE__*/E.forwardRef(((e,n)=>{const{value:r,onValueChange:o,...c}=e,u=t(o);/*#__PURE__*/return E.createElement(Z,{scope:e.__scopeMenu,value:r,onValueChange:u},/*#__PURE__*/E.createElement(MenuGroup,w({},c,{ref:n})))}));/*#__PURE__*/export const MenuRadioItem=/*#__PURE__*/E.forwardRef(((e,n)=>{const{value:t,...r}=e,o=z("MenuRadioItem",e.__scopeMenu),c=t===o.value;/*#__PURE__*/return E.createElement(H,{scope:e.__scopeMenu,checked:c},/*#__PURE__*/E.createElement(MenuItem,w({role:"menuitemradio","aria-checked":c},r,{ref:n,"data-state":q(c),onSelect:M(r.onSelect,(()=>{var e;return null===(e=o.onValueChange)||void 0===e?void 0:e.call(o,t)}),{checkForDefaultPrevented:!1})})))}));/*#__PURE__*/const[H,W]=D("MenuItemIndicator",{checked:!1});export const MenuItemIndicator=/*#__PURE__*/E.forwardRef(((e,n)=>{const{__scopeMenu:t,forceMount:r,...o}=e,c=W("MenuItemIndicator",t);/*#__PURE__*/return E.createElement(l,{present:r||c.checked},/*#__PURE__*/E.createElement(s.span,w({},o,{ref:n,"data-state":q(c.checked)})))}));/*#__PURE__*/export const MenuSeparator=/*#__PURE__*/E.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e;/*#__PURE__*/return E.createElement(s.div,w({role:"separator","aria-orientation":"horizontal"},r,{ref:n}))}));/*#__PURE__*/export const MenuArrow=/*#__PURE__*/E.forwardRef(((e,n)=>{const{__scopeMenu:t,...r}=e,o=O(t);/*#__PURE__*/return E.createElement(a.Arrow,w({},o,r,{ref:n}))}));/*#__PURE__*/function j(e){return e?"open":"closed"}function q(e){return e?"checked":"unchecked"}function J(e){return n=>"mouse"===n.pointerType?e(n):void 0}export const Root=Menu;export const Sub=MenuSub;export const Anchor=MenuAnchor;export const SubTrigger=MenuSubTrigger;export const Content=MenuContent;export const Group=MenuGroup;export const Label=MenuLabel;export const Item=MenuItem;export const CheckboxItem=MenuCheckboxItem;export const RadioGroup=MenuRadioGroup;export const RadioItem=MenuRadioItem;export const ItemIndicator=MenuItemIndicator;export const Separator=MenuSeparator;export const Arrow=MenuArrow; | ||
import $epM9y$babelruntimehelpersesmextends from "@babel/runtime/helpers/esm/extends"; | ||
import {useState as $epM9y$useState, useRef as $epM9y$useRef, useEffect as $epM9y$useEffect, createElement as $epM9y$createElement, useCallback as $epM9y$useCallback, forwardRef as $epM9y$forwardRef, Fragment as $epM9y$Fragment} from "react"; | ||
import {RemoveScroll as $epM9y$RemoveScroll} from "react-remove-scroll"; | ||
import {hideOthers as $epM9y$hideOthers} from "aria-hidden"; | ||
import {composeEventHandlers as $epM9y$composeEventHandlers} from "@radix-ui/primitive"; | ||
import {createCollection as $epM9y$createCollection} from "@radix-ui/react-collection"; | ||
import {useComposedRefs as $epM9y$useComposedRefs, composeRefs as $epM9y$composeRefs} from "@radix-ui/react-compose-refs"; | ||
import {createContextScope as $epM9y$createContextScope} from "@radix-ui/react-context"; | ||
import {DismissableLayer as $epM9y$DismissableLayer} from "@radix-ui/react-dismissable-layer"; | ||
import {FocusScope as $epM9y$FocusScope} from "@radix-ui/react-focus-scope"; | ||
import {Presence as $epM9y$Presence} from "@radix-ui/react-presence"; | ||
import {Primitive as $epM9y$Primitive} from "@radix-ui/react-primitive"; | ||
import {createPopperScope as $epM9y$createPopperScope, Root as $epM9y$Root, Anchor as $epM9y$Anchor, Content as $epM9y$Content, Arrow as $epM9y$Arrow} from "@radix-ui/react-popper"; | ||
import {Portal as $epM9y$Portal} from "@radix-ui/react-portal"; | ||
import {createRovingFocusGroupScope as $epM9y$createRovingFocusGroupScope, Root as $epM9y$Root1, Item as $epM9y$Item} from "@radix-ui/react-roving-focus"; | ||
import {useDirection as $epM9y$useDirection} from "@radix-ui/react-direction"; | ||
import {useCallbackRef as $epM9y$useCallbackRef} from "@radix-ui/react-use-callback-ref"; | ||
import {useFocusGuards as $epM9y$useFocusGuards} from "@radix-ui/react-focus-guards"; | ||
import {useId as $epM9y$useId} from "@radix-ui/react-id"; | ||
function $parcel$export(e, n, v, s) { | ||
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); | ||
} | ||
var $6cc32821e9371a1c$exports = {}; | ||
$parcel$export($6cc32821e9371a1c$exports, "createMenuScope", () => $6cc32821e9371a1c$export$4027731b685e72eb); | ||
$parcel$export($6cc32821e9371a1c$exports, "Menu", () => $6cc32821e9371a1c$export$d9b273488cd8ce6f); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuSub", () => $6cc32821e9371a1c$export$71bdb9d1e2909932); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuAnchor", () => $6cc32821e9371a1c$export$9fa5ebd18bee4d43); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuContent", () => $6cc32821e9371a1c$export$479f0f2f71193efe); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuGroup", () => $6cc32821e9371a1c$export$22a631d1f72787bb); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuLabel", () => $6cc32821e9371a1c$export$dd37bec0e8a99143); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuItem", () => $6cc32821e9371a1c$export$2ce376c2cc3355c8); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuSubTrigger", () => $6cc32821e9371a1c$export$5fbbb3ba7297405f); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuCheckboxItem", () => $6cc32821e9371a1c$export$f6f243521332502d); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuRadioGroup", () => $6cc32821e9371a1c$export$ea2200c9eee416b3); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuRadioItem", () => $6cc32821e9371a1c$export$69bd225e9817f6d0); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuItemIndicator", () => $6cc32821e9371a1c$export$a2593e23056970a3); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuSeparator", () => $6cc32821e9371a1c$export$1cec7dcdd713e220); | ||
$parcel$export($6cc32821e9371a1c$exports, "MenuArrow", () => $6cc32821e9371a1c$export$bcdda4773debf5fa); | ||
$parcel$export($6cc32821e9371a1c$exports, "Root", () => $6cc32821e9371a1c$export$be92b6f5f03c0fe9); | ||
$parcel$export($6cc32821e9371a1c$exports, "Sub", () => $6cc32821e9371a1c$export$d7a01e11500dfb6f); | ||
$parcel$export($6cc32821e9371a1c$exports, "Anchor", () => $6cc32821e9371a1c$export$b688253958b8dfe7); | ||
$parcel$export($6cc32821e9371a1c$exports, "SubTrigger", () => $6cc32821e9371a1c$export$2ea8a7a591ac5eac); | ||
$parcel$export($6cc32821e9371a1c$exports, "Content", () => $6cc32821e9371a1c$export$7c6e2c02157bb7d2); | ||
$parcel$export($6cc32821e9371a1c$exports, "Group", () => $6cc32821e9371a1c$export$eb2fcfdbd7ba97d4); | ||
$parcel$export($6cc32821e9371a1c$exports, "Label", () => $6cc32821e9371a1c$export$b04be29aa201d4f5); | ||
$parcel$export($6cc32821e9371a1c$exports, "Item", () => $6cc32821e9371a1c$export$6d08773d2e66f8f2); | ||
$parcel$export($6cc32821e9371a1c$exports, "CheckboxItem", () => $6cc32821e9371a1c$export$16ce288f89fa631c); | ||
$parcel$export($6cc32821e9371a1c$exports, "RadioGroup", () => $6cc32821e9371a1c$export$a98f0dcb43a68a25); | ||
$parcel$export($6cc32821e9371a1c$exports, "RadioItem", () => $6cc32821e9371a1c$export$371ab307eab489c0); | ||
$parcel$export($6cc32821e9371a1c$exports, "ItemIndicator", () => $6cc32821e9371a1c$export$c3468e2714d175fa); | ||
$parcel$export($6cc32821e9371a1c$exports, "Separator", () => $6cc32821e9371a1c$export$1ff3c3f08ae963c0); | ||
$parcel$export($6cc32821e9371a1c$exports, "Arrow", () => $6cc32821e9371a1c$export$21b07c8f274aebd5); | ||
const $6cc32821e9371a1c$var$SELECTION_KEYS = [ | ||
'Enter', | ||
' ' | ||
]; | ||
const $6cc32821e9371a1c$var$FIRST_KEYS = [ | ||
'ArrowDown', | ||
'PageUp', | ||
'Home' | ||
]; | ||
const $6cc32821e9371a1c$var$LAST_KEYS = [ | ||
'ArrowUp', | ||
'PageDown', | ||
'End' | ||
]; | ||
const $6cc32821e9371a1c$var$FIRST_LAST_KEYS = [ | ||
...$6cc32821e9371a1c$var$FIRST_KEYS, | ||
...$6cc32821e9371a1c$var$LAST_KEYS | ||
]; | ||
const $6cc32821e9371a1c$var$SUB_OPEN_KEYS = { | ||
ltr: [ | ||
...$6cc32821e9371a1c$var$SELECTION_KEYS, | ||
'ArrowRight' | ||
], | ||
rtl: [ | ||
...$6cc32821e9371a1c$var$SELECTION_KEYS, | ||
'ArrowLeft' | ||
] | ||
}; | ||
const $6cc32821e9371a1c$var$SUB_CLOSE_KEYS = { | ||
ltr: [ | ||
'ArrowLeft' | ||
], | ||
rtl: [ | ||
'ArrowRight' | ||
] | ||
}; | ||
/* ------------------------------------------------------------------------------------------------- | ||
* Menu | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$MENU_NAME = 'Menu'; | ||
const [$6cc32821e9371a1c$var$Collection, $6cc32821e9371a1c$var$useCollection, $6cc32821e9371a1c$var$createCollectionScope] = $epM9y$createCollection($6cc32821e9371a1c$var$MENU_NAME); | ||
const [$6cc32821e9371a1c$var$createMenuContext, $6cc32821e9371a1c$export$4027731b685e72eb] = $epM9y$createContextScope($6cc32821e9371a1c$var$MENU_NAME, [ | ||
$6cc32821e9371a1c$var$createCollectionScope, | ||
$epM9y$createPopperScope, | ||
$epM9y$createRovingFocusGroupScope | ||
]); | ||
const $6cc32821e9371a1c$var$usePopperScope = $epM9y$createPopperScope(); | ||
const $6cc32821e9371a1c$var$useRovingFocusGroupScope = $epM9y$createRovingFocusGroupScope(); | ||
const [$6cc32821e9371a1c$var$MenuProvider, $6cc32821e9371a1c$var$useMenuContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$MENU_NAME); | ||
const $6cc32821e9371a1c$export$d9b273488cd8ce6f = (props)=>{ | ||
const { __scopeMenu: __scopeMenu , open: open = false , children: children , dir: dir , onOpenChange: onOpenChange , modal: modal = true } = props; | ||
const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu); | ||
const [content, setContent] = $epM9y$useState(null); | ||
const isUsingKeyboardRef = $epM9y$useRef(false); | ||
const handleOpenChange = $epM9y$useCallbackRef(onOpenChange); | ||
const direction = $epM9y$useDirection(dir); | ||
$epM9y$useEffect(()=>{ | ||
// Capture phase ensures we set the boolean before any side effects execute | ||
// in response to the key or pointer event as they might depend on this value. | ||
const handleKeyDown = ()=>{ | ||
isUsingKeyboardRef.current = true; | ||
document.addEventListener('pointerdown', handlePointer, { | ||
capture: true, | ||
once: true | ||
}); | ||
document.addEventListener('pointermove', handlePointer, { | ||
capture: true, | ||
once: true | ||
}); | ||
}; | ||
const handlePointer = ()=>isUsingKeyboardRef.current = false | ||
; | ||
document.addEventListener('keydown', handleKeyDown, { | ||
capture: true | ||
}); | ||
return ()=>{ | ||
document.removeEventListener('keydown', handleKeyDown, { | ||
capture: true | ||
}); | ||
document.removeEventListener('pointerdown', handlePointer, { | ||
capture: true | ||
}); | ||
document.removeEventListener('pointermove', handlePointer, { | ||
capture: true | ||
}); | ||
}; | ||
}, []); | ||
return /*#__PURE__*/ $epM9y$createElement($epM9y$Root, popperScope, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuProvider, { | ||
scope: __scopeMenu, | ||
isSubmenu: false, | ||
isUsingKeyboardRef: isUsingKeyboardRef, | ||
dir: direction, | ||
open: open, | ||
onOpenChange: handleOpenChange, | ||
content: content, | ||
onContentChange: setContent, | ||
onRootClose: $epM9y$useCallback(()=>handleOpenChange(false) | ||
, [ | ||
handleOpenChange | ||
]), | ||
modal: modal | ||
}, children)); | ||
}; | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$d9b273488cd8ce6f, { | ||
displayName: $6cc32821e9371a1c$var$MENU_NAME | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$SUB_NAME = 'MenuSub'; | ||
const $6cc32821e9371a1c$export$71bdb9d1e2909932 = (props)=>{ | ||
const { __scopeMenu: __scopeMenu , children: children , open: open = false , onOpenChange: onOpenChange } = props; | ||
const parentMenuContext = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$SUB_NAME, __scopeMenu); | ||
const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu); | ||
const [trigger, setTrigger] = $epM9y$useState(null); | ||
const [content, setContent] = $epM9y$useState(null); | ||
const handleOpenChange = $epM9y$useCallbackRef(onOpenChange); // Prevent the parent menu from reopening with open submenus. | ||
$epM9y$useEffect(()=>{ | ||
if (parentMenuContext.open === false) handleOpenChange(false); | ||
return ()=>handleOpenChange(false) | ||
; | ||
}, [ | ||
parentMenuContext.open, | ||
handleOpenChange | ||
]); | ||
return /*#__PURE__*/ $epM9y$createElement($epM9y$Root, popperScope, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuProvider, { | ||
scope: __scopeMenu, | ||
isSubmenu: true, | ||
isUsingKeyboardRef: parentMenuContext.isUsingKeyboardRef, | ||
dir: parentMenuContext.dir, | ||
open: open, | ||
onOpenChange: handleOpenChange, | ||
content: content, | ||
onContentChange: setContent, | ||
onRootClose: parentMenuContext.onRootClose, | ||
contentId: $epM9y$useId(), | ||
trigger: trigger, | ||
onTriggerChange: setTrigger, | ||
triggerId: $epM9y$useId(), | ||
modal: false | ||
}, children)); | ||
}; | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$71bdb9d1e2909932, { | ||
displayName: $6cc32821e9371a1c$var$SUB_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuAnchor | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$ANCHOR_NAME = 'MenuAnchor'; | ||
const $6cc32821e9371a1c$export$9fa5ebd18bee4d43 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...anchorProps } = props; | ||
const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu); | ||
return /*#__PURE__*/ $epM9y$createElement($epM9y$Anchor, $epM9y$babelruntimehelpersesmextends({}, popperScope, anchorProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$9fa5ebd18bee4d43, { | ||
displayName: $6cc32821e9371a1c$var$ANCHOR_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuContent | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$CONTENT_NAME = 'MenuContent'; | ||
const [$6cc32821e9371a1c$var$MenuContentProvider, $6cc32821e9371a1c$var$useMenuContentContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$CONTENT_NAME); | ||
const $6cc32821e9371a1c$export$479f0f2f71193efe = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { forceMount: forceMount , ...contentProps } = props; | ||
const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu); | ||
return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$Collection.Provider, { | ||
scope: props.__scopeMenu | ||
}, /*#__PURE__*/ $epM9y$createElement($epM9y$Presence, { | ||
present: forceMount || context.open | ||
}, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$Collection.Slot, { | ||
scope: props.__scopeMenu | ||
}, context.isSubmenu ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuSubContent, $epM9y$babelruntimehelpersesmextends({}, contentProps, { | ||
ref: forwardedRef | ||
})) : /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootContent, $epM9y$babelruntimehelpersesmextends({}, contentProps, { | ||
ref: forwardedRef | ||
}))))); | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuRootContent = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu); | ||
return context.modal ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootContentModal, $epM9y$babelruntimehelpersesmextends({}, props, { | ||
ref: forwardedRef | ||
})) : /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuRootContentNonModal, $epM9y$babelruntimehelpersesmextends({}, props, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
const $6cc32821e9371a1c$var$MenuRootContentModal = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu); | ||
const ref = $epM9y$useRef(null); | ||
const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref); // Hide everything from ARIA except the `MenuContent` | ||
$epM9y$useEffect(()=>{ | ||
const content = ref.current; | ||
if (content) return $epM9y$hideOthers(content); | ||
}, []); | ||
return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuContentImpl, $epM9y$babelruntimehelpersesmextends({}, props, { | ||
ref: composedRefs // we make sure we're not trapping once it's been closed | ||
, | ||
trapFocus: context.open // make sure to only disable pointer events when open | ||
, | ||
disableOutsidePointerEvents: context.open, | ||
disableOutsideScroll: true // When focus is trapped, a `focusout` event may still happen. | ||
, | ||
onFocusOutside: $epM9y$composeEventHandlers(props.onFocusOutside, (event)=>event.preventDefault() | ||
, { | ||
checkForDefaultPrevented: false | ||
}), | ||
onDismiss: ()=>context.onOpenChange(false) | ||
})); | ||
}); | ||
const $6cc32821e9371a1c$var$MenuRootContentNonModal = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu); | ||
return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuContentImpl, $epM9y$babelruntimehelpersesmextends({}, props, { | ||
ref: forwardedRef, | ||
trapFocus: false, | ||
disableOutsidePointerEvents: false, | ||
disableOutsideScroll: false, | ||
onDismiss: ()=>context.onOpenChange(false) | ||
})); | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuSubContent = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, props.__scopeMenu); | ||
const ref = $epM9y$useRef(null); | ||
const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref); | ||
return context.isSubmenu ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuContentImpl, $epM9y$babelruntimehelpersesmextends({ | ||
id: context.contentId, | ||
"aria-labelledby": context.triggerId | ||
}, props, { | ||
ref: composedRefs, | ||
align: "start", | ||
side: context.dir === 'rtl' ? 'left' : 'right', | ||
portalled: true, | ||
disableOutsidePointerEvents: false, | ||
disableOutsideScroll: false, | ||
trapFocus: false, | ||
onOpenAutoFocus: (event)=>{ | ||
var _ref$current; | ||
// when opening a submenu, focus content for keyboard users only | ||
if (context.isUsingKeyboardRef.current) (_ref$current = ref.current) === null || _ref$current === void 0 || _ref$current.focus(); | ||
event.preventDefault(); | ||
} // The menu might close because of focusing another menu item in the parent menu. We | ||
, | ||
onCloseAutoFocus: (event)=>event.preventDefault() | ||
, | ||
onFocusOutside: $epM9y$composeEventHandlers(props.onFocusOutside, (event)=>{ | ||
// We prevent closing when the trigger is focused to avoid triggering a re-open animation | ||
// on pointer interaction. | ||
if (event.target !== context.trigger) context.onOpenChange(false); | ||
}), | ||
onEscapeKeyDown: $epM9y$composeEventHandlers(props.onEscapeKeyDown, context.onRootClose), | ||
onKeyDown: $epM9y$composeEventHandlers(props.onKeyDown, (event)=>{ | ||
// Submenu key events bubble through portals. We only care about keys in this menu. | ||
const isKeyDownInside = event.currentTarget.contains(event.target); | ||
const isCloseKey = $6cc32821e9371a1c$var$SUB_CLOSE_KEYS[context.dir].includes(event.key); | ||
if (isKeyDownInside && isCloseKey) { | ||
var _context$trigger; | ||
context.onOpenChange(false); // We focus manually because we prevented it in `onCloseAutoFocus` | ||
(_context$trigger = context.trigger) === null || _context$trigger === void 0 || _context$trigger.focus(); // prevent window from scrolling | ||
event.preventDefault(); | ||
} | ||
}) | ||
})) : null; | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuContentImpl = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , loop: loop = false , trapFocus: trapFocus , onOpenAutoFocus: onOpenAutoFocus , onCloseAutoFocus: onCloseAutoFocus , disableOutsidePointerEvents: disableOutsidePointerEvents , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , onFocusOutside: onFocusOutside , onInteractOutside: onInteractOutside , onDismiss: onDismiss , disableOutsideScroll: disableOutsideScroll , allowPinchZoom: allowPinchZoom , portalled: portalled , ...contentProps } = props; | ||
const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$CONTENT_NAME, __scopeMenu); | ||
const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu); | ||
const rovingFocusGroupScope = $6cc32821e9371a1c$var$useRovingFocusGroupScope(__scopeMenu); | ||
const getItems = $6cc32821e9371a1c$var$useCollection(__scopeMenu); | ||
const [currentItemId, setCurrentItemId] = $epM9y$useState(null); | ||
const contentRef = $epM9y$useRef(null); | ||
const composedRefs = $epM9y$useComposedRefs(forwardedRef, contentRef, context.onContentChange); | ||
const timerRef = $epM9y$useRef(0); | ||
const searchRef = $epM9y$useRef(''); | ||
const pointerGraceTimerRef = $epM9y$useRef(0); | ||
const pointerGraceIntentRef = $epM9y$useRef(null); | ||
const pointerDirRef = $epM9y$useRef('right'); | ||
const lastPointerXRef = $epM9y$useRef(0); | ||
const PortalWrapper = portalled ? $epM9y$Portal : $epM9y$Fragment; | ||
const ScrollLockWrapper = disableOutsideScroll ? $epM9y$RemoveScroll : $epM9y$Fragment; | ||
const scrollLockWrapperProps = disableOutsideScroll ? { | ||
allowPinchZoom: allowPinchZoom | ||
} : undefined; | ||
const handleTypeaheadSearch = (key)=>{ | ||
var _items$find, _items$find2; | ||
const search = searchRef.current + key; | ||
const items = getItems().filter((item)=>!item.disabled | ||
); | ||
const currentItem = document.activeElement; | ||
const currentMatch = (_items$find = items.find((item)=>item.ref.current === currentItem | ||
)) === null || _items$find === void 0 ? void 0 : _items$find.textValue; | ||
const values = items.map((item)=>item.textValue | ||
); | ||
const nextMatch = $6cc32821e9371a1c$var$getNextMatch(values, search, currentMatch); | ||
const newItem = (_items$find2 = items.find((item)=>item.textValue === nextMatch | ||
)) === null || _items$find2 === void 0 ? void 0 : _items$find2.ref.current; // Reset `searchRef` 1 second after it was last updated | ||
(function updateSearch(value) { | ||
searchRef.current = value; | ||
window.clearTimeout(timerRef.current); | ||
if (value !== '') timerRef.current = window.setTimeout(()=>updateSearch('') | ||
, 1000); | ||
})(search); | ||
if (newItem) /** | ||
* Imperative focus during keydown is risky so we prevent React's batching updates | ||
* to avoid potential bugs. See: https://github.com/facebook/react/issues/20332 | ||
*/ setTimeout(()=>newItem.focus() | ||
); | ||
}; | ||
$epM9y$useEffect(()=>{ | ||
return ()=>window.clearTimeout(timerRef.current) | ||
; | ||
}, []); // Make sure the whole tree has focus guards as our `MenuContent` may be | ||
// the last element in the DOM (beacuse of the `Portal`) | ||
$epM9y$useFocusGuards(); | ||
const isPointerMovingToSubmenu = $epM9y$useCallback((event)=>{ | ||
var _pointerGraceIntentRe, _pointerGraceIntentRe2; | ||
const isMovingTowards = pointerDirRef.current === ((_pointerGraceIntentRe = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe === void 0 ? void 0 : _pointerGraceIntentRe.side); | ||
return isMovingTowards && $6cc32821e9371a1c$var$isPointerInGraceArea(event, (_pointerGraceIntentRe2 = pointerGraceIntentRef.current) === null || _pointerGraceIntentRe2 === void 0 ? void 0 : _pointerGraceIntentRe2.area); | ||
}, []); | ||
return /*#__PURE__*/ $epM9y$createElement(PortalWrapper, null, /*#__PURE__*/ $epM9y$createElement(ScrollLockWrapper, scrollLockWrapperProps, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuContentProvider, { | ||
scope: __scopeMenu, | ||
searchRef: searchRef, | ||
onItemEnter: $epM9y$useCallback((event)=>{ | ||
if (isPointerMovingToSubmenu(event)) event.preventDefault(); | ||
}, [ | ||
isPointerMovingToSubmenu | ||
]), | ||
onItemLeave: $epM9y$useCallback((event)=>{ | ||
var _contentRef$current; | ||
if (isPointerMovingToSubmenu(event)) return; | ||
(_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 || _contentRef$current.focus(); | ||
setCurrentItemId(null); | ||
}, [ | ||
isPointerMovingToSubmenu | ||
]), | ||
onTriggerLeave: $epM9y$useCallback((event)=>{ | ||
if (isPointerMovingToSubmenu(event)) event.preventDefault(); | ||
}, [ | ||
isPointerMovingToSubmenu | ||
]), | ||
pointerGraceTimerRef: pointerGraceTimerRef, | ||
onPointerGraceIntentChange: $epM9y$useCallback((intent)=>{ | ||
pointerGraceIntentRef.current = intent; | ||
}, []) | ||
}, /*#__PURE__*/ $epM9y$createElement($epM9y$FocusScope, { | ||
asChild: true, | ||
trapped: trapFocus, | ||
onMountAutoFocus: $epM9y$composeEventHandlers(onOpenAutoFocus, (event)=>{ | ||
var _contentRef$current2; | ||
// when opening, explicitly focus the content area only and leave | ||
// `onEntryFocus` in control of focusing first item | ||
event.preventDefault(); | ||
(_contentRef$current2 = contentRef.current) === null || _contentRef$current2 === void 0 || _contentRef$current2.focus(); | ||
}), | ||
onUnmountAutoFocus: onCloseAutoFocus | ||
}, /*#__PURE__*/ $epM9y$createElement($epM9y$DismissableLayer, { | ||
asChild: true, | ||
disableOutsidePointerEvents: disableOutsidePointerEvents, | ||
onEscapeKeyDown: onEscapeKeyDown, | ||
onPointerDownOutside: onPointerDownOutside, | ||
onFocusOutside: onFocusOutside, | ||
onInteractOutside: onInteractOutside, | ||
onDismiss: onDismiss | ||
}, /*#__PURE__*/ $epM9y$createElement($epM9y$Root1, $epM9y$babelruntimehelpersesmextends({ | ||
asChild: true | ||
}, rovingFocusGroupScope, { | ||
dir: context.dir, | ||
orientation: "vertical", | ||
loop: loop, | ||
currentTabStopId: currentItemId, | ||
onCurrentTabStopIdChange: setCurrentItemId, | ||
onEntryFocus: (event)=>{ | ||
// only focus first item when using keyboard | ||
if (!context.isUsingKeyboardRef.current) event.preventDefault(); | ||
} | ||
}), /*#__PURE__*/ $epM9y$createElement($epM9y$Content, $epM9y$babelruntimehelpersesmextends({ | ||
role: "menu", | ||
"aria-orientation": "vertical", | ||
"data-state": $6cc32821e9371a1c$var$getOpenState(context.open), | ||
dir: context.dir | ||
}, popperScope, contentProps, { | ||
ref: composedRefs, | ||
style: { | ||
outline: 'none', | ||
...contentProps.style | ||
}, | ||
onKeyDown: $epM9y$composeEventHandlers(contentProps.onKeyDown, (event)=>{ | ||
// submenu key events bubble through portals. We only care about keys in this menu. | ||
const target = event.target; | ||
const isKeyDownInside = event.currentTarget.contains(target); | ||
const isModifierKey = event.ctrlKey || event.altKey || event.metaKey; | ||
const isCharacterKey = event.key.length === 1; | ||
if (isKeyDownInside) { | ||
// menus should not be navigated using tab key so we prevent it | ||
if (event.key === 'Tab') event.preventDefault(); | ||
if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key); | ||
} // focus first/last item based on key pressed | ||
const content = contentRef.current; | ||
if (event.target !== content) return; | ||
if (!$6cc32821e9371a1c$var$FIRST_LAST_KEYS.includes(event.key)) return; | ||
event.preventDefault(); | ||
const items = getItems().filter((item)=>!item.disabled | ||
); | ||
const candidateNodes = items.map((item)=>item.ref.current | ||
); | ||
if ($6cc32821e9371a1c$var$LAST_KEYS.includes(event.key)) candidateNodes.reverse(); | ||
$6cc32821e9371a1c$var$focusFirst(candidateNodes); | ||
}), | ||
onBlur: $epM9y$composeEventHandlers(props.onBlur, (event)=>{ | ||
// clear search buffer when leaving the menu | ||
if (!event.currentTarget.contains(event.target)) { | ||
window.clearTimeout(timerRef.current); | ||
searchRef.current = ''; | ||
} | ||
}), | ||
onPointerMove: $epM9y$composeEventHandlers(props.onPointerMove, $6cc32821e9371a1c$var$whenMouse((event)=>{ | ||
const target = event.target; | ||
const pointerXHasChanged = lastPointerXRef.current !== event.clientX; // We don't use `event.movementX` for this check because Safari will | ||
// always return `0` on a pointer event. | ||
if (event.currentTarget.contains(target) && pointerXHasChanged) { | ||
const newDir = event.clientX > lastPointerXRef.current ? 'right' : 'left'; | ||
pointerDirRef.current = newDir; | ||
lastPointerXRef.current = event.clientX; | ||
} | ||
})) | ||
})))))))); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$479f0f2f71193efe, { | ||
displayName: $6cc32821e9371a1c$var$CONTENT_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuGroup | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$GROUP_NAME = 'MenuGroup'; | ||
const $6cc32821e9371a1c$export$22a631d1f72787bb = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...groupProps } = props; | ||
return /*#__PURE__*/ $epM9y$createElement($epM9y$Primitive.div, $epM9y$babelruntimehelpersesmextends({ | ||
role: "group" | ||
}, groupProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$22a631d1f72787bb, { | ||
displayName: $6cc32821e9371a1c$var$GROUP_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuLabel | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$LABEL_NAME = 'MenuLabel'; | ||
const $6cc32821e9371a1c$export$dd37bec0e8a99143 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...labelProps } = props; | ||
return /*#__PURE__*/ $epM9y$createElement($epM9y$Primitive.div, $epM9y$babelruntimehelpersesmextends({}, labelProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$dd37bec0e8a99143, { | ||
displayName: $6cc32821e9371a1c$var$LABEL_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuItem | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$ITEM_NAME = 'MenuItem'; | ||
const $6cc32821e9371a1c$var$ITEM_SELECT = 'menu.itemSelect'; | ||
const $6cc32821e9371a1c$export$2ce376c2cc3355c8 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { disabled: disabled = false , onSelect: onSelect , ...itemProps } = props; | ||
const ref = $epM9y$useRef(null); | ||
const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$ITEM_NAME, props.__scopeMenu); | ||
const contentContext = $6cc32821e9371a1c$var$useMenuContentContext($6cc32821e9371a1c$var$ITEM_NAME, props.__scopeMenu); | ||
const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref); | ||
const isPointerDownRef = $epM9y$useRef(false); | ||
const handleSelect = ()=>{ | ||
const menuItem = ref.current; | ||
if (!disabled && menuItem) { | ||
const itemSelectEvent = new Event($6cc32821e9371a1c$var$ITEM_SELECT, { | ||
bubbles: true, | ||
cancelable: true | ||
}); | ||
menuItem.addEventListener($6cc32821e9371a1c$var$ITEM_SELECT, (event)=>onSelect === null || onSelect === void 0 ? void 0 : onSelect(event) | ||
, { | ||
once: true | ||
}); | ||
menuItem.dispatchEvent(itemSelectEvent); | ||
if (itemSelectEvent.defaultPrevented) isPointerDownRef.current = false; | ||
else context.onRootClose(); | ||
} | ||
}; | ||
return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuItemImpl, $epM9y$babelruntimehelpersesmextends({}, itemProps, { | ||
ref: composedRefs, | ||
disabled: disabled, | ||
onClick: $epM9y$composeEventHandlers(props.onClick, handleSelect), | ||
onPointerDown: (event)=>{ | ||
var _props$onPointerDown; | ||
(_props$onPointerDown = props.onPointerDown) === null || _props$onPointerDown === void 0 || _props$onPointerDown.call(props, event); | ||
isPointerDownRef.current = true; | ||
}, | ||
onPointerUp: $epM9y$composeEventHandlers(props.onPointerUp, (event)=>{ | ||
var _event$currentTarget; | ||
// Pointer down can move to a different menu item which should activate it on pointer up. | ||
// We dispatch a click for selection to allow composition with click based triggers and to | ||
// prevent Firefox from getting stuck in text selection mode when the menu closes. | ||
if (!isPointerDownRef.current) (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || _event$currentTarget.click(); | ||
}), | ||
onKeyDown: $epM9y$composeEventHandlers(props.onKeyDown, (event)=>{ | ||
const isTypingAhead = contentContext.searchRef.current !== ''; | ||
if (disabled || isTypingAhead && event.key === ' ') return; | ||
if ($6cc32821e9371a1c$var$SELECTION_KEYS.includes(event.key)) { | ||
event.currentTarget.click(); | ||
/** | ||
* We prevent default browser behaviour for selection keys as they should trigger | ||
* a selection only: | ||
* - prevents space from scrolling the page. | ||
* - if keydown causes focus to move, prevents keydown from firing on the new target. | ||
*/ event.preventDefault(); | ||
} | ||
}) | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$2ce376c2cc3355c8, { | ||
displayName: $6cc32821e9371a1c$var$ITEM_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuSubTrigger | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$SUB_TRIGGER_NAME = 'MenuSubTrigger'; | ||
const $6cc32821e9371a1c$export$5fbbb3ba7297405f = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const context = $6cc32821e9371a1c$var$useMenuContext($6cc32821e9371a1c$var$SUB_TRIGGER_NAME, props.__scopeMenu); | ||
const contentContext = $6cc32821e9371a1c$var$useMenuContentContext($6cc32821e9371a1c$var$SUB_TRIGGER_NAME, props.__scopeMenu); | ||
const openTimerRef = $epM9y$useRef(null); | ||
const { pointerGraceTimerRef: pointerGraceTimerRef , onPointerGraceIntentChange: onPointerGraceIntentChange } = contentContext; | ||
const scope = { | ||
__scopeMenu: props.__scopeMenu | ||
}; | ||
const clearOpenTimer = $epM9y$useCallback(()=>{ | ||
if (openTimerRef.current) window.clearTimeout(openTimerRef.current); | ||
openTimerRef.current = null; | ||
}, []); | ||
$epM9y$useEffect(()=>clearOpenTimer | ||
, [ | ||
clearOpenTimer | ||
]); | ||
$epM9y$useEffect(()=>{ | ||
const pointerGraceTimer = pointerGraceTimerRef.current; | ||
return ()=>{ | ||
window.clearTimeout(pointerGraceTimer); | ||
onPointerGraceIntentChange(null); | ||
}; | ||
}, [ | ||
pointerGraceTimerRef, | ||
onPointerGraceIntentChange | ||
]); | ||
return context.isSubmenu ? /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$export$9fa5ebd18bee4d43, $epM9y$babelruntimehelpersesmextends({ | ||
asChild: true | ||
}, scope), /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$MenuItemImpl, $epM9y$babelruntimehelpersesmextends({ | ||
id: context.triggerId, | ||
"aria-haspopup": "menu", | ||
"aria-expanded": context.open, | ||
"aria-controls": context.contentId, | ||
"data-state": $6cc32821e9371a1c$var$getOpenState(context.open) | ||
}, props, { | ||
ref: $epM9y$composeRefs(forwardedRef, context.onTriggerChange) // This is redundant for mouse users but we cannot determine pointer type from | ||
, | ||
onClick: (event)=>{ | ||
var _props$onClick; | ||
(_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, event); | ||
if (props.disabled || event.defaultPrevented) return; | ||
/** | ||
* We manually focus because iOS Safari doesn't always focus on click (e.g. buttons) | ||
* and we rely heavily on `onFocusOutside` for submenus to close when switching | ||
* between separate submenus. | ||
*/ event.currentTarget.focus(); | ||
if (!context.open) context.onOpenChange(true); | ||
}, | ||
onPointerMove: $epM9y$composeEventHandlers(props.onPointerMove, $6cc32821e9371a1c$var$whenMouse((event)=>{ | ||
contentContext.onItemEnter(event); | ||
if (event.defaultPrevented) return; | ||
if (!props.disabled && !context.open && !openTimerRef.current) { | ||
contentContext.onPointerGraceIntentChange(null); | ||
openTimerRef.current = window.setTimeout(()=>{ | ||
context.onOpenChange(true); | ||
clearOpenTimer(); | ||
}, 100); | ||
} | ||
})), | ||
onPointerLeave: $epM9y$composeEventHandlers(props.onPointerLeave, $6cc32821e9371a1c$var$whenMouse((event)=>{ | ||
var _context$content; | ||
clearOpenTimer(); | ||
const contentRect = (_context$content = context.content) === null || _context$content === void 0 ? void 0 : _context$content.getBoundingClientRect(); | ||
if (contentRect) { | ||
var _context$content2; | ||
// TODO: make sure to update this when we change positioning logic | ||
const side = (_context$content2 = context.content) === null || _context$content2 === void 0 ? void 0 : _context$content2.dataset.side; | ||
const rightSide = side === 'right'; | ||
const bleed = rightSide ? -5 : 5; | ||
const contentNearEdge = contentRect[rightSide ? 'left' : 'right']; | ||
const contentFarEdge = contentRect[rightSide ? 'right' : 'left']; | ||
contentContext.onPointerGraceIntentChange({ | ||
area: [ | ||
// consistently within polygon bounds | ||
{ | ||
x: event.clientX + bleed, | ||
y: event.clientY | ||
}, | ||
{ | ||
x: contentNearEdge, | ||
y: contentRect.top | ||
}, | ||
{ | ||
x: contentFarEdge, | ||
y: contentRect.top | ||
}, | ||
{ | ||
x: contentFarEdge, | ||
y: contentRect.bottom | ||
}, | ||
{ | ||
x: contentNearEdge, | ||
y: contentRect.bottom | ||
} | ||
], | ||
side: side | ||
}); | ||
window.clearTimeout(pointerGraceTimerRef.current); | ||
pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null) | ||
, 300); | ||
} else { | ||
contentContext.onTriggerLeave(event); | ||
if (event.defaultPrevented) return; // There's 100ms where the user may leave an item before the submenu was opened. | ||
contentContext.onPointerGraceIntentChange(null); | ||
} | ||
})), | ||
onKeyDown: $epM9y$composeEventHandlers(props.onKeyDown, (event)=>{ | ||
const isTypingAhead = contentContext.searchRef.current !== ''; | ||
if (props.disabled || isTypingAhead && event.key === ' ') return; | ||
if ($6cc32821e9371a1c$var$SUB_OPEN_KEYS[context.dir].includes(event.key)) { | ||
var _context$content3; | ||
context.onOpenChange(true); // The trigger may hold focus if opened via pointer interaction | ||
// so we ensure content is given focus again when switching to keyboard. | ||
(_context$content3 = context.content) === null || _context$content3 === void 0 || _context$content3.focus(); // prevent window from scrolling | ||
event.preventDefault(); | ||
} | ||
}) | ||
}))) : null; | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$5fbbb3ba7297405f, { | ||
displayName: $6cc32821e9371a1c$var$SUB_TRIGGER_NAME | ||
}); | ||
/* ---------------------------------------------------------------------------------------------- */ const $6cc32821e9371a1c$var$MenuItemImpl = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , disabled: disabled = false , textValue: textValue , ...itemProps } = props; | ||
const contentContext = $6cc32821e9371a1c$var$useMenuContentContext($6cc32821e9371a1c$var$ITEM_NAME, __scopeMenu); | ||
const rovingFocusGroupScope = $6cc32821e9371a1c$var$useRovingFocusGroupScope(__scopeMenu); | ||
const ref = $epM9y$useRef(null); | ||
const composedRefs = $epM9y$useComposedRefs(forwardedRef, ref); // get the item's `.textContent` as default strategy for typeahead `textValue` | ||
const [textContent, setTextContent] = $epM9y$useState(''); | ||
$epM9y$useEffect(()=>{ | ||
const menuItem = ref.current; | ||
if (menuItem) { | ||
var _menuItem$textContent; | ||
setTextContent(((_menuItem$textContent = menuItem.textContent) !== null && _menuItem$textContent !== void 0 ? _menuItem$textContent : '').trim()); | ||
} | ||
}, [ | ||
itemProps.children | ||
]); | ||
return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$Collection.ItemSlot, { | ||
scope: __scopeMenu, | ||
disabled: disabled, | ||
textValue: textValue !== null && textValue !== void 0 ? textValue : textContent | ||
}, /*#__PURE__*/ $epM9y$createElement($epM9y$Item, $epM9y$babelruntimehelpersesmextends({ | ||
asChild: true | ||
}, rovingFocusGroupScope, { | ||
focusable: !disabled | ||
}), /*#__PURE__*/ $epM9y$createElement($epM9y$Primitive.div, $epM9y$babelruntimehelpersesmextends({ | ||
role: "menuitem", | ||
"aria-disabled": disabled || undefined, | ||
"data-disabled": disabled ? '' : undefined | ||
}, itemProps, { | ||
ref: composedRefs, | ||
onPointerMove: $epM9y$composeEventHandlers(props.onPointerMove, $6cc32821e9371a1c$var$whenMouse((event)=>{ | ||
if (disabled) contentContext.onItemLeave(event); | ||
else { | ||
contentContext.onItemEnter(event); | ||
if (!event.defaultPrevented) { | ||
const item = event.currentTarget; | ||
item.focus(); | ||
} | ||
} | ||
})), | ||
onPointerLeave: $epM9y$composeEventHandlers(props.onPointerLeave, $6cc32821e9371a1c$var$whenMouse((event)=>contentContext.onItemLeave(event) | ||
)) | ||
})))); | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuCheckboxItem | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$CHECKBOX_ITEM_NAME = 'MenuCheckboxItem'; | ||
const $6cc32821e9371a1c$export$f6f243521332502d = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { checked: checked = false , onCheckedChange: onCheckedChange , ...checkboxItemProps } = props; | ||
return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$ItemIndicatorProvider, { | ||
scope: props.__scopeMenu, | ||
checked: checked | ||
}, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$export$2ce376c2cc3355c8, $epM9y$babelruntimehelpersesmextends({ | ||
role: "menuitemcheckbox", | ||
"aria-checked": checked | ||
}, checkboxItemProps, { | ||
ref: forwardedRef, | ||
"data-state": $6cc32821e9371a1c$var$getCheckedState(checked), | ||
onSelect: $epM9y$composeEventHandlers(checkboxItemProps.onSelect, ()=>onCheckedChange === null || onCheckedChange === void 0 ? void 0 : onCheckedChange(!checked) | ||
, { | ||
checkForDefaultPrevented: false | ||
}) | ||
}))); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$f6f243521332502d, { | ||
displayName: $6cc32821e9371a1c$var$CHECKBOX_ITEM_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuRadioGroup | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$RADIO_GROUP_NAME = 'MenuRadioGroup'; | ||
const [$6cc32821e9371a1c$var$RadioGroupProvider, $6cc32821e9371a1c$var$useRadioGroupContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$RADIO_GROUP_NAME, { | ||
value: undefined, | ||
onValueChange: ()=>{} | ||
}); | ||
const $6cc32821e9371a1c$export$ea2200c9eee416b3 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { value: value , onValueChange: onValueChange , ...groupProps } = props; | ||
const handleValueChange = $epM9y$useCallbackRef(onValueChange); | ||
return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$RadioGroupProvider, { | ||
scope: props.__scopeMenu, | ||
value: value, | ||
onValueChange: handleValueChange | ||
}, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$export$22a631d1f72787bb, $epM9y$babelruntimehelpersesmextends({}, groupProps, { | ||
ref: forwardedRef | ||
}))); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$ea2200c9eee416b3, { | ||
displayName: $6cc32821e9371a1c$var$RADIO_GROUP_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuRadioItem | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$RADIO_ITEM_NAME = 'MenuRadioItem'; | ||
const $6cc32821e9371a1c$export$69bd225e9817f6d0 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { value: value , ...radioItemProps } = props; | ||
const context = $6cc32821e9371a1c$var$useRadioGroupContext($6cc32821e9371a1c$var$RADIO_ITEM_NAME, props.__scopeMenu); | ||
const checked = value === context.value; | ||
return /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$var$ItemIndicatorProvider, { | ||
scope: props.__scopeMenu, | ||
checked: checked | ||
}, /*#__PURE__*/ $epM9y$createElement($6cc32821e9371a1c$export$2ce376c2cc3355c8, $epM9y$babelruntimehelpersesmextends({ | ||
role: "menuitemradio", | ||
"aria-checked": checked | ||
}, radioItemProps, { | ||
ref: forwardedRef, | ||
"data-state": $6cc32821e9371a1c$var$getCheckedState(checked), | ||
onSelect: $epM9y$composeEventHandlers(radioItemProps.onSelect, ()=>{ | ||
var _context$onValueChang; | ||
return (_context$onValueChang = context.onValueChange) === null || _context$onValueChang === void 0 ? void 0 : _context$onValueChang.call(context, value); | ||
}, { | ||
checkForDefaultPrevented: false | ||
}) | ||
}))); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$69bd225e9817f6d0, { | ||
displayName: $6cc32821e9371a1c$var$RADIO_ITEM_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuItemIndicator | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$ITEM_INDICATOR_NAME = 'MenuItemIndicator'; | ||
const [$6cc32821e9371a1c$var$ItemIndicatorProvider, $6cc32821e9371a1c$var$useItemIndicatorContext] = $6cc32821e9371a1c$var$createMenuContext($6cc32821e9371a1c$var$ITEM_INDICATOR_NAME, { | ||
checked: false | ||
}); | ||
const $6cc32821e9371a1c$export$a2593e23056970a3 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , forceMount: forceMount , ...itemIndicatorProps } = props; | ||
const indicatorContext = $6cc32821e9371a1c$var$useItemIndicatorContext($6cc32821e9371a1c$var$ITEM_INDICATOR_NAME, __scopeMenu); | ||
return /*#__PURE__*/ $epM9y$createElement($epM9y$Presence, { | ||
present: forceMount || indicatorContext.checked | ||
}, /*#__PURE__*/ $epM9y$createElement($epM9y$Primitive.span, $epM9y$babelruntimehelpersesmextends({}, itemIndicatorProps, { | ||
ref: forwardedRef, | ||
"data-state": $6cc32821e9371a1c$var$getCheckedState(indicatorContext.checked) | ||
}))); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$a2593e23056970a3, { | ||
displayName: $6cc32821e9371a1c$var$ITEM_INDICATOR_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuSeparator | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$SEPARATOR_NAME = 'MenuSeparator'; | ||
const $6cc32821e9371a1c$export$1cec7dcdd713e220 = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...separatorProps } = props; | ||
return /*#__PURE__*/ $epM9y$createElement($epM9y$Primitive.div, $epM9y$babelruntimehelpersesmextends({ | ||
role: "separator", | ||
"aria-orientation": "horizontal" | ||
}, separatorProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$1cec7dcdd713e220, { | ||
displayName: $6cc32821e9371a1c$var$SEPARATOR_NAME | ||
}); | ||
/* ------------------------------------------------------------------------------------------------- | ||
* MenuArrow | ||
* -----------------------------------------------------------------------------------------------*/ const $6cc32821e9371a1c$var$ARROW_NAME = 'MenuArrow'; | ||
const $6cc32821e9371a1c$export$bcdda4773debf5fa = /*#__PURE__*/ $epM9y$forwardRef((props, forwardedRef)=>{ | ||
const { __scopeMenu: __scopeMenu , ...arrowProps } = props; | ||
const popperScope = $6cc32821e9371a1c$var$usePopperScope(__scopeMenu); | ||
return /*#__PURE__*/ $epM9y$createElement($epM9y$Arrow, $epM9y$babelruntimehelpersesmextends({}, popperScope, arrowProps, { | ||
ref: forwardedRef | ||
})); | ||
}); | ||
/*#__PURE__*/ Object.assign($6cc32821e9371a1c$export$bcdda4773debf5fa, { | ||
displayName: $6cc32821e9371a1c$var$ARROW_NAME | ||
}); | ||
/* -----------------------------------------------------------------------------------------------*/ function $6cc32821e9371a1c$var$getOpenState(open) { | ||
return open ? 'open' : 'closed'; | ||
} | ||
function $6cc32821e9371a1c$var$getCheckedState(checked) { | ||
return checked ? 'checked' : 'unchecked'; | ||
} | ||
function $6cc32821e9371a1c$var$focusFirst(candidates) { | ||
const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement; | ||
for (const candidate of candidates){ | ||
// if focus is already where we want to go, we don't want to keep going through the candidates | ||
if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return; | ||
candidate.focus(); | ||
if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return; | ||
} | ||
} | ||
/** | ||
* Wraps an array around itself at a given start index | ||
* Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']` | ||
*/ function $6cc32821e9371a1c$var$wrapArray(array, startIndex) { | ||
return array.map((_, index)=>array[(startIndex + index) % array.length] | ||
); | ||
} | ||
/** | ||
* This is the "meat" of the typeahead matching logic. It takes in all the values, | ||
* the search and the current match, and returns the next match (or `undefined`). | ||
* | ||
* We normalize the search because if a user has repeatedly pressed a character, | ||
* we want the exact same behavior as if we only had that one character | ||
* (ie. cycle through options starting with that character) | ||
* | ||
* We also reorder the values by wrapping the array around the current match. | ||
* This is so we always look forward from the current match, and picking the first | ||
* match will always be the correct one. | ||
* | ||
* Finally, if the normalized search is exactly one character, we exclude the | ||
* current match from the values because otherwise it would be the first to match always | ||
* and focus would never move. This is as opposed to the regular case, where we | ||
* don't want focus to move if the current match still matches. | ||
*/ function $6cc32821e9371a1c$var$getNextMatch(values, search, currentMatch) { | ||
const isRepeated = search.length > 1 && Array.from(search).every((char)=>char === search[0] | ||
); | ||
const normalizedSearch = isRepeated ? search[0] : search; | ||
const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1; | ||
let wrappedValues = $6cc32821e9371a1c$var$wrapArray(values, Math.max(currentMatchIndex, 0)); | ||
const excludeCurrentMatch = normalizedSearch.length === 1; | ||
if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v)=>v !== currentMatch | ||
); | ||
const nextMatch = wrappedValues.find((value)=>value.toLowerCase().startsWith(normalizedSearch.toLowerCase()) | ||
); | ||
return nextMatch !== currentMatch ? nextMatch : undefined; | ||
} | ||
// Determine if a point is inside of a polygon. | ||
// Based on https://github.com/substack/point-in-polygon | ||
function $6cc32821e9371a1c$var$isPointInPolygon(point, polygon) { | ||
const { x: x , y: y } = point; | ||
let inside = false; | ||
for(let i = 0, j = polygon.length - 1; i < polygon.length; j = i++){ | ||
const xi = polygon[i].x; | ||
const yi = polygon[i].y; | ||
const xj = polygon[j].x; | ||
const yj = polygon[j].y; // prettier-ignore | ||
const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi; | ||
if (intersect) inside = !inside; | ||
} | ||
return inside; | ||
} | ||
function $6cc32821e9371a1c$var$isPointerInGraceArea(event, area) { | ||
if (!area) return false; | ||
const cursorPos = { | ||
x: event.clientX, | ||
y: event.clientY | ||
}; | ||
return $6cc32821e9371a1c$var$isPointInPolygon(cursorPos, area); | ||
} | ||
function $6cc32821e9371a1c$var$whenMouse(handler) { | ||
return (event)=>event.pointerType === 'mouse' ? handler(event) : undefined | ||
; | ||
} | ||
const $6cc32821e9371a1c$export$be92b6f5f03c0fe9 = $6cc32821e9371a1c$export$d9b273488cd8ce6f; | ||
const $6cc32821e9371a1c$export$d7a01e11500dfb6f = $6cc32821e9371a1c$export$71bdb9d1e2909932; | ||
const $6cc32821e9371a1c$export$b688253958b8dfe7 = $6cc32821e9371a1c$export$9fa5ebd18bee4d43; | ||
const $6cc32821e9371a1c$export$2ea8a7a591ac5eac = $6cc32821e9371a1c$export$5fbbb3ba7297405f; | ||
const $6cc32821e9371a1c$export$7c6e2c02157bb7d2 = $6cc32821e9371a1c$export$479f0f2f71193efe; | ||
const $6cc32821e9371a1c$export$eb2fcfdbd7ba97d4 = $6cc32821e9371a1c$export$22a631d1f72787bb; | ||
const $6cc32821e9371a1c$export$b04be29aa201d4f5 = $6cc32821e9371a1c$export$dd37bec0e8a99143; | ||
const $6cc32821e9371a1c$export$6d08773d2e66f8f2 = $6cc32821e9371a1c$export$2ce376c2cc3355c8; | ||
const $6cc32821e9371a1c$export$16ce288f89fa631c = $6cc32821e9371a1c$export$f6f243521332502d; | ||
const $6cc32821e9371a1c$export$a98f0dcb43a68a25 = $6cc32821e9371a1c$export$ea2200c9eee416b3; | ||
const $6cc32821e9371a1c$export$371ab307eab489c0 = $6cc32821e9371a1c$export$69bd225e9817f6d0; | ||
const $6cc32821e9371a1c$export$c3468e2714d175fa = $6cc32821e9371a1c$export$a2593e23056970a3; | ||
const $6cc32821e9371a1c$export$1ff3c3f08ae963c0 = $6cc32821e9371a1c$export$1cec7dcdd713e220; | ||
const $6cc32821e9371a1c$export$21b07c8f274aebd5 = $6cc32821e9371a1c$export$bcdda4773debf5fa; | ||
export {$6cc32821e9371a1c$export$4027731b685e72eb as createMenuScope, $6cc32821e9371a1c$export$d9b273488cd8ce6f as Menu, $6cc32821e9371a1c$export$71bdb9d1e2909932 as MenuSub, $6cc32821e9371a1c$export$9fa5ebd18bee4d43 as MenuAnchor, $6cc32821e9371a1c$export$479f0f2f71193efe as MenuContent, $6cc32821e9371a1c$export$22a631d1f72787bb as MenuGroup, $6cc32821e9371a1c$export$dd37bec0e8a99143 as MenuLabel, $6cc32821e9371a1c$export$2ce376c2cc3355c8 as MenuItem, $6cc32821e9371a1c$export$5fbbb3ba7297405f as MenuSubTrigger, $6cc32821e9371a1c$export$f6f243521332502d as MenuCheckboxItem, $6cc32821e9371a1c$export$ea2200c9eee416b3 as MenuRadioGroup, $6cc32821e9371a1c$export$69bd225e9817f6d0 as MenuRadioItem, $6cc32821e9371a1c$export$a2593e23056970a3 as MenuItemIndicator, $6cc32821e9371a1c$export$1cec7dcdd713e220 as MenuSeparator, $6cc32821e9371a1c$export$bcdda4773debf5fa as MenuArrow, $6cc32821e9371a1c$export$be92b6f5f03c0fe9 as Root, $6cc32821e9371a1c$export$d7a01e11500dfb6f as Sub, $6cc32821e9371a1c$export$b688253958b8dfe7 as Anchor, $6cc32821e9371a1c$export$2ea8a7a591ac5eac as SubTrigger, $6cc32821e9371a1c$export$7c6e2c02157bb7d2 as Content, $6cc32821e9371a1c$export$eb2fcfdbd7ba97d4 as Group, $6cc32821e9371a1c$export$b04be29aa201d4f5 as Label, $6cc32821e9371a1c$export$6d08773d2e66f8f2 as Item, $6cc32821e9371a1c$export$16ce288f89fa631c as CheckboxItem, $6cc32821e9371a1c$export$a98f0dcb43a68a25 as RadioGroup, $6cc32821e9371a1c$export$371ab307eab489c0 as RadioItem, $6cc32821e9371a1c$export$c3468e2714d175fa as ItemIndicator, $6cc32821e9371a1c$export$1ff3c3f08ae963c0 as Separator, $6cc32821e9371a1c$export$21b07c8f274aebd5 as Arrow}; | ||
//# sourceMappingURL=index.module.js.map |
{ | ||
"name": "@radix-ui/react-menu", | ||
"version": "0.1.7-rc.5", | ||
"version": "0.1.7-rc.6", | ||
"license": "MIT", | ||
@@ -21,16 +21,16 @@ "source": "src/index.ts", | ||
"@radix-ui/primitive": "0.1.0", | ||
"@radix-ui/react-collection": "0.1.5-rc.2", | ||
"@radix-ui/react-compose-refs": "0.1.1-rc.2", | ||
"@radix-ui/react-context": "0.1.2-rc.2", | ||
"@radix-ui/react-direction": "0.1.0-rc.5", | ||
"@radix-ui/react-dismissable-layer": "0.1.6-rc.2", | ||
"@radix-ui/react-focus-guards": "0.1.1-rc.2", | ||
"@radix-ui/react-focus-scope": "0.1.5-rc.2", | ||
"@radix-ui/react-id": "0.1.6-rc.2", | ||
"@radix-ui/react-popper": "0.1.5-rc.2", | ||
"@radix-ui/react-portal": "0.1.5-rc.2", | ||
"@radix-ui/react-presence": "0.1.3-rc.2", | ||
"@radix-ui/react-primitive": "0.1.5-rc.2", | ||
"@radix-ui/react-roving-focus": "0.1.6-rc.5", | ||
"@radix-ui/react-use-callback-ref": "0.1.1-rc.2", | ||
"@radix-ui/react-collection": "0.1.5-rc.3", | ||
"@radix-ui/react-compose-refs": "0.1.1-rc.3", | ||
"@radix-ui/react-context": "0.1.2-rc.3", | ||
"@radix-ui/react-direction": "0.1.0-rc.6", | ||
"@radix-ui/react-dismissable-layer": "0.1.6-rc.3", | ||
"@radix-ui/react-focus-guards": "0.1.1-rc.3", | ||
"@radix-ui/react-focus-scope": "0.1.5-rc.3", | ||
"@radix-ui/react-id": "0.1.6-rc.3", | ||
"@radix-ui/react-popper": "0.1.5-rc.3", | ||
"@radix-ui/react-portal": "0.1.5-rc.3", | ||
"@radix-ui/react-presence": "0.1.3-rc.3", | ||
"@radix-ui/react-primitive": "0.1.5-rc.3", | ||
"@radix-ui/react-roving-focus": "0.1.6-rc.6", | ||
"@radix-ui/react-use-callback-ref": "0.1.1-rc.3", | ||
"aria-hidden": "^1.1.1", | ||
@@ -37,0 +37,0 @@ "react-remove-scroll": "^2.4.0" |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
307950
2066
1
1
+ Added@radix-ui/react-arrow@0.1.5-rc.3(transitive)
+ Added@radix-ui/react-collection@0.1.5-rc.3(transitive)
+ Added@radix-ui/react-compose-refs@0.1.1-rc.3(transitive)
+ Added@radix-ui/react-context@0.1.2-rc.3(transitive)
+ Added@radix-ui/react-direction@0.1.0-rc.6(transitive)
+ Added@radix-ui/react-dismissable-layer@0.1.6-rc.3(transitive)
+ Added@radix-ui/react-focus-guards@0.1.1-rc.3(transitive)
+ Added@radix-ui/react-focus-scope@0.1.5-rc.3(transitive)
+ Added@radix-ui/react-id@0.1.6-rc.3(transitive)
+ Added@radix-ui/react-popper@0.1.5-rc.3(transitive)
+ Added@radix-ui/react-portal@0.1.5-rc.3(transitive)
+ Added@radix-ui/react-presence@0.1.3-rc.3(transitive)
+ Added@radix-ui/react-primitive@0.1.5-rc.3(transitive)
+ Added@radix-ui/react-roving-focus@0.1.6-rc.6(transitive)
+ Added@radix-ui/react-slot@0.1.3-rc.3(transitive)
+ Added@radix-ui/react-use-body-pointer-events@0.1.2-rc.3(transitive)
+ Added@radix-ui/react-use-callback-ref@0.1.1-rc.3(transitive)
+ Added@radix-ui/react-use-controllable-state@0.1.1-rc.3(transitive)
+ Added@radix-ui/react-use-escape-keydown@0.1.1-rc.3(transitive)
+ Added@radix-ui/react-use-layout-effect@0.1.1-rc.3(transitive)
+ Added@radix-ui/react-use-rect@0.1.2-rc.3(transitive)
+ Added@radix-ui/react-use-size@0.1.2-rc.3(transitive)
- Removed@radix-ui/react-arrow@0.1.5-rc.2(transitive)
- Removed@radix-ui/react-collection@0.1.5-rc.2(transitive)
- Removed@radix-ui/react-compose-refs@0.1.1-rc.2(transitive)
- Removed@radix-ui/react-context@0.1.2-rc.2(transitive)
- Removed@radix-ui/react-direction@0.1.0-rc.5(transitive)
- Removed@radix-ui/react-dismissable-layer@0.1.6-rc.2(transitive)
- Removed@radix-ui/react-focus-guards@0.1.1-rc.2(transitive)
- Removed@radix-ui/react-focus-scope@0.1.5-rc.2(transitive)
- Removed@radix-ui/react-id@0.1.6-rc.2(transitive)
- Removed@radix-ui/react-popper@0.1.5-rc.2(transitive)
- Removed@radix-ui/react-portal@0.1.5-rc.2(transitive)
- Removed@radix-ui/react-presence@0.1.3-rc.2(transitive)
- Removed@radix-ui/react-primitive@0.1.5-rc.2(transitive)
- Removed@radix-ui/react-roving-focus@0.1.6-rc.5(transitive)
- Removed@radix-ui/react-slot@0.1.3-rc.2(transitive)
- Removed@radix-ui/react-use-body-pointer-events@0.1.2-rc.2(transitive)
- Removed@radix-ui/react-use-callback-ref@0.1.1-rc.2(transitive)
- Removed@radix-ui/react-use-controllable-state@0.1.1-rc.2(transitive)
- Removed@radix-ui/react-use-escape-keydown@0.1.1-rc.2(transitive)
- Removed@radix-ui/react-use-layout-effect@0.1.1-rc.2(transitive)
- Removed@radix-ui/react-use-rect@0.1.2-rc.2(transitive)
- Removed@radix-ui/react-use-size@0.1.2-rc.2(transitive)