UNPKG

@wordpress/components

Version:
109 lines (89 loc) 2.68 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _element = require("@wordpress/element"); var _classnames = _interopRequireDefault(require("classnames")); var _keycodes = require("@wordpress/keycodes"); var _compose = require("@wordpress/compose"); var _withFocusOutside = _interopRequireDefault(require("../higher-order/with-focus-outside")); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function ModalFrameContent({ overlayClassName, contentLabel, aria: { describedby, labelledby }, children, className, role, style, focusOnMount, shouldCloseOnEsc, onRequestClose }) { function handleEscapeKeyDown(event) { if (shouldCloseOnEsc && event.keyCode === _keycodes.ESCAPE) { event.stopPropagation(); if (onRequestClose) { onRequestClose(event); } } } const focusOnMountRef = (0, _compose.useFocusOnMount)(focusOnMount); const constrainedTabbingRef = (0, _compose.useConstrainedTabbing)(); const focusReturnRef = (0, _compose.useFocusReturn)(); return (// eslint-disable-next-line jsx-a11y/no-static-element-interactions (0, _element.createElement)("div", { className: (0, _classnames.default)('components-modal__screen-overlay', overlayClassName), onKeyDown: handleEscapeKeyDown }, (0, _element.createElement)("div", { className: (0, _classnames.default)('components-modal__frame', className), style: style, ref: (0, _compose.useMergeRefs)([constrainedTabbingRef, focusReturnRef, focusOnMountRef]), role: role, "aria-label": contentLabel, "aria-labelledby": contentLabel ? null : labelledby, "aria-describedby": describedby, tabIndex: "-1" }, children)) ); } class ModalFrame extends _element.Component { constructor() { super(...arguments); this.handleFocusOutside = this.handleFocusOutside.bind(this); } /** * Callback function called when clicked outside the modal. * * @param {Object} event Mouse click event. */ handleFocusOutside(event) { if (this.props.shouldCloseOnClickOutside && this.props.onRequestClose) { this.props.onRequestClose(event); } } /** * Renders the modal frame element. * * @return {WPElement} The modal frame element. */ render() { return (0, _element.createElement)(ModalFrameContent, this.props); } } var _default = (0, _withFocusOutside.default)(ModalFrame); exports.default = _default; //# sourceMappingURL=frame.js.map