{"version":3,"file":"dropdown.vue2.mjs","sources":["../../../../../../packages/components/dropdown/src/dropdown.vue"],"sourcesContent":["<template>\n  <div :class=\"[ns.b(), ns.is('disabled', disabled)]\">\n    <el-tooltip\n      ref=\"popperRef\"\n      :role=\"role\"\n      :effect=\"effect\"\n      :fallback-placements=\"['bottom', 'top']\"\n      :popper-options=\"popperOptions\"\n      :gpu-acceleration=\"false\"\n      :placement=\"placement\"\n      :popper-class=\"[ns.e('popper'), popperClass!]\"\n      :popper-style=\"popperStyle\"\n      :trigger=\"trigger\"\n      :trigger-keys=\"triggerKeys\"\n      :trigger-target-el=\"contentRef\"\n      :show-arrow=\"showArrow\"\n      :show-after=\"trigger === 'hover' ? showTimeout : 0\"\n      :hide-after=\"trigger === 'hover' ? hideTimeout : 0\"\n      :virtual-ref=\"virtualRef ?? triggeringElementRef\"\n      :virtual-triggering=\"virtualTriggering || splitButton\"\n      :disabled=\"disabled\"\n      :transition=\"`${ns.namespace.value}-zoom-in-top`\"\n      :teleported=\"teleported\"\n      :append-to=\"appendTo\"\n      pure\n      focus-on-target\n      :persistent=\"persistent\"\n      @before-show=\"handleBeforeShowTooltip\"\n      @show=\"handleShowTooltip\"\n      @before-hide=\"handleBeforeHideTooltip\"\n    >\n      <template #content>\n        <el-scrollbar\n          ref=\"scrollbar\"\n          :wrap-style=\"wrapStyle\"\n          tag=\"div\"\n          :view-class=\"ns.e('list')\"\n        >\n          <el-roving-focus-group\n            :loop=\"loop\"\n            :current-tab-id=\"currentTabId\"\n            orientation=\"horizontal\"\n            @current-tab-id-change=\"handleCurrentTabIdChange\"\n          >\n            <slot name=\"dropdown\" />\n          </el-roving-focus-group>\n        </el-scrollbar>\n      </template>\n      <template v-if=\"!splitButton\" #default>\n        <el-only-child\n          :id=\"triggerId\"\n          ref=\"triggeringElementRef\"\n          role=\"button\"\n          :tabindex=\"tabindex\"\n        >\n          <slot name=\"default\" />\n        </el-only-child>\n      </template>\n    </el-tooltip>\n    <template v-if=\"splitButton\">\n      <el-button-group>\n        <el-button\n          ref=\"referenceElementRef\"\n          v-bind=\"buttonProps\"\n          :size=\"dropdownSize\"\n          :type=\"type\"\n          :disabled=\"disabled\"\n          :tabindex=\"tabindex\"\n          @click=\"handlerMainButtonClick\"\n        >\n          <slot name=\"default\" />\n        </el-button>\n        <el-button\n          :id=\"triggerId\"\n          ref=\"triggeringElementRef\"\n          v-bind=\"buttonProps\"\n          role=\"button\"\n          :size=\"dropdownSize\"\n          :type=\"type\"\n          :class=\"ns.e('caret-button')\"\n          :disabled=\"disabled\"\n          :tabindex=\"tabindex\"\n          :aria-label=\"t('el.dropdown.toggleDropdown')\"\n        >\n          <el-icon :class=\"ns.e('icon')\"><arrow-down /></el-icon>\n        </el-button>\n      </el-button-group>\n    </template>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  provide,\n  ref,\n  toRef,\n  unref,\n} from 'vue'\nimport ElButton from '@element-plus/components/button'\nimport ElTooltip from '@element-plus/components/tooltip'\nimport ElScrollbar from '@element-plus/components/scrollbar'\nimport ElIcon from '@element-plus/components/icon'\nimport ElRovingFocusGroup from '@element-plus/components/roving-focus-group'\nimport { ElOnlyChild } from '@element-plus/components/slot'\nimport { useFormSize } from '@element-plus/components/form'\nimport { addUnit, ensureArray } from '@element-plus/utils'\nimport { ArrowDown } from '@element-plus/icons-vue'\nimport { useId, useLocale, useNamespace } from '@element-plus/hooks'\nimport { dropdownProps } from './dropdown'\nimport {\n  DROPDOWN_INJECTION_KEY,\n  DROPDOWN_INSTANCE_INJECTION_KEY,\n} from './tokens'\n\nimport type { TooltipInstance } from '@element-plus/components/tooltip'\nimport type { CSSProperties } from 'vue'\n\nconst { ButtonGroup: ElButtonGroup } = ElButton\n\nexport default defineComponent({\n  name: 'ElDropdown',\n  components: {\n    ElButton,\n    ElButtonGroup,\n    ElScrollbar,\n    ElTooltip,\n    ElRovingFocusGroup,\n    ElOnlyChild,\n    ElIcon,\n    ArrowDown,\n  },\n  props: dropdownProps,\n  emits: ['visible-change', 'click', 'command'],\n  setup(props, { emit }) {\n    const _instance = getCurrentInstance()\n    const ns = useNamespace('dropdown')\n    const { t } = useLocale()\n\n    const triggeringElementRef = ref()\n    const referenceElementRef = ref()\n    const popperRef = ref<TooltipInstance>()\n    const contentRef = ref<HTMLElement>()\n    const scrollbar = ref(null)\n    const currentTabId = ref<string | null>(null)\n    const isUsingKeyboard = ref(false)\n\n    const wrapStyle = computed<CSSProperties>(() => ({\n      maxHeight: addUnit(props.maxHeight),\n    }))\n    const dropdownTriggerKls = computed(() => [ns.m(dropdownSize.value)])\n    const trigger = computed(() => ensureArray(props.trigger))\n\n    const defaultTriggerId = useId().value\n    const triggerId = computed<string>(() => props.id || defaultTriggerId)\n\n    function handleClick() {\n      popperRef.value?.onClose(undefined, 0)\n    }\n\n    function handleClose() {\n      popperRef.value?.onClose()\n    }\n\n    function handleOpen() {\n      popperRef.value?.onOpen()\n    }\n\n    const dropdownSize = useFormSize()\n\n    function commandHandler(...args: any[]) {\n      emit('command', ...args)\n    }\n\n    function onItemEnter() {\n      // NOOP for now\n    }\n\n    function onItemLeave() {\n      const contentEl = unref(contentRef)\n\n      trigger.value.includes('hover') &&\n        contentEl?.focus({\n          preventScroll: true,\n        })\n      currentTabId.value = null\n    }\n\n    function handleCurrentTabIdChange(id: string) {\n      currentTabId.value = id\n    }\n\n    function handleBeforeShowTooltip() {\n      emit('visible-change', true)\n    }\n\n    function handleShowTooltip(event?: Event) {\n      isUsingKeyboard.value = event?.type === 'keydown'\n      contentRef.value?.focus()\n    }\n\n    function handleBeforeHideTooltip() {\n      emit('visible-change', false)\n    }\n\n    provide(DROPDOWN_INJECTION_KEY, {\n      contentRef,\n      role: computed(() => props.role),\n      triggerId,\n      isUsingKeyboard,\n      onItemEnter,\n      onItemLeave,\n      handleClose,\n    })\n\n    provide(DROPDOWN_INSTANCE_INJECTION_KEY, {\n      instance: _instance,\n      dropdownSize,\n      handleClick,\n      commandHandler,\n      trigger: toRef(props, 'trigger'),\n      hideOnClick: toRef(props, 'hideOnClick'),\n    })\n\n    const handlerMainButtonClick = (event: MouseEvent) => {\n      emit('click', event)\n    }\n\n    return {\n      t,\n      ns,\n      scrollbar,\n      wrapStyle,\n      dropdownTriggerKls,\n      dropdownSize,\n      triggerId,\n      currentTabId,\n      handleCurrentTabIdChange,\n      handlerMainButtonClick,\n      handleClose,\n      handleOpen,\n      handleBeforeShowTooltip,\n      handleShowTooltip,\n      handleBeforeHideTooltip,\n      popperRef,\n      contentRef,\n      triggeringElementRef,\n      referenceElementRef,\n    }\n  },\n})\n</script>\n"],"names":["ElOnlyChild","ensureArray"],"mappings":"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"}