UNPKG

4.7 kBTypeScriptView Raw
1import * as React from 'react';
2import {StyletronComponent} from 'styletron-react';
3import {Override} from '../overrides';
4
5export interface STATE_CHANGE_TYPE {
6 change: 'change';
7}
8export interface ADJOINED {
9 none: 'none';
10 left: 'left';
11 right: 'right';
12 both: 'both';
13}
14export interface SIZE {
15 mini: 'mini';
16 default: 'default';
17 compact: 'compact';
18 large: 'large';
19}
20
21export interface CUSTOM_INPUT_TYPE {
22 textarea: 'textarea';
23}
24
25export interface ENHANCER_POSITION {
26 start: 'start';
27 end: 'end';
28}
29
30export interface BaseInputOverrides<T> {
31 InputContainer?: Override<T>;
32 Input?: Override<T>;
33 Before?: Override<T>;
34 After?: Override<T>;
35}
36
37export interface BaseInputProps<T> {
38 'aria-errormessage'?: string;
39 'aria-label'?: string;
40 'aria-labelledby'?: string;
41 'aria-describedby'?: string;
42 adjoined?: ADJOINED[keyof ADJOINED];
43 autoComplete?: string;
44 autoFocus?: boolean;
45 clearable?: boolean;
46 clearOnEscape?: boolean;
47 maxLength?: number;
48 disabled?: boolean;
49 error?: boolean;
50 positive?: boolean;
51 id?: string;
52 'data-baseweb'?: string;
53 inputMode?: string;
54 pattern?: string;
55 inputRef?: React.Ref<T>;
56 name?: string;
57 onBlur?: React.FocusEventHandler<T>;
58 onChange?: React.FormEventHandler<T>;
59 onKeyDown?: React.KeyboardEventHandler<T>;
60 onKeyPress?: React.KeyboardEventHandler<T>;
61 onKeyUp?: React.KeyboardEventHandler<T>;
62 onFocus?: React.FocusEventHandler<T>;
63 overrides?: BaseInputOverrides<SharedProps>;
64 placeholder?: string;
65 required?: boolean;
66 size?: SIZE[keyof SIZE];
67 type?: string;
68 value?: string | number;
69 rows?: number;
70 min?: number;
71 max?: number;
72 step?: number;
73}
74
75export interface State {
76 value?: string | number;
77}
78
79export type InputOverrides = BaseInputOverrides<SharedProps> & {
80 Root?: Override<SharedProps>;
81 StartEnhancer?: Override<SharedProps>;
82 EndEnhancer?: Override<SharedProps>;
83 ClearIcon?: Override<SharedProps>;
84 ClearIconContainer?: Override<SharedProps>;
85 MaskToggleButton?: Override<SharedProps>;
86 MaskToggleHideIcon?: Override<SharedProps>;
87 MaskToggleShowIcon?: Override<SharedProps>;
88};
89
90export type SharedProps = {
91 /** Renders UI in 'focus' state */
92 $isFocused: boolean;
93 /** Renders UI in 'disabled' state */
94 $disabled: boolean;
95 /** Renders UI in 'error' state */
96 $error: boolean;
97 /** Renders UI in 'positive' state */
98 $positive: boolean;
99 /** Defines styles for inputs that are grouped with other controls. */
100 $adjoined: keyof ADJOINED;
101 /** Renders UI in provided size. */
102 $size: keyof SIZE;
103 /** Renders UI in 'required' state */
104 $required: boolean;
105 $position: keyof ENHANCER_POSITION;
106 /** Defines if has a clearable or MaskToggleButton at the end */
107 $hasIconTrailing: boolean;
108};
109
110export interface InputProps extends BaseInputProps<HTMLInputElement> {
111 startEnhancer?: ((args: SharedProps) => React.ReactNode) | React.ReactNode;
112 endEnhancer?: ((args: SharedProps) => React.ReactNode) | React.ReactNode;
113 overrides?: InputOverrides;
114}
115
116export interface InternalState {
117 isFocused?: boolean;
118 isMasked?: boolean;
119}
120
121export class Input extends React.Component<InputProps, InternalState> {
122 onFocus(e: React.FocusEvent<HTMLInputElement>): void;
123 onBlur(e: React.FocusEvent<HTMLInputElement>): void;
124}
125
126export class BaseInput extends React.Component<
127 BaseInputProps<HTMLInputElement>,
128 InternalState
129> {
130 onFocus(e: React.FocusEvent<HTMLInputElement>): void;
131 onBlur(e: React.FocusEvent<HTMLInputElement>): void;
132}
133
134export interface MaskedInputProps extends InputProps {
135 mask?: string;
136 maskChar?: string;
137}
138
139export const MaskedInput: React.FC<MaskedInputProps>;
140
141export interface StatefulContainerProps {
142 children?: React.ReactNode;
143 initialState?: State;
144 stateReducer?: (
145 stateType: STATE_CHANGE_TYPE[keyof STATE_CHANGE_TYPE],
146 nextState: State,
147 currentState: State,
148 ) => State;
149 onChange?: React.FormEventHandler<HTMLInputElement>;
150}
151
152export type StatefulInputProps = InputProps &
153 StatefulContainerProps & {children?: never};
154
155export const StatefulInput: React.FC<StatefulInputProps>;
156export const StatefulContainer: React.FC<StatefulContainerProps>;
157
158export const StyledRoot: StyletronComponent<any>;
159export const StyledInputEnhancer: StyletronComponent<any>;
160export const StyledStartEnhancer: StyletronComponent<any>;
161export const StyledEndEnhancer: StyletronComponent<any>;
162export const StyledInputContainer: StyletronComponent<any>;
163export const StyledInput: StyletronComponent<any>;
164
165export const STATE_CHANGE_TYPE: STATE_CHANGE_TYPE;
166export const CUSTOM_INPUT_TYPE: CUSTOM_INPUT_TYPE;
167export const ADJOINED: ADJOINED;
168export const SIZE: SIZE;
169export const ENHANCER_POSITION: ENHANCER_POSITION;