element-plus
Version:
A Component Library for Vue 3
1 lines • 7.04 kB
Source Map (JSON)
{"version":3,"file":"dropdown-menu.mjs","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=\"menu\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @keydown=\"handleKeydown\"\n @mousedown=\"onMousedown\"\n >\n <slot />\n </ul>\n</template>\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, unref } from 'vue'\nimport { composeRefs, composeEventHandlers } from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { FOCUS_TRAP_INJECTION_KEY } from '@element-plus/components/focus-trap'\nimport {\n ROVING_FOCUS_COLLECTION_INJECTION_KEY,\n ROVING_FOCUS_GROUP_INJECTION_KEY,\n focusFirst,\n} from '@element-plus/components/roving-focus-group'\nimport { useNamespace } from '@element-plus/hooks'\nimport { DROPDOWN_INJECTION_KEY } from './tokens'\nimport {\n DROPDOWN_COLLECTION_INJECTION_KEY,\n dropdownMenuProps,\n FIRST_LAST_KEYS,\n LAST_KEYS,\n} 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 { focusTrapRef, onKeydown } = inject(\n FOCUS_TRAP_INJECTION_KEY,\n undefined\n )!\n\n const { contentRef } = inject(DROPDOWN_INJECTION_KEY, undefined)!\n\n const { collectionRef: dropdownCollectionRef, getItems } = inject(\n DROPDOWN_COLLECTION_INJECTION_KEY,\n undefined\n )!\n\n const {\n rovingFocusGroupRef,\n rovingFocusGroupRootStyle,\n tabIndex,\n onBlur,\n onFocus,\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 dropdownCollectionRef,\n focusTrapRef,\n rovingFocusGroupRef,\n rovingFocusGroupCollectionRef\n )\n\n const composedKeydown = composeEventHandlers(\n (e: KeyboardEvent) => {\n props.onKeydown?.(e)\n },\n (e) => {\n const { currentTarget, code, target } = e\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 e.stopImmediatePropagation()\n }\n\n e.preventDefault()\n\n if (target !== unref(contentRef)) return\n if (!FIRST_LAST_KEYS.includes(code)) return\n const items = getItems<{ disabled: boolean }>().filter(\n (item) => !item.disabled\n )\n const targets = items.map((item) => item.ref!)\n if (LAST_KEYS.includes(code)) {\n targets.reverse()\n }\n focusFirst(targets)\n }\n )\n\n const handleKeydown = (e: KeyboardEvent) => {\n composedKeydown(e)\n onKeydown(e)\n }\n\n return {\n size,\n rovingFocusGroupRootStyle,\n tabIndex,\n dropdownKls,\n dropdownListWrapperRef,\n handleKeydown,\n onBlur,\n onFocus,\n onMousedown,\n }\n },\n})\n</script>\n"],"names":["DROPDOWN_COLLECTION_INJECTION_KEY","ROVING_FOCUS_COLLECTION_INJECTION_KEY","_openBlock","_createElementBlock","_normalizeClass","_normalizeStyle","_renderSlot"],"mappings":"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"}