import React from "react";
import { InputState } from "../Input";
import { TagSize } from "../../core/Tag";
/**
 * Option type for InputTag suggestions dropdown
 */
export interface InputTagOption {
    /** Unique identifier for the option */
    id: string;
    /** Display label shown in dropdown */
    label: string;
    /** Value stored when option is selected (defaults to label if not provided) */
    value: string;
    /** Whether option is disabled */
    disabled?: boolean;
}
/**
 * InputTag component props
 */
export interface InputTagProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "defaultValue"> {
    /** Controlled value - array of tag strings */
    value?: string[];
    /** Default value for uncontrolled mode */
    defaultValue?: string[];
    /** Callback when tags change */
    onChange?: (tags: string[]) => void;
    /** Maximum number of tags allowed */
    maxTags?: number;
    /** Whether to allow duplicate tags (default: false) */
    allowDuplicates?: boolean;
    /** The size of the input and tags (sm or md only) */
    size?: InputTagSize;
    /** The state of the input */
    state?: InputTagState;
    /** Label for the input */
    label?: string;
    /** Helper text displayed below the tags */
    helperText?: string;
    /** Placeholder text for the input */
    placeholder?: string;
    /** Whether the input is disabled */
    disabled?: boolean;
    /** Additional class name for the wrapper */
    className?: string;
    /** Additional class name for the input */
    inputClassName?: string;
    /** Additional class name for the tags container */
    tagsContainerClassName?: string;
    /** Additional class name for individual tags */
    tagClassName?: string;
    /** Theme overrides */
    theme?: InputTagThemeOverrides;
    /** Array of suggestions to show in dropdown. When provided, enables dropdown mode */
    suggestions?: InputTagOption[];
    /** Allow free-form tags not in suggestions (default: true) */
    creatable?: boolean;
    /** Open dropdown on focus when suggestions are provided (default: true) */
    openOnFocus?: boolean;
    /** Custom filter function for suggestions */
    filterFn?: (option: InputTagOption, inputValue: string) => boolean;
    /** Message shown when no suggestions match (default: "No suggestions") */
    emptyMessage?: string;
    /** Label for create option - can be string or function (default: 'Create "{input}"') */
    createLabel?: string | ((inputValue: string) => string);
    /** Hide already-selected tags from suggestions (default: true) */
    hideSelected?: boolean;
    /** Show checkmark indicator for selected items in dropdown (default: false) */
    showSelectedIndicator?: boolean;
    /** Use portal for dropdown positioning (default: true) */
    portal?: boolean;
    /** Dropdown placement relative to trigger */
    placement?: "bottom-start" | "bottom-end" | "top-start" | "top-end";
    /** Offset from trigger in pixels (default: 8) */
    offset?: number;
    /** Additional class name for the dropdown */
    dropdownClassName?: string;
}
export type InputTagSize = TagSize;
export type InputTagState = InputState;
export interface InputTagTheme {
    /** Styles for the tags container */
    tagsContainerStyle: string;
    /** Dropdown container style */
    dropdownStyle: string;
    /** Individual option style */
    optionStyle: string;
    /** Selected option style modifier */
    selectedOptionStyle: string;
    /** Highlighted option style (keyboard navigation) */
    highlightedOptionStyle: string;
    /** Disabled option style */
    disabledOptionStyle: string;
    /** Empty state message style */
    emptyMessageStyle: string;
    /** Create option style */
    createOptionStyle: string;
}
export interface InputTagThemeOverrides {
    tagsContainerStyle?: string;
    dropdownStyle?: string;
    optionStyle?: string;
    selectedOptionStyle?: string;
    highlightedOptionStyle?: string;
    disabledOptionStyle?: string;
    emptyMessageStyle?: string;
    createOptionStyle?: string;
}
