diff --git a/frontend/src/actions/action-types.js b/frontend/src/actions/action-types.js index dd10ef5325f1d2a048ffa0f26f6bc55c683f0b36..2ac5110b7c8c1d3720efc0e569c1805ed93f9250 100644 --- a/frontend/src/actions/action-types.js +++ b/frontend/src/actions/action-types.js @@ -1,3 +1,4 @@ export const SAVE_MAIN_MAP_POSITION = 'SAVE_MAIN_MAP_POSITION'; export const SAVE_SELECTED_UNIVERSITIES = 'SAVE_SELECTED_UNIVERSITIES'; export const SAVE_FILTER_CONFIG = 'SAVE_FILTER_CONFIG'; +export const SAVE_APP_THEME = 'SAVE_APP_THEME'; diff --git a/frontend/src/actions/theme.js b/frontend/src/actions/theme.js new file mode 100644 index 0000000000000000000000000000000000000000..37e150ef28028fd75e5b39d2de7a4ee0f845a86c --- /dev/null +++ b/frontend/src/actions/theme.js @@ -0,0 +1,13 @@ + +import { + SAVE_APP_THEME +} from "./action-types"; + + +export function saveAppTheme(theme) { + return { + type: SAVE_APP_THEME, + theme + }; + +} diff --git a/frontend/src/components/App.js b/frontend/src/components/App.js index d08ab9a0a692d648fbe1f435aeda6dae2d6fe59b..95f05b348f6a4f5a06bec519040df2745acc9789 100644 --- a/frontend/src/components/App.js +++ b/frontend/src/components/App.js @@ -22,12 +22,12 @@ import MyComponent from './MyComponent' // import route Components here import { - Route, + Route, } from 'react-router-dom'; import { - countriesFetchData, - currenciesFetchData, + countriesFetchData, + currenciesFetchData, } from '../generated/actions'; @@ -35,160 +35,160 @@ import PageMap from './pages/PageMap'; import PageHome from './pages/PageHome'; import PageFilter from './pages/PageFilter'; import PageSearch from './pages/PageSearch'; +import PageSettings from './pages/PageSettings'; const drawerWidth = 240; const styles = theme => ({ - root: { - display: 'flex', + root: { + display: 'flex', + }, + toolbar: { + paddingRight: 24, // keep right padding when drawer closed + }, + toolbarIcon: { + display: 'flex', + alignItems: 'center', + justifyContent: 'flex-end', + padding: '0 8px', + ...theme.mixins.toolbar, + }, + chip: { + margin: theme.spacing.unit, + }, + menuButton: { + marginRight: 4, + }, + hideIt: { + display: 'none', + }, + title: { + flexGrow: 1, + }, + drawerPaper: { + position: 'relative', + whiteSpace: 'nowrap', + width: drawerWidth, + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.enteringScreen, + }), + }, + drawerPaperClose: { + overflowX: 'hidden', + transition: theme.transitions.create('width', { + easing: theme.transitions.easing.sharp, + duration: theme.transitions.duration.leavingScreen, + }), + width: theme.spacing.unit * 7, + [theme.breakpoints.up('sm')]: { + width: theme.spacing.unit * 9, }, - toolbar: { - paddingRight: 24, // keep right padding when drawer closed - }, - toolbarIcon: { - display: 'flex', - alignItems: 'center', - justifyContent: 'flex-end', - padding: '0 8px', - ...theme.mixins.toolbar, - }, - chip: { - margin: theme.spacing.unit, - }, - menuButton: { - marginRight: 4, - }, - hideIt: { - display: 'none', - }, - title: { - flexGrow: 1, - }, - drawerPaper: { - position: 'relative', - whiteSpace: 'nowrap', - width: drawerWidth, - transition: theme.transitions.create('width', { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.enteringScreen, - }), - }, - drawerPaperClose: { - overflowX: 'hidden', - transition: theme.transitions.create('width', { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.leavingScreen, - }), - width: theme.spacing.unit * 7, - [theme.breakpoints.up('sm')]: { - width: theme.spacing.unit * 9, - }, - }, - content: { - flexGrow: 1, - padding: theme.spacing.unit * 3, - height: '100vh', - overflow: 'auto', - }, - chartContainer: { - marginLeft: -22, - }, - tableContainer: { - height: 320, - }, - myPaper: { - padding: 16 - }, - null: {} + }, + content: { + flexGrow: 1, + padding: theme.spacing.unit * 3, + height: '100vh', + overflow: 'auto', + }, + chartContainer: { + marginLeft: -22, + }, + tableContainer: { + height: 320, + }, + myPaper: { + padding: 16 + }, + null: {} }); class App extends MyComponent { - state = { - open: true, - }; - - handleDrawerOpen = () => { - this.setState({ open: true }); - }; - - handleDrawerClose = () => { - this.setState({ open: false }); - }; - - myRender() { - - const { classes } = this.props; - - return ( - - -
- -
-
- } - label="Outgoing REX" - className={classes.chip} - color="primary" - /> -
- - - - - - -
- - - - {mainListItems} - - {secondaryListItems} -
- -
- - - - - - -
-
-
- ); - } + state = { + open: true, + }; + + handleDrawerOpen = () => { + this.setState({ open: true }); + }; + + handleDrawerClose = () => { + this.setState({ open: false }); + }; + + myRender() { + + const { classes } = this.props; + + return ( + + +
+ +
+
+ } + label="Outgoing REX" + className={classes.chip} + color="primary" + /> +
+ + + + + + +
+ + + + {mainListItems} + + {secondaryListItems} +
+ +
+ + + + + +
+
+
+ ); + } } App.propTypes = { - classes: PropTypes.object.isRequired, + classes: PropTypes.object.isRequired, }; const mapStateToProps = (state) => { - return { - countries: state.countries, - currencies: state.currencies - } + return { + countries: state.countries, + currencies: state.currencies + } }; const mapDispatchToProps = (dispatch) => { - return { - fetchData: { - countries: () => dispatch(countriesFetchData()), - currencies: () => dispatch(currenciesFetchData()), - } - }; + return { + fetchData: { + countries: () => dispatch(countriesFetchData()), + currencies: () => dispatch(currenciesFetchData()), + } + }; }; -export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(App)); +export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles, { withTheme: true })(App)); diff --git a/frontend/src/components/ThemeProvider.js b/frontend/src/components/ThemeProvider.js new file mode 100644 index 0000000000000000000000000000000000000000..c48385fc1dabbfc75105035e8159db6a1e32261f --- /dev/null +++ b/frontend/src/components/ThemeProvider.js @@ -0,0 +1,33 @@ + +import React from "react"; +import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider'; +import createMuiTheme from '@material-ui/core/styles/createMuiTheme'; +import { connect } from "react-redux"; +import { BrowserRouter as Router, Route } from 'react-router-dom'; + + + +class ThemeProvider extends React.Component { + + render() { + console.log("ici") + return ( +
+ + + {this.props.children} + + +
+ ) + } +} + +const mapStateToProps = (state) => { + return { + theme: state.app.appTheme + }; +}; + + +export default connect(mapStateToProps)(ThemeProvider); diff --git a/frontend/src/components/map/UnivMap.js b/frontend/src/components/map/UnivMap.js index 61061ce1a392da62b3ea36827a87788552cb6385..fe93272401bcea12bce6ecd778384594e3f2b6d1 100644 --- a/frontend/src/components/map/UnivMap.js +++ b/frontend/src/components/map/UnivMap.js @@ -36,13 +36,13 @@ class UnivMap extends MyComponent { } saveLeafletInstance = (l) => { - this.setState(Object.assign(this.state, { + this.setState(Object.assign({},this.state, { leaflet_instance: l, })) } saveSelectedLayer = (e) => { - this.setState(Object.assign(this.state, { + this.setState(Object.assign({},this.state, { selected_layer: e.name, })) } diff --git a/frontend/src/components/pages/PageSettings.js b/frontend/src/components/pages/PageSettings.js new file mode 100644 index 0000000000000000000000000000000000000000..614ad30885a2888138d474fe75ecc8dc370cd7ba --- /dev/null +++ b/frontend/src/components/pages/PageSettings.js @@ -0,0 +1,37 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; +import Settings from '../settings/Settings'; +import Paper from '@material-ui/core/Paper'; + +const styles = theme => ({ + myPaper: { + padding: 16 + } +}); + +class PageSettings extends React.Component { + render() { + const { classes } = this.props; + return ( + + + + + Paramètres + + + + + + ); + } +} + +PageSettings.propTypes = { + classes: PropTypes.object.isRequired, +}; + +export default withStyles(styles)(PageSettings); diff --git a/frontend/src/components/settings/ColorDemo.js b/frontend/src/components/settings/ColorDemo.js new file mode 100644 index 0000000000000000000000000000000000000000..e299a9e72cd2c22a36ee0c5c00f61f3288f76fc8 --- /dev/null +++ b/frontend/src/components/settings/ColorDemo.js @@ -0,0 +1,108 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; +import MenuIcon from '@material-ui/icons/Menu'; +import Typography from '@material-ui/core/Typography'; +import AddIcon from '@material-ui/icons/Add'; +// import MarkdownElement from '@material-ui/docs/MarkdownElement'; + +const styles = theme => ({ + root: { + position: 'relative', + overflow: 'hidden', + }, + appFrame: { + position: 'relative', + height: 390, + backgroundColor: theme.palette.background.paper, + }, + statusBar: { + width: '100%', + height: 24, + }, + menuButton: { + marginLeft: -12, + marginRight: 20, + }, + code: { + marginTop: theme.spacing.unit, + '& pre': { + margin: '0px !important', + }, + }, + fab: { + position: 'absolute', + bottom: theme.spacing.unit * 2, + right: theme.spacing.unit * 2, + }, +}); + +function ColorDemo(props) { + const { classes, data, theme } = props; + const primary = { + main: data.primary, + output: + data.primaryShade === 4 + ? `${data.primaryHue}` + : `{ + main: '${data.primary}', + }`, + }; + const secondary = { + main: data.secondary, + output: + data.secondaryShade === 11 + ? `${data.secondaryHue}` + : `{ + main: '${data.secondary}', + }`, + }; + + theme.palette.augmentColor(primary); + theme.palette.augmentColor(secondary); + + return ( +
+
+
+ + + + + + + Color sample + + + + {/* */} + +
+
+ ); +} + +ColorDemo.propTypes = { + classes: PropTypes.object.isRequired, + data: PropTypes.object.isRequired, + theme: PropTypes.object.isRequired, +}; + +export default withStyles(styles, { withTheme: true })(ColorDemo); \ No newline at end of file diff --git a/frontend/src/components/settings/ColorTools.js b/frontend/src/components/settings/ColorTools.js new file mode 100644 index 0000000000000000000000000000000000000000..82b812dcc2d94865c404bb13ba55eb74dd3811be --- /dev/null +++ b/frontend/src/components/settings/ColorTools.js @@ -0,0 +1,251 @@ +// Taken from https://github.com/mui-org/material-ui/blob/master/docs/src/pages/style/color/ColorTool.js +// MIT Licence and modified + +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import compose from 'recompose/compose'; +import { withStyles } from '@material-ui/core/styles'; +import * as colors from '@material-ui/core/colors'; +import Grid from '@material-ui/core/Grid'; +import Input from '@material-ui/core/Input'; +import Radio from '@material-ui/core/Radio'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; +import Button from '@material-ui/core/Button'; +import CheckIcon from '@material-ui/icons/Check'; +import Slider from '@material-ui/lab/Slider'; +import { rgbToHex } from '@material-ui/core/styles/colorManipulator'; +import { capitalize } from '@material-ui/core/utils/helpers'; +// import actionTypes from 'docs/src/modules/redux/actionTypes'; +import ColorDemo from './ColorDemo'; +import { saveAppTheme } from '../../actions/theme'; + +const hues = Object.keys(colors).slice(1, 17); +const shades = [900, 800, 700, 600, 500, 400, 300, 200, 100, 50, 'A700', 'A400', 'A200', 'A100']; + +const styles = theme => ({ + radio: { + width: 48, + height: 48, + }, + radioSelected: { + width: 48, + height: 48, + border: '1px solid white', + color: theme.palette.common.white, + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + }, + swatch: { + width: 192, + }, + sliderContainer: { + display: 'flex', + alignItems: 'center', + marginTop: theme.spacing.unit * 2, + marginBottom: theme.spacing.unit, + }, + slider: { + width: 'calc(100% - 80px)', + }, + colorBar: { + marginTop: theme.spacing.unit * 2, + }, + colorSquare: { + width: 64, + height: 64, + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + }, +}); + +class ColorTool extends React.Component { + state = { + primary: '#2196f3', + secondary: '#f50057', + primaryInput: '#2196f3', + secondaryInput: '#f50057', + primaryHue: 'blue', + secondaryHue: 'pink', + primaryShade: 4, + secondaryShade: 11, + }; + + handleChangeColor = name => event => { + const isRgb = string => /#?([0-9a-f]{6})/i.test(string); + + const { + target: { value: color }, + } = event; + + this.setState({ + [`${name}Input`]: color, + }); + + if (isRgb(color)) { + this.setState({ + [name]: color, + }); + } + }; + + handleChangeHue = name => event => { + const { + target: { value: hue }, + } = event; + + this.setState(state => { + const color = colors[hue][shades[state[`${name}Shade`]]]; + return { + [`${name}Hue`]: hue, + [name]: color, + [`${name}Input`]: color, + }; + }); + }; + + handleChangeShade = name => (event, shade) => { + this.setState(state => { + const color = colors[state[`${name}Hue`]][shades[shade]]; + return { + [`${name}Shade`]: shade, + [name]: color, + [`${name}Input`]: color, + }; + }); + }; + + handleChangeDocsColors = () => { + this.props.saveTheme({ + palette: { + primary: { main: this.state.primary }, + secondary: { main: this.state.secondary }, + }, + }) + }; + + render() { + const { classes, theme } = this.props; + console.log(theme) + const { primaryShade, secondaryShade } = this.state; + + const colorBar = color => { + const background = { main: color }; + theme.palette.augmentColor(background); + + return ( + + {['dark', 'main', 'light'].map(key => ( +
+ + {rgbToHex(background[key])} + +
+ ))} +
+ ); + }; + + const colorPicker = intent => { + const intentInput = this.state[`${intent}Input`]; + const intentShade = this.state[`${intent}Shade`]; + const color = this.state[`${intent}`]; + + return ( + + + {capitalize(intent)} + + +
+ Shade: + + {shades[intentShade]} +
+
+ {hues.map(hue => { + const shade = intent === 'primary' ? shades[primaryShade] : shades[secondaryShade]; + const backgroundColor = colors[hue][shade]; + + return ( + + } + checkedIcon={ +
+ +
+ } + /> +
+ ); + })} +
+ {colorBar(color)} +
+ ); + }; + + return ( + + {colorPicker('primary')} + {colorPicker('secondary')} + + + + + + + + ); + } +} + +ColorTool.propTypes = { + classes: PropTypes.object.isRequired, + theme: PropTypes.object.isRequired, +}; + + +const mapStateToProps = (state) => Object(); + +const mapDispatchToProps = (dispatch) => { + return { + saveTheme: (theme) => dispatch(saveAppTheme(theme)) + }; +}; +export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles, { withTheme: true })(ColorTool)); diff --git a/frontend/src/components/settings/Settings.js b/frontend/src/components/settings/Settings.js new file mode 100644 index 0000000000000000000000000000000000000000..101cbeaa18815345c6d2348edaf36bb4679b5642 --- /dev/null +++ b/frontend/src/components/settings/Settings.js @@ -0,0 +1,54 @@ +import React from 'react'; + +import MyComponent from '../MyComponent' +import { connect } from "react-redux"; +import _ from 'underscore'; +import ColorTools from './ColorTools'; +// import { saveSelectedUniversities, saveSettingsConfig } from '../../actions/Settings'; + +// import { +// universitiesFetchData, +// mainCampusesFetchData, +// citiesFetchData, +// countriesFetchData +// } from '../../generated/actions'; + +class Settings extends MyComponent { + + myRender() { + + return ( + + + ); + } +} + + + +// const mapStateToProps = (state) => { +// return { +// universities: state.universities, +// mainCampuses: state.mainCampuses, +// cities: state.cities, +// countries: state.countries, +// contriesSettingsConfig: state.app.Settings.contriesSettings +// }; +// }; + +// const mapDispatchToProps = (dispatch) => { +// return { +// fetchData: { +// universities: () => dispatch(universitiesFetchData()), +// mainCampuses: () => dispatch(mainCampusesFetchData()), +// cities: () => dispatch(citiesFetchData()), +// countries: () => dispatch(countriesFetchData()) +// }, +// saveSelection: (selectedUniversities) => dispatch(saveSelectedUniversities(selectedUniversities)), +// saveConfig: (config) => dispatch(saveSettingsConfig(config)) +// }; +// }; + + +// export default connect(mapStateToProps, mapDispatchToProps)(Settings); +export default Settings; diff --git a/frontend/src/components/template/listItems.js b/frontend/src/components/template/listItems.js index 860f61b6ce98b16063530bb2627eb765f59cd5ba..ca4ca04503cd05189d3bd4cf73d4b4c9358d143c 100644 --- a/frontend/src/components/template/listItems.js +++ b/frontend/src/components/template/listItems.js @@ -10,6 +10,7 @@ import BarChartIcon from '@material-ui/icons/BarChart'; import HomeIcon from '@material-ui/icons/Home'; import SearchIcon from '@material-ui/icons/Search'; import FilterIcon from '@material-ui/icons/FilterList'; +import SettingsIcon from '@material-ui/icons/Settings'; import AssignmentIcon from '@material-ui/icons/Assignment'; import { NavLink } from 'react-router-dom' @@ -58,6 +59,15 @@ export const mainListItems = ( + + + + + + + + + diff --git a/frontend/src/index.js b/frontend/src/index.js index acd062ca24c8c29863aa186959260e87ba2f05fb..5429a41ca19f03d8fa4f10ec5c9703071688cf2b 100644 --- a/frontend/src/index.js +++ b/frontend/src/index.js @@ -7,14 +7,15 @@ import { BrowserRouter as Router, Route } from 'react-router-dom'; import store from "./store/index"; import App from "./components/App"; +import ThemeProvider from './components/ThemeProvider' const MainReactEntry = () => ( - - - - - + + + + + ); diff --git a/frontend/src/reducers/filter.js b/frontend/src/reducers/filter.js index df4d7e424b2a8810e601d2a3529bbc613c0776bb..c70f94bdabdf82994708b296d58a017803f2c6c0 100644 --- a/frontend/src/reducers/filter.js +++ b/frontend/src/reducers/filter.js @@ -15,7 +15,7 @@ export function saveSelectedUniversities(state = [], action) { export function saveFilterConfig(state = { contriesFilter: { selectedItems: [], inputValue: '' } }, action) { switch (action.type) { case SAVE_FILTER_CONFIG: - return Object.assign(state, action.config) + return Object.assign({}, state, action.config) default: return state; diff --git a/frontend/src/reducers/index.js b/frontend/src/reducers/index.js index f31d9a37b24f1789f54f2c726265a420e11ff519..7ea7a640af942508c0b7e410a4a6dd8f5a79502a 100644 --- a/frontend/src/reducers/index.js +++ b/frontend/src/reducers/index.js @@ -13,11 +13,13 @@ import { import { saveMainMapPosition } from './map'; import { saveSelectedUniversities } from './filter'; import { saveFilterConfig } from './filter'; +import { saveAppTheme } from './theme'; const appReducers = combineReducers({ mainMap: saveMainMapPosition, selectedUniversities: saveSelectedUniversities, filter: saveFilterConfig, + appTheme: saveAppTheme }) const rootReducer = combineReducers({ diff --git a/frontend/src/reducers/search.js b/frontend/src/reducers/search.js new file mode 100644 index 0000000000000000000000000000000000000000..c70f94bdabdf82994708b296d58a017803f2c6c0 --- /dev/null +++ b/frontend/src/reducers/search.js @@ -0,0 +1,24 @@ +import { SAVE_SELECTED_UNIVERSITIES, SAVE_FILTER_CONFIG } from '../actions/action-types' + +export function saveSelectedUniversities(state = [], action) { + switch (action.type) { + case SAVE_SELECTED_UNIVERSITIES: + return { + selection: action.new_selection, + } + + default: + return state; + } +} + +export function saveFilterConfig(state = { contriesFilter: { selectedItems: [], inputValue: '' } }, action) { + switch (action.type) { + case SAVE_FILTER_CONFIG: + return Object.assign({}, state, action.config) + + default: + return state; + } +} + diff --git a/frontend/src/reducers/theme.js b/frontend/src/reducers/theme.js new file mode 100644 index 0000000000000000000000000000000000000000..e1db65756147ddbcf324405e68af4e2fb0575c71 --- /dev/null +++ b/frontend/src/reducers/theme.js @@ -0,0 +1,20 @@ +import { SAVE_APP_THEME } from '../actions/action-types' +import indigo from '@material-ui/core/colors/indigo'; +import pink from '@material-ui/core/colors/pink'; + +const defaultTheme = { + palette: { + primary: pink, + secondary: indigo, // Indigo is probably a good match with pink, + type: 'dark' + } +} +export function saveAppTheme(state = defaultTheme, action) { + switch (action.type) { + case SAVE_APP_THEME: + return Object.assign({}, state, action.theme) + + default: + return state; + } +} diff --git a/frontend/templates/frontend/index.html b/frontend/templates/frontend/index.html index 1a3d93f579de037c60dce8132b9e8bb8ffbb46dc..5573f431665e5e6f978661b4279ac61ff408bb3b 100644 --- a/frontend/templates/frontend/index.html +++ b/frontend/templates/frontend/index.html @@ -2,7 +2,11 @@ - + Outgoing REX diff --git a/package-lock.json b/package-lock.json index 6c751c51484cd444e3be7aae93902667c6030178..20c12d107fec57f284c56c24caa71a7536570354 100644 --- a/package-lock.json +++ b/package-lock.json @@ -81,6 +81,17 @@ } } }, + "@material-ui/docs": { + "version": "1.0.0-alpha.5", + "resolved": "https://registry.npmjs.org/@material-ui/docs/-/docs-1.0.0-alpha.5.tgz", + "integrity": "sha512-JeXSV4ICzL4xf9dZhAi/2N3EMkZT22z2GBF5tf/KjNXOKbb7yp93b2YLKl/Z1Ua4IIi28oh5YTRJ5v2mZK3MAQ==", + "requires": { + "@babel/runtime": "7.0.0-rc.1", + "marked": "^0.5.0", + "nprogress": "^0.2.0", + "prismjs": "^1.8.4" + } + }, "@material-ui/icons": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-2.0.3.tgz", @@ -91,6 +102,31 @@ "recompose": "^0.28.0" } }, + "@material-ui/lab": { + "version": "3.0.0-alpha.14", + "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-3.0.0-alpha.14.tgz", + "integrity": "sha512-OQHF+eWdCCUrnYEcubG+Ok+gcAjxzuj3UlzpbzVEy1W5Ja50MVuz1i2ZsAjOxwBDBASaMLYqHkuyT4vA746K3Q==", + "requires": { + "@babel/runtime": "7.0.0", + "classnames": "^2.2.5", + "keycode": "^2.1.9" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz", + "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==", + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + } + } + }, "@types/jss": { "version": "9.5.5", "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.5.tgz", @@ -1944,6 +1980,17 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, + "clipboard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz", + "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -2426,6 +2473,12 @@ } } }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", @@ -3732,6 +3785,15 @@ } } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -4565,6 +4627,11 @@ "object-visit": "^1.0.0" } }, + "marked": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.0.tgz", + "integrity": "sha512-UhjmkCWKu1SS/BIePL2a59BMJ7V42EYtTfksodPRXzPEGEph3Inp5dylseqt+KbU9Jglsx8xcMKmlumfJMBXAA==" + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -4853,6 +4920,11 @@ "path-key": "^2.0.0" } }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -5227,6 +5299,14 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prismjs": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz", + "integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==", + "requires": { + "clipboard": "^2.0.0" + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -6035,6 +6115,12 @@ "ajv-keywords": "^3.1.0" } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, "semver": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", @@ -6489,6 +6575,12 @@ "setimmediate": "^1.0.4" } }, + "tiny-emitter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", + "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==", + "optional": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", diff --git a/package.json b/package.json index 8d928477f8d733d79dc82a951734c89c998810f3..f2fba1a015266cc43b23e65671a3abf1df32b99a 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ "license": "ISC", "dependencies": { "@material-ui/core": "^3.0.1", + "@material-ui/docs": "^1.0.0-alpha.5", + "@material-ui/lab": "^3.0.0-alpha.14", "babel-polyfill": "^6.26.0", "cross-fetch": "^2.2.2", "downshift": "^2.2.0",