UNPKG

9.63 kBTypeScriptView Raw
1import * as React from 'react';
2import {StyletronComponent} from 'styletron-react';
3import {SIZE} from '../input';
4import {OnItemSelect} from '../menu';
5import {Override} from '../overrides';
6import {Locale} from '../locale';
7
8export {SIZE} from '../input';
9
10export interface TYPE {
11 select: 'select';
12 search: 'search';
13}
14export interface STATE_CHANGE_TYPE {
15 select: 'select';
16 remove: 'remove';
17 clear: 'clear';
18}
19
20export interface Option {
21 readonly id?: string | number;
22 readonly label?: React.ReactNode;
23 readonly disabled?: boolean;
24 readonly clearableValue?: boolean;
25 readonly isCreatable?: boolean;
26 readonly __optgroup?: string;
27 [others: string]: any;
28}
29export type Value = ReadonlyArray<Option>;
30export type OptgroupsT = {__ungrouped: Value; [key: string]: Value};
31export type OptionsT = Value | OptgroupsT;
32
33export type ChangeAction = () => any;
34
35export type filterOptions = (
36 options: Value,
37 filterValue: string,
38 excludeOptions?: Value,
39 newProps?: {
40 filterOption?: (option: Option, filterValue: string) => boolean;
41 ignoreCase?: boolean;
42 labelKey?: string;
43 matchPos?: 'any' | 'start';
44 matchProp?: 'any' | 'label' | 'value';
45 trimFilter?: boolean;
46 valueKey?: string;
47 },
48) => Value;
49
50export interface SelectOverrides {
51 Root?: Override<any>;
52 ControlContainer?: Override<any>;
53 Placeholder?: Override<any>;
54 ValueContainer?: Override<any>;
55 SingleValue?: Override<any>;
56 MultiValue?: Override<any>;
57 Tag?: Override<any>;
58 InputContainer?: Override<any>;
59 Input?: Override<any>;
60 IconsContainer?: Override<any>;
61 SelectArrow?: Override<any>;
62 ClearIcon?: Override<any>;
63 LoadingIndicator?: Override<any>;
64 SearchIconContainer?: Override<any>;
65 SearchIcon?: Override<any>;
66 Popover?: Override<any>;
67 DropdownContainer?: Override<any>;
68 Dropdown?: Override<any>;
69 DropdownOption?: Override<any>;
70 DropdownListItem?: Override<any>;
71 OptionContent?: Override<any>;
72 StatefulMenu?: Override<any>;
73}
74export interface SelectProps {
75 'aria-label'?: string;
76 'aria-errormessage'?: string;
77 'aria-describedby'?: string;
78 'aria-labelledby'?: string;
79 autoFocus?: boolean;
80 backspaceRemoves?: boolean;
81 backspaceClearsInputValue?: boolean;
82 clearable?: boolean;
83 closeOnSelect?: boolean;
84 creatable?: boolean;
85 deleteRemoves?: boolean;
86 disabled?: boolean;
87 error?: boolean;
88 positive?: boolean;
89 escapeClearsValue?: boolean;
90 filterOptions?: (
91 options: Value,
92 filterValue: string,
93 excludeOptions?: Value,
94 newProps?: {valueKey: string; labelKey: string},
95 ) => Value;
96 filterOutSelected?: boolean;
97 getOptionLabel?: (args: {
98 option?: Option;
99 optionState: {
100 $selected?: boolean;
101 $disabled?: boolean;
102 $isHighlighted?: boolean;
103 };
104 }) => React.ReactNode;
105 getValueLabel?: (args: {option: Option}) => React.ReactNode;
106 id?: string;
107 controlRef?: React.Ref<HTMLInputElement | HTMLDivElement>;
108 isLoading?: boolean;
109 labelKey?: string;
110 startOpen?: boolean;
111 maxDropdownHeight?: string;
112 multi?: boolean;
113 noResultsMsg?: React.ReactNode;
114 onBlur?: (e: Event) => any;
115 onBlurResetsInput?: boolean;
116 onChange?: (params: OnChangeParams) => any;
117 onFocus?: React.FocusEventHandler<HTMLElement>;
118 onInputChange?: React.FormEventHandler<HTMLInputElement>;
119 onCloseResetsInput?: boolean;
120 onSelectResetsInput?: boolean;
121 onOpen?: () => any;
122 onClose?: () => any;
123 openOnClick?: boolean;
124 options?: OptionsT;
125 overrides?: SelectOverrides;
126 placeholder?: React.ReactNode;
127 required?: boolean;
128 searchable?: boolean;
129 size?: SIZE[keyof SIZE];
130 type?: TYPE[keyof TYPE];
131 value?: Value;
132 valueKey?: string;
133 mountNode?: HTMLElement;
134}
135export interface SelectState {
136 activeDescendant: string | null;
137 inputValue: string;
138 isFocused: boolean;
139 isOpen: boolean;
140 isPseudoFocused: boolean;
141}
142export class Select extends React.Component<SelectProps, SelectState> {
143 focus(): void;
144 handleTouchOutside(event: TouchEvent): void;
145 handleTouchMove(): void;
146 handleTouchStart(): void;
147 handleTouchEnd(event: TouchEvent): void;
148 handleTouchEndClearValue(event: TouchEvent): void;
149 handleClick(event: MouseEvent | TouchEvent): void;
150 closeMenu(): void;
151 handleInputFocus(event: React.FocusEvent<HTMLElement>): void;
152 handleBlur(event: Event): void;
153 handleClickOutside(event: MouseEvent): void;
154 handleInputChange(event: React.FormEvent<HTMLInputElement>): void;
155 handleKeyDown(event: KeyboardEvent): void;
156 getOptionLabel(
157 locale: Locale,
158 {
159 option,
160 }: {
161 option: Option;
162 optionState: {
163 $selected: boolean;
164 $disabled: boolean;
165 $isHighlighted: boolean;
166 };
167 },
168 ): React.ReactNode;
169 getValueLabel({option}: {option: Option}): React.ReactNode;
170 getValueArray(value: Value): Option[];
171 setValue(value: Value, option: Option, type: ChangeAction): void;
172 selectValue({item}: {item: Option}): void;
173 addValue(item: Option): void;
174 popValue(): void;
175 removeValue(item: Option): void;
176 clearValue(event: KeyboardEvent | MouseEvent | TouchEvent): void;
177 renderLoading(): React.ReactNode;
178 renderValue(
179 valueArray: Value,
180 isOpen: boolean,
181 locale: Locale,
182 ): React.ReactNode;
183 renderInput(): React.ReactNode;
184 renderClear(): React.ReactNode;
185 renderArrow(): React.ReactNode;
186 renderSearch(): React.ReactNode;
187 filterOption(excludeOptions?: Value): Value;
188 getSharedProps(): {
189 $clearable: boolean;
190 $creatable: boolean;
191 $disabled: boolean;
192 $error: boolean;
193 $positive: boolean;
194 $isFocused: boolean;
195 $isLoading: boolean;
196 $isOpen: boolean;
197 $isPseudoFocused: boolean;
198 $multi: boolean;
199 $required: boolean;
200 $searchable: boolean;
201 $size: SIZE[keyof SIZE];
202 $type: TYPE[keyof TYPE];
203 };
204}
205
206export const SingleValue: React.FC<any>;
207export const MultiValue: React.FC<any>;
208
209export interface AutosizeInputOverrides {
210 Input?: Override<any>;
211}
212export interface AutosizeInputProps {
213 value?: string;
214 defaultValue?: string;
215 inputRef?: React.Ref<any>;
216 overrides?: AutosizeInputOverrides;
217 $size?: SIZE[keyof SIZE];
218}
219export interface AutosizeInputState {
220 inputWidth: number;
221}
222export class AutosizeInput extends React.Component<
223 AutosizeInputProps,
224 AutosizeInputState
225> {
226 sizerRef(el?: HTMLElement): void;
227 updateInputWidth(): void;
228}
229
230export interface DropdownOverrides {
231 DropdownContainer?: Override<any>;
232 Dropdown?: Override<any>;
233 DropdownOption?: Override<any>;
234 DropdownListItem?: Override<any>;
235 OptionContent?: Override<any>;
236 StatefulMenu?: Override<any>;
237}
238export interface DropdownProps {
239 error?: boolean;
240 getOptionLabel?: (args: {
241 option: Option;
242 optionState: {
243 $selected: boolean;
244 $disabled: boolean;
245 $isHighlighted: boolean;
246 };
247 }) => React.ReactNode;
248 id?: string;
249 innerRef?: React.Ref<any>;
250 isLoading?: boolean;
251 labelKey?: string;
252 maxDropdownHeight?: string;
253 multi?: boolean;
254 onActiveDescendantChange?: (id?: string) => void;
255 noResultsMsg?: React.ReactNode;
256 onItemSelect?: OnItemSelect;
257 options?: Value;
258 overrides?: DropdownOverrides;
259 required?: boolean;
260 searchable?: boolean;
261 size?: SIZE[keyof SIZE];
262 type?: TYPE[keyof TYPE];
263 value?: Value;
264 valueKey?: string;
265 width?: number;
266 keyboardControlNode?: React.Ref<any>;
267}
268export class SelectDropdown extends React.Component<DropdownProps> {
269 getSharedProps(): {
270 $error: boolean;
271 $isLoading: boolean;
272 $multi: boolean;
273 $required: boolean;
274 $searchable: boolean;
275 $size: SIZE[keyof SIZE];
276 $type: TYPE[keyof TYPE];
277 $width: number;
278 };
279 getItemLabel(option: {[key: string]: any}): React.ReactNode;
280 onMouseDown(e: Event): void;
281}
282
283export interface State {
284 value: Value;
285}
286export type StateReducer = (
287 stateType: string,
288 nextState: State,
289 currentState: State,
290) => State;
291export interface OnChangeParams {
292 value: Value;
293 option?: Option;
294 type?: STATE_CHANGE_TYPE[keyof STATE_CHANGE_TYPE];
295}
296export type StatefulSelectProps = SelectProps & {
297 initialState?: State;
298 stateReducer?: StateReducer;
299};
300export const StatefulSelect: React.FC<StatefulSelectProps>;
301
302export interface StatefulContainerProps {
303 overrides?: SelectOverrides;
304 children?: React.ReactNode;
305 initialState?: State;
306 stateReducer?: StateReducer;
307 onChange?: (params: OnChangeParams) => any;
308}
309export class StatefulSelectContainer extends React.Component<
310 StatefulContainerProps,
311 State
312> {
313 onChange(params: OnChangeParams): void;
314 internalSetState(params: OnChangeParams): void;
315}
316
317export const StyledRoot: StyletronComponent<any>;
318export const StyledControlContainer: StyletronComponent<any>;
319export const StyledValueContainer: StyletronComponent<any>;
320export const StyledPlaceholder: StyletronComponent<any>;
321export const StyledSingleValue: StyletronComponent<any>;
322export const StyledInputContainer: StyletronComponent<any>;
323export const StyledInput: StyletronComponent<any>;
324export const StyledInputSizer: StyletronComponent<any>;
325export const StyledIconsContainer: StyletronComponent<any>;
326export const StyledSelectArrow: StyletronComponent<any>;
327export const StyledClearIcon: StyletronComponent<any>;
328export const StyledSearchIconContainer: StyletronComponent<any>;
329// TODO(v11): remove StyledSearchIcon
330export const StyledSearchIcon: StyletronComponent<any>;
331export const StyledDropdownContainer: StyletronComponent<any>;
332export const StyledDropdown: StyletronComponent<any>;
333export const StyledDropdownListItem: StyletronComponent<any>;
334export const StyledOptionContent: StyletronComponent<any>;
335
336export const TYPE: TYPE;
337export const STATE_CHANGE_TYPE: STATE_CHANGE_TYPE;