Add toggle

This commit is contained in:
Jake Archibald
2020-12-07 13:40:24 +00:00
parent 7ab27cfa97
commit ea170fdc6d
4 changed files with 82 additions and 2 deletions

View File

@@ -0,0 +1,23 @@
import { h, Component } from 'preact';
import * as style from './style.css';
import 'add-css:./style.css';
import { UncheckedIcon, CheckedIcon } from '../../../icons';
interface Props extends preact.JSX.HTMLAttributes {}
interface State {}
export default class Toggle extends Component<Props, State> {
render(props: Props) {
return (
<div class={style.checkbox}>
{/* @ts-ignore - TS bug https://github.com/microsoft/TypeScript/issues/16019 */}
<input class={style.realCheckbox} type="checkbox" {...props} />
<div class={style.track}>
<div class={style.thumbTrack}>
<div class={style.thumb}></div>
</div>
</div>
</div>
);
}
}

View File

@@ -0,0 +1,55 @@
.checkbox {
display: inline-block;
position: relative;
}
.track {
--thumb-size: 14px;
background: var(--black);
border-radius: 1000px;
width: 24px;
padding: 3px calc(var(--thumb-size) / 2 + 3px);
}
.thumb {
position: relative;
width: var(--thumb-size);
height: var(--thumb-size);
background: var(--less-light-gray);
border-radius: 100%;
transform: translateX(calc(var(--thumb-size) / -2));
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: var(--main-theme-color);
opacity: 0;
transition: opacity 200ms ease;
}
}
.thumb-track {
transition: transform 200ms ease;
}
.real-checkbox {
top: 0;
position: absolute;
opacity: 0;
pointer-events: none;
&:checked + .track {
.thumb-track {
transform: translateX(100%);
}
.thumb::before {
opacity: 1;
}
}
}

View File

@@ -14,6 +14,7 @@ import {
} from '../../feature-meta';
import Expander from './Expander';
import Checkbox from './Checkbox';
import Toggle from './Toggle';
import Select from './Select';
import { Options as QuantOptionsComponent } from 'features/processors/quantize/client';
import { Options as ResizeOptionsComponent } from 'features/processors/resize/client';
@@ -127,7 +128,7 @@ export default class Options extends Component<Props, State> {
<h3 class={style.optionsTitle}>Edit</h3>
<label class={style.sectionEnabler}>
Resize
<Checkbox
<Toggle
name="resize.enable"
checked={!!processorState.resize.enabled}
onChange={this.onProcessorEnabledChange}
@@ -147,7 +148,7 @@ export default class Options extends Component<Props, State> {
<label class={style.sectionEnabler}>
Reduce palette
<Checkbox
<Toggle
name="quantize.enable"
checked={!!processorState.quantize.enabled}
onChange={this.onProcessorEnabledChange}