import { ReactNode } from "react";
export type RatingSize = "sm" | "md" | "lg";
export type RatingColor = "primary" | "warning" | "success" | "danger";
/**
 * Theme configuration for Rating component
 */
export interface RatingTheme {
    /**
     * Base styles applied to the rating container
     */
    baseStyle: string;
    /**
     * Styles for each individual star button
     */
    starStyle: string;
    /**
     * Star icon sizes for each rating size
     */
    starSizes: Record<RatingSize, string>;
    /**
     * Gap between stars for each rating size
     */
    gapSizes: Record<RatingSize, string>;
    /**
     * Filled star color styles for each color variant
     */
    filledColors: Record<RatingColor, string>;
    /**
     * Empty star color style
     */
    emptyColor: string;
    /**
     * State styles (disabled, readOnly)
     */
    states: {
        disabled: string;
        readOnly: string;
    };
}
/**
 * Theme overrides for Rating component
 */
export interface RatingThemeOverrides {
    baseStyle?: string;
    starStyle?: string;
    starSizes?: Partial<Record<RatingSize, string>>;
    gapSizes?: Partial<Record<RatingSize, string>>;
    filledColors?: Partial<Record<RatingColor, string>>;
    emptyColor?: string;
    states?: Partial<{
        disabled: string;
        readOnly: string;
    }>;
}
export interface RatingProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
    /**
     * Controlled rating value (0 to max)
     */
    value?: number;
    /**
     * Default rating value for uncontrolled mode (0 to max)
     * @default 0
     */
    defaultValue?: number;
    /**
     * Maximum number of stars
     * @default 5
     */
    max?: number;
    /**
     * The size of the rating stars
     * @default 'md'
     */
    size?: RatingSize;
    /**
     * The semantic color of the filled stars
     * @default 'warning'
     */
    color?: RatingColor;
    /**
     * Whether the rating is read-only (display only, no interaction)
     * @default false
     */
    readOnly?: boolean;
    /**
     * Whether the rating is disabled
     * @default false
     */
    disabled?: boolean;
    /**
     * Enable half-step rating increments
     * @default false
     */
    allowHalf?: boolean;
    /**
     * Callback when rating value changes
     */
    onChange?: (value: number) => void;
    /**
     * Custom filled star icon (defaults to Heroicons StarIcon solid)
     */
    iconFilled?: ReactNode;
    /**
     * Custom empty star icon (defaults to Heroicons StarIcon outline)
     */
    iconEmpty?: ReactNode;
    /**
     * Custom class name for the rating container
     */
    className?: string;
    /**
     * Component-level theme overrides
     */
    theme?: RatingThemeOverrides;
}
