import React from "react";
/**
 * Individual option for Combobox
 */
export interface ComboboxOption<T = string> {
    /** Unique identifier for the option */
    id: string;
    /** Display label shown in dropdown */
    label: string;
    /** Value stored when option is selected */
    value: T;
    /** Whether option is disabled */
    disabled?: boolean;
}
/**
 * Size variants for Combobox
 */
export type ComboboxSize = "sm" | "md" | "lg";
/**
 * State variants for Combobox
 */
export type ComboboxState = "default" | "disabled" | "invalid";
/**
 * Props for the Combobox component
 */
export interface ComboboxProps<T = string> extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
    /** Array of options to display */
    options: ComboboxOption<T>[];
    /** Currently selected value */
    value?: T;
    /** Callback when value changes */
    onChange?: (value: T | undefined) => void;
    /** Placeholder text when no value is selected */
    placeholder?: string;
    /** Label text displayed above the input */
    label?: string;
    /** Helper text displayed below the input */
    helperText?: string;
    /** Size variant */
    size?: ComboboxSize;
    /** State variant (controls styling) */
    state?: ComboboxState;
    /** Whether the clear button is shown (default: true) */
    clearable?: boolean;
    /** Icon displayed at the start of the input */
    iconStart?: React.ReactNode;
    /** Whether to open dropdown on focus (default: true) */
    openOnFocus?: boolean;
    /** Custom filter function */
    filterFn?: (option: ComboboxOption<T>, inputValue: string) => boolean;
    /** Message shown when no options match the filter */
    emptyMessage?: string;
    /** Whether to allow creating new options */
    creatable?: boolean;
    /** Callback when a new option is created */
    onCreateOption?: (inputValue: string) => void;
    /** Label for the create option - can be a string or function */
    createLabel?: string | ((inputValue: string) => string);
    /** Whether the input is required */
    required?: boolean;
    /** Form field name */
    name?: string;
    /** Additional className for the wrapper */
    wrapperClassName?: string;
    /** Additional className for the input */
    inputClassName?: string;
    /** Additional className for the dropdown */
    dropdownClassName?: string;
    /** Theme overrides */
    theme?: ComboboxThemeOverrides;
    /** Whether to use portal for dropdown positioning (default: true) */
    portal?: boolean;
    /** Dropdown placement */
    placement?: "bottom-start" | "bottom-end" | "top-start" | "top-end";
    /** Offset from trigger */
    offset?: number;
}
/**
 * Theme configuration for Combobox
 */
export interface ComboboxTheme {
    containerStyle: string;
    wrapperStyle: string;
    inputGroupStyle: string;
    inputStyle: string;
    inputPlaceholderStyle: string;
    sizes: Record<ComboboxSize, string>;
    states: Record<ComboboxState, string>;
    focusStates: Record<ComboboxState, string>;
    iconStartStyle: string;
    iconEndStyle: string;
    iconPadding: {
        left: string;
        right: string;
    };
    clearButtonStyle: string;
    clearIconStyle: string;
    dropdownStyle: string;
    optionStyle: string;
    selectedOptionStyle: string;
    highlightedOptionStyle: string;
    disabledOptionStyle: string;
    emptyMessageStyle: string;
    createOptionStyle: string;
    helperTextStyle: string;
    helperTextStates: Partial<Record<ComboboxState, string>>;
}
/**
 * Partial theme overrides for Combobox
 */
export type ComboboxThemeOverrides = Partial<ComboboxTheme>;
