amotify
Version:
UI Component for React,NextJS,esbuild
93 lines (92 loc) • 3.45 kB
TypeScript
/// <reference types="react" />
import { StyleTags, ReactElement } from '../../@declares';
import { KeyValueDict } from 'jmini';
import { InputTypes } from '.';
declare namespace Autocomplete {
type Input<T = Value> = InputTypes.CoreInput<T | T[]> & React.DOMAttributes<HTMLInputElement> & {
label?: ReactElement;
tone?: InputTypes.BoxTone;
tabIndex?: number;
id?: string;
disabled?: boolean;
min?: number;
max?: number;
multiSelect?: boolean;
value?: T | T[];
options: Option<T>[];
emptySelect?: boolean;
leftIndicator?: ReactElement | false;
rightIndicator?: ReactElement | false;
leftIcon?: ReactElement | false;
rightIcon?: ReactElement | false;
SearchInput?: boolean;
SearchInputPlaceholder?: string;
DynamicOptionsOnSearch?: DynamicOptionsOnSearch<T>;
SelectedComponent?: {
(p: SelectedComponentProps<T>): JSX.Element;
};
SelectorComponent?: {
(p: SelectorComponentProps<T>): JSX.Element;
};
SelectorStyles?: StyleTags.PropsNFreeCSS;
SelectorPosition?: 1 | 2 | 3 | 4;
};
type Value<T = any> = T extends infer V ? V : string | number | boolean | KeyValueDict | void | null;
type Option<T = Value> = {
type?: 'selector';
label?: ReactElement;
value: T;
searchValue?: string;
} | {
type: 'label';
label: ReactElement;
value?: T;
searchValue?: string;
};
type OptionsDict = {
[key: string]: Option;
};
type DynamicOptionsOnSearch<T = Value> = {
(k: string): Promise<Option<T>[]>;
};
type SelectorComponentProps<T = Value> = {
option: Option<T>;
isSelected: boolean;
isFocused: boolean;
addCallback(): void;
};
type SelectedComponentProps<T = Value> = {
value: T;
option?: KeyValueDict;
label: ReactElement;
removeCallback(event: any): void;
};
type WrapperStates = {
rootStates: Input & {
value: Value[];
};
val_options: Option[];
set_options: React.Dispatch<React.SetStateAction<Option[]>>;
val_optionFocused: Value;
set_optionFocused: React.Dispatch<React.SetStateAction<Value>>;
val_optionsDict: OptionsDict;
set_optionsDict: React.Dispatch<React.SetStateAction<OptionsDict>>;
val_preventDynamicSearchOnKeywordChange: boolean;
set_preventDynamicSearchOnKeywordChange: React.Dispatch<React.SetStateAction<boolean>>;
val_preventOpenSelectorOnFocus: boolean;
set_preventOpenSelectorOnFocus: React.Dispatch<React.SetStateAction<boolean>>;
val_selectorOpen: boolean;
set_selectorOpen: React.Dispatch<React.SetStateAction<boolean>>;
val_keyword: string;
set_keyword: React.Dispatch<React.SetStateAction<string>>;
val_status: InputTypes.Status.Plain<Value[]>;
set_status: React.Dispatch<React.SetStateAction<InputTypes.Status.Plain>>;
val_validate: InputTypes.Validation.Result;
set_validate: React.Dispatch<React.SetStateAction<InputTypes.Validation.Result>>;
};
type Component = {
<T = Value>(p: Input<Value<T>>): JSX.Element;
};
}
declare const Autocomplete: Autocomplete.Component;
export { Autocomplete, Autocomplete as default };