{"version":3,"file":"dropdown-menu.mjs","names":[],"sources":["../../../../../../packages/components/dropdown/src/dropdown-menu.vue"],"sourcesContent":["<template>\n  <ul\n    :ref=\"dropdownListWrapperRef\"\n    :class=\"dropdownKls\"\n    :style=\"rovingFocusGroupRootStyle\"\n    :tabindex=\"-1\"\n    :role=\"role\"\n    :aria-labelledby=\"triggerId\"\n    @focusin=\"handleFocus\"\n    @focusout=\"onBlur\"\n    @keydown.self=\"handleKeydown\"\n    @mousedown.self=\"onMousedown\"\n  >\n    <slot />\n  </ul>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject } from 'vue'\nimport {\n  composeEventHandlers,\n  composeRefs,\n  getEventCode,\n} from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport {\n  ROVING_FOCUS_COLLECTION_INJECTION_KEY,\n  ROVING_FOCUS_GROUP_INJECTION_KEY,\n} from '@element-plus/components/roving-focus-group'\nimport { useNamespace } from '@element-plus/hooks'\nimport { DROPDOWN_INJECTION_KEY } from './tokens'\nimport { dropdownMenuProps } from './dropdown'\nimport { useDropdown } from './useDropdown'\n\nexport default defineComponent({\n  name: 'ElDropdownMenu',\n  props: dropdownMenuProps,\n  setup(props) {\n    const ns = useNamespace('dropdown')\n    const { _elDropdownSize } = useDropdown()\n    const size = _elDropdownSize.value\n\n    const { contentRef, role, triggerId, isUsingKeyboard, handleClose } =\n      inject(DROPDOWN_INJECTION_KEY, undefined)!\n\n    const {\n      rovingFocusGroupRef,\n      rovingFocusGroupRootStyle,\n      onBlur,\n      onFocus,\n      onKeydown,\n      onMousedown,\n    } = inject(ROVING_FOCUS_GROUP_INJECTION_KEY, undefined)!\n\n    const { collectionRef: rovingFocusGroupCollectionRef } = inject(\n      ROVING_FOCUS_COLLECTION_INJECTION_KEY,\n      undefined\n    )!\n\n    const dropdownKls = computed(() => {\n      return [ns.b('menu'), ns.bm('menu', size?.value)]\n    })\n\n    const dropdownListWrapperRef = composeRefs(\n      contentRef,\n      rovingFocusGroupRef,\n      rovingFocusGroupCollectionRef\n    )\n\n    const handleKeydown = composeEventHandlers(\n      (e: KeyboardEvent) => {\n        props.onKeydown?.(e)\n      },\n      (e) => {\n        const { currentTarget, target } = e\n        const code = getEventCode(e)\n\n        const isKeydownContained = (currentTarget as Node).contains(\n          target as Node\n        )\n\n        if (isKeydownContained) {\n          // TODO: implement typeahead search\n        }\n\n        if (EVENT_CODE.tab === code) {\n          return handleClose()\n        }\n\n        onKeydown(e)\n      }\n    )\n\n    function handleFocus(e: FocusEvent) {\n      isUsingKeyboard.value && onFocus(e)\n    }\n\n    return {\n      size,\n      rovingFocusGroupRootStyle,\n      dropdownKls,\n      role,\n      triggerId,\n      dropdownListWrapperRef,\n      handleKeydown,\n      onBlur,\n      handleFocus,\n      onMousedown,\n    }\n  },\n})\n</script>\n"],"mappings":";;;;;;;qBACE,mBAaK,MAAA;EAZF,KAAK,KAAA;EACL,OAAK,eAAE,KAAA,YAAW;EAClB,OAAK,eAAE,KAAA,0BAAyB;EAChC,UAAU;EACV,MAAM,KAAA;EACN,mBAAiB,KAAA;EACjB,WAAO,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,KAAA,eAAA,KAAA,YAAA,GAAA,KAAA;EACT,YAAQ,OAAA,OAAA,OAAA,MAAA,GAAA,SAAE,KAAA,UAAA,KAAA,OAAA,GAAA,KAAA;EACV,WAAO,OAAA,OAAA,OAAA,KAAA,eAAA,GAAA,SAAO,KAAA,iBAAA,KAAA,cAAA,GAAA,KAAA,EAAa,CAAA,OAAA,CAAA;EAC3B,aAAS,OAAA,OAAA,OAAA,KAAA,eAAA,GAAA,SAAO,KAAA,eAAA,KAAA,YAAA,GAAA,KAAA,EAAW,CAAA,OAAA,CAAA;EAAA,EAAA,CAE5B,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA"}