"use client"; import clsx from "clsx"; import { type ComponentProps, type ElementType, type MouseEvent, type CSSProperties, useState, useCallback, } from "react"; const DEFAULT_GRADIENT_SIZE = "30rem"; type ButtonProps = Omit, "as"> & { as?: T; loading?: boolean | undefined; gradient?: boolean | undefined; } & ( | { gradient?: false | undefined } | { gradient: true; gradientSize?: string | undefined; } ); export const Button = ({ as, className, loading, disabled, gradient, children, ...props }: ButtonProps) => { const Component = as ?? "button"; const [mouse, setMouse] = useState({ x: 0, y: 0 }); const updateMouse = useCallback((e: MouseEvent) => { setMouse({ x: e.pageX - e.currentTarget.offsetLeft, y: e.pageY - e.currentTarget.offsetTop, }); }, []); return ( {gradient && !loading && !disabled && ( )} {children} ); }; type GradientProps = { x: number; y: number; size?: string | undefined; }; const Gradient = ({ size = DEFAULT_GRADIENT_SIZE, x, y }: GradientProps) => (
);