From 90c0ea2cd0415cf71c2310330dd38a36300724fd Mon Sep 17 00:00:00 2001 From: TheBear44 <26767607+TheBear44@users.noreply.github.com> Date: Sat, 26 May 2018 05:31:16 +0700 Subject: [PATCH 001/182] [ButtonBase] Improve enter & space handling (#11585) * Fix #11584 * add tests --- .../guides/composition/ComponentProperty.js | 9 +-- .../material-ui/src/ButtonBase/ButtonBase.js | 7 ++- .../src/ButtonBase/ButtonBase.test.js | 55 +++++++++++++++---- .../src/ButtonBase/focusVisible.js | 6 +- 4 files changed, 57 insertions(+), 20 deletions(-) diff --git a/docs/src/pages/guides/composition/ComponentProperty.js b/docs/src/pages/guides/composition/ComponentProperty.js index 47e3037f992801..27051f3b8f3213 100644 --- a/docs/src/pages/guides/composition/ComponentProperty.js +++ b/docs/src/pages/guides/composition/ComponentProperty.js @@ -9,7 +9,8 @@ import Divider from '@material-ui/core/Divider'; import InboxIcon from '@material-ui/icons/Inbox'; import DraftsIcon from '@material-ui/icons/Drafts'; import Typography from '@material-ui/core/Typography'; -import { MemoryRouter, Route } from 'react-router'; +import MemoryRouter from 'react-router/MemoryRouter'; +import Route from 'react-router/Route'; import { Link } from 'react-router-dom'; const styles = theme => ({ @@ -61,7 +62,7 @@ ListItemLink2.propTypes = { to: PropTypes.string.isRequired, }; -function SimpleList(props) { +function ComponentProperty(props) { const { classes } = props; return ( @@ -89,8 +90,8 @@ function SimpleList(props) { ); } -SimpleList.propTypes = { +ComponentProperty.propTypes = { classes: PropTypes.object.isRequired, }; -export default withStyles(styles)(SimpleList); +export default withStyles(styles)(ComponentProperty); diff --git a/packages/material-ui/src/ButtonBase/ButtonBase.js b/packages/material-ui/src/ButtonBase/ButtonBase.js index 4671be6a8aebfb..f8a18bb83660f6 100644 --- a/packages/material-ui/src/ButtonBase/ButtonBase.js +++ b/packages/material-ui/src/ButtonBase/ButtonBase.js @@ -146,7 +146,8 @@ class ButtonBase extends React.Component { event.target === event.currentTarget && component && component !== 'button' && - (key === 'space' || key === 'enter') + (key === 'space' || key === 'enter') && + !(this.button.tagName === 'A' && this.button.href) ) { event.preventDefault(); if (onClick) { @@ -164,7 +165,9 @@ class ButtonBase extends React.Component { ) { this.keyDown = false; event.persist(); - this.ripple.stop(event, () => this.ripple.pulsate(event)); + this.ripple.stop(event, () => { + this.ripple.pulsate(event); + }); } if (this.props.onKeyUp) { this.props.onKeyUp(event); diff --git a/packages/material-ui/src/ButtonBase/ButtonBase.test.js b/packages/material-ui/src/ButtonBase/ButtonBase.test.js index a86e0ede0c1b38..2a7fea12c5021d 100644 --- a/packages/material-ui/src/ButtonBase/ButtonBase.test.js +++ b/packages/material-ui/src/ButtonBase/ButtonBase.test.js @@ -527,13 +527,12 @@ describe('', () => { describe('prop: onKeyDown', () => { it('should work', () => { + const onKeyDownSpy = spy(); wrapper = mount( - + Hello , ); - const onKeyDownSpy = spy(); - wrapper.setProps({ onKeyDown: onKeyDownSpy }); const eventPersistSpy = spy(); event = { persist: eventPersistSpy, keyCode: undefined }; @@ -555,21 +554,18 @@ describe('', () => { describe('Keyboard accessibility for non interactive elements', () => { it('should work', () => { + const onClickSpy = spy(); wrapper = mount( - + Hello , ); - const onClickSpy = spy(); - wrapper.setProps({ onClick: onClickSpy, component: 'div' }); - const eventTargetMock = 'woofButtonBase'; event = { - persist: spy(), preventDefault: spy(), keyCode: keycode('space'), - target: eventTargetMock, - currentTarget: eventTargetMock, + target: 'target', + currentTarget: 'target', }; instance = wrapper.instance(); @@ -577,11 +573,48 @@ describe('', () => { instance.handleKeyDown(event); assert.strictEqual(instance.keyDown, false, 'should not change keydown'); - assert.strictEqual(event.persist.callCount, 0, 'should not call event.persist'); assert.strictEqual(event.preventDefault.callCount, 1, 'should call event.preventDefault'); assert.strictEqual(onClickSpy.callCount, 1, 'should call onClick'); assert.strictEqual(onClickSpy.calledWith(event), true, 'should call onClick with event'); }); + + it('should hanlde the link with no href', () => { + const onClickSpy = spy(); + wrapper = mount( + + Hello + , + ); + event = { + preventDefault: spy(), + keyCode: keycode('enter'), + target: 'target', + currentTarget: 'target', + }; + instance = wrapper.instance(); + instance.handleKeyDown(event); + assert.strictEqual(event.preventDefault.callCount, 1); + assert.strictEqual(onClickSpy.callCount, 1); + }); + + it('should ignore the link with href', () => { + const onClickSpy = spy(); + wrapper = mount( + + Hello + , + ); + event = { + preventDefault: spy(), + keyCode: keycode('enter'), + target: 'target', + currentTarget: 'target', + }; + instance = wrapper.instance(); + instance.handleKeyDown(event); + assert.strictEqual(event.preventDefault.callCount, 0); + assert.strictEqual(onClickSpy.callCount, 0); + }); }); describe('prop: disableRipple', () => { diff --git a/packages/material-ui/src/ButtonBase/focusVisible.js b/packages/material-ui/src/ButtonBase/focusVisible.js index c7516777ebea5e..dcbb770302c50b 100644 --- a/packages/material-ui/src/ButtonBase/focusVisible.js +++ b/packages/material-ui/src/ButtonBase/focusVisible.js @@ -11,10 +11,10 @@ const internal = { }; export function detectFocusVisible(instance, element, callback, attempt = 1) { - warning(instance.focusVisibleCheckTime, 'Material-UI: missing instance.focusVisibleCheckTime'); + warning(instance.focusVisibleCheckTime, 'Material-UI: missing instance.focusVisibleCheckTime.'); warning( instance.focusVisibleMaxCheckTimes, - 'Material-UI: missing instance.focusVisibleMaxCheckTimes', + 'Material-UI: missing instance.focusVisibleMaxCheckTimes.', ); instance.focusVisibleTimeout = setTimeout(() => { @@ -34,7 +34,7 @@ export function detectFocusVisible(instance, element, callback, attempt = 1) { const FOCUS_KEYS = ['tab', 'enter', 'space', 'esc', 'up', 'down', 'left', 'right']; function isFocusKey(event) { - return FOCUS_KEYS.indexOf(keycode(event)) !== -1; + return FOCUS_KEYS.indexOf(keycode(event)) > -1; } const handleKeyUpEvent = event => { From 242d2330266e60ef47c0c421a0babd06d57f8c67 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sat, 26 May 2018 11:28:35 +0200 Subject: [PATCH 002/182] [docs] Update BACKERS.md --- BACKERS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BACKERS.md b/BACKERS.md index fbb903e105c0b6..9c430ea51d39c5 100644 --- a/BACKERS.md +++ b/BACKERS.md @@ -118,7 +118,8 @@ Bronze Sponsors are those who have pledged $100/month to $250/month to Material- | Daniel Faust | David Langheiter | LocalMonero | Adam Wells | Vincent Bouzeran | | Ashwin Hegde | Eric Schultz | Conor Dunk | Jerome Wilson | Greenlink | | Jolse Maginnis | asmeikal | David Auffret | Naresh Bhatia | Henk van Hest | -| Avétis KAZARIAN | Withinpixels | SIM KIM SIA | Renaud Bompuis | +| Avétis KAZARIAN | Withinpixels | SIM KIM SIA | Renaud Bompuis | Yaron Malin | +| Arvanitis Panagiotis | #### via [OpenCollective](https://opencollective.com/material-ui) From 1a4b757dc2f2123745af850643f0a395a1b72da5 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sat, 26 May 2018 11:54:02 +0200 Subject: [PATCH 003/182] [docs] Update Carbon src --- docs/src/modules/components/Carbon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/modules/components/Carbon.js b/docs/src/modules/components/Carbon.js index 082c631bbf324d..883a0ab1c80d96 100644 --- a/docs/src/modules/components/Carbon.js +++ b/docs/src/modules/components/Carbon.js @@ -100,7 +100,7 @@ class Carbon extends React.Component { const script = document.createElement('script'); script.setAttribute('async', ''); - script.src = '//cdn.carbonads.com/carbon.js?zoneid=1673&serve=C6AILKT&placement=materialuicom'; + script.src = '//cdn.carbonads.com/carbon.js?serve=CKYIL27L&placement=material-uicom'; script.id = '_carbonads_js'; const ad = document.querySelector('#ad'); if (ad) { From a7ca7c27c0676f52b38729e00741316298e5356d Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sat, 26 May 2018 16:39:39 +0200 Subject: [PATCH 004/182] [CHANGELOG] Prepare v1.1.0 --- CHANGELOG.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59a701f46e965b..fe3889cff52857 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,78 @@ Changes. Changes everywhere! +## 1.1.0 +###### *May 26, 2018* + +Big thanks to the 30 contributors who made this release possible. + +Here are some highlights ✨: +- A smaller bundle, saved 5 kB gzipped (#11511, #11492, #11521, #11523) @TrySound +- A new Slider component in the lab (#11040) @epodivilov. +- And many more bug fixes and documentation improvements. + +### Breaking change + +N/A + +#### Component Fixes / Enhancements + +- [ListSubheader] Fix demo import path (#11468) @Hocdoc +- [Backdrop] Fix export paths (#11481) @brandonhall +- [ListItem] Take the focusVisibleClassName property into account (#11451) @rdemirov +- [Grid] Allow shrink in items so text will wrap by default (#11411) @ShaneMcX +- [StepLabel] Allow StepIcon customization (#11446) @jargot +- [StepConnector] Exposes the component (#11478) @racingrebel +- [Tabs] Fix TabIndicatorProps merge (#11494) @adeelibr +- [ButtonBase] Fix React propTypes buttonRef warning (#11519) @t49tran +- [ListItemText] Shouldn't be a heading by default (#11544) @adeelibr +- [GridListTileBar] Add missing title and subtitle keys (#11570) @ljani +- [TableCell] Fix padding for last TableCell if checkbox (#11568) @gfpacheco +- [Button][ButtonBase] Take advantage of defaultProps for component prop (#11574) @cherniavskii +- [StepConnector] Add to default export from @material-ui/core (#11583) @OsipovIgor +- [ButtonBase] Improve enter & space handling (#11585) @TheBear44 + +#### Docs + +- [examples] Fix imports for Dialog (#11469) @sboles +- [docs] Add v0 subdirectory redirects (#11470) @mbrookes +- [docs] Remove trailing slash on progress-indicators link (#11473) @srt32 +- [docs] Add HSTS header (#11475) @mbrookes +- [docs] Add missing word to documentation (#11476) @Skn0tt +- [docs] Specify correct corner to locate directional toggle (#11479) @jacquesporveau +- [examples] Fix create-react-app-with-jss theme object (#11485) @Dror88 +- [docs] Add Snippets Chrome extension to showcase (#11487) @richardscarrott +- [docs] Fix hyphen for iOS (#11490) @mbrookes +- [docs] Prevent content-type: application/octet-stream (#11501) @oliviertassinari +- [docs] Add Customized Switches section (#11505) @mbrookes +- [docs] Remove Firebase config file & deploy script (#11516) @mbrookes +- [docs] Pull versions from github API (#11522) @mbrookes +- [docs] Removed references to Grid's hidden property (#11529) @lfalke +- [docs] Remove background grid from Typography variants demo (#11562) @mbrookes +- [docs] Finish incomplete list-item-text.md documentation (#11559) @codeheroics +- [docs] Add outlined buttons to ButtonSizes demo (#11509) @mbrookes +- [docs] Add a Troubleshooting section for SSR (#11579) @oliviertassinari +- [docs] Fix a little typo in typescript docs (#11580) @saculbr +- [docs] Add react-admin to related projects (#11582) @fzaninotto +- [docs] Update the showcase (#11578) @mbrookes + +#### Core + +- [typescript] Make TypographyStyle assignable to CSSProperties, misc other typing fixes (#11456) @pelotom +- [core] Cut the head of the snake 🐍 (#11477) @oliviertassinari +- [core] Add esm bundle to start tracking treeshakability (#11489) @TrySound +- [core] More aggressive transpilation (#11492) @oliviertassinari +- [core] Enable loose mode for staged featues (#11511) @TrySound +- [core] Simplify the babel docs config (#11514) @oliviertassinari +- [core] Remove lodash 💃 (#11521) @oliviertassinari +- [core] Internalize ScrollbarSize (#11523) @oliviertassinari +- [typescript] add sample with return types (#11512) @yacut + +#### Labs + +- [SpeedDial] Clean up SpeedDialIcon transition (#11513) @mbrookes +- [Slider] Port component (#11040) @epodivilov + ## 1.0.0 ###### *May 17, 2018* From 3ccf76d315404ebd67f1254f5679d327c0647dfd Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sat, 26 May 2018 16:56:21 +0200 Subject: [PATCH 005/182] v1.1.0 --- CHANGELOG.md | 2 +- .../create-react-app-with-flow/package.json | 2 +- package.json | 2 +- packages/material-ui-codemod/package.json | 2 +- packages/material-ui-docs/package.json | 6 ++--- packages/material-ui-icons/package.json | 4 ++-- packages/material-ui-lab/package.json | 8 +++---- .../material-ui-lab/scripts/copy-files.js | 1 + packages/material-ui/.size-snapshot.json | 22 +++++++++---------- packages/material-ui/package.json | 2 +- 10 files changed, 26 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe3889cff52857..19ad5d474889ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,7 +67,7 @@ N/A - [core] Simplify the babel docs config (#11514) @oliviertassinari - [core] Remove lodash 💃 (#11521) @oliviertassinari - [core] Internalize ScrollbarSize (#11523) @oliviertassinari -- [typescript] add sample with return types (#11512) @yacut +- [typescript] Add sample with return types (#11512) @yacut #### Labs diff --git a/examples/create-react-app-with-flow/package.json b/examples/create-react-app-with-flow/package.json index 4c9b8fcb567772..38789d23021b86 100644 --- a/examples/create-react-app-with-flow/package.json +++ b/examples/create-react-app-with-flow/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "private": true, "dependencies": { - "@material-ui/core": "^1.0.0-rc.0", + "@material-ui/core": "^1.0.0", "prop-types": "^15.6.0", "react": "^16.3.0", "react-dom": "^16.3.0", diff --git a/package.json b/package.json index 90978f1c319be9..965ed207c547dd 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "material-ui-workspace", "private": true, "author": "Material-UI Team", - "version": "1.0.0", + "version": "1.1.0", "description": "Material-UI's workspace package", "keywords": [ "react", diff --git a/packages/material-ui-codemod/package.json b/packages/material-ui-codemod/package.json index a959314050f120..ec774e14c94df4 100644 --- a/packages/material-ui-codemod/package.json +++ b/packages/material-ui-codemod/package.json @@ -2,7 +2,7 @@ "name": "@material-ui/codemod", "private": false, "author": "Material-UI Team", - "version": "1.0.0", + "version": "1.1.0", "description": "Codemod scripts for Material-UI.", "keywords": [ "react", diff --git a/packages/material-ui-docs/package.json b/packages/material-ui-docs/package.json index 0c5784fe204dbd..9801e2acfafcb8 100644 --- a/packages/material-ui-docs/package.json +++ b/packages/material-ui-docs/package.json @@ -2,7 +2,7 @@ "name": "@material-ui/docs", "private": false, "author": "Material-UI Team", - "version": "1.0.0-alpha.2", + "version": "1.0.0-alpha.3", "description": "Material-UI Docs - Documentation building blocks.", "main": "./src/index.js", "keywords": [ @@ -30,8 +30,8 @@ "release": "yarn build && npm publish build" }, "peerDependencies": { - "@material-ui/core": "^1.0.0-rc.0", - "@material-ui/icons": "^1.0.0-rc.0", + "@material-ui/core": "^1.0.0", + "@material-ui/icons": "^1.0.0", "react": "^16.3.0", "react-dom": "^16.3.0" }, diff --git a/packages/material-ui-icons/package.json b/packages/material-ui-icons/package.json index 5c0912e672d04e..e223d70c8058f6 100644 --- a/packages/material-ui-icons/package.json +++ b/packages/material-ui-icons/package.json @@ -2,7 +2,7 @@ "name": "@material-ui/icons", "private": false, "author": "Material-UI Team", - "version": "1.0.0", + "version": "1.1.0", "description": "Material Design Svg Icons converted to Material-UI React components.", "main": "./src/index.js", "keywords": [ @@ -36,7 +36,7 @@ "release": "yarn build && npm publish build" }, "peerDependencies": { - "@material-ui/core": "^1.0.0-rc.0", + "@material-ui/core": "^1.0.0", "react": "^16.3.0", "react-dom": "^16.3.0" }, diff --git a/packages/material-ui-lab/package.json b/packages/material-ui-lab/package.json index 263c604664415e..57558f3dfb9629 100644 --- a/packages/material-ui-lab/package.json +++ b/packages/material-ui-lab/package.json @@ -1,8 +1,8 @@ { "name": "@material-ui/lab", - "private": false, + "private": true, "author": "Material-UI Team", - "version": "1.0.0-alpha.2", + "version": "1.0.0-alpha.3", "description": "Material-UI Lab - Incubator for Material-UI React components.", "main": "./src/index.js", "keywords": [ @@ -33,8 +33,8 @@ "release": "yarn build && npm publish build" }, "peerDependencies": { - "@material-ui/icons": "^1.0.0-rc.0", - "@material-ui/core": "^1.0.0-rc.0", + "@material-ui/icons": "^1.0.0", + "@material-ui/core": "^1.0.0", "react": "^16.3.0", "react-dom": "^16.3.0" }, diff --git a/packages/material-ui-lab/scripts/copy-files.js b/packages/material-ui-lab/scripts/copy-files.js index 34c4520659fbf2..f656501c3312c9 100644 --- a/packages/material-ui-lab/scripts/copy-files.js +++ b/packages/material-ui-lab/scripts/copy-files.js @@ -16,6 +16,7 @@ async function createPackageFile() { ...packageDataOther, main: './index.js', module: './index.es.js', + private: false, }; const buildPath = path.resolve(__dirname, '../build/package.json'); diff --git a/packages/material-ui/.size-snapshot.json b/packages/material-ui/.size-snapshot.json index 5369facf1cedef..668dcf0c2fd1e2 100644 --- a/packages/material-ui/.size-snapshot.json +++ b/packages/material-ui/.size-snapshot.json @@ -1,21 +1,21 @@ { "build/umd/material-ui.development.js": { - "bundled": 1005468, - "minified": 364958, - "gzipped": 95541 + "bundled": 986509, + "minified": 360606, + "gzipped": 93973 }, "build/umd/material-ui.production.min.js": { - "bundled": 836136, - "minified": 323784, - "gzipped": 86321 + "bundled": 816961, + "minified": 319394, + "gzipped": 84680 }, "build/dist/material-ui.esm.js": { - "bundled": 579128, - "minified": 281957, - "gzipped": 62887, + "bundled": 582102, + "minified": 283593, + "gzipped": 63193, "treeshaked": { - "rollup": 194465, - "webpack": 201568 + "rollup": 195777, + "webpack": 202862 } } } diff --git a/packages/material-ui/package.json b/packages/material-ui/package.json index cfcfe0f48d8c33..5432489218e4ad 100644 --- a/packages/material-ui/package.json +++ b/packages/material-ui/package.json @@ -2,7 +2,7 @@ "name": "@material-ui/core", "private": true, "author": "Material-UI Team", - "version": "1.0.0", + "version": "1.1.0", "description": "React components that implement Google's Material Design.", "keywords": [ "react", From 6853a0072875cd221a0e47722821184402cc00a6 Mon Sep 17 00:00:00 2001 From: Matt Brookes Date: Sat, 26 May 2018 23:29:44 +0100 Subject: [PATCH 006/182] [SpeedDial] Fix classes prop description (#11599) --- packages/material-ui-lab/src/SpeedDial/SpeedDial.js | 3 ++- pages/lab/api/speed-dial.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/material-ui-lab/src/SpeedDial/SpeedDial.js b/packages/material-ui-lab/src/SpeedDial/SpeedDial.js index 24dca00245f4dc..1fa3506e7416a7 100644 --- a/packages/material-ui-lab/src/SpeedDial/SpeedDial.js +++ b/packages/material-ui-lab/src/SpeedDial/SpeedDial.js @@ -190,7 +190,8 @@ SpeedDial.propTypes = { */ children: PropTypes.node.isRequired, /** - * Useful to extend the style applied to components. + * Override or extend the styles applied to the component. + * See [CSS API](#css-api) below for more details. */ classes: PropTypes.object.isRequired, /** diff --git a/pages/lab/api/speed-dial.md b/pages/lab/api/speed-dial.md index f09ea6c7f2d133..4ee4cc29f7e2aa 100644 --- a/pages/lab/api/speed-dial.md +++ b/pages/lab/api/speed-dial.md @@ -15,7 +15,7 @@ filename: /packages/material-ui-lab/src/SpeedDial/SpeedDial.js | ariaLabel * | string | | The aria-label of the `Button` element. Also used to provide the `id` for the `SpeedDial` element and its children. | | ButtonProps | object | | Properties applied to the `Button` element. | | children * | node | | SpeedDialActions to display when the SpeedDial is `open`. | -| classes | object | | Useful to extend the style applied to components. | +| classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | hidden | bool | false | If `true`, the SpeedDial will be hidden. | | icon * | element | | The icon to display in the SpeedDial Floating Action Button. The `SpeedDialIcon` component provides a default Icon with animation. | | onClose | func | | Callback fired when the component requests to be closed.

**Signature:**
`function(event: object, key: string) => void`
*event:* The event source of the callback
*key:* The key pressed | From f79115538f9afcbc0489fbd57e967975cda41a79 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sun, 27 May 2018 01:15:38 +0200 Subject: [PATCH 007/182] [docs] Better API spread section (#11598) --- docs/scripts/buildApi.js | 42 +++++++++++++++++++--- docs/src/modules/utils/generateMarkdown.js | 27 +++++++------- packages/material-ui/src/Grow/Grow.js | 2 +- pages/api/app-bar.md | 3 +- pages/api/avatar.md | 2 +- pages/api/backdrop.md | 2 +- pages/api/badge.md | 2 +- pages/api/bottom-navigation-action.md | 3 +- pages/api/bottom-navigation.md | 2 +- pages/api/button-base.md | 2 +- pages/api/button.md | 3 +- pages/api/card-actions.md | 2 +- pages/api/card-content.md | 2 +- pages/api/card-header.md | 2 +- pages/api/card-media.md | 2 +- pages/api/card.md | 3 +- pages/api/checkbox.md | 2 +- pages/api/chip.md | 2 +- pages/api/circular-progress.md | 2 +- pages/api/click-away-listener.md | 3 +- pages/api/collapse.md | 3 +- pages/api/css-baseline.md | 2 +- pages/api/dialog-actions.md | 2 +- pages/api/dialog-content-text.md | 3 +- pages/api/dialog-content.md | 2 +- pages/api/dialog-title.md | 2 +- pages/api/dialog.md | 3 +- pages/api/divider.md | 2 +- pages/api/drawer.md | 2 +- pages/api/expansion-panel-actions.md | 2 +- pages/api/expansion-panel-details.md | 2 +- pages/api/expansion-panel-summary.md | 3 +- pages/api/expansion-panel.md | 3 +- pages/api/fade.md | 3 +- pages/api/form-control-label.md | 2 +- pages/api/form-control.md | 2 +- pages/api/form-group.md | 2 +- pages/api/form-helper-text.md | 2 +- pages/api/form-label.md | 2 +- pages/api/grid-list-tile-bar.md | 2 +- pages/api/grid-list-tile.md | 2 +- pages/api/grid-list.md | 2 +- pages/api/grid.md | 2 +- pages/api/grow.md | 3 +- pages/api/hidden.md | 2 +- pages/api/icon-button.md | 3 +- pages/api/icon.md | 2 +- pages/api/input-adornment.md | 2 +- pages/api/input-label.md | 3 +- pages/api/input.md | 2 +- pages/api/linear-progress.md | 2 +- pages/api/list-item-avatar.md | 2 +- pages/api/list-item-icon.md | 2 +- pages/api/list-item-secondary-action.md | 2 +- pages/api/list-item-text.md | 2 +- pages/api/list-item.md | 2 +- pages/api/list-subheader.md | 2 +- pages/api/list.md | 2 +- pages/api/menu-item.md | 3 +- pages/api/menu-list.md | 3 +- pages/api/menu.md | 3 +- pages/api/mobile-stepper.md | 3 +- pages/api/modal.md | 3 +- pages/api/mui-theme-provider.md | 2 +- pages/api/native-select.md | 3 +- pages/api/paper.md | 2 +- pages/api/popover.md | 3 +- pages/api/portal.md | 2 +- pages/api/radio-group.md | 3 +- pages/api/radio.md | 2 +- pages/api/root-ref.md | 2 +- pages/api/select.md | 3 +- pages/api/slide.md | 3 +- pages/api/snackbar-content.md | 3 +- pages/api/snackbar.md | 2 +- pages/api/step-button.md | 3 +- pages/api/step-connector.md | 2 +- pages/api/step-content.md | 2 +- pages/api/step-icon.md | 2 +- pages/api/step-label.md | 2 +- pages/api/step.md | 2 +- pages/api/stepper.md | 3 +- pages/api/svg-icon.md | 2 +- pages/api/swipeable-drawer.md | 3 +- pages/api/switch-base.md | 3 +- pages/api/switch.md | 2 +- pages/api/tab.md | 3 +- pages/api/table-body.md | 2 +- pages/api/table-cell.md | 2 +- pages/api/table-footer.md | 2 +- pages/api/table-head.md | 2 +- pages/api/table-pagination.md | 3 +- pages/api/table-row.md | 2 +- pages/api/table-sort-label.md | 3 +- pages/api/table.md | 2 +- pages/api/tabs.md | 2 +- pages/api/text-field.md | 3 +- pages/api/toolbar.md | 2 +- pages/api/tooltip.md | 2 +- pages/api/touch-ripple.md | 2 +- pages/api/typography.md | 2 +- pages/api/zoom.md | 3 +- pages/lab/api/slider.md | 2 +- pages/lab/api/speed-dial-action.md | 2 +- pages/lab/api/speed-dial-icon.md | 2 +- pages/lab/api/speed-dial.md | 2 +- 106 files changed, 190 insertions(+), 121 deletions(-) diff --git a/docs/scripts/buildApi.js b/docs/scripts/buildApi.js index c7ec6bfc61e727..a2499c3fce5069 100644 --- a/docs/scripts/buildApi.js +++ b/docs/scripts/buildApi.js @@ -41,6 +41,38 @@ const rootDirectory = path.resolve(__dirname, '../../'); const docsApiDirectory = path.resolve(rootDirectory, args[3]); const theme = createMuiTheme(); +const inheritedComponentRegexp = /\/\/ @inheritedComponent (.*)/; + +function getInheritance(src) { + const inheritedComponent = src.match(inheritedComponentRegexp); + + if (!inheritedComponent) { + return null; + } + + const component = inheritedComponent[1]; + let pathname; + + switch (component) { + case 'Transition': + pathname = 'https://reactcommunity.org/react-transition-group/#Transition'; + break; + + case 'EventListener': + pathname = 'https://github.com/oliviertassinari/react-event-listener'; + break; + + default: + pathname = `/api/${kebabCase(component)}`; + break; + } + + return { + component, + pathname, + }; +} + function buildDocs(options) { const { component: componentObject, pagesMarkdown } = options; const src = readFileSync(componentObject.filename, 'utf8'); @@ -72,17 +104,19 @@ function buildDocs(options) { throw err; } + // if (reactAPI.name !== 'Select') { + // return; + // } + reactAPI.name = path.parse(componentObject.filename).name; reactAPI.styles = styles; reactAPI.pagesMarkdown = pagesMarkdown; reactAPI.src = src; - // if (reactAPI.name !== 'Select') { - // return; - // } - // Relative location in the file system. reactAPI.filename = componentObject.filename.replace(rootDirectory, ''); + reactAPI.inheritance = getInheritance(src); + let markdown; try { markdown = generateMarkdown(reactAPI); diff --git a/docs/src/modules/utils/generateMarkdown.js b/docs/src/modules/utils/generateMarkdown.js index 652a63d19a4ea3..2b21720043aa90 100644 --- a/docs/src/modules/utils/generateMarkdown.js +++ b/docs/src/modules/utils/generateMarkdown.js @@ -1,6 +1,5 @@ import { parse as parseDoctrine } from 'doctrine'; import recast from 'recast'; -import kebabCase from 'lodash/kebabCase'; import { pageToTitle } from './helpers'; const SOURCE_CODE_ROOT_URL = 'https://github.com/mui-org/material-ui/tree/master'; @@ -213,6 +212,13 @@ function generateProps(reactAPI) { return textProps; }, text); + text = `${text} +Any other properties supplied will be [spread to](#inheritance) the root element (${ + reactAPI.inheritance + ? `[${reactAPI.inheritance.component}](${reactAPI.inheritance.pathname})` + : 'native element' + }).`; + return text; } @@ -244,38 +250,34 @@ you need to use the following style sheet name: \`${reactAPI.styles.name}\`. `; } -const inheritedComponentRegexp = /\/\/ @inheritedComponent (.*)/; - function generateInheritance(reactAPI) { - const inheritedComponent = reactAPI.src.match(inheritedComponentRegexp); + const { inheritance } = reactAPI; - if (!inheritedComponent) { + if (!inheritance) { return ''; } - const component = inheritedComponent[1]; - let pathname; let suffix = ''; - switch (component) { + switch (inheritance.component) { case 'Transition': suffix = ', from react-transition-group,'; - pathname = 'https://reactcommunity.org/react-transition-group/#Transition'; break; case 'EventListener': suffix = ', from react-event-listener,'; - pathname = 'https://github.com/oliviertassinari/react-event-listener'; break; default: - pathname = `/api/${kebabCase(component)}`; break; } return `## Inheritance -The properties of the [${component}](${pathname}) component${suffix} are also available. +The properties of the [${inheritance.component}](${ + inheritance.pathname + }) component${suffix} are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). `; } @@ -311,7 +313,6 @@ export default function generateMarkdown(reactAPI) { reactAPI.description, '', generateProps(reactAPI), - 'Any other properties supplied will be [spread to the root element](/guides/api#spread).', '', `${generateClasses(reactAPI)}${generateInheritance(reactAPI)}${generateDemos(reactAPI)}`, ].join('\n'); diff --git a/packages/material-ui/src/Grow/Grow.js b/packages/material-ui/src/Grow/Grow.js index 5a5b66ab2c1dcf..439544b7a6c262 100644 --- a/packages/material-ui/src/Grow/Grow.js +++ b/packages/material-ui/src/Grow/Grow.js @@ -7,7 +7,7 @@ import withTheme from '../styles/withTheme'; import { reflow, getTransitionProps } from '../transitions/utils'; function getScale(value) { - return `scale(${value}, ${value ** 2})`; + return `scale(${value}, ${Math.pow(value, 2)})`; } const styles = { diff --git a/pages/api/app-bar.md b/pages/api/app-bar.md index 56efe7813c3b42..a0ddff35c87e1b 100644 --- a/pages/api/app-bar.md +++ b/pages/api/app-bar.md @@ -17,7 +17,7 @@ filename: /packages/material-ui/src/AppBar/AppBar.js | color | enum: 'inherit' |
 'primary' |
 'secondary' |
 'default'
| 'primary' | The color of the component. It supports those theme colors that make sense for this component. | | position | enum: 'fixed' |
 'absolute' |
 'sticky' |
 'static'
| 'fixed' | The positioning type. The behavior of the different options is described [here](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning). Note: `sticky` is not universally supported and will fall back to `static` when unavailable. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Paper](/api/paper)). ## CSS API @@ -43,6 +43,7 @@ you need to use the following style sheet name: `MuiAppBar`. ## Inheritance The properties of the [Paper](/api/paper) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/avatar.md b/pages/api/avatar.md index 9bdba74ecc942a..8646da914b7c54 100644 --- a/pages/api/avatar.md +++ b/pages/api/avatar.md @@ -21,7 +21,7 @@ filename: /packages/material-ui/src/Avatar/Avatar.js | src | string | | The `src` attribute for the `img` element. | | srcSet | string | | The `srcSet` attribute for the `img` element. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/backdrop.md b/pages/api/backdrop.md index fd8de7eb189896..90f8813cf55872 100644 --- a/pages/api/backdrop.md +++ b/pages/api/backdrop.md @@ -17,7 +17,7 @@ filename: /packages/material-ui/src/Backdrop/Backdrop.js | open * | bool | | If `true`, the backdrop is open. | | transitionDuration | union: number |
 {enter?: number, exit?: number}
| | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/badge.md b/pages/api/badge.md index 25154419ca7827..84afffb45f07e3 100644 --- a/pages/api/badge.md +++ b/pages/api/badge.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/Badge/Badge.js | color | enum: 'default' |
 'primary' |
 'secondary' |
 'error'
| 'default' | The color of the component. It supports those theme colors that make sense for this component. | | component | union: string |
 func
| 'span' | The component used for the root node. Either a string to use a DOM element or a component. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/bottom-navigation-action.md b/pages/api/bottom-navigation-action.md index 67d62615e1fe51..23a82b14e05d68 100644 --- a/pages/api/bottom-navigation-action.md +++ b/pages/api/bottom-navigation-action.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/BottomNavigationAction/BottomNavigationActio | showLabel | bool | | If `true`, the BottomNavigationAction will show its label. | | value | any | | You can provide your own value. Otherwise, we fallback to the child position index. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([ButtonBase](/api/button-base)). ## CSS API @@ -41,6 +41,7 @@ you need to use the following style sheet name: `MuiBottomNavigationAction`. ## Inheritance The properties of the [ButtonBase](/api/button-base) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/bottom-navigation.md b/pages/api/bottom-navigation.md index dcd12dbc4b18ff..e0a33b64913422 100644 --- a/pages/api/bottom-navigation.md +++ b/pages/api/bottom-navigation.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/BottomNavigation/BottomNavigation.js | showLabels | bool | false | If `true`, all `BottomNavigationAction`s will show their labels. By default, only the selected `BottomNavigationAction` will show its label. | | value | any | | The value of the currently selected `BottomNavigationAction`. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/button-base.md b/pages/api/button-base.md index 337f27036065da..62a48334996a04 100644 --- a/pages/api/button-base.md +++ b/pages/api/button-base.md @@ -27,7 +27,7 @@ It contains a load of style reset and some focus/ripple logic. | onFocusVisible | func | | Callback fired when the component is focused with a keyboard. We trigger a `onFocus` callback too. | | TouchRippleProps | object | | Properties applied to the `TouchRipple` element. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/button.md b/pages/api/button.md index 223b9b1ecbcab4..b4160b5c083ca5 100644 --- a/pages/api/button.md +++ b/pages/api/button.md @@ -25,7 +25,7 @@ filename: /packages/material-ui/src/Button/Button.js | size | enum: 'small' |
 'medium' |
 'large'
| 'medium' | The size of the button. `small` is equivalent to the dense button styling. | | variant | enum: 'flat' |
 'outlined' |
 'raised' |
 'fab'
| 'flat' | The type of button. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([ButtonBase](/api/button-base)). ## CSS API @@ -59,6 +59,7 @@ you need to use the following style sheet name: `MuiButton`. ## Inheritance The properties of the [ButtonBase](/api/button-base) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/card-actions.md b/pages/api/card-actions.md index 2b942e07c2145e..43bd575664c486 100644 --- a/pages/api/card-actions.md +++ b/pages/api/card-actions.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/CardActions/CardActions.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | disableActionSpacing | bool | false | If `true`, the card actions do not have additional margin. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/card-content.md b/pages/api/card-content.md index 01edc434c0c01d..5a832e33e730b3 100644 --- a/pages/api/card-content.md +++ b/pages/api/card-content.md @@ -15,7 +15,7 @@ filename: /packages/material-ui/src/CardContent/CardContent.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | component | union: string |
 func
| 'div' | The component used for the root node. Either a string to use a DOM element or a component. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/card-header.md b/pages/api/card-header.md index b9f195e94d67b8..f4b30d870906d6 100644 --- a/pages/api/card-header.md +++ b/pages/api/card-header.md @@ -19,7 +19,7 @@ filename: /packages/material-ui/src/CardHeader/CardHeader.js | subheader | node | | The content of the component. | | title | node | | The content of the Card Title. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/card-media.md b/pages/api/card-media.md index 0b7f2ceb354cbd..b8852df52ec565 100644 --- a/pages/api/card-media.md +++ b/pages/api/card-media.md @@ -17,7 +17,7 @@ filename: /packages/material-ui/src/CardMedia/CardMedia.js | image | string | | Image to be displayed as a background image. Either `image` or `src` prop must be specified. Note that caller must specify height otherwise the image will not be visible. | | src | string | | An alias for `image` property. Available only with media components. Media components: `video`, `audio`, `picture`, `iframe`, `img`. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/card.md b/pages/api/card.md index 1e8365e23b5b72..e52a63f926e80e 100644 --- a/pages/api/card.md +++ b/pages/api/card.md @@ -15,7 +15,7 @@ filename: /packages/material-ui/src/Card/Card.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | raised | bool | false | If `true`, the card will use raised styling. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Paper](/api/paper)). ## CSS API @@ -34,6 +34,7 @@ you need to use the following style sheet name: `MuiCard`. ## Inheritance The properties of the [Paper](/api/paper) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/checkbox.md b/pages/api/checkbox.md index e25d615167a627..d449065f9da073 100644 --- a/pages/api/checkbox.md +++ b/pages/api/checkbox.md @@ -28,7 +28,7 @@ filename: /packages/material-ui/src/Checkbox/Checkbox.js | type | string | | The input component property `type`. | | value | string | | The value of the component. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/chip.md b/pages/api/chip.md index eac27d93819c2a..5b727a86b2d32b 100644 --- a/pages/api/chip.md +++ b/pages/api/chip.md @@ -19,7 +19,7 @@ Chips represent complex entities in small blocks, such as a contact. | label | node | | The content of the label. | | onDelete | func | | Callback function fired when the delete icon is clicked. If set, the delete icon will be shown. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/circular-progress.md b/pages/api/circular-progress.md index a073fd25876f18..7753f58780d147 100644 --- a/pages/api/circular-progress.md +++ b/pages/api/circular-progress.md @@ -23,7 +23,7 @@ attribute to `true` on that region until it has finished loading. | value | number | 0 | The value of the progress indicator for the determinate and static variants. Value between 0 and 100. | | variant | enum: 'determinate' |
 'indeterminate' |
 'static'
| 'indeterminate' | The variant of progress indicator. Use indeterminate when there is no progress value. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/click-away-listener.md b/pages/api/click-away-listener.md index c0d605fbd18af8..cd018e086dfc66 100644 --- a/pages/api/click-away-listener.md +++ b/pages/api/click-away-listener.md @@ -17,9 +17,10 @@ Listen for click events that are triggered outside of the component children. | onClickAway * | func | | | | touchEvent | enum: 'onTouchStart' |
 'onTouchEnd' |
 false
| 'onTouchEnd' | | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([EventListener](https://github.com/oliviertassinari/react-event-listener)). ## Inheritance The properties of the [EventListener](https://github.com/oliviertassinari/react-event-listener) component, from react-event-listener, are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). diff --git a/pages/api/collapse.md b/pages/api/collapse.md index f463ee715fd171..2dd60a7a7b3dc2 100644 --- a/pages/api/collapse.md +++ b/pages/api/collapse.md @@ -21,7 +21,7 @@ It uses [react-transition-group](https://github.com/reactjs/react-transition-gro | in | bool | | If `true`, the component will transition in. | | timeout | union: number |
 {enter?: number, exit?: number} |
 enum: 'auto'

| duration.standard | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object.
Set to 'auto' to automatically calculate transition time based on height. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Transition](https://reactcommunity.org/react-transition-group/#Transition)). ## CSS API @@ -43,6 +43,7 @@ you need to use the following style sheet name: `MuiCollapse`. ## Inheritance The properties of the [Transition](https://reactcommunity.org/react-transition-group/#Transition) component, from react-transition-group, are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/css-baseline.md b/pages/api/css-baseline.md index 8596018f4f34a1..e36e8a193fc54a 100644 --- a/pages/api/css-baseline.md +++ b/pages/api/css-baseline.md @@ -14,7 +14,7 @@ Kickstart an elegant, consistent, and simple baseline to build upon. |:-----|:-----|:--------|:------------| | children | node | null | You can wrap a node. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## Demos diff --git a/pages/api/dialog-actions.md b/pages/api/dialog-actions.md index 13ce17a7492679..2c855233be7db9 100644 --- a/pages/api/dialog-actions.md +++ b/pages/api/dialog-actions.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/DialogActions/DialogActions.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | disableActionSpacing | bool | false | If `true`, the dialog actions do not have additional margin. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/dialog-content-text.md b/pages/api/dialog-content-text.md index fe8b4a46c59837..924ca732beca5b 100644 --- a/pages/api/dialog-content-text.md +++ b/pages/api/dialog-content-text.md @@ -15,7 +15,7 @@ filename: /packages/material-ui/src/DialogContentText/DialogContentText.js | children | node | | The content of the component. | | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Typography](/api/typography)). ## CSS API @@ -34,4 +34,5 @@ you need to use the following style sheet name: `MuiDialogContentText`. ## Inheritance The properties of the [Typography](/api/typography) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). diff --git a/pages/api/dialog-content.md b/pages/api/dialog-content.md index 309fb3be51036d..6250ad8e1186cc 100644 --- a/pages/api/dialog-content.md +++ b/pages/api/dialog-content.md @@ -15,7 +15,7 @@ filename: /packages/material-ui/src/DialogContent/DialogContent.js | children | node | | The content of the component. | | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/dialog-title.md b/pages/api/dialog-title.md index 962e32f0c5a434..c232168f7a54d4 100644 --- a/pages/api/dialog-title.md +++ b/pages/api/dialog-title.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/DialogTitle/DialogTitle.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | disableTypography | bool | false | If `true`, the children won't be wrapped by a typography component. For instance, this can be useful to render an h4 instead of the default h2. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/dialog.md b/pages/api/dialog.md index 39d3ef02e6ed52..6720421360004c 100644 --- a/pages/api/dialog.md +++ b/pages/api/dialog.md @@ -34,7 +34,7 @@ Dialogs are overlaid modal paper based components with a backdrop. | transitionDuration | union: number |
 {enter?: number, exit?: number}
| { enter: duration.enteringScreen, exit: duration.leavingScreen } | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | | TransitionProps | object | | Properties applied to the `Transition` element. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Modal](/api/modal)). ## CSS API @@ -59,6 +59,7 @@ you need to use the following style sheet name: `MuiDialog`. ## Inheritance The properties of the [Modal](/api/modal) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/divider.md b/pages/api/divider.md index a0ed96af7b4894..e30fe161211a03 100644 --- a/pages/api/divider.md +++ b/pages/api/divider.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/Divider/Divider.js | inset | bool | false | If `true`, the divider will be indented. | | light | bool | false | If `true`, the divider will have a lighter color. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/drawer.md b/pages/api/drawer.md index 260c59c964aea5..5eb888740a385f 100644 --- a/pages/api/drawer.md +++ b/pages/api/drawer.md @@ -25,7 +25,7 @@ when `variant="temporary"` is set. | transitionDuration | union: number |
 {enter?: number, exit?: number}
| { enter: duration.enteringScreen, exit: duration.leavingScreen } | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | | variant | enum: 'permanent' |
 'persistent' |
 'temporary'
| 'temporary' | The variant of drawer. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/expansion-panel-actions.md b/pages/api/expansion-panel-actions.md index 4d34f6cf51f785..d8710663b7e1e7 100644 --- a/pages/api/expansion-panel-actions.md +++ b/pages/api/expansion-panel-actions.md @@ -15,7 +15,7 @@ filename: /packages/material-ui/src/ExpansionPanelActions/ExpansionPanelActions. | children * | node | | The content of the component. | | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/expansion-panel-details.md b/pages/api/expansion-panel-details.md index 3e86699afc1d19..cec3ec9adaed53 100644 --- a/pages/api/expansion-panel-details.md +++ b/pages/api/expansion-panel-details.md @@ -15,7 +15,7 @@ filename: /packages/material-ui/src/ExpansionPanelDetails/ExpansionPanelDetails. | children * | node | | The content of the expansion panel details. | | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/expansion-panel-summary.md b/pages/api/expansion-panel-summary.md index 81e24cb97b53fe..5c42946342ef5e 100644 --- a/pages/api/expansion-panel-summary.md +++ b/pages/api/expansion-panel-summary.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/ExpansionPanelSummary/ExpansionPanelSummary. | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | expandIcon | node | | The icon to display as the expand indicator. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([ButtonBase](/api/button-base)). ## CSS API @@ -40,6 +40,7 @@ you need to use the following style sheet name: `MuiExpansionPanelSummary`. ## Inheritance The properties of the [ButtonBase](/api/button-base) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/expansion-panel.md b/pages/api/expansion-panel.md index 6b21fe805a8208..d9df024ff4dd9d 100644 --- a/pages/api/expansion-panel.md +++ b/pages/api/expansion-panel.md @@ -20,7 +20,7 @@ filename: /packages/material-ui/src/ExpansionPanel/ExpansionPanel.js | expanded | bool | | If `true`, expands the panel, otherwise collapse it. Setting this prop enables control over the panel. | | onChange | func | | Callback fired when the expand/collapse state is changed.

**Signature:**
`function(event: object, expanded: boolean) => void`
*event:* The event source of the callback
*expanded:* The `expanded` state of the panel | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Paper](/api/paper)). ## CSS API @@ -41,6 +41,7 @@ you need to use the following style sheet name: `MuiExpansionPanel`. ## Inheritance The properties of the [Paper](/api/paper) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/fade.md b/pages/api/fade.md index 37f55849ef1d0c..e7d3f5caf73b54 100644 --- a/pages/api/fade.md +++ b/pages/api/fade.md @@ -17,11 +17,12 @@ It uses [react-transition-group](https://github.com/reactjs/react-transition-gro | in | bool | | If `true`, the component will transition in. | | timeout | union: number |
 {enter?: number, exit?: number}
| { enter: duration.enteringScreen, exit: duration.leavingScreen,} | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Transition](https://reactcommunity.org/react-transition-group/#Transition)). ## Inheritance The properties of the [Transition](https://reactcommunity.org/react-transition-group/#Transition) component, from react-transition-group, are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/form-control-label.md b/pages/api/form-control-label.md index f3726322ff9ae0..c482dbfdad083b 100644 --- a/pages/api/form-control-label.md +++ b/pages/api/form-control-label.md @@ -23,7 +23,7 @@ Use this component if you want to display an extra label. | onChange | func | | Callback fired when the state is changed.

**Signature:**
`function(event: object, checked: boolean) => void`
*event:* The event source of the callback. You can pull out the new value by accessing `event.target.checked`.
*checked:* The `checked` value of the switch | | value | string | | The value of the component. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/form-control.md b/pages/api/form-control.md index 7803b2efdf5a37..6d21b423f35bdd 100644 --- a/pages/api/form-control.md +++ b/pages/api/form-control.md @@ -28,7 +28,7 @@ This context is used by the following components: | margin | enum: 'none' |
 'dense' |
 'normal'
| 'none' | If `dense` or `normal`, will adjust vertical spacing of this and contained components. | | required | bool | false | If `true`, the label will indicate that the input is required. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/form-group.md b/pages/api/form-group.md index 932eb23e542f23..0ffcab68e7ddcd 100644 --- a/pages/api/form-group.md +++ b/pages/api/form-group.md @@ -18,7 +18,7 @@ For the `Radio`, you should be using the `RadioGroup` component instead of this | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | row | bool | false | Display group of elements in a compact row. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/form-helper-text.md b/pages/api/form-helper-text.md index b1d1668d4d81e4..14edb9d95f3eed 100644 --- a/pages/api/form-helper-text.md +++ b/pages/api/form-helper-text.md @@ -19,7 +19,7 @@ filename: /packages/material-ui/src/FormHelperText/FormHelperText.js | error | bool | | If `true`, helper text should be displayed in an error state. | | margin | enum: 'dense'
| | If `dense`, will adjust vertical spacing. This is normally obtained via context from FormControl. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/form-label.md b/pages/api/form-label.md index f8cf978fd39c4f..51ae92191a1959 100644 --- a/pages/api/form-label.md +++ b/pages/api/form-label.md @@ -20,7 +20,7 @@ filename: /packages/material-ui/src/FormLabel/FormLabel.js | focused | bool | | If `true`, the input of this label is focused (used by `FormGroup` components). | | required | bool | | If `true`, the label will indicate that the input is required. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/grid-list-tile-bar.md b/pages/api/grid-list-tile-bar.md index a87dc2e8ae3625..a2e41c5acb1f1a 100644 --- a/pages/api/grid-list-tile-bar.md +++ b/pages/api/grid-list-tile-bar.md @@ -19,7 +19,7 @@ filename: /packages/material-ui/src/GridListTileBar/GridListTileBar.js | title | node | | Title to be displayed on tile. | | titlePosition | enum: 'top' |
 'bottom'
| 'bottom' | Position of the title bar. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/grid-list-tile.md b/pages/api/grid-list-tile.md index 5520a32fe96f94..9f9195eab60c79 100644 --- a/pages/api/grid-list-tile.md +++ b/pages/api/grid-list-tile.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/GridListTile/GridListTile.js | component | union: string |
 func
| 'li' | The component used for the root node. Either a string to use a DOM element or a component. | | rows | number | 1 | Height of the tile in number of grid cells. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/grid-list.md b/pages/api/grid-list.md index 029ca26839143b..39c4ca15ce3b6f 100644 --- a/pages/api/grid-list.md +++ b/pages/api/grid-list.md @@ -19,7 +19,7 @@ filename: /packages/material-ui/src/GridList/GridList.js | component | union: string |
 func
| 'ul' | The component used for the root node. Either a string to use a DOM element or a component. | | spacing | number | 4 | Number of px for the spacing between tiles. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/grid.md b/pages/api/grid.md index e245386d6f7267..1e96455899e2d2 100644 --- a/pages/api/grid.md +++ b/pages/api/grid.md @@ -30,7 +30,7 @@ filename: /packages/material-ui/src/Grid/Grid.js | xs | enum: false, true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
| false | Defines the number of grids the component is going to use. It's applied for all the screen sizes with the lowest priority. | | zeroMinWidth | bool | false | If `true`, it sets `min-width: 0` on the item. Refer to the limitations section of the documentation to better understand the use case. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/grow.md b/pages/api/grow.md index f4bee997e900fe..2f46b980ee7cb2 100644 --- a/pages/api/grow.md +++ b/pages/api/grow.md @@ -17,11 +17,12 @@ It uses [react-transition-group](https://github.com/reactjs/react-transition-gro | in | bool | | If `true`, show the component; triggers the enter or exit animation. | | timeout | union: number |
 {enter?: number, exit?: number} |
 enum: 'auto'

| 'auto' | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object.
Set to 'auto' to automatically calculate transition time based on height. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Transition](https://reactcommunity.org/react-transition-group/#Transition)). ## Inheritance The properties of the [Transition](https://reactcommunity.org/react-transition-group/#Transition) component, from react-transition-group, are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/hidden.md b/pages/api/hidden.md index 36c9f839467ae3..2ef01b7567b8e7 100644 --- a/pages/api/hidden.md +++ b/pages/api/hidden.md @@ -27,7 +27,7 @@ Responsively hides children based on the selected implementation. | xsDown | bool | false | If true, screens this size and down will be hidden. | | xsUp | bool | false | If true, screens this size and up will be hidden. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## Demos diff --git a/pages/api/icon-button.md b/pages/api/icon-button.md index d559759a9288b5..d81b54cbb9596f 100644 --- a/pages/api/icon-button.md +++ b/pages/api/icon-button.md @@ -19,7 +19,7 @@ regarding the available icon options. | disabled | bool | false | If `true`, the button will be disabled. | | disableRipple | bool | | If `true`, the ripple will be disabled. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([ButtonBase](/api/button-base)). ## CSS API @@ -43,6 +43,7 @@ you need to use the following style sheet name: `MuiIconButton`. ## Inheritance The properties of the [ButtonBase](/api/button-base) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/icon.md b/pages/api/icon.md index a9b9f098d98c16..2f7b80c82fa9e3 100644 --- a/pages/api/icon.md +++ b/pages/api/icon.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/Icon/Icon.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | color | enum: 'inherit', 'primary', 'secondary', 'action', 'error', 'disabled'
| 'inherit' | The color of the component. It supports those theme colors that make sense for this component. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/input-adornment.md b/pages/api/input-adornment.md index 44194c1301f60a..d33f29f83b8d4c 100644 --- a/pages/api/input-adornment.md +++ b/pages/api/input-adornment.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/InputAdornment/InputAdornment.js | disableTypography | bool | false | If children is a string then disable wrapping in a Typography component. | | position | enum: 'start' |
 'end'
| | The position this adornment should appear relative to the `Input`. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/input-label.md b/pages/api/input-label.md index 3946beea1e166b..5dd8cd13c11495 100644 --- a/pages/api/input-label.md +++ b/pages/api/input-label.md @@ -23,7 +23,7 @@ filename: /packages/material-ui/src/InputLabel/InputLabel.js | required | bool | | if `true`, the label will indicate that the input is required. | | shrink | bool | | If `true`, the label is shrunk. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([FormLabel](/api/form-label)). ## CSS API @@ -46,6 +46,7 @@ you need to use the following style sheet name: `MuiInputLabel`. ## Inheritance The properties of the [FormLabel](/api/form-label) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/input.md b/pages/api/input.md index 2f92b8d62cab73..0513afc7567f02 100644 --- a/pages/api/input.md +++ b/pages/api/input.md @@ -37,7 +37,7 @@ filename: /packages/material-ui/src/Input/Input.js | type | string | 'text' | Type of the input element. It should be a valid HTML5 input type. | | value | union: string |
 number |
 arrayOf
| | The input value, required for a controlled component. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/linear-progress.md b/pages/api/linear-progress.md index 13c4977966c18f..cc040babc76803 100644 --- a/pages/api/linear-progress.md +++ b/pages/api/linear-progress.md @@ -22,7 +22,7 @@ attribute to `true` on that region until it has finished loading. | valueBuffer | number | | The value for the buffer variant. Value between 0 and 100. | | variant | enum: 'determinate' |
 'indeterminate' |
 'buffer' |
 'query'
| 'indeterminate' | The variant of progress indicator. Use indeterminate or query when there is no progress value. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/list-item-avatar.md b/pages/api/list-item-avatar.md index 90406cf610a305..47ad27d515e750 100644 --- a/pages/api/list-item-avatar.md +++ b/pages/api/list-item-avatar.md @@ -15,7 +15,7 @@ It's a simple wrapper to apply the `dense` mode styles to `Avatar`. | children * | element | | The content of the component, normally `Avatar`. | | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/list-item-icon.md b/pages/api/list-item-icon.md index a524fa34945908..0f5436c29f810e 100644 --- a/pages/api/list-item-icon.md +++ b/pages/api/list-item-icon.md @@ -15,7 +15,7 @@ A simple wrapper to apply `List` styles to an `Icon` or `SvgIcon`. | children * | element | | The content of the component, normally `Icon`, `SvgIcon`, or a `@material-ui/icons` SVG icon element. | | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/list-item-secondary-action.md b/pages/api/list-item-secondary-action.md index 0a59c6f22515b2..4d30e7e5a89b51 100644 --- a/pages/api/list-item-secondary-action.md +++ b/pages/api/list-item-secondary-action.md @@ -15,7 +15,7 @@ filename: /packages/material-ui/src/ListItemSecondaryAction/ListItemSecondaryAct | children | node | | The content of the component, normally an `IconButton` or selection control. | | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/list-item-text.md b/pages/api/list-item-text.md index 6a8b1087096ed8..470d35381c5d61 100644 --- a/pages/api/list-item-text.md +++ b/pages/api/list-item-text.md @@ -19,7 +19,7 @@ filename: /packages/material-ui/src/ListItemText/ListItemText.js | primary | node | | The main content element. | | secondary | node | | The secondary content element. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/list-item.md b/pages/api/list-item.md index d84f4b51a4bbd2..e4b13982378a60 100644 --- a/pages/api/list-item.md +++ b/pages/api/list-item.md @@ -22,7 +22,7 @@ filename: /packages/material-ui/src/ListItem/ListItem.js | disableGutters | bool | false | If `true`, the left and right padding is removed. | | divider | bool | false | If `true`, a 1px light border is added to the bottom of the list item. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/list-subheader.md b/pages/api/list-subheader.md index 8a7f9e8c226477..d7427beb7489de 100644 --- a/pages/api/list-subheader.md +++ b/pages/api/list-subheader.md @@ -19,7 +19,7 @@ filename: /packages/material-ui/src/ListSubheader/ListSubheader.js | disableSticky | bool | false | If `true`, the List Subheader will not stick to the top during scroll. | | inset | bool | false | If `true`, the List Subheader will be indented. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/list.md b/pages/api/list.md index 36befd695937fe..a3221b74c7bac9 100644 --- a/pages/api/list.md +++ b/pages/api/list.md @@ -19,7 +19,7 @@ filename: /packages/material-ui/src/List/List.js | disablePadding | bool | false | If `true`, vertical padding will be removed from the list. | | subheader | node | | The content of the subheader, normally `ListSubheader`. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). ## CSS API diff --git a/pages/api/menu-item.md b/pages/api/menu-item.md index 3d90a56019d70a..b7d412396f9e88 100644 --- a/pages/api/menu-item.md +++ b/pages/api/menu-item.md @@ -17,7 +17,7 @@ filename: /packages/material-ui/src/MenuItem/MenuItem.js | component | union: string |
 func
| 'li' | The component used for the root node. Either a string to use a DOM element or a component. | | selected | bool | false | Use to apply selected styling. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([ListItem](/api/list-item)). ## CSS API @@ -37,6 +37,7 @@ you need to use the following style sheet name: `MuiMenuItem`. ## Inheritance The properties of the [ListItem](/api/list-item) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/menu-list.md b/pages/api/menu-list.md index c4f8e8d9bf59e3..23e36a26774df1 100644 --- a/pages/api/menu-list.md +++ b/pages/api/menu-list.md @@ -14,11 +14,12 @@ filename: /packages/material-ui/src/MenuList/MenuList.js |:-----|:-----|:--------|:------------| | children | node | | MenuList contents, normally `MenuItem`s. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([List](/api/list)). ## Inheritance The properties of the [List](/api/list) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/menu.md b/pages/api/menu.md index 896d1276d38dcc..1b0a60879f9dd4 100644 --- a/pages/api/menu.md +++ b/pages/api/menu.md @@ -27,7 +27,7 @@ filename: /packages/material-ui/src/Menu/Menu.js | PopoverClasses | object | | `classes` property applied to the `Popover` element. | | transitionDuration | union: number |
 {enter?: number, exit?: number} |
 enum: 'auto'

| 'auto' | The length of the transition in `ms`, or 'auto' | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Popover](/api/popover)). ## CSS API @@ -46,6 +46,7 @@ you need to use the following style sheet name: `MuiMenu`. ## Inheritance The properties of the [Popover](/api/popover) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/mobile-stepper.md b/pages/api/mobile-stepper.md index 010f9c1a6d78fd..be61836ce538df 100644 --- a/pages/api/mobile-stepper.md +++ b/pages/api/mobile-stepper.md @@ -20,7 +20,7 @@ filename: /packages/material-ui/src/MobileStepper/MobileStepper.js | steps * | number | | The total steps. | | variant | enum: 'text' |
 'dots' |
 'progress'
| 'dots' | The type of mobile stepper to use. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Paper](/api/paper)). ## CSS API @@ -46,6 +46,7 @@ you need to use the following style sheet name: `MuiMobileStepper`. ## Inheritance The properties of the [Paper](/api/paper) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/modal.md b/pages/api/modal.md index 29295af0e50767..eb8a3d37262ef1 100644 --- a/pages/api/modal.md +++ b/pages/api/modal.md @@ -31,7 +31,7 @@ filename: /packages/material-ui/src/Modal/Modal.js | onRendered | func | | Callback fired once the children has been mounted into the `container`. It signals that the `open={true}` property took effect. | | open * | bool | | If `true`, the modal is open. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element ([Portal](/api/portal)). ## CSS API @@ -51,6 +51,7 @@ you need to use the following style sheet name: `MuiModal`. ## Inheritance The properties of the [Portal](/api/portal) component are also available. +You can take advantage of this behavior to [target nested components](/guides/api#spread). ## Demos diff --git a/pages/api/mui-theme-provider.md b/pages/api/mui-theme-provider.md index 8d0bca5d56d9ce..6f5f46a81c63c5 100644 --- a/pages/api/mui-theme-provider.md +++ b/pages/api/mui-theme-provider.md @@ -19,5 +19,5 @@ This component should preferably be used at **the root of your component tree**. | sheetsManager | object | | The sheetsManager is used to deduplicate style sheet injection in the page. It's deduplicating using the (theme, styles) couple. On the server, you should provide a new instance for each request. | | theme * | union: object |
 func
| | A theme object. | -Any other properties supplied will be [spread to the root element](/guides/api#spread). +Any other properties supplied will be [spread to](#inheritance) the root element (native element). diff --git a/pages/api/native-select.md b/pages/api/native-select.md index 9ae14afd7d27e5..7456fc8d824270 100644 --- a/pages/api/native-select.md +++ b/pages/api/native-select.md @@ -20,7 +20,7 @@ An alternative to `` with a much smaller dependency graph. | onChange | func | | Callback function fired when a menu item is selected.

**Signature:**
`function(event: object) => void`
*event:* The event source of the callback. You can pull out the new value by accessing `event.target.value`. | | value | union: string |
 number
| | The input value. | -Any other properties supplied will be [spread to](#inheritance) the root element ([Input](/api/input)). +Any other properties supplied will be spread to the root element ([Input](/api/input)). ## CSS API diff --git a/pages/api/paper.md b/pages/api/paper.md index ae63862ff10070..f1a9550ad41c70 100644 --- a/pages/api/paper.md +++ b/pages/api/paper.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/Paper/Paper.js | elevation | number | 2 | Shadow depth, corresponds to `dp` in the spec. It's accepting values between 0 and 24 inclusive. | | square | bool | false | If `true`, rounded corners are disabled. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/popover.md b/pages/api/popover.md index a2c2ed412290f2..084d09b61f70e6 100644 --- a/pages/api/popover.md +++ b/pages/api/popover.md @@ -37,7 +37,7 @@ filename: /packages/material-ui/src/Popover/Popover.js | transitionDuration | union: number |
 {enter?: number, exit?: number} |
 enum: 'auto'

| 'auto' | Set to 'auto' to automatically calculate transition time based on height. | | TransitionProps | object | | Properties applied to the `Transition` element. | -Any other properties supplied will be [spread to](#inheritance) the root element ([Modal](/api/modal)). +Any other properties supplied will be spread to the root element ([Modal](/api/modal)). ## CSS API diff --git a/pages/api/portal.md b/pages/api/portal.md index 4b1d231b73ea7b..f31ca5fc6280e0 100644 --- a/pages/api/portal.md +++ b/pages/api/portal.md @@ -19,7 +19,7 @@ and take the control of our destiny. | container | union: object |
 func
| | A node, component instance, or function that returns either. The `container` will have the portal children appended to it. By default, it uses the body of the top-level document object, so it's simply `document.body` most of the time. | | onRendered | func | | Callback fired once the children has been mounted into the `container`. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## Demos diff --git a/pages/api/radio-group.md b/pages/api/radio-group.md index 481d9c8d8d4f6d..6bd43d9317dff0 100644 --- a/pages/api/radio-group.md +++ b/pages/api/radio-group.md @@ -17,7 +17,7 @@ filename: /packages/material-ui/src/RadioGroup/RadioGroup.js | onChange | func | | Callback fired when a radio button is selected.

**Signature:**
`function(event: object, value: string) => void`
*event:* The event source of the callback. You can pull out the new value by accessing `event.target.value`.
*value:* The `value` of the selected radio button | | value | string | | Value of the selected radio button. | -Any other properties supplied will be [spread to](#inheritance) the root element ([FormGroup](/api/form-group)). +Any other properties supplied will be spread to the root element ([FormGroup](/api/form-group)). ## Inheritance diff --git a/pages/api/radio.md b/pages/api/radio.md index 958085d6461aa5..55b072dc11f314 100644 --- a/pages/api/radio.md +++ b/pages/api/radio.md @@ -26,7 +26,7 @@ filename: /packages/material-ui/src/Radio/Radio.js | type | string | | The input component property `type`. | | value | string | | The value of the component. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/root-ref.md b/pages/api/root-ref.md index ca29a9dc7baa6d..9790f95b5d7832 100644 --- a/pages/api/root-ref.md +++ b/pages/api/root-ref.md @@ -17,5 +17,5 @@ It's higly inspired by https://github.com/facebook/react/issues/11401#issuecomme | children * | element | | | | rootRef * | func | | | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). diff --git a/pages/api/select.md b/pages/api/select.md index 9aa846bc74e2c9..ec946f5ee5a4e3 100644 --- a/pages/api/select.md +++ b/pages/api/select.md @@ -30,7 +30,7 @@ filename: /packages/material-ui/src/Select/Select.js | SelectDisplayProps | object | | Properties applied to the clickable div element. | | value | union: string |
 number |
 arrayOf
| | The input value. This property is required when the `native` property is `false` (default). | -Any other properties supplied will be [spread to](#inheritance) the root element ([Input](/api/input)). +Any other properties supplied will be spread to the root element ([Input](/api/input)). ## CSS API diff --git a/pages/api/slide.md b/pages/api/slide.md index 7fe53943d26b0d..48c78f9c7c59f5 100644 --- a/pages/api/slide.md +++ b/pages/api/slide.md @@ -18,7 +18,7 @@ It uses [react-transition-group](https://github.com/reactjs/react-transition-gro | in | bool | | If `true`, show the component; triggers the enter or exit animation. | | timeout | union: number |
 {enter?: number, exit?: number}
| { enter: duration.enteringScreen, exit: duration.leavingScreen,} | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | -Any other properties supplied will be [spread to](#inheritance) the root element ([Transition](https://reactcommunity.org/react-transition-group/#Transition)). +Any other properties supplied will be spread to the root element ([Transition](https://reactcommunity.org/react-transition-group/#Transition)). ## Inheritance diff --git a/pages/api/snackbar-content.md b/pages/api/snackbar-content.md index 6f63b79caa1a1f..11f0f21f467727 100644 --- a/pages/api/snackbar-content.md +++ b/pages/api/snackbar-content.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/SnackbarContent/SnackbarContent.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | message | node | | The message to display. | -Any other properties supplied will be [spread to](#inheritance) the root element ([Paper](/api/paper)). +Any other properties supplied will be spread to the root element ([Paper](/api/paper)). ## CSS API diff --git a/pages/api/snackbar.md b/pages/api/snackbar.md index 62d6c7ca1223ee..12d7ef0a700bc4 100644 --- a/pages/api/snackbar.md +++ b/pages/api/snackbar.md @@ -34,7 +34,7 @@ filename: /packages/material-ui/src/Snackbar/Snackbar.js | transitionDuration | union: number |
 {enter?: number, exit?: number}
| { enter: duration.enteringScreen, exit: duration.leavingScreen,} | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | | TransitionProps | object | | Properties applied to the `Transition` element. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/step-button.md b/pages/api/step-button.md index 48f451e2ccd3c4..605d301877d287 100644 --- a/pages/api/step-button.md +++ b/pages/api/step-button.md @@ -17,7 +17,7 @@ filename: /packages/material-ui/src/StepButton/StepButton.js | icon | node | | The icon displayed by the step label. | | optional | node | | The optional node to display. | -Any other properties supplied will be [spread to](#inheritance) the root element ([ButtonBase](/api/button-base)). +Any other properties supplied will be spread to the root element ([ButtonBase](/api/button-base)). ## CSS API diff --git a/pages/api/step-connector.md b/pages/api/step-connector.md index 569ae092d889a7..f54175fdb7ea51 100644 --- a/pages/api/step-connector.md +++ b/pages/api/step-connector.md @@ -14,7 +14,7 @@ filename: /packages/material-ui/src/StepConnector/StepConnector.js |:-----|:-----|:--------|:------------| | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/step-content.md b/pages/api/step-content.md index c35bb7cdc1af02..f1cf3a47a5781b 100644 --- a/pages/api/step-content.md +++ b/pages/api/step-content.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/StepContent/StepContent.js | transitionDuration | union: number |
 {enter?: number, exit?: number} |
 enum: 'auto'

| 'auto' | Adjust the duration of the content expand transition. Passed as a property to the transition component.
Set to 'auto' to automatically calculate transition time based on height. | | TransitionProps | object | | Properties applied to the `Transition` element. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/step-icon.md b/pages/api/step-icon.md index 8b80888ff378c4..b5098e6b9d5ad1 100644 --- a/pages/api/step-icon.md +++ b/pages/api/step-icon.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/StepIcon/StepIcon.js | error | bool | false | Mark the step as failed. | | icon * | node | | The icon displayed by the step label. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/step-label.md b/pages/api/step-label.md index 6fbd1dcd2eb6ec..8718aee9658daf 100644 --- a/pages/api/step-label.md +++ b/pages/api/step-label.md @@ -20,7 +20,7 @@ filename: /packages/material-ui/src/StepLabel/StepLabel.js | optional | node | | The optional node to display. | | StepIconProps | object | | Properties applied to the `StepIcon` element. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/step.md b/pages/api/step.md index 2087137c4a4732..e11001207cd73c 100644 --- a/pages/api/step.md +++ b/pages/api/step.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/Step/Step.js | completed | bool | false | Mark the step as completed. Is passed to child components. | | disabled | bool | false | Mark the step as disabled, will also disable the button if `StepButton` is a child of `Step`. Is passed to child components. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/stepper.md b/pages/api/stepper.md index 7d1c94400eb708..e93e46a942ed7e 100644 --- a/pages/api/stepper.md +++ b/pages/api/stepper.md @@ -20,7 +20,7 @@ filename: /packages/material-ui/src/Stepper/Stepper.js | nonLinear | bool | false | If set the `Stepper` will not assist in controlling steps for linear flow. | | orientation | enum: 'horizontal' |
 'vertical'
| 'horizontal' | The stepper orientation (layout flow direction). | -Any other properties supplied will be [spread to](#inheritance) the root element ([Paper](/api/paper)). +Any other properties supplied will be spread to the root element ([Paper](/api/paper)). ## CSS API diff --git a/pages/api/svg-icon.md b/pages/api/svg-icon.md index 7de8b4db3eee1f..c1712aa8e45644 100644 --- a/pages/api/svg-icon.md +++ b/pages/api/svg-icon.md @@ -19,7 +19,7 @@ filename: /packages/material-ui/src/SvgIcon/SvgIcon.js | titleAccess | string | | Provides a human-readable title for the element that contains it. https://www.w3.org/TR/SVG-access/#Equivalent | | viewBox | string | '0 0 24 24' | Allows you to redefine what the coordinates without units mean inside an SVG element. For example, if the SVG element is 500 (width) by 200 (height), and you pass viewBox="0 0 50 20", this means that the coordinates inside the SVG will go from the top left corner (0,0) to bottom right (50,20) and each unit will be worth 10px. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/swipeable-drawer.md b/pages/api/swipeable-drawer.md index 59b875a88f28ed..a2f9bc18b1ddc4 100644 --- a/pages/api/swipeable-drawer.md +++ b/pages/api/swipeable-drawer.md @@ -21,7 +21,7 @@ filename: /packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js | swipeAreaWidth | number | 20 | The width of the left most (or right most) area in pixels where the drawer can be swiped open from. | | transitionDuration | union: number |
 {enter?: number, exit?: number}
| { enter: duration.enteringScreen, exit: duration.leavingScreen } | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | -Any other properties supplied will be [spread to](#inheritance) the root element ([Drawer](/api/drawer)). +Any other properties supplied will be spread to the root element ([Drawer](/api/drawer)). ## Inheritance diff --git a/pages/api/switch-base.md b/pages/api/switch-base.md index f760cb59b83867..701afc21d5308c 100644 --- a/pages/api/switch-base.md +++ b/pages/api/switch-base.md @@ -28,7 +28,7 @@ filename: /packages/material-ui/src/internal/SwitchBase.js | type | string | 'checkbox' | The input component property `type`. | | value | string | | The value of the component. | -Any other properties supplied will be [spread to](#inheritance) the root element ([IconButton](/api/icon-button)). +Any other properties supplied will be spread to the root element ([IconButton](/api/icon-button)). ## CSS API diff --git a/pages/api/switch.md b/pages/api/switch.md index 1ed567d9c99aa8..8ef08da408a193 100644 --- a/pages/api/switch.md +++ b/pages/api/switch.md @@ -26,7 +26,7 @@ filename: /packages/material-ui/src/Switch/Switch.js | type | string | | The input component property `type`. | | value | string | | The value of the component. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/tab.md b/pages/api/tab.md index 1855e21c920a3d..7d8d4250a71dd1 100644 --- a/pages/api/tab.md +++ b/pages/api/tab.md @@ -18,7 +18,7 @@ filename: /packages/material-ui/src/Tab/Tab.js | label | node | | The label element. | | value | any | | You can provide your own value. Otherwise, we fallback to the child position index. | -Any other properties supplied will be [spread to](#inheritance) the root element ([ButtonBase](/api/button-base)). +Any other properties supplied will be spread to the root element ([ButtonBase](/api/button-base)). ## CSS API diff --git a/pages/api/table-body.md b/pages/api/table-body.md index e6462b55e3d60f..84567d8af3405a 100644 --- a/pages/api/table-body.md +++ b/pages/api/table-body.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/TableBody/TableBody.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | component | union: string |
 func
| 'tbody' | The component used for the root node. Either a string to use a DOM element or a component. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## Demos diff --git a/pages/api/table-cell.md b/pages/api/table-cell.md index 432cd7e98dbd1c..0bc3c9d8909ff1 100644 --- a/pages/api/table-cell.md +++ b/pages/api/table-cell.md @@ -21,7 +21,7 @@ filename: /packages/material-ui/src/TableCell/TableCell.js | sortDirection | enum: 'asc' |
 'desc' |
 false
| | Set aria-sort direction. | | variant | enum: 'head' |
 'body' |
 'footer'
| | Specify the cell type. By default, the TableHead, TableBody or TableFooter parent component set the value. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/table-footer.md b/pages/api/table-footer.md index 5f732411688012..43dde49563f152 100644 --- a/pages/api/table-footer.md +++ b/pages/api/table-footer.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/TableFooter/TableFooter.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | component | union: string |
 func
| 'tfoot' | The component used for the root node. Either a string to use a DOM element or a component. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## Demos diff --git a/pages/api/table-head.md b/pages/api/table-head.md index dfe1ea9d7cfae3..3ad155e8742ad9 100644 --- a/pages/api/table-head.md +++ b/pages/api/table-head.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/TableHead/TableHead.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | component | union: string |
 func
| 'thead' | The component used for the root node. Either a string to use a DOM element or a component. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## Demos diff --git a/pages/api/table-pagination.md b/pages/api/table-pagination.md index 6e85a611785426..940efd3c438c8e 100644 --- a/pages/api/table-pagination.md +++ b/pages/api/table-pagination.md @@ -27,7 +27,7 @@ A `TableCell` based component for placing inside `TableFooter` for pagination. | rowsPerPageOptions | array | [5, 10, 25] | Customizes the options of the rows per page select field. If less than two options are available, no select field will be displayed. | | SelectProps | object | | Properties applied to the rows per page `Select` element. | -Any other properties supplied will be [spread to](#inheritance) the root element ([TableCell](/api/table-cell)). +Any other properties supplied will be spread to the root element ([TableCell](/api/table-cell)). ## CSS API diff --git a/pages/api/table-row.md b/pages/api/table-row.md index ae3a47a2538b93..144a44ea92b777 100644 --- a/pages/api/table-row.md +++ b/pages/api/table-row.md @@ -19,7 +19,7 @@ based on the material table element parent (head, body, etc). | hover | bool | false | If `true`, the table row will shade on hover. | | selected | bool | false | If `true`, the table row will have the selected shading. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/table-sort-label.md b/pages/api/table-sort-label.md index 4e0e38306d5e41..db30e8187af20a 100644 --- a/pages/api/table-sort-label.md +++ b/pages/api/table-sort-label.md @@ -17,7 +17,7 @@ A button based label for placing inside `TableCell` for column sorting. | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | direction | enum: 'asc' |
 'desc'
| 'desc' | The current sort direction. | -Any other properties supplied will be [spread to](#inheritance) the root element ([ButtonBase](/api/button-base)). +Any other properties supplied will be spread to the root element ([ButtonBase](/api/button-base)). ## CSS API diff --git a/pages/api/table.md b/pages/api/table.md index 2793e8f4c75461..af39490843909e 100644 --- a/pages/api/table.md +++ b/pages/api/table.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/Table/Table.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | component | union: string |
 func
| 'table' | The component used for the root node. Either a string to use a DOM element or a component. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/tabs.md b/pages/api/tabs.md index 619cb7baad159c..1736bc5d9da72c 100644 --- a/pages/api/tabs.md +++ b/pages/api/tabs.md @@ -26,7 +26,7 @@ filename: /packages/material-ui/src/Tabs/Tabs.js | textColor | enum: 'secondary' |
 'primary' |
 'inherit'
| 'inherit' | Determines the color of the `Tab`. | | value | any | | The value of the currently selected `Tab`. If you don't want any selected `Tab`, you can set this property to `false`. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/text-field.md b/pages/api/text-field.md index a63f9816428b91..3a005443040374 100644 --- a/pages/api/text-field.md +++ b/pages/api/text-field.md @@ -64,7 +64,7 @@ For advanced cases, please look at the source of TextField by clicking on the | type | string | | Type attribute of the `Input` element. It should be a valid HTML5 input type. | | value | union: string |
 number |
 arrayOf
| | The value of the `Input` element, required for a controlled component. | -Any other properties supplied will be [spread to](#inheritance) the root element ([FormControl](/api/form-control)). +Any other properties supplied will be spread to the root element ([FormControl](/api/form-control)). ## Inheritance diff --git a/pages/api/toolbar.md b/pages/api/toolbar.md index 112de146356cf8..4484e1230a0913 100644 --- a/pages/api/toolbar.md +++ b/pages/api/toolbar.md @@ -16,7 +16,7 @@ filename: /packages/material-ui/src/Toolbar/Toolbar.js | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | | disableGutters | bool | false | If `true`, disables gutter padding. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/tooltip.md b/pages/api/tooltip.md index 9e12fcc5ff6fb8..735b6fae1dc9a8 100644 --- a/pages/api/tooltip.md +++ b/pages/api/tooltip.md @@ -29,7 +29,7 @@ filename: /packages/material-ui/src/Tooltip/Tooltip.js | PopperProps | object | | Properties applied to the `Popper` element. | | title * | node | | Tooltip title. Zero-length titles string are never displayed. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/touch-ripple.md b/pages/api/touch-ripple.md index 6b99272bf799a0..366d11d54a02e6 100644 --- a/pages/api/touch-ripple.md +++ b/pages/api/touch-ripple.md @@ -15,7 +15,7 @@ filename: /packages/material-ui/src/ButtonBase/TouchRipple.js | center | bool | false | If `true`, the ripple starts at the center of the component rather than at the point of interaction. | | classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/typography.md b/pages/api/typography.md index 31f4b51acfc081..647448edbb6614 100644 --- a/pages/api/typography.md +++ b/pages/api/typography.md @@ -23,7 +23,7 @@ filename: /packages/material-ui/src/Typography/Typography.js | paragraph | bool | false | If `true`, the text will have a bottom margin. | | variant | enum: 'display4', 'display3', 'display2', 'display1', 'headline', 'title', 'subheading', 'body2', 'body1', 'caption', 'button'
| 'body1' | Applies the theme typography styles. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## CSS API diff --git a/pages/api/zoom.md b/pages/api/zoom.md index 3e51441185b422..fad88244ccf192 100644 --- a/pages/api/zoom.md +++ b/pages/api/zoom.md @@ -18,7 +18,7 @@ It uses [react-transition-group](https://github.com/reactjs/react-transition-gro | in | bool | | If `true`, the component will transition in. | | timeout | union: number |
 {enter?: number, exit?: number}
| { enter: duration.enteringScreen, exit: duration.leavingScreen,} | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | -Any other properties supplied will be [spread to](#inheritance) the root element ([Transition](https://reactcommunity.org/react-transition-group/#Transition)). +Any other properties supplied will be spread to the root element ([Transition](https://reactcommunity.org/react-transition-group/#Transition)). ## Inheritance diff --git a/pages/lab/api/slider.md b/pages/lab/api/slider.md index a8b1d0729e5c1e..24de5df27361f9 100644 --- a/pages/lab/api/slider.md +++ b/pages/lab/api/slider.md @@ -24,7 +24,7 @@ filename: /packages/material-ui-lab/src/Slider/Slider.js | value | number | 50 | The value of the slider. | | vertical | bool | | If `true`, the slider will be vertical. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## Demos diff --git a/pages/lab/api/speed-dial-action.md b/pages/lab/api/speed-dial-action.md index 77e2c79b2e5e2f..c53704e56b094b 100644 --- a/pages/lab/api/speed-dial-action.md +++ b/pages/lab/api/speed-dial-action.md @@ -18,7 +18,7 @@ filename: /packages/material-ui-lab/src/SpeedDialAction/SpeedDialAction.js | icon * | node | | The Icon to display in the SpeedDial Floating Action Button. | | tooltipTitle | node | | Label to display in the tooltip. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## Demos diff --git a/pages/lab/api/speed-dial-icon.md b/pages/lab/api/speed-dial-icon.md index 98525e73c3a906..a0639250a00f58 100644 --- a/pages/lab/api/speed-dial-icon.md +++ b/pages/lab/api/speed-dial-icon.md @@ -16,7 +16,7 @@ filename: /packages/material-ui-lab/src/SpeedDialIcon/SpeedDialIcon.js | icon | node | | The icon to display in the SpeedDial Floating Action Button. | | openIcon | node | | The icon to display in the SpeedDial Floating Action Button when the SpeedDial is open. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## Demos diff --git a/pages/lab/api/speed-dial.md b/pages/lab/api/speed-dial.md index b5a40126e29cdd..1839f57f5c9657 100644 --- a/pages/lab/api/speed-dial.md +++ b/pages/lab/api/speed-dial.md @@ -25,7 +25,7 @@ filename: /packages/material-ui-lab/src/SpeedDial/SpeedDial.js | transitionDuration | union: number |
 {enter?: number, exit?: number}
| { enter: duration.enteringScreen, exit: duration.leavingScreen,} | The duration for the transition, in milliseconds. You may specify a single timeout for all transitions, or individually with an object. | | TransitionProps | object | | Properties applied to the `Transition` element. | -Any other properties supplied will be [spread to](#inheritance) the root element (native element). +Any other properties supplied will be spread to the root element (native element). ## Demos From 10e7e4c6371f91fa3d8d014cb7d0b8fb4c1a9163 Mon Sep 17 00:00:00 2001 From: Maik Marschner Date: Sun, 27 May 2018 11:53:57 +0200 Subject: [PATCH 009/182] [docs] Update Wertarbyte components link (#11603) --- .../pages/discover-more/related-projects/related-projects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/pages/discover-more/related-projects/related-projects.md b/docs/src/pages/discover-more/related-projects/related-projects.md index 438fccdcd6851f..80db3395e0777a 100644 --- a/docs/src/pages/discover-more/related-projects/related-projects.md +++ b/docs/src/pages/discover-more/related-projects/related-projects.md @@ -13,7 +13,7 @@ Feel free to submit a pull-request to add more projects; we will accept them if - [material-ui-time-picker](https://github.com/TeamWertarbyte/material-ui-time-picker) A TimePicker for Material-UI. - [mui-datatables](https://github.com/gregnb/mui-datatables) Responsive data tables for Material-UI with filtering, sorting, search and more. - [mui-downshift](https://github.com/techniq/mui-downshift) Thin layer over paypal's downshift to use Material-UI visual components. -- [Wertarbyte](https://next.mui.wertarbyte.com/) Wertarbyte are using Material-UI for many of their projects. This is a collection of complementary components they have built. +- [Wertarbyte](https://mui.wertarbyte.com/) Wertarbyte are using Material-UI for many of their projects. This is a collection of complementary components they have built. ## Complementary Projects From 9c9618cbd134cb48c22f64dd49f3b7007b14a0b1 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sun, 27 May 2018 13:45:13 +0200 Subject: [PATCH 010/182] [docs] Add a changelog page (#11604) * [docs] Add a changelog page * in --- CHANGELOG.md | 7 +++++-- docs/src/modules/components/withRoot.js | 19 +++++++++++-------- .../discover-more/changelog/changelog.md | 3 +++ pages/discover-more/changelog.js | 10 ++++++++++ 4 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 docs/src/pages/discover-more/changelog/changelog.md create mode 100644 pages/discover-more/changelog.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 19ad5d474889ff..0dfdffe4eb119d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ -## HEAD +Material-UI strictly follows [Semantic Versioning 2.0.0](http://semver.org/). -Changes. Changes everywhere! +#### Release Schedule + +- Weekly release: patch or minor version at the end of every week for routine bugfix or new features (anytime for urgent bugfix). +- Major version release is not included in this schedule for breaking change and new features. ## 1.1.0 ###### *May 26, 2018* diff --git a/docs/src/modules/components/withRoot.js b/docs/src/modules/components/withRoot.js index 0281cc57908f83..4ea57002a13b29 100644 --- a/docs/src/modules/components/withRoot.js +++ b/docs/src/modules/components/withRoot.js @@ -199,26 +199,29 @@ const pages = [ pathname: '/discover-more/vision', }, { - pathname: '/discover-more/roadmap', + pathname: '/discover-more/backers', + title: 'Sponsors & Backers', }, { - pathname: '/discover-more/governance', + pathname: '/discover-more/community', }, { - pathname: '/discover-more/team', + pathname: '/discover-more/related-projects', }, { - pathname: '/discover-more/backers', - title: 'Sponsors & Backers', + pathname: '/discover-more/showcase', }, { - pathname: '/discover-more/community', + pathname: '/discover-more/roadmap', }, { - pathname: '/discover-more/showcase', + pathname: '/discover-more/changelog', }, { - pathname: '/discover-more/related-projects', + pathname: '/discover-more/team', + }, + { + pathname: '/discover-more/governance', }, ], }, diff --git a/docs/src/pages/discover-more/changelog/changelog.md b/docs/src/pages/discover-more/changelog/changelog.md new file mode 100644 index 00000000000000..cd0cd3bf8395ce --- /dev/null +++ b/docs/src/pages/discover-more/changelog/changelog.md @@ -0,0 +1,3 @@ +# Changelog + +All notable changes are described in the [CHANGELOG.md file](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md). diff --git a/pages/discover-more/changelog.js b/pages/discover-more/changelog.js new file mode 100644 index 00000000000000..6d896545867952 --- /dev/null +++ b/pages/discover-more/changelog.js @@ -0,0 +1,10 @@ +import React from 'react'; +import withRoot from 'docs/src/modules/components/withRoot'; +import MarkdownDocs from 'docs/src/modules/components/MarkdownDocs'; +import markdown from 'docs/src/pages/discover-more/changelog/changelog.md'; + +function Page() { + return ; +} + +export default withRoot(Page); From 7fd6e34562e8e3da0b1e3d2c892fcb841129d5fe Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sun, 27 May 2018 14:56:21 +0200 Subject: [PATCH 011/182] [docs] Keep the current version into account (#11595) * [docs] Keep the current version into account * take matt feedback --- docs/src/pages/versions/StableVersions.js | 51 ++++++++++++++--------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/docs/src/pages/versions/StableVersions.js b/docs/src/pages/versions/StableVersions.js index d27a81e417e085..016a092596fa2e 100644 --- a/docs/src/pages/versions/StableVersions.js +++ b/docs/src/pages/versions/StableVersions.js @@ -1,6 +1,8 @@ import 'isomorphic-fetch'; import React from 'react'; import PropTypes from 'prop-types'; +import orderBy from 'lodash/orderBy'; +import sortedUniqBy from 'lodash/sortedUniqBy'; import { withStyles } from '@material-ui/core/styles'; import Table from '@material-ui/core/Table'; import TableBody from '@material-ui/core/TableBody'; @@ -14,6 +16,7 @@ const GITHUB_RELEASE_BASE_URL = 'https://github.com/mui-org/material-ui/releases const styles = { root: { + minHeight: 50, width: '100%', }, }; @@ -43,42 +46,52 @@ async function getBranches() { class StableVersions extends React.Component { state = { - versions: [], + docs: [], }; componentDidMount = async () => { const branches = await getBranches(); - const versions = branches.map(n => n.name); - versions.reverse().pop(); // most recent first & remove 'latest' - versions.push('v0.20.1'); - - this.setState({ versions }); + let docs = branches.map(n => n.name); + docs = docs.filter(version => version !== 'latest'); + docs = docs.map(version => ({ + version, + // Replace dot with dashes for Netlify branch subdomains + url: `https://${version.replace(/\./g, '-')}.material-ui.com`, + })); + // Current version. + docs.push({ + version: `v${process.env.LIB_VERSION}`, + url: document.location.origin, + }); + // Legacy documentation. + docs.push({ + version: 'v0.20.1', + url: 'https://v0.material-ui.com', + }); + docs = orderBy(docs, 'version', 'desc'); + docs = sortedUniqBy(docs, 'version'); + // The latest version is always using the naked domain. + docs[0].url = 'https://material-ui.com'; + this.setState({ docs }); }; render() { const { classes } = this.props; - const { versions } = this.state; + const { docs } = this.state; return ( - {versions.map((version, index) => { - // Replace dot with dashes for Netlify branch subdomains - let url = `https://${version.replace(/\./g, '-')}.material-ui.com`; - if (index === 0) { - url = 'https://material-ui.com'; - } else if (version.startsWith('v0')) { - url = 'https://v0.material-ui.com'; - } + {docs.map(doc => { return ( - + - {version} + {doc.version} } + component={props2 => } > Documentation @@ -89,7 +102,7 @@ class StableVersions extends React.Component { )} > From b34a1d7b9065bb9308ce39e636cf1f1011734f72 Mon Sep 17 00:00:00 2001 From: Mehmet Baran Date: Sun, 27 May 2018 16:54:31 +0300 Subject: [PATCH 012/182] [Snackbar] Add customization example (#11597) * [Snackbar] Add customization example * new look --- .../demos/snackbars/CustomizedSnackbars.js | 164 ++++++++++++++++++ docs/src/pages/demos/snackbars/snackbars.md | 8 + .../pages/demos/text-fields/text-fields.md | 1 - pages/demos/snackbars.js | 7 + 4 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 docs/src/pages/demos/snackbars/CustomizedSnackbars.js diff --git a/docs/src/pages/demos/snackbars/CustomizedSnackbars.js b/docs/src/pages/demos/snackbars/CustomizedSnackbars.js new file mode 100644 index 00000000000000..d11a6434bcf27b --- /dev/null +++ b/docs/src/pages/demos/snackbars/CustomizedSnackbars.js @@ -0,0 +1,164 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import Button from '@material-ui/core/Button'; +import CheckIcon from '@material-ui/icons/Check'; +import ErrorOutlineIcon from '@material-ui/icons/ErrorOutline'; +import InfoIcon from '@material-ui/icons/InfoOutline'; +import CloseIcon from '@material-ui/icons/Close'; +import green from '@material-ui/core/colors/green'; +import amber from '@material-ui/core/colors/amber'; +import IconButton from '@material-ui/core/IconButton'; +import Snackbar from '@material-ui/core/Snackbar'; +import SnackbarContent from '@material-ui/core/SnackbarContent'; +import WarningIcon from '@material-ui/icons/Warning'; +import { withStyles } from '@material-ui/core/styles'; + +const variantIcon = { + success: CheckIcon, + warning: WarningIcon, + error: ErrorOutlineIcon, + info: InfoIcon, +}; + +const styles1 = theme => ({ + success: { + backgroundColor: green[600], + }, + error: { + backgroundColor: theme.palette.error.dark, + }, + info: { + backgroundColor: theme.palette.primary.dark, + }, + warning: { + backgroundColor: amber[700], + }, + icon: { + fontSize: 20, + }, + iconVariant: { + marginRight: theme.spacing.unit, + }, + message: { + display: 'flex', + alignItems: 'center', + }, +}); + +function MySnackbarContent(props) { + const { classes, className, message, onClose, variant, ...other } = props; + const Icon = variantIcon[variant]; + + return ( + + + {message} + + } + action={[ + + + , + ]} + {...other} + /> + ); +} + +MySnackbarContent.propTypes = { + classes: PropTypes.object.isRequired, + className: PropTypes.string, + message: PropTypes.node, + onClose: PropTypes.func, + variant: PropTypes.oneOf(['success', 'warning', 'error', 'info']).isRequired, +}; + +const MySnackbarContentWrapper = withStyles(styles1)(MySnackbarContent); + +const styles2 = theme => ({ + margin: { + margin: theme.spacing.unit, + }, +}); + +class CustomizedSnackbars extends React.Component { + state = { + open: false, + }; + + handleClick = () => { + this.setState({ open: true }); + }; + + handleClose = (event, reason) => { + if (reason === 'clickaway') { + return; + } + + this.setState({ open: false }); + }; + + render() { + const { classes } = this.props; + + return ( +
+ + + + + + + + +
+ ); + } +} + +CustomizedSnackbars.propTypes = { + classes: PropTypes.object.isRequired, +}; + +export default withStyles(styles2)(CustomizedSnackbars); diff --git a/docs/src/pages/demos/snackbars/snackbars.md b/docs/src/pages/demos/snackbars/snackbars.md index 33a240b8fe4c44..b4ff5e243aabf2 100644 --- a/docs/src/pages/demos/snackbars/snackbars.md +++ b/docs/src/pages/demos/snackbars/snackbars.md @@ -54,3 +54,11 @@ Move the floating action button vertically to accommodate the snackbar height. Per [Google's guidelines](https://material.io/archive/guidelines/components/snackbars-toasts.html#snackbars-toasts-usage), when a second snackbar is triggered while the first is displayed, the first should start the contraction motion downwards before the second one animates upwards. {{"demo": "pages/demos/snackbars/ConsecutiveSnackbars.js"}} + +## Customized Snackbars + +If you have been reading the [overrides documentation page](/customization/overrides) +but you are not confident jumping in, +here are examples of how you can change the look of a Snackbar. + +{{"demo": "pages/demos/snackbars/CustomizedSnackbars.js"}} diff --git a/docs/src/pages/demos/text-fields/text-fields.md b/docs/src/pages/demos/text-fields/text-fields.md index 4762518fa82998..9a69a0debad4ee 100644 --- a/docs/src/pages/demos/text-fields/text-fields.md +++ b/docs/src/pages/demos/text-fields/text-fields.md @@ -49,7 +49,6 @@ You have to provide a custom implementation of the `` element with the `i The following demo uses the [react-text-mask](https://github.com/text-mask/text-mask) and [react-number-format](https://github.com/s-yadav/react-number-format) libraries. - {{"demo": "pages/demos/text-fields/FormattedInputs.js"}} ## Customized inputs diff --git a/pages/demos/snackbars.js b/pages/demos/snackbars.js index 75ed798dee5115..25970cccb653c7 100644 --- a/pages/demos/snackbars.js +++ b/pages/demos/snackbars.js @@ -55,6 +55,13 @@ module.exports = require('fs') raw: preval` module.exports = require('fs') .readFileSync(require.resolve('docs/src/pages/demos/snackbars/ConsecutiveSnackbars'), 'utf8') +`, + }, + 'pages/demos/snackbars/CustomizedSnackbars.js': { + js: require('docs/src/pages/demos/snackbars/CustomizedSnackbars').default, + raw: preval` +module.exports = require('fs') + .readFileSync(require.resolve('docs/src/pages/demos/snackbars/CustomizedSnackbars'), 'utf8') `, }, }} From 0103173a9463cfa1050b8cc484b9fd84b5b3f3af Mon Sep 17 00:00:00 2001 From: Matt Brookes Date: Sun, 27 May 2018 14:58:52 +0100 Subject: [PATCH 013/182] [Slider] Misc fixes towards standard MUI patterns (#11605) --- packages/material-ui-lab/src/Slider/Slider.js | 25 ++++++++++++------- pages/lab/api/slider.md | 5 ++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/material-ui-lab/src/Slider/Slider.js b/packages/material-ui-lab/src/Slider/Slider.js index 90c876a9212b86..5b5ad9d7a3e4e8 100644 --- a/packages/material-ui-lab/src/Slider/Slider.js +++ b/packages/material-ui-lab/src/Slider/Slider.js @@ -29,8 +29,8 @@ export const style = theme => { }; return { - /* Styles for wrapper container */ - container: { + // /* Styles for root node */ + root: { position: 'relative', width: '100%', margin: '10px 0', @@ -382,13 +382,14 @@ class Slider extends React.Component { const { component: Component, classes, + className: classNameProp, value, min, max, vertical, reverse, disabled, - ...otherProps + ...other } = this.props; const percent = clamp((value - min) * 100 / (max - min)); @@ -400,10 +401,11 @@ class Slider extends React.Component { [classes.activated]: !disabled && currentState === 'activated', }; - const containerClasses = classNames(classes.container, { + const rootClasses = classNames(classes.root, { [classes.vertical]: vertical, [classes.reverse]: reverse, [classes.disabled]: disabled, + classNameProp, }); const trackBeforeClasses = classNames(classes.track, classes.trackBefore, commonClasses, { @@ -427,7 +429,7 @@ class Slider extends React.Component { return ( { this.container = findDOMNode(node); }} - {...otherProps} + {...other} >
classes | object | | Useful to extend the style applied to components. | +| classes | object | | Override or extend the styles applied to the component. See [CSS API](#css-api) below for more details. | +| component | union: string |
 func
| 'div' | The component used for the root node. Either a string to use a DOM element or a component. | | disabled | bool | | If `true`, the slider will be disabled. | | max | number | 100 | The maximum allowed value of the slider. Should not be equal to min. | | min | number | 0 | The minimum allowed value of the slider. Should not be equal to max. | @@ -21,7 +22,7 @@ filename: /packages/material-ui-lab/src/Slider/Slider.js | onDragStart | func | | Callback function that is fired when the slider has begun to move. | | reverse | bool | | If `true`, the slider will be reversed. | | step | number | | The granularity the slider can step through values. | -| value | number | 50 | The value of the slider. | +| value * | number | | The value of the slider. | | vertical | bool | | If `true`, the slider will be vertical. | Any other properties supplied will be spread to the root element (native element). From 999d06fd8444213bb0f8aae279c4c20db363b45d Mon Sep 17 00:00:00 2001 From: Tom Crockett Date: Sun, 27 May 2018 13:31:34 -0700 Subject: [PATCH 014/182] Depend directly on CSSType (#11608) --- packages/material-ui/package.json | 1 + yarn.lock | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/material-ui/package.json b/packages/material-ui/package.json index 5432489218e4ad..b4a6aec3d3fc76 100644 --- a/packages/material-ui/package.json +++ b/packages/material-ui/package.json @@ -39,6 +39,7 @@ "@types/react-transition-group": "^2.0.8", "brcast": "^3.0.1", "classnames": "^2.2.5", + "csstype": "^2.5.2", "debounce": "^1.1.0", "deepmerge": "^2.0.1", "dom-helpers": "^3.2.1", diff --git a/yarn.lock b/yarn.lock index 4a7a5e020ce4e8..19375bf7572e01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3602,7 +3602,7 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": dependencies: cssom "0.3.x" -csstype@^2.0.0, csstype@^2.2.0: +csstype@^2.0.0, csstype@^2.2.0, csstype@^2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.2.tgz#4534308476ceede8fbe148b9b99f9baf1c80fa06" From d7bf410dd0766d024c4c5f5f042139f795b78899 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Mon, 28 May 2018 21:38:33 +0200 Subject: [PATCH 015/182] [Menu] Fix a regression on Edge (#11614) --- packages/material-ui/src/MenuList/MenuList.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/material-ui/src/MenuList/MenuList.js b/packages/material-ui/src/MenuList/MenuList.js index fb979b9896311b..edc1167152a77a 100644 --- a/packages/material-ui/src/MenuList/MenuList.js +++ b/packages/material-ui/src/MenuList/MenuList.js @@ -106,7 +106,12 @@ class MenuList extends React.Component { resetTabIndex() { const list = ReactDOM.findDOMNode(this.list); const currentFocus = activeElement(ownerDocument(list)); - const items = [...list.children]; + + const items = []; + for (let i = 0; i < list.children.length; i += 1) { + items.push(list.children[i]); + } + const currentFocusIndex = items.indexOf(currentFocus); if (currentFocusIndex !== -1) { From 51e39fae65b5fa595e6de572ac3337252136f1c7 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Mon, 28 May 2018 22:02:22 +0200 Subject: [PATCH 016/182] [docs] Add NativeSelect reference --- docs/src/pages/demos/selects/selects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/pages/demos/selects/selects.md b/docs/src/pages/demos/selects/selects.md index ac03cb27bcbcb2..99eedaadf8609d 100644 --- a/docs/src/pages/demos/selects/selects.md +++ b/docs/src/pages/demos/selects/selects.md @@ -1,5 +1,5 @@ --- -components: Select +components: Select, NativeSelect --- # Selects From cb9bfe808fe09e98c8a63ccb15da4eafe77d991a Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Mon, 28 May 2018 22:59:13 +0200 Subject: [PATCH 017/182] [docs] Add NativeSelect reference --- pages/api/native-select.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pages/api/native-select.md b/pages/api/native-select.md index 20cb10980b4c9c..2da99568fb692e 100644 --- a/pages/api/native-select.md +++ b/pages/api/native-select.md @@ -45,3 +45,7 @@ you need to use the following style sheet name: `MuiNativeSelect`. The properties of the [Input](/api/input) component are also available. You can take advantage of this behavior to [target nested components](/guides/api#spread). +## Demos + +- [Selects](/demos/selects) + From 110b6cd40bf8fb9a17898f702259a177f44be2e6 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Tue, 29 May 2018 00:44:06 +0200 Subject: [PATCH 018/182] [core] Upgrade dependencies (#11616) --- .size-limit.js | 18 +- docs/src/modules/components/AppSearch.js | 6 +- docs/src/modules/components/Link.js | 5 +- docs/src/modules/redux/initRedux.js | 5 +- docs/src/pages/layout/css-in-js/MediaQuery.js | 5 +- .../src/pages/layout/hidden/BreakpointDown.js | 5 +- .../src/pages/layout/hidden/BreakpointOnly.js | 5 +- docs/src/pages/layout/hidden/BreakpointUp.js | 5 +- .../pages/layout/hidden/GridIntegration.js | 5 +- .../src/pages/index.tsx | 4 +- package.json | 12 +- .../src/v1.0.0/import-path.test/actual.js | 14 +- packages/material-ui-lab/src/Slider/Slider.js | 4 +- packages/material-ui/.size-snapshot.json | 27 +- packages/material-ui/package.json | 2 +- packages/material-ui/scripts/rollup.config.js | 2 +- .../src/CircularProgress/CircularProgress.js | 2 +- packages/material-ui/src/Grid/Grid.js | 2 +- packages/material-ui/src/GridList/GridList.js | 2 +- .../src/MobileStepper/MobileStepper.js | 2 +- .../src/styles/createTypography.js | 2 +- .../src/transitions/transition.d.ts | 3 +- pages/index.js | 5 +- yarn.lock | 429 +++++++++--------- 24 files changed, 290 insertions(+), 281 deletions(-) diff --git a/.size-limit.js b/.size-limit.js index d032d376bede7f..31604b60e7e025 100644 --- a/.size-limit.js +++ b/.size-limit.js @@ -1,19 +1,19 @@ -const fs = require('fs') +const fs = require('fs'); function getMainFile() { - const dirname = '.next/static/commons' - const files = fs.readdirSync(dirname) + const dirname = '.next/static/commons'; + const files = fs.readdirSync(dirname); const [file] = files .reduce((result, filename) => { if (!/^main-[a-f0-9]+\.js$/.test(filename)) { - return result + return result; } - const path = `${dirname}/${filename}` - return [...result, { path, ctime: fs.statSync(path).ctimeMs }] + const path = `${dirname}/${filename}`; + return [...result, { path, ctime: fs.statSync(path).ctimeMs }]; }, []) - .sort((x, y) => y.ctime - x.ctime) - return file + .sort((x, y) => y.ctime - x.ctime); + return file; } module.exports = [ @@ -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: '94.5 KB', + limit: '94.3 KB', }, { name: 'The main bundle of the docs', diff --git a/docs/src/modules/components/AppSearch.js b/docs/src/modules/components/AppSearch.js index 294a0c7d9b11ee..dee308426850a9 100644 --- a/docs/src/modules/components/AppSearch.js +++ b/docs/src/modules/components/AppSearch.js @@ -196,4 +196,8 @@ AppSearch.propTypes = { width: PropTypes.string.isRequired, }; -export default compose(withStyles(styles), withWidth(), pure)(AppSearch); +export default compose( + withStyles(styles), + withWidth(), + pure, +)(AppSearch); diff --git a/docs/src/modules/components/Link.js b/docs/src/modules/components/Link.js index 43ec98dfe95e0c..f2c99e515cecb6 100644 --- a/docs/src/modules/components/Link.js +++ b/docs/src/modules/components/Link.js @@ -128,4 +128,7 @@ Link.propTypes = { variant: PropTypes.oneOf(['default', 'primary', 'secondary', 'button']), }; -export default compose(withRouter, withStyles(styles))(Link); +export default compose( + withRouter, + withStyles(styles), +)(Link); diff --git a/docs/src/modules/redux/initRedux.js b/docs/src/modules/redux/initRedux.js index e154c67f271e6b..b6a9eff42e4f11 100644 --- a/docs/src/modules/redux/initRedux.js +++ b/docs/src/modules/redux/initRedux.js @@ -33,7 +33,10 @@ function create(initialState) { theme: themeReducer, }), initialState, // Hydrate the store with server-side data - compose(applyMiddleware(...middlewares), devtools), + compose( + applyMiddleware(...middlewares), + devtools, + ), ); } diff --git a/docs/src/pages/layout/css-in-js/MediaQuery.js b/docs/src/pages/layout/css-in-js/MediaQuery.js index 08eb9b377a0762..ff5b22b78f77a0 100644 --- a/docs/src/pages/layout/css-in-js/MediaQuery.js +++ b/docs/src/pages/layout/css-in-js/MediaQuery.js @@ -32,4 +32,7 @@ MediaQuery.propTypes = { width: PropTypes.string.isRequired, }; -export default compose(withStyles(styles), withWidth())(MediaQuery); +export default compose( + withStyles(styles), + withWidth(), +)(MediaQuery); diff --git a/docs/src/pages/layout/hidden/BreakpointDown.js b/docs/src/pages/layout/hidden/BreakpointDown.js index 7a6f5c57f05dab..314bab5490625e 100644 --- a/docs/src/pages/layout/hidden/BreakpointDown.js +++ b/docs/src/pages/layout/hidden/BreakpointDown.js @@ -55,4 +55,7 @@ BreakpointDown.propTypes = { width: PropTypes.string.isRequired, }; -export default compose(withStyles(styles), withWidth())(BreakpointDown); +export default compose( + withStyles(styles), + withWidth(), +)(BreakpointDown); diff --git a/docs/src/pages/layout/hidden/BreakpointOnly.js b/docs/src/pages/layout/hidden/BreakpointOnly.js index 3cb2085e0e42fb..727a226c64a505 100644 --- a/docs/src/pages/layout/hidden/BreakpointOnly.js +++ b/docs/src/pages/layout/hidden/BreakpointOnly.js @@ -49,4 +49,7 @@ BreakpointOnly.propTypes = { width: PropTypes.string.isRequired, }; -export default compose(withStyles(styles), withWidth())(BreakpointOnly); +export default compose( + withStyles(styles), + withWidth(), +)(BreakpointOnly); diff --git a/docs/src/pages/layout/hidden/BreakpointUp.js b/docs/src/pages/layout/hidden/BreakpointUp.js index edfc96628afc3e..973c785dafd64c 100644 --- a/docs/src/pages/layout/hidden/BreakpointUp.js +++ b/docs/src/pages/layout/hidden/BreakpointUp.js @@ -55,4 +55,7 @@ BreakpointUp.propTypes = { width: PropTypes.string.isRequired, }; -export default compose(withStyles(styles), withWidth())(BreakpointUp); +export default compose( + withStyles(styles), + withWidth(), +)(BreakpointUp); diff --git a/docs/src/pages/layout/hidden/GridIntegration.js b/docs/src/pages/layout/hidden/GridIntegration.js index 2c6fc1c64105e8..1428480c004786 100644 --- a/docs/src/pages/layout/hidden/GridIntegration.js +++ b/docs/src/pages/layout/hidden/GridIntegration.js @@ -63,4 +63,7 @@ GridIntegration.propTypes = { width: PropTypes.string, }; -export default compose(withStyles(styles), withWidth())(GridIntegration); +export default compose( + withStyles(styles), + withWidth(), +)(GridIntegration); diff --git a/examples/create-react-app-with-typescript/src/pages/index.tsx b/examples/create-react-app-with-typescript/src/pages/index.tsx index a8449ad5651820..534807795e0766 100644 --- a/examples/create-react-app-with-typescript/src/pages/index.tsx +++ b/examples/create-react-app-with-typescript/src/pages/index.tsx @@ -17,7 +17,7 @@ const styles: StyleRulesCallback<'root'> = theme => ({ }); type State = { - open: boolean; + open: boolean, }; class Index extends React.Component, State> { @@ -65,4 +65,4 @@ class Index extends React.Component, State> { } } -export default withRoot(withStyles(styles)<{}>(Index)); +export default withRoot(withStyles(styles) < {} > Index); diff --git a/package.json b/package.json index 965ed207c547dd..bdf9c0111e3688 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "enzyme-adapter-react-16": "^1.1.0", "eslint": "^4.11.0", "eslint-config-airbnb": "^16.1.0", - "eslint-import-resolver-webpack": "^0.9.0", + "eslint-import-resolver-webpack": "^0.10.0", "eslint-plugin-babel": "^5.0.0", "eslint-plugin-flowtype": "^2.40.1", "eslint-plugin-import": "^2.8.0", @@ -125,10 +125,10 @@ "postcss": "^6.0.16", "prettier": "^1.8.2", "raw-loader": "^0.5.1", - "react": "^16.3.0", + "react": "16.3.0", "react-autosuggest": "^9.3.2", "react-docgen": "^3.0.0-beta10", - "react-dom": "^16.3.0", + "react-dom": "16.3.0", "react-inspector": "^2.2.2", "react-number-format": "^3.0.2", "react-redux": "^5.0.6", @@ -142,12 +142,12 @@ "redux": "^4.0.0", "redux-logger": "^3.0.6", "rimraf": "^2.6.2", - "rollup": "^0.58.2", + "rollup": "^0.59.4", "rollup-plugin-babel": "^4.0.0-beta.4", "rollup-plugin-commonjs": "^9.1.3", "rollup-plugin-node-resolve": "^3.3.0", - "rollup-plugin-size-snapshot": "^0.4.1", - "rollup-plugin-uglify": "^3.0.0", + "rollup-plugin-size-snapshot": "^0.5.1", + "rollup-plugin-uglify": "^4.0.0", "sinon": "^5.0.3", "size-limit": "^0.18.0", "typescript": "^2.6.1", diff --git a/packages/material-ui-codemod/src/v1.0.0/import-path.test/actual.js b/packages/material-ui-codemod/src/v1.0.0/import-path.test/actual.js index 0aa402759a0b94..45ea49170814d3 100644 --- a/packages/material-ui-codemod/src/v1.0.0/import-path.test/actual.js +++ b/packages/material-ui-codemod/src/v1.0.0/import-path.test/actual.js @@ -31,20 +31,10 @@ import ExpansionPanel, { import GridList, { GridListTile } from '@material-ui/core/GridList'; import { CircularProgress } from '@material-ui/core/Progress'; import { LinearProgress as MuiLinearProgress } from '@material-ui/core/Progress'; -import { - FormLabel, - FormControl, - FormGroup, - FormHelperText, -} from '@material-ui/core/Form'; +import { FormLabel, FormControl, FormGroup, FormHelperText } from '@material-ui/core/Form'; import Fade from '@material-ui/core/transitions/Fade'; import Stepper, { Step, StepButton, StepContent } from '@material-ui/core/Stepper'; -import Table, { - TableBody, - TableCell, - TablePagination, - TableRow, -} from '@material-ui/core/Table'; +import Table, { TableBody, TableCell, TablePagination, TableRow } from '@material-ui/core/Table'; import TableHead from '@material-ui/core/Table/TableHead'; import Input, { InputLabel } from '@material-ui/core/Input'; import Grow from '@material-ui/core/transitions/Grow'; diff --git a/packages/material-ui-lab/src/Slider/Slider.js b/packages/material-ui-lab/src/Slider/Slider.js index 5b5ad9d7a3e4e8..a1b5d89c31ec74 100644 --- a/packages/material-ui-lab/src/Slider/Slider.js +++ b/packages/material-ui-lab/src/Slider/Slider.js @@ -153,7 +153,7 @@ function addEventListener(node, event, handler, capture) { } function percentToValue(percent, min, max) { - return (max - min) * percent / 100 + min; + return ((max - min) * percent) / 100 + min; } function roundToStep(number, step) { @@ -392,7 +392,7 @@ class Slider extends React.Component { ...other } = this.props; - const percent = clamp((value - min) * 100 / (max - min)); + const percent = clamp(((value - min) * 100) / (max - min)); const commonClasses = { [classes.disabled]: disabled, diff --git a/packages/material-ui/.size-snapshot.json b/packages/material-ui/.size-snapshot.json index 668dcf0c2fd1e2..21c95637aa7050 100644 --- a/packages/material-ui/.size-snapshot.json +++ b/packages/material-ui/.size-snapshot.json @@ -1,21 +1,26 @@ { "build/umd/material-ui.development.js": { - "bundled": 986509, - "minified": 360606, - "gzipped": 93973 + "bundled": 988164, + "minified": 361488, + "gzipped": 94315 }, "build/umd/material-ui.production.min.js": { - "bundled": 816961, - "minified": 319394, - "gzipped": 84680 + "bundled": 815223, + "minified": 319257, + "gzipped": 84734 }, "build/dist/material-ui.esm.js": { - "bundled": 582102, - "minified": 283593, - "gzipped": 63193, + "bundled": 582053, + "minified": 283504, + "gzipped": 63208, "treeshaked": { - "rollup": 195777, - "webpack": 202862 + "rollup": { + "code": 195843, + "import_statements": 1939 + }, + "webpack": { + "code": 202925 + } } } } diff --git a/packages/material-ui/package.json b/packages/material-ui/package.json index b4a6aec3d3fc76..d7ac5a2bb3f8a2 100644 --- a/packages/material-ui/package.json +++ b/packages/material-ui/package.json @@ -54,7 +54,7 @@ "keycode": "^2.1.9", "normalize-scroll-left": "^0.1.2", "prop-types": "^15.6.0", - "react-event-listener": "^0.5.9", + "react-event-listener": "^0.6.0", "react-jss": "^8.1.0", "react-popper": "^0.10.0", "react-transition-group": "^2.2.1", diff --git a/packages/material-ui/scripts/rollup.config.js b/packages/material-ui/scripts/rollup.config.js index 36434beff21ae0..b76436379a587e 100644 --- a/packages/material-ui/scripts/rollup.config.js +++ b/packages/material-ui/scripts/rollup.config.js @@ -2,7 +2,7 @@ import nodeResolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import babel from 'rollup-plugin-babel'; import replace from 'rollup-plugin-replace'; -import uglify from 'rollup-plugin-uglify'; +import { uglify } from 'rollup-plugin-uglify'; import { sizeSnapshot } from 'rollup-plugin-size-snapshot'; const input = './src/index.js'; diff --git a/packages/material-ui/src/CircularProgress/CircularProgress.js b/packages/material-ui/src/CircularProgress/CircularProgress.js index 8c9cb97e7df465..be9e16634b564b 100644 --- a/packages/material-ui/src/CircularProgress/CircularProgress.js +++ b/packages/material-ui/src/CircularProgress/CircularProgress.js @@ -93,7 +93,7 @@ function CircularProgress(props) { rootProps['aria-valuenow'] = Math.round(value); if (variant === 'static') { - circleStyle.strokeDashoffset = `${((100 - value) / 100 * circumference).toFixed(3)}px`; + circleStyle.strokeDashoffset = `${(((100 - value) / 100) * circumference).toFixed(3)}px`; rootStyle.transform = 'rotate(-90deg)'; } else { circleStyle.strokeDashoffset = `${(easeIn((100 - value) / 100) * circumference).toFixed( diff --git a/packages/material-ui/src/Grid/Grid.js b/packages/material-ui/src/Grid/Grid.js index 4fbec0dee096b9..c58b697f9c3093 100644 --- a/packages/material-ui/src/Grid/Grid.js +++ b/packages/material-ui/src/Grid/Grid.js @@ -36,7 +36,7 @@ function generateGrid(globalStyles, theme, breakpoint) { } // Only keep 6 significant numbers. - const width = `${Math.round(size / 12 * 10e6) / 10e4}%`; + const width = `${Math.round((size / 12) * 10e6) / 10e4}%`; /* eslint-disable max-len */ // Close to the bootstrap implementation: diff --git a/packages/material-ui/src/GridList/GridList.js b/packages/material-ui/src/GridList/GridList.js index e436b641eceb2f..1a637703a5cc5a 100644 --- a/packages/material-ui/src/GridList/GridList.js +++ b/packages/material-ui/src/GridList/GridList.js @@ -43,7 +43,7 @@ function GridList(props) { return React.cloneElement(currentChild, { style: Object.assign( { - width: `${100 / cols * childCols}%`, + width: `${(100 / cols) * childCols}%`, height: cellHeight === 'auto' ? 'auto' : cellHeight * childRows + spacing, padding: spacing / 2, }, diff --git a/packages/material-ui/src/MobileStepper/MobileStepper.js b/packages/material-ui/src/MobileStepper/MobileStepper.js index 5140b8e86a3dfc..ad8bca60a0d974 100644 --- a/packages/material-ui/src/MobileStepper/MobileStepper.js +++ b/packages/material-ui/src/MobileStepper/MobileStepper.js @@ -88,7 +88,7 @@ function MobileStepper(props) { )} {nextButton} diff --git a/packages/material-ui/src/styles/createTypography.js b/packages/material-ui/src/styles/createTypography.js index e1d4fd4aa2c937..a6f489fdb1e381 100644 --- a/packages/material-ui/src/styles/createTypography.js +++ b/packages/material-ui/src/styles/createTypography.js @@ -23,7 +23,7 @@ export default function createTypography(palette: Object, typography: Object | F const coef = fontSize / 14; function pxToRem(value) { - return `${value / htmlFontSize * coef}rem`; + return `${(value / htmlFontSize) * coef}rem`; } return deepmerge( diff --git a/packages/material-ui/src/transitions/transition.d.ts b/packages/material-ui/src/transitions/transition.d.ts index 040cf8a0c97687..4c85a85abcaf7e 100644 --- a/packages/material-ui/src/transitions/transition.d.ts +++ b/packages/material-ui/src/transitions/transition.d.ts @@ -21,7 +21,6 @@ export type TransitionKeys = | 'addEndListener' | TransitionHandlerKeys; export interface TransitionProps - extends TransitionActions, - Partial> { + extends TransitionActions, Partial> { style?: CSSProperties; } diff --git a/pages/index.js b/pages/index.js index e6c311dfbe2479..563fce5fd3a31d 100644 --- a/pages/index.js +++ b/pages/index.js @@ -147,4 +147,7 @@ HomePage.propTypes = { classes: PropTypes.object.isRequired, }; -export default compose(withRoot, withStyles(styles))(HomePage); +export default compose( + withRoot, + withStyles(styles), +)(HomePage); diff --git a/yarn.lock b/yarn.lock index 19375bf7572e01..726e085ac65026 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,6 +29,12 @@ dependencies: "@babel/highlight" "7.0.0-beta.44" +"@babel/code-frame@^7.0.0-beta.47": + version "7.0.0-beta.49" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.49.tgz#becd805482734440c9d137e46d77340e64d7f51b" + dependencies: + "@babel/highlight" "7.0.0-beta.49" + "@babel/core@7.0.0-beta.42": version "7.0.0-beta.42" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0-beta.42.tgz#b3a838fddbd19663369a0b4892189fd8d3f82001" @@ -259,6 +265,14 @@ esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/highlight@7.0.0-beta.49": + version "7.0.0-beta.49" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.49.tgz#96bdc6b43e13482012ba6691b1018492d39622cc" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + "@babel/node@7.0.0-beta.42": version "7.0.0-beta.42" resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.0.0-beta.42.tgz#0983512763598258e16a38d6095453a18f7407a8" @@ -850,10 +864,10 @@ regenerator-runtime "^0.11.1" "@babel/runtime@^7.0.0-beta.42": - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.47.tgz#273f5e71629e80f6cbcd7507503848615e59f7e0" + version "7.0.0-beta.49" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.49.tgz#03b3bf07eb982072c8e851dd2ddd5110282e61bf" dependencies: - core-js "^2.5.3" + core-js "^2.5.6" regenerator-runtime "^0.11.1" "@babel/template@7.0.0-beta.42": @@ -928,8 +942,8 @@ glob-to-regexp "^0.3.0" "@nodelib/fs.stat@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.0.2.tgz#d056b68999769728a1cff8d643bc59eb6f0be436" + version "1.1.0" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz#50c1e2260ac0ed9439a181de3725a0168d59c48a" "@sinonjs/formatio@^2.0.0": version "2.0.0" @@ -948,9 +962,9 @@ "@types/cheerio" "*" "@types/react" "*" -"@types/estree@0.0.38": - version "0.0.38" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.38.tgz#c1be40aa933723c608820a99a373a16d215a1ca2" +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" "@types/events@*": version "1.2.0" @@ -976,8 +990,8 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" "@types/node@*": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.1.2.tgz#1b928a0baa408fc8ae3ac012cc81375addc147c6" + version "10.1.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.1.3.tgz#5c16980936c4e3c83ce64e8ed71fb37bd7aea135" "@types/react-transition-group@^2.0.8": version "2.0.9" @@ -1108,8 +1122,8 @@ long "^3.2.0" JSONStream@^1.0.4: - version "1.3.2" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + version "1.3.3" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.3.tgz#27b4b8fbbfeab4e71bcf551e7f27be8d952239bf" dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" @@ -1161,7 +1175,7 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0: +acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0, acorn@^5.5.3: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" @@ -1315,8 +1329,8 @@ archy@^1.0.0: resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -1532,11 +1546,11 @@ autoprefixer@^6.3.1: postcss-value-parser "^3.2.3" autoprefixer@^8.0.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.5.0.tgz#89a39b1316fbe7bc2b4997a0c7dad0149d99511c" + version "8.5.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.5.1.tgz#45b0271b0e634af66613d5a4f99d96f3dcd94474" dependencies: - browserslist "^3.2.7" - caniuse-lite "^1.0.30000839" + browserslist "^3.2.8" + caniuse-lite "^1.0.30000846" normalize-range "^0.1.2" num2fraction "^1.2.2" postcss "^6.0.22" @@ -2529,7 +2543,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^3.0.0, browserslist@^3.2.7: +browserslist@^3.0.0, browserslist@^3.2.8: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" dependencies: @@ -2720,12 +2734,12 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000844" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000844.tgz#bca5798cda2b6931d68100c2d69e55fb338cbb41" + version "1.0.30000846" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000846.tgz#d9c86f914738db4da098eeded997413c44561bd2" -caniuse-lite@^1.0.30000839, caniuse-lite@^1.0.30000844: - version "1.0.30000844" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000844.tgz#de7c84cde0582143cf4f5abdf1b98e5a0539ad4a" +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000846: + version "1.0.30000846" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000846.tgz#2092911eecad71a89dae1faa62bcc202fde7f959" capture-stack-trace@^1.0.0: version "1.0.0" @@ -3062,7 +3076,7 @@ command-join@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf" -commander@2.15.1, commander@^2.11.0, commander@^2.13.0, commander@^2.8.1, commander@^2.9.0: +commander@2.15.1, commander@^2.11.0, commander@^2.13.0, commander@^2.8.1, commander@^2.9.0, commander@~2.15.0: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" @@ -3070,6 +3084,10 @@ commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +commander@~2.14.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" + commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" @@ -3077,10 +3095,8 @@ commander@~2.9.0: graceful-readlink ">= 1.0.0" common-tags@^1.4.0: - version "1.7.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.7.2.tgz#24d9768c63d253a56ecff93845b44b4df1d52771" - dependencies: - babel-runtime "^6.26.0" + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" commondir@^1.0.1: version "1.0.1" @@ -3119,15 +3135,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^1.4.10, concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@1.6.2, concat-stream@^1.4.10, concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -3376,9 +3384,9 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.2.0, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.3: - version "2.5.6" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.6.tgz#0fe6d45bf3cac3ac364a9d72de7576f4eb221b9d" +core-js@^2.2.0, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.3, core-js@^2.5.6: + version "2.5.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -3393,9 +3401,9 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cosmiconfig@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.4.tgz#fe4c1fccf8947ab30911760eace33784749eb51e" +cosmiconfig@^5.0.4: + version "5.0.5" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0" dependencies: is-directory "^0.3.1" js-yaml "^3.9.0" @@ -3436,8 +3444,8 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: sha.js "^2.4.8" cross-env@^5.1.1: - version "5.1.5" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.5.tgz#31daf7f3a52ef337c8ddda585f08175cce5d1fa5" + version "5.1.6" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.6.tgz#0dc05caf945b24e4b9e3b12871fe0e858d08b38d" dependencies: cross-spawn "^5.1.0" is-windows "^1.0.0" @@ -3596,9 +3604,9 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" +"cssstyle@>= 0.3.1 < 0.4.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.3.1.tgz#6da9b4cff1bc5d716e6e5fe8e04fcb1b50a49adf" dependencies: cssom "0.3.x" @@ -3727,17 +3735,17 @@ deep-eql@^3.0.0: dependencies: type-detect "^4.0.0" -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" deepmerge@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.0.tgz#511a54fff405fc346f0240bb270a3e9533a31102" + version "2.1.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768" default-require-extensions@^1.0.0: version "1.0.0" @@ -3869,7 +3877,7 @@ diacritic@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/diacritic/-/diacritic-0.0.2.tgz#fc2a887b5a5bc0a0a854fb614c7c2f209061ee04" -diff@3.5.0, diff@^3.1.0, diff@^3.2.0: +diff@3.5.0, diff@^3.2.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -3984,8 +3992,8 @@ double-ended-queue@^2.1.0-0: resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" downshift@^1.22.1: - version "1.31.14" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-1.31.14.tgz#98b04614cad2abc4297d0d02b50ff2c48b2625e7" + version "1.31.15" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-1.31.15.tgz#ac31c601e2e9e34c5bb85b969c11ba87248f5e67" duplexer2@~0.1.4: version "0.1.4" @@ -4025,8 +4033,8 @@ ejs@^2.5.5, ejs@^2.5.7: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47: - version "1.3.47" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz#764e887ca9104d01a0ac8eabee7dfc0e2ce14104" + version "1.3.48" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz#d3b0d8593814044e092ece2108fc3ac9aea4b900" elliptic@^6.0.0: version "6.4.0" @@ -4222,8 +4230,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.42" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.42.tgz#8c07dd33af04d5dcd1310b5cef13bea63a89ba8d" + version "0.10.43" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.43.tgz#c705e645253210233a270869aa463a2333b7ca64" dependencies: es6-iterator "~2.0.3" es6-symbol "~3.1.1" @@ -4331,9 +4339,9 @@ eslint-import-resolver-node@^0.3.1: debug "^2.6.9" resolve "^1.5.0" -eslint-import-resolver-webpack@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.9.0.tgz#231ce1578ad5124da5799f029bd33d28137623e3" +eslint-import-resolver-webpack@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.10.0.tgz#b6f2468dc3e8b4ea076e5d75bece8da932789b07" dependencies: array-find "^1.0.0" debug "^2.6.8" @@ -4341,8 +4349,7 @@ eslint-import-resolver-webpack@^0.9.0: find-root "^1.1.0" has "^1.0.1" interpret "^1.0.0" - is-absolute "^0.2.3" - lodash.get "^4.4.2" + lodash "^4.17.4" node-libs-browser "^1.0.0 || ^2.0.0" resolve "^1.4.0" semver "^5.3.0" @@ -4361,10 +4368,10 @@ eslint-plugin-babel@^5.0.0: eslint-rule-composer "^0.3.0" eslint-plugin-flowtype@^2.40.1: - version "2.46.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.3.tgz#7e84131d87ef18b496b1810448593374860b4e8e" + version "2.47.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.47.1.tgz#1be0d6b855dbf8f253fcf49ea3d44bf6c23ff984" dependencies: - lodash "^4.15.0" + lodash "^4.17.10" eslint-plugin-import@^2.8.0: version "2.12.0" @@ -4708,12 +4715,12 @@ extglob@^2.0.4: to-regex "^3.0.1" extract-zip@^1.6.5: - version "1.6.6" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" dependencies: - concat-stream "1.6.0" + concat-stream "1.6.2" debug "2.6.9" - mkdirp "0.5.0" + mkdirp "0.5.1" yauzl "2.4.1" extsprintf@1.3.0: @@ -4724,7 +4731,7 @@ extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" -fast-deep-equal@^1.0.0, fast-deep-equal@^1.1.0: +fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" @@ -4914,8 +4921,8 @@ flow-bin@0.62.0: resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.62.0.tgz#14bca669a6e3f95c0bc0c2d1eb55ec4e98cb1d83" flow-parser@^0.*: - version "0.72.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.72.0.tgz#6c8041e76ac7d0be1a71ce29c00cd1435fb6013c" + version "0.73.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.73.0.tgz#525ac0776f743e16b6dca1a3dd6c602260b15773" flow-typed@^2.2.3: version "2.4.0" @@ -5912,13 +5919,6 @@ is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" -is-absolute@^0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" - dependencies: - is-relative "^0.2.1" - is-windows "^0.2.0" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -6194,12 +6194,6 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-relative@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" - dependencies: - is-unc-path "^0.1.1" - is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -6240,20 +6234,10 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-unc-path@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" - dependencies: - unc-path-regex "^0.1.0" - is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -6359,20 +6343,20 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jest-diff@^22.4.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" +jest-diff@^23.0.0: + version "23.0.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.0.1.tgz#3d49137cee12c320a4b4d2b4a6fa6e82d491a16a" dependencies: chalk "^2.0.1" diff "^3.2.0" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" + jest-get-type "^22.1.0" + pretty-format "^23.0.1" jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" -jest-get-type@^22.4.3: +jest-get-type@^22.1.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" @@ -6431,21 +6415,21 @@ jscodeshift@^0.5.0: write-file-atomic "^1.2.0" jsdom@^11.3.0: - version "11.10.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.10.0.tgz#a42cd54e88895dc765f03f15b807a474962ac3b5" + version "11.11.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.11.0.tgz#df486efad41aee96c59ad7a190e2449c7eb1110e" dependencies: abab "^1.0.4" acorn "^5.3.0" acorn-globals "^4.1.0" array-equal "^1.0.0" cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" + cssstyle ">= 0.3.1 < 0.4.0" data-urls "^1.0.0" domexception "^1.0.0" escodegen "^1.9.0" html-encoding-sniffer "^1.0.2" left-pad "^1.2.0" - nwmatcher "^1.4.3" + nwsapi "^2.0.0" parse5 "4.0.0" pn "^1.1.0" request "^2.83.0" @@ -6457,7 +6441,7 @@ jsdom@^11.3.0: webidl-conversions "^4.0.2" whatwg-encoding "^1.0.3" whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.0" + whatwg-url "^6.4.1" ws "^4.0.0" xml-name-validator "^3.0.0" @@ -6477,7 +6461,7 @@ json-loader@^0.5.4, json-loader@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" -json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -6982,9 +6966,9 @@ loglevelnext@^1.0.1: es6-symbol "^3.1.1" object.assign "^4.1.0" -lolex@^2.2.0, lolex@^2.3.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.6.0.tgz#cf9166f3c9dece3cdeb5d6b01fce50f14a1203e3" +lolex@^2.3.2, lolex@^2.4.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.0.tgz#9c087a69ec440e39d3f796767cf1b2cdc43d5ea5" long@^3.2.0: version "3.2.0" @@ -7030,10 +7014,6 @@ lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - magic-string@^0.22.4: version "0.22.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" @@ -7326,11 +7306,11 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -minipass@^2.2.1, minipass@^2.2.4: - version "2.3.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.1.tgz#4e872b959131a672837ab3cb554962bc84b1537d" +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" dependencies: - safe-buffer "^5.1.1" + safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.1.0: @@ -7374,12 +7354,6 @@ mkdirp@0.5, mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp dependencies: minimist "0.0.8" -mkdirp@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" - dependencies: - minimist "0.0.8" - mkdirp@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" @@ -7469,8 +7443,8 @@ nanomatch@^1.2.9: to-regex "^3.0.1" natives@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.3.tgz#44a579be64507ea2d6ed1ca04a9415915cf75558" + version "1.1.4" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.4.tgz#2f0f224fc9a7dd53407c7667c84cf8dbe773de58" natural-compare@^1.4.0: version "1.4.0" @@ -7567,7 +7541,7 @@ next@^6.0.1: webpack-sources "1.1.0" write-file-webpack-plugin "4.2.0" -nise@^1.2.0: +nise@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/nise/-/nise-1.3.3.tgz#c17a850066a8a1dfeb37f921da02441afc4a82ba" dependencies: @@ -7797,9 +7771,9 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -nwmatcher@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" +nwsapi@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.1.tgz#a50d59a2dcb14b6931401171713ced2d0eb3468f" nyc@^11.3.0: version "11.8.0" @@ -8382,11 +8356,10 @@ postcss-discard-unused@^2.2.1: uniqs "^2.0.0" postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" dependencies: postcss "^5.0.4" - uniqid "^4.0.0" postcss-merge-idents@^2.1.5: version "2.1.7" @@ -8586,16 +8559,16 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" prettier@^1.8.2: - version "1.12.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.12.1.tgz#c1ad20e803e7749faf905a409d2367e06bbe7325" + version "1.13.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.0.tgz#054de8d5fb1a4405c845d16183f58a2c301f6f16" pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" -pretty-format@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" +pretty-format@^23.0.1: + version "23.0.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.0.1.tgz#d61d065268e4c759083bccbca27a01ad7c7601f4" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" @@ -8748,8 +8721,8 @@ punycode@1.4.1, punycode@^1.2.4, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" punycode@2.x.x, punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" q@^1.0.1, q@^1.1.2, q@^1.4.1, q@^1.5.1, q@~1.5.0: version "1.5.1" @@ -8875,10 +8848,10 @@ raw-loader@^0.5.1: resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297" + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: - deep-extend "^0.5.1" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" @@ -8911,16 +8884,16 @@ react-docgen@^3.0.0-beta10: node-dir "^0.1.10" recast "^0.12.6" -react-dom@^16.3.0: - version "16.3.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.3.2.tgz#cb90f107e09536d683d84ed5d4888e9640e0e4df" +react-dom@16.3.0: + version "16.3.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.3.0.tgz#b318e52184188ecb5c3e81117420cca40618643e" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.0" -react-event-listener@^0.5.1, react-event-listener@^0.5.9: +react-event-listener@^0.5.1: version "0.5.9" resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.9.tgz#c64e84f77156a682614835bdc1bc7ba00912df97" dependencies: @@ -8929,6 +8902,14 @@ react-event-listener@^0.5.1, react-event-listener@^0.5.9: prop-types "^15.6.0" warning "^3.0.0" +react-event-listener@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.0.tgz#f8cf2821f5ca1844e0df1dac1c7b9a3ecb686fd7" + dependencies: + "@babel/runtime" "^7.0.0-beta.42" + prop-types "^15.6.0" + warning "^3.0.0" + react-hot-loader@4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.1.3.tgz#b4ceca7961cc08451f8199a24a5753a749edd9ce" @@ -8953,9 +8934,9 @@ react-inspector@^2.2.2: babel-runtime "^6.26.0" is-dom "^1.0.9" -react-is@^16.3.2: - version "16.3.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.3.2.tgz#f4d3d0e2f5fbb6ac46450641eb2e25bf05d36b22" +react-is@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.4.0.tgz#cc9fdc855ac34d2e7d9d2eb7059bbc240d35ffcf" react-jss@^8.1.0: version "8.4.0" @@ -9066,13 +9047,13 @@ react-swipeable-views@^0.12.10: warning "^3.0.0" react-test-renderer@^16.0.0-0, react-test-renderer@^16.1.1: - version "16.3.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.3.2.tgz#3d1ed74fda8db42521fdf03328e933312214749a" + version "16.4.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.4.0.tgz#0dbe0e24263e94e1830c7afb1f403707fad313a3" dependencies: fbjs "^0.8.16" object-assign "^4.1.1" prop-types "^15.6.0" - react-is "^16.3.2" + react-is "^16.4.0" react-text-mask@^5.0.2: version "5.4.1" @@ -9094,9 +9075,9 @@ react-transition-group@^2.2.1: loose-envify "^1.3.1" prop-types "^15.6.1" -react@^16.3.0: - version "16.3.2" - resolved "https://registry.yarnpkg.com/react/-/react-16.3.2.tgz#fdc8420398533a1e58872f59091b272ce2f91ea9" +react@16.3.0: + version "16.3.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.3.0.tgz#fc5a01c68f91e9b38e92cf83f7b795ebdca8ddff" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -9351,8 +9332,8 @@ regenerator-transform@^0.10.0: private "^0.1.6" regenerator-transform@^0.12.3: - version "0.12.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.12.3.tgz#459adfb64f6a27164ab991b7873f45ab969eca8b" + version "0.12.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.12.4.tgz#aa9b6c59f4b97be080e972506c560b3bccbfcff0" dependencies: private "^0.1.6" @@ -9656,38 +9637,39 @@ rollup-plugin-replace@^2.0.0: minimatch "^3.0.2" rollup-pluginutils "^2.0.1" -rollup-plugin-size-snapshot@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-size-snapshot/-/rollup-plugin-size-snapshot-0.4.1.tgz#3d384ea0abeaad86da0c519793ae998553da0925" +rollup-plugin-size-snapshot@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-size-snapshot/-/rollup-plugin-size-snapshot-0.5.1.tgz#f7649a4768448f35b5f97d37989e9f2c70165782" dependencies: + acorn "^5.5.3" bytes "^3.0.0" chalk "^2.3.2" - fast-deep-equal "^1.1.0" gzip-size "^4.1.0" - jest-diff "^22.4.0" + jest-diff "^23.0.0" memory-fs "^0.4.1" rollup-plugin-replace "^2.0.0" - uglify-es "^3.3.9" + terser "^3.7.5" webpack "^4.5.0" -rollup-plugin-uglify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-3.0.0.tgz#a34eca24617709c6bf1778e9653baafa06099b86" +rollup-plugin-uglify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-4.0.0.tgz#6eb471738f1ce9ba7d9d4bc43b71cba02417c8fb" dependencies: - uglify-es "^3.3.7" + "@babel/code-frame" "^7.0.0-beta.47" + uglify-js "^3.3.25" rollup-pluginutils@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.2.0.tgz#64ba3f29988b84322bafa188a9f99ca731c95354" + version "2.3.0" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.0.tgz#478ace04bd7f6da2e724356ca798214884738fc4" dependencies: estree-walker "^0.5.2" micromatch "^2.3.11" -rollup@^0.58.2: - version "0.58.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.58.2.tgz#2feddea8c0c022f3e74b35c48e3c21b3433803ce" +rollup@^0.59.4: + version "0.59.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.59.4.tgz#6f80f7017c22667ff1bf3e62adf8624a44cc44aa" dependencies: - "@types/estree" "0.0.38" + "@types/estree" "0.0.39" "@types/node" "*" rst-selector-parser@^2.2.3: @@ -9910,26 +9892,26 @@ signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" sinon@^5.0.3: - version "5.0.7" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-5.0.7.tgz#3bded6a73613ccc9e512e20246ced69a27c27dab" + version "5.0.10" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-5.0.10.tgz#a282b36a7475664c9f98719108e5546907129023" dependencies: "@sinonjs/formatio" "^2.0.0" - diff "^3.1.0" + diff "^3.5.0" lodash.get "^4.4.2" - lolex "^2.2.0" - nise "^1.2.0" - supports-color "^5.1.0" - type-detect "^4.0.5" + lolex "^2.4.2" + nise "^1.3.3" + supports-color "^5.4.0" + type-detect "^4.0.8" size-limit@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-0.18.0.tgz#ed2f07cb66e5a209f1d873104b7f4a7a9f19efc7" + version "0.18.1" + resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-0.18.1.tgz#9d1abc4ad936c37a94987cb5fc1c0eefa0e7d5b9" dependencies: bytes "^3.0.0" chalk "^2.4.1" ci-job-number "^0.3.0" compression-webpack-plugin "^1.1.11" - cosmiconfig "^5.0.2" + cosmiconfig "^5.0.4" css-loader "^0.28.11" escape-string-regexp "^1.0.5" file-loader "^1.1.11" @@ -9939,7 +9921,7 @@ size-limit@^0.18.0: read-pkg-up "^3.0.0" style-loader "^0.21.0" webpack "^4.1.1" - webpack-bundle-analyzer "^2.11.2" + webpack-bundle-analyzer "^2.13.0" yargs "^11.0.0" slack-node@~0.2.0: @@ -10285,7 +10267,7 @@ string-length@^1.0.1: dependencies: strip-ansi "^3.0.0" -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -10293,7 +10275,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -10395,7 +10377,7 @@ stylis@3.4.10: version "3.4.10" resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.10.tgz#a135cab4b9ff208e327fbb5a6fde3fa991c638ee" -supports-color@5.4.0, supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@5.4.0, supports-color@^5.3.0, supports-color@^5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" dependencies: @@ -10476,12 +10458,12 @@ tapable@^1.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" tar@^4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462" + version "4.4.4" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" - minipass "^2.2.4" + minipass "^2.3.3" minizlib "^1.1.0" mkdirp "^0.5.0" safe-buffer "^5.1.2" @@ -10522,6 +10504,13 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" +terser@^3.7.5: + version "3.7.5" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.7.5.tgz#b18090210794c79a5774bc1f0ebe80fb877a31bd" + dependencies: + commander "~2.14.1" + source-map "~0.6.1" + test-exclude@^4.2.0, test-exclude@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" @@ -10736,7 +10725,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@^4.0.0, type-detect@^4.0.5: +type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -10759,7 +10748,7 @@ ua-parser-js@^0.7.9: version "0.7.18" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" -uglify-es@^3.3.4, uglify-es@^3.3.7, uglify-es@^3.3.9: +uglify-es@^3.3.4: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" dependencies: @@ -10775,6 +10764,13 @@ uglify-js@^2.6, uglify-js@^2.8.29: optionalDependencies: uglify-to-browserify "~1.0.0" +uglify-js@^3.3.25: + version "3.3.27" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.27.tgz#eb8c3c9429969f86ff5b0a2422ffc78c3cea8cc0" + dependencies: + commander "~2.15.0" + source-map "~0.6.1" + uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" @@ -10817,10 +10813,6 @@ ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" -unc-path-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - underscore@~1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" @@ -10869,12 +10861,6 @@ uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" @@ -10968,8 +10954,8 @@ update-notifier@^2.1.0: xdg-basedir "^3.0.0" uri-js@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.1.tgz#4595a80a51f356164e22970df64c7abd6ade9850" + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: punycode "^2.1.0" @@ -11178,9 +11164,9 @@ webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" -webpack-bundle-analyzer@^2.11.2, webpack-bundle-analyzer@^2.9.1: - version "2.13.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.0.tgz#8d7db44c3d4844bc911890998e1110514cf12264" +webpack-bundle-analyzer@^2.13.0, webpack-bundle-analyzer@^2.9.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz#07d2176c6e86c3cdce4c23e56fae2a7b6b4ad526" dependencies: acorn "^5.3.0" bfj-node4 "^5.2.0" @@ -11270,8 +11256,8 @@ webpack@3.10.0: yargs "^8.0.2" webpack@^4.1.1, webpack@^4.5.0: - version "4.8.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.8.3.tgz#957c8e80000f9e5cc03d775e78b472d8954f4eeb" + version "4.9.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.9.2.tgz#d347097cc87c9242527c2e8ee9cdcb90f05856c3" dependencies: "@webassemblyjs/ast" "1.4.3" "@webassemblyjs/wasm-edit" "1.4.3" @@ -11283,6 +11269,7 @@ webpack@^4.1.1, webpack@^4.5.0: chrome-trace-event "^0.1.1" enhanced-resolve "^4.0.0" eslint-scope "^3.7.1" + json-parse-better-errors "^1.0.2" loader-runner "^2.3.0" loader-utils "^1.1.0" memory-fs "~0.4.1" @@ -11310,7 +11297,7 @@ whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" -whatwg-url@^6.4.0: +whatwg-url@^6.4.0, whatwg-url@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.1.tgz#fdb94b440fd4ad836202c16e9737d511f012fd67" dependencies: @@ -11335,16 +11322,16 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" which@^1.1.1, which@^1.2.10, which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" dependencies: - string-width "^1.0.2" + string-width "^1.0.2 || 2" widest-line@^2.0.0: version "2.0.0" From 3a5dfa9ded218e4e1cdd42375a0eea0d19981076 Mon Sep 17 00:00:00 2001 From: Tom Crockett Date: Mon, 28 May 2018 21:22:39 -0700 Subject: [PATCH 019/182] [typescript] createStyles and improved WithStyles helpers (#11609) * Add a createStyles function * Add createStyles documentation to TypeScript guide * Add InjectedStyles helper type * Wording tweak * Use createStyles and InjectedStyles in more tests * Get rid of InjectedStyles and overload WithStyles to handle style object types * Fill out missing text in typescript guide * Put styles before props * Restore visibility setting and use createStyles to fix type error * Make test code more idiomatic * Reverse order of type union so that error messages are clearer --- .../src/pages/guides/typescript/typescript.md | 188 +++++++++++------- packages/material-ui/src/index.d.ts | 1 + packages/material-ui/src/index.js | 1 + .../material-ui/src/styles/createStyles.d.ts | 11 + .../material-ui/src/styles/createStyles.js | 5 + .../src/styles/createStyles.test.js | 9 + packages/material-ui/src/styles/index.d.ts | 1 + packages/material-ui/src/styles/index.js | 1 + .../material-ui/src/styles/withStyles.d.ts | 13 +- .../src/withWidth/withWidth.spec.tsx | 10 +- .../test/typescript/components.spec.tsx | 13 +- .../test/typescript/styles.spec.tsx | 103 +++++----- .../typescript/styling-comparison.spec.tsx | 22 +- 13 files changed, 228 insertions(+), 150 deletions(-) create mode 100644 packages/material-ui/src/styles/createStyles.d.ts create mode 100644 packages/material-ui/src/styles/createStyles.js create mode 100644 packages/material-ui/src/styles/createStyles.test.js diff --git a/docs/src/pages/guides/typescript/typescript.md b/docs/src/pages/guides/typescript/typescript.md index 46e6c592418376..94d83924700f3d 100644 --- a/docs/src/pages/guides/typescript/typescript.md +++ b/docs/src/pages/guides/typescript/typescript.md @@ -5,45 +5,132 @@ Have a look at the [Create React App with TypeScript](https://github.com/mui-org ## Usage of `withStyles` -The usage of `withStyles` in TypeScript can be a little tricky, so it's worth showing some examples. You can first call `withStyles()` to create a decorator function, like so: +Using `withStyles` in TypeScript can be a little tricky, but there are some utilities to make the experience as painless as possible. -```js -const decorate = withStyles(({ palette, spacing }) => ({ +### Using `createStyles` to defeat type widening + +A frequent source of confusion is TypeScript's [type widening](https://blog.mariusschulz.com/2017/02/04/typescript-2-1-literal-type-widening), which causes this example not to work as expected: + +```ts +const styles = { + root: { + display: 'flex', + flexDirection: 'column', + } +}; + +withStyles(styles); +// ^^^^^^ +// Types of property 'flexDirection' are incompatible. +// Type 'string' is not assignable to type '"-moz-initial" | "inherit" | "initial" | "revert" | "unset" | "column" | "column-reverse" | "row"...'. +``` + +The problem is that the type of the `flexDirection` property is inferred as `string`, which is too arbitrary. To fix this, you can pass the styles object directly to `withStyles`: + +```ts +withStyles({ + root: { + display: 'flex', + flexDirection: 'column', + }, +}); +``` + +However type widening rears its ugly head once more if you try to make the styles depend on the theme: + +```ts +withStyles(({ palette, spacing }) => ({ root: { + display: 'flex', + flexDirection: 'column', padding: spacing.unit, backgroundColor: palette.background.default, - color: palette.primary.main + color: palette.primary.main, }, })); ``` -This can then subsequently be used to decorate either a stateless functional component or a class component. Suppose we have in either case the following props: +This is because TypeScript [widens the return types of function expressions](https://github.com/Microsoft/TypeScript/issues/241). + +Because of this, we recommend using our `createStyles` helper function to construct your style rules object: + +```ts +// Non-dependent styles +const styles = createStyles({ + root: { + display: 'flex', + flexDirection: 'column', + }, +}); + +// Theme-dependent styles +const styles = ({ palette, spacing }: Theme) => createStyles({ + root: { + display: 'flex', + flexDirection: 'column', + padding: spacing.unit, + backgroundColor: palette.background.default, + color: palette.primary.main, + }, +}); +``` + +`createStyles` is just the identity function; it doesn't "do anything" at runtime, just helps guide type inference at compile time. + +### Augmenting your props using `WithStyles` + +Since a component decorated with `withStyles(styles)` gets a special `classes` prop injected, you will want to define its props accordingly: + +```ts +const styles = (theme: Theme) => createStyles({ + root: { /* ... */ }, + paper: { /* ... */ }, + button: { /* ... */ }, +}); -```js interface Props { - text: string; - type: TypographyProps['type']; - color: TypographyProps['color']; -}; + // non-style props + foo: number; + bar: boolean; + // injected style props + classes: { + root: string; + paper: string; + button: string; + }; +} +``` + +However this isn't very [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) because it requires you to maintain the class names (`'root'`, `'paper'`, `'button'`, ...) in two different places. We provide a type operator `WithStyles` to help with this, so that you can just write + +```ts +import { WithStyles } from '@material-ui/core'; + +const styles = (theme: Theme) => createStyles({ + root: { /* ... */ }, + paper: { /* ... */ }, + button: { /* ... */ }, +}); + +interface Props extends WithStyles { + foo: number; + bar: boolean; +} ``` -Functional components are straightforward: +### Decorating components + +Applying the `withStyles(styles)` decorator as a function works as expected: -```jsx -const DecoratedSFC = decorate(({ text, type, color, classes }) => ( +```tsx +const DecoratedSFC = withStyles(styles)(({ text, type, color, classes }: Props) => ( {text} )); -``` - -Class components are a little more cumbersome. Due to a [current limitation in TypeScript's decorator support](https://github.com/Microsoft/TypeScript/issues/4881), `withStyles` can't be used as a class decorator. Instead, we decorate a class component like so: -```jsx -import { WithStyles } from '@material-ui/core/styles'; - -const DecoratedClass = decorate( - class extends React.Component> { +const DecoratedClass = withStyles(styles)( + class extends React.Component { render() { const { text, type, color, classes } = this.props return ( @@ -56,11 +143,13 @@ const DecoratedClass = decorate( ); ``` -When your `props` are a union, Typescript needs you to explicitly tell it the type, by providing a generic `` parameter to `decorate`: +Unfortunately due to a [current limitation of TypeScript decorators](https://github.com/Microsoft/TypeScript/issues/4881), `withStyles` can't be used as a decorator in TypeScript. -```jsx -import { WithStyles } from '@material-ui/core/styles'; +### Union props + +When your `props` are a union, Typescript needs you to explicitly tell it the type, by providing a generic `` parameter to `decorate`: +```tsx interface Book { category: "book"; author: string; @@ -71,10 +160,12 @@ interface Painting { artist: string; } -type Props = Book | Painting; +type BookOrPainting = Book | Painting; -const DecoratedUnionProps = decorate( // <-- without the type argument, we'd get a compiler error! - class extends React.Component> { +type Props = BookOrPainting & WithStyles; + +const DecoratedUnionProps = withStyles(styles)( // <-- without the type argument, we'd get a compiler error! + class extends React.Component { render() { const props = this.props; return ( @@ -87,43 +178,6 @@ const DecoratedUnionProps = decorate( // <-- without the type argument, w ); ``` - -### Injecting Multiple Classes - -Injecting multiple classes into a component is as straightforward as possible. Take the following code for example. The classes `one` and `two` are both available with type information on the `classes`-prop passed in by `withStyles`. - -```jsx -import { Theme, withStyles, WithStyles } from "material-ui/styles"; -import * as React from "react"; - -const styles = (theme: Theme) => ({ - one: { - backgroundColor: "red", - }, - two: { - backgroundColor: "pink", - }, -}); - -type Props = { - someProp: string; -}; - -type PropsWithStyles = Props & WithStyles>; - -const Component: React.SFC = ({ - classes, - ...props -}: PropsWithStyles) => ( -
-
One
-
Two
-
-); - -export default withStyles(styles)(Component); -``` - ## Customization of `Theme` When adding custom properties to the `Theme`, you may continue to use it in a strongly typed way by exploiting @@ -131,7 +185,7 @@ When adding custom properties to the `Theme`, you may continue to use it in a st The following example adds an `appDrawer` property that is merged into the one exported by `material-ui`: -```js +```ts import { Theme } from '@material-ui/core/styles/createMuiTheme'; import { Breakpoint } from '@material-ui/core/styles/createBreakpoints'; @@ -154,7 +208,7 @@ declare module '@material-ui/core/styles/createMuiTheme' { And a custom theme factory with additional defaulted options: -```js +```ts import createMuiTheme, { ThemeOptions } from '@material-ui/core/styles/createMuiTheme'; export default function createMyTheme(options: ThemeOptions) { @@ -170,7 +224,7 @@ export default function createMyTheme(options: ThemeOptions) { This could be used like: -```js +```ts import createMyTheme from './styles/createMyTheme'; const theme = createMyTheme({ appDrawer: { breakpoint: 'md' }}); diff --git a/packages/material-ui/src/index.d.ts b/packages/material-ui/src/index.d.ts index 83871dbabc2ce4..34e8abd6fc864e 100644 --- a/packages/material-ui/src/index.d.ts +++ b/packages/material-ui/src/index.d.ts @@ -75,6 +75,7 @@ export { Theme, withStyles, WithStyles, + createStyles, withTheme, WithTheme, } from './styles'; diff --git a/packages/material-ui/src/index.js b/packages/material-ui/src/index.js index e2a02e5c535cbf..cfe9da4d20e39a 100644 --- a/packages/material-ui/src/index.js +++ b/packages/material-ui/src/index.js @@ -6,6 +6,7 @@ export { colors }; export { createGenerateClassName, createMuiTheme, + createStyles, jssPreset, MuiThemeProvider, withStyles, diff --git a/packages/material-ui/src/styles/createStyles.d.ts b/packages/material-ui/src/styles/createStyles.d.ts new file mode 100644 index 00000000000000..983fbfe5569fd5 --- /dev/null +++ b/packages/material-ui/src/styles/createStyles.d.ts @@ -0,0 +1,11 @@ +import { CSSProperties, StyleRules } from './withStyles'; + +/** + * This function doesn't really "do anything" at runtime, it's just the identity + * function. Its only purpose is to defeat TypeScript's type widening when providing + * style rules to `withStyles` which are a function of the `Theme`. + * + * @param styles a set of style mappings + * @returns the same styles that were passed in + */ +export default function createStyles(styles: S): S; diff --git a/packages/material-ui/src/styles/createStyles.js b/packages/material-ui/src/styles/createStyles.js new file mode 100644 index 00000000000000..adbb7b02637606 --- /dev/null +++ b/packages/material-ui/src/styles/createStyles.js @@ -0,0 +1,5 @@ +// @flow + +export default function createStyles(s: Object) { + return s; +} diff --git a/packages/material-ui/src/styles/createStyles.test.js b/packages/material-ui/src/styles/createStyles.test.js new file mode 100644 index 00000000000000..d91cd017e1888c --- /dev/null +++ b/packages/material-ui/src/styles/createStyles.test.js @@ -0,0 +1,9 @@ +import { assert } from 'chai'; +import { createStyles } from '.'; + +describe('createStyles', () => { + it('is the identity function', () => { + const styles = {}; + assert.strictEqual(createStyles(styles), styles); + }); +}); diff --git a/packages/material-ui/src/styles/index.d.ts b/packages/material-ui/src/styles/index.d.ts index 18053e94055c7e..9e9de75d02f0cd 100644 --- a/packages/material-ui/src/styles/index.d.ts +++ b/packages/material-ui/src/styles/index.d.ts @@ -2,6 +2,7 @@ export { default as createGenerateClassName } from './createGenerateClassName'; export { default as createMuiTheme, Theme, Direction } from './createMuiTheme'; export { default as jssPreset } from './jssPreset'; export { default as MuiThemeProvider } from './MuiThemeProvider'; +export { default as createStyles } from './createStyles'; export { default as withStyles, WithStyles, diff --git a/packages/material-ui/src/styles/index.js b/packages/material-ui/src/styles/index.js index c3822d9932c485..4f795f608250dd 100644 --- a/packages/material-ui/src/styles/index.js +++ b/packages/material-ui/src/styles/index.js @@ -2,5 +2,6 @@ export { default as createGenerateClassName } from './createGenerateClassName'; export { default as createMuiTheme } from './createMuiTheme'; export { default as jssPreset } from './jssPreset'; export { default as MuiThemeProvider } from './MuiThemeProvider'; +export { default as createStyles } from './createStyles'; export { default as withStyles } from './withStyles'; export { default as withTheme } from './withTheme'; diff --git a/packages/material-ui/src/styles/withStyles.d.ts b/packages/material-ui/src/styles/withStyles.d.ts index d29708b5355f9c..995ed8f92a5c3c 100644 --- a/packages/material-ui/src/styles/withStyles.d.ts +++ b/packages/material-ui/src/styles/withStyles.d.ts @@ -37,9 +37,14 @@ export interface WithStylesOptions extends JSS export type ClassNameMap = Record; -export interface WithStyles extends Partial { - classes: ClassNameMap; -} +export type WithStyles = Partial & { + classes: ClassNameMap< + T extends string ? T : + T extends StyleRulesCallback ? K : + T extends StyleRules ? K : + never + >; +}; export interface StyledComponentProps { classes?: Partial>; @@ -47,7 +52,7 @@ export interface StyledComponentProps { } export default function withStyles( - style: StyleRules | StyleRulesCallback, + style: StyleRulesCallback | StyleRules, options?: WithStylesOptions, ): {

>>( diff --git a/packages/material-ui/src/withWidth/withWidth.spec.tsx b/packages/material-ui/src/withWidth/withWidth.spec.tsx index 38c76ec693c6ed..3ed75491a498cc 100644 --- a/packages/material-ui/src/withWidth/withWidth.spec.tsx +++ b/packages/material-ui/src/withWidth/withWidth.spec.tsx @@ -1,20 +1,22 @@ import * as React from 'react'; import { Grid } from '..'; -import { Theme } from '../styles'; +import { Theme, createStyles } from '../styles'; import withStyles, { WithStyles } from '../styles/withStyles'; import withWidth, { WithWidthProps } from '../withWidth'; -const styles = (theme: Theme) => ({ +const styles = (theme: Theme) => createStyles({ root: { + display: 'flex', + flexDirection: 'column', backgroundColor: theme.palette.common.black, }, }); -interface IHelloProps { +interface IHelloProps extends WithWidthProps, WithStyles { name?: string; } -export class Hello extends React.Component> { +export class Hello extends React.Component { public static defaultProps = { name: 'Alex', }; diff --git a/packages/material-ui/test/typescript/components.spec.tsx b/packages/material-ui/test/typescript/components.spec.tsx index 64f501e009a336..988b62a170432f 100644 --- a/packages/material-ui/test/typescript/components.spec.tsx +++ b/packages/material-ui/test/typescript/components.spec.tsx @@ -65,9 +65,8 @@ import { Tooltip, Typography, withMobileDialog, - WithStyles, } from '../../src'; -import { withStyles, StyleRulesCallback } from '../../src/styles'; +import { withStyles, StyleRulesCallback, WithStyles, Theme, createStyles } from '../../src/styles'; import { DialogProps } from '../../src/Dialog'; const log = console.log; @@ -663,16 +662,16 @@ const StepperTest = () => }; const TableTest = () => { - const styles: StyleRulesCallback<'paper'> = theme => { + const styles = (theme: Theme) => { const backgroundColor: string = theme.palette.secondary.light; - return { + return createStyles({ paper: { width: '100%', marginTop: theme.spacing.unit * 3, backgroundColor, overflowX: 'auto', }, - }; + }); }; let id = 0; @@ -689,7 +688,7 @@ const TableTest = () => { createData('Gingerbread', 356, 16.0, 49, 3.9), ]; - function BasicTable(props: WithStyles<'paper'>) { + function BasicTable(props: WithStyles) { const classes = props.classes; return ( @@ -751,7 +750,7 @@ const TabsTest = () => { }, }); - class BasicTabs extends React.Component> { + class BasicTabs extends React.Component> { state = { value: 0, }; diff --git a/packages/material-ui/test/typescript/styles.spec.tsx b/packages/material-ui/test/typescript/styles.spec.tsx index bc9957ff14dad6..b088a3118f1aaf 100644 --- a/packages/material-ui/test/typescript/styles.spec.tsx +++ b/packages/material-ui/test/typescript/styles.spec.tsx @@ -1,28 +1,29 @@ import * as React from 'react'; import { + createStyles, withStyles, - WithStyles, createMuiTheme, MuiThemeProvider, Theme, withTheme, StyleRules, + StyleRulesCallback, + StyledComponentProps, + WithStyles, } from '../../src/styles'; import Button from '../../src/Button/Button'; -import { StyleRulesCallback, StyledComponentProps } from '../../src/styles/withStyles'; import blue from '../../src/colors/blue'; import { WithTheme } from '../../src/styles/withTheme'; import { StandardProps } from '../../src'; import { TypographyStyle } from '../../src/styles/createTypography'; // Shared types for examples -type ComponentClassNames = 'root'; interface ComponentProps { text: string; } // Example 1 -const styles: StyleRulesCallback<'root'> = ({ palette, spacing }) => ({ +const styles = ({ palette, spacing }: Theme) => ({ root: { padding: spacing.unit, backgroundColor: palette.background.default, @@ -36,7 +37,7 @@ const StyledExampleOne = withStyles(styles)(({ classes, text }) ; // Example 2 -const Component: React.SFC> = ({ +const Component: React.SFC> = ({ classes, text, }) =>

{text}
; @@ -45,16 +46,16 @@ const StyledExampleTwo = withStyles(styles)(Component); ; // Example 3 -const styleRule: StyleRules = { +const styleRule = createStyles({ root: { display: 'flex', alignItems: 'stretch', height: '100vh', width: '100%', }, -}; +}); -const ComponentWithChildren: React.SFC> = ({ +const ComponentWithChildren: React.SFC> = ({ classes, children, }) =>
{children}
; @@ -166,7 +167,7 @@ const ComponentWithTheme = withTheme()(({ theme }) =>
{theme.spacing.unit}< ; // withStyles + withTheme -type AllTheProps = WithTheme & WithStyles<'root'>; +type AllTheProps = WithTheme & WithStyles; const AllTheComposition = withTheme()( withStyles(styles)(({ theme, classes }: AllTheProps) => ( @@ -180,7 +181,7 @@ const AllTheComposition = withTheme()( // due to https://github.com/Microsoft/TypeScript/issues/4881 //@withStyles(styles) const DecoratedComponent = withStyles(styles)( - class extends React.Component> { + class extends React.Component> { render() { const { classes, text } = this.props; return
{text}
; @@ -192,7 +193,7 @@ const DecoratedComponent = withStyles(styles)( ; // Allow nested pseudo selectors -withStyles<'listItem' | 'guttered'>(theme => ({ +withStyles(theme => createStyles({ guttered: theme.mixins.gutters({ '&:hover': { textDecoration: 'none', @@ -206,49 +207,44 @@ withStyles<'listItem' | 'guttered'>(theme => ({ })); { - type ListItemContentClassKey = 'root' | 'iiiinset' | 'row'; - const styles = withStyles( - theme => ({ - // Styled similar to ListItemText - root: { - '&:first-child': { - paddingLeft: 0, - }, - flex: '1 1 auto', - padding: '0 16px', + const styles = (theme: Theme) => createStyles({ + // Styled similar to ListItemText + root: { + '&:first-child': { + paddingLeft: 0, }, + flex: '1 1 auto', + padding: '0 16px', + }, - iiiinset: { - '&:first-child': { - paddingLeft: theme.spacing.unit * 7, - }, - }, - row: { - alignItems: 'center', - display: 'flex', - flexDirection: 'row', + iiiinset: { + '&:first-child': { + paddingLeft: theme.spacing.unit * 7, }, - }), - { name: 'ui-ListItemContent' }, - ); + }, + row: { + alignItems: 'center', + display: 'flex', + flexDirection: 'row', + }, + }); - interface ListItemContentProps extends StyledComponentProps { + interface ListItemContentProps extends WithStyles { inset?: boolean; row?: boolean; } - const ListItemContent = styles(props => { - const { children, classes, inset, row } = props; - return ( -
+ const ListItemContent = withStyles(styles, { name: 'ui-ListItemContent' })( + ({ children, classes, inset, row }) => ( +
{children}
- ); - }); + ) + ); } { - interface FooProps extends StyledComponentProps<'x' | 'y'> { + interface FooProps extends WithStyles<'x' | 'y'> { a: number; b: boolean; } @@ -261,27 +257,22 @@ withStyles<'listItem' | 'guttered'>(theme => ({ // The real test here is with "strictFunctionTypes": false, // but we don't have a way currently to test under varying // TypeScript configurations. - interface IStyle { - content: any; - } - interface IComponentProps { + interface ComponentProps extends WithStyles { caption: string; } - type ComponentProps = IComponentProps & WithStyles<'content'>; - - const decorate = withStyles((theme): IStyle => ({ + const styles = (theme: Theme) => createStyles({ content: { margin: 4, }, - })); + }); const Component = (props: ComponentProps) => { return
Hello {props.caption}
; }; - const StyledComponent = decorate(Component); + const StyledComponent = withStyles(styles)(Component); class App extends React.Component { public render() { @@ -298,23 +289,21 @@ withStyles<'listItem' | 'guttered'>(theme => ({ { // https://github.com/mui-org/material-ui/issues/11191 - const decorate = withStyles(theme => ({ + const styles = (theme: Theme) => createStyles({ main: {}, - })); - - type classList = 'main'; + }); - interface IProps { + interface Props extends WithStyles { someProp?: string; } - class SomeComponent extends React.PureComponent> { + class SomeComponent extends React.PureComponent { render() { return
; } } - const DecoratedSomeComponent = decorate(SomeComponent); // note that I don't specify a generic type here + const DecoratedSomeComponent = withStyles(styles)(SomeComponent); ; } diff --git a/packages/material-ui/test/typescript/styling-comparison.spec.tsx b/packages/material-ui/test/typescript/styling-comparison.spec.tsx index a437516e1096b6..0e6b7f998d3f30 100644 --- a/packages/material-ui/test/typescript/styling-comparison.spec.tsx +++ b/packages/material-ui/test/typescript/styling-comparison.spec.tsx @@ -1,29 +1,29 @@ import * as React from 'react'; import Typography, { TypographyProps } from '../../src/Typography/Typography'; -import { withStyles, WithStyles } from '../../src/styles'; +import { withStyles, WithStyles, createStyles, Theme } from '../../src/styles'; -const decorate = withStyles(({ palette, spacing }) => ({ +const styles = ({ palette, spacing }: Theme) => createStyles({ root: { padding: spacing.unit, backgroundColor: palette.background.default, color: palette.primary.dark, }, -})); +}) -interface Props { +interface Props extends WithStyles { color: TypographyProps['color']; text: string; variant: TypographyProps['variant']; } -const DecoratedSFC = decorate(({ text, variant, color, classes }) => ( +const DecoratedSFC = withStyles(styles)(({ text, variant, color, classes }: Props) => ( {text} )); -const DecoratedClass = decorate( - class extends React.Component> { +const DecoratedClass = withStyles(styles)( + class extends React.Component { render() { const { text, variant, color, classes } = this.props; return ( @@ -35,8 +35,8 @@ const DecoratedClass = decorate( }, ); -const DecoratedNoProps = decorate( - class extends React.Component> { +const DecoratedNoProps = withStyles(styles)( + class extends React.Component> { render() { return Hello, World!; } @@ -59,8 +59,8 @@ interface Painting { type ArtProps = Book | Painting; -const DecoratedUnionProps = decorate( // <-- without the type argument, we'd get a compiler error! - class extends React.Component> { +const DecoratedUnionProps = withStyles(styles)( // <-- without the type argument, we'd get a compiler error! + class extends React.Component> { render() { const props = this.props; return ( From f9e6c20fc01df8445935b21eff23ec38912956a3 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Tue, 29 May 2018 10:28:15 +0200 Subject: [PATCH 020/182] [ROADMAP] Update the roadmap (#11606) * [ROADMAP] Update the roadmap * fix ci * fix matt feedback * fix matt feedback --- ROADMAP.md | 10 ++++++++++ docs/src/modules/components/Notifications.js | 12 +++++++++--- .../src/pages/demos/snackbars/CustomizedSnackbars.js | 11 ++++++----- docs/src/pages/versions/StableVersions.js | 6 ++++-- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 57565c48630e32..f87a7bca6e439a 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,3 +1,13 @@ # Roadmap The roadmap is a living document, and it is likely that priorities will change, but the list below should give some indication of our plans for the next major release, and for the future. + +Our priorities: +1. **Material Design**. The Google Design team has recently released a new iteration on the Material Design specification which is focused on *themability*. This is great news! We will do our best to keep up to date. It also validates that heavily investing in customizability for v1 was a good call. We will continue our efforts in this area. +1. **More utils**. We want to work on new utility components: Spacing, Display, Color, etc. +1. **Performance**. We can’t optimize something we can’t measure, and we don’t currently have a CI performance benchmark, so we will need to build one and start investigating bottlenecks. +1. **Learning materials**. The quality of the documentation is equally as important as the quality of the implementation, and while the reference documentation is comprehensive, we could author a learning tutorial like Next.js has done, or an egghead.io course. +1. **Themes**. We want to provide common layouts example to make getting started even easier. We also plan on adding more premium themes. +1. **Documentation**. We want to translate the documentation into Chinese and other languages. Any help is welcomed! +1. **Bundle size**. The library needs to be as small as possible, so we need to work on solutions to further reduce the bundle size, for example, supporting Preact or Nerv can help. +1. **Type checking**. We will continue to improve the TypeScript and possibly the Flow coverage of the library. diff --git a/docs/src/modules/components/Notifications.js b/docs/src/modules/components/Notifications.js index 009c4e052644a3..b510f43c5789d5 100644 --- a/docs/src/modules/components/Notifications.js +++ b/docs/src/modules/components/Notifications.js @@ -1,9 +1,9 @@ /* eslint-disable react/no-danger */ +import 'isomorphic-fetch'; import React from 'react'; import Button from '@material-ui/core/Button'; import Snackbar from '@material-ui/core/Snackbar'; -import 'isomorphic-fetch'; function getLastSeenNotification() { const seen = document.cookie.replace( @@ -43,11 +43,17 @@ class Notifications extends React.Component { message: {}, }; - componentDidMount = async () => { + async componentDidMount() { this.mounted = true; + + // Prevent search engines from indexing the notification. + if (/glebot/.test(navigator.userAgent)) { + return; + } + await getMessages(); this.handleMessage(); - }; + } componentWillUnmout() { this.mounted = false; diff --git a/docs/src/pages/demos/snackbars/CustomizedSnackbars.js b/docs/src/pages/demos/snackbars/CustomizedSnackbars.js index d11a6434bcf27b..2542a16e29555b 100644 --- a/docs/src/pages/demos/snackbars/CustomizedSnackbars.js +++ b/docs/src/pages/demos/snackbars/CustomizedSnackbars.js @@ -2,9 +2,9 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import Button from '@material-ui/core/Button'; -import CheckIcon from '@material-ui/icons/Check'; -import ErrorOutlineIcon from '@material-ui/icons/ErrorOutline'; -import InfoIcon from '@material-ui/icons/InfoOutline'; +import CheckCircleIcon from '@material-ui/icons/CheckCircle'; +import ErrorIcon from '@material-ui/icons/Error'; +import InfoIcon from '@material-ui/icons/Info'; import CloseIcon from '@material-ui/icons/Close'; import green from '@material-ui/core/colors/green'; import amber from '@material-ui/core/colors/amber'; @@ -15,9 +15,9 @@ import WarningIcon from '@material-ui/icons/Warning'; import { withStyles } from '@material-ui/core/styles'; const variantIcon = { - success: CheckIcon, + success: CheckCircleIcon, warning: WarningIcon, - error: ErrorOutlineIcon, + error: ErrorIcon, info: InfoIcon, }; @@ -38,6 +38,7 @@ const styles1 = theme => ({ fontSize: 20, }, iconVariant: { + opacity: 0.9, marginRight: theme.spacing.unit, }, message: { diff --git a/docs/src/pages/versions/StableVersions.js b/docs/src/pages/versions/StableVersions.js index 016a092596fa2e..6ee9767bc6d54c 100644 --- a/docs/src/pages/versions/StableVersions.js +++ b/docs/src/pages/versions/StableVersions.js @@ -1,3 +1,5 @@ +/* eslint-disable react/no-did-mount-set-state */ + import 'isomorphic-fetch'; import React from 'react'; import PropTypes from 'prop-types'; @@ -49,7 +51,7 @@ class StableVersions extends React.Component { docs: [], }; - componentDidMount = async () => { + async componentDidMount() { const branches = await getBranches(); let docs = branches.map(n => n.name); docs = docs.filter(version => version !== 'latest'); @@ -73,7 +75,7 @@ class StableVersions extends React.Component { // The latest version is always using the naked domain. docs[0].url = 'https://material-ui.com'; this.setState({ docs }); - }; + } render() { const { classes } = this.props; From cb7547c7578ff28714c4bf100ad9aaec04c265ef Mon Sep 17 00:00:00 2001 From: Justin Wesley Date: Tue, 29 May 2018 02:31:34 -0600 Subject: [PATCH 021/182] [TextField] Replace underline content text with nbsp (#11617) --- packages/material-ui/src/Input/Input.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/material-ui/src/Input/Input.js b/packages/material-ui/src/Input/Input.js index 475f85955037be..11b873795fdecd 100644 --- a/packages/material-ui/src/Input/Input.js +++ b/packages/material-ui/src/Input/Input.js @@ -104,8 +104,7 @@ export const styles = theme => { left: 0, bottom: 0, // Doing the other way around crash on IE11 "''" https://github.com/cssinjs/jss/issues/242 - content: '"need text here to prevent subpixel zoom issue"', - color: 'transparent', + content: '"\\00a0"', position: 'absolute', right: 0, transition: theme.transitions.create('border-bottom-color', { From 5c4df6fae3580c18d6a04887d9394e3808a28ac2 Mon Sep 17 00:00:00 2001 From: Ahmad Ilaiwi Date: Tue, 29 May 2018 12:55:44 +0300 Subject: [PATCH 022/182] [example] Fix missing brackets typescript (#11623) --- examples/create-react-app-with-typescript/src/pages/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/create-react-app-with-typescript/src/pages/index.tsx b/examples/create-react-app-with-typescript/src/pages/index.tsx index 534807795e0766..479fa779d156f3 100644 --- a/examples/create-react-app-with-typescript/src/pages/index.tsx +++ b/examples/create-react-app-with-typescript/src/pages/index.tsx @@ -65,4 +65,4 @@ class Index extends React.Component, State> { } } -export default withRoot(withStyles(styles) < {} > Index); +export default withRoot(withStyles(styles) < {} > (Index)); From 03ce383d1c7c10f59dd64cd31ceea16806a9dfb7 Mon Sep 17 00:00:00 2001 From: Risa Fletcher Date: Tue, 29 May 2018 11:23:54 -0700 Subject: [PATCH 023/182] [docs] Update overrides.md (#11630) --- docs/src/pages/customization/overrides/overrides.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/pages/customization/overrides/overrides.md b/docs/src/pages/customization/overrides/overrides.md index b0ded3439714d9..67189d0aece69b 100644 --- a/docs/src/pages/customization/overrides/overrides.md +++ b/docs/src/pages/customization/overrides/overrides.md @@ -17,7 +17,7 @@ The first way to override the style of a component is to use **class names**. Every component provides a `className` property which is always applied to the root element. In this example, we are using the [`withStyles()`](/customization/css-in-js#withstyles-styles-options-higher-order-component) higher-order -component to inject custom styles into the DOM, and to pass the class name to the `OverridesClasseNames` component via +component to inject custom styles into the DOM, and to pass the class name to the `ClassNames` component via its `classes` prop. You can choose any other styling solution, or even plain CSS to create the styles, but be sure to consider the [CSS injection order](/customization/css-in-js#css-injection-order), as the CSS injected into the DOM by Material-UI to style a component has the highest specificity possible since the `` is injected at the bottom @@ -33,7 +33,7 @@ component is documented in the **Component API** section. For instance, you can have a look at the [Button CSS API](/api/button#css-api). Alternatively, you can always look at the [implementation details](https://github.com/mui-org/material-ui/blob/master/packages/material-ui/src/Button/Button.js). -This example also uses `withStyles()` (see above), but here, `OverridesClasses` is using `Button`'s `classes` prop to +This example also uses `withStyles()` (see above), but here, `ClassesNesting` is using `Button`'s `classes` prop to provide an object that maps the **names of classes to override** (keys) to the **CSS class names to apply** (values). The component's existing classes will continue to be injected, so it is only necessary to provide the specific styles you wish to add or override. From 0d8e22a03f46037d1948ecb08ba6d331c6e5fe53 Mon Sep 17 00:00:00 2001 From: Gabriel Konkle Date: Tue, 29 May 2018 16:08:32 -0600 Subject: [PATCH 024/182] [docs] Styled API Example (5 lines) (#11620) * Made more concise and powerful styled api example * Eslint and Prettier corrections * fix markdown --- docs/src/pages/customization/css-in-js/css-in-js.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/pages/customization/css-in-js/css-in-js.md b/docs/src/pages/customization/css-in-js/css-in-js.md index 95034c3d4ceada..31dcda42f51be8 100644 --- a/docs/src/pages/customization/css-in-js/css-in-js.md +++ b/docs/src/pages/customization/css-in-js/css-in-js.md @@ -375,7 +375,7 @@ function RenderProps() { {{"demo": "pages/customization/css-in-js/RenderProps.js"}} You can access the theme the same way you would do it with `withStyles`: -``` +```js const Styled = createStyled(theme => ({ root: { backgroundColor: theme.palette.background.paper, @@ -408,7 +408,7 @@ function StyledComponents() { {{"demo": "pages/customization/css-in-js/StyledComponents.js"}} You can access the theme the same way you would do it with `withStyles`: -``` +```js const MyButton = styled(Button)(theme => ({ backgroundColor: theme.palette.background.paper, })); From c7dd433a0cc7ffb0ad09c39b5f627d7480fc45c6 Mon Sep 17 00:00:00 2001 From: Rob Bednark Date: Wed, 30 May 2018 01:14:08 -0700 Subject: [PATCH 025/182] [TextField] Fix grammar for docs (#11633) --- packages/material-ui/src/TextField/TextField.js | 6 +++--- pages/api/text-field.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/material-ui/src/TextField/TextField.js b/packages/material-ui/src/TextField/TextField.js index d4579d1839fbe5..60256d073465e9 100644 --- a/packages/material-ui/src/TextField/TextField.js +++ b/packages/material-ui/src/TextField/TextField.js @@ -22,7 +22,7 @@ import Select from '../Select'; * - [Input](/api/input) * - [FormHelperText](/api/form-helper-text) * - * If you wish to alter the properties applied to the native input, you can do as follow: + * If you wish to alter the properties applied to the native input, you can do so as follows: * * ```jsx * const inputProps = { @@ -34,8 +34,8 @@ import Select from '../Select'; * * For advanced cases, please look at the source of TextField by clicking on the * "Edit this page" button above. Consider either: - * - using the upper case props for passing values direct to the components. - * - using the underlying components directly as shown in the demos. + * - using the upper case props for passing values directly to the components + * - using the underlying components directly as shown in the demos */ function TextField(props) { const { diff --git a/pages/api/text-field.md b/pages/api/text-field.md index 3a005443040374..78032ed3bfc4ac 100644 --- a/pages/api/text-field.md +++ b/pages/api/text-field.md @@ -18,7 +18,7 @@ on top of the following components: - [Input](/api/input) - [FormHelperText](/api/form-helper-text) -If you wish to alter the properties applied to the native input, you can do as follow: +If you wish to alter the properties applied to the native input, you can do so as follows: ```jsx const inputProps = { @@ -30,8 +30,8 @@ return ; For advanced cases, please look at the source of TextField by clicking on the "Edit this page" button above. Consider either: -- using the upper case props for passing values direct to the components. -- using the underlying components directly as shown in the demos. +- using the upper case props for passing values directly to the components +- using the underlying components directly as shown in the demos ## Props From 201ee98f42ce7422129f6fee77ece618c113c97d Mon Sep 17 00:00:00 2001 From: Jon Stevens Date: Wed, 30 May 2018 16:32:08 +0700 Subject: [PATCH 026/182] [core] Add cross-env back (#11638) Fixes regression in #11511 --- packages/material-ui/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/material-ui/package.json b/packages/material-ui/package.json index d7ac5a2bb3f8a2..9ce17a6711f3f0 100644 --- a/packages/material-ui/package.json +++ b/packages/material-ui/package.json @@ -24,7 +24,7 @@ "build:es2015": "cross-env NODE_ENV=production babel ./src --out-dir ./build --ignore *.test.js", "build:es2015modules": "cross-env NODE_ENV=production BABEL_ENV=modules babel ./src/index.js --out-file ./build/index.es.js", "build:es": "cross-env NODE_ENV=production BABEL_ENV=es babel ./src --out-dir ./build/es --ignore *.test.js", - "build:umd": "BABEL_ENV=production-umd rollup -c scripts/rollup.config.js && rimraf dist/material-ui.esm.js", + "build:umd": "cross-env BABEL_ENV=production-umd rollup -c scripts/rollup.config.js && rimraf dist/material-ui.esm.js", "build:copy-files": "babel-node ./scripts/copy-files.js", "build": "yarn build:es2015 && yarn build:es2015modules && yarn build:es && yarn build:umd && yarn build:copy-files", "release": "yarn build && npm publish build" From 62685a8b9a3f02c6fac2f2df4732abf410341df8 Mon Sep 17 00:00:00 2001 From: Paulius Varna Date: Wed, 30 May 2018 20:41:31 +0300 Subject: [PATCH 027/182] [docs] Mention view port size in SVGIcon documentation (#11639) --- docs/src/pages/style/icons/icons.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/pages/style/icons/icons.md b/docs/src/pages/style/icons/icons.md index c2fbab77feda75..3b32534ce36841 100644 --- a/docs/src/pages/style/icons/icons.md +++ b/docs/src/pages/style/icons/icons.md @@ -17,7 +17,7 @@ Material-UI provides two components to render system icons: `Icon` for rendering ### SVG Icons The `SvgIcon` component takes an SVG `path` element as its child and converts it to a React component that displays the path, -and allows the icon to be styled and respond to mouse events. +and allows the icon to be styled and respond to mouse events. SVG elements should be scaled for a 24x24px viewport. The resulting icon can be used as is, or included as a child for other Material-UI components that use icons. From 7f07743308e18c45e004d14dde88166826fb1e2c Mon Sep 17 00:00:00 2001 From: Xuefei Li Date: Wed, 30 May 2018 12:29:15 -0700 Subject: [PATCH 028/182] [ListItem] Fix typings for ListItem (#11645) --- packages/material-ui/src/ListItem/ListItem.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/material-ui/src/ListItem/ListItem.d.ts b/packages/material-ui/src/ListItem/ListItem.d.ts index 0937691fef4762..2b7003c07995a1 100644 --- a/packages/material-ui/src/ListItem/ListItem.d.ts +++ b/packages/material-ui/src/ListItem/ListItem.d.ts @@ -16,6 +16,7 @@ export interface ListItemProps disabled?: boolean; disableGutters?: boolean; divider?: boolean; + focusVisibleClassName?: string; } export type ListItemClassKey = From f7a86ae84f84b7b2c848bbfd83463d586dda3481 Mon Sep 17 00:00:00 2001 From: Christian Dallago Date: Wed, 30 May 2018 17:32:45 -0400 Subject: [PATCH 029/182] [docs] Update README for codemod (#11647) Quick fix in ref to https://github.com/mui-org/material-ui/issues/11369#issuecomment-393200250 : suggest users to perform search+replace --- packages/material-ui-codemod/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/material-ui-codemod/README.md b/packages/material-ui-codemod/README.md index bd72277e72b2db..8632af36b35111 100644 --- a/packages/material-ui-codemod/README.md +++ b/packages/material-ui-codemod/README.md @@ -36,6 +36,13 @@ The diff should look like this: find src -name '*.js' -print | xargs jscodeshift -t node_modules/@material-ui/codemod/lib/v1.0.0/import-path.js ``` +**Notice**: if you are migrating from pre-v1.0, and your imports use `material-ui`, you will need to manually find and replace all references to `material-ui` in your code to `@material-ui/core`. E.g.: +```diff +-import Typography from 'material-ui/Typography'; ++import Typography from '@material-ui/core/Typography'; +``` +Subsequently, you can run the above `find ...` command to flatten your imports. + #### `color-imports` Updates the `color-imports` for the new location of Material-UI color palettes. From f7ecce35edbdf78972a695209adc0f3b90efebbf Mon Sep 17 00:00:00 2001 From: Matt Brookes Date: Wed, 30 May 2018 22:37:01 +0100 Subject: [PATCH 030/182] [Button] Add text and contained variants (#11497) * [Button] Add text and contained variants * Update brittle test * Remove uneeded style from Bootstrap customization demo * Make button borderRadius 4px by default * Fix ContainedVariant demo function name --- .size-limit.js | 2 +- docs/src/modules/components/HomeSteps.js | 2 +- docs/src/pages/demos/badges/SimpleBadge.js | 2 +- docs/src/pages/demos/buttons/ButtonSizes.js | 6 +- .../{RaisedButtons.js => ContainedButtons.js} | 22 +- .../pages/demos/buttons/CustomizedButtons.js | 7 +- .../pages/demos/buttons/IconLabelButtons.js | 10 +- .../{FlatButtons.js => TextButtons.js} | 8 +- docs/src/pages/demos/buttons/buttons.md | 46 ++- .../demos/progress/CircularIntegration.js | 2 +- ...HorizontalLinearAlternativeLabelStepper.js | 2 +- .../demos/steppers/HorizontalLinearStepper.js | 4 +- ...izontalNonLinearAlternativeLabelStepper.js | 6 +- .../steppers/HorizontalNonLinearStepper.js | 4 +- .../HorizontalNonLinearStepperWithError.js | 4 +- .../steppers/SwipeableTextMobileStepper.js | 1 - .../pages/demos/steppers/TextMobileStepper.js | 1 - .../demos/steppers/VerticalLinearStepper.js | 2 +- docs/src/pages/getting-started/usage/usage.md | 2 +- docs/src/pages/guides/api/api.md | 2 +- .../guides/migration-v0x/migration-v0x.md | 2 +- .../pages/utils/popovers/AnchorPlayground.js | 2 +- .../src/pages/utils/popovers/SimplePopover.js | 2 +- .../src/pages/index.js | 2 +- .../src/pages/index.js | 2 +- examples/create-react-app/src/pages/index.js | 2 +- examples/gatsby/src/pages/index.js | 2 +- examples/nextjs/pages/index.js | 2 +- examples/parcel/src/pages/index.js | 2 +- package.json | 1 + packages/material-ui/src/Button/Button.d.ts | 11 +- packages/material-ui/src/Button/Button.js | 44 ++- .../material-ui/src/Button/Button.test.js | 328 +++++++++++++++--- .../src/styles/MuiThemeProvider.test.js | 8 +- pages/api/button.md | 8 +- pages/demos/buttons.js | 12 +- .../tests/Button/MaterialV1Buttons.js | 25 ++ .../tests/Button/MultilineButton.js | 2 +- 38 files changed, 438 insertions(+), 154 deletions(-) rename docs/src/pages/demos/buttons/{RaisedButtons.js => ContainedButtons.js} (52%) rename docs/src/pages/demos/buttons/{FlatButtons.js => TextButtons.js} (86%) create mode 100644 test/regressions/tests/Button/MaterialV1Buttons.js diff --git a/.size-limit.js b/.size-limit.js index 31604b60e7e025..6a215021465abb 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: '94.3 KB', + limit: '94.5 KB', }, { name: 'The main bundle of the docs', diff --git a/docs/src/modules/components/HomeSteps.js b/docs/src/modules/components/HomeSteps.js index edd3a6217a3356..84521dd5bf7c64 100644 --- a/docs/src/modules/components/HomeSteps.js +++ b/docs/src/modules/components/HomeSteps.js @@ -153,7 +153,7 @@ function HomeSteps(props) { import Button from '@material-ui/core/Button'; const App = () => ( - ); diff --git a/docs/src/pages/demos/badges/SimpleBadge.js b/docs/src/pages/demos/badges/SimpleBadge.js index 173a4567ff22cb..19ef84615b7b8e 100644 --- a/docs/src/pages/demos/badges/SimpleBadge.js +++ b/docs/src/pages/demos/badges/SimpleBadge.js @@ -53,7 +53,7 @@ function SimpleBadge(props) { Typography - +
); diff --git a/docs/src/pages/demos/buttons/ButtonSizes.js b/docs/src/pages/demos/buttons/ButtonSizes.js index b350d06facdf62..74916b28ea249e 100644 --- a/docs/src/pages/demos/buttons/ButtonSizes.js +++ b/docs/src/pages/demos/buttons/ButtonSizes.js @@ -37,13 +37,13 @@ function ButtonSizes(props) {
- - -
diff --git a/docs/src/pages/demos/buttons/RaisedButtons.js b/docs/src/pages/demos/buttons/ContainedButtons.js similarity index 52% rename from docs/src/pages/demos/buttons/RaisedButtons.js rename to docs/src/pages/demos/buttons/ContainedButtons.js index dc994c6eef17d8..2dfc20ffdb5d7e 100644 --- a/docs/src/pages/demos/buttons/RaisedButtons.js +++ b/docs/src/pages/demos/buttons/ContainedButtons.js @@ -12,34 +12,34 @@ const styles = theme => ({ }, }); -function RaisedButtons(props) { +function ContainedButtons(props) { const { classes } = props; return (
- - - - - - @@ -47,8 +47,8 @@ function RaisedButtons(props) { ); } -RaisedButtons.propTypes = { +ContainedButtons.propTypes = { classes: PropTypes.object.isRequired, }; -export default withStyles(styles)(RaisedButtons); +export default withStyles(styles)(ContainedButtons); diff --git a/docs/src/pages/demos/buttons/CustomizedButtons.js b/docs/src/pages/demos/buttons/CustomizedButtons.js index a7d63ed7e7f86c..6cb7926b7d9774 100644 --- a/docs/src/pages/demos/buttons/CustomizedButtons.js +++ b/docs/src/pages/demos/buttons/CustomizedButtons.js @@ -24,7 +24,6 @@ const styles = theme => ({ bootstrapRoot: { boxShadow: 'none', textTransform: 'none', - borderRadius: 4, fontSize: 16, padding: '6px 12px', border: '1px solid', @@ -69,19 +68,19 @@ function CustomizedInputs(props) { return (
- - - - - diff --git a/docs/src/pages/demos/buttons/FlatButtons.js b/docs/src/pages/demos/buttons/TextButtons.js similarity index 86% rename from docs/src/pages/demos/buttons/FlatButtons.js rename to docs/src/pages/demos/buttons/TextButtons.js index 073ab78d97c898..c49dcf881cff9f 100644 --- a/docs/src/pages/demos/buttons/FlatButtons.js +++ b/docs/src/pages/demos/buttons/TextButtons.js @@ -12,7 +12,7 @@ const styles = theme => ({ }, }); -function FlatButtons(props) { +function TextButtons(props) { const { classes } = props; return (
@@ -26,7 +26,7 @@ function FlatButtons(props) { -
-
diff --git a/docs/src/pages/demos/steppers/HorizontalLinearStepper.js b/docs/src/pages/demos/steppers/HorizontalLinearStepper.js index d3f8c44e790dc1..01c6fe3352a89e 100644 --- a/docs/src/pages/demos/steppers/HorizontalLinearStepper.js +++ b/docs/src/pages/demos/steppers/HorizontalLinearStepper.js @@ -143,7 +143,7 @@ class HorizontalLinearStepper extends React.Component { {this.isStepOptional(activeStep) && ( ))} diff --git a/docs/src/pages/demos/steppers/HorizontalNonLinearStepper.js b/docs/src/pages/demos/steppers/HorizontalNonLinearStepper.js index ee9836dfc65b98..e1a69cae762878 100644 --- a/docs/src/pages/demos/steppers/HorizontalNonLinearStepper.js +++ b/docs/src/pages/demos/steppers/HorizontalNonLinearStepper.js @@ -148,7 +148,7 @@ class HorizontalNonLinearStepper extends React.Component { Back ))} diff --git a/docs/src/pages/demos/steppers/HorizontalNonLinearStepperWithError.js b/docs/src/pages/demos/steppers/HorizontalNonLinearStepperWithError.js index 7a46b68d8898a4..09b540032f3884 100644 --- a/docs/src/pages/demos/steppers/HorizontalNonLinearStepperWithError.js +++ b/docs/src/pages/demos/steppers/HorizontalNonLinearStepperWithError.js @@ -154,7 +154,7 @@ class HorizontalNonLinearStepperWithError extends React.Component { {this.isStepOptional(activeStep) && ( ); diff --git a/docs/src/pages/guides/api/api.md b/docs/src/pages/guides/api/api.md index 1741398b320615..88b54510322c67 100644 --- a/docs/src/pages/guides/api/api.md +++ b/docs/src/pages/guides/api/api.md @@ -126,7 +126,7 @@ For example, let's take a button that has different types. Each option has its p ``` This API is more verbose: - ` { example project -
diff --git a/examples/create-react-app-with-jss/src/pages/index.js b/examples/create-react-app-with-jss/src/pages/index.js index 9a26bdde323498..3007bc046ac48d 100644 --- a/examples/create-react-app-with-jss/src/pages/index.js +++ b/examples/create-react-app-with-jss/src/pages/index.js @@ -57,7 +57,7 @@ class Index extends React.Component { example project -
diff --git a/examples/create-react-app/src/pages/index.js b/examples/create-react-app/src/pages/index.js index 9a26bdde323498..3007bc046ac48d 100644 --- a/examples/create-react-app/src/pages/index.js +++ b/examples/create-react-app/src/pages/index.js @@ -57,7 +57,7 @@ class Index extends React.Component { example project -
diff --git a/examples/gatsby/src/pages/index.js b/examples/gatsby/src/pages/index.js index 9a26bdde323498..3007bc046ac48d 100644 --- a/examples/gatsby/src/pages/index.js +++ b/examples/gatsby/src/pages/index.js @@ -57,7 +57,7 @@ class Index extends React.Component { example project -
diff --git a/examples/nextjs/pages/index.js b/examples/nextjs/pages/index.js index 365f74826f36e9..34a48257b7de18 100644 --- a/examples/nextjs/pages/index.js +++ b/examples/nextjs/pages/index.js @@ -57,7 +57,7 @@ class Index extends React.Component { example project -
diff --git a/examples/parcel/src/pages/index.js b/examples/parcel/src/pages/index.js index 9a26bdde323498..3007bc046ac48d 100644 --- a/examples/parcel/src/pages/index.js +++ b/examples/parcel/src/pages/index.js @@ -57,7 +57,7 @@ class Index extends React.Component { example project - diff --git a/package.json b/package.json index bdf9c0111e3688..d5997618696cca 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "docs:size-why": "DOCS_STATS_ENABLED=true yarn docs:build", "docs:build-sw": "babel-node ./docs/scripts/buildServiceWorker.js", "lint": "eslint . --cache && echo \"eslint: no lint errors\"", + "lint:fix": "eslint . --cache --fix && echo \"eslint: no lint errors\"", "prettier": "find . -name \"*.js\" -o -name \"*.d.ts\" -o -name \"*.tsx\" | grep -v -f .eslintignore | xargs prettier --write", "size": "size-limit", "size:why": "size-limit --why packages/material-ui/build/index.js", diff --git a/packages/material-ui/src/Button/Button.d.ts b/packages/material-ui/src/Button/Button.d.ts index 8b2e8687954200..a065f8348ea030 100644 --- a/packages/material-ui/src/Button/Button.d.ts +++ b/packages/material-ui/src/Button/Button.d.ts @@ -13,19 +13,26 @@ export interface ButtonProps extends StandardProps ({ minWidth: theme.spacing.unit * 11, minHeight: 36, padding: `${theme.spacing.unit}px ${theme.spacing.unit * 2}px`, - borderRadius: 2, + borderRadius: 4, color: theme.palette.text.primary, transition: theme.transitions.create(['background-color', 'box-shadow'], { duration: theme.transitions.duration.short, @@ -42,7 +42,7 @@ export const styles = theme => ({ alignItems: 'inherit', justifyContent: 'inherit', }, - flatPrimary: { + textPrimary: { color: theme.palette.primary.main, '&:hover': { backgroundColor: fade(theme.palette.primary.main, theme.palette.action.hoverOpacity), @@ -52,7 +52,7 @@ export const styles = theme => ({ }, }, }, - flatSecondary: { + textSecondary: { color: theme.palette.secondary.main, '&:hover': { backgroundColor: fade(theme.palette.secondary.main, theme.palette.action.hoverOpacity), @@ -62,16 +62,18 @@ export const styles = theme => ({ }, }, }, + flat: {}, + flatPrimary: {}, + flatSecondary: {}, outlined: { border: `1px solid ${ theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)' }`, - borderRadius: 4, }, colorInherit: { color: 'inherit', }, - raised: { + contained: { color: theme.palette.getContrastText(theme.palette.grey[300]), backgroundColor: theme.palette.grey[300], boxShadow: theme.shadows[2], @@ -97,7 +99,7 @@ export const styles = theme => ({ }, }, }, - raisedPrimary: { + containedPrimary: { color: theme.palette.primary.contrastText, backgroundColor: theme.palette.primary.main, '&:hover': { @@ -108,7 +110,7 @@ export const styles = theme => ({ }, }, }, - raisedSecondary: { + containedSecondary: { color: theme.palette.secondary.contrastText, backgroundColor: theme.palette.secondary.main, '&:hover': { @@ -119,6 +121,9 @@ export const styles = theme => ({ }, }, }, + raised: {}, + raisedPrimary: {}, + raisedSecondary: {}, focusVisible: {}, disabled: {}, fab: { @@ -171,19 +176,26 @@ function Button(props) { } = props; const fab = variant === 'fab'; - const raised = variant === 'raised'; - const flat = !raised && !fab; + const contained = variant === 'contained' || variant === 'raised'; + const text = !contained && !fab; const className = classNames( classes.root, { - [classes.raised]: raised || fab, + [classes.contained]: contained || fab, [classes.fab]: fab, [classes.mini]: fab && mini, [classes.colorInherit]: color === 'inherit', - [classes.flatPrimary]: flat && color === 'primary', - [classes.flatSecondary]: flat && color === 'secondary', - [classes.raisedPrimary]: !flat && color === 'primary', - [classes.raisedSecondary]: !flat && color === 'secondary', + [classes.textPrimary]: text && color === 'primary', + [classes.textSecondary]: text && color === 'secondary', + [classes.flat]: text, + [classes.flatPrimary]: text && color === 'primary', + [classes.flatSecondary]: text && color === 'secondary', + [classes.containedPrimary]: !text && color === 'primary', + [classes.containedSecondary]: !text && color === 'secondary', + [classes.raised]: contained || fab, + [classes.raisedPrimary]: (contained || fab) && color === 'primary', + [classes.raisedSecondary]: (contained || fab) && color === 'secondary', + [classes.text]: variant === 'text', [classes.outlined]: variant === 'outlined', [classes[`size${capitalize(size)}`]]: size !== 'medium', [classes.disabled]: disabled, @@ -270,7 +282,7 @@ Button.propTypes = { /** * The type of button. */ - variant: PropTypes.oneOf(['flat', 'outlined', 'raised', 'fab']), + variant: PropTypes.oneOf(['text', 'flat', 'outlined', 'contained', 'raised', 'fab']), }; Button.defaultProps = { @@ -282,7 +294,7 @@ Button.defaultProps = { mini: false, size: 'medium', type: 'button', - variant: 'flat', + variant: 'text', }; export default withStyles(styles, { name: 'MuiButton' })(Button); diff --git a/packages/material-ui/src/Button/Button.test.js b/packages/material-ui/src/Button/Button.test.js index ae87d0a4b09c11..dbdc334cf45db3 100644 --- a/packages/material-ui/src/Button/Button.test.js +++ b/packages/material-ui/src/Button/Button.test.js @@ -26,62 +26,218 @@ describe('); - assert.strictEqual(wrapper.hasClass(classes.root), true); - assert.strictEqual(wrapper.hasClass(classes.raised), false, 'should not have the raised class'); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.flat), true, 'should have the flat class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); + assert.strictEqual( + wrapper.hasClass(classes.textPrimary), + false, + 'should not have the textPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.textSecondary), + false, + 'should not have the textSecondary class', + ); assert.strictEqual( wrapper.hasClass(classes.flatPrimary), false, - 'should not have the primary class', + 'should not have the flatPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.flatSecondary), + false, + 'should not have the flatSecondary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.contained), + false, + 'should not have the contained class', + ); + assert.strictEqual( + wrapper.hasClass(classes.containedPrimary), + false, + 'should not have the containedPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.containedSecondary), + false, + 'should not have the containedSecondary class', + ); + assert.strictEqual(wrapper.hasClass(classes.raised), false, 'should not have the raised class'); + assert.strictEqual( + wrapper.hasClass(classes.raisedPrimary), + false, + 'should not have the raisedPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.outlined), + false, + 'should not have the outlined class', ); - assert.strictEqual(wrapper.hasClass(classes.flatSecondary), false); }); it('should render the custom className and the root class', () => { const wrapper = shallow(); assert.strictEqual(wrapper.is('.test-class-name'), true, 'should pass the test className'); - assert.strictEqual(wrapper.hasClass(classes.root), true); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); }); it('should render a primary button', () => { const wrapper = shallow(); - assert.strictEqual(wrapper.hasClass(classes.root), true); - assert.strictEqual(wrapper.hasClass(classes.raised), false, 'should have the raised class'); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.flat), true, 'should have the flat class'); + assert.strictEqual(wrapper.hasClass(classes.contained), false, 'should have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); + assert.strictEqual( + wrapper.hasClass(classes.textPrimary), + true, + 'should have the textPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.textSecondary), + false, + 'should not have the textSecondary class', + ); assert.strictEqual( wrapper.hasClass(classes.flatPrimary), true, - 'should have the primary class', + 'should have the flatPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.flatSecondary), + false, + 'should not have the flatSecondary class', ); - assert.strictEqual(wrapper.hasClass(classes.flatSecondary), false); }); - it('should render an secondary button', () => { + it('should render a secondary button', () => { const wrapper = shallow(); - assert.strictEqual(wrapper.hasClass(classes.root), true); - assert.strictEqual(wrapper.hasClass(classes.raised), false, 'should have the raised class'); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.flat), true, 'should have the flat class'); + assert.strictEqual(wrapper.hasClass(classes.contained), false, 'should have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); + assert.strictEqual( + wrapper.hasClass(classes.textPrimary), + false, + 'should not have the textPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.textSecondary), + true, + 'should have the textSecondary class', + ); assert.strictEqual( wrapper.hasClass(classes.flatPrimary), false, + 'should not have the flatPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.flatSecondary), + true, + 'should have the flatSecondary class', + ); + }); + + it('should render a contained button', () => { + const wrapper = shallow(); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual( + wrapper.hasClass(classes.contained), + true, + 'should have the contained class', + ); + assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); + assert.strictEqual( + wrapper.hasClass(classes.textPrimary), + false, + 'should not have the textPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.textSecondary), + false, + 'should not have the textSecondary class', + ); + }); + + it('should render a contained primary button', () => { + const wrapper = shallow( + , + ); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual( + wrapper.hasClass(classes.contained), + true, + 'should have the contained class', + ); + assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); + assert.strictEqual( + wrapper.hasClass(classes.containedPrimary), + true, + 'should have the containdPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.containedSecondary), + false, + 'should not have the containedSecondary class', + ); + }); + + it('should render a contained secondary button', () => { + const wrapper = shallow( + , + ); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.contained), true, 'should have the raised class'); + assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); + assert.strictEqual( + wrapper.hasClass(classes.containedPrimary), + false, 'should not have the primary class', ); - assert.strictEqual(wrapper.hasClass(classes.flatSecondary), true); + assert.strictEqual( + wrapper.hasClass(classes.containedSecondary), + true, + 'should have the secondary class', + ); }); it('should render a raised button', () => { const wrapper = shallow(); - assert.strictEqual(wrapper.hasClass(classes.root), true); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual( + wrapper.hasClass(classes.contained), + true, + 'should have the contained class', + ); assert.strictEqual(wrapper.hasClass(classes.raised), true, 'should have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); assert.strictEqual( - wrapper.hasClass(classes.flatPrimary), + wrapper.hasClass(classes.containedPrimary), false, - 'should not have the primary class', + 'should not have the containedPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.raisedPrimary), + false, + 'should not have the raisedPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.containedSecondary), + false, + 'should not have the containedSecondary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.raisedSecondary), + false, + 'should not have the raisedSecondary class', ); - assert.strictEqual(wrapper.hasClass(classes.flatSecondary), false); }); it('should render a raised primary button', () => { @@ -90,15 +246,34 @@ describe(', ); - assert.strictEqual(wrapper.hasClass(classes.root), true); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual( + wrapper.hasClass(classes.contained), + true, + 'should have the contained class', + ); assert.strictEqual(wrapper.hasClass(classes.raised), true, 'should have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); + assert.strictEqual( + wrapper.hasClass(classes.containedPrimary), + true, + 'should have the containedPrimary class', + ); assert.strictEqual( wrapper.hasClass(classes.raisedPrimary), true, - 'should not have the primary class', + 'should have the raisedPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.containedSecondary), + false, + 'should not have the containedSecondary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.raisedSecondary), + false, + 'should not have the raisedSecondary class', ); - assert.strictEqual(wrapper.hasClass(classes.raisedSecondary), false); }); it('should render a raised secondary button', () => { @@ -107,25 +282,46 @@ describe(', ); - assert.strictEqual(wrapper.hasClass(classes.root), true); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual( + wrapper.hasClass(classes.contained), + true, + 'should have the contained class', + ); assert.strictEqual(wrapper.hasClass(classes.raised), true, 'should have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); + assert.strictEqual( + wrapper.hasClass(classes.containedPrimary), + false, + 'should not have the containedPrimary class', + ); assert.strictEqual( wrapper.hasClass(classes.raisedPrimary), false, - 'should not have the primary class', + 'should not have the raisedPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.containedSecondary), + true, + 'should have the containedSecondary class', ); assert.strictEqual( wrapper.hasClass(classes.raisedSecondary), true, - 'should have the secondary class', + 'should have the raisedSecondary class', ); }); it('should render an outlined button', () => { const wrapper = shallow(); - assert.strictEqual(wrapper.hasClass(classes.root), true); + assert.strictEqual(wrapper.hasClass(classes.root, 'should have the root class'), true); + assert.strictEqual(wrapper.hasClass(classes.flat), true, 'should have the flat class'); assert.strictEqual(wrapper.hasClass(classes.outlined), true, 'should have the outlined class'); + assert.strictEqual( + wrapper.hasClass(classes.contained), + false, + 'should not have the contained class', + ); assert.strictEqual(wrapper.hasClass(classes.raised), false, 'should not have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); }); @@ -136,12 +332,18 @@ describe(', ); - assert.strictEqual(wrapper.hasClass(classes.root), true); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.flat), true, 'should have the flat class'); assert.strictEqual(wrapper.hasClass(classes.outlined), true, 'should have the outlined class'); assert.strictEqual( - wrapper.hasClass(classes.flatPrimary), + wrapper.hasClass(classes.textPrimary), true, - 'should have the flatPrimary class', + 'should have the textPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.contained), + false, + 'should not have the contained class', ); assert.strictEqual(wrapper.hasClass(classes.raised), false, 'should not have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); @@ -153,12 +355,18 @@ describe(', ); - assert.strictEqual(wrapper.hasClass(classes.root), true); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.flat), true, 'should have the flat class'); assert.strictEqual(wrapper.hasClass(classes.outlined), true, 'should have the outlined class'); assert.strictEqual( - wrapper.hasClass(classes.flatSecondary), + wrapper.hasClass(classes.textSecondary), true, - 'should have the flatSecondary class', + 'should have the textSecondary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.contained), + false, + 'should not have the contained class', ); assert.strictEqual(wrapper.hasClass(classes.raised), false, 'should not have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), false, 'should not have the fab class'); @@ -166,15 +374,24 @@ describe('); - assert.strictEqual(wrapper.hasClass(classes.root), true); - assert.strictEqual(wrapper.hasClass(classes.raised), true, 'should have the raised class'); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual( + wrapper.hasClass(classes.contained), + true, + 'should have the contained class', + ); assert.strictEqual(wrapper.hasClass(classes.fab), true, 'should have the fab class'); + assert.strictEqual(wrapper.hasClass(classes.flat), false, 'should not have the flat class'); assert.strictEqual( - wrapper.hasClass(classes.flatPrimary), + wrapper.hasClass(classes.textPrimary), false, - 'should not have the primary class', + 'should not have the textPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.textSecondary), + false, + 'should not have the textSecondary class', ); - assert.strictEqual(wrapper.hasClass(classes.flatSecondary), false); }); it('should render a mini floating action button', () => { @@ -183,16 +400,20 @@ describe(', ); - assert.strictEqual(wrapper.hasClass(classes.root), true); - assert.strictEqual(wrapper.hasClass(classes.raised), true, 'should have the raised class'); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.contained), true, 'should have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), true, 'should have the fab class'); assert.strictEqual(wrapper.hasClass(classes.mini), true, 'should have the mini class'); assert.strictEqual( - wrapper.hasClass(classes.flatPrimary), + wrapper.hasClass(classes.textPrimary), false, - 'should not have the primary class', + 'should not have the textPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.textSecondary), + false, + 'should not have the textSecondary class', ); - assert.strictEqual(wrapper.hasClass(classes.flatSecondary), false); }); it('should render a primary floating action button', () => { @@ -201,15 +422,18 @@ describe(', ); - assert.strictEqual(wrapper.hasClass(classes.root), true); - assert.strictEqual(wrapper.hasClass(classes.raised), true, 'should have the raised class'); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.contained), true, 'should have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), true, 'should have the fab class'); assert.strictEqual( - wrapper.hasClass(classes.raisedPrimary), + wrapper.hasClass(classes.containedPrimary), true, - 'should have the primary class', + 'should have the containedPrimary class', + ); + assert.strictEqual( + wrapper.hasClass(classes.containedSecondary, 'should have the containedPrimary class'), + false, ); - assert.strictEqual(wrapper.hasClass(classes.raisedSecondary), false); }); it('should render an secondary floating action button', () => { @@ -218,18 +442,18 @@ describe(', ); - assert.strictEqual(wrapper.hasClass(classes.root), true); - assert.strictEqual(wrapper.hasClass(classes.raised), true, 'should have the raised class'); + assert.strictEqual(wrapper.hasClass(classes.root), true, 'should have the root class'); + assert.strictEqual(wrapper.hasClass(classes.contained), true, 'should have the raised class'); assert.strictEqual(wrapper.hasClass(classes.fab), true, 'should have the fab class'); assert.strictEqual( - wrapper.hasClass(classes.raisedPrimary), + wrapper.hasClass(classes.containedPrimary), false, - 'should not have the primary class', + 'should not have the containedPrimary class', ); assert.strictEqual( - wrapper.hasClass(classes.raisedSecondary), + wrapper.hasClass(classes.containedSecondary), true, - 'should have the secondary class', + 'should have the containedSecondary class', ); }); diff --git a/packages/material-ui/src/styles/MuiThemeProvider.test.js b/packages/material-ui/src/styles/MuiThemeProvider.test.js index 10f9db2c914f01..5f5b1de12cc0fe 100644 --- a/packages/material-ui/src/styles/MuiThemeProvider.test.js +++ b/packages/material-ui/src/styles/MuiThemeProvider.test.js @@ -86,13 +86,13 @@ describe('', () => { assert.notStrictEqual(markup.match('Hello World'), null); assert.strictEqual(sheetsRegistry.registry.length, 3); assert.strictEqual(sheetsRegistry.toString().length > 4000, true); - assert.strictEqual(sheetsRegistry.registry[0].classes.root, 'MuiTouchRipple-root-20'); + assert.strictEqual(sheetsRegistry.registry[0].classes.root, 'MuiTouchRipple-root-26'); assert.deepEqual( sheetsRegistry.registry[1].classes, { - disabled: 'MuiButtonBase-disabled-18', - focusVisible: 'MuiButtonBase-focusVisible-19', - root: 'MuiButtonBase-root-17', + disabled: 'MuiButtonBase-disabled-24', + focusVisible: 'MuiButtonBase-focusVisible-25', + root: 'MuiButtonBase-root-23', }, 'the class names should be deterministic', ); diff --git a/pages/api/button.md b/pages/api/button.md index f929ba12660356..da480f3d856277 100644 --- a/pages/api/button.md +++ b/pages/api/button.md @@ -23,7 +23,7 @@ filename: /packages/material-ui/src/Button/Button.js | href | string | | The URL to link to when the button is clicked. If defined, an `a` element will be used as the root node. | | mini | bool | false | If `true`, and `variant` is `'fab'`, will use mini floating action button styling. | | size | enum: 'small' |
 'medium' |
 'large'
| 'medium' | The size of the button. `small` is equivalent to the dense button styling. | -| variant | enum: 'flat' |
 'outlined' |
 'raised' |
 'fab'
| 'flat' | The type of button. | +| variant | enum: 'text', 'flat', 'outlined', 'contained', 'raised', 'fab'
| 'text' | The type of button. | Any other properties supplied will be spread to the root element ([ButtonBase](/api/button-base)). @@ -33,10 +33,16 @@ You can override all the class names injected by Material-UI thanks to the `clas This property accepts the following keys: - `root` - `label` +- `textPrimary` +- `textSecondary` +- `flat` - `flatPrimary` - `flatSecondary` - `outlined` - `colorInherit` +- `contained` +- `containedPrimary` +- `containedSecondary` - `raised` - `raisedPrimary` - `raisedSecondary` diff --git a/pages/demos/buttons.js b/pages/demos/buttons.js index 41d9f853c785a5..823c06fd06a243 100644 --- a/pages/demos/buttons.js +++ b/pages/demos/buttons.js @@ -8,11 +8,11 @@ function Page() { + + + + + + + + ); +} diff --git a/test/regressions/tests/Button/MultilineButton.js b/test/regressions/tests/Button/MultilineButton.js index 5c7986d78eaf7a..a70893d0cc9592 100644 --- a/test/regressions/tests/Button/MultilineButton.js +++ b/test/regressions/tests/Button/MultilineButton.js @@ -5,7 +5,7 @@ import Button from '@material-ui/core/Button'; export default function MultilineButton() { return ( - - Age + Age } > @@ -71,6 +72,7 @@ class NativeSelects extends React.Component { @@ -85,7 +87,7 @@ class NativeSelects extends React.Component { } + input={} > @@ -103,6 +105,7 @@ class NativeSelects extends React.Component { } > Name - }> + }> @@ -126,6 +129,22 @@ class NativeSelects extends React.Component { Uncontrolled + + + + + + + + Placeholder + ); } diff --git a/docs/src/pages/demos/selects/SimpleSelect.js b/docs/src/pages/demos/selects/SimpleSelect.js index ad0c4ff7cc9322..ca9cd1320b1163 100644 --- a/docs/src/pages/demos/selects/SimpleSelect.js +++ b/docs/src/pages/demos/selects/SimpleSelect.js @@ -139,11 +139,11 @@ class SimpleSelect extends React.Component { Read only - Age + Age } autoWidth > @@ -155,6 +155,23 @@ class SimpleSelect extends React.Component { Auto width + + + Placeholder + ); } diff --git a/packages/material-ui-lab/src/Slider/Slider.js b/packages/material-ui-lab/src/Slider/Slider.js index b5fa713c08fcd4..4c4a5cfc865301 100644 --- a/packages/material-ui-lab/src/Slider/Slider.js +++ b/packages/material-ui-lab/src/Slider/Slider.js @@ -200,6 +200,8 @@ function preventPageScrolling(event) { } class Slider extends React.Component { + state = { currentState: 'initial' }; + static getDerivedStateFromProps(nextProps, prevState) { if (nextProps.disabled) { return { currentState: 'disabled' }; @@ -212,8 +214,6 @@ class Slider extends React.Component { return null; } - state = { currentState: 'initial' }; - componentDidMount() { if (this.container) { this.container.addEventListener('touchstart', preventPageScrolling, { passive: false }); diff --git a/packages/material-ui/src/ButtonBase/ButtonBase.js b/packages/material-ui/src/ButtonBase/ButtonBase.js index f8a18bb83660f6..8b24dee831c04b 100644 --- a/packages/material-ui/src/ButtonBase/ButtonBase.js +++ b/packages/material-ui/src/ButtonBase/ButtonBase.js @@ -50,6 +50,8 @@ export const styles = { * It contains a load of style reset and some focus/ripple logic. */ class ButtonBase extends React.Component { + state = {}; + static getDerivedStateFromProps(nextProps, prevState) { if (typeof prevState.focusVisible === 'undefined') { return { @@ -72,8 +74,6 @@ class ButtonBase extends React.Component { }; } - state = {}; - componentDidMount() { this.button = ReactDOM.findDOMNode(this); listenForFocusKeys(ownerWindow(this.button)); diff --git a/packages/material-ui/src/Modal/Modal.js b/packages/material-ui/src/Modal/Modal.js index 1188af231ccc34..debb506e400138 100644 --- a/packages/material-ui/src/Modal/Modal.js +++ b/packages/material-ui/src/Modal/Modal.js @@ -42,6 +42,14 @@ export const styles = theme => ({ }); class Modal extends React.Component { + constructor(props) { + super(props); + + this.state = { + exited: !this.props.open, + }; + } + static getDerivedStateFromProps(nextProps) { if (nextProps.open) { return { @@ -57,14 +65,6 @@ class Modal extends React.Component { return null; } - constructor(props) { - super(props); - - this.state = { - exited: !this.props.open, - }; - } - componentDidMount() { this.mounted = true; if (this.props.open) { diff --git a/packages/material-ui/src/Select/SelectInput.js b/packages/material-ui/src/Select/SelectInput.js index bb1d26bd48de6c..5b3b835c05018d 100644 --- a/packages/material-ui/src/Select/SelectInput.js +++ b/packages/material-ui/src/Select/SelectInput.js @@ -270,7 +270,7 @@ class SelectInput extends React.Component { > {/* So the vertical align positioning algorithm quicks in. */} {/* eslint-disable-next-line react/no-danger */} - {display || } + {display || } { }; class Snackbar extends React.Component { + state = {}; + static getDerivedStateFromProps(nextProps, prevState) { if (typeof prevState.exited === 'undefined') { return { @@ -103,8 +105,6 @@ class Snackbar extends React.Component { return null; } - state = {}; - componentDidMount() { if (this.props.open) { this.setAutoHideTimer(); diff --git a/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js b/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js index 67cfd7b7fa583a..dbf2c5843c659a 100644 --- a/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js +++ b/packages/material-ui/src/SwipeableDrawer/SwipeableDrawer.js @@ -25,6 +25,8 @@ export function reset() { } class SwipeableDrawer extends React.Component { + state = {}; + static getDerivedStateFromProps(nextProps, prevState) { if (typeof prevState.maybeSwiping === 'undefined') { return { @@ -45,8 +47,6 @@ class SwipeableDrawer extends React.Component { }; } - state = {}; - componentDidMount() { if (this.props.variant === 'temporary') { this.listenTouchStart(); diff --git a/yarn.lock b/yarn.lock index ff79c6c3c54afb..399107a72340c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1080,30 +1080,72 @@ debug "^3.1.0" webassemblyjs "1.4.3" +"@webassemblyjs/ast@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.9.tgz#b2770182678691ab4949d593105c15d4074fedb6" + dependencies: + "@webassemblyjs/helper-module-context" "1.5.9" + "@webassemblyjs/helper-wasm-bytecode" "1.5.9" + "@webassemblyjs/wast-parser" "1.5.9" + debug "^3.1.0" + mamacro "^0.0.3" + "@webassemblyjs/floating-point-hex-parser@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.4.3.tgz#f5aee4c376a717c74264d7bacada981e7e44faad" +"@webassemblyjs/floating-point-hex-parser@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.9.tgz#ee56243f6ba30781ff6f92fe7f1c377255219a7c" + +"@webassemblyjs/helper-api-error@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.9.tgz#c80e204afe1ae102c23b0357f1ec25aeb61022a2" + "@webassemblyjs/helper-buffer@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.4.3.tgz#0434b55958519bf503697d3824857b1dea80b729" dependencies: debug "^3.1.0" +"@webassemblyjs/helper-buffer@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.9.tgz#90d99afcb0fdc1ee11bc403894f3ae37cd926a81" + dependencies: + debug "^3.1.0" + "@webassemblyjs/helper-code-frame@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.4.3.tgz#f1349ca3e01a8e29ee2098c770773ef97af43641" dependencies: "@webassemblyjs/wast-printer" "1.4.3" +"@webassemblyjs/helper-code-frame@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.9.tgz#b56ac06a39c3e1cfefcc421ade1ee471a738a570" + dependencies: + "@webassemblyjs/wast-printer" "1.5.9" + "@webassemblyjs/helper-fsm@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.4.3.tgz#65a921db48fb43e868f17b27497870bdcae22b79" +"@webassemblyjs/helper-fsm@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.9.tgz#8f996268eb07ee6728130a9e97fa3aac32772454" + +"@webassemblyjs/helper-module-context@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.9.tgz#69e2eea310f755a0b750b84f8af59f890f2046ac" + "@webassemblyjs/helper-wasm-bytecode@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.4.3.tgz#0e5b4b5418e33f8a26e940b7809862828c3721a5" +"@webassemblyjs/helper-wasm-bytecode@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.9.tgz#467ba0f9e4d0e4a48bf1c5107b9f4abe3ca1171a" + "@webassemblyjs/helper-wasm-section@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.4.3.tgz#9ceedd53a3f152c3412e072887ade668d0b1acbf" @@ -1114,12 +1156,34 @@ "@webassemblyjs/wasm-gen" "1.4.3" debug "^3.1.0" +"@webassemblyjs/helper-wasm-section@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.9.tgz#aec9486ab5d56e3cb5252a7ed88777b6792ac624" + dependencies: + "@webassemblyjs/ast" "1.5.9" + "@webassemblyjs/helper-buffer" "1.5.9" + "@webassemblyjs/helper-wasm-bytecode" "1.5.9" + "@webassemblyjs/wasm-gen" "1.5.9" + debug "^3.1.0" + +"@webassemblyjs/ieee754@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.9.tgz#846856ece040c7debd5b5645b319c26523613bcf" + dependencies: + ieee754 "^1.1.11" + "@webassemblyjs/leb128@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.4.3.tgz#5a5e5949dbb5adfe3ae95664d0439927ac557fb8" dependencies: leb "^0.3.0" +"@webassemblyjs/leb128@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.9.tgz#7249443a0fd7574a7e3c1c39532535c735390bbc" + dependencies: + leb "^0.3.0" + "@webassemblyjs/validation@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/validation/-/validation-1.4.3.tgz#9e66c9b3079d7bbcf2070c1bf52a54af2a09aac9" @@ -1140,6 +1204,20 @@ "@webassemblyjs/wast-printer" "1.4.3" debug "^3.1.0" +"@webassemblyjs/wasm-edit@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.9.tgz#9b8e054b2d305a7e0528088571c95904bd73df48" + dependencies: + "@webassemblyjs/ast" "1.5.9" + "@webassemblyjs/helper-buffer" "1.5.9" + "@webassemblyjs/helper-wasm-bytecode" "1.5.9" + "@webassemblyjs/helper-wasm-section" "1.5.9" + "@webassemblyjs/wasm-gen" "1.5.9" + "@webassemblyjs/wasm-opt" "1.5.9" + "@webassemblyjs/wasm-parser" "1.5.9" + "@webassemblyjs/wast-printer" "1.5.9" + debug "^3.1.0" + "@webassemblyjs/wasm-gen@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.4.3.tgz#8553164d0154a6be8f74d653d7ab355f73240aa4" @@ -1148,6 +1226,15 @@ "@webassemblyjs/helper-wasm-bytecode" "1.4.3" "@webassemblyjs/leb128" "1.4.3" +"@webassemblyjs/wasm-gen@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.9.tgz#85e07c047fab917e06b18dee4d16342a2fd3c59c" + dependencies: + "@webassemblyjs/ast" "1.5.9" + "@webassemblyjs/helper-wasm-bytecode" "1.5.9" + "@webassemblyjs/ieee754" "1.5.9" + "@webassemblyjs/leb128" "1.5.9" + "@webassemblyjs/wasm-opt@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.4.3.tgz#26c7a23bfb136aa405b1d3410e63408ec60894b8" @@ -1158,6 +1245,16 @@ "@webassemblyjs/wasm-parser" "1.4.3" debug "^3.1.0" +"@webassemblyjs/wasm-opt@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.9.tgz#ccac17c41a044c167bc95d3e8645cf889a137ce5" + dependencies: + "@webassemblyjs/ast" "1.5.9" + "@webassemblyjs/helper-buffer" "1.5.9" + "@webassemblyjs/wasm-gen" "1.5.9" + "@webassemblyjs/wasm-parser" "1.5.9" + debug "^3.1.0" + "@webassemblyjs/wasm-parser@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.4.3.tgz#7ddd3e408f8542647ed612019cfb780830993698" @@ -1168,6 +1265,17 @@ "@webassemblyjs/wasm-parser" "1.4.3" webassemblyjs "1.4.3" +"@webassemblyjs/wasm-parser@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.9.tgz#ddab84da4957b64aafbc61e4ab706cc667082f32" + dependencies: + "@webassemblyjs/ast" "1.5.9" + "@webassemblyjs/helper-api-error" "1.5.9" + "@webassemblyjs/helper-wasm-bytecode" "1.5.9" + "@webassemblyjs/ieee754" "1.5.9" + "@webassemblyjs/leb128" "1.5.9" + "@webassemblyjs/wasm-parser" "1.5.9" + "@webassemblyjs/wast-parser@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.4.3.tgz#3250402e2c5ed53dbe2233c9de1fe1f9f0d51745" @@ -1179,6 +1287,18 @@ long "^3.2.0" webassemblyjs "1.4.3" +"@webassemblyjs/wast-parser@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.9.tgz#193d24ccf4742a5f8f1915936680ab2314011df2" + dependencies: + "@webassemblyjs/ast" "1.5.9" + "@webassemblyjs/floating-point-hex-parser" "1.5.9" + "@webassemblyjs/helper-api-error" "1.5.9" + "@webassemblyjs/helper-code-frame" "1.5.9" + "@webassemblyjs/helper-fsm" "1.5.9" + long "^3.2.0" + mamacro "^0.0.3" + "@webassemblyjs/wast-printer@1.4.3": version "1.4.3" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.4.3.tgz#3d59aa8d0252d6814a3ef4e6d2a34c9ded3904e0" @@ -1187,6 +1307,14 @@ "@webassemblyjs/wast-parser" "1.4.3" long "^3.2.0" +"@webassemblyjs/wast-printer@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.9.tgz#16605d90a481c01a130b7c4edeb2bce503787eb4" + dependencies: + "@webassemblyjs/ast" "1.5.9" + "@webassemblyjs/wast-parser" "1.5.9" + long "^3.2.0" + JSONStream@^1.0.4: version "1.3.3" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.3.tgz#27b4b8fbbfeab4e71bcf551e7f27be8d952239bf" @@ -1241,7 +1369,11 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0, acorn@^5.5.3: +acorn@^5.0.0, acorn@^5.3.0: + version "5.6.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.6.1.tgz#c9e50c3e3717cf897f1b071ceadbb543bbc0a8d4" + +acorn@^5.5.0, acorn@^5.5.3: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" @@ -2634,8 +2766,8 @@ browserstacktunnel-wrapper@~2.0.1: unzip "~0.1.9" buffer-from@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" buffer-indexof-polyfill@~1.0.0: version "1.0.1" @@ -2804,8 +2936,8 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000846" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000846.tgz#d9c86f914738db4da098eeded997413c44561bd2" + version "1.0.30000848" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000848.tgz#e149c981c72aa20439e3bc12c7cf8b3f7e1237c6" caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000847: version "1.0.30000847" @@ -3471,7 +3603,7 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cosmiconfig@^5.0.4: +cosmiconfig@^5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.5.tgz#a809e3c2306891ce17ab70359dc8bdf661fe2cd0" dependencies: @@ -3981,7 +4113,7 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.0, doctrine@^2.0.2, doctrine@^2.1.0: +doctrine@^2.0.0, doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: @@ -4285,7 +4417,7 @@ error-stack-parser@^2.0.0: dependencies: stackframe "^1.0.3" -es-abstract@^1.6.1, es-abstract@^1.7.0: +es-abstract@^1.6.1: version "1.11.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" dependencies: @@ -4295,6 +4427,16 @@ es-abstract@^1.6.1, es-abstract@^1.7.0: is-callable "^1.1.3" is-regex "^1.0.4" +es-abstract@^1.7.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" @@ -4491,13 +4633,13 @@ eslint-plugin-prettier@^2.3.1: jest-docblock "^21.0.0" eslint-plugin-react@^7.4.0: - version "7.8.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.8.2.tgz#e95c9c47fece55d2303d1a67c9d01b930b88a51d" + version "7.9.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.9.1.tgz#101aadd15e7c7b431ed025303ac7b421a8e3dc15" dependencies: - doctrine "^2.0.2" - has "^1.0.1" + doctrine "^2.1.0" + has "^1.0.2" jsx-ast-utils "^2.0.1" - prop-types "^15.6.0" + prop-types "^15.6.1" eslint-plugin-spellcheck@^0.0.10: version "0.0.10" @@ -5207,7 +5349,7 @@ ftp@~0.3.10: readable-stream "1.1.x" xregexp "2.0.0" -function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: +function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -5618,11 +5760,11 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" +has@^1.0.1, has@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: - function-bind "^1.0.2" + function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" @@ -5860,7 +6002,7 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" -ieee754@^1.1.4: +ieee754@^1.1.11, ieee754@^1.1.4: version "1.1.11" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" @@ -6462,7 +6604,14 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.9.0, js-yaml@^3.9.1: +js-yaml@^3.9.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: @@ -7141,6 +7290,10 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -7870,8 +8023,8 @@ nwsapi@^2.0.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.1.tgz#a50d59a2dcb14b6931401171713ced2d0eb3468f" nyc@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-12.0.1.tgz#909cdd932eb0630e7ff94ab45cb3826c72c08320" + version "12.0.2" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-12.0.2.tgz#8a4a4ed690966c11ec587ff87eea0c12c974ba99" dependencies: archy "^1.0.0" arrify "^1.0.1" @@ -10007,14 +10160,14 @@ sinon@^5.0.3: type-detect "^4.0.8" size-limit@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-0.18.1.tgz#9d1abc4ad936c37a94987cb5fc1c0eefa0e7d5b9" + version "0.18.2" + resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-0.18.2.tgz#2ee4d39be0dfd7d5d090ab5d37e3671889c01a8f" dependencies: bytes "^3.0.0" chalk "^2.4.1" ci-job-number "^0.3.0" compression-webpack-plugin "^1.1.11" - cosmiconfig "^5.0.4" + cosmiconfig "^5.0.5" css-loader "^0.28.11" escape-string-regexp "^1.0.5" file-loader "^1.1.11" @@ -10023,8 +10176,8 @@ size-limit@^0.18.0: memory-fs "^0.4.1" read-pkg-up "^3.0.0" style-loader "^0.21.0" - webpack "^4.1.1" - webpack-bundle-analyzer "^2.13.0" + webpack "^4.10.2" + webpack-bundle-analyzer "^2.13.1" yargs "^11.0.0" slack-node@~0.2.0: @@ -10330,8 +10483,8 @@ stream-each@^1.1.0: stream-shift "^1.0.0" stream-http@^2.7.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87" + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -11112,12 +11265,18 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util@0.10.3, util@^0.10.3: +util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: inherits "2.0.1" +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + dependencies: + inherits "2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -11273,7 +11432,7 @@ webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" -webpack-bundle-analyzer@^2.13.0, webpack-bundle-analyzer@^2.9.1: +webpack-bundle-analyzer@^2.13.1, webpack-bundle-analyzer@^2.9.1: version "2.13.1" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz#07d2176c6e86c3cdce4c23e56fae2a7b6b4ad526" dependencies: @@ -11364,7 +11523,36 @@ webpack@3.10.0: webpack-sources "^1.0.1" yargs "^8.0.2" -webpack@^4.1.1, webpack@^4.5.0: +webpack@^4.10.2: + version "4.10.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.10.2.tgz#d6a4cc3e2fa748f96ca62a70f91eaaa939ef3858" + dependencies: + "@webassemblyjs/ast" "1.5.9" + "@webassemblyjs/wasm-edit" "1.5.9" + "@webassemblyjs/wasm-opt" "1.5.9" + "@webassemblyjs/wasm-parser" "1.5.9" + acorn "^5.0.0" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^0.1.1" + enhanced-resolve "^4.0.0" + eslint-scope "^3.7.1" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.0.0" + uglifyjs-webpack-plugin "^1.2.4" + watchpack "^1.5.0" + webpack-sources "^1.0.1" + +webpack@^4.5.0: version "4.9.2" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.9.2.tgz#d347097cc87c9242527c2e8ee9cdcb90f05856c3" dependencies: From 255027b8588c0b200c6c5326edf30e69604213a1 Mon Sep 17 00:00:00 2001 From: Xuefei Li Date: Mon, 4 Jun 2018 19:33:52 -0700 Subject: [PATCH 051/182] [RootRef] Update RootRef.d.ts (#11708) * Update RootRef.d.ts Update RootRef.d.ts to reflect the implementation change. * Update RootRef.d.ts --- packages/material-ui/src/RootRef/RootRef.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/material-ui/src/RootRef/RootRef.d.ts b/packages/material-ui/src/RootRef/RootRef.d.ts index 479d47be727d12..b3bfc13a1555de 100644 --- a/packages/material-ui/src/RootRef/RootRef.d.ts +++ b/packages/material-ui/src/RootRef/RootRef.d.ts @@ -1,7 +1,7 @@ import * as React from 'react'; -export interface RootRefProps { - rootRef?: () => React.HTMLAttributes; +export interface RootRefProps { + rootRef?: ((instance: T | null) => void) | React.RefObject; } declare const RootRef: React.ComponentType; From ef73b6e1b6f998b7af0f7bef15d7a7c03bc5ca10 Mon Sep 17 00:00:00 2001 From: Lukas Liesis Date: Tue, 5 Jun 2018 18:55:47 +0300 Subject: [PATCH 052/182] [docs] Add Trafikito.com to showcase (#11716) --- .../pages/discover-more/showcase/Showcase.js | 9 +++++++++ .../images/showcase/trafikito-monitoring.jpg | Bin 0 -> 111713 bytes 2 files changed, 9 insertions(+) create mode 100644 static/images/showcase/trafikito-monitoring.jpg diff --git a/docs/src/pages/discover-more/showcase/Showcase.js b/docs/src/pages/discover-more/showcase/Showcase.js index e01c15a74728e3..953df5b5890bf7 100644 --- a/docs/src/pages/discover-more/showcase/Showcase.js +++ b/docs/src/pages/discover-more/showcase/Showcase.js @@ -29,6 +29,15 @@ const styles = theme => ({ }); const appList = [ + { + title: 'Trafikito', + description: + 'Free servers monitoring solution which can track any output of any command and do ' + + 'automated action. By default it tracks average load, CPU, HDD, RAM and sends email when ' + + 'something is going wrong.', + image: '/static/images/showcase/trafikito-monitoring.jpg', + link: 'https://trafikito.com/', + }, { title: 'Venumob', description: diff --git a/static/images/showcase/trafikito-monitoring.jpg b/static/images/showcase/trafikito-monitoring.jpg new file mode 100644 index 0000000000000000000000000000000000000000..713d30d4924d1de7b067b3e44665933340ed7dbf GIT binary patch literal 111713 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 literal 0 HcmV?d00001 From ab3bc9434d3e8e6a9faa8320e1378471d17983ba Mon Sep 17 00:00:00 2001 From: Gan Li Date: Wed, 6 Jun 2018 01:46:50 +0800 Subject: [PATCH 053/182] [docs] Update meetingku image (#11724) * update meetingku image * update meetingku image * improve images --- static/images/icons/icons.png | Bin 34456 -> 12156 bytes static/images/showcase/meetingku.jpg | Bin 23011 -> 142564 bytes .../images/showcase/trafikito-monitoring.jpg | Bin 111713 -> 101347 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/static/images/icons/icons.png b/static/images/icons/icons.png index e2f3449dcfc129ea7feb43d19b3fe1bf86c3d83c..1a94582723520ee1d88aa9a2fe132a38800602e1 100644 GIT binary patch literal 12156 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 SG4KP!H>4#L#7kcqy!#&nQ(Za$ diff --git a/static/images/showcase/meetingku.jpg b/static/images/showcase/meetingku.jpg index 242518f5db60cc83fae69e67767b3cd37f87bad2..cb71338e4176004f322365be789dbec2e26e45ab 100644 GIT binary patch literal 142564 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 From 148478e96bcba4e4cb59f60a77c81aea56b1dc3e Mon Sep 17 00:00:00 2001 From: Curtis Date: Tue, 5 Jun 2018 14:50:58 -0700 Subject: [PATCH 054/182] [ButtonBase] Document the `type` property (#11728) * Updated buttonbase docs to have type property * Fixed button-base markdown file for type prop --- packages/material-ui/src/ButtonBase/ButtonBase.js | 4 +++- pages/api/button-base.md | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/material-ui/src/ButtonBase/ButtonBase.js b/packages/material-ui/src/ButtonBase/ButtonBase.js index 8b24dee831c04b..12e9a808ee6d29 100644 --- a/packages/material-ui/src/ButtonBase/ButtonBase.js +++ b/packages/material-ui/src/ButtonBase/ButtonBase.js @@ -423,7 +423,9 @@ ButtonBase.propTypes = { */ TouchRippleProps: PropTypes.object, /** - * @ignore + * Used to control the button's purpose. + * This property passes the value to the `type` attribute of the native button component. + * Valid property values include `button`, `submit`, and `reset`. */ type: PropTypes.string, }; diff --git a/pages/api/button-base.md b/pages/api/button-base.md index d072dc3b7a2b82..4cb4a7c5365849 100644 --- a/pages/api/button-base.md +++ b/pages/api/button-base.md @@ -26,6 +26,7 @@ It contains a load of style reset and some focus/ripple logic. | focusVisibleClassName | string |   | This property can help a person know which element has the keyboard focus. The class name will be applied when the element gain the focus throught a keyboard interaction. It's a polyfill for the [CSS :focus-visible feature](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo). The rational for using this feature [is explain here](https://github.com/WICG/focus-visible/blob/master/explainer.md). | | onFocusVisible | func |   | Callback fired when the component is focused with a keyboard. We trigger a `onFocus` callback too. | | TouchRippleProps | object |   | Properties applied to the `TouchRipple` element. | +| type | string | 'button' | Used to control the button's purpose. This property passes the value to the `type` attribute of the native button component. Valid property values include `button`, `submit`, and `reset`. | Any other properties supplied will be spread to the root element (native element). From 9ea3b3a1b8f30ac48e69081d0a2aedee4b9551f4 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Wed, 6 Jun 2018 00:00:07 +0200 Subject: [PATCH 055/182] [Popover] Fix default value (#11729) --- packages/material-ui/src/Collapse/Collapse.js | 2 ++ packages/material-ui/src/Grow/Grow.js | 2 ++ packages/material-ui/src/Popover/Popover.js | 8 ++++- .../material-ui/src/Popover/Popover.test.js | 21 ++++++++++++++ .../src/StepContent/StepContent.js | 8 ++++- .../src/StepContent/StepContent.test.js | 29 ++++++++++++++++--- 6 files changed, 64 insertions(+), 6 deletions(-) diff --git a/packages/material-ui/src/Collapse/Collapse.js b/packages/material-ui/src/Collapse/Collapse.js index d6680a812f299c..8be07ffe8fa301 100644 --- a/packages/material-ui/src/Collapse/Collapse.js +++ b/packages/material-ui/src/Collapse/Collapse.js @@ -254,6 +254,8 @@ Collapse.defaultProps = { timeout: duration.standard, }; +Collapse.muiSupportAuto = true; + export default withStyles(styles, { withTheme: true, name: 'MuiCollapse', diff --git a/packages/material-ui/src/Grow/Grow.js b/packages/material-ui/src/Grow/Grow.js index 439544b7a6c262..befede91acb004 100644 --- a/packages/material-ui/src/Grow/Grow.js +++ b/packages/material-ui/src/Grow/Grow.js @@ -178,4 +178,6 @@ Grow.defaultProps = { timeout: 'auto', }; +Grow.muiSupportAuto = true; + export default withTheme()(Grow); diff --git a/packages/material-ui/src/Popover/Popover.js b/packages/material-ui/src/Popover/Popover.js index da803460c4f7b7..492725d61af470 100644 --- a/packages/material-ui/src/Popover/Popover.js +++ b/packages/material-ui/src/Popover/Popover.js @@ -291,11 +291,17 @@ class Popover extends React.Component { role, transformOrigin, TransitionComponent, - transitionDuration, + transitionDuration: transitionDurationProp, TransitionProps, ...other } = this.props; + let transitionDuration = transitionDurationProp; + + if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) { + transitionDuration = undefined; + } + // If the container prop is provided, use that // If the anchorEl prop is provided, use its parent body element as the container // If neither are provided let the Modal take care of choosing the container diff --git a/packages/material-ui/src/Popover/Popover.test.js b/packages/material-ui/src/Popover/Popover.test.js index fcae9314cc2047..b87f87dd1b902a 100644 --- a/packages/material-ui/src/Popover/Popover.test.js +++ b/packages/material-ui/src/Popover/Popover.test.js @@ -826,4 +826,25 @@ describe('', () => { popoverActions.updatePosition(); }); }); + + describe('prop: transitionDuration', () => { + it('should apply the auto property if supported', () => { + const wrapper = shallow( + +
      + , + ); + assert.strictEqual(wrapper.find(Grow).props().timeout, 'auto'); + }); + + it('should not apply the auto property if not supported', () => { + const TransitionComponent = props =>
      ; + const wrapper = shallow( + +
      + , + ); + assert.strictEqual(wrapper.find(TransitionComponent).props().timeout, undefined); + }); + }); }); diff --git a/packages/material-ui/src/StepContent/StepContent.js b/packages/material-ui/src/StepContent/StepContent.js index 9c1690f8dfc5ad..3356b2e8f21d95 100644 --- a/packages/material-ui/src/StepContent/StepContent.js +++ b/packages/material-ui/src/StepContent/StepContent.js @@ -33,7 +33,7 @@ function StepContent(props) { optional, orientation, TransitionComponent, - transitionDuration, + transitionDuration: transitionDurationProp, TransitionProps, ...other } = props; @@ -43,6 +43,12 @@ function StepContent(props) { 'Material-UI: is only designed for use with the vertical stepper.', ); + let transitionDuration = transitionDurationProp; + + if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) { + transitionDuration = undefined; + } + return (
      ', () => { let shallow; let mount; - const props = { + const defaultProps = { orientation: 'vertical', }; @@ -21,7 +21,7 @@ describe('', () => { }); it('renders a div', () => { - const wrapper = shallow(Here is the content); + const wrapper = shallow(Here is the content); assert.strictEqual(wrapper.type(), 'div'); }); @@ -30,7 +30,7 @@ describe('', () => { Lorem ipsum , @@ -44,7 +44,7 @@ describe('', () => { it('renders children inside an Collapse component', () => { const wrapper = shallow( - +
      This is my content!
      , ); @@ -54,4 +54,25 @@ describe('', () => { assert.strictEqual(content.length, 1); assert.strictEqual(content.props().children, 'This is my content!'); }); + + describe('prop: transitionDuration', () => { + it('should apply the auto property if supported', () => { + const wrapper = shallow( + +
      + , + ); + assert.strictEqual(wrapper.find(Collapse).props().timeout, 'auto'); + }); + + it('should not apply the auto property if not supported', () => { + const TransitionComponent = props =>
      ; + const wrapper = shallow( + +
      + , + ); + assert.strictEqual(wrapper.find(TransitionComponent).props().timeout, undefined); + }); + }); }); From ef7abe8378c45a9601d7218e5b76f7567c03d8dd Mon Sep 17 00:00:00 2001 From: Podivilov Evgeniy Date: Wed, 6 Jun 2018 03:54:45 +0500 Subject: [PATCH 056/182] [Slider] Fix for IE11 (#11727) --- packages/material-ui-lab/src/Slider/Slider.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/material-ui-lab/src/Slider/Slider.js b/packages/material-ui-lab/src/Slider/Slider.js index 4c4a5cfc865301..ba48b9d3d2e93f 100644 --- a/packages/material-ui-lab/src/Slider/Slider.js +++ b/packages/material-ui-lab/src/Slider/Slider.js @@ -161,12 +161,12 @@ function roundToStep(number, step) { } function getOffset(node) { - const { scrollY, scrollX } = global; + const { pageYOffset, pageXOffset } = global; const { left, top } = node.getBoundingClientRect(); return { - top: top + scrollY, - left: left + scrollX, + top: top + pageYOffset, + left: left + pageXOffset, }; } From ea0840dccadb92a9fce7bebfe47bbfaf0abd276c Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Wed, 6 Jun 2018 16:36:18 +0200 Subject: [PATCH 057/182] [withWidth] Second iteration on the component (#11730) --- docs/src/modules/components/withRoot.js | 3 +- .../customization/css-in-js/css-in-js.md | 2 +- docs/src/pages/layout/basics/basics.md | 24 +-- .../{css-in-js => breakpoints}/MediaQuery.js | 20 +- .../src/pages/layout/breakpoints/WithWidth.js | 27 +++ .../pages/layout/breakpoints/breakpoints.md | 201 ++++++++++++++++++ docs/src/pages/layout/css-in-js/css-in-js.md | 118 ---------- docs/src/pages/layout/grid/grid.md | 2 +- docs/src/pages/layout/hidden/hidden.md | 2 +- .../material-ui/src/withWidth/withWidth.js | 39 +++- .../src/withWidth/withWidth.test.js | 35 ++- pages/layout/breakpoints.js | 30 +++ pages/layout/css-in-js.js | 23 -- 13 files changed, 336 insertions(+), 190 deletions(-) rename docs/src/pages/layout/{css-in-js => breakpoints}/MediaQuery.js (62%) create mode 100644 docs/src/pages/layout/breakpoints/WithWidth.js create mode 100644 docs/src/pages/layout/breakpoints/breakpoints.md delete mode 100644 docs/src/pages/layout/css-in-js/css-in-js.md create mode 100644 pages/layout/breakpoints.js delete mode 100644 pages/layout/css-in-js.js diff --git a/docs/src/modules/components/withRoot.js b/docs/src/modules/components/withRoot.js index 31f56d66e453ae..48756345831d33 100644 --- a/docs/src/modules/components/withRoot.js +++ b/docs/src/modules/components/withRoot.js @@ -79,8 +79,7 @@ const pages = [ pathname: '/layout/hidden', }, { - pathname: '/layout/css-in-js', - title: 'CSS in JS', + pathname: '/layout/breakpoints', }, ], }, diff --git a/docs/src/pages/customization/css-in-js/css-in-js.md b/docs/src/pages/customization/css-in-js/css-in-js.md index 31dcda42f51be8..4425fcecb1dc08 100644 --- a/docs/src/pages/customization/css-in-js/css-in-js.md +++ b/docs/src/pages/customization/css-in-js/css-in-js.md @@ -250,7 +250,7 @@ For instance, it can be used to defined a `getInitialProps()` static method (nex It will be linked to the component. Use the function signature if you need to have access to the theme. It's provided as the first argument. 2. `options` (*Object* [optional]): - - `options.withTheme` (Boolean [optional]): Defaults to `false`. Provide the `theme` object to the component as a property. + - `options.withTheme` (*Boolean* [optional]): Defaults to `false`. Provide the `theme` object to the component as a property. - `options.name` (*String* [optional]): The name of the style sheet. Useful for debugging. If the value isn't provided, it will try to fallback to the name of the component. - `options.flip` (*Boolean* [optional]): When set to `false`, this sheet will opt-out the `rtl` transformation. When set to `true`, the styles are inversed. When set to `null`, it follows `theme.direction`. diff --git a/docs/src/pages/layout/basics/basics.md b/docs/src/pages/layout/basics/basics.md index bc6c367866eb37..3926ede5831110 100644 --- a/docs/src/pages/layout/basics/basics.md +++ b/docs/src/pages/layout/basics/basics.md @@ -3,26 +3,16 @@ ## Responsive UI [Responsive layouts](https://material.io/design/layout/responsive-layout-grid.html) in Material Design adapt to any possible screen size. +We provide the following helpers to make the UI responsive: -### Breakpoints +- [Grid](/layout/grid): +The grid creates visual consistency between layouts while allowing flexibility across a wide variety of designs. -For optimal user experience, material design interfaces need to be able to adapt their layout at various breakpoints. -Material-UI uses a **simplified** implementation of the original [specification](https://material.io/design/layout/responsive-layout-grid.html#breakpoints). +- [Hidden](/layout/hidden): +The hidden component can be used to change the visibility of the elements. -Each breakpoint matches with a *fixed* screen width: -- **xs**, extra-small: 0px or larger -- **sm**, small: 600px or larger -- **md**, medium: 960px or larger -- **lg**, large: 1280px or larger -- **xl**, xlarge: 1920px or larger - -These values can always be customized. -You will find them in the theme, in the [`breakpoints.values`](/customization/default-theme?expend-path=$.breakpoints.values) object. - -The breakpoints are used internally in various components to make them responsive, -but you can also take advantage of them -for controlling the layout of your application through the [Grid](/layout/grid) and -[Hidden](/layout/hidden) components. +- [Breakpoints](/layout/breakpoints): +We provide a low-level API for using the breakpoints in a wide variery of context. ## z-index diff --git a/docs/src/pages/layout/css-in-js/MediaQuery.js b/docs/src/pages/layout/breakpoints/MediaQuery.js similarity index 62% rename from docs/src/pages/layout/css-in-js/MediaQuery.js rename to docs/src/pages/layout/breakpoints/MediaQuery.js index ff5b22b78f77a0..e574fe3e093413 100644 --- a/docs/src/pages/layout/css-in-js/MediaQuery.js +++ b/docs/src/pages/layout/breakpoints/MediaQuery.js @@ -1,18 +1,20 @@ import React from 'react'; import PropTypes from 'prop-types'; -import compose from 'recompose/compose'; import { withStyles } from '@material-ui/core/styles'; -import withWidth from '@material-ui/core/withWidth'; import Typography from '@material-ui/core/Typography'; +import green from '@material-ui/core/colors/green'; const styles = theme => ({ root: { padding: theme.spacing.unit, + [theme.breakpoints.down('sm')]: { + backgroundColor: theme.palette.secondary.main, + }, [theme.breakpoints.up('md')]: { backgroundColor: theme.palette.primary.main, }, - [theme.breakpoints.down('sm')]: { - backgroundColor: theme.palette.secondary.main, + [theme.breakpoints.up('lg')]: { + backgroundColor: green[500], }, }, }); @@ -22,17 +24,15 @@ function MediaQuery(props) { return (
      - {`Current width: ${props.width}`} + {'down(sm): red'} + {'up(md): blue'} + {'up(lg): green'}
      ); } MediaQuery.propTypes = { classes: PropTypes.object.isRequired, - width: PropTypes.string.isRequired, }; -export default compose( - withStyles(styles), - withWidth(), -)(MediaQuery); +export default withStyles(styles)(MediaQuery); diff --git a/docs/src/pages/layout/breakpoints/WithWidth.js b/docs/src/pages/layout/breakpoints/WithWidth.js new file mode 100644 index 00000000000000..3021566d7c1d39 --- /dev/null +++ b/docs/src/pages/layout/breakpoints/WithWidth.js @@ -0,0 +1,27 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import withWidth from '@material-ui/core/withWidth'; +import Typography from '@material-ui/core/Typography'; + +const components = { + sm: 'em', + md: 'u', + lg: 'del', +}; + +function WithWidth(props) { + const { width } = props; + const Component = components[width] || 'span'; + + return ( + + {`Current width: ${width}`} + + ); +} + +WithWidth.propTypes = { + width: PropTypes.string.isRequired, +}; + +export default withWidth()(WithWidth); diff --git a/docs/src/pages/layout/breakpoints/breakpoints.md b/docs/src/pages/layout/breakpoints/breakpoints.md new file mode 100644 index 00000000000000..e0721bc0f9c74b --- /dev/null +++ b/docs/src/pages/layout/breakpoints/breakpoints.md @@ -0,0 +1,201 @@ +# Breakpoints + +For optimal user experience, material design interfaces need to be able to adapt their layout at various breakpoints. +Material-UI uses a **simplified** implementation of the original [specification](https://material.io/design/layout/responsive-layout-grid.html#breakpoints). + +Each breakpoint matches with a *fixed* screen width: +- **xs**, extra-small: 0px or larger +- **sm**, small: 600px or larger +- **md**, medium: 960px or larger +- **lg**, large: 1280px or larger +- **xl**, xlarge: 1920px or larger + +These values can always be customized. +You will find them in the theme, in the [`breakpoints.values`](/customization/default-theme?expend-path=$.breakpoints.values) object. + +The breakpoints are used internally in various components to make them responsive, +but you can also take advantage of them +for controlling the layout of your application through the [Grid](/layout/grid) and +[Hidden](/layout/hidden) components. + +## Media Queries + +CSS media queries is the idiomatic approach to make your UI responsive. +We provide some [CSS-in-JS](/customization/css-in-js) helpers to do so. + +In the following demo, we change the background color (red, blue & green) based on the screen width. + +{{"demo": "pages/layout/breakpoints/MediaQuery.js"}} + +## withWidth() + +Sometimes, using CSS isn't enough. +You might want to change the React rendering tree based on the breakpoint value, in JavaScript. +We provide a `withWidth()` higher-order component for this use case. + +In the following demo, we change the rendered DOM element (*em*, u, ~~del~~ & span) based on the screen width. + +{{"demo": "pages/layout/breakpoints/WithWidth.js"}} + +⚠️ `withWidth()` server-side rendering support is limited. + +## API + +### `withWidth([options]) => higher-order component` + +Inject a `width` property. +It does not modify the component passed to it; instead, it returns a new component. +This `width` breakpoint property match the current screen width. +It can be one of the following breakpoints: + +```ts +type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl'; +``` + +Some implementation details that might be interesting to being aware of: +- It forwards *non React static* properties so this HOC is more "transparent". +For instance, it can be used to defined a `getInitialProps()` static method (next.js). + +#### Arguments + +1. `options` (*Object* [optional]): + - `options.withTheme` (*Boolean* [optional]): Defaults to `false`. Provide the `theme` object to the component as a property. + - `options.noSSR` (*Boolean* [optional]): Defaults to `false`. + In order to perform the server-side rendering reconciliation, we need to render twice. + A first time with nothing and a second time with the children. + This double pass rendering cycle comes with a drawback. The UI might blink. + You can set this flag to `true` if you are not doing server-side rendering. + - `options.initialWidth` (*Breakpoint* [optional]): + As `window.innerWidth` is unavailable on the server, + we default to rendering an empty component during the first mount. + In some situation, you might want to use an heuristic to approximate + the screen width of the client browser screen width. + For instance, you could be using the user-agent or the client-hints. + http://caniuse.com/#search=client%20hint + - `options.resizeInterval` (*Number* [optional]): Defaults to 166, corresponds to 10 frames at 60 Hz. Number of milliseconds to wait before responding to a screen resize event. + +#### Returns + +`higher-order component`: Should be used to wrap a component. + +#### Examples + +```jsx +import withWidth, { isWidthUp } from '@material-ui/core/withWidth'; + +class MyComponent extends React.Component { + render () { + if (isWidthUp('sm', this.props.width)) { + return + } + + return
      ; + } +} + +export default withWidth()(MyComponent); +``` + +### `theme.breakpoints.up(key) => media query` + +#### Arguments + +1. `key` (*String* | *Number*): A breakpoint key (`xs`, `sm`, etc.) or a screen width number in pixels. + +#### Returns + +`media query`: A media query string ready to be used with JSS. + +#### Examples + +```js +const styles = theme => ({ + root: { + backgroundColor: 'blue', + // Match [md, ∞[ + // [960px, ∞[ + [theme.breakpoints.up('md')]: { + backgroundColor: 'red', + }, + }, +}); +``` + +### `theme.breakpoints.down(key) => media query` + +#### Arguments + +1. `key` (*String* | *Number*): A breakpoint key (`xs`, `sm`, etc.) or a screen width number in pixels. + +#### Returns + +`media query`: A media query string ready to be used with JSS. + +#### Examples + +```js +const styles = theme => ({ + root: { + backgroundColor: 'blue', + // Match [0, md + 1[ + // [0, lg[ + // [0, 1280px[ + [theme.breakpoints.down('md')]: { + backgroundColor: 'red', + }, + }, +}); +``` + +### `theme.breakpoints.only(key) => media query` + +#### Arguments + +1. `key` (*String*): A breakpoint key (`xs`, `sm`, etc.). + +#### Returns + +`media query`: A media query string ready to be used with JSS. + +#### Examples + +```js +const styles = theme => ({ + root: { + backgroundColor: 'blue', + // Match [md, md + 1[ + // [md, lg[ + // [960px, 1280px[ + [theme.breakpoints.only('md')]: { + backgroundColor: 'red', + }, + }, +}); +``` + +### `theme.breakpoints.between(start, end) => media query` + +#### Arguments + +1. `start` (*String*): A breakpoint key (`xs`, `sm`, etc.). +2. `end` (*String*): A breakpoint key (`xs`, `sm`, etc.). + +#### Returns + +`media query`: A media query string ready to be used with JSS. + +#### Examples + +```js +const styles = theme => ({ + root: { + backgroundColor: 'blue', + // Match [sm, md + 1[ + // [sm, lg[ + // [600px, 1280px[ + [theme.breakpoints.between('sm', 'md')]: { + backgroundColor: 'red', + }, + }, +}); +``` diff --git a/docs/src/pages/layout/css-in-js/css-in-js.md b/docs/src/pages/layout/css-in-js/css-in-js.md deleted file mode 100644 index 8afed4723d55a9..00000000000000 --- a/docs/src/pages/layout/css-in-js/css-in-js.md +++ /dev/null @@ -1,118 +0,0 @@ -# CSS in JS - -## Responsive breakpoints - -Sometimes, wrapping things inside a layout component doesn't make much sense when -everything you need can be handled by a small CSS change. By using the -[`breakpoints`](/customization/default-theme?expend-path=$.breakpoints) attribute of the theme, you can utilise the same breakpoints used -for the [Grid](/layout/grid) and [Hidden](/layout/hidden) components directly in your component. - -This can be accomplished using [CSS-in-JS](/customization/css-in-js). - -{{"demo": "pages/layout/css-in-js/MediaQuery.js"}} - -## API - -### `theme.breakpoints.up(key) => media query` - -#### Arguments - -1. `key` (*String* | *Number*): A breakpoint key (`xs`, `sm`, etc.) or a screen width number in pixels. - -#### Returns - -`media query`: A media query string ready to be used with JSS. - -#### Examples - -```js -const styles = theme => ({ - root: { - backgroundColor: 'blue', - // Match [md, ∞[ - // [960px, ∞[ - [theme.breakpoints.up('md')]: { - backgroundColor: 'red', - }, - }, -}); -``` - -### `theme.breakpoints.down(key) => media query` - -#### Arguments - -1. `key` (*String* | *Number*): A breakpoint key (`xs`, `sm`, etc.) or a screen width number in pixels. - -#### Returns - -`media query`: A media query string ready to be used with JSS. - -#### Examples - -```js -const styles = theme => ({ - root: { - backgroundColor: 'blue', - // Match [0, md + 1[ - // [0, lg[ - // [0, 1280px[ - [theme.breakpoints.down('md')]: { - backgroundColor: 'red', - }, - }, -}); -``` - -### `theme.breakpoints.only(key) => media query` - -#### Arguments - -1. `key` (*String*): A breakpoint key (`xs`, `sm`, etc.). - -#### Returns - -`media query`: A media query string ready to be used with JSS. - -#### Examples - -```js -const styles = theme => ({ - root: { - backgroundColor: 'blue', - // Match [md, md + 1[ - // [md, lg[ - // [960px, 1280px[ - [theme.breakpoints.only('md')]: { - backgroundColor: 'red', - }, - }, -}); -``` - -### `theme.breakpoints.between(start, end) => media query` - -#### Arguments - -1. `start` (*String*): A breakpoint key (`xs`, `sm`, etc.). -2. `end` (*String*): A breakpoint key (`xs`, `sm`, etc.). - -#### Returns - -`media query`: A media query string ready to be used with JSS. - -#### Examples - -```js -const styles = theme => ({ - root: { - backgroundColor: 'blue', - // Match [sm, md + 1[ - // [sm, lg[ - // [600px, 1280px[ - [theme.breakpoints.between('sm', 'md')]: { - backgroundColor: 'red', - }, - }, -}); -``` diff --git a/docs/src/pages/layout/grid/grid.md b/docs/src/pages/layout/grid/grid.md index 25552ba0bcbd06..e7fbae3e00e5d2 100644 --- a/docs/src/pages/layout/grid/grid.md +++ b/docs/src/pages/layout/grid/grid.md @@ -5,7 +5,7 @@ components: Grid # Grid Material Design’s responsive UI is based on a 12-column grid layout. -This grid creates visual consistency between layouts while allowing flexibility across a wide variety of designs. +The grid creates visual consistency between layouts while allowing flexibility across a wide variety of designs. ## How it works diff --git a/docs/src/pages/layout/hidden/hidden.md b/docs/src/pages/layout/hidden/hidden.md index aa33771fe60167..5a0ec994c252fc 100644 --- a/docs/src/pages/layout/hidden/hidden.md +++ b/docs/src/pages/layout/hidden/hidden.md @@ -29,7 +29,7 @@ mdDown | hide | show ### js -By default, the `js` implementation is used, responsively hiding content based on using the `withWidth()` higher-order component that watches screen size. +By default, the `js` implementation is used, responsively hiding content based on using the [`withWidth()`](/layout/breakpoints#withwidth-) higher-order component that watches screen size. This has the benefit of not rendering any content at all unless the breakpoint is met. ### css diff --git a/packages/material-ui/src/withWidth/withWidth.js b/packages/material-ui/src/withWidth/withWidth.js index 4516ed81c8b512..e47d5c61aee4e5 100644 --- a/packages/material-ui/src/withWidth/withWidth.js +++ b/packages/material-ui/src/withWidth/withWidth.js @@ -1,3 +1,5 @@ +/* eslint-disable react/no-did-mount-set-state */ + import React from 'react'; import PropTypes from 'prop-types'; import EventListener from 'react-event-listener'; @@ -25,28 +27,39 @@ export const isWidthDown = (breakpoint, width, inclusive = true) => { const withWidth = (options = {}) => Component => { const { - resizeInterval = 166, // Corresponds to 10 frames at 60 Hz. withTheme: withThemeOption = false, + noSSR = false, + initialWidth: initialWidthOption, + resizeInterval = 166, // Corresponds to 10 frames at 60 Hz. } = options; class WithWidth extends React.Component { + constructor(props) { + super(props); + + if (noSSR) { + this.state.width = this.getWidth(); + } + } + state = { width: undefined, }; componentDidMount() { - this.updateWidth(window.innerWidth); + const width = this.getWidth(); + if (width !== this.state.width) { + this.setState({ + width, + }); + } } componentWillUnmount() { this.handleResize.clear(); } - handleResize = debounce(() => { - this.updateWidth(window.innerWidth); - }, resizeInterval); - - updateWidth(innerWidth) { + getWidth(innerWidth = window.innerWidth) { const breakpoints = this.props.theme.breakpoints; let width = null; @@ -71,18 +84,22 @@ const withWidth = (options = {}) => Component => { } width = width || 'xl'; + return width; + } + handleResize = debounce(() => { + const width = this.getWidth(); if (width !== this.state.width) { this.setState({ width, }); } - } + }, resizeInterval); render() { const { initialWidth, theme, width, ...other } = this.props; const props = { - width: width || this.state.width || initialWidth, + width: width || this.state.width || initialWidth || initialWidthOption, ...other, }; const more = {}; @@ -112,8 +129,8 @@ const withWidth = (options = {}) => Component => { WithWidth.propTypes = { /** * As `window.innerWidth` is unavailable on the server, - * we default to rendering an empty componenent during the first mount. - * In some situation you might want to use an heristic to approximate + * we default to rendering an empty component during the first mount. + * In some situation, you might want to use an heuristic to approximate * the screen width of the client browser screen width. * * For instance, you could be using the user-agent or the client-hints. diff --git a/packages/material-ui/src/withWidth/withWidth.test.js b/packages/material-ui/src/withWidth/withWidth.test.js index d2bdc66405cfed..77feece48bb9b5 100644 --- a/packages/material-ui/src/withWidth/withWidth.test.js +++ b/packages/material-ui/src/withWidth/withWidth.test.js @@ -35,7 +35,6 @@ describe('withWidth', () => { describe('prop: width', () => { it('should be able to override it', () => { const wrapper = mount(); - assert.strictEqual(wrapper.find(Empty).props().width, 'xl'); }); }); @@ -43,7 +42,6 @@ describe('withWidth', () => { describe('browser', () => { it('should provide the right width to the child element', () => { const wrapper = mount(); - assert.strictEqual(wrapper.find(Empty).props().width, TEST_ENV_WIDTH); }); }); @@ -78,11 +76,14 @@ describe('withWidth', () => { it('should work as expected', () => { const wrapper = shallow(); const instance = wrapper.instance(); - const updateWidth = instance.updateWidth.bind(instance); + const getWidth = instance.getWidth.bind(instance); breakpoints.keys.forEach(key => { - updateWidth(breakpoints.values[key]); - assert.strictEqual(wrapper.state().width, key, 'should return the matching width'); + assert.strictEqual( + getWidth(breakpoints.values[key]), + key, + 'should return the matching width', + ); }); }); }); @@ -114,11 +115,25 @@ describe('withWidth', () => { // First mount on the server const wrapper1 = shallow(element); assert.strictEqual(wrapper1.find(Empty).props().width, 'lg'); + + // Second mount on the client const wrapper2 = mount(element); + assert.strictEqual(wrapper2.find(Empty).props().width, TEST_ENV_WIDTH); + }); + }); + + describe('option: initialWidth', () => { + it('should work as expected', () => { + const EmptyWithWidth2 = withWidth({ initialWidth: 'lg' })(Empty); + const element = ; + + // First mount on the server + const wrapper1 = shallow(element); + assert.strictEqual(wrapper1.find(Empty).props().width, 'lg'); // Second mount on the client + const wrapper2 = mount(element); assert.strictEqual(wrapper2.find(Empty).props().width, TEST_ENV_WIDTH); - assert.strictEqual(TEST_ENV_WIDTH !== 'lg', true); }); }); @@ -136,4 +151,12 @@ describe('withWidth', () => { assert.strictEqual(wrapper.find(Empty).props().theme, theme); }); }); + + describe('option: noSSR', () => { + it('should work as expected', () => { + const EmptyWithWidth2 = withWidth({ noSSR: true })(Empty); + const wrapper = shallow(); + assert.strictEqual(wrapper.find(Empty).props().width, TEST_ENV_WIDTH); + }); + }); }); diff --git a/pages/layout/breakpoints.js b/pages/layout/breakpoints.js new file mode 100644 index 00000000000000..f6185ad65df254 --- /dev/null +++ b/pages/layout/breakpoints.js @@ -0,0 +1,30 @@ +import React from 'react'; +import withRoot from 'docs/src/modules/components/withRoot'; +import MarkdownDocs from 'docs/src/modules/components/MarkdownDocs'; +import markdown from 'docs/src/pages/layout/breakpoints/breakpoints.md'; + +function Page() { + return ( + + ); +} + +export default withRoot(Page); diff --git a/pages/layout/css-in-js.js b/pages/layout/css-in-js.js deleted file mode 100644 index 4df6fdd9b96667..00000000000000 --- a/pages/layout/css-in-js.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import withRoot from 'docs/src/modules/components/withRoot'; -import MarkdownDocs from 'docs/src/modules/components/MarkdownDocs'; -import markdown from 'docs/src/pages/layout/css-in-js/css-in-js.md'; - -function Page() { - return ( - - ); -} - -export default withRoot(Page); From 203be1fbe435cd6c2696d8e2aa93fee23a0805cb Mon Sep 17 00:00:00 2001 From: Adeel Imran Date: Thu, 7 Jun 2018 02:53:41 +0500 Subject: [PATCH 058/182] [transition] Fix IE11 issue in dev mode (#11743) --- packages/material-ui/src/styles/transitions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/material-ui/src/styles/transitions.js b/packages/material-ui/src/styles/transitions.js index b3b11f4f3b4c05..a351e95cf81d08 100644 --- a/packages/material-ui/src/styles/transitions.js +++ b/packages/material-ui/src/styles/transitions.js @@ -1,5 +1,6 @@ // @flow /* eslint-disable no-param-reassign */ +/* eslint-disable no-restricted-globals */ import warning from 'warning'; @@ -35,7 +36,7 @@ export const duration = { export const formatMs = (milliseconds: number) => `${Math.round(milliseconds)}ms`; export const isString = (value: any) => typeof value === 'string'; -export const isNumber = (value: any) => !Number.isNaN(parseFloat(value)); +export const isNumber = (value: any) => !isNaN(parseFloat(value)); /** * @param {string|Array} props From 90f3007eafec825ef083b91806f6c26c31e5284d Mon Sep 17 00:00:00 2001 From: Adeel Imran Date: Thu, 7 Jun 2018 04:37:35 +0500 Subject: [PATCH 059/182] [Tabs] Better flex layout (#11748) * set height to minHeight and removed flex:none * [Tabs] Better flex layout --- packages/material-ui/src/Tab/Tab.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/material-ui/src/Tab/Tab.js b/packages/material-ui/src/Tab/Tab.js index 72f86ff8612912..06661ff9453c17 100644 --- a/packages/material-ui/src/Tab/Tab.js +++ b/packages/material-ui/src/Tab/Tab.js @@ -14,15 +14,15 @@ export const styles = theme => ({ position: 'relative', minWidth: 72, padding: 0, - height: 48, - flex: 'none', + minHeight: 48, + flexShrink: 0, overflow: 'hidden', [theme.breakpoints.up('md')]: { minWidth: 160, }, }, labelIcon: { - height: 72, + minHeight: 72, }, textColorInherit: { color: 'inherit', @@ -55,6 +55,7 @@ export const styles = theme => ({ selected: {}, disabled: {}, fullWidth: { + flexShrink: 1, flexGrow: 1, }, wrapper: { From c39a4eaec3dbc34f356f6ebc6ca250b3e8e871a2 Mon Sep 17 00:00:00 2001 From: tal952 Date: Thu, 7 Jun 2018 02:41:40 +0300 Subject: [PATCH 060/182] [docs] Improve docs:dev init by ~2 s and HMR by ~200 ms (#11752) --- pages/_document.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pages/_document.js b/pages/_document.js index ff4d3ef1474d0e..b621fb09449ce1 100644 --- a/pages/_document.js +++ b/pages/_document.js @@ -1,13 +1,8 @@ import React from 'react'; import Document, { Head, Main, NextScript } from 'next/document'; -import postcss from 'postcss'; -import autoprefixer from 'autoprefixer'; -import CleanCSS from 'clean-css'; import getPageContext from 'docs/src/modules/styles/getPageContext'; import config from 'docs/src/config'; -const cleanCSS = new CleanCSS(); - // You can find a benchmark of the available CSS minifiers under // https://github.com/GoalSmashers/css-minification-benchmark // We have found that clean-css is faster than cssnano but the output is larger. @@ -15,7 +10,16 @@ const cleanCSS = new CleanCSS(); // 4% slower but 12% smaller output than doing it in a single step. // // It's using .browserslistrc -const prefixer = postcss([autoprefixer]); +let prefixer; +let cleanCSS; +if (process.env.NODE_ENV === 'production') { + const postcss = require('postcss'); + const autoprefixer = require('autoprefixer'); + const CleanCSS = require('clean-css'); + + prefixer = postcss([autoprefixer]); + cleanCSS = new CleanCSS(); +} class MyDocument extends Document { render() { From b9133f0ba162252bdd4780ab08e6d897924cfccc Mon Sep 17 00:00:00 2001 From: Hamza Amrouche Date: Thu, 7 Jun 2018 12:34:35 +0200 Subject: [PATCH 061/182] [docs] Change app bar to button on the getting started (#11756) --- docs/src/pages/getting-started/usage/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/pages/getting-started/usage/usage.md b/docs/src/pages/getting-started/usage/usage.md index 37439e515a284d..a5093da2816354 100644 --- a/docs/src/pages/getting-started/usage/usage.md +++ b/docs/src/pages/getting-started/usage/usage.md @@ -6,7 +6,7 @@ They don't rely on any global style-sheets such as [normalize.css](https://githu although Material-UI does provide an optional [CssBaseline](/style/css-baseline) component. You can use any of the components as demonstrated in the documentation. -Please refer to each component's [demo page](/demos/app-bar/) to see how they should be imported. +Please refer to each component's [demo page](/demos/buttons/) to see how they should be imported. ## Quick start From 7dc5fce440428d557c111b6c81ddf5dc02ad5d13 Mon Sep 17 00:00:00 2001 From: "Ryan P. C. McQuen" Date: Thu, 7 Jun 2018 13:35:13 -0700 Subject: [PATCH 062/182] [core] Remove parser specification to fix JSON issue (#11763) * Remove parser specification to fix JSON issue. Related to: https://github.com/prettier/prettier/issues/4642 When specifying a parser for Prettier in versions > `1.13.x`, it fails on certain types of files, like `.json`. * run prettier --- .../src/pages/index.tsx | 4 +- .../src/SpeedDial/SpeedDial.d.ts | 41 +++---- .../material-ui-lab/src/SpeedDial/index.d.ts | 4 +- .../src/SpeedDialAction/SpeedDialAction.d.ts | 24 ++-- .../src/SpeedDialAction/index.d.ts | 4 +- .../src/SpeedDialIcon/SpeedDialIcon.d.ts | 23 ++-- .../src/SpeedDialIcon/index.d.ts | 4 +- .../src/styles/createTypography.d.ts | 23 ++-- .../material-ui/src/styles/withStyles.d.ts | 12 +- .../src/transitions/transition.d.ts | 3 +- .../src/withWidth/withWidth.spec.tsx | 15 +-- .../test/typescript/components.spec.tsx | 11 +- .../test/typescript/styles.spec.tsx | 103 +++++++++--------- .../typescript/styling-comparison.spec.tsx | 15 +-- prettier.config.js | 1 - 15 files changed, 148 insertions(+), 139 deletions(-) diff --git a/examples/create-react-app-with-typescript/src/pages/index.tsx b/examples/create-react-app-with-typescript/src/pages/index.tsx index 479fa779d156f3..a8449ad5651820 100644 --- a/examples/create-react-app-with-typescript/src/pages/index.tsx +++ b/examples/create-react-app-with-typescript/src/pages/index.tsx @@ -17,7 +17,7 @@ const styles: StyleRulesCallback<'root'> = theme => ({ }); type State = { - open: boolean, + open: boolean; }; class Index extends React.Component, State> { @@ -65,4 +65,4 @@ class Index extends React.Component, State> { } } -export default withRoot(withStyles(styles) < {} > (Index)); +export default withRoot(withStyles(styles)<{}>(Index)); diff --git a/packages/material-ui-lab/src/SpeedDial/SpeedDial.d.ts b/packages/material-ui-lab/src/SpeedDial/SpeedDial.d.ts index 0bd99ec5ddea07..f7db93a28467bd 100644 --- a/packages/material-ui-lab/src/SpeedDial/SpeedDial.d.ts +++ b/packages/material-ui-lab/src/SpeedDial/SpeedDial.d.ts @@ -1,26 +1,27 @@ -import * as React from "react"; -import { StandardProps } from "@material-ui/core"; -import { ButtonProps } from "@material-ui/core/Button"; -import { TransitionProps } from "react-transition-group/Transition"; -import { TransitionHandlerProps } from "@material-ui/core/transitions/transition"; +import * as React from 'react'; +import { StandardProps } from '@material-ui/core'; +import { ButtonProps } from '@material-ui/core/Button'; +import { TransitionProps } from 'react-transition-group/Transition'; +import { TransitionHandlerProps } from '@material-ui/core/transitions/transition'; -export interface SpeedDialProps extends StandardProps & Partial, SpeedDialClassKey> { - ariaLabel: string; - ButtonProps?: Partial; - hidden?: boolean; - icon: React.ReactNode; - onClose?: React.ReactEventHandler<{}>; - open: boolean; - openIcon?: React.ReactNode; - TransitionComponent?: React.ReactType; - transitionDuration?: TransitionProps["timeout"]; - TransitionProps?: TransitionProps; +export interface SpeedDialProps + extends StandardProps< + React.HTMLAttributes & Partial, + SpeedDialClassKey + > { + ariaLabel: string; + ButtonProps?: Partial; + hidden?: boolean; + icon: React.ReactNode; + onClose?: React.ReactEventHandler<{}>; + open: boolean; + openIcon?: React.ReactNode; + TransitionComponent?: React.ReactType; + transitionDuration?: TransitionProps['timeout']; + TransitionProps?: TransitionProps; } -export type SpeedDialClassKey = - | "root" - | "actions" - | "actionsClosed"; +export type SpeedDialClassKey = 'root' | 'actions' | 'actionsClosed'; declare const SpeedDial: React.ComponentType; diff --git a/packages/material-ui-lab/src/SpeedDial/index.d.ts b/packages/material-ui-lab/src/SpeedDial/index.d.ts index 688c153c339fe0..1d1c4c58f2e23d 100644 --- a/packages/material-ui-lab/src/SpeedDial/index.d.ts +++ b/packages/material-ui-lab/src/SpeedDial/index.d.ts @@ -1,2 +1,2 @@ -export { default } from "./SpeedDial"; -export * from "./SpeedDial"; +export { default } from './SpeedDial'; +export * from './SpeedDial'; diff --git a/packages/material-ui-lab/src/SpeedDialAction/SpeedDialAction.d.ts b/packages/material-ui-lab/src/SpeedDialAction/SpeedDialAction.d.ts index 1065a77ec30df9..cb8ea6d5148351 100644 --- a/packages/material-ui-lab/src/SpeedDialAction/SpeedDialAction.d.ts +++ b/packages/material-ui-lab/src/SpeedDialAction/SpeedDialAction.d.ts @@ -1,19 +1,17 @@ -import * as React from "react"; -import { StandardProps } from "@material-ui/core"; -import { ButtonProps } from "@material-ui/core/Button"; -import { TooltipProps } from "@material-ui/core/Tooltip"; +import * as React from 'react'; +import { StandardProps } from '@material-ui/core'; +import { ButtonProps } from '@material-ui/core/Button'; +import { TooltipProps } from '@material-ui/core/Tooltip'; -export interface SpeedDialActionProps extends StandardProps, SpeedDialActionClassKey> { - ButtonProps?: Partial; - delay?: number; - icon: React.ReactNode; - tooltipTitle?: React.ReactNode; +export interface SpeedDialActionProps + extends StandardProps, SpeedDialActionClassKey> { + ButtonProps?: Partial; + delay?: number; + icon: React.ReactNode; + tooltipTitle?: React.ReactNode; } -export type SpeedDialActionClassKey = - | "root" - | "button" - | "buttonClosed"; +export type SpeedDialActionClassKey = 'root' | 'button' | 'buttonClosed'; declare const SpeedDialAction: React.ComponentType; diff --git a/packages/material-ui-lab/src/SpeedDialAction/index.d.ts b/packages/material-ui-lab/src/SpeedDialAction/index.d.ts index 2b768b6b803eff..0ac4379e2c64ea 100644 --- a/packages/material-ui-lab/src/SpeedDialAction/index.d.ts +++ b/packages/material-ui-lab/src/SpeedDialAction/index.d.ts @@ -1,2 +1,2 @@ -export { default } from "./SpeedDialAction"; -export * from "./SpeedDialAction"; +export { default } from './SpeedDialAction'; +export * from './SpeedDialAction'; diff --git a/packages/material-ui-lab/src/SpeedDialIcon/SpeedDialIcon.d.ts b/packages/material-ui-lab/src/SpeedDialIcon/SpeedDialIcon.d.ts index 99620146df308b..9e58f4aa810368 100644 --- a/packages/material-ui-lab/src/SpeedDialIcon/SpeedDialIcon.d.ts +++ b/packages/material-ui-lab/src/SpeedDialIcon/SpeedDialIcon.d.ts @@ -1,18 +1,19 @@ -import * as React from "react"; -import { StandardProps } from "@material-ui/core"; +import * as React from 'react'; +import { StandardProps } from '@material-ui/core'; -export interface SpeedDialIconProps extends StandardProps, SpeedDialIconClassKey> { - icon?: React.ReactNode; - openIcon?: React.ReactNode; +export interface SpeedDialIconProps + extends StandardProps, SpeedDialIconClassKey> { + icon?: React.ReactNode; + openIcon?: React.ReactNode; } export type SpeedDialIconClassKey = - | "root" - | "icon" - | "iconOpen" - | "iconWithOpenIconOpen" - | "openIcon" - | "openIconOpen"; + | 'root' + | 'icon' + | 'iconOpen' + | 'iconWithOpenIconOpen' + | 'openIcon' + | 'openIconOpen'; declare const SpeedDialIcon: React.ComponentType; diff --git a/packages/material-ui-lab/src/SpeedDialIcon/index.d.ts b/packages/material-ui-lab/src/SpeedDialIcon/index.d.ts index 11ba3dedd918d4..b99978d5f24665 100644 --- a/packages/material-ui-lab/src/SpeedDialIcon/index.d.ts +++ b/packages/material-ui-lab/src/SpeedDialIcon/index.d.ts @@ -1,2 +1,2 @@ -export { default } from "./SpeedDialIcon"; -export * from "./SpeedDialIcon"; +export { default } from './SpeedDialIcon'; +export * from './SpeedDialIcon'; diff --git a/packages/material-ui/src/styles/createTypography.d.ts b/packages/material-ui/src/styles/createTypography.d.ts index 4c758c77bcb8b3..4fe0742af3237e 100644 --- a/packages/material-ui/src/styles/createTypography.d.ts +++ b/packages/material-ui/src/styles/createTypography.d.ts @@ -16,22 +16,23 @@ export type TextStyle = export type Style = TextStyle | 'button'; -export interface FontStyle extends Required<{ - fontFamily: CSSProperties['fontFamily']; - fontSize: number; - fontWeightLight: CSSProperties['fontWeight']; - fontWeightRegular: CSSProperties['fontWeight']; - fontWeightMedium: CSSProperties['fontWeight']; -}> {} +export interface FontStyle + extends Required<{ + fontFamily: CSSProperties['fontFamily']; + fontSize: number; + fontWeightLight: CSSProperties['fontWeight']; + fontWeightRegular: CSSProperties['fontWeight']; + fontWeightMedium: CSSProperties['fontWeight']; + }> {} export interface FontStyleOptions extends Partial { htmlFontSize?: number; } -export type TypographyStyle = - & Required> - & Partial> - ; +export type TypographyStyle = Required< + Pick +> & + Partial>; export interface TypographyStyleOptions extends Partial {} diff --git a/packages/material-ui/src/styles/withStyles.d.ts b/packages/material-ui/src/styles/withStyles.d.ts index 995ed8f92a5c3c..d5d420c40cd6eb 100644 --- a/packages/material-ui/src/styles/withStyles.d.ts +++ b/packages/material-ui/src/styles/withStyles.d.ts @@ -3,7 +3,7 @@ import { WithTheme } from '../styles/withTheme'; import { ConsistentWith, Overwrite } from '..'; import { Theme } from './createMuiTheme'; import * as CSS from 'csstype'; -import * as JSS from 'jss' +import * as JSS from 'jss'; export interface CSSProperties extends CSS.Properties { // Allow pseudo selectors and media queries @@ -29,7 +29,8 @@ export interface StylesCreator { themingEnabled: boolean; } -export interface WithStylesOptions extends JSS.CreateStyleSheetOptions { +export interface WithStylesOptions + extends JSS.CreateStyleSheetOptions { flip?: boolean; withTheme?: boolean; name?: string; @@ -39,10 +40,9 @@ export type ClassNameMap = Record = Partial & { classes: ClassNameMap< - T extends string ? T : - T extends StyleRulesCallback ? K : - T extends StyleRules ? K : - never + T extends string + ? T + : T extends StyleRulesCallback ? K : T extends StyleRules ? K : never >; }; diff --git a/packages/material-ui/src/transitions/transition.d.ts b/packages/material-ui/src/transitions/transition.d.ts index 4c85a85abcaf7e..040cf8a0c97687 100644 --- a/packages/material-ui/src/transitions/transition.d.ts +++ b/packages/material-ui/src/transitions/transition.d.ts @@ -21,6 +21,7 @@ export type TransitionKeys = | 'addEndListener' | TransitionHandlerKeys; export interface TransitionProps - extends TransitionActions, Partial> { + extends TransitionActions, + Partial> { style?: CSSProperties; } diff --git a/packages/material-ui/src/withWidth/withWidth.spec.tsx b/packages/material-ui/src/withWidth/withWidth.spec.tsx index 3ed75491a498cc..efb38577115cd6 100644 --- a/packages/material-ui/src/withWidth/withWidth.spec.tsx +++ b/packages/material-ui/src/withWidth/withWidth.spec.tsx @@ -4,13 +4,14 @@ import { Theme, createStyles } from '../styles'; import withStyles, { WithStyles } from '../styles/withStyles'; import withWidth, { WithWidthProps } from '../withWidth'; -const styles = (theme: Theme) => createStyles({ - root: { - display: 'flex', - flexDirection: 'column', - backgroundColor: theme.palette.common.black, - }, -}); +const styles = (theme: Theme) => + createStyles({ + root: { + display: 'flex', + flexDirection: 'column', + backgroundColor: theme.palette.common.black, + }, + }); interface IHelloProps extends WithWidthProps, WithStyles { name?: string; diff --git a/packages/material-ui/test/typescript/components.spec.tsx b/packages/material-ui/test/typescript/components.spec.tsx index 988b62a170432f..8c06d84d948e9c 100644 --- a/packages/material-ui/test/typescript/components.spec.tsx +++ b/packages/material-ui/test/typescript/components.spec.tsx @@ -719,11 +719,12 @@ const TableTest = () => { {}} - onChangeRowsPerPage={event => log({ rowsPerPage: event.target.value })}/> + count={5} + rowsPerPage={2} + page={1} + onChangePage={() => {}} + onChangeRowsPerPage={event => log({ rowsPerPage: event.target.value })} + />
diff --git a/packages/material-ui/test/typescript/styles.spec.tsx b/packages/material-ui/test/typescript/styles.spec.tsx index b088a3118f1aaf..d89d41cdc485c4 100644 --- a/packages/material-ui/test/typescript/styles.spec.tsx +++ b/packages/material-ui/test/typescript/styles.spec.tsx @@ -37,10 +37,9 @@ const StyledExampleOne = withStyles(styles)(({ classes, text }) ; // Example 2 -const Component: React.SFC> = ({ - classes, - text, -}) =>
{text}
; +const Component: React.SFC> = ({ classes, text }) => ( +
{text}
+); const StyledExampleTwo = withStyles(styles)(Component); ; @@ -55,10 +54,9 @@ const styleRule = createStyles({ }, }); -const ComponentWithChildren: React.SFC> = ({ - classes, - children, -}) =>
{children}
; +const ComponentWithChildren: React.SFC> = ({ classes, children }) => ( +
{children}
+); const StyledExampleThree = withStyles(styleRule)(ComponentWithChildren); ; @@ -193,41 +191,44 @@ const DecoratedComponent = withStyles(styles)( ; // Allow nested pseudo selectors -withStyles(theme => createStyles({ - guttered: theme.mixins.gutters({ - '&:hover': { - textDecoration: 'none', +withStyles(theme => + createStyles({ + guttered: theme.mixins.gutters({ + '&:hover': { + textDecoration: 'none', + }, + }), + listItem: { + '&:hover $listItemIcon': { + visibility: 'inherit', + }, }, }), - listItem: { - '&:hover $listItemIcon': { - visibility: 'inherit', - }, - }, -})); +); { - const styles = (theme: Theme) => createStyles({ - // Styled similar to ListItemText - root: { - '&:first-child': { - paddingLeft: 0, + const styles = (theme: Theme) => + createStyles({ + // Styled similar to ListItemText + root: { + '&:first-child': { + paddingLeft: 0, + }, + flex: '1 1 auto', + padding: '0 16px', }, - flex: '1 1 auto', - padding: '0 16px', - }, - iiiinset: { - '&:first-child': { - paddingLeft: theme.spacing.unit * 7, + iiiinset: { + '&:first-child': { + paddingLeft: theme.spacing.unit * 7, + }, }, - }, - row: { - alignItems: 'center', - display: 'flex', - flexDirection: 'row', - }, - }); + row: { + alignItems: 'center', + display: 'flex', + flexDirection: 'row', + }, + }); interface ListItemContentProps extends WithStyles { inset?: boolean; @@ -239,7 +240,7 @@ withStyles(theme => createStyles({
{children}
- ) + ), ); } @@ -262,11 +263,12 @@ withStyles(theme => createStyles({ caption: string; } - const styles = (theme: Theme) => createStyles({ - content: { - margin: 4, - }, - }); + const styles = (theme: Theme) => + createStyles({ + content: { + margin: 4, + }, + }); const Component = (props: ComponentProps) => { return
Hello {props.caption}
; @@ -289,9 +291,10 @@ withStyles(theme => createStyles({ { // https://github.com/mui-org/material-ui/issues/11191 - const styles = (theme: Theme) => createStyles({ - main: {}, - }); + const styles = (theme: Theme) => + createStyles({ + main: {}, + }); interface Props extends WithStyles { someProp?: string; @@ -308,12 +311,14 @@ withStyles(theme => createStyles({ ; } -{ // https://github.com/mui-org/material-ui/issues/11312 - withStyles(styles, { name: "MyComponent", index: 0 })(() =>
); +{ + // https://github.com/mui-org/material-ui/issues/11312 + withStyles(styles, { name: 'MyComponent', index: 0 })(() =>
); } -{ // https://github.com/mui-org/material-ui/issues/11164 +{ + // https://github.com/mui-org/material-ui/issues/11164 const style: StyleRulesCallback = theme => ({ - text: theme.typography.body2 + text: theme.typography.body2, }); } diff --git a/packages/material-ui/test/typescript/styling-comparison.spec.tsx b/packages/material-ui/test/typescript/styling-comparison.spec.tsx index 0e6b7f998d3f30..b35215daaaf5e0 100644 --- a/packages/material-ui/test/typescript/styling-comparison.spec.tsx +++ b/packages/material-ui/test/typescript/styling-comparison.spec.tsx @@ -2,13 +2,14 @@ import * as React from 'react'; import Typography, { TypographyProps } from '../../src/Typography/Typography'; import { withStyles, WithStyles, createStyles, Theme } from '../../src/styles'; -const styles = ({ palette, spacing }: Theme) => createStyles({ - root: { - padding: spacing.unit, - backgroundColor: palette.background.default, - color: palette.primary.dark, - }, -}) +const styles = ({ palette, spacing }: Theme) => + createStyles({ + root: { + padding: spacing.unit, + backgroundColor: palette.background.default, + color: palette.primary.dark, + }, + }); interface Props extends WithStyles { color: TypographyProps['color']; diff --git a/prettier.config.js b/prettier.config.js index e44cb663923995..364abe0968c31a 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,7 +1,6 @@ module.exports = { bracketSpacing: true, jsxBracketSameLine: false, - parser: 'babylon', printWidth: 100, semi: true, singleQuote: true, From 57dde679151c7972bd965dc04f00818c853349a1 Mon Sep 17 00:00:00 2001 From: Tarik Huber Date: Thu, 7 Jun 2018 22:41:15 +0200 Subject: [PATCH 063/182] [docs] Add React Most Wanted to related projects (#11753) * Added React Most Wanted to related project React Most Wanted uses 100% Material-UI v1 and only Material-UI :) * sort alphabetically --- .../pages/discover-more/related-projects/related-projects.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/pages/discover-more/related-projects/related-projects.md b/docs/src/pages/discover-more/related-projects/related-projects.md index 80db3395e0777a..1b60c1dfb03948 100644 --- a/docs/src/pages/discover-more/related-projects/related-projects.md +++ b/docs/src/pages/discover-more/related-projects/related-projects.md @@ -19,9 +19,10 @@ Feel free to submit a pull-request to add more projects; we will accept them if - [react-admin](https://github.com/marmelab/react-admin) An admin framework combining material-ui with Redux, redux-form, redux-saga, and recompose - [react-autosuggest](https://github.com/moroshko/react-autosuggest) WAI-ARIA compliant React autosuggest component. +- [react-final-form](https://github.com/final-form/react-final-form#material-ui-10) Subscription-based form state management for React. +- [react-most-wanted](https://github.com/TarikHuber/react-most-wanted) Starter kit using Material-UI, CRA, Redux, Firebase and all the "Most Wanted" features. - [react-number-format](https://github.com/s-yadav/react-number-format) React component to format numbers in an input or as a text. - [react-popper](https://github.com/FezVrasta/react-popper) React wrapper around PopperJS. - [react-swipeable-views](https://github.com/oliviertassinari/react-swipeable-views) A React component for swipeable views. Plays well with the `Tabs` component. - [react-text-mask](https://github.com/text-mask/text-mask) Input mask for React, Angular, Ember, Vue, & plain JavaScript. - [redux-form](https://redux-form.com/7.3.0/examples/material-ui/) Manage your form state in Redux. -- [react-final-form](https://github.com/final-form/react-final-form#material-ui-10) Subscription-based form state management for React. From 30edbc8a2df8a81f8f38b17928571685510f756f Mon Sep 17 00:00:00 2001 From: Duong Tran Date: Fri, 8 Jun 2018 07:45:20 +1000 Subject: [PATCH 064/182] [core] Add React.createRef support (#11757) * feat: make input accept both ref callback and ref from React.createRef * feat: update [TextArea] to accept React.createRef object as inputRef * feat: update typescript and proptypes declaration for inputRef * test: add inputRef test for input * simpler logic --- .size-limit.js | 2 +- packages/material-ui/src/Checkbox/Checkbox.js | 2 +- .../src/FormControlLabel/FormControlLabel.js | 2 +- packages/material-ui/src/Input/Input.d.ts | 2 +- packages/material-ui/src/Input/Input.js | 16 ++++++++++++--- packages/material-ui/src/Input/Input.test.js | 14 +++++++++++++ packages/material-ui/src/Input/Textarea.d.ts | 2 +- packages/material-ui/src/Input/Textarea.js | 12 ++++++++--- .../material-ui/src/Input/Textarea.test.js | 10 ++++++++-- .../src/NativeSelect/NativeSelectInput.js | 2 +- packages/material-ui/src/Radio/Radio.js | 2 +- .../material-ui/src/Select/SelectInput.js | 20 +++++++++++++------ .../src/Select/SelectInput.test.js | 8 ++++++++ packages/material-ui/src/Switch/Switch.js | 2 +- .../material-ui/src/TextField/TextField.d.ts | 2 +- .../material-ui/src/TextField/TextField.js | 2 +- .../material-ui/src/internal/SwitchBase.js | 2 +- pages/api/checkbox.md | 2 +- pages/api/form-control-label.md | 2 +- pages/api/input.md | 2 +- pages/api/radio.md | 2 +- pages/api/switch-base.md | 2 +- pages/api/switch.md | 2 +- pages/api/text-field.md | 2 +- 24 files changed, 84 insertions(+), 32 deletions(-) diff --git a/.size-limit.js b/.size-limit.js index ac662de364d6d8..abd3066a57eddc 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: '94.6 KB', + limit: '94.7 KB', }, { name: 'The main bundle of the docs', diff --git a/packages/material-ui/src/Checkbox/Checkbox.js b/packages/material-ui/src/Checkbox/Checkbox.js index 3a892075f2d991..abb53cc99c0594 100644 --- a/packages/material-ui/src/Checkbox/Checkbox.js +++ b/packages/material-ui/src/Checkbox/Checkbox.js @@ -98,7 +98,7 @@ Checkbox.propTypes = { /** * Use that property to pass a ref callback to the native input component. */ - inputRef: PropTypes.func, + inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), /** * Callback fired when the state is changed. * diff --git a/packages/material-ui/src/FormControlLabel/FormControlLabel.js b/packages/material-ui/src/FormControlLabel/FormControlLabel.js index 5d2f8ae0a7143f..da5db998b6e7fd 100644 --- a/packages/material-ui/src/FormControlLabel/FormControlLabel.js +++ b/packages/material-ui/src/FormControlLabel/FormControlLabel.js @@ -116,7 +116,7 @@ FormControlLabel.propTypes = { /** * Use that property to pass a ref callback to the native input component. */ - inputRef: PropTypes.func, + inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), /** * The text to be used in an enclosing label element. */ diff --git a/packages/material-ui/src/Input/Input.d.ts b/packages/material-ui/src/Input/Input.d.ts index 2481d86255cc7c..0cb45b5e29dbc6 100644 --- a/packages/material-ui/src/Input/Input.d.ts +++ b/packages/material-ui/src/Input/Input.d.ts @@ -18,7 +18,7 @@ export interface InputProps id?: string; inputComponent?: React.ReactType; inputProps?: { [arbitrary: string]: any }; - inputRef?: React.Ref; + inputRef?: React.Ref | React.RefObject; margin?: 'dense'; multiline?: boolean; name?: string; diff --git a/packages/material-ui/src/Input/Input.js b/packages/material-ui/src/Input/Input.js index 28d15859d25855..074a8b42aa5bfe 100644 --- a/packages/material-ui/src/Input/Input.js +++ b/packages/material-ui/src/Input/Input.js @@ -323,10 +323,20 @@ class Input extends React.Component { handleRefInput = node => { this.input = node; + let ref; + if (this.props.inputRef) { - this.props.inputRef(node); + ref = this.props.inputRef; } else if (this.props.inputProps && this.props.inputProps.ref) { - this.props.inputProps.ref(node); + ref = this.props.inputProps.ref; + } + + if (ref) { + if (typeof ref === 'function') { + ref(node); + } else { + ref.current = node; + } } }; @@ -541,7 +551,7 @@ Input.propTypes = { /** * Use that property to pass a ref callback to the native input component. */ - inputRef: PropTypes.func, + inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), /** * If `dense`, will adjust vertical spacing. This is normally obtained via context from * FormControl. diff --git a/packages/material-ui/src/Input/Input.test.js b/packages/material-ui/src/Input/Input.test.js index 38df091d39f4a3..ceacbec735343b 100644 --- a/packages/material-ui/src/Input/Input.test.js +++ b/packages/material-ui/src/Input/Input.test.js @@ -471,4 +471,18 @@ describe('', () => { assert.strictEqual(wrapper.childAt(1).type(), InputAdornment); }); }); + + describe('prop: inputRef', () => { + it('should be able to return the input node via a ref object', () => { + const ref = React.createRef(); + mount(); + assert.strictEqual(ref.current.tagName, 'INPUT'); + }); + + it('should be able to return the textarea node via a ref object', () => { + const ref = React.createRef(); + mount(); + assert.strictEqual(ref.current.tagName, 'TEXTAREA'); + }); + }); }); diff --git a/packages/material-ui/src/Input/Textarea.d.ts b/packages/material-ui/src/Input/Textarea.d.ts index 25411b272077f6..9029b97da16cb3 100644 --- a/packages/material-ui/src/Input/Textarea.d.ts +++ b/packages/material-ui/src/Input/Textarea.d.ts @@ -11,7 +11,7 @@ export interface TextareaProps disabled?: boolean; rows?: string | number; rowsMax?: string | number; - textareaRef?: React.Ref; + textareaRef?: React.Ref | React.RefObject; value?: string; } diff --git a/packages/material-ui/src/Input/Textarea.js b/packages/material-ui/src/Input/Textarea.js index 06f867287dc334..9ec321ed76ff06 100644 --- a/packages/material-ui/src/Input/Textarea.js +++ b/packages/material-ui/src/Input/Textarea.js @@ -115,8 +115,14 @@ class Textarea extends React.Component { handleRefInput = node => { this.input = node; - if (this.props.textareaRef) { - this.props.textareaRef(node); + + const { textareaRef } = this.props; + if (textareaRef) { + if (typeof textareaRef === 'function') { + textareaRef(node); + } else { + textareaRef.current = node; + } } }; @@ -224,7 +230,7 @@ Textarea.propTypes = { /** * Use that property to pass a ref callback to the native textarea element. */ - textareaRef: PropTypes.func, + textareaRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), /** * @ignore */ diff --git a/packages/material-ui/src/Input/Textarea.test.js b/packages/material-ui/src/Input/Textarea.test.js index 5ab8ad26ebdad8..6e6f6a4023b630 100644 --- a/packages/material-ui/src/Input/Textarea.test.js +++ b/packages/material-ui/src/Input/Textarea.test.js @@ -1,5 +1,3 @@ -// @flow - import React from 'react'; import { assert } from 'chai'; import { spy, useFakeTimers } from 'sinon'; @@ -156,4 +154,12 @@ describe('