-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathButton.types.ts
274 lines (262 loc) · 5.37 KB
/
Button.types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
import React, { Ref } from 'react';
import { IconProps } from '../Icon';
import { OcBaseProps } from '../OcBase';
import {
ConfigContextProps,
Shape,
Size,
OcThemeName,
} from '../ConfigProvider';
import { NudgeProps } from './Nudge/Nudge.types';
import { BadgeProps } from '../Badge';
export enum ButtonIconAlign {
Left = 'left',
Right = 'right',
}
export enum ButtonTextAlign {
Center = 'center',
Left = 'left',
Right = 'right',
}
export enum ButtonSize {
Flex = 'flex',
Large = 'large',
Medium = 'medium',
Small = 'small',
}
export enum ButtonWidth {
fitContent = 'fitContent',
fill = 'fill',
}
export enum ButtonShape {
Rectangle = 'rectangle',
Pill = 'pill',
Round = 'round',
}
export enum ButtonVariant {
Default = 'default',
Neutral = 'neutral',
Primary = 'primary',
Secondary = 'secondary',
SystemUI = 'systemui',
}
export enum AriaHaspopupType {
Dialog = 'dialog',
Menu = 'menu',
Listbox = 'listbox',
Tree = 'tree',
Grid = 'grid',
}
export interface FloatingButtonProps {
/**
* Determines if the button is floating.
* @default false
*/
enabled?: boolean;
}
export type NativeButtonProps = Omit<OcBaseProps<HTMLButtonElement>, 'type'>;
export interface SplitButtonProps
extends Omit<
ButtonProps,
'text' | 'htmlType' | 'onContextMenu' | 'splitButtonProps' | 'toggle'
> {}
export interface TwoStateButtonProps
extends Omit<
ButtonProps,
| 'alignIcon'
| 'htmlType'
| 'iconProps'
| 'onContextMenu'
| 'split'
| 'splitButtonChecked'
| 'splitButtonProps'
> {
/**
* The button icon 1 props.
*/
iconOneProps?: IconProps;
/**
* The button icon 2 props.
*/
iconTwoProps?: IconProps;
}
export interface ButtonProps extends NativeButtonProps {
/**
* Allows focus on the button when it's disabled.
*/
allowDisabledFocus?: boolean;
/**
* The button icon alignment.
* @default ButtonIconAlign.Left
*/
alignIcon?: ButtonIconAlign;
/**
* The button text alignment.
* @default ButtonTextAlign.Center
*/
alignText?: ButtonTextAlign;
/**
* The button aria-label text.
*/
ariaLabel?: string;
/**
* ID of the element that describes the button.
*/
ariaDescribedby?: string;
/**
* Indicates if the button controls a menu or other popover element.
*/
ariaHaspopup?: boolean | AriaHaspopupType;
/**
* Indicates if the popup element controlled by the button is currently expanded or collapsed.
*/
ariaExpanded?: boolean;
/**
* The button counter badge props.
*/
badgeProps?: BadgeProps;
/**
* The button width type
* @default fitContent
*/
buttonWidth?: ButtonWidth;
/**
* The button checked value.
*/
checked?: boolean;
/**
* The button class names.
*/
classNames?: string;
/**
* Configure how contextual props are consumed
*/
configContextProps?: ConfigContextProps;
/**
* The button counter string.
*/
counter?: string;
/**
* The button disabled state.
* @default false
*/
disabled?: boolean;
/**
* The button disruptive state.
* @default false
*/
disruptive?: boolean;
/**
* The button drop shadow state.
* @default false
*/
dropShadow?: boolean;
/**
* The button is always floating on bottom right corner.
*/
floatingButtonProps?: FloatingButtonProps;
/**
* The button gradient state.
* @default false
*/
gradient?: boolean;
/**
* The button nudge props.
* @experimental
*/
nudgeProps?: NudgeProps;
/**
* The button html type.
*/
htmlType?: 'button' | 'submit' | 'reset';
/**
* The button icon props.
*/
iconProps?: IconProps;
/**
* The button icon props.
*/
prefixIconProps?: IconProps;
/**
* The button id.
*/
id?: string;
/**
* If the button is in loading state
*/
loading?: boolean;
/**
* The button onClick event handler.
*/
onClick?: React.MouseEventHandler<HTMLButtonElement>;
/**
* The split button click event handler.
*/
onContextMenu?: React.MouseEventHandler<HTMLButtonElement>;
/**
* Ref of the button
*/
ref?: Ref<HTMLButtonElement>;
/**
* Shape of the button.
* @default ButtonShape.Pill
*/
shape?: ButtonShape | Shape;
/**
* The button size.
* @default ButtonSize.Medium
*/
size?: ButtonSize | Size;
/**
* Determines whether this is a split button.
* @default false
*/
split?: boolean;
/**
* The split button checked value.
*/
splitButtonChecked?: boolean;
/**
* The split button props.
*/
splitButtonProps?: SplitButtonProps;
/**
* The button style.
*/
style?: React.CSSProperties;
/**
* The button text.
*/
text?: string;
/**
* Theme of the button.
* Use with configContextProps.noThemeContext to override theme.
* @default blue
*/
theme?: OcThemeName;
/**
* Theme container of the button.
* Use with `theme` to generate a unique container or a common one.
*/
themeContainerId?: string;
/**
* The button is a toggle button with distinct on and off states.
*/
toggle?: boolean;
/**
* The button will remain transparent
* @default false
*/
transparent?: boolean;
/**
* Determines the button type.
* @deprecated Use `variant` instead.
* @default ButtonVariant.Default
*/
type?: ButtonVariant;
/**
* Determines the button variant.
* @default ButtonVariant.Default
*/
variant?: ButtonVariant;
}