UNPKG

@braineet/ui

Version:

Braineet design system

204 lines (203 loc) 9.97 kB
"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);