index.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import _extends from "@babel/runtime/helpers/esm/extends";
  3. import { resolveDirective as _resolveDirective, createVNode as _createVNode, Fragment as _Fragment } from "vue";
  4. import { computed, defineComponent, ref } from 'vue';
  5. import Tooltip from '../tooltip';
  6. import abstractTooltipProps from '../tooltip/abstractTooltipProps';
  7. import { filterEmpty, initDefaultProps } from '../_util/props-util';
  8. import { anyType, withInstall } from '../_util/type';
  9. import useConfigInject from '../config-provider/hooks/useConfigInject';
  10. import omit from '../_util/omit';
  11. import { getTransitionName } from '../_util/transition';
  12. import { tooltipDefaultProps } from '../tooltip/Tooltip';
  13. import useStyle from './style';
  14. import classNames from '../_util/classNames';
  15. import warning from '../_util/warning';
  16. export const popoverProps = () => _extends(_extends({}, abstractTooltipProps()), {
  17. content: anyType(),
  18. title: anyType()
  19. });
  20. const Popover = defineComponent({
  21. compatConfig: {
  22. MODE: 3
  23. },
  24. name: 'APopover',
  25. inheritAttrs: false,
  26. props: initDefaultProps(popoverProps(), _extends(_extends({}, tooltipDefaultProps()), {
  27. trigger: 'hover',
  28. placement: 'top',
  29. mouseEnterDelay: 0.1,
  30. mouseLeaveDelay: 0.1
  31. })),
  32. setup(props, _ref) {
  33. let {
  34. expose,
  35. slots,
  36. attrs
  37. } = _ref;
  38. const tooltipRef = ref();
  39. warning(props.visible === undefined, 'popover', `\`visible\` will be removed in next major version, please use \`open\` instead.`);
  40. expose({
  41. getPopupDomNode: () => {
  42. var _a, _b;
  43. return (_b = (_a = tooltipRef.value) === null || _a === void 0 ? void 0 : _a.getPopupDomNode) === null || _b === void 0 ? void 0 : _b.call(_a);
  44. }
  45. });
  46. const {
  47. prefixCls,
  48. configProvider
  49. } = useConfigInject('popover', props);
  50. const [wrapSSR, hashId] = useStyle(prefixCls);
  51. const rootPrefixCls = computed(() => configProvider.getPrefixCls());
  52. const getOverlay = () => {
  53. var _a, _b;
  54. const {
  55. title = filterEmpty((_a = slots.title) === null || _a === void 0 ? void 0 : _a.call(slots)),
  56. content = filterEmpty((_b = slots.content) === null || _b === void 0 ? void 0 : _b.call(slots))
  57. } = props;
  58. const hasTitle = !!(Array.isArray(title) ? title.length : title);
  59. const hasContent = !!(Array.isArray(content) ? content.length : title);
  60. if (!hasTitle && !hasContent) return null;
  61. return _createVNode(_Fragment, null, [hasTitle && _createVNode("div", {
  62. "class": `${prefixCls.value}-title`
  63. }, [title]), _createVNode("div", {
  64. "class": `${prefixCls.value}-inner-content`
  65. }, [content])]);
  66. };
  67. return () => {
  68. const overlayCls = classNames(props.overlayClassName, hashId.value);
  69. return wrapSSR(_createVNode(Tooltip, _objectSpread(_objectSpread(_objectSpread({}, omit(props, ['title', 'content'])), attrs), {}, {
  70. "prefixCls": prefixCls.value,
  71. "ref": tooltipRef,
  72. "overlayClassName": overlayCls,
  73. "transitionName": getTransitionName(rootPrefixCls.value, 'zoom-big', props.transitionName),
  74. "data-popover-inject": true
  75. }), {
  76. title: getOverlay,
  77. default: slots.default
  78. }));
  79. };
  80. }
  81. });
  82. export default withInstall(Popover);