import { InputHTMLAttributes, ReactNode, Ref } from 'react';
import { FieldError, FieldPath, FieldValues, UseFormRegister } from 'react-hook-form';
import { ComponentColor, IComponentBaseProps, Size } from '../types';
export declare const SELECT_S = "select-search";
export declare const SELECT_S_WRAPPER = "relative w-full";
export declare const SELECT_S_DROPDOWN = "select-options ";
export declare const SELECT_S_ITEM = "option ";
export declare const SELECT_S_ITEM_ACTIVE = "active";
export declare const SELECT_S_ITEM_HOVER = "hover";
export declare const COLOR_MAP: {
primary: string;
secondary: string;
error: string;
info: string;
success: string;
warning: string;
accent: string;
ghost: string;
};
export declare const SIZE_MAP: Record;
export declare const SELECT_S_MAP: {
primary: string;
secondary: string;
error: string;
info: string;
success: string;
warning: string;
accent: string;
ghost: string;
xs: string;
sm: string;
md: string;
lg: string;
xl: string;
};
export interface BaseSelectSearchOption {
value: string | number;
label: string;
[key: string]: unknown;
}
export interface SelectSearchOption extends BaseSelectSearchOption {
subtitle?: string;
icon?: ReactNode;
disabled?: boolean;
[key: string]: unknown;
}
export interface SelectSearchProps extends Omit, "size" | "color" | "onChange" | "value" | "defaultValue">, IComponentBaseProps {
ref?: Ref;
borderOffset?: boolean;
size?: Size;
placeholder?: string;
name: FieldPath;
id?: string;
color?: Exclude;
register?: UseFormRegister;
label?: ReactNode;
classes?: {
input?: string;
label?: string;
labelText?: string;
helper?: string;
helperText?: string;
dropdown?: string;
item?: string;
};
error?: FieldError;
helper?: string;
options?: T[];
onSearch?: (query: string) => Promise | T[];
onChange?: (option: T | null) => void;
value?: T | null;
defaultValue?: T | null;
debounceMs?: number;
loading?: boolean;
noOptionsMessage?: string;
loadingMessage?: string;
renderOption?: (option: T) => ReactNode;
getOptionValue?: (option: T) => unknown;
getOptionLabel?: (option: T) => string;
getOptionDisabled?: (option: T) => boolean;
searchIcon?: ReactNode;
clearable?: boolean;
searchOnEnter?: boolean;
/** Gap in pixels between the input and the dropdown, whether it opens above or below. Defaults to 4. */
dropdownGap?: number;
}