import * as React from 'react';
import type { SpringOptions } from 'motion/react';
import { SemanticColor } from '../../../utils/colorUtils';
/**
 * Alignment positions for CustomCursorFollow relative to the main cursor
 */
export type AlignType = 'top' | 'top-left' | 'top-right' | 'bottom' | 'bottom-left' | 'bottom-right' | 'left' | 'right' | 'center';
/**
 * Size variants for the custom cursor
 */
export type CustomCursorSize = 'sm' | 'md' | 'lg';
/**
 * Color variants for the custom cursor
 */
export type CustomCursorColor = SemanticColor | 'dark';
/**
 * Visual variants for the custom cursor
 */
export type CustomCursorVariant = 'default' | 'glass';
/**
 * Shape variants for the custom cursor
 */
export type CustomCursorShape = 'circle' | 'arrow';
/**
 * Variant for CustomCursorFollow component
 */
export type CustomCursorFollowVariant = 'default' | 'user';
/**
 * Context type for CustomCursor state management
 */
export interface CustomCursorContextType {
    cursorPos: {
        x: number;
        y: number;
    };
    isActive: boolean;
    containerRef: React.RefObject<HTMLDivElement | null>;
    cursorRef: React.RefObject<HTMLDivElement | null>;
}
/**
 * Props for CustomCursorProvider component
 */
export type CustomCursorPointerType = 'mouse' | 'pen' | 'touch';
export interface CustomCursorProviderProps extends React.ComponentProps<'div'> {
    children: React.ReactNode;
    className?: string;
    allowedPointerTypes?: CustomCursorPointerType[];
}
/**
 * Props for CustomCursor component
 */
export interface CustomCursorProps extends React.HTMLAttributes<HTMLDivElement> {
    children?: React.ReactNode;
    size?: CustomCursorSize;
    color?: CustomCursorColor;
    variant?: CustomCursorVariant;
    shape?: CustomCursorShape;
    className?: string;
}
/**
 * Props for CustomCursorFollow component
 */
export interface CustomCursorFollowProps extends React.HTMLAttributes<HTMLDivElement> {
    children?: React.ReactNode;
    sideOffset?: number;
    align?: AlignType;
    transition?: SpringOptions;
    variant?: CustomCursorFollowVariant;
    className?: string;
    /** Avatar image URL (used with variant="user") */
    avatar?: string;
    /** User name to display (used with variant="user") */
    name?: string;
    /** Color for the user pill (used with variant="user"). If not provided, a random color is selected. */
    color?: CustomCursorColor;
}
/**
 * Theme configuration for CustomCursor
 */
export interface CustomCursorTheme {
    baseStyle: string;
    cursorStyle: string;
    cursorFollowStyle: string;
    cursorFollowVariants: Record<CustomCursorFollowVariant, string>;
    cursorFollowColors: Record<CustomCursorColor, string>;
    sizes: Record<CustomCursorSize, string>;
    colors: Record<CustomCursorColor, string>;
    variants: Record<CustomCursorVariant, string>;
    shapes: Record<CustomCursorShape, string>;
}
/**
 * Partial theme overrides for CustomCursor
 */
export interface CustomCursorThemeOverrides {
    baseStyle?: string;
    cursorStyle?: string;
    cursorFollowStyle?: string;
    sizes?: Partial<Record<CustomCursorSize, string>>;
    colors?: Partial<Record<CustomCursorColor, string>>;
    variants?: Partial<Record<CustomCursorVariant, string>>;
    shapes?: Partial<Record<CustomCursorShape, string>>;
}
