123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- import { defineComponent, inject, computed, onMounted, watch, onBeforeUnmount, openBlock, createBlock, unref, mergeProps, withCtx, renderSlot, createCommentVNode } from 'vue';
- import { isNil } from 'lodash-unified';
- import { unrefElement } from '@vueuse/core';
- import { POPPER_INJECTION_KEY } from './constants.mjs';
- import { popperTriggerProps } from './trigger.mjs';
- import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
- import { useForwardRef } from '../../../hooks/use-forward-ref/index.mjs';
- import { isFocusable } from '../../../utils/dom/aria.mjs';
- import { OnlyChild } from '../../slot/src/only-child.mjs';
- import { isElement } from '../../../utils/types.mjs';
- const __default__ = defineComponent({
- name: "ElPopperTrigger",
- inheritAttrs: false
- });
- const _sfc_main = /* @__PURE__ */ defineComponent({
- ...__default__,
- props: popperTriggerProps,
- setup(__props, { expose }) {
- const props = __props;
- const { role, triggerRef } = inject(POPPER_INJECTION_KEY, void 0);
- useForwardRef(triggerRef);
- const ariaControls = computed(() => {
- return ariaHaspopup.value ? props.id : void 0;
- });
- const ariaDescribedby = computed(() => {
- if (role && role.value === "tooltip") {
- return props.open && props.id ? props.id : void 0;
- }
- return void 0;
- });
- const ariaHaspopup = computed(() => {
- if (role && role.value !== "tooltip") {
- return role.value;
- }
- return void 0;
- });
- const ariaExpanded = computed(() => {
- return ariaHaspopup.value ? `${props.open}` : void 0;
- });
- let virtualTriggerAriaStopWatch = void 0;
- const TRIGGER_ELE_EVENTS = [
- "onMouseenter",
- "onMouseleave",
- "onClick",
- "onKeydown",
- "onFocus",
- "onBlur",
- "onContextmenu"
- ];
- onMounted(() => {
- watch(() => props.virtualRef, (virtualEl) => {
- if (virtualEl) {
- triggerRef.value = unrefElement(virtualEl);
- }
- }, {
- immediate: true
- });
- watch(triggerRef, (el, prevEl) => {
- virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch();
- virtualTriggerAriaStopWatch = void 0;
- if (isElement(el)) {
- TRIGGER_ELE_EVENTS.forEach((eventName) => {
- var _a;
- const handler = props[eventName];
- if (handler) {
- el.addEventListener(eventName.slice(2).toLowerCase(), handler);
- (_a = prevEl == null ? void 0 : prevEl.removeEventListener) == null ? void 0 : _a.call(prevEl, eventName.slice(2).toLowerCase(), handler);
- }
- });
- if (isFocusable(el)) {
- virtualTriggerAriaStopWatch = watch([ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded], (watches) => {
- [
- "aria-controls",
- "aria-describedby",
- "aria-haspopup",
- "aria-expanded"
- ].forEach((key, idx) => {
- isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]);
- });
- }, { immediate: true });
- }
- }
- if (isElement(prevEl) && isFocusable(prevEl)) {
- [
- "aria-controls",
- "aria-describedby",
- "aria-haspopup",
- "aria-expanded"
- ].forEach((key) => prevEl.removeAttribute(key));
- }
- }, {
- immediate: true
- });
- });
- onBeforeUnmount(() => {
- virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch();
- virtualTriggerAriaStopWatch = void 0;
- if (triggerRef.value && isElement(triggerRef.value)) {
- const el = triggerRef.value;
- TRIGGER_ELE_EVENTS.forEach((eventName) => {
- const handler = props[eventName];
- if (handler) {
- el.removeEventListener(eventName.slice(2).toLowerCase(), handler);
- }
- });
- triggerRef.value = void 0;
- }
- });
- expose({
- triggerRef
- });
- return (_ctx, _cache) => {
- return !_ctx.virtualTriggering ? (openBlock(), createBlock(unref(OnlyChild), mergeProps({ key: 0 }, _ctx.$attrs, {
- "aria-controls": unref(ariaControls),
- "aria-describedby": unref(ariaDescribedby),
- "aria-expanded": unref(ariaExpanded),
- "aria-haspopup": unref(ariaHaspopup)
- }), {
- default: withCtx(() => [
- renderSlot(_ctx.$slots, "default")
- ]),
- _: 3
- }, 16, ["aria-controls", "aria-describedby", "aria-expanded", "aria-haspopup"])) : createCommentVNode("v-if", true);
- };
- }
- });
- var ElPopperTrigger = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "trigger.vue"]]);
- export { ElPopperTrigger as default };
- //# sourceMappingURL=trigger2.mjs.map
|