UNPKG

3.71 kBJavaScriptView Raw
1"use client";
2
3var __rest = this && this.__rest || function (s, e) {
4 var t = {};
5 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
6 if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
8 }
9 return t;
10};
11import * as React from 'react';
12import classNames from 'classnames';
13import useMergedState from "rc-util/es/hooks/useMergedState";
14import KeyCode from "rc-util/es/KeyCode";
15import { getRenderPropValue } from '../_util/getRenderPropValue';
16import { getTransitionName } from '../_util/motion';
17import { cloneElement } from '../_util/reactNode';
18import { ConfigContext } from '../config-provider';
19import Tooltip from '../tooltip';
20import PurePanel, { Overlay } from './PurePanel';
21// CSSINJS
22import useStyle from './style';
23const InternalPopover = /*#__PURE__*/React.forwardRef((props, ref) => {
24 var _a, _b;
25 const {
26 prefixCls: customizePrefixCls,
27 title,
28 content,
29 overlayClassName,
30 placement = 'top',
31 trigger = 'hover',
32 children,
33 mouseEnterDelay = 0.1,
34 mouseLeaveDelay = 0.1,
35 onOpenChange,
36 overlayStyle = {}
37 } = props,
38 otherProps = __rest(props, ["prefixCls", "title", "content", "overlayClassName", "placement", "trigger", "children", "mouseEnterDelay", "mouseLeaveDelay", "onOpenChange", "overlayStyle"]);
39 const {
40 getPrefixCls
41 } = React.useContext(ConfigContext);
42 const prefixCls = getPrefixCls('popover', customizePrefixCls);
43 const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);
44 const rootPrefixCls = getPrefixCls();
45 const overlayCls = classNames(overlayClassName, hashId, cssVarCls);
46 const [open, setOpen] = useMergedState(false, {
47 value: (_a = props.open) !== null && _a !== void 0 ? _a : props.visible,
48 defaultValue: (_b = props.defaultOpen) !== null && _b !== void 0 ? _b : props.defaultVisible
49 });
50 const settingOpen = (value, e) => {
51 setOpen(value, true);
52 onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(value, e);
53 };
54 const onKeyDown = e => {
55 if (e.keyCode === KeyCode.ESC) {
56 settingOpen(false, e);
57 }
58 };
59 const onInternalOpenChange = value => {
60 settingOpen(value);
61 };
62 const titleNode = getRenderPropValue(title);
63 const contentNode = getRenderPropValue(content);
64 return wrapCSSVar(/*#__PURE__*/React.createElement(Tooltip, Object.assign({
65 placement: placement,
66 trigger: trigger,
67 mouseEnterDelay: mouseEnterDelay,
68 mouseLeaveDelay: mouseLeaveDelay,
69 overlayStyle: overlayStyle
70 }, otherProps, {
71 prefixCls: prefixCls,
72 overlayClassName: overlayCls,
73 ref: ref,
74 open: open,
75 onOpenChange: onInternalOpenChange,
76 overlay: titleNode || contentNode ? (/*#__PURE__*/React.createElement(Overlay, {
77 prefixCls: prefixCls,
78 title: titleNode,
79 content: contentNode
80 })) : null,
81 transitionName: getTransitionName(rootPrefixCls, 'zoom-big', otherProps.transitionName),
82 "data-popover-inject": true
83 }), cloneElement(children, {
84 onKeyDown: e => {
85 var _a, _b;
86 if (/*#__PURE__*/React.isValidElement(children)) {
87 (_b = children === null || children === void 0 ? void 0 : (_a = children.props).onKeyDown) === null || _b === void 0 ? void 0 : _b.call(_a, e);
88 }
89 onKeyDown(e);
90 }
91 })));
92});
93const Popover = InternalPopover;
94Popover._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;
95if (process.env.NODE_ENV !== 'production') {
96 Popover.displayName = 'Popover';
97}
98export default Popover;
\No newline at end of file