diff --git a/src/components/DevToolbar.js b/src/components/DevToolbar.js new file mode 100644 index 00000000..293d9f6d --- /dev/null +++ b/src/components/DevToolbar.js @@ -0,0 +1,122 @@ +// @flow + +import React, { PureComponent } from 'react' +import reduce from 'lodash/fp/reduce' +import flow from 'lodash/fp/flow' +import filter from 'lodash/fp/filter' +import sortBy from 'lodash/fp/sortBy' +import styled from 'styled-components' +import color from 'color' + +import Box from 'components/base/Box' + +import theme from 'styles/theme' + +type HslColor = { + color: Array, +} + +type ColorType = { + name: string, + val: string, + color: { + isDark: () => boolean, + hsl: () => HslColor, + }, +} + +const transform = flow( + reduce.convert({ cap: false })((acc, cur, key) => { + const c = color(cur) + return [ + ...acc, + { + name: key, + val: cur, + color: c, + isDark: c.isDark(), + }, + ] + }, []), + filter(el => el.name !== 'transparent'), + sortBy(el => el.color.hsl().color[2]), +) + +const colors: Array = transform(theme.colors) + +const Container = styled(Box).attrs({ + bg: 'night', + p: 1, + color: 'white', + fontSize: 0, +})` + position: fixed; + bottom: 0; + right: 0; + z-index: 1; + border-top-left-radius: 3px; + transition: ease-in-out transform 300ms; + transform: translate3d(0, ${p => (p.isOpened ? '0' : '100%')}, 0); +` + +const Handle = styled(Box).attrs({ + bg: 'night', +})` + cursor: pointer; + padding: 3px 8px 3px 8px; + position: absolute; + bottom: 100%; + right: 5px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +` + +const Colors = styled(Box).attrs({ + horizontal: true, + align: 'flex-start', +})` + flex-wrap: wrap; + width: 416px; +` + +const Cl = styled(Box).attrs({ + align: 'center', + justify: 'center', + p: 2, +})` + border: 2px solid white; + margin: 2px; + width: 100px; + user-select: text; + cursor: text; +` + +const Color = ({ color }: { color: ColorType }) => ( + + {color.name} + +) + +type State = { + isOpened: boolean, +} + +class DevToolbar extends PureComponent { + state = { + isOpened: false, + } + + handleToggle = () => this.setState({ isOpened: !this.state.isOpened }) + + render() { + const { isOpened } = this.state + return ( + + {'DEV'} + {colors.map(color => )} + + ) + } +} + +export default DevToolbar diff --git a/src/components/SideBar/index.js b/src/components/SideBar/index.js index 0a15cb84..b4bbd41d 100644 --- a/src/components/SideBar/index.js +++ b/src/components/SideBar/index.js @@ -124,7 +124,7 @@ class SideBar extends PureComponent { - + diff --git a/src/components/TopBar.js b/src/components/TopBar.js index 3a5722ad..9d542a2c 100644 --- a/src/components/TopBar.js +++ b/src/components/TopBar.js @@ -14,7 +14,7 @@ import { hasPassword } from 'reducers/settings' import Box from 'components/base/Box' const Container = styled(Box).attrs({ - borderColor: 'grey', + borderColor: 'argile', borderWidth: 1, borderBottom: true, noShrink: true, diff --git a/src/components/Wrapper.js b/src/components/Wrapper.js index 85ecf759..1a4ca6d8 100644 --- a/src/components/Wrapper.js +++ b/src/components/Wrapper.js @@ -17,6 +17,7 @@ import AppRegionDrag from 'components/AppRegionDrag' import IsUnlocked from 'components/IsUnlocked' import SideBar from 'components/SideBar' import TopBar from 'components/TopBar' +import DevToolbar from 'components/DevToolbar' class Wrapper extends Component<{}> { render() { @@ -27,6 +28,8 @@ class Wrapper extends Component<{}> { ( + {__DEV__ && } + {Object.entries(modals).map(([name, ModalComponent]: [string, any]) => ( ))} diff --git a/src/components/base/CheckBox/index.js b/src/components/base/CheckBox/index.js index 5865639d..c2c7ed46 100644 --- a/src/components/base/CheckBox/index.js +++ b/src/components/base/CheckBox/index.js @@ -1,7 +1,6 @@ // @flow import React from 'react' -import noop from 'lodash/noop' import styled, { keyframes } from 'styled-components' import { Tabbable } from 'components/base/Box' @@ -54,14 +53,14 @@ type Props = { function CheckBox(props: Props) { const { isChecked, onChange, ...p } = props return ( - onChange(!isChecked)} {...p}> + onChange && onChange(!isChecked)} {...p}> {isChecked && } ) } CheckBox.defaultProps = { - onChange: noop, + onChange: null, } export default CheckBox diff --git a/src/components/base/Radio/index.js b/src/components/base/Radio/index.js index 9c74a08d..1c3e68fb 100644 --- a/src/components/base/Radio/index.js +++ b/src/components/base/Radio/index.js @@ -1,7 +1,6 @@ // @flow import React from 'react' -import noop from 'lodash/noop' import styled from 'styled-components' import { Tabbable } from 'components/base/Box' @@ -63,11 +62,11 @@ type Props = { function Radio(props: Props) { const { isChecked, onChange } = props - return onChange(!isChecked)} /> + return onChange && onChange(!isChecked)} /> } Radio.defaultProps = { - onChange: noop, + onChange: null, } export default Radio