diff options
author | Eug-VS <eug-vs@keemail.me> | 2020-01-09 09:33:37 +0300 |
---|---|---|
committer | Eug-VS <eug-vs@keemail.me> | 2020-01-09 10:29:52 +0300 |
commit | 90f3eaa26b31d5f966bc3b8ece016b783f00ae2b (patch) | |
tree | 4bde9b8121704047a3d1dc00842f99d7026f6852 | |
parent | 142ef97911abaec96c5bc0779b322374437a56b5 (diff) | |
download | chrono-cube-ui-90f3eaa26b31d5f966bc3b8ece016b783f00ae2b.tar.gz |
Implement Window component
Divide Window into three types:
- primary: larger left window
- secondary: smaller right window
- mono: both primary and secondary merged together
For now, Window sizes are hard-coded values in viewport widht
and height measurements.
If a name prop specified, Window is displayed with a top bar.
-rw-r--r-- | src/components/Window/Window.js | 55 | ||||
-rw-r--r-- | src/components/Window/WindowSurface/WindowSurface.js | 31 | ||||
-rw-r--r-- | src/theme.js | 1 |
3 files changed, 87 insertions, 0 deletions
diff --git a/src/components/Window/Window.js b/src/components/Window/Window.js new file mode 100644 index 0000000..63bd6ba --- /dev/null +++ b/src/components/Window/Window.js @@ -0,0 +1,55 @@ +import React from 'react'; + +import { Typography, Divider, makeStyles } from "@material-ui/core"; + +import WindowSurface from "./WindowSurface/WindowSurface"; + + +const useStyles = makeStyles(theme => ({ + header: { + padding: theme.spacing(1, 0, 1, 2), + background: theme.palette.background.elevation, + }, +})); + + +const Window = ({ type, name, children }) => { + const classes = useStyles(); + + const size = { + height: '85vh', + }; + + const position = { + bottom: '3vh', + }; + + if (type === 'primary') { + size.width = '63vw'; + position.left = '2vw'; + } else if (type === 'secondary') { + size.width = '31vw'; + position.right = '2vw'; + } else if (type === 'mono') { + position.left = '2vw'; + position.right = '2vw'; + } + + return ( + <WindowSurface + size={size} + position={position} + > + {name && + <div> + <Typography variant="h5" className={classes.header}>{name}</Typography> + <Divider /> + </div> + } + {children} + </WindowSurface> + ); +}; + + +export default Window; diff --git a/src/components/Window/WindowSurface/WindowSurface.js b/src/components/Window/WindowSurface/WindowSurface.js new file mode 100644 index 0000000..d1d1510 --- /dev/null +++ b/src/components/Window/WindowSurface/WindowSurface.js @@ -0,0 +1,31 @@ +import React from 'react'; + +import { Paper, makeStyles } from "@material-ui/core"; + + +const useStyles = makeStyles(theme => ({ + surface: { + position: 'absolute', + display: 'flex', + flexDirection: 'column', + background: theme.palette.background.elevation, + } +})); + + +const WindowSurface = ({ size, position, children }) => { + const classes = useStyles(); + + return ( + <Paper + elevation={3} + style={{...size, ...position}} + className={classes.surface} + > + {children} + </Paper> + ) +}; + + +export default WindowSurface;
\ No newline at end of file diff --git a/src/theme.js b/src/theme.js index 941c9cd..3c671e6 100644 --- a/src/theme.js +++ b/src/theme.js @@ -12,6 +12,7 @@ const theme = createMuiTheme({ background: { default: '#232020', paper: '#0f0e0e', + elevation: 'rgba(255, 255, 255, 0.04)', }, text: { primary: '#f4f4f4', |