import cx from "clsx"; import { type ButtonHTMLAttributes, forwardRef, type PropsWithChildren } from "react"; import { registerComponent } from "../../registries/components"; export const BUTTON_VARIANTS = [ "primary", "secondary", "success", "danger", "warning", "info", "light", "dark", "link", "outline-primary", "outline-secondary", "outline-success", "outline-danger", "outline-warning", "outline-info", "outline-light", "outline-dark", "outline-link" ]; interface BaseButtonProps extends ButtonHTMLAttributes { tag?: "button" | "a" | "input" | "div"; variant?: (typeof BUTTON_VARIANTS)[keyof typeof BUTTON_VARIANTS] | string; } interface HTMLAnchorProps extends BaseButtonProps { tag: "a"; } interface HTMLButtonProps extends BaseButtonProps { tag?: "button"; } interface HTMLInputProps extends BaseButtonProps { tag: "input"; } interface HTMLDivProps extends BaseButtonProps { tag: "div"; } export type ButtonProps = HTMLAnchorProps | HTMLButtonProps | HTMLInputProps | HTMLDivProps; export const Button = forwardRef(({ tag: Tag = "button", variant, className, children, ...props }: PropsWithChildren, ref) => { return ( !props.disabled && props.onClick?.(evt as any)} > {children} ); }); Button.displayName = "Button"; registerComponent("Button", Button);