{"version":3,"file":"dropdown.vue.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":["_resolveComponent","_normalizeClass","_createSlots","_withCtx","_createVNode","_createElementVNode","_openBlock","_createBlock"],"mappings":";;;;;;;;;;;;;;qCACEA,iBA0EM,iBAAA,CAAA,CAAA;;;;MAzEJ,KAkDa,EAAAC,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,GAAA,CAAA;AAAA,KAAA;AAAA;kBAhDF,qBAAM,EAAA;AAAA,QACd,GAAA,EAAA,WAAA;AAAA,QACA,QAAA,IAAA,CAAA,MAAA;AAAA,QACA,qBAAA,EAAkB,CAAK,QAAA,EAAA,KAAA,CAAA;AAAA,QACvB,kBAAY,IAAA,CAAA,aAAA;AAAA,QACZ,kBAAiB,EAAA,KAAA;AAAA,QACjB,cAAW,IAAA,CAAA,WAAA;AAAA,QACX,aAAY,EAAA,IAAA;AAAA,QACZ,WAAA,IAAA,CAAA,SAAA;AAAA,QACA,cAAA,EAAS,CAAO,IAAA,CAAA,EAAA,CAAA,EAAA,QAAA,CAAA,EAAA,KAAA,WAAA,CAAA;AAAA,QAChB,mBAAA,EAAA,CAAY,EAAW,GAAA,IAAA,CAAA,mBAAA,KAAX,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA;AAAA,QACvB,SAAA,IAAA,CAAA,OAAA;AAAA,QACA,cAAW,IAAE,CAAA,WAAA;AAAA,QACb,yBAAoB,EAAA,KAAA;AAAA,QACrB,eAAc,IAAA,CAAA,oBAAA;AAAA,QACd,sBAAI,IAAA,CAAA,WAAA;AAAA,QACH,gBAAe,EAAA,EAAA;AAAA,QAChB,IAAA,EAAA,EAAA;AAAA,QACC,UAAA,EAAI,CAAA,EAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,YAAA,CAAA;AAAA,QACJ,UAAI,EAAA,EAAA;AAAA,QAAA,MAAA,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,KAAA,CAAA,gBAAA,EAAA,IAAA,CAAA,CAAA;AAAA,QAEM,MAAO,EAAA,MAAA,CAoBD,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,KAAA,IAAA,CAAA,KAAA,CAAA,gBAAA,EAAA,KAAA,CAAA,CAAA;AAAA,SAnBfC,WAAA,CAAA;AAAA,QAAA,OAAA,EACMC,QAAW,MAAA;AAAA,UAAAC,YACd,uBAAqB,EAAA;AAAA,YACtB,GAAI,EAAA,WAAA;AAAA,YACH,cAAY,IAAA,CAAA,SAAA;AAAA,YAAA,GAAA,EAAA,IAAA;AAAA,YAcG,YAAA,EAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA,MAAA,CAAA;AAAA,WAAA,EAAA;AAAA,qBAZDD,QAAO,MAAA;AAAA,cAAAC,YAAE,wBAA8B,EAAA;AAAA,gBAAA,OAAA,EAAA,EAAA;AAAA,gBAW5B,gBAAA,IAAA,CAAA,cAAA;AAAA,eAAA,EAAA;AAAA,gBATjB,OAAA,EAAAD,QAAE,MAAI;AAAA,kBAAAC,YACV,gCAA4B,EAAA;AAAA,oBAC7B,MAAW,IAAA,CAAA,IAAA;AAAA,oBACV,kBAAuB,IAAA,CAAA,YAAA;AAAA,oBACvB,WAAW,EAAA,YAAA;AAAA,oBAAA,sBAAA,IAAA,CAAA,wBAAA;AAAA,oBAIa,cAAA,IAAA,CAAA,gBAAA;AAAA,mBAAA,EAAA;AAAA,oBADM,OAAA,EAAAD,QAAA,MAAA;AAAA,sBAAAC,WAAA,CAA7B,mCAA6B,IAAA,EAAA;AAAA,wBAAA,OAAA,EAAAD,QAAA,MAAA;AAAA;;;;;;;;;;;;;;;;;;QAMtB,CAAA,EAAA,CAAA;AAAA;AAAA,OAAA,EAAA;AAAA;UACf,IAAA,EAAA,SAAA;AAAA,UAAA,EAAA,EAAMA,QAAK,MAAA;AAAA,YAAAE,kBAAA;AAAA;;gBACT,KAAA,EAAuBJ,cAAA,CAAA,IAAA,CAAA,kBAAA,CAAA;AAAA,eAAA;AAAA;;;;;;;;SAIb,GAAA,KAAA,CAAA;AAAA,OAoBI,CAAA,EAAA,IAAA,EAAA,CAAA,UAAA,gBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,qBAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,YAAA,CAAA,CAAA;AAAA,MAAA,IAAA,CAAA,eAAAK,SAlBhB,EAAA,EAOYC,YAAA,0BAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,EAAA;AAAA,QANN,OAAA,EAAAJ,QAAA,MAAA;AAAA,UAAAC,YACG,oBAAY,EAAA;AAAA,YAClB,GAAI,EAAA,qBAAA;AAAA,YACJ,MAAO,IAAA,CAAA,YAAA;AAAA,YAAA,MAAA,IAAA,CAAA,IAAA;AAAA;;;;;YAMF,CAAA,EAAA,CAAA;AAAA;AAAA,aAAA,CAAA,EAAA,CADR,MAQY,EAAA,MAAA,EAAA,SAAA,CAAA,CAAA;AAAA,UAAA,KAAA,MAAA,CAAA,QAAA,IAAAE,SANN,EAAA,EAAsBC,YAAA,oBAAA,EAAA;AAAA,YACzB,GAAI,EAAA,CAAA;AAAA,YACJ,GAAI,EAAA,sBAAA;AAAA,YACJ,MAAK,IAAA,CAAA,YAAA;AAAA,YAAA,MAAA,IAAA,CAAA,IAAA;AAAA,YAEiD,OAAAN,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA,cAAA,CAAA,CAAA;AAAA,WAAA,EAAA;AAAA,YAAxC,OAAA,EAAAE,QAAA,MAAA;AAAA,cAAAC,YAAA,kBAAA,EAAA;AAAA,gBAA8B,OAAAH,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AAAA,eAAA,EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;"}