@braineet/ui
Version:
Braineet design system
204 lines (203 loc) • 9.97 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(e) { return e && e.__esModule ? e : { default: e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
var destroyFns = exports.destroyFns = [];
var OriginalModal = exports.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 || 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, {})]
}))]
})
})
}))]
}));
}
}))]
});
});
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 = exports.default = /*#__PURE__*/_react.default.memo(Modal);