element-plus
Version:
A Component Library for Vue 3
1 lines • 8.81 kB
Source Map (JSON)
{"version":3,"file":"trigger.vue2.mjs","sources":["../../../../../../packages/components/popper/src/trigger.vue"],"sourcesContent":["<template>\n <el-only-child\n v-if=\"!virtualTriggering\"\n v-bind=\"$attrs\"\n :aria-controls=\"ariaControls\"\n :aria-describedby=\"ariaDescribedby\"\n :aria-expanded=\"ariaExpanded\"\n :aria-haspopup=\"ariaHaspopup\"\n >\n <slot />\n </el-only-child>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, onBeforeUnmount, onMounted, watch } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { unrefElement } from '@vueuse/core'\nimport { ElOnlyChild } from '@element-plus/components/slot'\nimport { useForwardRef } from '@element-plus/hooks'\nimport { isElement, isFocusable } from '@element-plus/utils'\nimport { POPPER_INJECTION_KEY } from './constants'\n\nimport type { WatchStopHandle } from 'vue'\nimport type { PopperTriggerProps } from './trigger'\n\ndefineOptions({\n name: 'ElPopperTrigger',\n inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<PopperTriggerProps>(), {})\n\nconst { role, triggerRef } = inject(POPPER_INJECTION_KEY, undefined)!\n\nuseForwardRef(triggerRef)\n\nconst ariaControls = computed<string | undefined>(() => {\n return ariaHaspopup.value ? props.id : undefined\n})\n\nconst ariaDescribedby = computed<string | undefined>(() => {\n if (role && role.value === 'tooltip') {\n return props.open && props.id ? props.id : undefined\n }\n return undefined\n})\n\nconst ariaHaspopup = computed<string | undefined>(() => {\n if (role && role.value !== 'tooltip') {\n return role.value\n }\n return undefined\n})\n\nconst ariaExpanded = computed<string | undefined>(() => {\n return ariaHaspopup.value ? `${props.open}` : undefined\n})\n\nlet virtualTriggerAriaStopWatch: WatchStopHandle | undefined = undefined\n\nconst TRIGGER_ELE_EVENTS = [\n 'onMouseenter',\n 'onMouseleave',\n 'onClick',\n 'onKeydown',\n 'onFocus',\n 'onBlur',\n 'onContextmenu',\n] as const\n\nonMounted(() => {\n watch(\n () => props.virtualRef,\n (virtualEl) => {\n if (virtualEl) {\n triggerRef.value = unrefElement(virtualEl as HTMLElement)\n }\n },\n {\n immediate: true,\n }\n )\n\n watch(\n triggerRef,\n (el, prevEl) => {\n virtualTriggerAriaStopWatch?.()\n virtualTriggerAriaStopWatch = undefined\n\n if (isElement(prevEl)) {\n TRIGGER_ELE_EVENTS.forEach((eventName) => {\n const handler = props[eventName]\n if (handler) {\n // @ts-ignore\n ;(prevEl as HTMLElement).removeEventListener(\n eventName.slice(2).toLowerCase(),\n handler,\n ['onFocus', 'onBlur'].includes(eventName)\n )\n }\n })\n }\n if (isElement(el)) {\n TRIGGER_ELE_EVENTS.forEach((eventName) => {\n const handler = props[eventName]\n if (handler) {\n // It's not worth doing type gymnastics here\n // @ts-ignore\n ;(el as HTMLElement).addEventListener(\n eventName.slice(2).toLowerCase(),\n handler,\n ['onFocus', 'onBlur'].includes(eventName)\n )\n }\n })\n if (isFocusable(el as HTMLElement)) {\n virtualTriggerAriaStopWatch = watch(\n [ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded],\n (watches) => {\n ;[\n 'aria-controls',\n 'aria-describedby',\n 'aria-haspopup',\n 'aria-expanded',\n ].forEach((key, idx) => {\n isNil(watches[idx])\n ? el.removeAttribute(key)\n : el.setAttribute(key, watches[idx]!)\n })\n },\n { immediate: true }\n )\n }\n }\n if (isElement(prevEl) && isFocusable(prevEl as HTMLElement)) {\n ;[\n 'aria-controls',\n 'aria-describedby',\n 'aria-haspopup',\n 'aria-expanded',\n ].forEach((key) => prevEl.removeAttribute(key))\n }\n },\n {\n immediate: true,\n }\n )\n})\n\nonBeforeUnmount(() => {\n virtualTriggerAriaStopWatch?.()\n virtualTriggerAriaStopWatch = undefined\n if (triggerRef.value && isElement(triggerRef.value)) {\n const el = triggerRef.value as HTMLElement\n TRIGGER_ELE_EVENTS.forEach((eventName) => {\n const handler = props[eventName]\n if (handler) {\n // @ts-ignore\n el.removeEventListener(\n eventName.slice(2).toLowerCase(),\n handler,\n ['onFocus', 'onBlur'].includes(eventName)\n )\n }\n })\n triggerRef.value = undefined\n }\n})\n\ndefineExpose({\n /**\n * @description trigger element\n */\n triggerRef,\n})\n</script>\n"],"names":["_createBlock","_unref","ElOnlyChild","_mergeProps","$attrs","_renderSlot"],"mappings":"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"}