element-plus
Version:
A Component Library for Vue 3
1 lines • 10.7 kB
Source Map (JSON)
{"version":3,"file":"dropdown.vue.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":["_openBlock","_createElementBlock","_normalizeClass","_createVNode","_createSlots","_withCtx","_renderSlot","_createBlock","_mergeProps"],"mappings":"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"}