// Tremor Raw Button [v0.0.0] import React from "react"; import { Slot } from "@radix-ui/react-slot"; import { tv, type VariantProps } from "tailwind-variants"; import { cx, focusRing } from "../../lib/utils"; const buttonVariants = tv({ base: [ // base "onvo-relative onvo-inline-flex onvo-items-center onvo-justify-center onvo-rounded-md onvo-border-solid onvo-border onvo-px-3 onvo-py-1.5 onvo-text-center onvo-text-sm onvo-font-medium onvo-shadow-sm onvo-transition-all onvo-duration-100 onvo-ease-in-out", // disabled "disabled:onvo-pointer-events-none disabled:onvo-shadow-none", // focus focusRing, ], variants: { variant: { primary: [ // border "onvo-border-transparent", // text color "onvo-text-white dark:onvo-text-slate-900", // background color "onvo-bg-slate-900 dark:onvo-bg-slate-50", // hover color "hover:onvo-bg-slate-800 dark:hover:onvo-bg-slate-200", // disabled "disabled:onvo-bg-slate-100 disabled:onvo-text-slate-400", "disabled:dark:onvo-bg-slate-800 disabled:dark:onvo-text-slate-600", ], secondary: [ // border "onvo-border-slate-200 dark:onvo-border-slate-800", // text color "onvo-text-slate-900 dark:onvo-text-slate-50", // background color "onvo-bg-white dark:onvo-bg-slate-950", //hover color "hover:onvo-bg-slate-50 dark:hover:onvo-bg-slate-900/60", // disabled "disabled:onvo-text-slate-400", "disabled:dark:onvo-text-slate-600", ], light: [ // base "onvo-shadow-none", // border "onvo-border-transparent", // text color "onvo-text-gray-900 dark:onvo-text-gray-50", // background color "onvo-bg-gray-200 dark:onvo-bg-gray-900", // hover color "hover:onvo-bg-gray-300/70 dark:hover:onvo-bg-gray-800/80", // disabled "disabled:onvo-bg-gray-100 disabled:onvo-text-gray-400", "disabled:dark:onvo-bg-gray-800 disabled:dark:onvo-text-gray-600", ], ghost: [ // base "!onvo-shadow-none", // border "onvo-border-transparent", // text color "onvo-text-gray-900 dark:onvo-text-gray-50", // hover color "onvo-bg-transparent hover:onvo-bg-gray-100 dark:hover:onvo-bg-gray-800/80", // disabled "disabled:onvo-text-gray-400", "disabled:dark:onvo-text-gray-600", ], destructive: [ // text color "onvo-text-white", // border "onvo-border-transparent", // background color "onvo-bg-red-600 dark:onvo-bg-red-700", // hover color "hover:onvo-bg-red-700 dark:hover:onvo-bg-red-600", // disabled "disabled:onvo-bg-red-300 disabled:onvo-text-white", "disabled:dark:onvo-bg-red-950 disabled:dark:onvo-text-red-400", ], }, }, defaultVariants: { variant: "primary", }, }); interface ButtonProps extends React.ComponentPropsWithoutRef<"button">, VariantProps { asChild?: boolean; isLoading?: boolean; loadingText?: string; } const Loader: React.FC<{ className?: string }> = ({ className }) => { return ( ); }; const Button = React.forwardRef( ( { asChild, isLoading = false, loadingText, className, disabled, variant, children, ...props }: ButtonProps, forwardedRef ) => { const Component = asChild ? Slot : "button"; return ( {isLoading ? ( ) : ( children )} ); } ); Button.displayName = "Button"; export { Button, buttonVariants, type ButtonProps };