Updating Toggle component to use input instead of divs
This commit is contained in:
parent
929eb86b27
commit
958c27aeeb
@ -5,34 +5,44 @@ const React = require('react');
|
|||||||
const styles = require('./style.css');
|
const styles = require('./style.css');
|
||||||
|
|
||||||
const Toggle = ({
|
const Toggle = ({
|
||||||
off = false,
|
checked = false,
|
||||||
className,
|
className,
|
||||||
style
|
style
|
||||||
}) => {
|
}) => {
|
||||||
const tgl = classNames(
|
const tgl = classNames(
|
||||||
className,
|
className,
|
||||||
styles.toggle,
|
styles.tgl,
|
||||||
off ? styles.off : styles.on,
|
checked ? styles.on : styles.off,
|
||||||
);
|
);
|
||||||
|
|
||||||
const btn = classNames(
|
const input = classNames(
|
||||||
className,
|
className,
|
||||||
styles.btn
|
styles.input
|
||||||
|
);
|
||||||
|
|
||||||
|
const label = classNames(
|
||||||
|
className,
|
||||||
|
styles.label
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={tgl} style={style}>
|
<div className='' style={style}>
|
||||||
<div className={btn} />
|
<label className={tgl} htmlFor='toggle' >
|
||||||
<span className={styles.label}>
|
<input
|
||||||
{off ? 'Off' : 'On'}
|
checked={checked}
|
||||||
</span>
|
className={input}
|
||||||
|
id='toggle'
|
||||||
|
type='checkbox'
|
||||||
|
/>
|
||||||
|
<div className={label} />
|
||||||
|
</label>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
Toggle.propTypes = {
|
Toggle.propTypes = {
|
||||||
|
checked: React.PropTypes.bool,
|
||||||
className: React.PropTypes.string,
|
className: React.PropTypes.string,
|
||||||
off: React.PropTypes.bool,
|
|
||||||
style: React.PropTypes.object
|
style: React.PropTypes.object
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# `<Button>`
|
# `<Toggle>`
|
||||||
|
|
||||||
## demo
|
## demo
|
||||||
|
|
||||||
@ -16,10 +16,7 @@ nmodule.exports = ReactDOM.renderToString(
|
|||||||
<Base>
|
<Base>
|
||||||
<Row>
|
<Row>
|
||||||
<Column>
|
<Column>
|
||||||
<Toggle />
|
<Toggle checked />
|
||||||
</Column>
|
|
||||||
<Column>
|
|
||||||
<Toggle off />
|
|
||||||
</Column>
|
</Column>
|
||||||
</Row>
|
</Row>
|
||||||
</Base>
|
</Base>
|
||||||
|
@ -15,55 +15,69 @@
|
|||||||
--bottom-shaddow: ~boxes.bottomShaddow;
|
--bottom-shaddow: ~boxes.bottomShaddow;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle {
|
.tgl {
|
||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
color: #464646;
|
color: #464646;
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
||||||
height: 2.5rem;
|
height: 2.5rem;
|
||||||
width: 5rem;
|
width: 110px;
|
||||||
|
|
||||||
& .btn,
|
|
||||||
& .label {
|
|
||||||
height: 2.188rem;
|
|
||||||
margin: 0.125rem;
|
|
||||||
width: 2.188rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
& .label {
|
.label {
|
||||||
padding-top: 4px;
|
background-color: #E6E6E6;
|
||||||
text-align: center;
|
border: solid 1px #D8D8D8;
|
||||||
}
|
|
||||||
|
|
||||||
& .btn {
|
|
||||||
background: #FFFFFF;
|
|
||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
box-shadow: var(--bottom-shaddow);
|
color: #000000;
|
||||||
|
height: remcalc(54);
|
||||||
|
margin: 0.125rem;
|
||||||
|
padding: remcalc(12 12 12 0);
|
||||||
|
position: relative;
|
||||||
|
text-align: right;
|
||||||
|
width: remcalc(106);
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: "Off";
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
font-weight: bold;
|
||||||
|
position: absolute;
|
||||||
|
right: 14px;
|
||||||
|
top: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.on {
|
&::after {
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
content: "";
|
||||||
|
height: remcalc(46);
|
||||||
|
left: 3px;
|
||||||
|
position: absolute;
|
||||||
|
top: 3px;
|
||||||
|
width: remcalc(46);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
&:checked {
|
||||||
|
& + .label {
|
||||||
background: var(--background-confirmed);
|
background: var(--background-confirmed);
|
||||||
border: var(--border-confirmed);
|
border: var(--border-confirmed);
|
||||||
|
|
||||||
& .label {
|
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
float: right;
|
padding: remcalc(12 0 12 12);
|
||||||
|
text-align: left;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: "On";
|
||||||
|
left: 14px;
|
||||||
|
right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
& .btn {
|
&::after {
|
||||||
float: left;
|
left: auto;
|
||||||
}
|
right: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.off {
|
|
||||||
background: #E6E6E6;
|
|
||||||
border: var(--border-unchecked);
|
|
||||||
|
|
||||||
& .label {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
& .btn {
|
|
||||||
float: right;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user