UNPKG

@material-ui/lab

Version:

Material-UI Lab - Incubator for Material-UI React components.

143 lines (114 loc) 4.16 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.styles = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _Grow = _interopRequireDefault(require("@material-ui/core/Grow")); var _Paper = _interopRequireDefault(require("@material-ui/core/Paper")); var _Popper = _interopRequireDefault(require("@material-ui/core/Popper")); var _Unstable_TrapFocus = _interopRequireDefault(require("@material-ui/core/Unstable_TrapFocus")); var _utils = require("@material-ui/core/utils"); var _styles = require("@material-ui/core/styles"); var _useKeyDown = require("./hooks/useKeyDown"); var _dimensions = require("./constants/dimensions"); var _utils2 = require("./utils"); const styles = theme => (0, _styles.createStyles)({ root: { zIndex: theme.zIndex.modal }, paper: { transformOrigin: 'top center', '&:focus': { [_dimensions.IS_TOUCH_DEVICE_MEDIA]: { outline: 0 } } }, topTransition: { transformOrigin: 'bottom center' } }); exports.styles = styles; const PickersPopper = props => { const { anchorEl, children, classes, containerRef = null, onClose, onOpen, open, PopperProps, role, TransitionComponent = _Grow.default, TrapFocusProps } = props; const paperRef = React.useRef(null); const handleRef = (0, _utils.useForkRef)(paperRef, containerRef); const lastFocusedElementRef = React.useRef(null); const handlePaperRef = (0, _utils.useEventCallback)(node => { (0, _utils.setRef)(handleRef, node); if (node) { onOpen(); } }); (0, _useKeyDown.useGlobalKeyDown)(open, { [_useKeyDown.keycode.Esc]: onClose }); React.useEffect(() => { if (role === 'tooltip') { return; } if (open) { lastFocusedElementRef.current = document.activeElement; } else if (lastFocusedElementRef.current && lastFocusedElementRef.current instanceof HTMLElement) { lastFocusedElementRef.current.focus(); } }, [open, role]); const handleBlur = () => { if (!open) { return; } // document.activeElement is updating on the next tick after `blur` called (0, _utils2.executeInTheNextEventLoopTick)(() => { var _paperRef$current; if ((_paperRef$current = paperRef.current) === null || _paperRef$current === void 0 ? void 0 : _paperRef$current.contains(document.activeElement)) { return; } onClose(); }); }; return /*#__PURE__*/React.createElement(_Popper.default, (0, _extends2.default)({ transition: true, role: role, open: open, anchorEl: anchorEl, className: (0, _clsx.default)(classes.root, PopperProps === null || PopperProps === void 0 ? void 0 : PopperProps.className) }, PopperProps), ({ TransitionProps, placement }) => /*#__PURE__*/React.createElement(_Unstable_TrapFocus.default, (0, _extends2.default)({ open: open, disableAutoFocus: true, disableEnforceFocus: role === 'tooltip', isEnabled: () => true, getDoc: () => { var _paperRef$current$own, _paperRef$current2; return (_paperRef$current$own = (_paperRef$current2 = paperRef.current) === null || _paperRef$current2 === void 0 ? void 0 : _paperRef$current2.ownerDocument) !== null && _paperRef$current$own !== void 0 ? _paperRef$current$own : document; } }, TrapFocusProps), /*#__PURE__*/React.createElement(TransitionComponent, TransitionProps, /*#__PURE__*/React.createElement(_Paper.default, { tabIndex: -1, elevation: 8, ref: handlePaperRef, className: (0, _clsx.default)(classes.paper, placement === 'top' && classes.topTransition), onBlur: handleBlur }, children)))); }; var _default = (0, _styles.withStyles)(styles, { name: 'MuiPickersPopper' })(PickersPopper); exports.default = _default;