@clive-cudi/geist-ui
Version:
Modern and minimalist React UI library.
108 lines (98 loc) • 4.62 kB
JavaScript
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", "hideArrow", "type", "enterDelay", "leaveDelay", "offset", "className"];
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 useScale, { withScale } from '../use-scale';
import { PopoverContext } from './popover-context';
import useClasses from '../use-classes';
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,
_ref$trigger = _ref.trigger,
trigger = _ref$trigger === void 0 ? defaultProps.trigger : _ref$trigger,
_ref$placement = _ref.placement,
placement = _ref$placement === void 0 ? defaultProps.placement : _ref$placement,
_ref$initialVisible = _ref.initialVisible,
initialVisible = _ref$initialVisible === void 0 ? defaultProps.initialVisible : _ref$initialVisible,
_ref$portalClassName = _ref.portalClassName,
portalClassName = _ref$portalClassName === void 0 ? defaultProps.portalClassName : _ref$portalClassName,
_ref$disableItemsAuto = _ref.disableItemsAutoClose,
disableItemsAutoClose = _ref$disableItemsAuto === void 0 ? defaultProps.disableItemsAutoClose : _ref$disableItemsAuto,
_ref$onVisibleChange = _ref.onVisibleChange,
onVisibleChange = _ref$onVisibleChange === void 0 ? defaultProps.onVisibleChange : _ref$onVisibleChange,
customVisible = _ref.visible,
_ref$hideArrow = _ref.hideArrow,
hideArrow = _ref$hideArrow === void 0 ? defaultProps.hideArrow : _ref$hideArrow,
_ref$type = _ref.type,
type = _ref$type === void 0 ? defaultProps.type : _ref$type,
_ref$enterDelay = _ref.enterDelay,
enterDelay = _ref$enterDelay === void 0 ? defaultProps.enterDelay : _ref$enterDelay,
_ref$leaveDelay = _ref.leaveDelay,
leaveDelay = _ref$leaveDelay === void 0 ? defaultProps.leaveDelay : _ref$leaveDelay,
_ref$offset = _ref.offset,
offset = _ref$offset === void 0 ? defaultProps.offset : _ref$offset,
_ref$className = _ref.className,
className = _ref$className === void 0 ? defaultProps.className : _ref$className,
props = _objectWithoutProperties(_ref, _excluded);
var _useScale = useScale(),
SCALES = _useScale.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 classes = useClasses('popover', portalClassName);
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: classes,
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 = withScale(PopoverComponent);
export default Popover;