'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.styles = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _Modal = require('../Modal'); var _Modal2 = _interopRequireDefault(_Modal); var _withStyles = require('../styles/withStyles'); var _withStyles2 = _interopRequireDefault(_withStyles); var _Slide = require('../transitions/Slide'); var _Slide2 = _interopRequireDefault(_Slide); var _Paper = require('../Paper'); var _Paper2 = _interopRequireDefault(_Paper); var _helpers = require('../utils/helpers'); var _transitions = require('../styles/transitions'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getSlideDirection(anchor) { if (anchor === 'left') { return 'right'; } else if (anchor === 'right') { return 'left'; } else if (anchor === 'top') { return 'down'; } // (anchor === 'bottom') return 'up'; } // @inheritedComponent Modal var styles = exports.styles = function styles(theme) { return { docked: { flex: '0 0 auto' }, paper: { overflowY: 'auto', display: 'flex', flexDirection: 'column', height: '100vh', flex: '1 0 auto', zIndex: theme.zIndex.drawer, WebkitOverflowScrolling: 'touch', // Add iOS momentum scrolling. // temporary style position: 'fixed', top: 0, // We disable the focus ring for mouse, touch and keyboard users. // At some point, it would be better to keep it for keyboard users. // :focus-ring CSS pseudo-class will help. '&:focus': { outline: 'none' } }, paperAnchorLeft: { left: 0, right: 'auto' }, paperAnchorRight: { left: 'auto', right: 0 }, paperAnchorTop: { top: 0, left: 0, bottom: 'auto', right: 0, height: 'auto', maxHeight: '100vh' }, paperAnchorBottom: { top: 'auto', left: 0, bottom: 0, right: 0, height: 'auto', maxHeight: '100vh' }, paperAnchorDockedLeft: { borderRight: '1px solid ' + theme.palette.divider }, paperAnchorDockedTop: { borderBottom: '1px solid ' + theme.palette.divider }, paperAnchorDockedRight: { borderLeft: '1px solid ' + theme.palette.divider }, paperAnchorDockedBottom: { borderTop: '1px solid ' + theme.palette.divider }, modal: {} // Just here so people can override the style. }; }; var Drawer = function (_React$Component) { (0, _inherits3.default)(Drawer, _React$Component); function Drawer() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, Drawer); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Drawer.__proto__ || (0, _getPrototypeOf2.default)(Drawer)).call.apply(_ref, [this].concat(args))), _this), _this.state = { // Let's assume that the Drawer will always be rendered on user space. // We use that state is order to skip the appear transition during the // initial mount of the component. firstMount: true }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(Drawer, [{ key: 'componentWillReceiveProps', value: function componentWillReceiveProps() { this.setState({ firstMount: false }); } }, { key: 'render', value: function render() { var _props = this.props, anchorProp = _props.anchor, children = _props.children, classes = _props.classes, className = _props.className, elevation = _props.elevation, ModalProps = _props.ModalProps, onClose = _props.onClose, open = _props.open, PaperProps = _props.PaperProps, SlideProps = _props.SlideProps, theme = _props.theme, transitionDuration = _props.transitionDuration, variant = _props.variant, other = (0, _objectWithoutProperties3.default)(_props, ['anchor', 'children', 'classes', 'className', 'elevation', 'ModalProps', 'onClose', 'open', 'PaperProps', 'SlideProps', 'theme', 'transitionDuration', 'variant']); var anchor = anchorProp; if (theme.direction === 'rtl' && ['left', 'right'].includes(anchor)) { anchor = anchor === 'left' ? 'right' : 'left'; } var drawer = _react2.default.createElement( _Paper2.default, (0, _extends3.default)({ elevation: variant === 'temporary' ? elevation : 0, square: true, className: (0, _classnames2.default)(classes.paper, classes['paperAnchor' + (0, _helpers.capitalize)(anchor)], (0, _defineProperty3.default)({}, classes['paperAnchorDocked' + (0, _helpers.capitalize)(anchor)], variant !== 'temporary')) }, PaperProps), children ); if (variant === 'permanent') { return _react2.default.createElement( 'div', (0, _extends3.default)({ className: (0, _classnames2.default)(classes.docked, className) }, other), drawer ); } var slidingDrawer = _react2.default.createElement( _Slide2.default, (0, _extends3.default)({ 'in': open, direction: getSlideDirection(anchor), timeout: transitionDuration, appear: !this.state.firstMount }, SlideProps), drawer ); if (variant === 'persistent') { return _react2.default.createElement( 'div', (0, _extends3.default)({ className: (0, _classnames2.default)(classes.docked, className) }, other), slidingDrawer ); } // variant === temporary return _react2.default.createElement( _Modal2.default, (0, _extends3.default)({ BackdropProps: { transitionDuration: transitionDuration }, className: (0, _classnames2.default)(classes.modal, className), open: open, onClose: onClose }, other, ModalProps), slidingDrawer ); } }]); return Drawer; }(_react2.default.Component); Drawer.propTypes = process.env.NODE_ENV !== "production" ? { /** * Side from which the drawer will appear. */ anchor: _propTypes2.default.oneOf(['left', 'top', 'right', 'bottom']), /** * The contents of the drawer. */ children: _propTypes2.default.node, /** * Useful to extend the style applied to components. */ classes: _propTypes2.default.object.isRequired, /** * @ignore */ className: _propTypes2.default.string, /** * The elevation of the drawer. */ elevation: _propTypes2.default.number, /** * Properties applied to the `Modal` element. */ ModalProps: _propTypes2.default.object, /** * Callback fired when the component requests to be closed. * * @param {object} event The event source of the callback */ onClose: _propTypes2.default.func, /** * If `true`, the drawer is open. */ open: _propTypes2.default.bool, /** * Properties applied to the `Paper` element. */ PaperProps: _propTypes2.default.object, /** * Properties applied to the `Slide` element. */ SlideProps: _propTypes2.default.object, /** * @ignore */ theme: _propTypes2.default.object.isRequired, /** * The duration for the transition, in milliseconds. * You may specify a single timeout for all transitions, or individually with an object. */ transitionDuration: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.shape({ enter: _propTypes2.default.number, exit: _propTypes2.default.number })]), /** * The type of drawer. */ variant: _propTypes2.default.oneOf(['permanent', 'persistent', 'temporary']) } : {}; Drawer.defaultProps = { anchor: 'left', elevation: 16, open: false, transitionDuration: { enter: _transitions.duration.enteringScreen, exit: _transitions.duration.leavingScreen }, variant: 'temporary' // Mobile first. }; exports.default = (0, _withStyles2.default)(styles, { name: 'MuiDrawer', flip: false, withTheme: true })(Drawer);