{"version":3,"file":"dropdown.vue2.mjs","sources":["../../../../../packages/components/dropdown/src/dropdown.vue"],"sourcesContent":["<template>\n  <div :class=\"ns.b()\">\n    <el-tooltip\n      ref=\"popperRef\"\n      :effect=\"effect\"\n      :fallback-placements=\"['bottom', 'top']\"\n      :popper-options=\"popperOptions\"\n      :gpu-acceleration=\"false\"\n      :hide-after=\"hideTimeout\"\n      :manual-mode=\"true\"\n      :placement=\"placement\"\n      :popper-class=\"[ns.e('popper'), popperClass]\"\n      :reference-element=\"referenceElementRef?.$el\"\n      :trigger=\"trigger\"\n      :show-after=\"showTimeout\"\n      :stop-popper-mouse-event=\"false\"\n      :virtual-ref=\"triggeringElementRef\"\n      :virtual-triggering=\"splitButton\"\n      append-to-body\n      pure\n      :transition=\"`${ns.namespace}-zoom-in-top`\"\n      persistent\n      @show=\"$emit('visible-change', true)\"\n      @hide=\"$emit('visible-change', false)\"\n    >\n      <template #content>\n        <el-scrollbar\n          ref=\"scrollbar\"\n          :wrap-style=\"wrapStyle\"\n          tag=\"ul\"\n          :view-class=\"ns.e('list')\"\n        >\n          <el-focus-trap trapped @mount-on-focus=\"onMountOnFocus\">\n            <el-roving-focus-group\n              :loop=\"loop\"\n              :current-tab-id=\"currentTabId\"\n              orientation=\"horizontal\"\n              @current-tab-id-change=\"handleCurrentTabIdChange\"\n              @entry-focus=\"handleEntryFocus\"\n            >\n              <el-dropdown-collection>\n                <slot name=\"dropdown\"></slot>\n              </el-dropdown-collection>\n            </el-roving-focus-group>\n          </el-focus-trap>\n        </el-scrollbar>\n      </template>\n      <template v-if=\"!splitButton\" #default>\n        <div :class=\"dropdownTriggerKls\">\n          <slot name=\"default\" />\n        </div>\n      </template>\n    </el-tooltip>\n    <template v-if=\"splitButton\">\n      <el-button-group>\n        <el-button\n          ref=\"referenceElementRef\"\n          :size=\"dropdownSize\"\n          :type=\"type\"\n          @click=\"handlerMainButtonClick\"\n        >\n          <slot name=\"default\" />\n        </el-button>\n\n        <el-button\n          v-if=\"$slots.dropdown\"\n          ref=\"triggeringElementRef\"\n          :size=\"dropdownSize\"\n          :type=\"type\"\n          :class=\"ns.e('caret-button')\"\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<script lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  provide,\n  ref,\n  toRef,\n  unref\n} from 'vue'\nimport { ElButton, ElButtonGroup } from '@element-ultra/components/button'\nimport ElTooltip from '@element-ultra/components/tooltip'\nimport ElScrollbar from '@element-ultra/components/scrollbar'\nimport ElIcon from '@element-ultra/components/icon'\nimport ElFocusTrap from '@element-ultra/components/focus-trap'\nimport ElRovingFocusGroup from '@element-ultra/components/roving-focus-group'\nimport { addUnit } from '@element-ultra/utils'\nimport { ArrowDown } from 'icon-ultra'\nimport { useNamespace, useSize } from '@element-ultra/hooks'\nimport { ElCollection as ElDropdownCollection, dropdownProps } from './dropdown'\nimport { DROPDOWN_INJECTION_KEY } from './tokens'\n\nimport type { CSSProperties } from 'vue'\n\nexport default defineComponent({\n  name: 'ElDropdown',\n  components: {\n    ElButton,\n    ElFocusTrap,\n    ElButtonGroup,\n    ElScrollbar,\n    ElDropdownCollection,\n    ElTooltip,\n    ElRovingFocusGroup,\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\n    const triggeringElementRef = ref()\n    const referenceElementRef = ref()\n    const popperRef = ref<InstanceType<typeof ElTooltip> | null>(null)\n    const contentRef = ref<HTMLElement | null>(null)\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\n    function handleClick() {\n      handleClose()\n    }\n\n    function handleClose() {\n      popperRef.value?.onClose()\n    }\n\n    function handleOpen() {\n      popperRef.value?.onOpen()\n    }\n\n    const dropdownSize = useSize({ props })\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      contentEl?.focus()\n      currentTabId.value = null\n    }\n\n    function handleCurrentTabIdChange(id: string) {\n      currentTabId.value = id\n    }\n\n    function handleEntryFocus(e: Event) {\n      if (!isUsingKeyboard.value) {\n        e.preventDefault()\n        e.stopImmediatePropagation()\n      }\n    }\n\n    provide(DROPDOWN_INJECTION_KEY, {\n      contentRef,\n      isUsingKeyboard,\n      onItemEnter,\n      onItemLeave\n    })\n\n    provide('elDropdown', {\n      instance: _instance,\n      dropdownSize,\n      handleClick,\n      commandHandler,\n      trigger: toRef(props, 'trigger'),\n      hideOnClick: toRef(props, 'hideOnClick')\n    })\n\n    const onMountOnFocus = (e: Event) => {\n      e.preventDefault()\n      contentRef.value?.focus?.({\n        preventScroll: true\n      })\n    }\n\n    const handlerMainButtonClick = (event: MouseEvent) => {\n      emit('click', event)\n    }\n\n    return {\n      ns,\n      scrollbar,\n      wrapStyle,\n      dropdownTriggerKls,\n      dropdownSize,\n      currentTabId,\n      handleCurrentTabIdChange,\n      handlerMainButtonClick,\n      handleEntryFocus,\n      handleClose,\n      handleOpen,\n      onMountOnFocus,\n      popperRef,\n      triggeringElementRef,\n      referenceElementRef\n    }\n  }\n})\n</script>\n"],"names":["ElDropdownCollection"],"mappings":"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"}