@braineet/ui
Version:
Braineet design system
207 lines (206 loc) • 10.5 kB
JavaScript
"use strict";
exports.__esModule = true;
exports.destroyFns = exports.default = exports.OriginalModal = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactFocusLock = _interopRequireDefault(require("react-focus-lock"));
var _portal = _interopRequireDefault(require("../portal"));
var _transition = require("../transition");
var _components = require("./components");
exports.ModalCloseButton = _components.ModalCloseButton;
exports.ModalHeader = _components.ModalHeader;
exports.ModalBody = _components.ModalBody;
exports.ModalFooter = _components.ModalFooter;
var _context = require("./context");
var _styles = require("./styles");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["animation", "blockScrollOnMount", "children", "footer", "finalFocusRef", "initialFocusRef", "isCentered", "size", "overlayStyles", "overlayEvents", "modalWrapperChildren", "modalInnerStyles", "modalInnerProps"],
_excluded2 = ["animation", "blockScrollOnMount", "children", "footer", "initialFocusRef", "finalFocusRef", "isCentered", "size", "overlayStyles", "overlayEvents", "modalWrapperChildren", "modalInnerStyles", "modalInnerProps", "scrollBehavior"];
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
var destroyFns = [];
exports.destroyFns = destroyFns;
var OriginalModal = /*#__PURE__*/_react.default.memo(function (_ref) {
var animation = _ref.animation,
blockScrollOnMount = _ref.blockScrollOnMount,
_children = _ref.children,
footer = _ref.footer,
finalFocusRef = _ref.finalFocusRef,
initialFocusRef = _ref.initialFocusRef,
isCentered = _ref.isCentered,
size = _ref.size,
overlayStyles = _ref.overlayStyles,
overlayEvents = _ref.overlayEvents,
modalWrapperChildren = _ref.modalWrapperChildren,
modalInnerStyles = _ref.modalInnerStyles,
modalInnerProps = _ref.modalInnerProps,
restProps = _objectWithoutPropertiesLoose(_ref, _excluded);
var modalContext = (0, _context.useModalContext)();
var _modalContext$restPro = _extends({}, modalContext, restProps),
modalRef = _modalContext$restPro.modalRef,
modalInnerRef = _modalContext$restPro.modalInnerRef,
autoFocus = _modalContext$restPro.autoFocus,
componentsProps = _modalContext$restPro.componentsProps,
isOpen = _modalContext$restPro.isOpen,
noClose = _modalContext$restPro.noClose,
okLoading = _modalContext$restPro.okLoading,
standalone = _modalContext$restPro.standalone,
variant = _modalContext$restPro.variant,
scrollBehavior = _modalContext$restPro.scrollBehavior,
onClose = _modalContext$restPro.onClose,
closeOnOverlayClick = _modalContext$restPro.closeOnOverlayClick,
width = _modalContext$restPro.width,
modalID = _modalContext$restPro.modalID,
labelID = _modalContext$restPro.labelID,
title = _modalContext$restPro.title;
var onActivation = _react.default.useCallback(function () {
var animationDiration = !animation || animation && animation.name === 'none' ? 0 : 250;
setTimeout(function () {
if (initialFocusRef && initialFocusRef.current) {
initialFocusRef.current.focus();
}
}, animationDiration);
}, [initialFocusRef]);
var onDeactivation = _react.default.useCallback(function () {
if (finalFocusRef && finalFocusRef.current) {
finalFocusRef.current.focus();
}
}, [finalFocusRef]);
var onBackdrop = function onBackdrop(e) {
e.stopPropagation();
if ((modalRef == null ? void 0 : modalRef.current) !== e.target) return;
if (closeOnOverlayClick) {
onClose == null ? void 0 : onClose();
}
};
var animationComponents = {
none: _transition.None,
fade: _transition.Fade,
scaleFade: _transition.ScaleFade,
slide: _transition.Slide
};
var AnimationWrapper = animation && animation.name ? animationComponents[animation.name] : animationComponents.none;
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_styles.ModalOverlay, {
overlayStyles: overlayStyles,
"aria-hidden": "true"
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(AnimationWrapper, _extends({
show: isOpen
}, animation, {
children: function children(styles) {
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_styles.ModalWrapper, _extends({
ref: modalRef,
variant: variant,
isCentered: isCentered,
scrollBehavior: scrollBehavior,
onClick: onBackdrop,
"aria-labelledby": labelID,
"aria-modal": "true",
role: "dialog"
}, overlayEvents, {
children: [modalWrapperChildren || null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_styles.ModalInner, _extends({
id: modalID,
size: size,
$width: width,
style: styles,
$modalInnerStyles: modalInnerStyles,
$scrollBehavior: scrollBehavior,
role: "document",
$standalone: standalone
}, modalInnerProps, {
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFocusLock.default, {
ref: modalInnerRef,
autoFocus: variant !== 'confirmation' && autoFocus && !okLoading,
disabled: !autoFocus,
onActivation: onActivation,
onDeactivation: onDeactivation,
className: "focusLockModal",
children: standalone ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
id: labelID,
className: "sr-only",
children: title
}), _children]
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [variant !== 'confirmation' && !noClose && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ModalCloseButton, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_styles.ModalContentInner, _extends({
variant: variant
}, componentsProps.ModalContentInner, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ModalHeader, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ModalBody, {
children: _children
}), footer !== undefined ? footer : /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.ModalFooter, {})]
}))]
})
})
}))]
}));
}
}))]
});
});
exports.OriginalModal = OriginalModal;
var Modal = /*#__PURE__*/_react.default.forwardRef(function (_ref2, ref) {
var animation = _ref2.animation,
blockScrollOnMount = _ref2.blockScrollOnMount,
children = _ref2.children,
footer = _ref2.footer,
initialFocusRef = _ref2.initialFocusRef,
finalFocusRef = _ref2.finalFocusRef,
isCentered = _ref2.isCentered,
size = _ref2.size,
overlayStyles = _ref2.overlayStyles,
overlayEvents = _ref2.overlayEvents,
modalWrapperChildren = _ref2.modalWrapperChildren,
modalInnerStyles = _ref2.modalInnerStyles,
modalInnerProps = _ref2.modalInnerProps,
scrollBehavior = _ref2.scrollBehavior,
providerProps = _objectWithoutPropertiesLoose(_ref2, _excluded2);
var modalRef = (0, _react.useRef)(null);
var modalInnerRef = (0, _react.useRef)(null);
_react.default.useImperativeHandle(ref, function () {
return modalRef.current;
});
var modalProps = {
animation: animation,
blockScrollOnMount: blockScrollOnMount,
children: children,
footer: footer,
initialFocusRef: initialFocusRef,
finalFocusRef: finalFocusRef,
isCentered: isCentered,
size: size,
overlayStyles: overlayStyles,
overlayEvents: overlayEvents,
modalWrapperChildren: modalWrapperChildren,
modalInnerStyles: modalInnerStyles,
modalInnerProps: modalInnerProps,
scrollBehavior: scrollBehavior
};
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_portal.default, {
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.ModalProvider, _extends({
blockScrollOnMount: blockScrollOnMount,
scrollBehavior: scrollBehavior,
modalRef: modalRef,
modalInnerRef: modalInnerRef
}, providerProps, {
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(OriginalModal, _extends({}, modalProps))
}))
});
});
var defaultProps = {
blockScrollOnMount: true,
size: 'xl',
animation: {
name: 'scaleFade',
from: 'top'
},
modalWrapperChildren: null,
modalInnerStyles: {},
overlayEvents: {},
scrollBehavior: 'outside'
};
OriginalModal.defaultProps = defaultProps;
Modal.defaultProps = defaultProps;
var _default = /*#__PURE__*/_react.default.memo(Modal);
exports.default = _default;