mirror of
https://github.com/snowball-tools/snowballtools-base
synced 2025-05-04 09:51:14 +00:00
* ⚡️ feat: create switch component * 📝 docs: add switch to the example page * 🔧 chore: install `@radix-ui/react-switch` * 🎨 style: add inset shadow * 🎨 style: addjust input outline when error and focus
85 lines
1.8 KiB
TypeScript
85 lines
1.8 KiB
TypeScript
import { tv, type VariantProps } from 'tailwind-variants';
|
|
|
|
export const switchTheme = tv({
|
|
slots: {
|
|
wrapper: ['flex', 'items-start', 'gap-4', 'w-[375px]'],
|
|
switch: [
|
|
'h-6',
|
|
'w-12',
|
|
'rounded-full',
|
|
'transition-all',
|
|
'duration-500',
|
|
'relative',
|
|
'cursor-default',
|
|
'shadow-inset',
|
|
'focus-ring',
|
|
'outline-none',
|
|
],
|
|
thumb: [
|
|
'block',
|
|
'h-4',
|
|
'w-4',
|
|
'translate-x-1',
|
|
'transition-transform',
|
|
'duration-100',
|
|
'will-change-transform',
|
|
'rounded-full',
|
|
'shadow-button',
|
|
'data-[state=checked]:translate-x-7',
|
|
'bg-controls-elevated',
|
|
],
|
|
label: [
|
|
'flex',
|
|
'flex-1',
|
|
'flex-col',
|
|
'px-1',
|
|
'gap-1',
|
|
'text-sm',
|
|
'text-elements-high-em',
|
|
'tracking-[-0.006em]',
|
|
],
|
|
description: ['text-xs', 'text-elements-low-em'],
|
|
},
|
|
variants: {
|
|
checked: {
|
|
true: {
|
|
switch: [
|
|
'bg-controls-primary',
|
|
'hover:bg-controls-primary-hovered',
|
|
'focus-visible:bg-controls-primary-hovered',
|
|
],
|
|
},
|
|
false: {
|
|
switch: [
|
|
'bg-controls-inset',
|
|
'hover:bg-controls-inset-hovered',
|
|
'focus-visible:bg-controls-inset-hovered',
|
|
],
|
|
},
|
|
},
|
|
disabled: {
|
|
true: {
|
|
switch: ['bg-controls-disabled', 'cursor-not-allowed'],
|
|
thumb: ['bg-elements-on-disabled'],
|
|
},
|
|
},
|
|
fullWidth: {
|
|
true: {
|
|
wrapper: ['w-full', 'justify-between'],
|
|
},
|
|
},
|
|
},
|
|
compoundVariants: [
|
|
{
|
|
checked: true,
|
|
disabled: true,
|
|
class: {
|
|
switch: ['bg-controls-disabled-active'],
|
|
thumb: ['bg-snowball-900'],
|
|
},
|
|
},
|
|
],
|
|
});
|
|
|
|
export type SwitchVariants = VariantProps<typeof switchTheme>;
|