diff --git a/.size-limit.js b/.size-limit.js
index ac67804328f5ea..20cde62c5609ba 100644
--- a/.size-limit.js
+++ b/.size-limit.js
@@ -27,7 +27,7 @@ module.exports = [
name: 'The size of all the modules of material-ui.',
webpack: true,
path: 'packages/material-ui/build/index.js',
- limit: '95.2 KB',
+ limit: '95.4 KB',
},
{
name: 'The main bundle of the docs',
diff --git a/docs/src/modules/components/AppDrawer.js b/docs/src/modules/components/AppDrawer.js
index 64dad2671fd8ea..d3150bd92cd374 100644
--- a/docs/src/modules/components/AppDrawer.js
+++ b/docs/src/modules/components/AppDrawer.js
@@ -118,7 +118,7 @@ function AppDrawer(props, context) {
return (
-
+
({
diff --git a/docs/src/modules/components/HomeSteps.js b/docs/src/modules/components/HomeSteps.js
index a8de92ca3e03df..729f3e08b38798 100644
--- a/docs/src/modules/components/HomeSteps.js
+++ b/docs/src/modules/components/HomeSteps.js
@@ -10,7 +10,7 @@ import FileDownloadIcon from '@material-ui/docs/svgIcons/FileDownload';
import BuildIcon from '@material-ui/icons/Build'; // eslint-disable-line import/no-unresolved
import WhatshotIcon from '@material-ui/icons/Whatshot';
import MarkdownElement from '@material-ui/docs/MarkdownElement';
-import NoSSR from '@material-ui/docs/NoSSR';
+import NoSSR from '@material-ui/core/NoSSR';
import Link from 'docs/src/modules/components/Link';
const styles = theme => ({
diff --git a/docs/src/pages/demos/autocomplete/IntegrationReactSelect.js b/docs/src/pages/demos/autocomplete/IntegrationReactSelect.js
index 793ee06fd7a5d8..341c377838aec8 100644
--- a/docs/src/pages/demos/autocomplete/IntegrationReactSelect.js
+++ b/docs/src/pages/demos/autocomplete/IntegrationReactSelect.js
@@ -6,7 +6,7 @@ import classNames from 'classnames';
import Select from 'react-select';
import { withStyles } from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
-import NoSSR from '@material-ui/docs/NoSSR';
+import NoSSR from '@material-ui/core/NoSSR';
import TextField from '@material-ui/core/TextField';
import Chip from '@material-ui/core/Chip';
import MenuItem from '@material-ui/core/MenuItem';
diff --git a/packages/material-ui-docs/src/index.js b/packages/material-ui-docs/src/index.js
index c5e1295f624656..def14612c4cb6f 100644
--- a/packages/material-ui-docs/src/index.js
+++ b/packages/material-ui-docs/src/index.js
@@ -1,3 +1,2 @@
export { default as MarkdownElement } from './MarkdownElement';
-export { default as NoSSR } from './NoSSR';
export { default as NProgressBar } from './NProgressBar';
diff --git a/packages/material-ui/src/NoSSR/NoSSR.d.ts b/packages/material-ui/src/NoSSR/NoSSR.d.ts
new file mode 100644
index 00000000000000..38d95e59371b75
--- /dev/null
+++ b/packages/material-ui/src/NoSSR/NoSSR.d.ts
@@ -0,0 +1,10 @@
+import * as React from 'react';
+
+export interface NoSSRProps {
+ children: React.ReactNode;
+ fallback?: React.ReactNode;
+}
+
+declare const NoSSR: React.ComponentType;
+
+export default NoSSR;
diff --git a/packages/material-ui-docs/src/NoSSR/NoSSR.js b/packages/material-ui/src/NoSSR/NoSSR.js
similarity index 91%
rename from packages/material-ui-docs/src/NoSSR/NoSSR.js
rename to packages/material-ui/src/NoSSR/NoSSR.js
index ef4e6fa9b47e08..aebfcf3a1e7a2a 100644
--- a/packages/material-ui-docs/src/NoSSR/NoSSR.js
+++ b/packages/material-ui/src/NoSSR/NoSSR.js
@@ -1,5 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
+import exactProp from '../utils/exactProp';
const Fallback = () => null;
@@ -32,6 +33,8 @@ NoSSR.propTypes = {
fallback: PropTypes.node,
};
+NoSSR.propTypes = exactProp(NoSSR.propTypes);
+
NoSSR.defaultProps = {
fallback: ,
};
diff --git a/packages/material-ui/src/NoSSR/NoSSR.test.js b/packages/material-ui/src/NoSSR/NoSSR.test.js
new file mode 100644
index 00000000000000..9b268044aa914f
--- /dev/null
+++ b/packages/material-ui/src/NoSSR/NoSSR.test.js
@@ -0,0 +1,53 @@
+// @flow
+
+import React from 'react';
+import { assert } from 'chai';
+import { createMount, createShallow } from '../test-utils';
+import NoSSR from './NoSSR';
+
+describe('', () => {
+ let mount;
+ let shallow;
+
+ before(() => {
+ mount = createMount();
+ shallow = createShallow({ disableLifecycleMethods: true });
+ });
+
+ after(() => {
+ mount.cleanUp();
+ });
+
+ describe('server side rendering', () => {
+ it('should not render the children as the width is unknown', () => {
+ const wrapper = shallow(
+
+ Hello
+ ,
+ );
+ assert.strictEqual(wrapper.name(), 'Fallback');
+ });
+ });
+
+ describe('mounted', () => {
+ it('should render the children', () => {
+ const wrapper = mount(
+
+ Hello
+ ,
+ );
+ assert.strictEqual(wrapper.find('span').length, 1);
+ });
+ });
+
+ describe('prop: fallback', () => {
+ it('should render the fallback', () => {
+ const wrapper = shallow(
+
+ Hello
+ ,
+ );
+ assert.strictEqual(wrapper.text(), 'fallback');
+ });
+ });
+});
diff --git a/packages/material-ui/src/NoSSR/index.d.ts b/packages/material-ui/src/NoSSR/index.d.ts
new file mode 100644
index 00000000000000..a3bf2aeec739cf
--- /dev/null
+++ b/packages/material-ui/src/NoSSR/index.d.ts
@@ -0,0 +1,2 @@
+export { default } from './NoSSR';
+export * from './NoSSR';
diff --git a/packages/material-ui-docs/src/NoSSR/index.js b/packages/material-ui/src/NoSSR/index.js
similarity index 100%
rename from packages/material-ui-docs/src/NoSSR/index.js
rename to packages/material-ui/src/NoSSR/index.js
diff --git a/packages/material-ui/src/SwipeableDrawer/SwipeArea.js b/packages/material-ui/src/SwipeableDrawer/SwipeArea.js
index 9e45df613d7193..9115f3dcd4ca42 100644
--- a/packages/material-ui/src/SwipeableDrawer/SwipeArea.js
+++ b/packages/material-ui/src/SwipeableDrawer/SwipeArea.js
@@ -11,21 +11,21 @@ export const styles = theme => ({
position: 'fixed',
top: 0,
left: 0,
- height: '100vh',
+ bottom: 0,
zIndex: theme.zIndex.drawer - 1,
},
- discoveryAnchorLeft: {
+ anchorLeft: {
right: 'auto',
},
- discoveryAnchorRight: {
+ anchorRight: {
left: 'auto',
right: 0,
},
- discoveryAnchorTop: {
+ anchorTop: {
bottom: 'auto',
right: 0,
},
- discoveryAnchorBottom: {
+ anchorBottom: {
top: 'auto',
bottom: 0,
right: 0,
@@ -36,13 +36,13 @@ export const styles = theme => ({
* @ignore - internal component.
*/
function SwipeArea(props) {
- const { anchor, classes, swipeAreaWidth, ...other } = props;
+ const { anchor, classes, width, ...other } = props;
return (
@@ -62,7 +62,7 @@ SwipeArea.propTypes = {
* The width of the left most (or right most) area in pixels where the
* drawer can be swiped open from.
*/
- swipeAreaWidth: PropTypes.number.isRequired,
+ width: PropTypes.number.isRequired,
};
export default withStyles(styles)(SwipeArea);
diff --git a/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js b/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js
index fc82f4176c2cab..b48221c0bbe114 100644
--- a/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js
+++ b/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js
@@ -8,6 +8,7 @@ import Drawer, { getAnchor, isHorizontal } from '../Drawer/Drawer';
import { duration } from '../styles/transitions';
import withTheme from '../styles/withTheme';
import { getTransitionProps } from '../transitions/utils';
+import NoSSR from '../NoSSR';
import SwipeArea from './SwipeArea';
// This value is closed to what browsers are using internally to
@@ -332,6 +333,7 @@ class SwipeableDrawer extends React.Component {
render() {
const {
+ anchor,
disableBackdropTransition,
disableDiscovery,
disableSwipeToOpen,
@@ -365,12 +367,15 @@ class SwipeableDrawer extends React.Component {
},
ref: this.handlePaperRef,
}}
+ anchor={anchor}
{...other}
/>
{!disableDiscovery &&
!disableSwipeToOpen &&
variant === 'temporary' && (
-
+
+
+
)}
);
diff --git a/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.test.js b/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.test.js
index 9c0f16b6cccb31..9c7e056284d830 100644
--- a/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.test.js
+++ b/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.test.js
@@ -50,25 +50,14 @@ describe('', () => {
theme={createMuiTheme()}
/>,
);
- if (React.Fragment) {
- assert.strictEqual(wrapper.childAt(0).type(), Drawer);
- assert.strictEqual(wrapper.childAt(1).type(), SwipeArea);
- } else {
- assert.strictEqual(
- wrapper
- .childAt(0)
- .childAt(0)
- .type(),
- Drawer,
- );
- assert.strictEqual(
- wrapper
- .childAt(0)
- .childAt(1)
- .type(),
- SwipeArea,
- );
- }
+ assert.strictEqual(wrapper.childAt(0).type(), Drawer);
+ assert.strictEqual(
+ wrapper
+ .childAt(1)
+ .childAt(0)
+ .type(),
+ SwipeArea,
+ );
wrapper.unmount();
});
diff --git a/packages/material-ui/src/index.d.ts b/packages/material-ui/src/index.d.ts
index dcc6080becc9d8..62ff1111ee823d 100644
--- a/packages/material-ui/src/index.d.ts
+++ b/packages/material-ui/src/index.d.ts
@@ -141,6 +141,7 @@ export { default as MenuList } from './MenuList';
export { default as MobileStepper } from './MobileStepper';
export { default as Modal, ModalManager } from './Modal';
export { default as NativeSelect } from './NativeSelect';
+export { default as NoSSR } from './NoSSR';
export { default as Paper } from './Paper';
export { default as Popover } from './Popover';
export { default as Popper } from './Popper';
diff --git a/packages/material-ui/src/index.js b/packages/material-ui/src/index.js
index 92734bcc3e30c2..05ae92f3db928c 100644
--- a/packages/material-ui/src/index.js
+++ b/packages/material-ui/src/index.js
@@ -74,6 +74,7 @@ export { default as MenuList } from './MenuList';
export { default as MobileStepper } from './MobileStepper';
export { default as Modal, ModalManager } from './Modal';
export { default as NativeSelect } from './NativeSelect';
+export { default as NoSSR } from './NoSSR';
export { default as Paper } from './Paper';
export { default as Popover } from './Popover';
export { default as Popper } from './Popper';
diff --git a/packages/material-ui/src/withWidth/withWidth.test.js b/packages/material-ui/src/withWidth/withWidth.test.js
index f63310ee8b5b02..980c78149e6a65 100644
--- a/packages/material-ui/src/withWidth/withWidth.test.js
+++ b/packages/material-ui/src/withWidth/withWidth.test.js
@@ -35,7 +35,7 @@ describe('withWidth', () => {
describe('server side rendering', () => {
it('should not render the children as the width is unknown', () => {
const wrapper = shallow();
- assert.strictEqual(wrapper.type(), null, 'should render nothing');
+ assert.strictEqual(wrapper.type(), null);
});
});