-
Notifications
You must be signed in to change notification settings - Fork 3
Using React‐Ladda‐Button with shadcn ui
DiamondDrake edited this page May 5, 2024
·
1 revision
Grab the shadcn/ui "button" to get its deps
npx shadcn-ui@latest add button
duplicate button.tsx into ladda-button.tsx
and overwrite it with
import * as React from "react"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
import 'react-ladda-button/dist/ladda-themeless.min.css';
import LaddaButtonComp, { LaddaButtonProps } from "react-ladda-button";
export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {}
const buttonVariants = cva(
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
{
variants: {
variant: {
default: "bg-primary text-primary-foreground hover:bg-primary/90",
destructive:
"bg-destructive text-destructive-foreground hover:bg-destructive/90",
outline:
"border border-input bg-background hover:bg-accent hover:text-accent-foreground",
secondary:
"bg-secondary text-secondary-foreground hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground",
link: "text-primary underline-offset-4 hover:underline",
},
size: {
default: "h-10 px-4 py-2",
sm: "h-9 rounded-md px-3",
lg: "h-11 rounded-md px-8",
icon: "h-10 w-10",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
const buttonVariantsSpinnerColor = cva('',
{
variants: {
variant: {
default: "hsl(var(--primary-foreground))",
destructive:
"hslvar(--destructive-foreground))",
outline:
"hsl(var(--forground))",
secondary:
"hsl(var(--secondary-foreground))",
ghost: "hsl(var(--foreground))",
link: "hsl(var(--primary))",
},
},
defaultVariants: {
variant: "default",
},
}
)
const LaddaButton: React.FC<React.PropsWithChildren<ButtonProps & LaddaButtonProps>> =
({ children, className, variant, size, ...props }) => {
return (
<LaddaButtonComp className={cn(buttonVariants({ variant, size, className }))} data-spinner-color={cn(buttonVariantsSpinnerColor({variant}))} {...props} >
<span className="ladda-label">{children}</span>
</LaddaButtonComp>
)
}
export { buttonVariants, LaddaButton }