UNPKG

5.27 kBTypeScriptView Raw
1import { CSSObject } from '@emotion/react';
2import { Props } from './Select';
3import { StylesProps } from './styles';
4export interface GroupBase<Option> {
5 readonly options: readonly Option[];
6 readonly label?: string;
7}
8export declare type OptionsOrGroups<Option, Group extends GroupBase<Option>> = readonly (Option | Group)[];
9export declare type Options<Option> = readonly Option[];
10export declare type SingleValue<Option> = Option | null;
11export declare type MultiValue<Option> = readonly Option[];
12export declare type PropsValue<Option> = MultiValue<Option> | SingleValue<Option>;
13export declare type OnChangeValue<Option, IsMulti extends boolean> = IsMulti extends true ? MultiValue<Option> : SingleValue<Option>;
14export interface Colors {
15 primary: string;
16 primary75: string;
17 primary50: string;
18 primary25: string;
19 danger: string;
20 dangerLight: string;
21 neutral0: string;
22 neutral5: string;
23 neutral10: string;
24 neutral20: string;
25 neutral30: string;
26 neutral40: string;
27 neutral50: string;
28 neutral60: string;
29 neutral70: string;
30 neutral80: string;
31 neutral90: string;
32}
33export interface ThemeSpacing {
34 baseUnit: number;
35 controlHeight: number;
36 menuGutter: number;
37}
38export interface Theme {
39 borderRadius: number;
40 colors: Colors;
41 spacing: ThemeSpacing;
42}
43export declare type ClassNamesState = {
44 [key: string]: boolean;
45};
46export declare type CX = (state: ClassNamesState, ...classNames: (string | undefined)[]) => string;
47export declare type GetStyles<Option, IsMulti extends boolean, Group extends GroupBase<Option>> = <Key extends keyof StylesProps<Option, IsMulti, Group>>(propertyName: Key, props: StylesProps<Option, IsMulti, Group>[Key]) => CSSObjectWithLabel;
48export interface CommonProps<Option, IsMulti extends boolean, Group extends GroupBase<Option>> {
49 clearValue: () => void;
50 cx: CX;
51 /**
52 Get the styles of a particular part of the select. Pass in the name of the
53 property as the first argument, and the current props as the second argument.
54 See the `styles` object for the properties available.
55 */
56 getStyles: GetStyles<Option, IsMulti, Group>;
57 getClassNames: <Key extends keyof StylesProps<Option, IsMulti, Group>>(propertyName: Key, props: StylesProps<Option, IsMulti, Group>[Key]) => string | undefined;
58 getValue: () => Options<Option>;
59 hasValue: boolean;
60 isMulti: boolean;
61 isRtl: boolean;
62 options: OptionsOrGroups<Option, Group>;
63 selectOption: (newValue: Option) => void;
64 selectProps: Props<Option, IsMulti, Group>;
65 setValue: (newValue: OnChangeValue<Option, IsMulti>, action: SetValueAction, option?: Option) => void;
66 theme: Theme;
67}
68export interface CommonPropsAndClassName<Option, IsMulti extends boolean, Group extends GroupBase<Option>> extends CommonProps<Option, IsMulti, Group> {
69 className?: string | undefined;
70}
71export interface ActionMetaBase<Option> {
72 option?: Option | undefined;
73 removedValue?: Option;
74 removedValues?: Options<Option>;
75 name?: string;
76}
77export interface SelectOptionActionMeta<Option> extends ActionMetaBase<Option> {
78 action: 'select-option';
79 option: Option | undefined;
80 name?: string;
81}
82export interface DeselectOptionActionMeta<Option> extends ActionMetaBase<Option> {
83 action: 'deselect-option';
84 option: Option | undefined;
85 name?: string;
86}
87export interface RemoveValueActionMeta<Option> extends ActionMetaBase<Option> {
88 action: 'remove-value';
89 removedValue: Option;
90 name?: string;
91}
92export interface PopValueActionMeta<Option> extends ActionMetaBase<Option> {
93 action: 'pop-value';
94 removedValue: Option;
95 name?: string;
96}
97export interface ClearActionMeta<Option> extends ActionMetaBase<Option> {
98 action: 'clear';
99 removedValues: Options<Option>;
100 name?: string;
101}
102export interface CreateOptionActionMeta<Option> extends ActionMetaBase<Option> {
103 action: 'create-option';
104 name?: string;
105 option: Option;
106}
107export interface InitialInputFocusedActionMeta<Option, IsMulti extends boolean> extends ActionMetaBase<Option> {
108 action: 'initial-input-focus';
109 value: OnChangeValue<Option, IsMulti>;
110 options?: Options<Option>;
111}
112export declare type ActionMeta<Option> = SelectOptionActionMeta<Option> | DeselectOptionActionMeta<Option> | RemoveValueActionMeta<Option> | PopValueActionMeta<Option> | ClearActionMeta<Option> | CreateOptionActionMeta<Option>;
113export declare type SetValueAction = 'select-option' | 'deselect-option';
114export declare type InputAction = 'set-value' | 'input-change' | 'input-blur' | 'menu-close';
115export interface InputActionMeta {
116 action: InputAction;
117 /** The previous value of the search input. */
118 prevInputValue: string;
119}
120export declare type MenuPlacement = 'auto' | 'bottom' | 'top';
121export declare type CoercedMenuPlacement = 'bottom' | 'top';
122export declare type MenuPosition = 'absolute' | 'fixed';
123export declare type FocusDirection = 'up' | 'down' | 'pageup' | 'pagedown' | 'first' | 'last';
124export declare type GetOptionLabel<Option> = (option: Option) => string;
125export declare type GetOptionValue<Option> = (option: Option) => string;
126export declare type CSSObjectWithLabel = CSSObject & {
127 label?: string;
128};