import PropTypes from '../_util/vue-types'; import Trigger from '../vc-trigger'; import { placements } from './placements'; import Content from './Content'; import { hasProp, getComponentFromProp, getOptionProps } from '../_util/props-util'; function noop() {} export default { props: { trigger: PropTypes.any.def(['hover']), defaultVisible: PropTypes.bool, visible: PropTypes.bool, placement: PropTypes.string.def('right'), transitionName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), animation: PropTypes.any, afterVisibleChange: PropTypes.func.def(() => {}), overlay: PropTypes.any, overlayStyle: PropTypes.object, overlayClassName: PropTypes.string, prefixCls: PropTypes.string.def('rc-tooltip'), mouseEnterDelay: PropTypes.number.def(0), mouseLeaveDelay: PropTypes.number.def(0.1), getTooltipContainer: PropTypes.func, destroyTooltipOnHide: PropTypes.bool.def(false), align: PropTypes.object.def({}), arrowContent: PropTypes.any.def(null), tipId: PropTypes.string, builtinPlacements: PropTypes.object, }, methods: { getPopupElement() { const { prefixCls, tipId } = this.$props; return [
{getComponentFromProp(this, 'arrowContent')}
, , ]; }, getPopupDomNode() { return this.$refs.trigger.getPopupDomNode(); }, }, render(h) { const { overlayClassName, trigger, mouseEnterDelay, mouseLeaveDelay, overlayStyle, prefixCls, afterVisibleChange, transitionName, animation, placement, align, destroyTooltipOnHide, defaultVisible, getTooltipContainer, ...restProps } = getOptionProps(this); const extraProps = { ...restProps }; if (hasProp(this, 'visible')) { extraProps.popupVisible = this.$props.visible; } const triggerProps = { props: { popupClassName: overlayClassName, prefixCls: prefixCls, action: trigger, builtinPlacements: placements, popupPlacement: placement, popupAlign: align, getPopupContainer: getTooltipContainer, afterPopupVisibleChange: afterVisibleChange, popupTransitionName: transitionName, popupAnimation: animation, defaultPopupVisible: defaultVisible, destroyPopupOnHide: destroyTooltipOnHide, mouseLeaveDelay: mouseLeaveDelay, popupStyle: overlayStyle, mouseEnterDelay: mouseEnterDelay, ...extraProps, }, on: { ...this.$listeners, popupVisibleChange: this.$listeners.visibleChange || noop, popupAlign: this.$listeners.popupAlign || noop, }, ref: 'trigger', }; return ( {this.$slots.default} ); }, };