UNPKG

@geist-ui/react

Version:

Modern and minimalist React UI library.

88 lines (79 loc) 3.13 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; var _excluded = ["content", "children", "trigger", "placement", "initialVisible", "portalClassName", "disableItemsAutoClose", "onVisibleChange", "visible"]; import _JSXStyle from "../styled-jsx.es.js"; import React, { useEffect, useMemo, useState } from 'react'; import Tooltip from '../tooltip/tooltip'; import { getReactNode } from '../utils/collections'; import useScaleable, { withScaleable } from '../use-scaleable'; import { PopoverContext } from './popover-context'; var defaultProps = { disableItemsAutoClose: false, trigger: 'click', placement: 'bottom', portalClassName: '', initialVisible: false, hideArrow: false, type: 'default', enterDelay: 100, leaveDelay: 150, offset: 12, className: '', onVisibleChange: function () {} }; var PopoverComponent = function PopoverComponent(_ref) { var content = _ref.content, children = _ref.children, trigger = _ref.trigger, placement = _ref.placement, initialVisible = _ref.initialVisible, portalClassName = _ref.portalClassName, disableItemsAutoClose = _ref.disableItemsAutoClose, onVisibleChange = _ref.onVisibleChange, customVisible = _ref.visible, props = _objectWithoutProperties(_ref, _excluded); var _useScaleable = useScaleable(), SCALES = _useScaleable.SCALES; var _useState = useState(initialVisible), _useState2 = _slicedToArray(_useState, 2), visible = _useState2[0], setVisible = _useState2[1]; var textNode = useMemo(function () { return getReactNode(content); }, [content]); var onChildClick = function onChildClick() { onPopoverVisibleChange(false); }; var value = useMemo(function () { return { onItemClick: onChildClick, disableItemsAutoClose: disableItemsAutoClose }; }, [disableItemsAutoClose]); var onPopoverVisibleChange = function onPopoverVisibleChange(next) { setVisible(next); onVisibleChange(next); }; useEffect(function () { if (customVisible === undefined) return; onPopoverVisibleChange(customVisible); }, [customVisible]); return /*#__PURE__*/React.createElement(PopoverContext.Provider, { value: value }, /*#__PURE__*/React.createElement(Tooltip, _extends({ text: textNode, trigger: trigger, placement: placement, portalClassName: "popover ".concat(portalClassName), visible: visible, onVisibleChange: onPopoverVisibleChange }, props), children, /*#__PURE__*/React.createElement(_JSXStyle, { id: "622655983", dynamic: [SCALES.pt(0.9), SCALES.pr(0), SCALES.pb(0.9), SCALES.pl(0)] }, ".tooltip-content.popover > .inner{padding:".concat(SCALES.pt(0.9), " ").concat(SCALES.pr(0), " ").concat(SCALES.pb(0.9), " ").concat(SCALES.pl(0), ";}")))); }; PopoverComponent.defaultProps = defaultProps; PopoverComponent.displayName = 'GeistPopover'; var Popover = withScaleable(PopoverComponent); export default Popover;