{"version":3,"file":"VMenu.mjs","names":["VDialogTransition","VDefaultsProvider","VOverlay","makeVOverlayProps","forwardRefs","useProxiedModel","useScopeId","computed","inject","mergeProps","provide","ref","shallowRef","watch","VMenuSymbol","focusChild","genericComponent","getUid","omit","propsFactory","useRender","makeVMenuProps","id","String","closeDelay","closeOnContentClick","locationStrategy","openDelay","scrim","scrollStrategy","transition","component","VMenu","name","props","emits","value","setup","_ref","slots","isActive","scopeId","uid","overlay","parent","openChildren","register","unregister","closeParents","setTimeout","val","onClickOutside","onKeydown","e","disabled","key","activatorEl","focus","onActivatorKeydown","el","contentEl","preventDefault","includes","activatorProps","overlayProps","filterProps","_createVNode","_mergeProps","class","style","$event","activator","default","_len","arguments","length","args","Array","_key","ΨopenChildren"],"sources":["../../../src/components/VMenu/VMenu.tsx"],"sourcesContent":["// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\n\n// Utilities\nimport { computed, inject, mergeProps, provide, ref, shallowRef, watch } from 'vue'\nimport { VMenuSymbol } from './shared'\nimport { focusChild, genericComponent, getUid, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component } from 'vue'\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const makeVMenuProps = propsFactory({\n  // TODO\n  // disableKeys: Boolean,\n  id: String,\n\n  ...omit(makeVOverlayProps({\n    closeDelay: 250,\n    closeOnContentClick: true,\n    locationStrategy: 'connected' as const,\n    openDelay: 300,\n    scrim: false,\n    scrollStrategy: 'reposition' as const,\n    transition: { component: VDialogTransition as Component },\n  }), ['absolute']),\n}, 'VMenu')\n\nexport const VMenu = genericComponent<OverlaySlots>()({\n  name: 'VMenu',\n\n  props: makeVMenuProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const { scopeId } = useScopeId()\n\n    const uid = getUid()\n    const id = computed(() => props.id || `v-menu-${uid}`)\n\n    const overlay = ref<VOverlay>()\n\n    const parent = inject(VMenuSymbol, null)\n    const openChildren = shallowRef(0)\n    provide(VMenuSymbol, {\n      register () {\n        ++openChildren.value\n      },\n      unregister () {\n        --openChildren.value\n      },\n      closeParents () {\n        setTimeout(() => {\n          if (!openChildren.value) {\n            isActive.value = false\n            parent?.closeParents()\n          }\n        }, 40)\n      },\n    })\n\n    watch(isActive, val => {\n      val ? parent?.register() : parent?.unregister()\n    })\n\n    function onClickOutside () {\n      parent?.closeParents()\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (props.disabled) return\n\n      if (e.key === 'Tab') {\n        isActive.value = false\n        overlay.value?.activatorEl?.focus()\n      }\n    }\n\n    function onActivatorKeydown (e: KeyboardEvent) {\n      if (props.disabled) return\n\n      const el = overlay.value?.contentEl\n      if (el && isActive.value) {\n        if (e.key === 'ArrowDown') {\n          e.preventDefault()\n          focusChild(el, 'next')\n        } else if (e.key === 'ArrowUp') {\n          e.preventDefault()\n          focusChild(el, 'prev')\n        }\n      } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n        isActive.value = true\n        e.preventDefault()\n        setTimeout(() => setTimeout(() => onActivatorKeydown(e)))\n      }\n    }\n\n    const activatorProps = computed(() =>\n      mergeProps({\n        'aria-haspopup': 'menu',\n        'aria-expanded': String(isActive.value),\n        'aria-owns': id.value,\n        onKeydown: onActivatorKeydown,\n      }, props.activatorProps)\n    )\n\n    useRender(() => {\n      const [overlayProps] = VOverlay.filterProps(props)\n\n      return (\n        <VOverlay\n          ref={ overlay }\n          class={[\n            'v-menu',\n            props.class,\n          ]}\n          style={ props.style }\n          { ...overlayProps }\n          v-model={ isActive.value }\n          absolute\n          activatorProps={ activatorProps.value }\n          onClick:outside={ onClickOutside }\n          onKeydown={ onKeydown }\n          { ...scopeId }\n        >\n          {{\n            activator: slots.activator,\n            default: (...args) => (\n              <VDefaultsProvider root=\"VMenu\">\n                { slots.default?.(...args) }\n              </VDefaultsProvider>\n            ),\n          }}\n        </VOverlay>\n      )\n    })\n\n    return forwardRefs({ id, ΨopenChildren: openChildren }, overlay)\n  },\n})\n\nexport type VMenu = InstanceType<typeof VMenu>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,iBAAiB;AAAA,SACjBC,iBAAiB;AAAA,SACjBC,QAAQ;AAAA,SACRC,iBAAiB,oCAE1B;AAAA,SACSC,WAAW;AAAA,SACXC,eAAe;AAAA,SACfC,UAAU,yCAEnB;AACA,SAASC,QAAQ,EAAEC,MAAM,EAAEC,UAAU,EAAEC,OAAO,EAAEC,GAAG,EAAEC,UAAU,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC1EC,WAAW;AAAA,SACXC,UAAU,EAAEC,gBAAgB,EAAEC,MAAM,EAAEC,IAAI,EAAEC,YAAY,EAAEC,SAAS,gCAE5E;AAIA,OAAO,MAAMC,cAAc,GAAGF,YAAY,CAAC;EACzC;EACA;EACAG,EAAE,EAAEC,MAAM;EAEV,GAAGL,IAAI,CAACf,iBAAiB,CAAC;IACxBqB,UAAU,EAAE,GAAG;IACfC,mBAAmB,EAAE,IAAI;IACzBC,gBAAgB,EAAE,WAAoB;IACtCC,SAAS,EAAE,GAAG;IACdC,KAAK,EAAE,KAAK;IACZC,cAAc,EAAE,YAAqB;IACrCC,UAAU,EAAE;MAAEC,SAAS,EAAE/B;IAA+B;EAC1D,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAClB,CAAC,EAAE,OAAO,CAAC;AAEX,OAAO,MAAMgC,KAAK,GAAGhB,gBAAgB,EAAgB,CAAC;EACpDiB,IAAI,EAAE,OAAO;EAEbC,KAAK,EAAEb,cAAc,EAAE;EAEvBc,KAAK,EAAE;IACL,mBAAmB,EAAGC,KAAc,IAAK;EAC3C,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAME,QAAQ,GAAGnC,eAAe,CAAC6B,KAAK,EAAE,YAAY,CAAC;IACrD,MAAM;MAAEO;IAAQ,CAAC,GAAGnC,UAAU,EAAE;IAEhC,MAAMoC,GAAG,GAAGzB,MAAM,EAAE;IACpB,MAAMK,EAAE,GAAGf,QAAQ,CAAC,MAAM2B,KAAK,CAACZ,EAAE,IAAK,UAASoB,GAAI,EAAC,CAAC;IAEtD,MAAMC,OAAO,GAAGhC,GAAG,EAAY;IAE/B,MAAMiC,MAAM,GAAGpC,MAAM,CAACM,WAAW,EAAE,IAAI,CAAC;IACxC,MAAM+B,YAAY,GAAGjC,UAAU,CAAC,CAAC,CAAC;IAClCF,OAAO,CAACI,WAAW,EAAE;MACnBgC,QAAQA,CAAA,EAAI;QACV,EAAED,YAAY,CAACT,KAAK;MACtB,CAAC;MACDW,UAAUA,CAAA,EAAI;QACZ,EAAEF,YAAY,CAACT,KAAK;MACtB,CAAC;MACDY,YAAYA,CAAA,EAAI;QACdC,UAAU,CAAC,MAAM;UACf,IAAI,CAACJ,YAAY,CAACT,KAAK,EAAE;YACvBI,QAAQ,CAACJ,KAAK,GAAG,KAAK;YACtBQ,MAAM,EAAEI,YAAY,EAAE;UACxB;QACF,CAAC,EAAE,EAAE,CAAC;MACR;IACF,CAAC,CAAC;IAEFnC,KAAK,CAAC2B,QAAQ,EAAEU,GAAG,IAAI;MACrBA,GAAG,GAAGN,MAAM,EAAEE,QAAQ,EAAE,GAAGF,MAAM,EAAEG,UAAU,EAAE;IACjD,CAAC,CAAC;IAEF,SAASI,cAAcA,CAAA,EAAI;MACzBP,MAAM,EAAEI,YAAY,EAAE;IACxB;IAEA,SAASI,SAASA,CAAEC,CAAgB,EAAE;MACpC,IAAInB,KAAK,CAACoB,QAAQ,EAAE;MAEpB,IAAID,CAAC,CAACE,GAAG,KAAK,KAAK,EAAE;QACnBf,QAAQ,CAACJ,KAAK,GAAG,KAAK;QACtBO,OAAO,CAACP,KAAK,EAAEoB,WAAW,EAAEC,KAAK,EAAE;MACrC;IACF;IAEA,SAASC,kBAAkBA,CAAEL,CAAgB,EAAE;MAC7C,IAAInB,KAAK,CAACoB,QAAQ,EAAE;MAEpB,MAAMK,EAAE,GAAGhB,OAAO,CAACP,KAAK,EAAEwB,SAAS;MACnC,IAAID,EAAE,IAAInB,QAAQ,CAACJ,KAAK,EAAE;QACxB,IAAIiB,CAAC,CAACE,GAAG,KAAK,WAAW,EAAE;UACzBF,CAAC,CAACQ,cAAc,EAAE;UAClB9C,UAAU,CAAC4C,EAAE,EAAE,MAAM,CAAC;QACxB,CAAC,MAAM,IAAIN,CAAC,CAACE,GAAG,KAAK,SAAS,EAAE;UAC9BF,CAAC,CAACQ,cAAc,EAAE;UAClB9C,UAAU,CAAC4C,EAAE,EAAE,MAAM,CAAC;QACxB;MACF,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAACG,QAAQ,CAACT,CAAC,CAACE,GAAG,CAAC,EAAE;QACnDf,QAAQ,CAACJ,KAAK,GAAG,IAAI;QACrBiB,CAAC,CAACQ,cAAc,EAAE;QAClBZ,UAAU,CAAC,MAAMA,UAAU,CAAC,MAAMS,kBAAkB,CAACL,CAAC,CAAC,CAAC,CAAC;MAC3D;IACF;IAEA,MAAMU,cAAc,GAAGxD,QAAQ,CAAC,MAC9BE,UAAU,CAAC;MACT,eAAe,EAAE,MAAM;MACvB,eAAe,EAAEc,MAAM,CAACiB,QAAQ,CAACJ,KAAK,CAAC;MACvC,WAAW,EAAEd,EAAE,CAACc,KAAK;MACrBgB,SAAS,EAAEM;IACb,CAAC,EAAExB,KAAK,CAAC6B,cAAc,CAAC,CACzB;IAED3C,SAAS,CAAC,MAAM;MACd,MAAM,CAAC4C,YAAY,CAAC,GAAG9D,QAAQ,CAAC+D,WAAW,CAAC/B,KAAK,CAAC;MAElD,OAAAgC,YAAA,CAAAhE,QAAA,EAAAiE,WAAA;QAAA,OAEUxB,OAAO;QAAA,SACN,CACL,QAAQ,EACRT,KAAK,CAACkC,KAAK,CACZ;QAAA,SACOlC,KAAK,CAACmC;MAAK,GACdL,YAAY;QAAA,cACPxB,QAAQ,CAACJ,KAAK;QAAA,uBAAAkC,MAAA,IAAd9B,QAAQ,CAACJ,KAAK,GAAAkC,MAAA;QAAA;QAAA,kBAEPP,cAAc,CAAC3B,KAAK;QAAA,mBACnBe,cAAc;QAAA,aACpBC;MAAS,GAChBX,OAAO;QAGV8B,SAAS,EAAEhC,KAAK,CAACgC,SAAS;QAC1BC,OAAO,EAAE,SAAAA,CAAA;UAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAIC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;YAAJF,IAAI,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;UAAA;UAAA,OAAAZ,YAAA,CAAAjE,iBAAA;YAAA,QACS;UAAO;YAAAuE,OAAA,EAAAA,CAAA,MAC3BjC,KAAK,CAACiC,OAAO,GAAG,GAAGI,IAAI,CAAC;UAAA;QAAA;MAE7B;IAIT,CAAC,CAAC;IAEF,OAAOxE,WAAW,CAAC;MAAEkB,EAAE;MAAEyD,aAAa,EAAElC;IAAa,CAAC,EAAEF,OAAO,CAAC;EAClE;AACF,CAAC,CAAC"}