import React from 'react';
import type { HSLA } from './colorUtils';
export type ColorFormat = 'hex' | 'rgb' | 'hsl' | 'hsv';
export type ColorPickerSize = 'sm' | 'md' | 'lg';
export type ColorPickerState = 'default' | 'invalid' | 'disabled';
/**
 * Root ColorPicker component props
 */
export interface ColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
    /**
     * Controlled color value (hex, rgb, rgba, hsl, hsla)
     */
    value?: string;
    /**
     * Default color value for uncontrolled component
     * @default '#000000'
     */
    defaultValue?: string;
    /**
     * Callback fired when color changes
     */
    onChange?: (value: string) => void;
    /**
     * Color format for output
     * @default 'hex'
     */
    format?: ColorFormat;
    /**
     * Whether to show alpha/opacity slider
     * @default true
     */
    showAlpha?: boolean;
    /**
     * Whether to show eyedropper button (if browser supports it)
     * @default true
     */
    showEyeDropper?: boolean;
    /**
     * Array of preset colors to display
     */
    presetColors?: string[];
    /**
     * Size of the color picker
     * @default 'md'
     */
    size?: ColorPickerSize;
    /**
     * State of the color picker
     * @default 'default'
     */
    state?: ColorPickerState;
    /**
     * Whether the color picker is disabled
     * @default false
     */
    disabled?: boolean;
    /**
     * Label for the color picker
     */
    label?: string;
    /**
     * Helper text displayed below the picker
     */
    helperText?: string;
    /**
     * Whether the picker is required
     * @default false
     */
    required?: boolean;
    /**
     * Theme overrides
     */
    theme?: ColorPickerThemeOverrides;
    /**
     * Custom className for container
     */
    className?: string;
    /**
     * Children components (compound pattern)
     */
    children?: React.ReactNode;
}
/**
 * Context value for ColorPicker
 */
export interface ColorPickerContextValue {
    color: HSLA;
    setColor: (color: HSLA) => void;
    setHue: (h: number) => void;
    setSaturation: (s: number) => void;
    setLightness: (l: number) => void;
    setAlpha: (a: number) => void;
    format: ColorFormat;
    setFormat: (format: ColorFormat) => void;
    isOpen: boolean;
    setIsOpen: (open: boolean) => void;
    triggerRef: React.RefObject<HTMLElement>;
    placement: import("../../../hooks/useSelectPortal").SelectPlacement;
    offset: number;
    showAlpha: boolean;
    showEyeDropper: boolean;
    presetColors?: string[];
    size: ColorPickerSize;
    state: ColorPickerState;
    disabled: boolean;
    theme: ColorPickerTheme;
    getHexValue: () => string;
    getRgbValue: () => string;
    getHslValue: () => string;
    getFormattedValue: () => string;
    onChange?: (value: string) => void;
}
/**
 * ColorPicker theme overrides
 */
export interface ColorPickerThemeOverrides {
    baseStyle?: string;
    triggerStyle?: string;
    swatchStyle?: string;
    contentStyle?: string;
    sliderContainerStyle?: string;
    sliderLabelStyle?: string;
    inputContainerStyle?: string;
    formatSelectorStyle?: string;
    presetGridStyle?: string;
    presetSwatchStyle?: string;
    eyedropperButtonStyle?: string;
}
/**
 * ColorPicker theme
 */
export interface ColorPickerTheme {
    baseStyle: string;
    triggerStyle: string;
    swatchStyle: string;
    contentStyle: string;
    sliderContainerStyle: string;
    sliderLabelStyle: string;
    inputContainerStyle: string;
    formatSelectorStyle: string;
    presetGridStyle: string;
    presetSwatchStyle: string;
    eyedropperButtonStyle: string;
}
/**
 * ColorPickerTrigger props
 */
export interface ColorPickerTriggerProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'value' | 'onChange'> {
    className?: string;
}
/**
 * ColorPickerBody props
 */
export interface ColorPickerBodyProps extends React.HTMLAttributes<HTMLDivElement> {
    children?: React.ReactNode;
    className?: string;
    /**
     * Whether to render in a portal (default: true)
     */
    portal?: boolean;
    /**
     * Whether to animate (default: true)
     */
    animation?: boolean;
}
/**
 * ColorPickerSwatch props
 */
export interface ColorPickerSwatchProps extends React.HTMLAttributes<HTMLDivElement> {
    /**
     * Size of the swatch
     */
    size?: 'sm' | 'md' | 'lg';
    /**
     * Whether to show checkerboard pattern for transparency
     * @default true
     */
    showCheckerboard?: boolean;
    className?: string;
}
/**
 * ColorPickerSliders props
 */
export interface ColorPickerSlidersProps extends React.HTMLAttributes<HTMLDivElement> {
    /**
     * Whether to show individual channel labels
     * @default true
     */
    showLabels?: boolean;
    className?: string;
}
/**
 * ColorPickerInput props
 */
export interface ColorPickerInputProps extends React.HTMLAttributes<HTMLDivElement> {
    className?: string;
}
/**
 * ColorPickerFormatSelector props
 */
export interface ColorPickerFormatSelectorProps extends React.HTMLAttributes<HTMLDivElement> {
    className?: string;
}
/**
 * ColorPickerEyeDropper props
 */
export interface ColorPickerEyeDropperProps extends React.HTMLAttributes<HTMLButtonElement> {
    className?: string;
}
/**
 * ColorPickerPresets props
 */
export interface ColorPickerPresetsProps extends React.HTMLAttributes<HTMLDivElement> {
    /**
     * Custom preset colors (overrides context presetColors)
     */
    colors?: string[];
    className?: string;
}
