@vela-ui/react
Version:
Vela UI React components
100 lines (97 loc) • 2.84 kB
JavaScript
import {
useToggleGroupContext
} from "./chunk-L732RLIU.mjs";
import {
focusRing
} from "./chunk-2FWUIDJB.mjs";
// src/components/toggle-button.tsx
import { ToggleButton as AriaToggleButton, composeRenderProps } from "react-aria-components";
import { tv } from "tailwind-variants";
import { jsx } from "react/jsx-runtime";
var toggleButtonVariants = tv({
extend: focusRing,
base: "inline-flex shrink-0 items-center justify-center rounded-md font-medium whitespace-nowrap transition-all [&_svg]:pointer-events-none [&_svg]:shrink-0",
variants: {
variant: {
default: "hover:bg-accent hover:text-accent-foreground data-[selected]:bg-primary data-[selected]:text-primary-foreground bg-transparent",
outline: "border-input hover:bg-accent hover:text-accent-foreground data-[selected]:bg-accent data-[selected]:text-accent-foreground border bg-transparent shadow-xs",
ghost: "data-[selected]:bg-accent data-[selected]:text-accent-foreground hover:bg-accent hover:text-accent-foreground bg-transparent"
},
size: {
xs: "size-8 gap-1 text-xs [&_svg:not([class*='size-'])]:size-4",
sm: "size-9 gap-2 text-sm [&_svg:not([class*='size-'])]:size-4",
md: "size-10 gap-2 text-sm [&_svg:not([class*='size-'])]:size-5",
lg: "size-11 gap-2.5 text-base [&_svg:not([class*='size-'])]:size-5",
xl: "size-12 gap-2.5 text-base [&_svg:not([class*='size-'])]:size-5"
},
shape: {
rectangle: "",
square: "",
circle: "rounded-full"
},
isDisabled: {
true: "pointer-events-none opacity-50"
},
isPending: {
true: "pointer-events-none opacity-50"
}
},
compoundVariants: [
{
size: "xs",
shape: "rectangle",
className: "w-auto px-2.5"
},
{
size: "sm",
shape: "rectangle",
className: "w-auto px-3.5"
},
{
size: "md",
shape: "rectangle",
className: "w-auto px-4"
},
{
size: "lg",
shape: "rectangle",
className: "w-auto px-5"
},
{
size: "xl",
shape: "rectangle",
className: "w-auto px-5"
}
],
defaultVariants: {
variant: "default",
size: "md",
shape: "rectangle"
}
});
function ToggleButton(props) {
const contextProps = useToggleGroupContext();
const buttonProps = { ...contextProps, ...props };
const { className, variant, size, shape, ...restProps } = buttonProps;
return /* @__PURE__ */ jsx(
AriaToggleButton,
{
"data-slot": "toggle-button",
className: composeRenderProps(
className,
(className2, renderProps) => toggleButtonVariants({
...renderProps,
variant,
size,
shape,
className: className2
})
),
...restProps
}
);
}
export {
toggleButtonVariants,
ToggleButton
};