diff --git a/packages/ui/src/atoms/Menu.js b/packages/ui/src/atoms/Menu.js index 1c017b75887c1fe2f4053c29c3dd4a05d63b7601..2203f7f5fa9fe501791a95aff68a58c073b49003 100644 --- a/packages/ui/src/atoms/Menu.js +++ b/packages/ui/src/atoms/Menu.js @@ -4,6 +4,10 @@ import styled from 'styled-components' // TODO: match the width of the container to the width of the widest option? // TODO: use a <select> element instead of divs? +const Root = styled.div` + font-size: 1em; +` + const Label = styled.span` display: block; font-size: 1em; @@ -20,6 +24,15 @@ const Opener = styled.button.attrs({ cursor: pointer; font-family: inherit; font-size: 1.2em; + + border-left: 2px solid + ${props => (props.open ? 'var(--color-primary)' : 'lightgrey')}; + color: ${props => (props.open ? 'var(--color-primary)' : 'inherit')}; + + &:hover { + border-left: 2px solid var(--color-primary); + color: var(--color-primary); + } ` const Placeholder = styled.span` @@ -27,6 +40,11 @@ const Placeholder = styled.span` font-style: italic; font-weight: 400; text-transform: normal; + color: #aaa; + + &:hover { + color: var(--color-primary); + } ` const Arrow = styled.span` @@ -34,6 +52,7 @@ const Arrow = styled.span` font-size: 50%; margin-left: 10px; transition: transform 0.2s; + transform: scaleX(2.2) scaleY(${props => (props.open ? -1.2 : 1.2)}); ` const Main = styled.div.attrs({ @@ -58,6 +77,9 @@ const Options = styled.div` transition: opacity 2s; width: 0; z-index: 10; + + min-width: ${props => (props.open ? '10em' : '0')}; + opacity: ${props => (props.open ? '1' : '0')}; ` const Option = styled.div.attrs({ @@ -77,38 +99,6 @@ const Option = styled.div.attrs({ } ` -const Root = styled.div` - font-size: 1em; - - ${Opener} { - border-left: 2px solid - ${props => (props.open ? 'var(--color-primary)' : 'lightgrey')}; - color: ${props => (props.open ? 'var(--color-primary)' : 'inherit')}; - - ${Placeholder} { - color: #aaa; - } - } - - ${Opener}:hover { - border-left: 2px solid var(--color-primary); - color: var(--color-primary); - - ${Placeholder} { - color: var(--color-primary); - } - } - - ${Arrow} { - transform: scaleX(2.2) scaleY(${props => (props.open ? -1.2 : 1.2)}); - } - - ${Options} { - min-width: ${props => (props.open ? '10em' : '0')}; - opacity: ${props => (props.open ? '1' : '0')}; - } -` - /* Not used for now .inline { align-items: flex-end; @@ -182,19 +172,19 @@ class Menu extends React.Component { <Main> <OpenerContainer> - <Opener onClick={this.toggleMenu}> + <Opener onClick={this.toggleMenu} open={open}> {selected ? ( <span>{this.optionLabel(selected)}</span> ) : ( <Placeholder>{placeholder}</Placeholder> )} - <Arrow>â–¼</Arrow> + <Arrow open={open}>â–¼</Arrow> </Opener> </OpenerContainer> <OptionsContainer> {open && ( - <Options> + <Options open={open}> {options.map(option => ( <Option active={option.value === selected} diff --git a/packages/ui/test/__snapshots__/Menu.test.js.snap b/packages/ui/test/__snapshots__/Menu.test.js.snap index 7b4ffde16ff0a2ff5002a64a988c6a3931582e2c..f5a6d6fbce5d49a9979c11eea1974d231acbdfef 100644 --- a/packages/ui/test/__snapshots__/Menu.test.js.snap +++ b/packages/ui/test/__snapshots__/Menu.test.js.snap @@ -1,64 +1,45 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Menu is rendered correctly 1`] = ` -.c3 { +.c0 { + font-size: 1em; +} + +.c2 { background: transparent; border: none; cursor: pointer; font-family: inherit; font-size: 1.2em; + border-left: 2px solid lightgrey; + color: inherit; } -.c5 { +.c2:hover { + border-left: 2px solid var(--color-primary); + color: var(--color-primary); +} + +.c3 { display: inline-block; font-size: 50%; margin-left: 10px; -webkit-transition: -webkit-transform 0.2s; -webkit-transition: transform 0.2s; transition: transform 0.2s; + -webkit-transform: scaleX(2.2) scaleY(1.2); + -ms-transform: scaleX(2.2) scaleY(1.2); + transform: scaleX(2.2) scaleY(1.2); } .c1 { position: relative; } -.c6 { +.c4 { position: absolute; } -.c0 { - font-size: 1em; -} - -.c0 .c2 { - border-left: 2px solid lightgrey; - color: inherit; -} - -.c0 .c2 .sc-bxivhb { - color: #aaa; -} - -.c0 .c2:hover { - border-left: 2px solid var(--color-primary); - color: var(--color-primary); -} - -.c0 .c2:hover .sc-bxivhb { - color: var(--color-primary); -} - -.c0 .c4 { - -webkit-transform: scaleX(2.2) scaleY(1.2); - -ms-transform: scaleX(2.2) scaleY(1.2); - transform: scaleX(2.2) scaleY(1.2); -} - -.c0 .sc-gzVnrw { - min-width: 0; - opacity: 0; -} - <div className="c0" open={false} @@ -71,54 +52,70 @@ exports[`Menu is rendered correctly 1`] = ` className="" > <button - className="c2 c3" + className="c2" onClick={[Function]} + open={false} type="button" > <span> Foo </span> <span - className="c4 c5" + className="c3" + open={false} > â–¼ </span> </button> </div> <div - className="c6" + className="c4" /> </div> </div> `; exports[`Menu is rendered correctly when open 1`] = ` -.c3 { +.c0 { + font-size: 1em; +} + +.c2 { background: transparent; border: none; cursor: pointer; font-family: inherit; font-size: 1.2em; + border-left: 2px solid var(--color-primary); + color: var(--color-primary); } -.c5 { +.c2:hover { + border-left: 2px solid var(--color-primary); + color: var(--color-primary); +} + +.c3 { display: inline-block; font-size: 50%; margin-left: 10px; -webkit-transition: -webkit-transform 0.2s; -webkit-transition: transform 0.2s; transition: transform 0.2s; + -webkit-transform: scaleX(2.2) scaleY(-1.2); + -ms-transform: scaleX(2.2) scaleY(-1.2); + transform: scaleX(2.2) scaleY(-1.2); } .c1 { position: relative; } -.c6 { +.c4 { position: absolute; } -.c8 { +.c5 { background-color: white; border-bottom: 2px solid var(--color-primary); border-left: 2px solid var(--color-primary); @@ -131,9 +128,11 @@ exports[`Menu is rendered correctly when open 1`] = ` transition: opacity 2s; width: 0; z-index: 10; + min-width: 10em; + opacity: 1; } -.c9 { +.c6 { color: black; font-weight: 600; cursor: pointer; @@ -142,11 +141,11 @@ exports[`Menu is rendered correctly when open 1`] = ` white-space: nowrap; } -.c9:hover { +.c6:hover { color: var(--color-primary); } -.c10 { +.c7 { color: #444; font-weight: inherit; cursor: pointer; @@ -155,72 +154,10 @@ exports[`Menu is rendered correctly when open 1`] = ` white-space: nowrap; } -.c10:hover { - color: var(--color-primary); -} - -.gQZhbO .c2 { - border-left: 2px solid lightgrey; - color: inherit; -} - -.gQZhbO .c2 .sc-bxivhb { - color: #aaa; -} - -.gQZhbO .c2:hover { - border-left: 2px solid var(--color-primary); - color: var(--color-primary); -} - -.gQZhbO .c2:hover .sc-bxivhb { - color: var(--color-primary); -} - -.gQZhbO .c4 { - -webkit-transform: scaleX(2.2) scaleY(1.2); - -ms-transform: scaleX(2.2) scaleY(1.2); - transform: scaleX(2.2) scaleY(1.2); -} - -.gQZhbO .c7 { - min-width: 0; - opacity: 0; -} - -.c0 { - font-size: 1em; -} - -.c0 .c2 { - border-left: 2px solid var(--color-primary); +.c7:hover { color: var(--color-primary); } -.c0 .c2 .sc-bxivhb { - color: #aaa; -} - -.c0 .c2:hover { - border-left: 2px solid var(--color-primary); - color: var(--color-primary); -} - -.c0 .c2:hover .sc-bxivhb { - color: var(--color-primary); -} - -.c0 .c4 { - -webkit-transform: scaleX(2.2) scaleY(-1.2); - -ms-transform: scaleX(2.2) scaleY(-1.2); - transform: scaleX(2.2) scaleY(-1.2); -} - -.c0 .c7 { - min-width: 10em; - opacity: 1; -} - <div className="c0" open={true} @@ -233,29 +170,32 @@ exports[`Menu is rendered correctly when open 1`] = ` className="" > <button - className="c2 c3" + className="c2" onClick={[Function]} + open={true} type="button" > <span> Foo </span> <span - className="c4 c5" + className="c3" + open={true} > â–¼ </span> </button> </div> <div - className="c6" + className="c4" > <div - className="c7 c8" + className="c5" + open={true} > <div aria-selected={true} - className="c9" + className="c6" onClick={[Function]} onKeyPress={[Function]} role="option" @@ -265,7 +205,7 @@ exports[`Menu is rendered correctly when open 1`] = ` </div> <div aria-selected={false} - className="c10" + className="c7" onClick={[Function]} onKeyPress={[Function]} role="option"