diff --git a/.size-limit.js b/.size-limit.js index e37014011c85ec..c182f87aca0f38 100644 --- a/.size-limit.js +++ b/.size-limit.js @@ -28,7 +28,7 @@ module.exports = [ name: 'The main docs bundle', webpack: false, path: main.path, - limit: '177 KB', + limit: '178 KB', }, { name: 'The docs home page', diff --git a/docs/src/modules/components/AppDrawer.js b/docs/src/modules/components/AppDrawer.js index 75c14c6318ce3f..787c15ddfe87ac 100644 --- a/docs/src/modules/components/AppDrawer.js +++ b/docs/src/modules/components/AppDrawer.js @@ -16,7 +16,6 @@ import { pageToTitle } from 'docs/src/modules/utils/helpers'; const styles = theme => ({ paper: { width: 240, - backgroundColor: theme.palette.background.paper, }, title: { color: theme.palette.text.secondary, diff --git a/docs/src/modules/components/Demo.js b/docs/src/modules/components/Demo.js index e4794b53fe8a81..fd4a61aded5fd3 100644 --- a/docs/src/modules/components/Demo.js +++ b/docs/src/modules/components/Demo.js @@ -15,6 +15,7 @@ import Tooltip from '@material-ui/core/Tooltip'; import Github from '@material-ui/docs/svgIcons/GitHub'; import MarkdownElement from '@material-ui/docs/MarkdownElement'; import { getDependencies } from 'docs/src/modules/utils/helpers'; +import DemoFrame from 'docs/src/modules/components/DemoFrame'; function compress(object) { return LZString.compressToBase64(JSON.stringify(object)) @@ -266,7 +267,13 @@ class Demo extends React.Component { [classes.demoHiddenHeader]: demoOptions.hideHeader, })} > - + {demoOptions.iframe ? ( + + + + ) : ( + + )} ); diff --git a/docs/src/modules/components/DemoFrame.js b/docs/src/modules/components/DemoFrame.js new file mode 100644 index 00000000000000..8d8af6b4509bc7 --- /dev/null +++ b/docs/src/modules/components/DemoFrame.js @@ -0,0 +1,84 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { create } from 'jss'; +import { + withStyles, + createGenerateClassName, + jssPreset, + MuiThemeProvider, +} from '@material-ui/core/styles'; +import rtl from 'jss-rtl'; +import Frame from 'react-frame-component'; +import JssProvider from 'react-jss/lib/JssProvider'; + +const styles = theme => ({ + root: { + backgroundColor: theme.palette.background.default, + flexGrow: 1, + height: 400, + border: 'none', + boxShadow: theme.shadows[1], + }, +}); + +const generateClassName = createGenerateClassName(); + +class DemoFrame extends React.Component { + state = { + ready: false, + }; + + handleRef = ref => { + this.contentDocument = ref ? ref.node.contentDocument : null; + }; + + onContentDidMount = () => { + this.setState({ + ready: true, + jss: create({ + plugins: [...jssPreset().plugins, rtl()], + insertionPoint: this.contentDocument.querySelector('#demo-frame-jss'), + }), + sheetsManager: new Map(), + container: this.contentDocument.body, + }); + }; + + onContentDidUpdate = () => { + this.contentDocument.body.dir = this.props.theme.direction; + }; + + render() { + const { children, classes, theme } = this.props; + + const inIframe = this.state.ready ? ( + + + {React.cloneElement(children, { + container: this.state.container, + })} + + + ) : null; + + return ( + +
+ {inIframe} + + ); + } +} + +DemoFrame.propTypes = { + children: PropTypes.node.isRequired, + classes: PropTypes.object.isRequired, + theme: PropTypes.object.isRequired, +}; + +export default withStyles(styles, { withTheme: true })(DemoFrame); diff --git a/docs/src/pages/demos/app-bar/BottomAppBar.js b/docs/src/pages/demos/app-bar/BottomAppBar.js index 1eda448c16a776..aa71c8f88e6d5a 100644 --- a/docs/src/pages/demos/app-bar/BottomAppBar.js +++ b/docs/src/pages/demos/app-bar/BottomAppBar.js @@ -2,6 +2,7 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { withStyles } from '@material-ui/core/styles'; import AppBar from '@material-ui/core/AppBar'; +import CssBaseline from '@material-ui/core/CssBaseline'; import Toolbar from '@material-ui/core/Toolbar'; import Typography from '@material-ui/core/Typography'; import IconButton from '@material-ui/core/IconButton'; @@ -18,25 +19,23 @@ import SearchIcon from '@material-ui/icons/Search'; import MoreIcon from '@material-ui/icons/MoreVert'; const styles = theme => ({ - container: { - position: 'relative', - maxWidth: 500, - }, text: { - paddingTop: theme.spacing.unit, + paddingTop: theme.spacing.unit * 2, paddingLeft: theme.spacing.unit * 2, paddingRight: theme.spacing.unit * 2, }, - main: { - height: 400, - overflowY: 'auto', - position: 'relative', + paper: { + paddingBottom: 50, }, list: { marginBottom: theme.spacing.unit * 2, }, subHeader: { - backgroundColor: '#fff', + backgroundColor: theme.palette.background.paper, + }, + appBar: { + top: 'auto', + bottom: 0, }, toolbar: { alignItems: 'center', @@ -61,7 +60,7 @@ const messages = [ { id: 2, primary: 'Birthday Gift', - secondary: `Do you have a suggestion for a good present for John on his work + secondary: `Do you have a suggestion for a good present for John on his work anniversary. I am really confused & would love your thoughts on it.`, person: '/static/images/uxceo-128.jpg', }, @@ -86,8 +85,8 @@ const messages = [ { id: 6, primary: 'Discussion', - secondary: `Menus that are generated by the bottom app bar (such as a bottom - navigation drawer or overflow menu) open as bottom sheets at a higher elevation + secondary: `Menus that are generated by the bottom app bar (such as a bottom + navigation drawer or overflow menu) open as bottom sheets at a higher elevation than the bar.`, person: '/static/images/remy.jpg', }, @@ -103,8 +102,9 @@ const messages = [ function BottomAppBar(props) { const { classes } = props; return ( -
- + + + Inbox @@ -121,7 +121,7 @@ function BottomAppBar(props) { ))} - + @@ -139,7 +139,7 @@ function BottomAppBar(props) {
-
+ ); } diff --git a/docs/src/pages/demos/app-bar/app-bar.md b/docs/src/pages/demos/app-bar/app-bar.md index e17a6b14aac6be..0e0e1e19ac81c7 100644 --- a/docs/src/pages/demos/app-bar/app-bar.md +++ b/docs/src/pages/demos/app-bar/app-bar.md @@ -41,4 +41,4 @@ A primary searchbar. ## Bottom App Bar -{{"demo": "pages/demos/app-bar/BottomAppBar.js"}} +{{"demo": "pages/demos/app-bar/BottomAppBar.js", "iframe": true}} diff --git a/docs/src/pages/demos/drawers/ClippedDrawer.js b/docs/src/pages/demos/drawers/ClippedDrawer.js index 94aa97997fd4ca..5c183d85f92e47 100644 --- a/docs/src/pages/demos/drawers/ClippedDrawer.js +++ b/docs/src/pages/demos/drawers/ClippedDrawer.js @@ -3,35 +3,36 @@ import PropTypes from 'prop-types'; import { withStyles } from '@material-ui/core/styles'; import Drawer from '@material-ui/core/Drawer'; import AppBar from '@material-ui/core/AppBar'; +import CssBaseline from '@material-ui/core/CssBaseline'; import Toolbar from '@material-ui/core/Toolbar'; import List from '@material-ui/core/List'; import Typography from '@material-ui/core/Typography'; import Divider from '@material-ui/core/Divider'; -import { mailFolderListItems, otherMailFolderListItems } from './tileData'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; const drawerWidth = 240; const styles = theme => ({ root: { - flexGrow: 1, - height: 440, - zIndex: 1, - overflow: 'hidden', - position: 'relative', display: 'flex', }, appBar: { zIndex: theme.zIndex.drawer + 1, }, + drawer: { + width: drawerWidth, + flexShrink: 0, + }, drawerPaper: { - position: 'relative', width: drawerWidth, }, content: { flexGrow: 1, - backgroundColor: theme.palette.background.default, padding: theme.spacing.unit * 3, - minWidth: 0, // So the Typography noWrap works }, toolbar: theme.mixins.toolbar, }); @@ -41,7 +42,8 @@ function ClippedDrawer(props) { return (
- + + Clipped drawer @@ -49,19 +51,56 @@ function ClippedDrawer(props) {
- {mailFolderListItems} + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + - {otherMailFolderListItems} + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} +
- {'You think water moves fast? You should see ice.'} + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Rhoncus dolor purus non enim praesent elementum + facilisis leo vel. Risus at ultrices mi tempus imperdiet. Semper risus in hendrerit + gravida rutrum quisque non tellus. Convallis convallis tellus id interdum velit laoreet id + donec ultrices. Odio morbi quis commodo odio aenean sed adipiscing. Amet nisl suscipit + adipiscing bibendum est ultricies integer quis. Cursus euismod quis viverra nibh cras. + Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. Mauris commodo quis + imperdiet massa tincidunt. Cras tincidunt lobortis feugiat vivamus at augue. At augue eget + arcu dictum varius duis at consectetur lorem. Velit sed ullamcorper morbi tincidunt. Lorem + donec massa sapien faucibus et molestie ac. + + + Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla + facilisi etiam dignissim diam. Pulvinar elementum integer enim neque volutpat ac + tincidunt. Ornare suspendisse sed nisi lacus sed viverra tellus. Purus sit amet volutpat + consequat mauris. Elementum eu facilisis sed odio morbi. Euismod lacinia at quis risus sed + vulputate odio. Morbi tincidunt ornare massa eget egestas purus viverra accumsan in. In + hendrerit gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem et + tortor. Habitant morbi tristique senectus et. Adipiscing elit duis tristique sollicitudin + nibh sit. Ornare aenean euismod elementum nisi quis eleifend. Commodo viverra maecenas + accumsan lacus vel facilisis. Nulla posuere sollicitudin aliquam ultrices sagittis orci a. +
); diff --git a/docs/src/pages/demos/drawers/MiniDrawer.js b/docs/src/pages/demos/drawers/MiniDrawer.js index 12dcee864504ed..ec2dec40d6fd64 100644 --- a/docs/src/pages/demos/drawers/MiniDrawer.js +++ b/docs/src/pages/demos/drawers/MiniDrawer.js @@ -6,23 +6,23 @@ import Drawer from '@material-ui/core/Drawer'; import AppBar from '@material-ui/core/AppBar'; import Toolbar from '@material-ui/core/Toolbar'; import List from '@material-ui/core/List'; +import CssBaseline from '@material-ui/core/CssBaseline'; import Typography from '@material-ui/core/Typography'; import Divider from '@material-ui/core/Divider'; import IconButton from '@material-ui/core/IconButton'; import MenuIcon from '@material-ui/icons/Menu'; import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; import ChevronRightIcon from '@material-ui/icons/ChevronRight'; -import { mailFolderListItems, otherMailFolderListItems } from './tileData'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; const drawerWidth = 240; const styles = theme => ({ root: { - flexGrow: 1, - height: 440, - zIndex: 1, - overflow: 'hidden', - position: 'relative', display: 'flex', }, appBar: { @@ -76,7 +76,6 @@ const styles = theme => ({ }, content: { flexGrow: 1, - backgroundColor: theme.palette.background.default, padding: theme.spacing.unit * 3, }, }); @@ -99,16 +98,21 @@ class MiniDrawer extends React.Component { return (
+ @@ -130,13 +134,50 @@ class MiniDrawer extends React.Component {
- {mailFolderListItems} + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + - {otherMailFolderListItems} + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} +
- {'You think water moves fast? You should see ice.'} + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. Rhoncus dolor purus non enim praesent + elementum facilisis leo vel. Risus at ultrices mi tempus imperdiet. Semper risus in + hendrerit gravida rutrum quisque non tellus. Convallis convallis tellus id interdum + velit laoreet id donec ultrices. Odio morbi quis commodo odio aenean sed adipiscing. + Amet nisl suscipit adipiscing bibendum est ultricies integer quis. Cursus euismod quis + viverra nibh cras. Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. + Mauris commodo quis imperdiet massa tincidunt. Cras tincidunt lobortis feugiat vivamus + at augue. At augue eget arcu dictum varius duis at consectetur lorem. Velit sed + ullamcorper morbi tincidunt. Lorem donec massa sapien faucibus et molestie ac. + + + Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla + facilisi etiam dignissim diam. Pulvinar elementum integer enim neque volutpat ac + tincidunt. Ornare suspendisse sed nisi lacus sed viverra tellus. Purus sit amet volutpat + consequat mauris. Elementum eu facilisis sed odio morbi. Euismod lacinia at quis risus + sed vulputate odio. Morbi tincidunt ornare massa eget egestas purus viverra accumsan in. + In hendrerit gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem + et tortor. Habitant morbi tristique senectus et. Adipiscing elit duis tristique + sollicitudin nibh sit. Ornare aenean euismod elementum nisi quis eleifend. Commodo + viverra maecenas accumsan lacus vel facilisis. Nulla posuere sollicitudin aliquam + ultrices sagittis orci a. +
); diff --git a/docs/src/pages/demos/drawers/PermanentDrawer.js b/docs/src/pages/demos/drawers/PermanentDrawer.js deleted file mode 100644 index 3a27ce91ffa339..00000000000000 --- a/docs/src/pages/demos/drawers/PermanentDrawer.js +++ /dev/null @@ -1,130 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import classNames from 'classnames'; -import { withStyles } from '@material-ui/core/styles'; -import Drawer from '@material-ui/core/Drawer'; -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -import List from '@material-ui/core/List'; -import MenuItem from '@material-ui/core/MenuItem'; -import TextField from '@material-ui/core/TextField'; -import Typography from '@material-ui/core/Typography'; -import Divider from '@material-ui/core/Divider'; -import { mailFolderListItems, otherMailFolderListItems } from './tileData'; - -const drawerWidth = 240; - -const styles = theme => ({ - root: { - flexGrow: 1, - }, - appFrame: { - height: 440, - zIndex: 1, - overflow: 'hidden', - position: 'relative', - display: 'flex', - width: '100%', - }, - appBar: { - width: `calc(100% - ${drawerWidth}px)`, - }, - 'appBar-left': { - marginLeft: drawerWidth, - }, - 'appBar-right': { - marginRight: drawerWidth, - }, - drawerPaper: { - position: 'relative', - width: drawerWidth, - }, - toolbar: theme.mixins.toolbar, - content: { - flexGrow: 1, - backgroundColor: theme.palette.background.default, - padding: theme.spacing.unit * 3, - }, -}); - -class PermanentDrawer extends React.Component { - state = { - anchor: 'left', - }; - - handleChange = event => { - this.setState({ - anchor: event.target.value, - }); - }; - - render() { - const { classes } = this.props; - const { anchor } = this.state; - - const drawer = ( - -
- - {mailFolderListItems} - - {otherMailFolderListItems} - - ); - - let before = null; - let after = null; - - if (anchor === 'left') { - before = drawer; - } else { - after = drawer; - } - - return ( -
- - left - right - -
- - - - Permanent drawer - - - - {before} -
-
- {'You think water moves fast? You should see ice.'} -
- {after} -
-
- ); - } -} - -PermanentDrawer.propTypes = { - classes: PropTypes.object.isRequired, -}; - -export default withStyles(styles)(PermanentDrawer); diff --git a/docs/src/pages/demos/drawers/PermanentDrawerLeft.js b/docs/src/pages/demos/drawers/PermanentDrawerLeft.js new file mode 100644 index 00000000000000..d549c36c38a129 --- /dev/null +++ b/docs/src/pages/demos/drawers/PermanentDrawerLeft.js @@ -0,0 +1,117 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import Drawer from '@material-ui/core/Drawer'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import List from '@material-ui/core/List'; +import Typography from '@material-ui/core/Typography'; +import Divider from '@material-ui/core/Divider'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; + +const drawerWidth = 240; + +const styles = theme => ({ + root: { + display: 'flex', + }, + appBar: { + width: `calc(100% - ${drawerWidth}px)`, + marginLeft: drawerWidth, + }, + drawer: { + width: drawerWidth, + flexShrink: 0, + }, + drawerPaper: { + width: drawerWidth, + }, + toolbar: theme.mixins.toolbar, + content: { + flexGrow: 1, + backgroundColor: theme.palette.background.default, + padding: theme.spacing.unit * 3, + }, +}); + +function PermanentDrawerLeft(props) { + const { classes } = props; + + return ( +
+ + + + + Permanent drawer + + + + +
+ + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + + + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + + +
+
+ + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Rhoncus dolor purus non enim praesent elementum + facilisis leo vel. Risus at ultrices mi tempus imperdiet. Semper risus in hendrerit + gravida rutrum quisque non tellus. Convallis convallis tellus id interdum velit laoreet id + donec ultrices. Odio morbi quis commodo odio aenean sed adipiscing. Amet nisl suscipit + adipiscing bibendum est ultricies integer quis. Cursus euismod quis viverra nibh cras. + Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. Mauris commodo quis + imperdiet massa tincidunt. Cras tincidunt lobortis feugiat vivamus at augue. At augue eget + arcu dictum varius duis at consectetur lorem. Velit sed ullamcorper morbi tincidunt. Lorem + donec massa sapien faucibus et molestie ac. + + + Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla + facilisi etiam dignissim diam. Pulvinar elementum integer enim neque volutpat ac + tincidunt. Ornare suspendisse sed nisi lacus sed viverra tellus. Purus sit amet volutpat + consequat mauris. Elementum eu facilisis sed odio morbi. Euismod lacinia at quis risus sed + vulputate odio. Morbi tincidunt ornare massa eget egestas purus viverra accumsan in. In + hendrerit gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem et + tortor. Habitant morbi tristique senectus et. Adipiscing elit duis tristique sollicitudin + nibh sit. Ornare aenean euismod elementum nisi quis eleifend. Commodo viverra maecenas + accumsan lacus vel facilisis. Nulla posuere sollicitudin aliquam ultrices sagittis orci a. + +
+
+ ); +} + +PermanentDrawerLeft.propTypes = { + classes: PropTypes.object.isRequired, +}; + +export default withStyles(styles)(PermanentDrawerLeft); diff --git a/docs/src/pages/demos/drawers/PermanentDrawerRight.js b/docs/src/pages/demos/drawers/PermanentDrawerRight.js new file mode 100644 index 00000000000000..7a8d66de92153f --- /dev/null +++ b/docs/src/pages/demos/drawers/PermanentDrawerRight.js @@ -0,0 +1,117 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import Drawer from '@material-ui/core/Drawer'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import List from '@material-ui/core/List'; +import Typography from '@material-ui/core/Typography'; +import Divider from '@material-ui/core/Divider'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; + +const drawerWidth = 240; + +const styles = theme => ({ + root: { + display: 'flex', + }, + appBar: { + width: `calc(100% - ${drawerWidth}px)`, + marginRight: drawerWidth, + }, + drawer: { + width: drawerWidth, + flexShrink: 0, + }, + drawerPaper: { + width: drawerWidth, + }, + toolbar: theme.mixins.toolbar, + content: { + flexGrow: 1, + backgroundColor: theme.palette.background.default, + padding: theme.spacing.unit * 3, + }, +}); + +function PermanentDrawerRight(props) { + const { classes } = props; + + return ( +
+ + + + + Permanent drawer + + + +
+
+ + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt + ut labore et dolore magna aliqua. Rhoncus dolor purus non enim praesent elementum + facilisis leo vel. Risus at ultrices mi tempus imperdiet. Semper risus in hendrerit + gravida rutrum quisque non tellus. Convallis convallis tellus id interdum velit laoreet id + donec ultrices. Odio morbi quis commodo odio aenean sed adipiscing. Amet nisl suscipit + adipiscing bibendum est ultricies integer quis. Cursus euismod quis viverra nibh cras. + Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. Mauris commodo quis + imperdiet massa tincidunt. Cras tincidunt lobortis feugiat vivamus at augue. At augue eget + arcu dictum varius duis at consectetur lorem. Velit sed ullamcorper morbi tincidunt. Lorem + donec massa sapien faucibus et molestie ac. + + + Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla + facilisi etiam dignissim diam. Pulvinar elementum integer enim neque volutpat ac + tincidunt. Ornare suspendisse sed nisi lacus sed viverra tellus. Purus sit amet volutpat + consequat mauris. Elementum eu facilisis sed odio morbi. Euismod lacinia at quis risus sed + vulputate odio. Morbi tincidunt ornare massa eget egestas purus viverra accumsan in. In + hendrerit gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem et + tortor. Habitant morbi tristique senectus et. Adipiscing elit duis tristique sollicitudin + nibh sit. Ornare aenean euismod elementum nisi quis eleifend. Commodo viverra maecenas + accumsan lacus vel facilisis. Nulla posuere sollicitudin aliquam ultrices sagittis orci a. + +
+ +
+ + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + + + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + + +
+ ); +} + +PermanentDrawerRight.propTypes = { + classes: PropTypes.object.isRequired, +}; + +export default withStyles(styles)(PermanentDrawerRight); diff --git a/docs/src/pages/demos/drawers/PersistentDrawer.js b/docs/src/pages/demos/drawers/PersistentDrawer.js deleted file mode 100644 index 709f9d7d64f8ad..00000000000000 --- a/docs/src/pages/demos/drawers/PersistentDrawer.js +++ /dev/null @@ -1,220 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import classNames from 'classnames'; -import { withStyles } from '@material-ui/core/styles'; -import Drawer from '@material-ui/core/Drawer'; -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -import List from '@material-ui/core/List'; -import MenuItem from '@material-ui/core/MenuItem'; -import Typography from '@material-ui/core/Typography'; -import TextField from '@material-ui/core/TextField'; -import Divider from '@material-ui/core/Divider'; -import IconButton from '@material-ui/core/IconButton'; -import MenuIcon from '@material-ui/icons/Menu'; -import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; -import ChevronRightIcon from '@material-ui/icons/ChevronRight'; -import { mailFolderListItems, otherMailFolderListItems } from './tileData'; - -const drawerWidth = 240; - -const styles = theme => ({ - root: { - flexGrow: 1, - }, - appFrame: { - height: 430, - zIndex: 1, - overflow: 'hidden', - position: 'relative', - display: 'flex', - width: '100%', - }, - appBar: { - position: 'absolute', - transition: theme.transitions.create(['margin', 'width'], { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.leavingScreen, - }), - }, - appBarShift: { - width: `calc(100% - ${drawerWidth}px)`, - transition: theme.transitions.create(['margin', 'width'], { - easing: theme.transitions.easing.easeOut, - duration: theme.transitions.duration.enteringScreen, - }), - }, - 'appBarShift-left': { - marginLeft: drawerWidth, - }, - 'appBarShift-right': { - marginRight: drawerWidth, - }, - menuButton: { - marginLeft: 12, - marginRight: 20, - }, - hide: { - display: 'none', - }, - drawerPaper: { - position: 'relative', - width: drawerWidth, - }, - drawerHeader: { - display: 'flex', - alignItems: 'center', - padding: '0 8px', - ...theme.mixins.toolbar, - }, - 'drawerHeader-left': { - justifyContent: 'flex-end', - }, - 'drawerHeader-right': { - justifyContent: 'flex-start', - }, - content: { - flexGrow: 1, - backgroundColor: theme.palette.background.default, - padding: theme.spacing.unit * 3, - transition: theme.transitions.create('margin', { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.leavingScreen, - }), - }, - 'content-left': { - marginLeft: -drawerWidth, - }, - 'content-right': { - marginRight: -drawerWidth, - }, - contentShift: { - transition: theme.transitions.create('margin', { - easing: theme.transitions.easing.easeOut, - duration: theme.transitions.duration.enteringScreen, - }), - }, - 'contentShift-left': { - marginLeft: 0, - }, - 'contentShift-right': { - marginRight: 0, - }, -}); - -class PersistentDrawer extends React.Component { - state = { - open: false, - anchor: 'left', - }; - - handleDrawerOpen = () => { - this.setState({ open: true }); - }; - - handleDrawerClose = () => { - this.setState({ open: false }); - }; - - handleChangeAnchor = event => { - this.setState({ - anchor: event.target.value, - }); - }; - - render() { - const { classes, theme } = this.props; - const { anchor, open } = this.state; - - const drawer = ( - -
- - {(theme.direction === 'ltr' && anchor === 'left') || - (theme.direction === 'rtl' && anchor === 'right') ? ( - - ) : ( - - )} - -
- - {mailFolderListItems} - - {otherMailFolderListItems} -
- ); - - let before = null; - let after = null; - - if (anchor === 'left') { - before = drawer; - } else { - after = drawer; - } - - return ( -
- - left - right - -
- - - - - - - Persistent drawer - - - - {before} -
-
- You think water moves fast? You should see ice. -
- {after} -
-
- ); - } -} - -PersistentDrawer.propTypes = { - classes: PropTypes.object.isRequired, - theme: PropTypes.object.isRequired, -}; - -export default withStyles(styles, { withTheme: true })(PersistentDrawer); diff --git a/docs/src/pages/demos/drawers/PersistentDrawerLeft.js b/docs/src/pages/demos/drawers/PersistentDrawerLeft.js new file mode 100644 index 00000000000000..f900acebbe8fbb --- /dev/null +++ b/docs/src/pages/demos/drawers/PersistentDrawerLeft.js @@ -0,0 +1,195 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { withStyles } from '@material-ui/core/styles'; +import Drawer from '@material-ui/core/Drawer'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import List from '@material-ui/core/List'; +import Typography from '@material-ui/core/Typography'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import MenuIcon from '@material-ui/icons/Menu'; +import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; +import ChevronRightIcon from '@material-ui/icons/ChevronRight'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; + +const drawerWidth = 240; + +const styles = theme => ({ + root: { + display: 'flex', + }, + appBar: { + transition: theme.transitions.create(['margin', 'width'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + }, + appBarShift: { + width: `calc(100% - ${drawerWidth}px)`, + marginLeft: drawerWidth, + transition: theme.transitions.create(['margin', 'width'], { + easing: theme.transitions.easing.easeOut, + duration: theme.transitions.duration.enteringScreen, + }), + }, + menuButton: { + marginLeft: 12, + marginRight: 20, + }, + hide: { + display: 'none', + }, + drawer: { + width: drawerWidth, + flexShrink: 0, + }, + drawerPaper: { + width: drawerWidth, + }, + drawerHeader: { + display: 'flex', + alignItems: 'center', + padding: '0 8px', + ...theme.mixins.toolbar, + justifyContent: 'flex-end', + }, + content: { + flexGrow: 1, + padding: theme.spacing.unit * 3, + transition: theme.transitions.create('margin', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + marginLeft: -drawerWidth, + }, + contentShift: { + transition: theme.transitions.create('margin', { + easing: theme.transitions.easing.easeOut, + duration: theme.transitions.duration.enteringScreen, + }), + marginLeft: 0, + }, +}); + +class PersistentDrawerLeft extends React.Component { + state = { + open: false, + }; + + handleDrawerOpen = () => { + this.setState({ open: true }); + }; + + handleDrawerClose = () => { + this.setState({ open: false }); + }; + + render() { + const { classes, theme } = this.props; + const { open } = this.state; + + return ( +
+ + + + + + + + Persistent drawer + + + + +
+ + {theme.direction === 'ltr' ? : } + +
+ + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + + + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + +
+
+
+ + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. Rhoncus dolor purus non enim praesent + elementum facilisis leo vel. Risus at ultrices mi tempus imperdiet. Semper risus in + hendrerit gravida rutrum quisque non tellus. Convallis convallis tellus id interdum + velit laoreet id donec ultrices. Odio morbi quis commodo odio aenean sed adipiscing. + Amet nisl suscipit adipiscing bibendum est ultricies integer quis. Cursus euismod quis + viverra nibh cras. Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. + Mauris commodo quis imperdiet massa tincidunt. Cras tincidunt lobortis feugiat vivamus + at augue. At augue eget arcu dictum varius duis at consectetur lorem. Velit sed + ullamcorper morbi tincidunt. Lorem donec massa sapien faucibus et molestie ac. + + + Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla + facilisi etiam dignissim diam. Pulvinar elementum integer enim neque volutpat ac + tincidunt. Ornare suspendisse sed nisi lacus sed viverra tellus. Purus sit amet volutpat + consequat mauris. Elementum eu facilisis sed odio morbi. Euismod lacinia at quis risus + sed vulputate odio. Morbi tincidunt ornare massa eget egestas purus viverra accumsan in. + In hendrerit gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem + et tortor. Habitant morbi tristique senectus et. Adipiscing elit duis tristique + sollicitudin nibh sit. Ornare aenean euismod elementum nisi quis eleifend. Commodo + viverra maecenas accumsan lacus vel facilisis. Nulla posuere sollicitudin aliquam + ultrices sagittis orci a. + +
+
+ ); + } +} + +PersistentDrawerLeft.propTypes = { + classes: PropTypes.object.isRequired, + theme: PropTypes.object.isRequired, +}; + +export default withStyles(styles, { withTheme: true })(PersistentDrawerLeft); diff --git a/docs/src/pages/demos/drawers/PersistentDrawerRight.js b/docs/src/pages/demos/drawers/PersistentDrawerRight.js new file mode 100644 index 00000000000000..b2de661af25282 --- /dev/null +++ b/docs/src/pages/demos/drawers/PersistentDrawerRight.js @@ -0,0 +1,195 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { withStyles } from '@material-ui/core/styles'; +import Drawer from '@material-ui/core/Drawer'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import CssBaseline from '@material-ui/core/CssBaseline'; +import List from '@material-ui/core/List'; +import Typography from '@material-ui/core/Typography'; +import Divider from '@material-ui/core/Divider'; +import IconButton from '@material-ui/core/IconButton'; +import MenuIcon from '@material-ui/icons/Menu'; +import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; +import ChevronRightIcon from '@material-ui/icons/ChevronRight'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; + +const drawerWidth = 240; + +const styles = theme => ({ + root: { + display: 'flex', + }, + appBar: { + transition: theme.transitions.create(['margin', 'width'], { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + }, + appBarShift: { + width: `calc(100% - ${drawerWidth}px)`, + transition: theme.transitions.create(['margin', 'width'], { + easing: theme.transitions.easing.easeOut, + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: drawerWidth, + }, + menuButton: { + marginLeft: 12, + marginRight: 20, + }, + hide: { + display: 'none', + }, + drawer: { + width: drawerWidth, + flexShrink: 0, + }, + drawerPaper: { + width: drawerWidth, + }, + drawerHeader: { + display: 'flex', + alignItems: 'center', + padding: '0 8px', + ...theme.mixins.toolbar, + justifyContent: 'flex-start', + }, + content: { + flexGrow: 1, + padding: theme.spacing.unit * 3, + transition: theme.transitions.create('margin', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + marginRight: -drawerWidth, + }, + contentShift: { + transition: theme.transitions.create('margin', { + easing: theme.transitions.easing.easeOut, + duration: theme.transitions.duration.enteringScreen, + }), + marginRight: 0, + }, +}); + +class PersistentDrawerRight extends React.Component { + state = { + open: false, + }; + + handleDrawerOpen = () => { + this.setState({ open: true }); + }; + + handleDrawerClose = () => { + this.setState({ open: false }); + }; + + render() { + const { classes, theme } = this.props; + const { open } = this.state; + + return ( +
+ + + + + + + + Persistent drawer + + + +
+
+ + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. Rhoncus dolor purus non enim praesent + elementum facilisis leo vel. Risus at ultrices mi tempus imperdiet. Semper risus in + hendrerit gravida rutrum quisque non tellus. Convallis convallis tellus id interdum + velit laoreet id donec ultrices. Odio morbi quis commodo odio aenean sed adipiscing. + Amet nisl suscipit adipiscing bibendum est ultricies integer quis. Cursus euismod quis + viverra nibh cras. Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. + Mauris commodo quis imperdiet massa tincidunt. Cras tincidunt lobortis feugiat vivamus + at augue. At augue eget arcu dictum varius duis at consectetur lorem. Velit sed + ullamcorper morbi tincidunt. Lorem donec massa sapien faucibus et molestie ac. + + + Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla + facilisi etiam dignissim diam. Pulvinar elementum integer enim neque volutpat ac + tincidunt. Ornare suspendisse sed nisi lacus sed viverra tellus. Purus sit amet volutpat + consequat mauris. Elementum eu facilisis sed odio morbi. Euismod lacinia at quis risus + sed vulputate odio. Morbi tincidunt ornare massa eget egestas purus viverra accumsan in. + In hendrerit gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem + et tortor. Habitant morbi tristique senectus et. Adipiscing elit duis tristique + sollicitudin nibh sit. Ornare aenean euismod elementum nisi quis eleifend. Commodo + viverra maecenas accumsan lacus vel facilisis. Nulla posuere sollicitudin aliquam + ultrices sagittis orci a. + +
+ +
+ + {theme.direction === 'rtl' ? : } + +
+ + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + + + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + +
+
+ ); + } +} + +PersistentDrawerRight.propTypes = { + classes: PropTypes.object.isRequired, + theme: PropTypes.object.isRequired, +}; + +export default withStyles(styles, { withTheme: true })(PersistentDrawerRight); diff --git a/docs/src/pages/demos/drawers/ResponsiveDrawer.js b/docs/src/pages/demos/drawers/ResponsiveDrawer.js index 83d239876ad648..9b9daba584231b 100644 --- a/docs/src/pages/demos/drawers/ResponsiveDrawer.js +++ b/docs/src/pages/demos/drawers/ResponsiveDrawer.js @@ -4,48 +4,49 @@ import { withStyles } from '@material-ui/core/styles'; import Drawer from '@material-ui/core/Drawer'; import AppBar from '@material-ui/core/AppBar'; import Toolbar from '@material-ui/core/Toolbar'; +import CssBaseline from '@material-ui/core/CssBaseline'; import List from '@material-ui/core/List'; import Typography from '@material-ui/core/Typography'; import IconButton from '@material-ui/core/IconButton'; import Hidden from '@material-ui/core/Hidden'; import Divider from '@material-ui/core/Divider'; import MenuIcon from '@material-ui/icons/Menu'; -import { mailFolderListItems, otherMailFolderListItems } from './tileData'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; const drawerWidth = 240; const styles = theme => ({ root: { - flexGrow: 1, - height: 440, - zIndex: 1, - overflow: 'hidden', - position: 'relative', display: 'flex', - width: '100%', + }, + drawer: { + [theme.breakpoints.up('sm')]: { + width: drawerWidth, + flexShrink: 0, + }, }, appBar: { - position: 'absolute', marginLeft: drawerWidth, - [theme.breakpoints.up('md')]: { + [theme.breakpoints.up('sm')]: { width: `calc(100% - ${drawerWidth}px)`, }, }, - navIconHide: { - [theme.breakpoints.up('md')]: { + menuButton: { + marginRight: 20, + [theme.breakpoints.up('sm')]: { display: 'none', }, }, toolbar: theme.mixins.toolbar, drawerPaper: { width: drawerWidth, - [theme.breakpoints.up('md')]: { - position: 'relative', - }, }, content: { flexGrow: 1, - backgroundColor: theme.palette.background.default, padding: theme.spacing.unit * 3, }, }); @@ -66,21 +67,36 @@ class ResponsiveDrawer extends React.Component {
- {mailFolderListItems} + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + - {otherMailFolderListItems} + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} +
); return (
- + + @@ -89,36 +105,63 @@ class ResponsiveDrawer extends React.Component { - - - {drawer} - - - - - {drawer} - - +
- {'You think water moves fast? You should see ice.'} + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. Rhoncus dolor purus non enim praesent + elementum facilisis leo vel. Risus at ultrices mi tempus imperdiet. Semper risus in + hendrerit gravida rutrum quisque non tellus. Convallis convallis tellus id interdum + velit laoreet id donec ultrices. Odio morbi quis commodo odio aenean sed adipiscing. + Amet nisl suscipit adipiscing bibendum est ultricies integer quis. Cursus euismod quis + viverra nibh cras. Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. + Mauris commodo quis imperdiet massa tincidunt. Cras tincidunt lobortis feugiat vivamus + at augue. At augue eget arcu dictum varius duis at consectetur lorem. Velit sed + ullamcorper morbi tincidunt. Lorem donec massa sapien faucibus et molestie ac. + + + Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla + facilisi etiam dignissim diam. Pulvinar elementum integer enim neque volutpat ac + tincidunt. Ornare suspendisse sed nisi lacus sed viverra tellus. Purus sit amet volutpat + consequat mauris. Elementum eu facilisis sed odio morbi. Euismod lacinia at quis risus + sed vulputate odio. Morbi tincidunt ornare massa eget egestas purus viverra accumsan in. + In hendrerit gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem + et tortor. Habitant morbi tristique senectus et. Adipiscing elit duis tristique + sollicitudin nibh sit. Ornare aenean euismod elementum nisi quis eleifend. Commodo + viverra maecenas accumsan lacus vel facilisis. Nulla posuere sollicitudin aliquam + ultrices sagittis orci a. +
); @@ -127,6 +170,9 @@ class ResponsiveDrawer extends React.Component { ResponsiveDrawer.propTypes = { classes: PropTypes.object.isRequired, + // Injected by the documentation to work in an iframe. + // You won't need it on your project. + container: PropTypes.object, theme: PropTypes.object.isRequired, }; diff --git a/docs/src/pages/demos/drawers/SwipeableTemporaryDrawer.js b/docs/src/pages/demos/drawers/SwipeableTemporaryDrawer.js index 75debbcdb1af8c..2b2e872db1da04 100644 --- a/docs/src/pages/demos/drawers/SwipeableTemporaryDrawer.js +++ b/docs/src/pages/demos/drawers/SwipeableTemporaryDrawer.js @@ -5,7 +5,11 @@ import SwipeableDrawer from '@material-ui/core/SwipeableDrawer'; import Button from '@material-ui/core/Button'; import List from '@material-ui/core/List'; import Divider from '@material-ui/core/Divider'; -import { mailFolderListItems, otherMailFolderListItems } from './tileData'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; const styles = { list: { @@ -35,17 +39,45 @@ class SwipeableTemporaryDrawer extends React.Component { const sideList = (
- {mailFolderListItems} + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + - {otherMailFolderListItems} + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} +
); const fullList = (
- {mailFolderListItems} + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + - {otherMailFolderListItems} + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} +
); diff --git a/docs/src/pages/demos/drawers/TemporaryDrawer.js b/docs/src/pages/demos/drawers/TemporaryDrawer.js index f1828ea3c93c8c..f8db5419953e37 100644 --- a/docs/src/pages/demos/drawers/TemporaryDrawer.js +++ b/docs/src/pages/demos/drawers/TemporaryDrawer.js @@ -5,7 +5,11 @@ import Drawer from '@material-ui/core/Drawer'; import Button from '@material-ui/core/Button'; import List from '@material-ui/core/List'; import Divider from '@material-ui/core/Divider'; -import { mailFolderListItems, otherMailFolderListItems } from './tileData'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import InboxIcon from '@material-ui/icons/MoveToInbox'; +import MailIcon from '@material-ui/icons/Mail'; const styles = { list: { @@ -35,17 +39,45 @@ class TemporaryDrawer extends React.Component { const sideList = (
- {mailFolderListItems} + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + - {otherMailFolderListItems} + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} +
); const fullList = (
- {mailFolderListItems} + + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} + - {otherMailFolderListItems} + + {['All mail', 'Trash', 'Spam'].map((text, index) => ( + + {index % 2 === 0 ? : } + + + ))} +
); diff --git a/docs/src/pages/demos/drawers/drawers.md b/docs/src/pages/demos/drawers/drawers.md index 3797dc6e31f38f..c96d88353415f0 100644 --- a/docs/src/pages/demos/drawers/drawers.md +++ b/docs/src/pages/demos/drawers/drawers.md @@ -18,7 +18,7 @@ Temporary navigation drawers can toggle open or closed. Closed by default, the d The Drawer can be cancelled by clicking the overlay or pressing the Esc key. It closes when an item is selected, handled by controlling the `open` prop. -{{"demo": "pages/demos/drawers/TemporaryDrawer.js", "hideEditButton": true}} +{{"demo": "pages/demos/drawers/TemporaryDrawer.js"}} ## Swipeable Temporary drawer @@ -28,7 +28,7 @@ This component comes with a 2 kB gzipped payload overhead. Some low-end mobile devices won't be able to follow the fingers at 60 FPS. You can use the `disableBackdropTransition` property to help. -{{"demo": "pages/demos/drawers/SwipeableTemporaryDrawer.js", "hideEditButton": true}} +{{"demo": "pages/demos/drawers/SwipeableTemporaryDrawer.js"}} We are using the following set of properties on this documentation website for optimal usability of the component: - iOS is hosted on high-end devices. @@ -43,6 +43,13 @@ const iOS = process.browser && /iPad|iPhone|iPod/.test(navigator.userAgent); ``` +## Responsive drawer + +The `Hidden` responsive helper component allows showing different types of drawer depending on the screen width. +A `temporary` drawer is shown for small screens while a `permanent` drawer is shown for wider screens. + +{{"demo": "pages/demos/drawers/ResponsiveDrawer.js", "iframe": true}} + ## Permanent drawer Permanent navigation drawers are always visible and pinned to the left edge, at the same elevation as the content or background. They cannot be closed. @@ -53,13 +60,15 @@ Permanent navigation drawers are the **recommended default for desktop**. Apps focused on information consumption that use a left-to-right hierarchy. -{{"demo": "pages/demos/drawers/PermanentDrawer.js", "hideEditButton": true}} +{{"demo": "pages/demos/drawers/PermanentDrawerLeft.js", "iframe": true}} + +{{"demo": "pages/demos/drawers/PermanentDrawerRight.js", "iframe": true}} ### Clipped under the app bar Apps focused on productivity that require balance across the screen. -{{"demo": "pages/demos/drawers/ClippedDrawer.js", "hideEditButton": true}} +{{"demo": "pages/demos/drawers/ClippedDrawer.js", "iframe": true}} ## Persistent drawer @@ -73,7 +82,9 @@ When the drawer is outside of the page grid and opens, the drawer forces other c Persistent navigation drawers are acceptable for all sizes larger than mobile. They are not recommended for apps with multiple levels of hierarchy that require using an up arrow for navigation. -{{"demo": "pages/demos/drawers/PersistentDrawer.js", "hideEditButton": true}} +{{"demo": "pages/demos/drawers/PersistentDrawerLeft.js", "iframe": true}} + +{{"demo": "pages/demos/drawers/PersistentDrawerRight.js", "iframe": true}} ## Mini variant drawer @@ -83,11 +94,4 @@ When expanded, it appears as the standard persistent navigation drawer. The mini variant is recommended for apps sections that need quick selection access alongside content. -{{"demo": "pages/demos/drawers/MiniDrawer.js", "hideEditButton": true}} - -## Responsive drawer - -The `Hidden` responsive helper component allows showing different types of drawer depending on the screen width. -A `temporary` drawer is shown for small screens while a `permanent` drawer is shown for wider screens. - -{{"demo": "pages/demos/drawers/ResponsiveDrawer.js", "hideEditButton": true}} +{{"demo": "pages/demos/drawers/MiniDrawer.js", "iframe": true}} diff --git a/docs/src/pages/demos/drawers/tileData.js b/docs/src/pages/demos/drawers/tileData.js deleted file mode 100644 index 3cca16269ce628..00000000000000 --- a/docs/src/pages/demos/drawers/tileData.js +++ /dev/null @@ -1,65 +0,0 @@ -// This file is shared across the demos. - -import React from 'react'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemText from '@material-ui/core/ListItemText'; -import InboxIcon from '@material-ui/icons/MoveToInbox'; -import DraftsIcon from '@material-ui/icons/Drafts'; -import StarIcon from '@material-ui/icons/Star'; -import SendIcon from '@material-ui/icons/Send'; -import MailIcon from '@material-ui/icons/Mail'; -import DeleteIcon from '@material-ui/icons/Delete'; -import ReportIcon from '@material-ui/icons/Report'; - -export const mailFolderListItems = ( -
- - - - - - - - - - - - - - - - - - - - - - - - -
-); - -export const otherMailFolderListItems = ( -
- - - - - - - - - - - - - - - - - - -
-); diff --git a/package.json b/package.json index 2ebdca49b7c2ae..b066f4680310e9 100644 --- a/package.json +++ b/package.json @@ -131,6 +131,7 @@ "react-autosuggest": "^9.3.2", "react-docgen": "^3.0.0-beta10", "react-dom": "^16.4.0", + "react-frame-component": "^4.0.2", "react-inspector": "^2.2.2", "react-jss": "^8.1.0", "react-markdown": "^4.0.0", diff --git a/packages/material-ui/src/Modal/ModalManager.js b/packages/material-ui/src/Modal/ModalManager.js index 3b7a06326864aa..2797b6a77fd883 100644 --- a/packages/material-ui/src/Modal/ModalManager.js +++ b/packages/material-ui/src/Modal/ModalManager.js @@ -49,12 +49,12 @@ function setContainerStyle(data, container) { }); } -function removeContainerStyle(data, container) { +function removeContainerStyle(data) { Object.keys(data.style).forEach(key => { - container.style[key] = data.style[key]; + data.container.style[key] = data.style[key]; }); - const fixedNodes = ownerDocument(container).querySelectorAll('.mui-fixed'); + const fixedNodes = ownerDocument(data.container).querySelectorAll('.mui-fixed'); for (let i = 0; i < fixedNodes.length; i += 1) { fixedNodes[i].style.paddingRight = `${data.prevPaddings[i]}px`; } @@ -76,10 +76,11 @@ class ModalManager { // this.modals[modalIdx] = modal this.modals = []; - // this.containers[containerIdx] = container - this.containers = []; // this.data[containerIdx] = { // modals: [], + // container, + // overflowing, + // prevPaddings, // } this.data = []; } @@ -101,7 +102,7 @@ class ModalManager { ariaHiddenSiblings(container, modal.mountNode, modal.modalRef, true); } - const containerIdx = this.containers.indexOf(container); + const containerIdx = findIndexOf(this.data, item => item.container === container); if (containerIdx !== -1) { this.data[containerIdx].modals.push(modal); return modalIdx; @@ -109,6 +110,7 @@ class ModalManager { const data = { modals: [modal], + container, overflowing: isOverflowing(container), prevPaddings: [], }; @@ -117,7 +119,6 @@ class ModalManager { setContainerStyle(data, container); } - this.containers.push(container); this.data.push(data); return modalIdx; @@ -132,7 +133,6 @@ class ModalManager { const containerIdx = findIndexOf(this.data, item => item.modals.indexOf(modal) !== -1); const data = this.data[containerIdx]; - const container = this.containers[containerIdx]; data.modals.splice(data.modals.indexOf(modal), 1); this.modals.splice(modalIdx, 1); @@ -140,7 +140,7 @@ class ModalManager { // If that was the last modal in a container, clean up the container. if (data.modals.length === 0) { if (this.handleContainerOverflow) { - removeContainerStyle(data, container); + removeContainerStyle(data); } // In case the modal wasn't in the DOM yet. @@ -148,9 +148,8 @@ class ModalManager { ariaHidden(modal.modalRef, true); } if (this.hideSiblingNodes) { - ariaHiddenSiblings(container, modal.mountNode, modal.modalRef, false); + ariaHiddenSiblings(data.container, modal.mountNode, modal.modalRef, false); } - this.containers.splice(containerIdx, 1); this.data.splice(containerIdx, 1); } else if (this.hideSiblingNodes) { // Otherwise make sure the next top modal is visible to a screan reader. diff --git a/packages/material-ui/src/Modal/ModalManager.test.js b/packages/material-ui/src/Modal/ModalManager.test.js index 0b892f81650a27..fbdefc8ff65e9e 100644 --- a/packages/material-ui/src/Modal/ModalManager.test.js +++ b/packages/material-ui/src/Modal/ModalManager.test.js @@ -121,6 +121,43 @@ describe('ModalManager', () => { }); }); + describe('multi container', () => { + let container3; + let container4; + + beforeEach(() => { + container3 = document.createElement('div'); + document.body.appendChild(container3); + container3.appendChild(document.createElement('div')); + + container4 = document.createElement('div'); + document.body.appendChild(container4); + container4.appendChild(document.createElement('div')); + }); + + it('should work will multiple containers', () => { + modalManager = new ModalManager(); + const modal1 = {}; + const modal2 = {}; + modalManager.add(modal1, container3); + assert.strictEqual(container3.children[0].getAttribute('aria-hidden'), 'true'); + + modalManager.add(modal2, container4); + assert.strictEqual(container4.children[0].getAttribute('aria-hidden'), 'true'); + + modalManager.remove(modal2); + assert.strictEqual(container4.children[0].getAttribute('aria-hidden'), null); + + modalManager.remove(modal1); + assert.strictEqual(container3.children[0].getAttribute('aria-hidden'), null); + }); + + afterEach(() => { + document.body.removeChild(container3); + document.body.removeChild(container4); + }); + }); + describe('container aria-hidden', () => { let modalRef1; let container2; diff --git a/pages/demos/drawers.js b/pages/demos/drawers.js index 3a4b0d978afec9..07eb0d3434008d 100644 --- a/pages/demos/drawers.js +++ b/pages/demos/drawers.js @@ -23,18 +23,39 @@ module.exports = require('fs') .readFileSync(require.resolve('docs/src/pages/demos/drawers/SwipeableTemporaryDrawer'), 'utf8') `, }, - 'pages/demos/drawers/PermanentDrawer.js': { - js: require('docs/src/pages/demos/drawers/PermanentDrawer').default, + 'pages/demos/drawers/PermanentDrawerLeft.js': { + js: require('docs/src/pages/demos/drawers/PermanentDrawerLeft').default, raw: preval` module.exports = require('fs') - .readFileSync(require.resolve('docs/src/pages/demos/drawers/PermanentDrawer'), 'utf8') + .readFileSync(require.resolve('docs/src/pages/demos/drawers/PermanentDrawerLeft'), 'utf8') `, }, - 'pages/demos/drawers/PersistentDrawer.js': { - js: require('docs/src/pages/demos/drawers/PersistentDrawer').default, + 'pages/demos/drawers/PermanentDrawerRight.js': { + js: require('docs/src/pages/demos/drawers/PermanentDrawerRight').default, raw: preval` module.exports = require('fs') - .readFileSync(require.resolve('docs/src/pages/demos/drawers/PersistentDrawer'), 'utf8') + .readFileSync(require.resolve('docs/src/pages/demos/drawers/PermanentDrawerRight'), 'utf8') +`, + }, + 'pages/demos/drawers/ClippedDrawer.js': { + js: require('docs/src/pages/demos/drawers/ClippedDrawer').default, + raw: preval` +module.exports = require('fs') + .readFileSync(require.resolve('docs/src/pages/demos/drawers/ClippedDrawer'), 'utf8') +`, + }, + 'pages/demos/drawers/PersistentDrawerLeft.js': { + js: require('docs/src/pages/demos/drawers/PersistentDrawerLeft').default, + raw: preval` +module.exports = require('fs') + .readFileSync(require.resolve('docs/src/pages/demos/drawers/PersistentDrawerLeft'), 'utf8') +`, + }, + 'pages/demos/drawers/PersistentDrawerRight.js': { + js: require('docs/src/pages/demos/drawers/PersistentDrawerRight').default, + raw: preval` +module.exports = require('fs') + .readFileSync(require.resolve('docs/src/pages/demos/drawers/PersistentDrawerRight'), 'utf8') `, }, 'pages/demos/drawers/MiniDrawer.js': { @@ -49,13 +70,6 @@ module.exports = require('fs') raw: preval` module.exports = require('fs') .readFileSync(require.resolve('docs/src/pages/demos/drawers/ResponsiveDrawer'), 'utf8') -`, - }, - 'pages/demos/drawers/ClippedDrawer.js': { - js: require('docs/src/pages/demos/drawers/ClippedDrawer').default, - raw: preval` -module.exports = require('fs') - .readFileSync(require.resolve('docs/src/pages/demos/drawers/ClippedDrawer'), 'utf8') `, }, }} diff --git a/test/regressions/index.js b/test/regressions/index.js index 988a1ab411ee88..08537f4b0a4e12 100644 --- a/test/regressions/index.js +++ b/test/regressions/index.js @@ -57,7 +57,6 @@ const blacklistSuite = [ ]; const blacklistFilename = [ - 'docs-demos-drawers/tileData.png', // no component 'docs-demos-grid-list/tileData.png', // no component 'docs-demos-steppers/SwipeableTextMobileStepper.png', // external img 'docs-demos-steppers/TextMobileStepper.png', // external img diff --git a/yarn.lock b/yarn.lock index 25f47336f261fd..85d9c2a63cb7ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9294,6 +9294,11 @@ react-event-listener@^0.6.0, react-event-listener@^0.6.2: prop-types "^15.6.0" warning "^4.0.1" +react-frame-component@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/react-frame-component/-/react-frame-component-4.0.2.tgz#408f137ab4ba14cd13a5844b86ac972903dda021" + integrity sha512-846zt81ijEC0ul6sBWzxkI5EGIE39ft9EaNzQUcszV/WWWDnldFJ+tKU7Et2GhZ4OHT/cy1GHcjsLLsdiOXhBg== + react-input-autosize@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8"