import React from "react";
import type { Transition } from "motion/react";
/**
 * Available ripple effect types
 */
export type RippleEffectType = 'default' | 'aurora' | 'particle' | 'glass' | 'neon' | 'echo';
/**
 * Ripple effect configuration
 */
export interface Ripple {
    id: number;
    x: number;
    y: number;
    layer?: number;
    /** Pre-computed random scale factor for particle effect (0-1 range) */
    randomScale?: number;
    /** Pre-computed random duration offset for particle effect (0-1 range) */
    randomDuration?: number;
}
export interface RippleConfig {
    /** Scale multiplier for ripple expansion (default: 10) */
    scale?: number;
    /** Duration of ripple animation in milliseconds (default: 600) */
    duration?: number;
    /** Effect type for multi-layered ripples (default: 'default') */
    effect?: RippleEffectType;
}
/**
 * Custom hook for managing ripple effects on button clicks
 *
 * @param config - Optional ripple configuration
 * @returns Object containing ripples array and createRipple handler
 *
 * @example
 * ```tsx
 * const { ripples, createRipple } = useRipple({ scale: 12, duration: 700 });
 *
 * <button onClick={createRipple}>
 *   {ripples.map((ripple) => (
 *     <RippleSpan key={ripple.id} ripple={ripple} />
 *   ))}
 * </button>
 * ```
 */
export declare function useRipple(config?: RippleConfig): {
    ripples: Ripple[];
    createRipple: (event: React.MouseEvent<HTMLButtonElement>) => void;
    buttonRef: React.RefObject<HTMLButtonElement | null>;
    scale: number;
    duration: number;
    effect: RippleEffectType;
};
/**
 * Get ripple color classes based on button variant and color
 */
export declare function getRippleColorClass(variant?: string, color?: string): string;
/**
 * Get animation properties for specific ripple effect and layer
 */
export declare function getRippleAnimation(effect: RippleEffectType, ripple: Ripple, baseScale: number): {
    initial: {
        scale: number;
        opacity: number;
    };
    animate: {
        scale: number;
        opacity: number;
    };
    transition: Transition;
    className?: string;
};
