mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Switch component initial draft
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
parent
8082501bb3
commit
8c09e3c486
@ -27,7 +27,7 @@ import { ThemeStore } from "../../theme.store";
|
||||
import { UserStore } from "../../../common/user-store";
|
||||
import { Input } from "../input";
|
||||
import { isWindows } from "../../../common/vars";
|
||||
import { FormSwitch, Switcher } from "../switch";
|
||||
import { FormSwitch, Switch, Switcher } from "../switch";
|
||||
import moment from "moment-timezone";
|
||||
import { CONSTANTS, defaultExtensionRegistryUrl, ExtensionRegistryLocation } from "../../../common/user-store/preferences-helpers";
|
||||
import { action } from "mobx";
|
||||
@ -135,7 +135,8 @@ export const Application = observer(() => {
|
||||
|
||||
<section id="other">
|
||||
<SubTitle title="Start-up"/>
|
||||
<FormSwitch
|
||||
<Switch checked={userStore.openAtLogin}>Automatically start Lens on login</Switch>
|
||||
{/* <FormSwitch
|
||||
control={
|
||||
<Switcher
|
||||
checked={userStore.openAtLogin}
|
||||
@ -144,7 +145,7 @@ export const Application = observer(() => {
|
||||
/>
|
||||
}
|
||||
label="Automatically start Lens on login"
|
||||
/>
|
||||
/> */}
|
||||
</section>
|
||||
|
||||
<hr />
|
||||
|
||||
@ -21,3 +21,4 @@
|
||||
|
||||
export * from "./switcher";
|
||||
export * from "./form-switcher";
|
||||
export * from "./switch";
|
||||
|
||||
107
src/renderer/components/switch/switch.module.scss
Normal file
107
src/renderer/components/switch/switch.module.scss
Normal file
@ -0,0 +1,107 @@
|
||||
/**
|
||||
* Copyright (c) 2021 OpenLens Authors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* Based on switch component from https://github.com/argyleink/gui-challenges */
|
||||
|
||||
.Switch {
|
||||
--thumb: hsl(0 0% 5%);
|
||||
--thumb-highlight: hsl(0 0% 100% / 25%);
|
||||
--track-inactive: hsl(80 0% 35%);
|
||||
--track-active: hsl(85 75% 60%);
|
||||
|
||||
--thumb-size: 2rem;
|
||||
--thumb: hsl(0 0% 100%);
|
||||
--thumb-highlight: hsl(0 0% 0% / 25%);
|
||||
|
||||
--track-size: calc(var(--thumb-size) * 2);
|
||||
--track-padding: 2px;
|
||||
--track-inactive: hsl(80 0% 80%);
|
||||
--track-active: rgb(85, 70%, 40%);
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 2ch;
|
||||
justify-content: space-between;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
|
||||
& > input {
|
||||
--thumb-position: 0%;
|
||||
--thumb-transition-duration: .25s;
|
||||
|
||||
padding: var(--track-padding);
|
||||
background: var(--track-color-inactive);
|
||||
inline-size: var(--track-size);
|
||||
block-size: var(--thumb-size);
|
||||
border-radius: var(--track-size);
|
||||
|
||||
appearance: none;
|
||||
pointer-events: none;
|
||||
touch-action: pan-y;
|
||||
border: none;
|
||||
outline-offset: 5px;
|
||||
box-sizing: content-box;
|
||||
|
||||
flex-shrink: 0;
|
||||
display: grid;
|
||||
align-items: center;
|
||||
grid: [track] 1fr / [track] 1fr;
|
||||
|
||||
transition: background-color .25s ease;
|
||||
|
||||
&::before {
|
||||
--highlight-size: 0;
|
||||
|
||||
content: "";
|
||||
cursor: pointer;
|
||||
pointer-events: auto;
|
||||
grid-area: track;
|
||||
inline-size: var(--thumb-size);
|
||||
block-size: var(--thumb-size);
|
||||
background: var(--thumb-color);
|
||||
box-shadow: 0 0 0 var(--highlight-size) var(--thumb-color-highlight);
|
||||
border-radius: 50%;
|
||||
transform: translateX(var(--thumb-position));
|
||||
transition:
|
||||
transform var(--thumb-transition-duration) ease,
|
||||
box-shadow .25s ease;
|
||||
}
|
||||
|
||||
&:not(:disabled):hover::before {
|
||||
--highlight-size: .5rem;
|
||||
}
|
||||
|
||||
&:checked {
|
||||
background: var(--track-color-active);
|
||||
--thumb-position: 100%;
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
cursor: not-allowed;
|
||||
--thumb-color: transparent;
|
||||
|
||||
&::before {
|
||||
cursor: not-allowed;
|
||||
box-shadow: inset 0 0 0 2px hsl(0 0% 0% / 50%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
38
src/renderer/components/switch/switch.tsx
Normal file
38
src/renderer/components/switch/switch.tsx
Normal file
@ -0,0 +1,38 @@
|
||||
/**
|
||||
* Copyright (c) 2021 OpenLens Authors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
import styles from "./switch.module.scss";
|
||||
|
||||
import React, { DetailedHTMLProps, InputHTMLAttributes } from "react";
|
||||
|
||||
interface Props extends DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement> {
|
||||
}
|
||||
|
||||
export function Switch(props: Props) {
|
||||
const id = `switch-${Date.now()}`;
|
||||
|
||||
return (
|
||||
<label htmlFor={id} className={styles.Switch}>
|
||||
{props.children}
|
||||
<input type="checkbox" role="switch" id={id} {...props}/>
|
||||
</label>
|
||||
);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user