{"version":3,"file":"menu.mjs","sources":["../../../node_modules/.pnpm/@vue+shared@3.5.13/node_modules/@vue/shared/dist/shared.esm-bundler.js","../src/menu/MenuRoot.ts","../src/menu/utils.ts","../src/menu/MenuContentImpl.ts","../src/menu/MenuItemImpl.ts","../src/menu/MenuItem.ts","../src/menu/MenuItemIndicator.ts","../src/menu/MenuCheckboxItem.ts","../src/menu/MenuCheckboxItem.vue","../src/menu/MenuContent.ts","../src/menu/MenuItem.vue","../src/menu/MenuItemIndicator.vue","../src/menu/MenuRadioGroup.ts","../src/menu/MenuRadioGroup.vue","../src/menu/MenuRadioItem.ts","../src/menu/MenuRadioItem.vue","../src/menu/MenuSub.ts","../src/menu/MenuSubContent.ts","../src/menu/MenuSubContentImpl.ts","../src/menu/MenuSubTrigger.ts","../src/menu/MenuSubTrigger.vue"],"sourcesContent":["/**\n* @vue/shared v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n  const map = /* @__PURE__ */ Object.create(null);\n  for (const key of str.split(\",\")) map[key] = 1;\n  return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n  const i = arr.indexOf(el);\n  if (i > -1) {\n    arr.splice(i, 1);\n  }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n  return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n  return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n  // the leading comma is intentional so empty string \"\" is also included\n  \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n  \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n};\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction(\n  (str) => {\n    return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n  }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n  (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n  (str) => {\n    const s = str ? `on${capitalize(str)}` : ``;\n    return s;\n  }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n  for (let i = 0; i < fns.length; i++) {\n    fns[i](...arg);\n  }\n};\nconst def = (obj, key, value, writable = false) => {\n  Object.defineProperty(obj, key, {\n    configurable: true,\n    enumerable: false,\n    writable,\n    value\n  });\n};\nconst looseToNumber = (val) => {\n  const n = parseFloat(val);\n  return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n  const n = isString(val) ? Number(val) : NaN;\n  return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n  return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n  return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n  return source + JSON.stringify(\n    options,\n    (_, val) => typeof val === \"function\" ? val.toString() : val\n  );\n}\n\nconst PatchFlags = {\n  \"TEXT\": 1,\n  \"1\": \"TEXT\",\n  \"CLASS\": 2,\n  \"2\": \"CLASS\",\n  \"STYLE\": 4,\n  \"4\": \"STYLE\",\n  \"PROPS\": 8,\n  \"8\": \"PROPS\",\n  \"FULL_PROPS\": 16,\n  \"16\": \"FULL_PROPS\",\n  \"NEED_HYDRATION\": 32,\n  \"32\": \"NEED_HYDRATION\",\n  \"STABLE_FRAGMENT\": 64,\n  \"64\": \"STABLE_FRAGMENT\",\n  \"KEYED_FRAGMENT\": 128,\n  \"128\": \"KEYED_FRAGMENT\",\n  \"UNKEYED_FRAGMENT\": 256,\n  \"256\": \"UNKEYED_FRAGMENT\",\n  \"NEED_PATCH\": 512,\n  \"512\": \"NEED_PATCH\",\n  \"DYNAMIC_SLOTS\": 1024,\n  \"1024\": \"DYNAMIC_SLOTS\",\n  \"DEV_ROOT_FRAGMENT\": 2048,\n  \"2048\": \"DEV_ROOT_FRAGMENT\",\n  \"CACHED\": -1,\n  \"-1\": \"CACHED\",\n  \"BAIL\": -2,\n  \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n  [1]: `TEXT`,\n  [2]: `CLASS`,\n  [4]: `STYLE`,\n  [8]: `PROPS`,\n  [16]: `FULL_PROPS`,\n  [32]: `NEED_HYDRATION`,\n  [64]: `STABLE_FRAGMENT`,\n  [128]: `KEYED_FRAGMENT`,\n  [256]: `UNKEYED_FRAGMENT`,\n  [512]: `NEED_PATCH`,\n  [1024]: `DYNAMIC_SLOTS`,\n  [2048]: `DEV_ROOT_FRAGMENT`,\n  [-1]: `HOISTED`,\n  [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n  \"ELEMENT\": 1,\n  \"1\": \"ELEMENT\",\n  \"FUNCTIONAL_COMPONENT\": 2,\n  \"2\": \"FUNCTIONAL_COMPONENT\",\n  \"STATEFUL_COMPONENT\": 4,\n  \"4\": \"STATEFUL_COMPONENT\",\n  \"TEXT_CHILDREN\": 8,\n  \"8\": \"TEXT_CHILDREN\",\n  \"ARRAY_CHILDREN\": 16,\n  \"16\": \"ARRAY_CHILDREN\",\n  \"SLOTS_CHILDREN\": 32,\n  \"32\": \"SLOTS_CHILDREN\",\n  \"TELEPORT\": 64,\n  \"64\": \"TELEPORT\",\n  \"SUSPENSE\": 128,\n  \"128\": \"SUSPENSE\",\n  \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n  \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n  \"COMPONENT_KEPT_ALIVE\": 512,\n  \"512\": \"COMPONENT_KEPT_ALIVE\",\n  \"COMPONENT\": 6,\n  \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n  \"STABLE\": 1,\n  \"1\": \"STABLE\",\n  \"DYNAMIC\": 2,\n  \"2\": \"DYNAMIC\",\n  \"FORWARDED\": 3,\n  \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n  [1]: \"STABLE\",\n  [2]: \"DYNAMIC\",\n  [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n  start = Math.max(0, Math.min(start, source.length));\n  end = Math.max(0, Math.min(end, source.length));\n  if (start > end) return \"\";\n  let lines = source.split(/(\\r?\\n)/);\n  const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n  lines = lines.filter((_, idx) => idx % 2 === 0);\n  let count = 0;\n  const res = [];\n  for (let i = 0; i < lines.length; i++) {\n    count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n    if (count >= start) {\n      for (let j = i - range; j <= i + range || end > count; j++) {\n        if (j < 0 || j >= lines.length) continue;\n        const line = j + 1;\n        res.push(\n          `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`\n        );\n        const lineLength = lines[j].length;\n        const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n        if (j === i) {\n          const pad = start - (count - (lineLength + newLineSeqLength));\n          const length = Math.max(\n            1,\n            end > count ? lineLength - pad : end - start\n          );\n          res.push(`   |  ` + \" \".repeat(pad) + \"^\".repeat(length));\n        } else if (j > i) {\n          if (end > count) {\n            const length = Math.max(Math.min(end - count, lineLength), 1);\n            res.push(`   |  ` + \"^\".repeat(length));\n          }\n          count += lineLength + newLineSeqLength;\n        }\n      }\n      break;\n    }\n  }\n  return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n  if (isArray(value)) {\n    const res = {};\n    for (let i = 0; i < value.length; i++) {\n      const item = value[i];\n      const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n      if (normalized) {\n        for (const key in normalized) {\n          res[key] = normalized[key];\n        }\n      }\n    }\n    return res;\n  } else if (isString(value) || isObject(value)) {\n    return value;\n  }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n  const ret = {};\n  cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n    if (item) {\n      const tmp = item.split(propertyDelimiterRE);\n      tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return ret;\n}\nfunction stringifyStyle(styles) {\n  if (!styles) return \"\";\n  if (isString(styles)) return styles;\n  let ret = \"\";\n  for (const key in styles) {\n    const value = styles[key];\n    if (isString(value) || typeof value === \"number\") {\n      const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n      ret += `${normalizedKey}:${value};`;\n    }\n  }\n  return ret;\n}\nfunction normalizeClass(value) {\n  let res = \"\";\n  if (isString(value)) {\n    res = value;\n  } else if (isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      const normalized = normalizeClass(value[i]);\n      if (normalized) {\n        res += normalized + \" \";\n      }\n    }\n  } else if (isObject(value)) {\n    for (const name in value) {\n      if (value[name]) {\n        res += name + \" \";\n      }\n    }\n  }\n  return res.trim();\n}\nfunction normalizeProps(props) {\n  if (!props) return null;\n  let { class: klass, style } = props;\n  if (klass && !isString(klass)) {\n    props.class = normalizeClass(klass);\n  }\n  if (style) {\n    props.style = normalizeStyle(style);\n  }\n  return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n  specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n  return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n  if (attrValidationCache.hasOwnProperty(name)) {\n    return attrValidationCache[name];\n  }\n  const isUnsafe = unsafeAttrCharRE.test(name);\n  if (isUnsafe) {\n    console.error(`unsafe attribute name: ${name}`);\n  }\n  return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n  acceptCharset: \"accept-charset\",\n  className: \"class\",\n  htmlFor: \"for\",\n  httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n  `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n  `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n  `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n  if (value == null) {\n    return false;\n  }\n  const type = typeof value;\n  return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n  const str = \"\" + string;\n  const match = escapeRE.exec(str);\n  if (!match) {\n    return str;\n  }\n  let html = \"\";\n  let escaped;\n  let index;\n  let lastIndex = 0;\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        escaped = \"&quot;\";\n        break;\n      case 38:\n        escaped = \"&amp;\";\n        break;\n      case 39:\n        escaped = \"&#39;\";\n        break;\n      case 60:\n        escaped = \"&lt;\";\n        break;\n      case 62:\n        escaped = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    if (lastIndex !== index) {\n      html += str.slice(lastIndex, index);\n    }\n    lastIndex = index + 1;\n    html += escaped;\n  }\n  return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n  return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n  return key.replace(\n    cssVarNameEscapeSymbolsRE,\n    (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n  );\n}\n\nfunction looseCompareArrays(a, b) {\n  if (a.length !== b.length) return false;\n  let equal = true;\n  for (let i = 0; equal && i < a.length; i++) {\n    equal = looseEqual(a[i], b[i]);\n  }\n  return equal;\n}\nfunction looseEqual(a, b) {\n  if (a === b) return true;\n  let aValidType = isDate(a);\n  let bValidType = isDate(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n  }\n  aValidType = isSymbol(a);\n  bValidType = isSymbol(b);\n  if (aValidType || bValidType) {\n    return a === b;\n  }\n  aValidType = isArray(a);\n  bValidType = isArray(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n  }\n  aValidType = isObject(a);\n  bValidType = isObject(b);\n  if (aValidType || bValidType) {\n    if (!aValidType || !bValidType) {\n      return false;\n    }\n    const aKeysCount = Object.keys(a).length;\n    const bKeysCount = Object.keys(b).length;\n    if (aKeysCount !== bKeysCount) {\n      return false;\n    }\n    for (const key in a) {\n      const aHasKey = a.hasOwnProperty(key);\n      const bHasKey = b.hasOwnProperty(key);\n      if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n  }\n  return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n  return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n  return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n  return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n  if (isRef(val)) {\n    return replacer(_key, val.value);\n  } else if (isMap(val)) {\n    return {\n      [`Map(${val.size})`]: [...val.entries()].reduce(\n        (entries, [key, val2], i) => {\n          entries[stringifySymbol(key, i) + \" =>\"] = val2;\n          return entries;\n        },\n        {}\n      )\n    };\n  } else if (isSet(val)) {\n    return {\n      [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n    };\n  } else if (isSymbol(val)) {\n    return stringifySymbol(val);\n  } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n    return String(val);\n  }\n  return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n  var _a;\n  return (\n    // Symbol.description in es2019+ so we need to cast here to pass\n    // the lib: es2016 check\n    isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n  );\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","import type { EmitsToHookProps, PrimitiveDefaultProps } from '../shared/index.ts'\nimport { type MaybeRefOrGetter, onBeforeUnmount, onMounted, type Ref } from 'vue'\nimport { createCollection } from '../collection/index.ts'\nimport { type Direction, useDirection } from '../direction/index.ts'\nimport { createContext, type MutableRefObject, useRef } from '../hooks/index.ts'\nimport { usePooperRoot } from '../popper/index.ts'\n\nexport interface MenuRootProps {\n  open?: boolean\n  dir?: Direction\n  modal?: boolean\n}\n\nexport const DEFAULT_MENU_ROOT_PROPS = {\n  open: false,\n  modal: undefined,\n} satisfies PrimitiveDefaultProps<MenuRootProps, 'open'>\n\nexport type MenuRootEmits = {\n  'update:open': [open: boolean]\n}\n\nexport interface MenuContext {\n  open: () => boolean\n  onOpenChange: (open: boolean) => void\n  // content: Ref<HTMLDivElement | undefined>\n  // onContentChange: (content: HTMLDivElement | undefined) => void\n}\n\nexport const [provideMenuContext, useMenuContext] = createContext<MenuContext>('Menu')\n\nexport interface MenuRootContext {\n  onClose: () => void\n  isUsingKeyboardRef: MutableRefObject<boolean>\n  dir: Ref<Direction>\n  modal: boolean\n}\n\nexport const [provideMenuRootContext, useMenuRootContext] = createContext<MenuRootContext>('MenuRoot')\n\nexport interface ItemData { menu: { disabled?: boolean, textValue: string } }\nexport const [Collection, useCollection] = createCollection<HTMLElement, ItemData>('Menu')\n\nexport interface UseMenuRootProps extends EmitsToHookProps<MenuRootEmits> {\n  open?: () => boolean\n  dir?: MaybeRefOrGetter<Direction | undefined>\n  modal?: boolean\n}\n\nexport function useMenuRoot(props: UseMenuRootProps = {}) {\n  const { open = () => false, modal = true } = props\n  const isUsingKeyboardRef = useIsUsingKeyboard()\n  const direction = useDirection(props.dir)\n\n  provideMenuContext({\n    open,\n    onOpenChange(open) {\n      props.onUpdateOpen?.(open)\n    },\n  })\n\n  provideMenuRootContext({\n    onClose() {\n      props.onUpdateOpen?.(false)\n    },\n    isUsingKeyboardRef,\n    dir: direction,\n    modal,\n  })\n\n  usePooperRoot()\n}\n\n// UTILS\n\nexport const SELECTION_KEYS = ['Enter', ' ']\nexport const FIRST_KEYS = ['ArrowDown', 'PageUp', 'Home']\nexport const LAST_KEYS = ['ArrowUp', 'PageDown', 'End']\nexport const FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS]\nexport const SUB_OPEN_KEYS: Record<Direction, string[]> = {\n  ltr: [...SELECTION_KEYS, 'ArrowRight'],\n  rtl: [...SELECTION_KEYS, 'ArrowLeft'],\n}\nexport const SUB_CLOSE_KEYS: Record<Direction, string[]> = {\n  ltr: ['ArrowLeft'],\n  rtl: ['ArrowRight'],\n}\n\nlet subscribers = 0\nconst isUsingKeyboardRef = useRef(false)\n\nfunction handlePointer() {\n  isUsingKeyboardRef.value = false\n}\n\nfunction handleKeyDown() {\n  isUsingKeyboardRef.value = true\n}\n\nexport function useIsUsingKeyboard() {\n  if (subscribers > 0)\n    return isUsingKeyboardRef\n\n  onMounted(() => {\n    if (subscribers > 0)\n      return\n\n    subscribers += 1\n    document.addEventListener('keydown', handleKeyDown, { capture: true, passive: true })\n    document.addEventListener('pointerdown', handlePointer, { capture: true, passive: true })\n    document.addEventListener('pointermove', handlePointer, { capture: true, passive: true })\n  })\n\n  onBeforeUnmount(() => {\n    if (subscribers <= 0)\n      return\n    subscribers -= 1\n\n    document.removeEventListener('pointerdown', handlePointer, { capture: true })\n    document.removeEventListener('pointermove', handlePointer, { capture: true })\n\n    document.removeEventListener('keydown', handleKeyDown, { capture: true })\n  })\n\n  return isUsingKeyboardRef\n}\n","/* ----------------------------------------------------------------------------------------------- */\n\nimport type { CheckedState } from '../checkbox/index.ts'\nimport { isPointInPolygon, type Point, type Polygon, wrapArray } from '../shared/index.ts'\n\nfunction isIndeterminate(checked?: CheckedState): checked is 'indeterminate' {\n  return checked === 'indeterminate'\n}\n\nexport function getCheckedState(checked: CheckedState) {\n  return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked'\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in all the values,\n * the search and the current match, and returns the next match (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through options starting with that character)\n *\n * We also reorder the values by wrapping the array around the current match.\n * This is so we always look forward from the current match, and picking the first\n * match will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current match from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current match still matches.\n */\nexport function getNextMatch(values: string[], search: string, currentMatch?: string) {\n  const isRepeated = search.length > 1 && Array.from(search).every(char => char === search[0])\n  const normalizedSearch = isRepeated ? search[0] || '' : search\n  const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1\n\n  let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0))!\n  const excludeCurrentMatch = normalizedSearch.length === 1\n\n  if (excludeCurrentMatch)\n    wrappedValues = wrappedValues.filter(v => v !== currentMatch)\n\n  const nextMatch = wrappedValues.find(value => value.toLowerCase().startsWith(normalizedSearch.toLowerCase()))\n\n  return nextMatch !== currentMatch ? nextMatch : undefined\n}\n\nexport type Side = 'left' | 'right'\n\nexport type GraceIntent = { area: Polygon, side: Side }\n\nexport function isPointerInGraceArea(event: PointerEvent, area?: Polygon) {\n  if (!area)\n    return false\n\n  const cursorPos: Point = [event.clientX, event.clientY]\n\n  return isPointInPolygon(cursorPos, area)\n}\n","import type { Side } from '@floating-ui/utils'\nimport type { EmitsToHookProps, IAttrsData, PrimitiveDefaultProps, PrimitiveElAttrs, RadixPrimitiveGetAttrs } from '../shared/index.ts'\nimport { hideOthers } from 'aria-hidden'\nimport { onBeforeUnmount, onMounted, shallowRef } from 'vue'\nimport { type DismissableLayerEmits, type DismissableLayerProps, useDismissableLayer } from '../dismissable-layer/index.ts'\nimport { useFocusGuards } from '../focus-guards/index.ts'\nimport { type FocusScopeProps, useFocusScope } from '../focus-scope/index.ts'\nimport { useBodyScrollLock, useRef } from '../hooks/index.ts'\nimport { createContext, type MutableRefObject } from '../hooks/index.ts'\nimport { type PopperContentProps, usePopperContent, type UsePopperContentProps, usePopperContext } from '../popper/index.ts'\nimport { type RovingFocusGroupRootEmits, useRovingFocusGroupRoot } from '../roving-focus/index.ts'\nimport { focusFirst } from '../shared/index.ts'\nimport { Collection, FIRST_LAST_KEYS, LAST_KEYS, useCollection, useMenuContext, useMenuRootContext } from './MenuRoot.ts'\n\nimport { getNextMatch, type GraceIntent, isPointerInGraceArea } from './utils.ts'\n\nexport interface MenuContentImplProps extends Omit<PopperContentProps, 'dir'> {\n  /**\n   * Whether keyboard navigation should loop around\n   * @defaultValue false\n   */\n  loop?: boolean\n}\n\nexport const DEFAULT_MENU_CONTENT_IMPL_PROPS = {\n  avoidCollisions: undefined,\n  hideWhenDetached: undefined,\n  loop: undefined,\n} satisfies PrimitiveDefaultProps<MenuContentImplProps>\n\nexport type MenuContentImplEmits = UseMenuContentImplSharedEmits\n\nexport interface MenuContentContext {\n  onItemEnter: (event: PointerEvent) => void\n  onItemLeave: (event: PointerEvent) => void\n  onTriggerLeave: (event: PointerEvent) => void\n  searchRef: MutableRefObject<string>\n  pointerGraceTimerRef: MutableRefObject<number>\n  onPointerGraceIntentChange: (intent: GraceIntent | undefined) => void\n}\n\nexport const [provideMenuContentContext, useMenuContentContext] = createContext<MenuContentContext>('MenuContent')\n\nexport interface UseMenuContentImplProps extends Omit<UseMenuContentImplSharedProps, keyof UseMenuContentImplSharedPrivateProps> { }\n\nexport function useMenuContentImpl(props: UseMenuContentImplProps = {}): UseMenuContentImplSharedPeturns {\n  const context = useMenuRootContext('MenuContentImpl')\n\n  const useMenuContent = context.modal ? useMenuContentImplModal : useMenuContentImplNonModal\n\n  return useMenuContent(props)\n}\n\nexport function useMenuContentImplModal(props: UseMenuContentImplProps = {}): UseMenuContentImplSharedPeturns {\n  const context = useMenuContext('MenuContentImpl')\n  const popperContext = usePopperContext('MenuContentImpl')\n\n  // Hide everything from ARIA except the `MenuContent`\n  let clearHideOthers: (() => void) | undefined\n\n  onMounted(() => {\n    if (popperContext.content.value)\n      clearHideOthers = hideOthers(popperContext.content.value)\n  })\n\n  onBeforeUnmount(() => {\n    clearHideOthers?.()\n    clearHideOthers = undefined\n  })\n\n  return useMenuContentImplShared({\n    ...props,\n    trapFocus() {\n      return context.open()\n    },\n    disableOutsidePointerEvents() {\n      return true\n    },\n    disableOutsideScroll: true,\n    // When focus is trapped, a `focusout` event may still happen.\n    // We make sure we don't trigger our `onDismiss` in such case.\n    onFocusOutside(event) {\n      event.preventDefault()\n    },\n    onDismiss() {\n      context.onOpenChange(false)\n    },\n  })\n}\n\nexport function useMenuContentImplNonModal(props: UseMenuContentImplProps = {}): UseMenuContentImplSharedPeturns {\n  const context = useMenuContext('MenuContentImpl')\n\n  return useMenuContentImplShared({\n    ...props,\n    trapFocus() {\n      return false\n    },\n    disableOutsidePointerEvents() {\n      return false\n    },\n    disableOutsideScroll: false,\n    onDismiss() {\n      context.onOpenChange(false)\n    },\n  })\n}\n\nexport type UseMenuContentImplSharedEmits = {\n  /**\n   * Event handler called when auto-focusing on close.\n   * Can be prevented.\n   */\n  closeAutoFocus: [event: Event]\n\n  entryFocus: RovingFocusGroupRootEmits['entryFocus']\n\n  escapeKeydown: DismissableLayerEmits['escapeKeydown']\n\n  pointerdownOutside: DismissableLayerEmits['pointerdownOutside']\n\n  focusOutside: DismissableLayerEmits['focusOutside']\n\n  interactOutside: DismissableLayerEmits['interactOutside']\n}\n\nexport type UseMenuContentImplSharedPrivateEmits = {\n  openAutoFocus: [event: Event]\n\n  dismiss: DismissableLayerEmits['dismiss']\n}\n\nexport interface UseMenuContentImplSharedPrivateProps extends EmitsToHookProps<UseMenuContentImplSharedPrivateEmits> {\n  disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents']\n\n  disableOutsideScroll?: boolean\n\n  trapFocus?: FocusScopeProps['trapped']\n}\n\nexport interface UseMenuContentImplSharedProps extends EmitsToHookProps<MenuContentImplEmits & UseMenuContentImplSharedPrivateEmits>, Omit<UsePopperContentProps, 'dir' | 'onPlaced'> {\n  disableOutsidePointerEvents?: () => boolean\n  disableOutsideScroll?: boolean\n  trapFocus?: () => boolean\n  loop?: boolean\n}\n\nexport interface UseMenuContentImplSharedPeturns {\n  wrapperAttrs: () => IAttrsData\n  attrs: RadixPrimitiveGetAttrs\n}\n\nexport function useMenuContentImplShared(props: UseMenuContentImplSharedProps = {}): UseMenuContentImplSharedPeturns {\n  const { loop = false } = props\n  const context = useMenuContext('MenuContentImpl')\n  const rootContext = useMenuRootContext('MenuContentImpl')\n  const popperContext = usePopperContext('MenuContentImpl')\n\n  const currentItemId = shallowRef<string>()\n\n  const elRef = useRef<HTMLElement>()\n  function setElRef(value: HTMLElement | undefined) {\n    elRef.value = value\n    popperContext.content.value = value\n  }\n\n  const getItems = useCollection(Collection.provideCollectionContext(elRef))\n\n  let timerRef = 0\n  const searchRef = useRef('')\n  const pointerGraceTimerRef = useRef(0)\n  let pointerGraceIntentRef: GraceIntent | undefined\n  let pointerDirRef: Side = 'right'\n  let lastPointerXRef = 0\n\n  const unlock = props.disableOutsideScroll ? useBodyScrollLock() : undefined\n\n  function handleTypeaheadSearch(key: string) {\n    const search = searchRef.value + key\n    const items = getItems().filter(item => !item.$$rcid.menu.disabled)\n    const currentItem = document.activeElement\n    const currentMatch = items.find(item => item === currentItem)?.$$rcid.menu.textValue\n    const values = items.map(item => item.$$rcid.menu.textValue)\n    const nextMatch = getNextMatch(values, search, currentMatch)\n    const newItem = items.find(item => item.$$rcid.menu.textValue === nextMatch);\n\n    // Reset `searchRef` 1 second after it was last updated\n    (function updateSearch(value: string) {\n      searchRef.value = value\n      if (timerRef)\n        window.clearTimeout(timerRef)\n      timerRef = 0\n      if (value !== '') {\n        timerRef = window.setTimeout(() => {\n          updateSearch('')\n          timerRef = 0\n        }, 1000)\n      }\n    })(search)\n\n    if (newItem) {\n      /**\n       * Imperative focus during keydown is risky so we prevent React's batching updates\n       * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n       */\n      setTimeout(() => {\n        ; (newItem as HTMLElement).focus()\n      })\n    }\n  }\n\n  onBeforeUnmount(() => {\n    if (timerRef)\n      window.clearTimeout(timerRef)\n    unlock?.()\n  })\n\n  // Make sure the whole tree has focus guards as our `MenuContent` may be\n  // the last element in the DOM (because of the `Portal`)\n  useFocusGuards()\n\n  function isPointerMovingToSubmenu(event: PointerEvent) {\n    const isMovingTowards = pointerDirRef === pointerGraceIntentRef?.side\n\n    return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef?.area)\n  }\n\n  provideMenuContentContext({\n    onItemEnter(event) {\n      if (isPointerMovingToSubmenu(event)) {\n        event.preventDefault()\n      }\n    },\n    onItemLeave(event) {\n      if (isPointerMovingToSubmenu(event))\n        return\n\n      popperContext.content.value?.focus()\n      currentItemId.value = undefined\n    },\n    onTriggerLeave(event) {\n      if (isPointerMovingToSubmenu(event)) {\n        event.preventDefault()\n      }\n    },\n    searchRef,\n    pointerGraceTimerRef,\n    onPointerGraceIntentChange(intent) {\n      pointerGraceIntentRef = intent\n    },\n  })\n\n  // Hanldlers\n\n  function onKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented)\n      return\n    // submenu key events bubble through portals. We only care about keys in this menu.\n    const target = event.target as HTMLElement\n    const isKeyDownInside = target.closest('[data-radix-menu-content]') === event.currentTarget\n    const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n    const isCharacterKey = event.key.length === 1\n\n    if (isKeyDownInside) {\n      // menus should not be navigated using tab key so we prevent it\n      if (event.key === 'Tab') {\n        event.preventDefault()\n      }\n\n      if (!isModifierKey && isCharacterKey)\n        handleTypeaheadSearch(event.key)\n    }\n\n    // focus first/last item based on key pressed\n    const content = popperContext.content.value\n\n    if (event.target !== content)\n      return\n\n    if (!FIRST_LAST_KEYS.includes(event.key))\n      return\n\n    event.preventDefault()\n    const candidateNodes = getItems().filter(item => !item.$$rcid.menu.disabled)\n\n    if (LAST_KEYS.includes(event.key))\n      candidateNodes.reverse()\n    focusFirst(candidateNodes)\n  }\n\n  function onBlur(event: FocusEvent) {\n    if (event.defaultPrevented)\n      return\n    // clear search buffer when leaving the menu\n    if (!(event.currentTarget as HTMLElement | null)?.contains(event.target as HTMLElement | null)) {\n      if (timerRef)\n        window.clearTimeout(timerRef)\n      searchRef.value = ''\n    }\n  }\n\n  function onPointermove(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    if (event.pointerType !== 'mouse')\n      return\n    const target = event.target as HTMLElement\n    const pointerXHasChanged = lastPointerXRef !== event.clientX\n\n    // We don't use `event.movementX` for this check because Safari will\n    // always return `0` on a pointer event.\n    if ((event.currentTarget as HTMLElement | null)?.contains(target) && pointerXHasChanged) {\n      const newDir = event.clientX > lastPointerXRef ? 'right' : 'left'\n      pointerDirRef = newDir\n      lastPointerXRef = event.clientX\n    }\n  }\n\n  const focusScope = useFocusScope({\n    el: popperContext.content,\n    trapped: props.trapFocus,\n    onMountAutoFocus(event) {\n      props.onOpenAutoFocus?.(event)\n      if (event.defaultPrevented)\n        return\n      // when opening, explicitly focus the content area only and leave\n      // `onEntryFocus` in  control of focusing first item\n\n      event.preventDefault()\n      popperContext.content.value?.focus({ preventScroll: true })\n    },\n    onUnmountAutoFocus: props.onCloseAutoFocus,\n  })\n\n  const dismissableLayer = useDismissableLayer({\n    el: popperContext.content,\n    disableOutsidePointerEvents: props.disableOutsidePointerEvents,\n    onInteractOutside: props.onInteractOutside,\n    onEscapeKeydown: props.onEscapeKeydown,\n    onDismiss: props.onDismiss,\n    onFocusOutside: props.onFocusOutside,\n    onPointerdownOutside: props.onPointerdownOutside,\n  })\n\n  const rovingFocusGroupRoot = useRovingFocusGroupRoot({\n    elRef,\n    currentTabStopId() {\n      return currentItemId.value\n    },\n    onUpdateCurrentTabStopId(tabStopId) {\n      currentItemId.value = tabStopId\n    },\n    preventScrollOnEntryFocus: true,\n    orientation: 'vertical',\n    loop,\n    dir: rootContext.dir,\n    onEntryFocus(event) {\n      props.onEntryFocus?.(event)\n      if (event.defaultPrevented)\n        return\n      // only focus first item when using keyboard\n      if (!rootContext.isUsingKeyboardRef.value) {\n        event.preventDefault()\n      }\n    },\n  })\n\n  const popperContent = usePopperContent(props)\n\n  return {\n    wrapperAttrs: popperContent.wrapperAttrs,\n    attrs(extraAttrs = []) {\n      const popperAttrs: PrimitiveElAttrs = {\n        'elRef': setElRef,\n        'role': 'menu',\n        'aria-orientation': 'vertical',\n        'data-state': context.open() ? 'open' : 'closed',\n        'data-radix-menu-content': '',\n        'dir': rootContext.dir.value,\n        'style': {\n          outline: 'none',\n        },\n        onKeydown,\n        onBlur,\n        onPointermove,\n      }\n\n      return popperContent.attrs([rovingFocusGroupRoot.attrs(), dismissableLayer.attrs(), focusScope.attrs(), popperAttrs, ...extraAttrs])\n    },\n  }\n}\n","import type { RadixPrimitiveReturns } from '../shared'\nimport { shallowRef, watchEffect } from 'vue'\nimport { DATA_COLLECTION_ITEM } from '../collection/index.ts'\nimport { useRovingFocusGroupItem } from '../roving-focus/index.ts'\nimport { useMenuContentContext } from './MenuContentImpl.ts'\nimport { Collection, type ItemData } from './MenuRoot.ts'\n\nexport interface MenuItemImplProps {\n  disabled?: boolean\n  textValue?: string\n}\n\nexport interface UseMenuItemImplProps {\n  disabled?: () => boolean | undefined\n  textValue?: string\n}\n\nexport function useMenuItemImpl(props: UseMenuItemImplProps): RadixPrimitiveReturns {\n  const contentContext = useMenuContentContext('MenuItemImpl')\n\n  const el = shallowRef<HTMLElement>()\n  const itemData: ItemData['menu'] = { disabled: props.disabled?.(), textValue: props.textValue || '' }\n\n  watchEffect(() => {\n    itemData.disabled = props.disabled?.()\n    itemData.textValue = props.textValue ?? el.value?.textContent ?? ''\n  })\n\n  function setElRef(v: HTMLElement | undefined) {\n    el.value = v\n    Collection.useCollectionItem(v, itemData, 'menu')\n  }\n\n  const isFocused = shallowRef(false)\n\n  /**\n   * We focus items on `pointerMove` to achieve the following:\n   *\n   * - Mouse over an item (it focuses)\n   * - Leave mouse where it is and use keyboard to focus a different item\n   * - Wiggle mouse without it leaving previously focused item\n   * - Previously focused item should re-focus\n   *\n   * If we used `mouseOver`/`mouseEnter` it would not re-focus when the mouse\n   * wiggles. This is to match native menu implementation.\n   */\n  function onPointermove(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n\n    if (event.pointerType !== 'mouse')\n      return\n\n    contentContext.onItemEnter(event)\n    if (!event.defaultPrevented) {\n      const item = event.currentTarget as HTMLElement | null\n      item?.focus({ preventScroll: true })\n    }\n  }\n\n  function onPointerleave(event: PointerEvent) {\n    if (event.pointerType !== 'mouse')\n      return\n\n    contentContext.onItemLeave(event)\n  }\n\n  function onFocus(event: FocusEvent) {\n    if (event.defaultPrevented)\n      return\n    isFocused.value = true\n  }\n\n  function onBlur(event: FocusEvent) {\n    if (event.defaultPrevented)\n      return\n    isFocused.value = false\n  }\n\n  const rovingFocusGroupItem = useRovingFocusGroupItem({\n    focusable() {\n      return !props.disabled?.()\n    },\n  })\n\n  return {\n    attrs(extraAttrs = []) {\n      const _disabled = props.disabled?.()\n\n      const rovingFocusGroupItemAttrs = {\n        'elRef': setElRef,\n        [DATA_COLLECTION_ITEM]: true,\n        'role': 'menuitem',\n        'data-highlighted': isFocused.value ? '' : undefined,\n        'aria-disabled': _disabled || undefined,\n        'data-disabled': _disabled ? '' : undefined,\n        onPointermove,\n        onPointerleave,\n        onFocus,\n        onBlur,\n      }\n\n      return rovingFocusGroupItem.attrs([rovingFocusGroupItemAttrs, ...extraAttrs])\n    },\n  }\n}\n","import type { EmitsToHookProps, PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { useMenuContentContext } from './MenuContentImpl.ts'\nimport { useMenuItemImpl, type UseMenuItemImplProps } from './MenuItemImpl.ts'\nimport { SELECTION_KEYS, useMenuRootContext } from './MenuRoot.ts'\n\nexport type MenuItemProps = {\n  disabled?: boolean\n  textValue?: string\n}\n\nexport const DEFAULT_MENU_ITEM_PROPS = {\n  disabled: undefined,\n} satisfies PrimitiveDefaultProps<MenuItemProps>\n\nexport type MenuItemEmits = {\n  select: [event: Event]\n}\n\nexport const ITEM_SELECT = 'menu.itemSelect'\n\nexport interface UseMenuItemProps extends UseMenuItemImplProps, EmitsToHookProps<MenuItemEmits> {}\n\nexport function useMenuItem(props: UseMenuItemProps = {}): RadixPrimitiveReturns {\n  const rootContext = useMenuRootContext('MenuItem')\n  const contentContext = useMenuContentContext('MenuItem')\n\n  let elRef: HTMLElement | undefined\n  function setElRef(v: HTMLElement | undefined) {\n    elRef = v\n  }\n\n  let isPointerDownRef = false\n\n  function onClick(event: MouseEvent) {\n    if (event.defaultPrevented)\n      return\n\n    if (!elRef)\n      return\n\n    const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true })\n    props.onSelect?.(itemSelectEvent)\n\n    if (itemSelectEvent.defaultPrevented) {\n      isPointerDownRef = false\n    }\n    else {\n      rootContext.onClose()\n    }\n  }\n\n  function onPointerdown() {\n    isPointerDownRef = true\n  }\n\n  function onPointerup(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    // Pointer down can move to a different menu item which should activate it on pointer up.\n    // We dispatch a click for selection to allow composition with click based triggers and to\n    // prevent Firefox from getting stuck in text selection mode when the menu closes.\n    if (!isPointerDownRef)\n      (event.currentTarget as HTMLElement | null)?.click()\n  }\n\n  function onKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented)\n      return\n    const isTypingAhead = contentContext.searchRef.value !== ''\n\n    if ((isTypingAhead && event.key === ' '))\n      return\n\n    if (SELECTION_KEYS.includes(event.key)) {\n      (event.currentTarget as HTMLElement | null)?.click()\n      /**\n       * We prevent default browser behaviour for selection keys as they should trigger\n       * a selection only:\n       * - prevents space from scrolling the page.\n       * - if keydown causes focus to move, prevents keydown from firing on the new target.\n       */\n\n      event.preventDefault()\n    }\n  }\n\n  const menuItemImpl = useMenuItemImpl({\n    disabled: props.disabled,\n    textValue: props.textValue,\n  })\n\n  const attrs = {\n    elRef: setElRef,\n    onClick,\n    onPointerdown,\n    onPointerup,\n    onKeydown,\n  }\n\n  return {\n    attrs(extraAttrs = []) {\n      return menuItemImpl.attrs([attrs, ...extraAttrs])\n    },\n  }\n}\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport type { PrimitiveDefaultProps, RadixPrimitiveGetAttrs, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { type Ref, shallowRef } from 'vue'\nimport { type CheckedState, isIndeterminate } from '../checkbox/index.ts'\nimport { createContext } from '../hooks/index.ts'\nimport { usePresence } from '../presence/index.ts'\nimport { mergePrimitiveAttrs } from '../shared/index.ts'\nimport { getCheckedState } from './utils.ts'\n\nexport interface MenuItemIndicatorProps {\n  as?: PrimitiveProps['as']\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: boolean\n}\n\nexport const DEFAULT_MENU_ITEM_INDICATOR_PROPS = {\n  as: 'span',\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<MenuItemIndicatorProps>\n\nexport interface ItemIndicatorContext {\n  checked: () => CheckedState\n}\n\nexport const [provideItemIndicatorContext, useItemIndicatorContext] = createContext<ItemIndicatorContext>('MenuItemIndicator', {\n  checked: () => false,\n})\n\nexport interface UseMenuItemIndicatorProps {\n  el?: Ref<HTMLElement | undefined>\n  forceMount?: boolean\n}\n\nexport function useMenuItemIndicator(props: UseMenuItemIndicatorProps = {}): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n  attrs: RadixPrimitiveGetAttrs\n}> {\n  const indicatorContext = useItemIndicatorContext('MenuItemIndicator')\n\n  const el = props.el ?? shallowRef<HTMLElement>()\n  const setElRef = props.el ? undefined : (v: HTMLElement | undefined) => el.value = v\n  // const forwardElement = useForwardElement(el)\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(el, () => isIndeterminate(indicatorContext.checked()) || indicatorContext.checked() === true)\n\n  return {\n    isPresent,\n    attrs(extraAttrs) {\n      const attrs = {\n        'elRef': setElRef,\n        'data-state': getCheckedState(indicatorContext.checked()),\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","import type { EmitsToHookProps, PrimitiveDefaultProps, PrimitiveElAttrs, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { type CheckedState, isIndeterminate } from '../checkbox/index.ts'\nimport { type MenuItemEmits, type MenuItemProps, useMenuItem, type UseMenuItemProps } from './MenuItem.ts'\nimport { provideItemIndicatorContext } from './MenuItemIndicator.ts'\nimport { getCheckedState } from './utils.ts'\n\nexport interface MenuCheckboxItemProps extends MenuItemProps {\n  checked?: CheckedState\n}\n\nexport const DEFAULT_MENU_CHECKBOX_ITEM_PROPS = {\n  disabled: undefined,\n  checked: false,\n} satisfies PrimitiveDefaultProps<MenuCheckboxItemProps>\n\nexport type MenuCheckboxItemEmits = {\n  'update:checked': [event: boolean]\n} & MenuItemEmits\n\nexport interface UseMenuCheckboxItemProps extends EmitsToHookProps<MenuCheckboxItemEmits>, UseMenuItemProps {\n  checked?: () => CheckedState\n}\n\nexport function useMenuCheckboxItem(props: UseMenuCheckboxItemProps): RadixPrimitiveReturns {\n  const { checked = () => false } = props\n\n  provideItemIndicatorContext({\n    checked,\n  })\n\n  const menuItem = useMenuItem({\n    ...props,\n    onSelect(event) {\n      props?.onSelect?.(event)\n\n      if (props.onUpdateChecked) {\n        const _checked = checked()\n        props.onUpdateChecked(isIndeterminate(_checked) ? true : !_checked)\n      }\n    },\n  })\n\n  return {\n    attrs(extraAttrs = []) {\n      const _checked = checked()\n      const menuItemAttrs: PrimitiveElAttrs = {\n        'role': 'menuitemcheckbox',\n        'aria-checked': isIndeterminate(_checked) ? 'mixed' : _checked,\n        'data-state': getCheckedState(_checked),\n      }\n\n      return menuItem.attrs([menuItemAttrs, ...extraAttrs])\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, type EmitsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_MENU_CHECKBOX_ITEM_PROPS, type MenuCheckboxItemEmits, type MenuCheckboxItemProps, useMenuCheckboxItem } from './MenuCheckboxItem.ts'\n\ndefineOptions({\n  name: 'MenuCheckboxItem',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<MenuCheckboxItemProps>(), DEFAULT_MENU_CHECKBOX_ITEM_PROPS)\n\nconst emit = defineEmits<MenuCheckboxItemEmits>()\n\nconst menuCheckboxItem = useMenuCheckboxItem(convertPropsToHookProps(\n  props,\n  ['checked', 'disabled'],\n  (): Required<EmitsToHookProps<MenuCheckboxItemEmits>> => ({\n    onUpdateChecked(checked) {\n      emit('update:checked', checked)\n    },\n    onSelect(event) {\n      emit('select', event)\n    },\n  }),\n))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(menuCheckboxItem.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","import type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared'\nimport { type Ref, shallowRef } from 'vue'\nimport { usePopperContext } from '../popper/index.ts'\nimport { usePresence } from '../presence/index.ts'\nimport { useMenuContext } from './MenuRoot.ts'\n\nexport interface MenuContentProps {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: boolean\n}\n\nexport const DEFAULT_MENU_CONTENT_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<MenuContentProps>\n\nexport interface UseMenuContentProps {\n  forceMount?: boolean\n}\n\nexport function useMenuContent(props: UseMenuContentProps = {}): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n}> {\n  const context = useMenuContext('MenuContent')\n  const popperContext = usePopperContext('MenuContent')\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(popperContext.content, context.open)\n\n  return {\n    isPresent,\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, type EmitsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_MENU_ITEM_PROPS, type MenuItemEmits, type MenuItemProps, useMenuItem } from './MenuItem.ts'\n\ndefineOptions({\n  name: 'MenuItem',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<MenuItemProps>(), DEFAULT_MENU_ITEM_PROPS)\nconst emit = defineEmits<MenuItemEmits>()\n\nconst menuItem = useMenuItem(convertPropsToHookProps(\n  props,\n  ['disabled'],\n  (): Required<EmitsToHookProps<MenuItemEmits>> => ({\n    onSelect(event) {\n      emit('select', event)\n    },\n  }),\n))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(menuItem.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_MENU_ITEM_INDICATOR_PROPS, type MenuItemIndicatorProps, useMenuItemIndicator } from './MenuItemIndicator.ts'\n\ndefineOptions({\n  name: 'MenuItemIndicator',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<MenuItemIndicatorProps>(), DEFAULT_MENU_ITEM_INDICATOR_PROPS)\n\nconst indicatorContext = useMenuItemIndicator(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <Primitive\n    v-if=\"indicatorContext.isPresent.value\"\n    v-bind=\"normalizeAttrs(indicatorContext.attrs([$attrs, { as }]))\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","import type { EmitsToHookProps } from '../shared/index.ts'\nimport { NOOP } from '@vue/shared'\nimport { createContext } from '../hooks/index.ts'\n\nexport interface MenuRadioGroupProps {\n  value?: string\n}\n\nexport type MenuRadioGroupEmits = {\n  /** Event handler called when the value changes. */\n  'update:value': [payload: string]\n}\n\nexport interface MenuRadioGroupContext {\n  value: () => string | undefined\n  onValueChange: (value: string) => void\n}\n\nexport const [providRadioGroupContext, useRadioGroupContext] = createContext<MenuRadioGroupContext>(\n  'MenuRadioGroup',\n  {\n    value() {\n      return undefined\n    },\n    onValueChange() { },\n  },\n)\n\nexport interface UseMenuRadioGroupProps extends EmitsToHookProps<MenuRadioGroupEmits> {\n  value?: () => string | undefined\n}\n\nexport function useMenuRadioGroup(props: UseMenuRadioGroupProps): void {\n  const {\n    value = () => undefined,\n    onUpdateValue = NOOP,\n  } = props\n  providRadioGroupContext({\n    value,\n    onValueChange: onUpdateValue,\n  })\n}\n","<script setup lang=\"ts\">\nimport type { EmitsToHookProps } from '../shared/index.ts'\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps } from '../shared/index.ts'\nimport { type MenuRadioGroupEmits, type MenuRadioGroupProps, useMenuRadioGroup } from './MenuRadioGroup.ts'\n\ndefineOptions({\n  name: 'MenuRadioGroup',\n})\n\nconst props = defineProps<MenuRadioGroupProps>()\n\nconst emit = defineEmits<MenuRadioGroupEmits>()\n\nuseMenuRadioGroup(convertPropsToHookProps(\n  props,\n  ['value'],\n  (): Required<EmitsToHookProps<MenuRadioGroupEmits>> => ({\n    onUpdateValue(value) {\n      emit('update:value', value)\n    },\n  }),\n))\n</script>\n\n<template>\n  <Primitive role=\"group\">\n    <slot />\n  </Primitive>\n</template>\n","import type { PrimitiveDefaultProps, PrimitiveElAttrs, RadixPrimitiveReturns } from '../shared'\nimport { type MenuItemEmits, type MenuItemProps, useMenuItem, type UseMenuItemProps } from './MenuItem.ts'\nimport { provideItemIndicatorContext } from './MenuItemIndicator.ts'\nimport { useRadioGroupContext } from './MenuRadioGroup.ts'\nimport { getCheckedState } from './utils.ts'\n\nexport interface MenuRadioItemProps extends MenuItemProps {\n  value: string\n}\n\nexport const DEFAULT_MENU_RADIO_ITEM_PROPS = {\n  disabled: undefined,\n} satisfies PrimitiveDefaultProps<MenuRadioItemProps>\n\nexport type MenuRadioItemEmits = MenuItemEmits\n\nexport interface UseMenuRadioItemProps {\n  value: string\n  menuItemProps?: UseMenuItemProps\n}\n\nexport function useMenuRadioItem(props: UseMenuRadioItemProps): RadixPrimitiveReturns {\n  const context = useRadioGroupContext('MenuRadioItem')\n\n  provideItemIndicatorContext({\n    checked() {\n      return props.value === context.value()\n    },\n  })\n\n  const menuItem = useMenuItem({\n    ...props.menuItemProps,\n    onSelect(event) {\n      props.menuItemProps?.onSelect?.(event)\n\n      context.onValueChange(props.value)\n    },\n  })\n\n  return {\n    attrs(extraAttrs = []) {\n      const _checked = props.value === context.value()\n\n      const menuItemAttrs: PrimitiveElAttrs = {\n        'role': 'menuitemradio',\n        'aria-checked': _checked,\n        'data-state': getCheckedState(_checked),\n      }\n\n      return menuItem.attrs([menuItemAttrs, ...extraAttrs])\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, type EmitsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_MENU_RADIO_ITEM_PROPS, type MenuRadioItemEmits, type MenuRadioItemProps, useMenuRadioItem } from './MenuRadioItem.ts'\n\ndefineOptions({\n  name: 'MenuRadioItem',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<MenuRadioItemProps>(), DEFAULT_MENU_RADIO_ITEM_PROPS)\n\nconst emit = defineEmits<MenuRadioItemEmits>()\n\nconst menuRadioItem = useMenuRadioItem(convertPropsToHookProps(\n  props,\n  ['disabled'],\n  (): Required<EmitsToHookProps<MenuRadioItemEmits>> => ({\n    onSelect(event) {\n      emit('select', event)\n    },\n  }),\n))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(menuRadioItem.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n","import type { EmitsToHookProps, PrimitiveDefaultProps } from '../shared/index.ts'\nimport { onWatcherCleanup, useId, watchEffect } from 'vue'\nimport { createContext, type MutableRefObject, useRef } from '../hooks/index.ts'\nimport { usePooperRoot } from '../popper/index.ts'\nimport { provideMenuContext, useMenuContext } from './MenuRoot.ts'\n\nexport interface MenuSubProps {\n  open?: boolean\n}\n\nexport const DEFAULT_MENU_SUB_PROPS = {\n  open: false,\n} satisfies PrimitiveDefaultProps<MenuSubProps, 'open'>\n\nexport type MenuSubEmits = {\n  'update:open': [open: boolean]\n}\n\nexport interface MenuSubContext {\n  contentId: string\n  triggerId: string\n  trigger: MutableRefObject<HTMLElement | undefined>\n  onTriggerChange: (trigger: HTMLElement | undefined) => void\n}\n\nexport const [provideMenuSubContext, useMenuSubContext] = createContext<MenuSubContext>('MenuSub')\n\nexport interface UseMenuSubProps extends Required<EmitsToHookProps<MenuSubEmits> > {\n  open: () => boolean\n}\n\nexport function useMenuSub(props: UseMenuSubProps) {\n  const parentMenuContext = useMenuContext('MenuSub')\n  const trigger = useRef<HTMLElement>()\n\n  // Prevent the parent menu from reopening with open submenus.\n  watchEffect(() => {\n    if (parentMenuContext.open() === false)\n      props.onUpdateOpen(false)\n\n    onWatcherCleanup(() => {\n      props.onUpdateOpen(false)\n    })\n  })\n\n  provideMenuContext({\n    open: props.open,\n    onOpenChange: props.onUpdateOpen,\n  })\n\n  provideMenuSubContext({\n    contentId: useId(),\n    triggerId: useId(),\n    trigger,\n    onTriggerChange(el) {\n      trigger.value = el\n    },\n  })\n\n  usePooperRoot()\n}\n","import type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared'\nimport { type Ref, shallowRef } from 'vue'\nimport { usePopperContext } from '../popper/index.ts'\nimport { usePresence } from '../presence/index.ts'\nimport { useMenuContext } from './MenuRoot.ts'\n\nexport interface MenuSubContentProps {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: boolean\n}\n\nexport const DEFAULT_MENU_SUB_CONTENT_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<MenuSubContentProps>\n\nexport interface UseMenuSubContentProps {\n  forceMount?: boolean\n}\n\nexport function useMenuSubContent(props: UseMenuSubContentProps): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n}> {\n  const context = useMenuContext('MenuSubContent')\n  const popperContext = usePopperContext('MenuSubContent')\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(popperContext.content, context.open)\n\n  return {\n    isPresent,\n  }\n}\n","import type { FocusOutsideEvent } from '../dismissable-layer/index.ts'\nimport type { PrimitiveDefaultProps } from '../shared/index.ts'\nimport { type PopperContentProps, usePopperContext } from '../popper/index.ts'\nimport {\n  useMenuContentImplShared,\n  type UseMenuContentImplSharedEmits,\n  type UseMenuContentImplSharedPeturns,\n  type UseMenuContentImplSharedPrivateProps,\n  type UseMenuContentImplSharedProps,\n} from './MenuContentImpl.ts'\nimport { SUB_CLOSE_KEYS, useMenuContext, useMenuRootContext } from './MenuRoot.ts'\nimport { useMenuSubContext } from './MenuSub.ts'\n\nexport interface MenuSubContentImplProps extends Omit<PopperContentProps, 'dir' | 'side' | 'align'> {\n  /**\n   * Whether keyboard navigation should loop around\n   * @defaultValue false\n   */\n  loop?: boolean\n}\n\nexport const DEFAULT_MENU_SUB_CONTENT_IMPL_PROPS = {\n  avoidCollisions: undefined,\n  hideWhenDetached: undefined,\n  loop: undefined,\n} satisfies PrimitiveDefaultProps<MenuSubContentImplProps>\n\nexport type MenuSubContentImplEmits = Omit<UseMenuContentImplSharedEmits, 'closeAutoFocus' | 'entryFocus'>\n\nexport interface UseMenuSubContentImplProps extends Omit<UseMenuContentImplSharedProps, keyof UseMenuContentImplSharedPrivateProps | 'onCloseAutoFocus' | 'onEntryFocus' | 'side' | 'align'> {\n}\n\nexport function useMenuSubContentImpl(props: UseMenuSubContentImplProps): UseMenuContentImplSharedPeturns {\n  const context = useMenuContext('MenuSubContent')\n  const rootContext = useMenuRootContext('MenuSubContent')\n  const subContext = useMenuSubContext('MenuSubContent')\n  const popperContext = usePopperContext('MenuSubContent')\n\n  function onOpenAutoFocus(event: Event) {\n    // when opening a submenu, focus content for keyboard users only\n    if (rootContext.isUsingKeyboardRef.value) {\n      popperContext.content.value?.focus()\n    }\n    event.preventDefault()\n  }\n  // The menu might close because of focusing another menu item in the parent menu. We\n  // don't want it to refocus the trigger in that case so we handle trigger focus ourselves.\n  function onCloseAutoFocus(event: Event) {\n    event.preventDefault()\n  }\n  function onFocusOutside(event: FocusOutsideEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    // We prevent closing when the trigger is focused to avoid triggering a re-open animation\n    // on pointer interaction.\n    if (event.target !== subContext.trigger.value) {\n      context.onOpenChange(false)\n    }\n  }\n\n  function onEscapeKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    rootContext.onClose()\n    // ensure pressing escape in submenu doesn't escape full screen mode\n    event.preventDefault()\n  }\n\n  function onKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    // Submenu key events bubble through portals. We only care about keys in this menu.\n    const isKeyDownInside = (event.currentTarget as HTMLElement).contains(event.target as HTMLElement)\n    const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir.value].includes(event.key)\n    if (isKeyDownInside && isCloseKey) {\n      context.onOpenChange(false)\n      // We focus manually because we prevented it in `onCloseAutoFocus`\n\n      subContext.trigger.value?.focus()\n      // prevent window from scrolling\n      event.preventDefault()\n    }\n  }\n\n  const menuContentImplShared = useMenuContentImplShared({\n    ...props,\n    onOpenAutoFocus,\n    onCloseAutoFocus,\n    onFocusOutside,\n    onEscapeKeydown,\n    align: 'start',\n    side: rootContext.dir.value !== 'rtl' ? 'right' : 'left',\n  })\n\n  const attrs = {\n    'aria-labelledby': subContext.triggerId,\n    onKeydown,\n  }\n\n  return {\n    wrapperAttrs: menuContentImplShared.wrapperAttrs,\n    attrs(extraAttrs = []) {\n      return menuContentImplShared.attrs([attrs, ...extraAttrs])\n    },\n  }\n}\n","import type { PrimitiveDefaultProps, PrimitiveElAttrs, RadixPrimitiveReturns } from '../shared/index.ts'\nimport type { Side } from './utils.ts'\nimport { onBeforeUnmount, onMounted } from 'vue'\nimport { usePopperContext } from '../popper/index.ts'\nimport { useMenuContentContext } from './MenuContentImpl.ts'\nimport { type MenuItemImplProps, useMenuItemImpl, type UseMenuItemImplProps } from './MenuItemImpl.ts'\nimport { SUB_OPEN_KEYS, useMenuContext, useMenuRootContext } from './MenuRoot.ts'\nimport { useMenuSubContext } from './MenuSub.ts'\n\nexport interface MenuSubTriggerProps extends MenuItemImplProps {\n}\n\nexport const DEFAULT_MENU_SUB_TRIGGER_PROPS = {\n  disabled: undefined,\n} satisfies PrimitiveDefaultProps<MenuSubTriggerProps>\n\nexport interface UseMenuSubTriggerProps extends UseMenuItemImplProps {\n\n}\n\nexport function useMenuSubTrigger(props: UseMenuSubTriggerProps = {}): RadixPrimitiveReturns {\n  const context = useMenuContext('MenuSubTrigger')\n  const rootContext = useMenuRootContext('MenuSubTrigger')\n  const subContext = useMenuSubContext('MenuSubTrigger')\n  const contentContext = useMenuContentContext('MenuSubTrigger')\n  const popperContext = usePopperContext('MenuSubTrigger')\n\n  function setElRef(v: HTMLElement | undefined) {\n    subContext.trigger.value = v\n  }\n\n  onMounted(() => {\n    popperContext.onAnchorChange(subContext.trigger.value)\n  })\n\n  let openTimerRef: number = 0\n\n  function clearOpenTimer() {\n    if (openTimerRef) {\n      window.clearTimeout(openTimerRef)\n      openTimerRef = 0\n    }\n  }\n\n  onBeforeUnmount(() => {\n    clearOpenTimer()\n\n    if (contentContext.pointerGraceTimerRef.value) {\n      window.clearTimeout(contentContext.pointerGraceTimerRef.value)\n      contentContext.pointerGraceTimerRef.value = 0\n    }\n    contentContext.onPointerGraceIntentChange(undefined)\n  })\n\n  function onClick(event: MouseEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    /**\n     * We manually focus because iOS Safari doesn't always focus on click (e.g. buttons)\n     * and we rely heavily on `onFocusOutside` for submenus to close when switching\n     * between separate submenus.\n     */\n    ;(event.currentTarget as HTMLElement).focus()\n    if (!context.open())\n      context.onOpenChange(true)\n  }\n\n  function onPointermove(event: PointerEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    if (event.pointerType !== 'mouse')\n      return\n\n    contentContext.onItemEnter(event)\n\n    if (event.defaultPrevented)\n      return\n\n    if (!context.open() && !openTimerRef) {\n      contentContext.onPointerGraceIntentChange(undefined)\n\n      openTimerRef = window.setTimeout(() => {\n        context.onOpenChange(true)\n        clearOpenTimer()\n        openTimerRef = 0\n      }, 100)\n    }\n  }\n\n  function onPointerleave(event: PointerEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    if (event.pointerType !== 'mouse')\n      return\n\n    clearOpenTimer()\n\n    const contentRect = popperContext.content.value?.getBoundingClientRect()\n    if (contentRect) {\n      // TODO: make sure to update this when we change positioning logic\n      const side = popperContext.content.value?.dataset.side as Side\n      const rightSide = side === 'right'\n      const bleed = rightSide ? -5 : +5\n      const contentNearEdge = contentRect[rightSide ? 'left' : 'right']\n      const contentFarEdge = contentRect[rightSide ? 'right' : 'left']\n\n      contentContext.onPointerGraceIntentChange({\n        area: [\n          // Apply a bleed on clientX to ensure that our exit point is\n          // consistently within polygon bounds\n          [event.clientX + bleed, event.clientY],\n          [contentNearEdge, contentRect.top],\n          [contentFarEdge, contentRect.top],\n          [contentFarEdge, contentRect.bottom],\n          [contentNearEdge, contentRect.bottom],\n        ],\n        side,\n      })\n\n      if (contentContext.pointerGraceTimerRef.value) {\n        window.clearTimeout(contentContext.pointerGraceTimerRef.value)\n      }\n      contentContext.pointerGraceTimerRef.value = window.setTimeout(\n        () => {\n          contentContext.onPointerGraceIntentChange(undefined)\n          contentContext.pointerGraceTimerRef.value = 0\n        },\n        300,\n      )\n    }\n    else {\n      contentContext.onTriggerLeave(event)\n      if (event.defaultPrevented)\n        return\n\n      // There's 100ms where the user may leave an item before the submenu was opened.\n      contentContext.onPointerGraceIntentChange(undefined)\n    }\n  }\n\n  function onKeydown(event: KeyboardEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    const isTypingAhead = contentContext.searchRef.value !== ''\n\n    if (isTypingAhead && event.key === ' ')\n      return\n\n    if (SUB_OPEN_KEYS[rootContext.dir.value].includes(event.key)) {\n      context.onOpenChange(true)\n      // The trigger may hold focus if opened via pointer interaction\n      // so we ensure content is given focus again when switching to keyboard.\n      popperContext.content.value?.focus()\n      // prevent window from scrolling\n      event.preventDefault()\n    }\n  }\n\n  const menuItem = useMenuItemImpl(props)\n\n  return {\n    attrs(extraAttrs = []) {\n      const _open = context.open()\n      const rovingFocusGroupItemAttrs: PrimitiveElAttrs = {\n        'id': subContext.triggerId,\n        'elRef': setElRef,\n        'aria-haspopup': 'menu',\n        'aria-expanded': _open ? 'true' : 'false',\n        'aria-controls': subContext.contentId,\n        'data-state': _open ? 'open' : 'closed',\n        onClick,\n        onPointermove,\n        onPointerleave,\n        onKeydown,\n      }\n\n      return menuItem.attrs([rovingFocusGroupItemAttrs, ...extraAttrs])\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_MENU_SUB_TRIGGER_PROPS, type MenuSubTriggerProps, useMenuSubTrigger } from './MenuSubTrigger.ts'\n\ndefineOptions({\n  name: 'MenuSubTrigger',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<MenuSubTriggerProps>(), DEFAULT_MENU_SUB_TRIGGER_PROPS)\n\nconst menuSubTrigger = useMenuSubTrigger(convertPropsToHookProps(props, ['disabled']))\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(menuSubTrigger.attrs([$attrs]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":["isUsingKeyboardRef","open","isIndeterminate"],"mappings":"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","x_google_ignoreList":[0]}