@xsolla/xui-button 0.74.0 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Flowtype definitions for index
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.21.0
5
+ * @flow
6
+ */
7
+
8
+ import React, { Node } from "react";
9
+ declare interface ButtonProps {
10
+ /**
11
+ * Visual variant of the button
12
+ */
13
+ variant?: "primary" | "secondary";
14
+
15
+ /**
16
+ * Color tone of the button
17
+ */
18
+ tone?: "brand" | "brandExtra" | "alert" | "mono";
19
+
20
+ /**
21
+ * Size of the button
22
+ */
23
+ size?: "xl" | "lg" | "md" | "sm" | "xs";
24
+
25
+ /**
26
+ * Whether the button is disabled
27
+ */
28
+ disabled?: boolean;
29
+
30
+ /**
31
+ * Whether the button is in a loading state
32
+ */
33
+ loading?: boolean;
34
+
35
+ /**
36
+ * Button content
37
+ */
38
+ children: React.ReactNode;
39
+
40
+ /**
41
+ * Click handler
42
+ */
43
+ onPress?: () => void;
44
+
45
+ /**
46
+ * Icon to display on the left side
47
+ */
48
+ iconLeft?: React.ReactNode;
49
+
50
+ /**
51
+ * Icon to display on the right side
52
+ */
53
+ iconRight?: React.ReactNode;
54
+
55
+ /**
56
+ * Accessible label for screen readers (use for icon-only buttons)
57
+ */
58
+ "aria-label"?: string;
59
+
60
+ /**
61
+ * ID of element that describes this button
62
+ */
63
+ "aria-describedby"?: string;
64
+
65
+ /**
66
+ * Indicates the button controls an expandable element
67
+ */
68
+ "aria-expanded"?: boolean;
69
+
70
+ /**
71
+ * Indicates the type of popup triggered by the button
72
+ */
73
+ "aria-haspopup"?: boolean | "menu" | "listbox" | "tree" | "grid" | "dialog";
74
+
75
+ /**
76
+ * Indicates the button is pressed (for toggle buttons)
77
+ */
78
+ "aria-pressed"?: boolean | "mixed";
79
+
80
+ /**
81
+ * ID of the element this button controls
82
+ */
83
+ "aria-controls"?: string;
84
+
85
+ /**
86
+ * Test ID for testing frameworks
87
+ */
88
+ testID?: string;
89
+
90
+ /**
91
+ * HTML id attribute
92
+ */
93
+ id?: string;
94
+
95
+ /**
96
+ * HTML type attribute for the button
97
+ */
98
+ type?: "button" | "submit" | "reset";
99
+
100
+ /**
101
+ * Whether the button should take up the full width of its container
102
+ */
103
+ fullWidth?: boolean;
104
+ }
105
+ /**
106
+ * Button - An accessible button component
107
+ *
108
+ * Renders as a semantic `<button>` element with full ARIA support.
109
+ * Supports various visual variants, sizes, and states including loading.
110
+ *
111
+ * ## Accessibility Features
112
+ *
113
+ * - **Semantic HTML**: Renders as a native `<button>` element
114
+ * - **Keyboard Navigation**: Focusable via Tab, activated with Enter or Space
115
+ * - **ARIA States**: Properly announces disabled and loading states
116
+ * - **Focus Indicator**: Visible focus ring for keyboard navigation
117
+ * - **Screen Reader Support**: Announces button label, state, and any associated descriptions
118
+ */
119
+ declare var Button: React.FC<ButtonProps>;
120
+ declare interface IconButtonProps {
121
+ /**
122
+ * Visual variant of the button
123
+ */
124
+ variant?: "primary" | "secondary";
125
+
126
+ /**
127
+ * Color tone of the button
128
+ */
129
+ tone?: "brand" | "brandExtra" | "alert" | "mono";
130
+
131
+ /**
132
+ * Size of the button
133
+ */
134
+ size?: "xl" | "lg" | "md" | "sm" | "xs";
135
+
136
+ /**
137
+ * Whether the button is disabled
138
+ */
139
+ disabled?: boolean;
140
+
141
+ /**
142
+ * Whether the button is in a loading state
143
+ */
144
+ loading?: boolean;
145
+
146
+ /**
147
+ * Icon to display in the button (required)
148
+ */
149
+ icon: React.ReactNode;
150
+
151
+ /**
152
+ * Click handler
153
+ */
154
+ onPress?: () => void;
155
+
156
+ /**
157
+ * Accessible label for screen readers (REQUIRED for icon-only buttons)
158
+ * Since icon buttons have no visible text, this label is essential for accessibility.
159
+ * @example aria-label="Close dialog"
160
+ * @example aria-label="Open settings menu"
161
+ */
162
+ "aria-label": string;
163
+
164
+ /**
165
+ * ID of element that describes this button
166
+ */
167
+ "aria-describedby"?: string;
168
+
169
+ /**
170
+ * Indicates the button controls an expandable element
171
+ */
172
+ "aria-expanded"?: boolean;
173
+
174
+ /**
175
+ * Indicates the type of popup triggered by the button
176
+ */
177
+ "aria-haspopup"?: boolean | "menu" | "listbox" | "tree" | "grid" | "dialog";
178
+
179
+ /**
180
+ * Indicates the button is pressed (for toggle buttons)
181
+ */
182
+ "aria-pressed"?: boolean | "mixed";
183
+
184
+ /**
185
+ * ID of the element this button controls
186
+ */
187
+ "aria-controls"?: string;
188
+
189
+ /**
190
+ * Test ID for testing frameworks
191
+ */
192
+ testID?: string;
193
+
194
+ /**
195
+ * HTML id attribute
196
+ */
197
+ id?: string;
198
+
199
+ /**
200
+ * HTML type attribute for the button
201
+ */
202
+ type?: "button" | "submit" | "reset";
203
+ }
204
+ /**
205
+ * IconButton - An accessible icon-only button component
206
+ *
207
+ * Renders as a semantic `<button>` element with full ARIA support.
208
+ * Supports various visual variants, sizes, and states including loading.
209
+ *
210
+ * ## Accessibility Features
211
+ *
212
+ * - **Semantic HTML**: Renders as a native `<button>` element
213
+ * - **Required aria-label**: Ensures screen readers can announce the button's purpose
214
+ * - **Keyboard Navigation**: Focusable via Tab, activated with Enter or Space
215
+ * - **ARIA States**: Properly announces disabled and loading states
216
+ * - **Focus Indicator**: Visible focus ring for keyboard navigation
217
+ * - **Screen Reader Support**: Announces button label, state, and any associated descriptions
218
+ *
219
+ * ## Usage
220
+ *
221
+ * ```tsx
222
+ * // Basic usage - aria-label is required
223
+ * <IconButton icon={<CloseIcon />} aria-label="Close dialog" onPress={handleClose} />
224
+ *
225
+ * // Toggle button
226
+ * <IconButton
227
+ * icon={<MenuIcon />}
228
+ * aria-label="Toggle menu"
229
+ * aria-expanded={isOpen}
230
+ * aria-controls="menu-id"
231
+ * onPress={toggleMenu}
232
+ * />
233
+ *
234
+ * // Loading state
235
+ * <IconButton icon={<SaveIcon />} aria-label="Save changes" loading />
236
+ * ```
237
+ */
238
+ declare var IconButton: React.FC<IconButtonProps>;
239
+ declare type FlexButtonProps = {
240
+ /**
241
+ * Button content
242
+ */
243
+ children: Node,
244
+
245
+ /**
246
+ * Visual variant of the button
247
+ */
248
+ variant?:
249
+ | "brand"
250
+ | "primary"
251
+ | "secondary"
252
+ | "tertiary"
253
+ | "brandExtra"
254
+ | "inverse",
255
+
256
+ /**
257
+ * Size of the button
258
+ */
259
+ size?: "xl" | "lg" | "md" | "sm" | "xs",
260
+
261
+ /**
262
+ * Whether to show background fill
263
+ */
264
+ background?: boolean,
265
+
266
+ /**
267
+ * Whether the button is disabled
268
+ */
269
+ disabled?: boolean,
270
+
271
+ /**
272
+ * Whether the button is in a loading state
273
+ */
274
+ loading?: boolean,
275
+
276
+ /**
277
+ * Icon to display on the left side
278
+ */
279
+ iconLeft?: Node,
280
+
281
+ /**
282
+ * Icon to display on the right side
283
+ */
284
+ iconRight?: Node,
285
+
286
+ /**
287
+ * Click handler
288
+ */
289
+ onPress?: () => void,
290
+
291
+ /**
292
+ * HTML type attribute for the button
293
+ */
294
+ type?: "button" | "submit" | "reset",
295
+
296
+ /**
297
+ * Accessible label for screen readers
298
+ */
299
+ "aria-label"?: string,
300
+
301
+ /**
302
+ * ID of element that describes this button
303
+ */
304
+ "aria-describedby"?: string,
305
+
306
+ /**
307
+ * Indicates the button controls an expandable element
308
+ */
309
+ "aria-expanded"?: boolean,
310
+
311
+ /**
312
+ * Indicates the type of popup triggered by the button
313
+ */
314
+ "aria-haspopup"?: boolean | "menu" | "listbox" | "tree" | "grid" | "dialog",
315
+
316
+ /**
317
+ * Indicates the button is pressed (for toggle buttons)
318
+ */
319
+ "aria-pressed"?: boolean | "mixed",
320
+
321
+ /**
322
+ * ID of the element this button controls
323
+ */
324
+ "aria-controls"?: string,
325
+
326
+ /**
327
+ * Test ID for testing frameworks
328
+ */
329
+ testID?: string,
330
+ ...
331
+ } & $Diff<React.ButtonHTMLAttributes<HTMLButtonElement>, { type: any }>;
332
+
333
+ /**
334
+ * FlexButton - A compact button component designed for use in modals and popups.
335
+ *
336
+ * Renders as a semantic `<button>` element with full ARIA support.
337
+ *
338
+ * ## Accessibility Features
339
+ *
340
+ * - **Semantic HTML**: Renders as a native `<button>` element
341
+ * - **Keyboard Navigation**: Focusable via Tab, activated with Enter or Space
342
+ * - **ARIA States**: Properly announces disabled and loading states
343
+ * - **Focus Indicator**: Visible focus ring for keyboard navigation
344
+ * - **Screen Reader Support**: Announces button label, state, and any associated descriptions
345
+ */
346
+ declare var FlexButton: React.FC<FlexButtonProps>;
347
+ declare interface ButtonGroupProps {
348
+ /**
349
+ * Layout orientation of the buttons
350
+ * @default 'horizontal'
351
+ */
352
+ orientation?: "horizontal" | "vertical";
353
+
354
+ /**
355
+ * Size of the button group, determines default gap between buttons
356
+ * @default 'md'
357
+ */
358
+ size?: "xl" | "lg" | "md" | "sm" | "xs";
359
+
360
+ /**
361
+ * Buttons to be grouped
362
+ */
363
+ children: React.ReactNode;
364
+
365
+ /**
366
+ * Optional description text below the buttons
367
+ */
368
+ description?: string;
369
+
370
+ /**
371
+ * Optional error message text below the buttons
372
+ */
373
+ error?: string;
374
+
375
+ /**
376
+ * Custom gap between buttons (in pixels). If not provided, uses size and orientation based default.
377
+ */
378
+ gap?: number;
379
+
380
+ /**
381
+ * Accessible label for the button group
382
+ */
383
+ "aria-label"?: string;
384
+
385
+ /**
386
+ * ID of element that labels this button group
387
+ */
388
+ "aria-labelledby"?: string;
389
+
390
+ /**
391
+ * ID of element that describes this button group
392
+ */
393
+ "aria-describedby"?: string;
394
+
395
+ /**
396
+ * HTML id attribute
397
+ */
398
+ id?: string;
399
+
400
+ /**
401
+ * Test ID for testing frameworks
402
+ */
403
+ testID?: string;
404
+ }
405
+ /**
406
+ * ButtonGroup - A container for grouping related buttons
407
+ *
408
+ * Provides semantic grouping for related actions with proper accessibility support.
409
+ *
410
+ * ## Accessibility Features
411
+ *
412
+ * - **Semantic Grouping**: Uses `role="group"` to indicate related buttons
413
+ * - **Accessible Name**: Supports `aria-label` or `aria-labelledby` to describe the group's purpose
414
+ * - **Error Announcements**: Errors are announced to screen readers via `aria-live`
415
+ * - **Description Support**: Optional description text for additional context
416
+ */
417
+ declare var ButtonGroup: React.FC<ButtonGroupProps>;
418
+ export type { ButtonGroupProps, ButtonProps, FlexButtonProps, IconButtonProps };
419
+ declare export { Button, ButtonGroup, FlexButton, IconButton };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-button",
3
- "version": "0.74.0",
3
+ "version": "0.76.0",
4
4
  "main": "./web/index.js",
5
5
  "module": "./web/index.mjs",
6
6
  "types": "./web/index.d.ts",
@@ -13,9 +13,9 @@
13
13
  "test:coverage": "vitest run --coverage"
14
14
  },
15
15
  "dependencies": {
16
- "@xsolla/xui-core": "0.74.0",
17
- "@xsolla/xui-icons": "0.74.0",
18
- "@xsolla/xui-primitives-core": "0.74.0"
16
+ "@xsolla/xui-core": "0.76.0",
17
+ "@xsolla/xui-icons": "0.76.0",
18
+ "@xsolla/xui-primitives-core": "0.76.0"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "react": ">=16.8.0",
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Flowtype definitions for index
3
+ * Generated by Flowgen from a Typescript Definition
4
+ * Flowgen v1.21.0
5
+ * @flow
6
+ */
7
+
8
+ import React, { Node } from "react";
9
+ declare interface ButtonProps {
10
+ /**
11
+ * Visual variant of the button
12
+ */
13
+ variant?: "primary" | "secondary";
14
+
15
+ /**
16
+ * Color tone of the button
17
+ */
18
+ tone?: "brand" | "brandExtra" | "alert" | "mono";
19
+
20
+ /**
21
+ * Size of the button
22
+ */
23
+ size?: "xl" | "lg" | "md" | "sm" | "xs";
24
+
25
+ /**
26
+ * Whether the button is disabled
27
+ */
28
+ disabled?: boolean;
29
+
30
+ /**
31
+ * Whether the button is in a loading state
32
+ */
33
+ loading?: boolean;
34
+
35
+ /**
36
+ * Button content
37
+ */
38
+ children: React.ReactNode;
39
+
40
+ /**
41
+ * Click handler
42
+ */
43
+ onPress?: () => void;
44
+
45
+ /**
46
+ * Icon to display on the left side
47
+ */
48
+ iconLeft?: React.ReactNode;
49
+
50
+ /**
51
+ * Icon to display on the right side
52
+ */
53
+ iconRight?: React.ReactNode;
54
+
55
+ /**
56
+ * Accessible label for screen readers (use for icon-only buttons)
57
+ */
58
+ "aria-label"?: string;
59
+
60
+ /**
61
+ * ID of element that describes this button
62
+ */
63
+ "aria-describedby"?: string;
64
+
65
+ /**
66
+ * Indicates the button controls an expandable element
67
+ */
68
+ "aria-expanded"?: boolean;
69
+
70
+ /**
71
+ * Indicates the type of popup triggered by the button
72
+ */
73
+ "aria-haspopup"?: boolean | "menu" | "listbox" | "tree" | "grid" | "dialog";
74
+
75
+ /**
76
+ * Indicates the button is pressed (for toggle buttons)
77
+ */
78
+ "aria-pressed"?: boolean | "mixed";
79
+
80
+ /**
81
+ * ID of the element this button controls
82
+ */
83
+ "aria-controls"?: string;
84
+
85
+ /**
86
+ * Test ID for testing frameworks
87
+ */
88
+ testID?: string;
89
+
90
+ /**
91
+ * HTML id attribute
92
+ */
93
+ id?: string;
94
+
95
+ /**
96
+ * HTML type attribute for the button
97
+ */
98
+ type?: "button" | "submit" | "reset";
99
+
100
+ /**
101
+ * Whether the button should take up the full width of its container
102
+ */
103
+ fullWidth?: boolean;
104
+ }
105
+ /**
106
+ * Button - An accessible button component
107
+ *
108
+ * Renders as a semantic `<button>` element with full ARIA support.
109
+ * Supports various visual variants, sizes, and states including loading.
110
+ *
111
+ * ## Accessibility Features
112
+ *
113
+ * - **Semantic HTML**: Renders as a native `<button>` element
114
+ * - **Keyboard Navigation**: Focusable via Tab, activated with Enter or Space
115
+ * - **ARIA States**: Properly announces disabled and loading states
116
+ * - **Focus Indicator**: Visible focus ring for keyboard navigation
117
+ * - **Screen Reader Support**: Announces button label, state, and any associated descriptions
118
+ */
119
+ declare var Button: React.FC<ButtonProps>;
120
+ declare interface IconButtonProps {
121
+ /**
122
+ * Visual variant of the button
123
+ */
124
+ variant?: "primary" | "secondary";
125
+
126
+ /**
127
+ * Color tone of the button
128
+ */
129
+ tone?: "brand" | "brandExtra" | "alert" | "mono";
130
+
131
+ /**
132
+ * Size of the button
133
+ */
134
+ size?: "xl" | "lg" | "md" | "sm" | "xs";
135
+
136
+ /**
137
+ * Whether the button is disabled
138
+ */
139
+ disabled?: boolean;
140
+
141
+ /**
142
+ * Whether the button is in a loading state
143
+ */
144
+ loading?: boolean;
145
+
146
+ /**
147
+ * Icon to display in the button (required)
148
+ */
149
+ icon: React.ReactNode;
150
+
151
+ /**
152
+ * Click handler
153
+ */
154
+ onPress?: () => void;
155
+
156
+ /**
157
+ * Accessible label for screen readers (REQUIRED for icon-only buttons)
158
+ * Since icon buttons have no visible text, this label is essential for accessibility.
159
+ * @example aria-label="Close dialog"
160
+ * @example aria-label="Open settings menu"
161
+ */
162
+ "aria-label": string;
163
+
164
+ /**
165
+ * ID of element that describes this button
166
+ */
167
+ "aria-describedby"?: string;
168
+
169
+ /**
170
+ * Indicates the button controls an expandable element
171
+ */
172
+ "aria-expanded"?: boolean;
173
+
174
+ /**
175
+ * Indicates the type of popup triggered by the button
176
+ */
177
+ "aria-haspopup"?: boolean | "menu" | "listbox" | "tree" | "grid" | "dialog";
178
+
179
+ /**
180
+ * Indicates the button is pressed (for toggle buttons)
181
+ */
182
+ "aria-pressed"?: boolean | "mixed";
183
+
184
+ /**
185
+ * ID of the element this button controls
186
+ */
187
+ "aria-controls"?: string;
188
+
189
+ /**
190
+ * Test ID for testing frameworks
191
+ */
192
+ testID?: string;
193
+
194
+ /**
195
+ * HTML id attribute
196
+ */
197
+ id?: string;
198
+
199
+ /**
200
+ * HTML type attribute for the button
201
+ */
202
+ type?: "button" | "submit" | "reset";
203
+ }
204
+ /**
205
+ * IconButton - An accessible icon-only button component
206
+ *
207
+ * Renders as a semantic `<button>` element with full ARIA support.
208
+ * Supports various visual variants, sizes, and states including loading.
209
+ *
210
+ * ## Accessibility Features
211
+ *
212
+ * - **Semantic HTML**: Renders as a native `<button>` element
213
+ * - **Required aria-label**: Ensures screen readers can announce the button's purpose
214
+ * - **Keyboard Navigation**: Focusable via Tab, activated with Enter or Space
215
+ * - **ARIA States**: Properly announces disabled and loading states
216
+ * - **Focus Indicator**: Visible focus ring for keyboard navigation
217
+ * - **Screen Reader Support**: Announces button label, state, and any associated descriptions
218
+ *
219
+ * ## Usage
220
+ *
221
+ * ```tsx
222
+ * // Basic usage - aria-label is required
223
+ * <IconButton icon={<CloseIcon />} aria-label="Close dialog" onPress={handleClose} />
224
+ *
225
+ * // Toggle button
226
+ * <IconButton
227
+ * icon={<MenuIcon />}
228
+ * aria-label="Toggle menu"
229
+ * aria-expanded={isOpen}
230
+ * aria-controls="menu-id"
231
+ * onPress={toggleMenu}
232
+ * />
233
+ *
234
+ * // Loading state
235
+ * <IconButton icon={<SaveIcon />} aria-label="Save changes" loading />
236
+ * ```
237
+ */
238
+ declare var IconButton: React.FC<IconButtonProps>;
239
+ declare type FlexButtonProps = {
240
+ /**
241
+ * Button content
242
+ */
243
+ children: Node,
244
+
245
+ /**
246
+ * Visual variant of the button
247
+ */
248
+ variant?:
249
+ | "brand"
250
+ | "primary"
251
+ | "secondary"
252
+ | "tertiary"
253
+ | "brandExtra"
254
+ | "inverse",
255
+
256
+ /**
257
+ * Size of the button
258
+ */
259
+ size?: "xl" | "lg" | "md" | "sm" | "xs",
260
+
261
+ /**
262
+ * Whether to show background fill
263
+ */
264
+ background?: boolean,
265
+
266
+ /**
267
+ * Whether the button is disabled
268
+ */
269
+ disabled?: boolean,
270
+
271
+ /**
272
+ * Whether the button is in a loading state
273
+ */
274
+ loading?: boolean,
275
+
276
+ /**
277
+ * Icon to display on the left side
278
+ */
279
+ iconLeft?: Node,
280
+
281
+ /**
282
+ * Icon to display on the right side
283
+ */
284
+ iconRight?: Node,
285
+
286
+ /**
287
+ * Click handler
288
+ */
289
+ onPress?: () => void,
290
+
291
+ /**
292
+ * HTML type attribute for the button
293
+ */
294
+ type?: "button" | "submit" | "reset",
295
+
296
+ /**
297
+ * Accessible label for screen readers
298
+ */
299
+ "aria-label"?: string,
300
+
301
+ /**
302
+ * ID of element that describes this button
303
+ */
304
+ "aria-describedby"?: string,
305
+
306
+ /**
307
+ * Indicates the button controls an expandable element
308
+ */
309
+ "aria-expanded"?: boolean,
310
+
311
+ /**
312
+ * Indicates the type of popup triggered by the button
313
+ */
314
+ "aria-haspopup"?: boolean | "menu" | "listbox" | "tree" | "grid" | "dialog",
315
+
316
+ /**
317
+ * Indicates the button is pressed (for toggle buttons)
318
+ */
319
+ "aria-pressed"?: boolean | "mixed",
320
+
321
+ /**
322
+ * ID of the element this button controls
323
+ */
324
+ "aria-controls"?: string,
325
+
326
+ /**
327
+ * Test ID for testing frameworks
328
+ */
329
+ testID?: string,
330
+ ...
331
+ } & $Diff<React.ButtonHTMLAttributes<HTMLButtonElement>, { type: any }>;
332
+
333
+ /**
334
+ * FlexButton - A compact button component designed for use in modals and popups.
335
+ *
336
+ * Renders as a semantic `<button>` element with full ARIA support.
337
+ *
338
+ * ## Accessibility Features
339
+ *
340
+ * - **Semantic HTML**: Renders as a native `<button>` element
341
+ * - **Keyboard Navigation**: Focusable via Tab, activated with Enter or Space
342
+ * - **ARIA States**: Properly announces disabled and loading states
343
+ * - **Focus Indicator**: Visible focus ring for keyboard navigation
344
+ * - **Screen Reader Support**: Announces button label, state, and any associated descriptions
345
+ */
346
+ declare var FlexButton: React.FC<FlexButtonProps>;
347
+ declare interface ButtonGroupProps {
348
+ /**
349
+ * Layout orientation of the buttons
350
+ * @default 'horizontal'
351
+ */
352
+ orientation?: "horizontal" | "vertical";
353
+
354
+ /**
355
+ * Size of the button group, determines default gap between buttons
356
+ * @default 'md'
357
+ */
358
+ size?: "xl" | "lg" | "md" | "sm" | "xs";
359
+
360
+ /**
361
+ * Buttons to be grouped
362
+ */
363
+ children: React.ReactNode;
364
+
365
+ /**
366
+ * Optional description text below the buttons
367
+ */
368
+ description?: string;
369
+
370
+ /**
371
+ * Optional error message text below the buttons
372
+ */
373
+ error?: string;
374
+
375
+ /**
376
+ * Custom gap between buttons (in pixels). If not provided, uses size and orientation based default.
377
+ */
378
+ gap?: number;
379
+
380
+ /**
381
+ * Accessible label for the button group
382
+ */
383
+ "aria-label"?: string;
384
+
385
+ /**
386
+ * ID of element that labels this button group
387
+ */
388
+ "aria-labelledby"?: string;
389
+
390
+ /**
391
+ * ID of element that describes this button group
392
+ */
393
+ "aria-describedby"?: string;
394
+
395
+ /**
396
+ * HTML id attribute
397
+ */
398
+ id?: string;
399
+
400
+ /**
401
+ * Test ID for testing frameworks
402
+ */
403
+ testID?: string;
404
+ }
405
+ /**
406
+ * ButtonGroup - A container for grouping related buttons
407
+ *
408
+ * Provides semantic grouping for related actions with proper accessibility support.
409
+ *
410
+ * ## Accessibility Features
411
+ *
412
+ * - **Semantic Grouping**: Uses `role="group"` to indicate related buttons
413
+ * - **Accessible Name**: Supports `aria-label` or `aria-labelledby` to describe the group's purpose
414
+ * - **Error Announcements**: Errors are announced to screen readers via `aria-live`
415
+ * - **Description Support**: Optional description text for additional context
416
+ */
417
+ declare var ButtonGroup: React.FC<ButtonGroupProps>;
418
+ export type { ButtonGroupProps, ButtonProps, FlexButtonProps, IconButtonProps };
419
+ declare export { Button, ButtonGroup, FlexButton, IconButton };