vueless
Version:
Vue Styleless UI Component Library, powered by Tailwind CSS.
93 lines (92 loc) • 2.47 kB
text/typescript
export default /*tw*/ {
switchLabel: {
base: "{ULabel}",
wrapper: "items-center",
content: "h-fit",
},
wrapper: {
base: `
flex items-center p-0.5 relative rounded-full outline-transparent cursor-pointer transition focus-within:transition
focus-visible:outline focus-visible:outline-medium focus-visible:outline-offset-2 focus-visible:outline-{color}
`,
variants: {
size: {
sm: "w-6",
md: "w-8",
lg: "w-10",
},
checked: {
true: "bg-{color} hover:bg-{color}-lifted active:bg-{color}-accented",
false: "bg-accented",
},
disabled: {
true: "pointer-events-none",
},
},
compoundVariants: [
{ toggleLabel: true, size: "sm", class: "w-10" },
{ toggleLabel: true, size: "md", class: "w-12" },
{ toggleLabel: true, size: "lg", class: "w-14" },
{ disabled: true, checked: false, class: "bg-accented/(--vl-disabled-opacity)" },
{ disabled: true, checked: true, class: "bg-{color}/(--vl-disabled-opacity)" },
],
},
input: "sr-only",
circle: {
base: "rounded-full bg-default flex items-center justify-center transition-all",
variants: {
size: {
sm: "size-3",
md: "size-4",
lg: "size-5",
},
},
compoundVariants: [
{ checked: true, size: "sm", class: "ml-[calc(100%-0.75rem)]" },
{ checked: true, size: "md", class: "ml-[calc(100%-1rem)]" },
{ checked: true, size: "lg", class: "ml-[calc(100%-1.25rem)]" },
],
},
toggleIcon: {
base: "{UIcon}",
defaults: {
size: {
sm: "3xs",
md: "2xs",
lg: "xs",
},
},
},
toggleLabel: {
base: "absolute text-center text-tiny font-medium uppercase text-inverted",
compoundVariants: [
{ toggleLabel: true, checked: true, class: "w-1/2 left-1" },
{ toggleLabel: true, checked: false, class: "w-1/2 right-1" },
{
toggleLabel: false,
checked: true,
class: "bg-{color} hover:bg-{color}-lifted active:bg-{color}-accented",
},
{
toggleLabel: false,
checked: false,
class: "bg-accented",
},
],
},
i18n: {
inactive: "Off",
active: "On",
},
defaults: {
color: "primary",
size: "md",
labelAlign: "right",
disabled: false,
toggleIcon: false,
toggleLabel: false,
/* icons */
onIcon: "check",
offIcon: "close",
},
};