@clive-cudi/geist-ui
Version:
Modern and minimalist React UI library.
80 lines (74 loc) • 5.32 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 = ["children", "onClick", "visible", "width", "onContentClick", "backdropClassName", "positionClassName", "layerClassName"];
import _JSXStyle from "../styled-jsx.es.js";
import React from 'react';
import useTheme from '../use-theme';
import CssTransition from './css-transition';
import useCurrentState from '../utils/use-current-state';
import useClasses from '../use-classes';
var defaultProps = {
onClick: function onClick() {},
visible: false,
onContentClick: function onContentClick() {},
backdropClassName: '',
positionClassName: '',
layerClassName: ''
};
var Backdrop = /*#__PURE__*/React.memo(function (_ref) {
var children = _ref.children,
_ref$onClick = _ref.onClick,
onClick = _ref$onClick === void 0 ? defaultProps.onClick : _ref$onClick,
_ref$visible = _ref.visible,
visible = _ref$visible === void 0 ? defaultProps.visible : _ref$visible,
width = _ref.width,
_ref$onContentClick = _ref.onContentClick,
onContentClick = _ref$onContentClick === void 0 ? defaultProps.onContentClick : _ref$onContentClick,
_ref$backdropClassNam = _ref.backdropClassName,
backdropClassName = _ref$backdropClassNam === void 0 ? defaultProps.backdropClassName : _ref$backdropClassNam,
_ref$positionClassNam = _ref.positionClassName,
positionClassName = _ref$positionClassNam === void 0 ? defaultProps.positionClassName : _ref$positionClassNam,
_ref$layerClassName = _ref.layerClassName,
layerClassName = _ref$layerClassName === void 0 ? defaultProps.layerClassName : _ref$layerClassName,
props = _objectWithoutProperties(_ref, _excluded);
var theme = useTheme();
var _useCurrentState = useCurrentState(false),
_useCurrentState2 = _slicedToArray(_useCurrentState, 3),
setIsContentMouseDown = _useCurrentState2[1],
IsContentMouseDownRef = _useCurrentState2[2];
var clickHandler = function clickHandler(event) {
if (IsContentMouseDownRef.current) return;
onClick && onClick(event);
};
var mouseUpHandler = function mouseUpHandler() {
if (!IsContentMouseDownRef.current) return;
var timer = setTimeout(function () {
setIsContentMouseDown(false);
clearTimeout(timer);
}, 0);
};
return /*#__PURE__*/React.createElement(CssTransition, {
name: "backdrop-wrapper",
visible: visible,
clearTime: 300
}, /*#__PURE__*/React.createElement("div", _extends({
onClick: clickHandler,
onMouseUp: mouseUpHandler
}, props, {
className: _JSXStyle.dynamic([["2021762493", [width, theme.expressiveness.portalOpacity, theme.expressiveness.portalOpacity, theme.expressiveness.portalOpacity]]]) + " " + (props && props.className != null && props.className || useClasses('backdrop', backdropClassName) || "")
}), /*#__PURE__*/React.createElement("div", {
className: _JSXStyle.dynamic([["2021762493", [width, theme.expressiveness.portalOpacity, theme.expressiveness.portalOpacity, theme.expressiveness.portalOpacity]]]) + " " + (useClasses('layer', layerClassName) || "")
}), /*#__PURE__*/React.createElement("div", {
onClick: onContentClick,
onMouseDown: function onMouseDown() {
return setIsContentMouseDown(true);
},
className: _JSXStyle.dynamic([["2021762493", [width, theme.expressiveness.portalOpacity, theme.expressiveness.portalOpacity, theme.expressiveness.portalOpacity]]]) + " " + (useClasses('position', positionClassName) || "")
}, children), /*#__PURE__*/React.createElement(_JSXStyle, {
id: "2021762493",
dynamic: [width, theme.expressiveness.portalOpacity, theme.expressiveness.portalOpacity, theme.expressiveness.portalOpacity]
}, ".backdrop.__jsx-style-dynamic-selector{position:fixed;top:0;left:0;right:0;bottom:0;overflow:auto;z-index:1000;-webkit-overflow-scrolling:touch;box-sizing:border-box;text-align:center;}.position.__jsx-style-dynamic-selector{position:relative;z-index:1001;outline:none;max-width:90%;width:".concat(width, ";margin:20px auto;vertical-align:middle;display:inline-block;}.backdrop.__jsx-style-dynamic-selector:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:'';}.layer.__jsx-style-dynamic-selector{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;opacity:").concat(theme.expressiveness.portalOpacity, ";background-color:black;-webkit-transition:opacity 0.35s cubic-bezier(0.4,0,0.2,1);transition:opacity 0.35s cubic-bezier(0.4,0,0.2,1);pointer-events:none;z-index:1000;}.backdrop-wrapper-enter.__jsx-style-dynamic-selector .layer.__jsx-style-dynamic-selector{opacity:0;}.backdrop-wrapper-enter-active.__jsx-style-dynamic-selector .layer.__jsx-style-dynamic-selector{opacity:").concat(theme.expressiveness.portalOpacity, ";}.backdrop-wrapper-leave.__jsx-style-dynamic-selector .layer.__jsx-style-dynamic-selector{opacity:").concat(theme.expressiveness.portalOpacity, ";}.backdrop-wrapper-leave-active.__jsx-style-dynamic-selector .layer.__jsx-style-dynamic-selector{opacity:0;}"))));
}); // Backdrop.defaultProps = defaultProps
Backdrop.displayName = 'GeistBackdrop';
export default Backdrop;