ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
154 lines • 5.55 kB
JavaScript
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _typeof from "@babel/runtime/helpers/esm/typeof";
var _excluded = ["overlayClassName", "trigger", "mouseEnterDelay", "mouseLeaveDelay", "overlayStyle", "prefixCls", "afterVisibleChange", "transitionName", "animation", "placement", "align", "destroyTooltipOnHide", "defaultVisible"];
import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
import PropTypes from '../../_util/vue-types';
import Trigger from '../../vc-trigger';
import { placements } from './placements';
import Content from './Content';
import { getPropsSlot } from '../../_util/props-util';
import { defineComponent, ref, watchEffect } from 'vue';
function noop() {}
export default defineComponent({
compatConfig: {
MODE: 3
},
name: 'Tooltip',
inheritAttrs: false,
props: {
trigger: PropTypes.any.def(['hover']),
defaultVisible: {
type: Boolean,
default: undefined
},
visible: {
type: Boolean,
default: undefined
},
placement: PropTypes.string.def('right'),
transitionName: String,
animation: PropTypes.any,
afterVisibleChange: PropTypes.func.def(function () {}),
overlayStyle: {
type: Object,
default: undefined
},
overlayClassName: String,
prefixCls: PropTypes.string.def('rc-tooltip'),
mouseEnterDelay: PropTypes.number.def(0.1),
mouseLeaveDelay: PropTypes.number.def(0.1),
getPopupContainer: Function,
destroyTooltipOnHide: {
type: Boolean,
default: false
},
align: PropTypes.object.def(function () {
return {};
}),
arrowContent: PropTypes.any.def(null),
tipId: String,
builtinPlacements: PropTypes.object,
overlayInnerStyle: {
type: Object,
default: undefined
},
popupVisible: {
type: Boolean,
default: undefined
},
onVisibleChange: Function,
onPopupAlign: Function
},
slots: ['arrowContent', 'overlay'],
setup: function setup(props, _ref) {
var slots = _ref.slots,
attrs = _ref.attrs,
expose = _ref.expose;
var triggerDOM = ref();
var getPopupElement = function getPopupElement() {
var prefixCls = props.prefixCls,
tipId = props.tipId,
overlayInnerStyle = props.overlayInnerStyle;
return [_createVNode("div", {
"class": "".concat(prefixCls, "-arrow"),
"key": "arrow"
}, [getPropsSlot(slots, props, 'arrowContent')]), _createVNode(Content, {
"key": "content",
"prefixCls": prefixCls,
"id": tipId,
"overlayInnerStyle": overlayInnerStyle
}, {
overlay: slots.overlay
})];
};
var getPopupDomNode = function getPopupDomNode() {
return triggerDOM.value.getPopupDomNode();
};
expose({
getPopupDomNode: getPopupDomNode,
triggerDOM: triggerDOM,
forcePopupAlign: function forcePopupAlign() {
var _triggerDOM$value;
return (_triggerDOM$value = triggerDOM.value) === null || _triggerDOM$value === void 0 ? void 0 : _triggerDOM$value.forcePopupAlign();
}
});
var destroyTooltip = ref(false);
var autoDestroy = ref(false);
watchEffect(function () {
var destroyTooltipOnHide = props.destroyTooltipOnHide;
if (typeof destroyTooltipOnHide === 'boolean') {
destroyTooltip.value = destroyTooltipOnHide;
} else if (destroyTooltipOnHide && _typeof(destroyTooltipOnHide) === 'object') {
var keepParent = destroyTooltipOnHide.keepParent;
destroyTooltip.value = keepParent === true;
autoDestroy.value = keepParent === false;
}
});
return function () {
var overlayClassName = props.overlayClassName,
trigger = props.trigger,
mouseEnterDelay = props.mouseEnterDelay,
mouseLeaveDelay = props.mouseLeaveDelay,
overlayStyle = props.overlayStyle,
prefixCls = props.prefixCls,
afterVisibleChange = props.afterVisibleChange,
transitionName = props.transitionName,
animation = props.animation,
placement = props.placement,
align = props.align,
destroyTooltipOnHide = props.destroyTooltipOnHide,
defaultVisible = props.defaultVisible,
restProps = _objectWithoutProperties(props, _excluded);
var extraProps = _objectSpread({}, restProps);
if (props.visible !== undefined) {
extraProps.popupVisible = props.visible;
}
var triggerProps = _objectSpread(_objectSpread(_objectSpread({
popupClassName: overlayClassName,
prefixCls: prefixCls,
action: trigger,
builtinPlacements: placements,
popupPlacement: placement,
popupAlign: align,
afterPopupVisibleChange: afterVisibleChange,
popupTransitionName: transitionName,
popupAnimation: animation,
defaultPopupVisible: defaultVisible,
destroyPopupOnHide: destroyTooltip.value,
autoDestroy: autoDestroy.value,
mouseLeaveDelay: mouseLeaveDelay,
popupStyle: overlayStyle,
mouseEnterDelay: mouseEnterDelay
}, extraProps), attrs), {}, {
onPopupVisibleChange: props.onVisibleChange || noop,
onPopupAlign: props.onPopupAlign || noop,
ref: triggerDOM,
popup: getPopupElement()
});
return _createVNode(Trigger, triggerProps, {
default: slots.default
});
};
}
});