diff --git a/src/client/lazy-app/Compress/Options/Toggle/index.tsx b/src/client/lazy-app/Compress/Options/Toggle/index.tsx new file mode 100644 index 00000000..c484d833 --- /dev/null +++ b/src/client/lazy-app/Compress/Options/Toggle/index.tsx @@ -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 { + render(props: Props) { + return ( +
+ {/* @ts-ignore - TS bug https://github.com/microsoft/TypeScript/issues/16019 */} + +
+
+
+
+
+
+ ); + } +} diff --git a/src/client/lazy-app/Compress/Options/Toggle/style.css b/src/client/lazy-app/Compress/Options/Toggle/style.css new file mode 100644 index 00000000..c3b1a356 --- /dev/null +++ b/src/client/lazy-app/Compress/Options/Toggle/style.css @@ -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; + } + } +} diff --git a/src/client/lazy-app/Compress/Options/index.tsx b/src/client/lazy-app/Compress/Options/index.tsx index 589332fa..5208775d 100644 --- a/src/client/lazy-app/Compress/Options/index.tsx +++ b/src/client/lazy-app/Compress/Options/index.tsx @@ -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 {

Edit