@skyfall_ai/aegis 0.1.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.
- package/README.md +42 -0
- package/dist/index.css +4323 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +1736 -0
- package/dist/index.d.ts +1736 -0
- package/dist/index.js +3797 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3677 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +75 -0
- package/src/tokens/aegis-tokens.css +333 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,1736 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, TextareaHTMLAttributes, SelectHTMLAttributes, LabelHTMLAttributes, HTMLAttributes, TableHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from 'react';
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
/** Brand primary palette */
|
|
6
|
+
declare const brandPrimary: {
|
|
7
|
+
readonly 50: "#EEF4FF";
|
|
8
|
+
readonly 100: "#DCE8FF";
|
|
9
|
+
readonly 200: "#BED4FF";
|
|
10
|
+
readonly 300: "#8FB7FF";
|
|
11
|
+
readonly 400: "#5C92F2";
|
|
12
|
+
readonly 500: "#2F6FE4";
|
|
13
|
+
readonly 600: "#1F5CCD";
|
|
14
|
+
readonly 700: "#1849A6";
|
|
15
|
+
readonly 800: "#153B82";
|
|
16
|
+
readonly 900: "#112E63";
|
|
17
|
+
};
|
|
18
|
+
/** Support accent — teal */
|
|
19
|
+
declare const accentTeal: {
|
|
20
|
+
readonly 50: "#EDF9F8";
|
|
21
|
+
readonly 100: "#D4F1EE";
|
|
22
|
+
readonly 200: "#A9E0D9";
|
|
23
|
+
readonly 300: "#77C9BE";
|
|
24
|
+
readonly 400: "#48AE9F";
|
|
25
|
+
readonly 500: "#2E8F83";
|
|
26
|
+
readonly 600: "#237368";
|
|
27
|
+
readonly 700: "#1D5D54";
|
|
28
|
+
};
|
|
29
|
+
/** Neutral palette */
|
|
30
|
+
declare const neutral: {
|
|
31
|
+
readonly 0: "#FFFFFF";
|
|
32
|
+
readonly 25: "#FCFDFE";
|
|
33
|
+
readonly 50: "#F6F8FA";
|
|
34
|
+
readonly 100: "#EDF1F5";
|
|
35
|
+
readonly 200: "#DCE3EA";
|
|
36
|
+
readonly 300: "#C1CBD6";
|
|
37
|
+
readonly 400: "#93A1B2";
|
|
38
|
+
readonly 500: "#66768A";
|
|
39
|
+
readonly 600: "#4B5B6C";
|
|
40
|
+
readonly 700: "#334155";
|
|
41
|
+
readonly 800: "#223042";
|
|
42
|
+
readonly 900: "#16202B";
|
|
43
|
+
};
|
|
44
|
+
/** Semantic colors */
|
|
45
|
+
declare const semantic: {
|
|
46
|
+
readonly success: {
|
|
47
|
+
readonly 50: "#EEF8F1";
|
|
48
|
+
readonly 500: "#2F8F57";
|
|
49
|
+
readonly 700: "#1F6B3D";
|
|
50
|
+
};
|
|
51
|
+
readonly warning: {
|
|
52
|
+
readonly 50: "#FFF6E8";
|
|
53
|
+
readonly 500: "#B86A00";
|
|
54
|
+
readonly 700: "#8D4F00";
|
|
55
|
+
};
|
|
56
|
+
readonly error: {
|
|
57
|
+
readonly 50: "#FFF0F0";
|
|
58
|
+
readonly 500: "#C23A3A";
|
|
59
|
+
readonly 700: "#8F2626";
|
|
60
|
+
};
|
|
61
|
+
readonly info: {
|
|
62
|
+
readonly 50: "#EEF6FF";
|
|
63
|
+
readonly 500: "#2563B8";
|
|
64
|
+
readonly 700: "#1B4C8E";
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
/** Text aliases */
|
|
68
|
+
declare const text: {
|
|
69
|
+
readonly primary: "#16202B";
|
|
70
|
+
readonly secondary: "#4B5B6C";
|
|
71
|
+
readonly muted: "#66768A";
|
|
72
|
+
readonly inverse: "#FFFFFF";
|
|
73
|
+
};
|
|
74
|
+
/** Surface aliases */
|
|
75
|
+
declare const surface: {
|
|
76
|
+
readonly canvas: "#FCFDFE";
|
|
77
|
+
readonly default: "#FFFFFF";
|
|
78
|
+
readonly subtle: "#F6F8FA";
|
|
79
|
+
readonly raised: "#FFFFFF";
|
|
80
|
+
};
|
|
81
|
+
/** Border aliases */
|
|
82
|
+
declare const border: {
|
|
83
|
+
readonly default: "#DCE3EA";
|
|
84
|
+
readonly strong: "#C1CBD6";
|
|
85
|
+
readonly inverse: "#334155";
|
|
86
|
+
};
|
|
87
|
+
/** Data visualization */
|
|
88
|
+
declare const dataVis: {
|
|
89
|
+
readonly 1: "#2F6FE4";
|
|
90
|
+
readonly 2: "#2E8F83";
|
|
91
|
+
readonly 3: "#7B61C9";
|
|
92
|
+
readonly 4: "#B86A00";
|
|
93
|
+
readonly 5: "#C23A3A";
|
|
94
|
+
readonly gridline: "#DCE3EA";
|
|
95
|
+
readonly axis: "#66768A";
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
declare const fontFamily: {
|
|
99
|
+
readonly sans: "\"Inter\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif";
|
|
100
|
+
readonly mono: "\"IBM Plex Mono\", \"SFMono-Regular\", Consolas, monospace";
|
|
101
|
+
};
|
|
102
|
+
declare const fontWeight: {
|
|
103
|
+
readonly regular: 400;
|
|
104
|
+
readonly medium: 500;
|
|
105
|
+
readonly semibold: 600;
|
|
106
|
+
readonly bold: 700;
|
|
107
|
+
};
|
|
108
|
+
declare const fontSize: {
|
|
109
|
+
readonly 'display-lg': "40px";
|
|
110
|
+
readonly 'display-md': "32px";
|
|
111
|
+
readonly 'heading-xl': "28px";
|
|
112
|
+
readonly 'heading-lg': "24px";
|
|
113
|
+
readonly 'heading-md': "20px";
|
|
114
|
+
readonly 'heading-sm': "18px";
|
|
115
|
+
readonly 'body-lg': "16px";
|
|
116
|
+
readonly 'body-md': "14px";
|
|
117
|
+
readonly 'body-sm': "13px";
|
|
118
|
+
readonly 'label-lg': "14px";
|
|
119
|
+
readonly 'label-md': "13px";
|
|
120
|
+
readonly caption: "12px";
|
|
121
|
+
readonly data: "14px";
|
|
122
|
+
readonly code: "13px";
|
|
123
|
+
};
|
|
124
|
+
declare const lineHeight: {
|
|
125
|
+
readonly 'display-lg': "48px";
|
|
126
|
+
readonly 'display-md': "40px";
|
|
127
|
+
readonly 'heading-xl': "36px";
|
|
128
|
+
readonly 'heading-lg': "32px";
|
|
129
|
+
readonly 'heading-md': "28px";
|
|
130
|
+
readonly 'heading-sm': "26px";
|
|
131
|
+
readonly 'body-lg': "24px";
|
|
132
|
+
readonly 'body-md': "22px";
|
|
133
|
+
readonly 'body-sm': "20px";
|
|
134
|
+
readonly 'label-lg': "20px";
|
|
135
|
+
readonly 'label-md': "18px";
|
|
136
|
+
readonly caption: "16px";
|
|
137
|
+
readonly data: "20px";
|
|
138
|
+
readonly code: "18px";
|
|
139
|
+
};
|
|
140
|
+
declare const tracking: {
|
|
141
|
+
readonly tight: "-0.02em";
|
|
142
|
+
readonly normal: "0em";
|
|
143
|
+
readonly wide: "0.01em";
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
declare const space: {
|
|
147
|
+
readonly 0: "0";
|
|
148
|
+
readonly 1: "4px";
|
|
149
|
+
readonly 2: "8px";
|
|
150
|
+
readonly 3: "12px";
|
|
151
|
+
readonly 4: "16px";
|
|
152
|
+
readonly 5: "20px";
|
|
153
|
+
readonly 6: "24px";
|
|
154
|
+
readonly 8: "32px";
|
|
155
|
+
readonly 10: "40px";
|
|
156
|
+
readonly 12: "48px";
|
|
157
|
+
readonly 16: "64px";
|
|
158
|
+
readonly 20: "80px";
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
declare const controlSize: {
|
|
162
|
+
readonly sm: "32px";
|
|
163
|
+
readonly md: "40px";
|
|
164
|
+
readonly lg: "48px";
|
|
165
|
+
};
|
|
166
|
+
declare const iconSize: {
|
|
167
|
+
readonly xs: "12px";
|
|
168
|
+
readonly sm: "16px";
|
|
169
|
+
readonly md: "20px";
|
|
170
|
+
readonly lg: "24px";
|
|
171
|
+
};
|
|
172
|
+
declare const touchMin = "44px";
|
|
173
|
+
declare const modalSize: {
|
|
174
|
+
readonly sm: "400px";
|
|
175
|
+
readonly md: "560px";
|
|
176
|
+
readonly lg: "720px";
|
|
177
|
+
readonly xl: "880px";
|
|
178
|
+
};
|
|
179
|
+
declare const sidebarDefault = "280px";
|
|
180
|
+
|
|
181
|
+
declare const radius: {
|
|
182
|
+
readonly none: "0";
|
|
183
|
+
readonly sm: "6px";
|
|
184
|
+
readonly md: "10px";
|
|
185
|
+
readonly lg: "14px";
|
|
186
|
+
readonly xl: "18px";
|
|
187
|
+
readonly full: "9999px";
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
declare const borderWidth: {
|
|
191
|
+
readonly none: "0";
|
|
192
|
+
readonly hairline: "1px";
|
|
193
|
+
readonly medium: "2px";
|
|
194
|
+
readonly strong: "3px";
|
|
195
|
+
};
|
|
196
|
+
declare const borderStyle: {
|
|
197
|
+
readonly default: "solid";
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
declare const shadow: {
|
|
201
|
+
readonly none: "none";
|
|
202
|
+
readonly xs: "0 1px 2px rgba(22, 32, 43, 0.05)";
|
|
203
|
+
readonly sm: "0 1px 3px rgba(22, 32, 43, 0.06), 0 2px 8px rgba(22, 32, 43, 0.04)";
|
|
204
|
+
readonly md: "0 2px 4px rgba(22, 32, 43, 0.04), 0 8px 20px rgba(22, 32, 43, 0.08)";
|
|
205
|
+
readonly lg: "0 4px 8px rgba(22, 32, 43, 0.04), 0 16px 40px rgba(22, 32, 43, 0.12)";
|
|
206
|
+
readonly xl: "0 8px 16px rgba(22, 32, 43, 0.06), 0 24px 56px rgba(22, 32, 43, 0.16)";
|
|
207
|
+
readonly focus: "0 0 0 3px rgba(47, 111, 228, 0.28)";
|
|
208
|
+
readonly focusError: "0 0 0 3px rgba(194, 58, 58, 0.2)";
|
|
209
|
+
readonly focusSuccess: "0 0 0 3px rgba(47, 143, 87, 0.2)";
|
|
210
|
+
readonly insetXs: "inset 0 1px 2px rgba(22, 32, 43, 0.06)";
|
|
211
|
+
readonly insetSm: "inset 0 2px 4px rgba(22, 32, 43, 0.08)";
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
declare const duration: {
|
|
215
|
+
readonly fast: "120ms";
|
|
216
|
+
readonly base: "180ms";
|
|
217
|
+
readonly slow: "240ms";
|
|
218
|
+
};
|
|
219
|
+
declare const easing: {
|
|
220
|
+
readonly standard: "cubic-bezier(0.2, 0, 0, 1)";
|
|
221
|
+
readonly emphasized: "cubic-bezier(0.2, 0, 0, 1)";
|
|
222
|
+
readonly exit: "cubic-bezier(0.4, 0, 1, 1)";
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
declare const opacity: {
|
|
226
|
+
readonly disabled: 0.48;
|
|
227
|
+
readonly subtle: 0.72;
|
|
228
|
+
readonly overlay: 0.48;
|
|
229
|
+
readonly scrimStrong: 0.64;
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
declare const zIndex: {
|
|
233
|
+
readonly base: 0;
|
|
234
|
+
readonly dropdown: 1000;
|
|
235
|
+
readonly sticky: 1100;
|
|
236
|
+
readonly banner: 1200;
|
|
237
|
+
readonly overlay: 1300;
|
|
238
|
+
readonly modal: 1400;
|
|
239
|
+
readonly toast: 1500;
|
|
240
|
+
readonly tooltip: 1600;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
declare const container: {
|
|
244
|
+
readonly max: "1280px";
|
|
245
|
+
readonly reading: "720px";
|
|
246
|
+
};
|
|
247
|
+
declare const grid: {
|
|
248
|
+
readonly columns: 12;
|
|
249
|
+
readonly gutter: "24px";
|
|
250
|
+
readonly margin: {
|
|
251
|
+
readonly desktop: "32px";
|
|
252
|
+
readonly tablet: "24px";
|
|
253
|
+
readonly mobile: "16px";
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
declare const focusRing: {
|
|
258
|
+
readonly width: "3px";
|
|
259
|
+
readonly color: "rgba(47, 111, 228, 0.28)";
|
|
260
|
+
readonly offset: "2px";
|
|
261
|
+
readonly outlineColor: "#2F6FE4";
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
265
|
+
/** Visual variant */
|
|
266
|
+
variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
267
|
+
/** Size of the button */
|
|
268
|
+
size?: 'sm' | 'md' | 'lg';
|
|
269
|
+
/** Full width */
|
|
270
|
+
fullWidth?: boolean;
|
|
271
|
+
/** Loading state — disables interaction and shows spinner */
|
|
272
|
+
loading?: boolean;
|
|
273
|
+
/** Icon before the label */
|
|
274
|
+
iconLeft?: ReactNode;
|
|
275
|
+
/** Icon after the label */
|
|
276
|
+
iconRight?: ReactNode;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Button — primary interactive element.
|
|
280
|
+
*
|
|
281
|
+
* Accessibility:
|
|
282
|
+
* - Uses native <button> for keyboard and screen reader support
|
|
283
|
+
* - aria-disabled used during loading to maintain focusability
|
|
284
|
+
* - aria-busy signals loading state to assistive technology
|
|
285
|
+
* - Minimum 44px touch target on md/lg sizes
|
|
286
|
+
*/
|
|
287
|
+
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
288
|
+
|
|
289
|
+
interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
290
|
+
/** Accessible label (required — icon-only buttons need text for screen readers) */
|
|
291
|
+
'aria-label': string;
|
|
292
|
+
/** The icon element */
|
|
293
|
+
icon: ReactNode;
|
|
294
|
+
/** Visual variant */
|
|
295
|
+
variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
296
|
+
/** Size */
|
|
297
|
+
size?: 'sm' | 'md' | 'lg';
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* IconButton — icon-only interactive button.
|
|
301
|
+
*
|
|
302
|
+
* Accessibility:
|
|
303
|
+
* - aria-label is required to provide screen reader context
|
|
304
|
+
* - Meets 44px minimum touch target at md/lg sizes
|
|
305
|
+
*/
|
|
306
|
+
declare const IconButton: react.ForwardRefExoticComponent<IconButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
307
|
+
|
|
308
|
+
interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
|
|
309
|
+
/** Size of the input control */
|
|
310
|
+
size?: 'sm' | 'md' | 'lg';
|
|
311
|
+
/** Error state */
|
|
312
|
+
error?: boolean;
|
|
313
|
+
/** Full width */
|
|
314
|
+
fullWidth?: boolean;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Input — single-line text input.
|
|
318
|
+
*
|
|
319
|
+
* Accessibility:
|
|
320
|
+
* - Use with <Label> and associate via htmlFor/id
|
|
321
|
+
* - Use aria-describedby to link to HelperText or error messages
|
|
322
|
+
* - aria-invalid signals error state to assistive technology
|
|
323
|
+
* - Visible border change + color signals error (not color alone)
|
|
324
|
+
*/
|
|
325
|
+
declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
|
|
326
|
+
|
|
327
|
+
interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
|
|
328
|
+
/** Error state */
|
|
329
|
+
error?: boolean;
|
|
330
|
+
/** Full width */
|
|
331
|
+
fullWidth?: boolean;
|
|
332
|
+
/** Allow vertical resize */
|
|
333
|
+
resize?: 'none' | 'vertical' | 'both';
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Textarea — multi-line text input.
|
|
337
|
+
*
|
|
338
|
+
* Accessibility:
|
|
339
|
+
* - Associate with Label via htmlFor/id
|
|
340
|
+
* - Link to HelperText via aria-describedby
|
|
341
|
+
*/
|
|
342
|
+
declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
|
|
343
|
+
|
|
344
|
+
interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {
|
|
345
|
+
/** Size */
|
|
346
|
+
size?: 'sm' | 'md' | 'lg';
|
|
347
|
+
/** Error state */
|
|
348
|
+
error?: boolean;
|
|
349
|
+
/** Full width */
|
|
350
|
+
fullWidth?: boolean;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Select — native dropdown select.
|
|
354
|
+
*
|
|
355
|
+
* Accessibility:
|
|
356
|
+
* - Uses native <select> for full keyboard and screen reader support
|
|
357
|
+
* - Associate with Label via htmlFor/id
|
|
358
|
+
* - Custom chevron is decorative (aria-hidden on the icon)
|
|
359
|
+
*/
|
|
360
|
+
declare const Select: react.ForwardRefExoticComponent<SelectProps & react.RefAttributes<HTMLSelectElement>>;
|
|
361
|
+
|
|
362
|
+
interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
363
|
+
/** Label text displayed next to the checkbox */
|
|
364
|
+
label?: string;
|
|
365
|
+
/** Error state */
|
|
366
|
+
error?: boolean;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Checkbox — boolean toggle with label.
|
|
370
|
+
*
|
|
371
|
+
* Accessibility:
|
|
372
|
+
* - Uses native <input type="checkbox"> for full keyboard/screen reader support
|
|
373
|
+
* - Checkmark is CSS-only, no JS required for visual state
|
|
374
|
+
* - Label is clickable and linked to input
|
|
375
|
+
* - 44px minimum touch target maintained via padding
|
|
376
|
+
*/
|
|
377
|
+
declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
|
|
378
|
+
|
|
379
|
+
interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
380
|
+
/** Label text */
|
|
381
|
+
label?: string;
|
|
382
|
+
/** Error state */
|
|
383
|
+
error?: boolean;
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Radio — single-selection option within a group.
|
|
387
|
+
*
|
|
388
|
+
* Accessibility:
|
|
389
|
+
* - Uses native <input type="radio">
|
|
390
|
+
* - Wrap multiple Radios in a fieldset with legend for group labeling
|
|
391
|
+
* - Arrow keys navigate between radios within the same name group
|
|
392
|
+
*/
|
|
393
|
+
declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLInputElement>>;
|
|
394
|
+
|
|
395
|
+
interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
|
|
396
|
+
/** Label text */
|
|
397
|
+
label?: string;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Switch — on/off toggle control.
|
|
401
|
+
*
|
|
402
|
+
* Accessibility:
|
|
403
|
+
* - Uses role="switch" with native checkbox for AT support
|
|
404
|
+
* - aria-checked reflects state
|
|
405
|
+
* - Label is clickable and linked
|
|
406
|
+
* - Healthcare note: use for non-critical preferences only.
|
|
407
|
+
* For high-risk toggles (e.g., medication alerts), prefer explicit
|
|
408
|
+
* confirmation patterns instead.
|
|
409
|
+
*/
|
|
410
|
+
declare const Switch: react.ForwardRefExoticComponent<SwitchProps & react.RefAttributes<HTMLInputElement>>;
|
|
411
|
+
|
|
412
|
+
interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
|
|
413
|
+
/** Mark the field as required — adds visual indicator */
|
|
414
|
+
required?: boolean;
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Label — form field label.
|
|
418
|
+
*
|
|
419
|
+
* Accessibility:
|
|
420
|
+
* - Always associate with an input via htmlFor
|
|
421
|
+
* - Required indicator uses both visual (*) and sr-only text
|
|
422
|
+
*/
|
|
423
|
+
declare function Label({ required, className, children, ...props }: LabelProps): react_jsx_runtime.JSX.Element;
|
|
424
|
+
|
|
425
|
+
interface HelperTextProps extends HTMLAttributes<HTMLParagraphElement> {
|
|
426
|
+
/** Render as error message */
|
|
427
|
+
error?: boolean;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* HelperText — descriptive or error text beneath a form field.
|
|
431
|
+
*
|
|
432
|
+
* Accessibility:
|
|
433
|
+
* - Link to input via aria-describedby on the input, matching this element's id
|
|
434
|
+
* - Error messages use role="alert" for immediate screen reader announcement
|
|
435
|
+
* - Error state uses both color and icon (not color alone)
|
|
436
|
+
*/
|
|
437
|
+
declare function HelperText({ error, className, children, ...props }: HelperTextProps): react_jsx_runtime.JSX.Element;
|
|
438
|
+
|
|
439
|
+
interface CardProps extends HTMLAttributes<HTMLDivElement> {
|
|
440
|
+
/** Elevation level */
|
|
441
|
+
elevation?: 'flat' | 'raised';
|
|
442
|
+
/** Padding size */
|
|
443
|
+
padding?: 'none' | 'sm' | 'md' | 'lg';
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Card — surface container for grouping related content.
|
|
447
|
+
*
|
|
448
|
+
* Accessibility:
|
|
449
|
+
* - Uses semantic HTML; add role="region" + aria-label when card
|
|
450
|
+
* represents a distinct content section
|
|
451
|
+
* - Border provides separation independent of shadow (not shadow alone)
|
|
452
|
+
*/
|
|
453
|
+
declare function Card({ elevation, padding, className, children, ...props }: CardProps): react_jsx_runtime.JSX.Element;
|
|
454
|
+
|
|
455
|
+
interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
456
|
+
/** Status variant */
|
|
457
|
+
status?: 'neutral' | 'success' | 'warning' | 'error' | 'info';
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Badge / StatusChip — small label for status or metadata.
|
|
461
|
+
*
|
|
462
|
+
* Accessibility:
|
|
463
|
+
* - Always include meaningful text content (not color alone)
|
|
464
|
+
* - In healthcare contexts, pair with text like "Active", "Pending",
|
|
465
|
+
* "Critical" rather than relying on color to communicate status
|
|
466
|
+
*/
|
|
467
|
+
declare function Badge({ status, className, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
468
|
+
|
|
469
|
+
interface AlertProps extends HTMLAttributes<HTMLDivElement> {
|
|
470
|
+
/** Semantic status */
|
|
471
|
+
status?: 'info' | 'success' | 'warning' | 'error';
|
|
472
|
+
/** Optional title */
|
|
473
|
+
title?: string;
|
|
474
|
+
/** Optional action element (e.g., a close button) */
|
|
475
|
+
action?: ReactNode;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Alert — contextual message banner.
|
|
479
|
+
*
|
|
480
|
+
* Accessibility:
|
|
481
|
+
* - Uses role="alert" for errors/warnings (live region, immediately announced)
|
|
482
|
+
* - Uses role="status" for info/success (polite announcement)
|
|
483
|
+
* - Icon + color + text ensures meaning is communicated multiple ways
|
|
484
|
+
*/
|
|
485
|
+
declare function Alert({ status, title, action, className, children, ...props }: AlertProps): react_jsx_runtime.JSX.Element;
|
|
486
|
+
|
|
487
|
+
interface Tab {
|
|
488
|
+
id: string;
|
|
489
|
+
label: string;
|
|
490
|
+
content: ReactNode;
|
|
491
|
+
disabled?: boolean;
|
|
492
|
+
}
|
|
493
|
+
interface TabsProps {
|
|
494
|
+
/** Tab definitions */
|
|
495
|
+
tabs: Tab[];
|
|
496
|
+
/** Controlled active tab id */
|
|
497
|
+
activeTab?: string;
|
|
498
|
+
/** Callback when tab changes */
|
|
499
|
+
onTabChange?: (id: string) => void;
|
|
500
|
+
/** Additional className for the wrapper */
|
|
501
|
+
className?: string;
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Tabs — tabbed interface for switching between content panels.
|
|
505
|
+
*
|
|
506
|
+
* Accessibility:
|
|
507
|
+
* - Full WAI-ARIA tabs pattern: role="tablist", role="tab", role="tabpanel"
|
|
508
|
+
* - Arrow key navigation between tabs
|
|
509
|
+
* - Home/End keys jump to first/last tab
|
|
510
|
+
* - aria-selected, aria-controls, aria-labelledby for AT relationships
|
|
511
|
+
* - Only active panel is in the tab order (tabIndex=0 on active tab)
|
|
512
|
+
*/
|
|
513
|
+
declare function Tabs({ tabs, activeTab, onTabChange, className }: TabsProps): react_jsx_runtime.JSX.Element;
|
|
514
|
+
|
|
515
|
+
interface ModalProps {
|
|
516
|
+
/** Additional className */
|
|
517
|
+
className?: string;
|
|
518
|
+
/** Whether the modal is visible */
|
|
519
|
+
open: boolean;
|
|
520
|
+
/** Called when the modal should close */
|
|
521
|
+
onClose: () => void;
|
|
522
|
+
/** Modal title (rendered in header) */
|
|
523
|
+
title: ReactNode;
|
|
524
|
+
/** Max width */
|
|
525
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
526
|
+
/** Footer actions */
|
|
527
|
+
footer?: ReactNode;
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Modal / Dialog — overlay dialog for focused interactions.
|
|
531
|
+
*
|
|
532
|
+
* Accessibility:
|
|
533
|
+
* - Uses native <dialog> element for built-in focus trapping and Escape handling
|
|
534
|
+
* - aria-labelledby links to the title
|
|
535
|
+
* - Focus is moved into the dialog on open
|
|
536
|
+
* - Escape key closes the dialog
|
|
537
|
+
* - Scrim click closes the dialog
|
|
538
|
+
* - Healthcare note: for destructive actions (e.g., cancel appointment,
|
|
539
|
+
* delete record), always include clear confirmation language in the
|
|
540
|
+
* dialog and use danger-variant buttons
|
|
541
|
+
*/
|
|
542
|
+
declare function Modal({ open, onClose, title, size, footer, className, children }: ModalProps & {
|
|
543
|
+
children?: ReactNode;
|
|
544
|
+
}): react_jsx_runtime.JSX.Element;
|
|
545
|
+
|
|
546
|
+
interface TableProps extends TableHTMLAttributes<HTMLTableElement> {
|
|
547
|
+
/** Compact density for admin/operational views */
|
|
548
|
+
density?: 'default' | 'compact';
|
|
549
|
+
/** Striped rows for scan-ability */
|
|
550
|
+
striped?: boolean;
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Table — data table with accessible defaults.
|
|
554
|
+
*
|
|
555
|
+
* Accessibility:
|
|
556
|
+
* - Semantic <table> / <thead> / <tbody> / <th> structure
|
|
557
|
+
* - Use scope="col" on header cells
|
|
558
|
+
* - For complex tables, use aria-describedby to link to a caption
|
|
559
|
+
* - Healthcare note: clinical data tables should use tabular numerals
|
|
560
|
+
* (monospace) and adequate row height for readability under stress
|
|
561
|
+
*/
|
|
562
|
+
declare function Table({ density, striped, className, children, ...props }: TableProps): react_jsx_runtime.JSX.Element;
|
|
563
|
+
declare function TableHead({ className, children, ...props }: HTMLAttributes<HTMLTableSectionElement>): react_jsx_runtime.JSX.Element;
|
|
564
|
+
declare function TableBody({ className, children, ...props }: HTMLAttributes<HTMLTableSectionElement>): react_jsx_runtime.JSX.Element;
|
|
565
|
+
declare function TableRow({ className, children, ...props }: HTMLAttributes<HTMLTableRowElement>): react_jsx_runtime.JSX.Element;
|
|
566
|
+
declare function TableHeaderCell({ className, children, ...props }: ThHTMLAttributes<HTMLTableCellElement>): react_jsx_runtime.JSX.Element;
|
|
567
|
+
declare function TableCell({ className, children, ...props }: TdHTMLAttributes<HTMLTableCellElement>): react_jsx_runtime.JSX.Element;
|
|
568
|
+
|
|
569
|
+
interface TooltipProps {
|
|
570
|
+
/** Tooltip content */
|
|
571
|
+
content: ReactNode;
|
|
572
|
+
/** Trigger element */
|
|
573
|
+
children: ReactNode;
|
|
574
|
+
/** Placement */
|
|
575
|
+
placement?: 'top' | 'bottom';
|
|
576
|
+
/** Delay before showing (ms) */
|
|
577
|
+
delay?: number;
|
|
578
|
+
/** Additional className */
|
|
579
|
+
className?: string;
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Tooltip — supplementary text on hover/focus.
|
|
583
|
+
*
|
|
584
|
+
* Accessibility:
|
|
585
|
+
* - Shows on both hover and keyboard focus
|
|
586
|
+
* - Uses role="tooltip" with aria-describedby linking
|
|
587
|
+
* - Respects reduced motion preferences (no animation)
|
|
588
|
+
* - Healthcare note: never put critical information in tooltips alone.
|
|
589
|
+
* Use for supplementary context only, since tooltips are easy to miss
|
|
590
|
+
* and not accessible on touch devices.
|
|
591
|
+
*/
|
|
592
|
+
declare function Tooltip({ content, children, placement, delay, className }: TooltipProps): react_jsx_runtime.JSX.Element;
|
|
593
|
+
|
|
594
|
+
interface DividerProps extends HTMLAttributes<HTMLHRElement> {
|
|
595
|
+
/** Spacing above and below */
|
|
596
|
+
spacing?: 'none' | 'sm' | 'md' | 'lg';
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Divider — horizontal rule for visual separation.
|
|
600
|
+
*
|
|
601
|
+
* Accessibility:
|
|
602
|
+
* - Uses semantic <hr> which conveys a thematic break
|
|
603
|
+
* - role="separator" is implicit for <hr>
|
|
604
|
+
*/
|
|
605
|
+
declare function Divider({ spacing, className, ...props }: DividerProps): react_jsx_runtime.JSX.Element;
|
|
606
|
+
|
|
607
|
+
interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {
|
|
608
|
+
/** Size */
|
|
609
|
+
size?: 'sm' | 'md' | 'lg';
|
|
610
|
+
/** Accessible label */
|
|
611
|
+
label?: string;
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Spinner / LoadingIndicator — visual loading state.
|
|
615
|
+
*
|
|
616
|
+
* Accessibility:
|
|
617
|
+
* - role="status" with aria-label for screen reader announcement
|
|
618
|
+
* - aria-live="polite" so loading state is announced without interrupting
|
|
619
|
+
* - Healthcare note: in clinical workflows, always pair with text
|
|
620
|
+
* context ("Loading patient records...") so users understand what
|
|
621
|
+
* they are waiting for
|
|
622
|
+
*/
|
|
623
|
+
declare function Spinner({ size, label, className, ...props }: SpinnerProps): react_jsx_runtime.JSX.Element;
|
|
624
|
+
|
|
625
|
+
interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {
|
|
626
|
+
/** Shape variant */
|
|
627
|
+
variant?: 'text' | 'circular' | 'rectangular';
|
|
628
|
+
/** Width (CSS value) */
|
|
629
|
+
width?: string | number;
|
|
630
|
+
/** Height (CSS value) */
|
|
631
|
+
height?: string | number;
|
|
632
|
+
/** Number of text lines (only for text variant) */
|
|
633
|
+
lines?: number;
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Skeleton — placeholder loading indicator with shimmer animation.
|
|
637
|
+
*
|
|
638
|
+
* Accessibility:
|
|
639
|
+
* - aria-hidden="true" since it is purely decorative
|
|
640
|
+
* - Healthcare note: use Skeleton loaders in clinical dashboards to
|
|
641
|
+
* indicate data is loading, reducing perceived wait time
|
|
642
|
+
*/
|
|
643
|
+
declare function Skeleton({ variant, width, height, lines, className, style, ...props }: SkeletonProps): react_jsx_runtime.JSX.Element;
|
|
644
|
+
|
|
645
|
+
type StatusBadgeStatus = 'active' | 'inactive' | 'pending' | 'critical' | 'discharged' | 'scheduled' | 'cancelled' | 'in-progress';
|
|
646
|
+
interface StatusBadgeProps extends HTMLAttributes<HTMLSpanElement> {
|
|
647
|
+
/** Healthcare status */
|
|
648
|
+
status: StatusBadgeStatus;
|
|
649
|
+
/** Size variant */
|
|
650
|
+
size?: 'sm' | 'md';
|
|
651
|
+
/** Show a colored status dot before the label */
|
|
652
|
+
dot?: boolean;
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* StatusBadge — enhanced badge for healthcare workflow statuses.
|
|
656
|
+
*
|
|
657
|
+
* Accessibility:
|
|
658
|
+
* - Always displays text label alongside color to avoid color-only indication
|
|
659
|
+
* - Healthcare note: maps each clinical status to an appropriate semantic
|
|
660
|
+
* color (critical = red, active = green, pending = amber, etc.)
|
|
661
|
+
*/
|
|
662
|
+
declare function StatusBadge({ status, size, dot, className, children, ...props }: StatusBadgeProps): react_jsx_runtime.JSX.Element;
|
|
663
|
+
|
|
664
|
+
interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {
|
|
665
|
+
/** Image source URL */
|
|
666
|
+
src?: string;
|
|
667
|
+
/** Alt text for the image */
|
|
668
|
+
alt?: string;
|
|
669
|
+
/** Full name used to generate initials fallback */
|
|
670
|
+
name?: string;
|
|
671
|
+
/** Size variant */
|
|
672
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
673
|
+
/** Optional status dot overlay */
|
|
674
|
+
status?: 'active' | 'inactive' | 'busy' | 'away';
|
|
675
|
+
}
|
|
676
|
+
/**
|
|
677
|
+
* Avatar — circular user image with initials fallback and optional status.
|
|
678
|
+
*
|
|
679
|
+
* Accessibility:
|
|
680
|
+
* - Image includes alt text when src is provided
|
|
681
|
+
* - Initials fallback uses aria-label with the full name
|
|
682
|
+
* - Status dot includes a visually-hidden label
|
|
683
|
+
* - Healthcare note: use avatars to identify care team members,
|
|
684
|
+
* patients, and providers in clinical workflows
|
|
685
|
+
*/
|
|
686
|
+
declare function Avatar({ src, alt, name, size, status, className, ...props }: AvatarProps): react_jsx_runtime.JSX.Element;
|
|
687
|
+
|
|
688
|
+
interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {
|
|
689
|
+
/** Optional icon displayed above the title */
|
|
690
|
+
icon?: ReactNode;
|
|
691
|
+
/** Title text */
|
|
692
|
+
title: string;
|
|
693
|
+
/** Descriptive text below the title */
|
|
694
|
+
description?: string;
|
|
695
|
+
/** Optional action element (e.g., a button) */
|
|
696
|
+
action?: ReactNode;
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* EmptyState — centered placeholder for empty tables, lists, or views.
|
|
700
|
+
*
|
|
701
|
+
* Accessibility:
|
|
702
|
+
* - Uses semantic heading and paragraph elements
|
|
703
|
+
* - Healthcare note: provide clear, actionable guidance in empty states
|
|
704
|
+
* (e.g., "No patients match your filters. Try adjusting your search.")
|
|
705
|
+
*/
|
|
706
|
+
declare function EmptyState({ icon, title, description, action, className, ...props }: EmptyStateProps): react_jsx_runtime.JSX.Element;
|
|
707
|
+
|
|
708
|
+
interface ProgressBarProps extends HTMLAttributes<HTMLDivElement> {
|
|
709
|
+
/** Current value (0-100) */
|
|
710
|
+
value: number;
|
|
711
|
+
/** Maximum value (defaults to 100) */
|
|
712
|
+
max?: number;
|
|
713
|
+
/** Size variant */
|
|
714
|
+
size?: 'sm' | 'md';
|
|
715
|
+
/** Color variant */
|
|
716
|
+
variant?: 'default' | 'success' | 'warning' | 'error';
|
|
717
|
+
/** Visible label text */
|
|
718
|
+
label?: string;
|
|
719
|
+
/** Show the numeric value */
|
|
720
|
+
showValue?: boolean;
|
|
721
|
+
}
|
|
722
|
+
/**
|
|
723
|
+
* ProgressBar — horizontal bar indicating completion or progress.
|
|
724
|
+
*
|
|
725
|
+
* Accessibility:
|
|
726
|
+
* - role="progressbar" with aria-valuenow, aria-valuemin, aria-valuemax
|
|
727
|
+
* - aria-label derived from the label prop
|
|
728
|
+
* - Healthcare note: useful for treatment progress, form completion,
|
|
729
|
+
* or patient intake steps
|
|
730
|
+
*/
|
|
731
|
+
declare function ProgressBar({ value, max, size, variant, label, showValue, className, ...props }: ProgressBarProps): react_jsx_runtime.JSX.Element;
|
|
732
|
+
|
|
733
|
+
interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {
|
|
734
|
+
/** Current active page (1-based) */
|
|
735
|
+
currentPage: number;
|
|
736
|
+
/** Total number of pages */
|
|
737
|
+
totalPages: number;
|
|
738
|
+
/** Callback when page changes */
|
|
739
|
+
onPageChange: (page: number) => void;
|
|
740
|
+
/** Number of sibling pages to show around the current page */
|
|
741
|
+
siblingCount?: number;
|
|
742
|
+
/** Size variant */
|
|
743
|
+
size?: 'sm' | 'md';
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* Pagination — page navigation for paginated data.
|
|
747
|
+
*
|
|
748
|
+
* Accessibility:
|
|
749
|
+
* - Wraps in <nav> with aria-label="Pagination"
|
|
750
|
+
* - Current page indicated with aria-current="page"
|
|
751
|
+
* - Previous/Next buttons disabled at boundaries
|
|
752
|
+
* - Healthcare note: use pagination for patient lists, lab results,
|
|
753
|
+
* and audit logs to keep pages manageable
|
|
754
|
+
*/
|
|
755
|
+
declare function Pagination({ currentPage, totalPages, onPageChange, siblingCount, size, className, ...props }: PaginationProps): react_jsx_runtime.JSX.Element | null;
|
|
756
|
+
|
|
757
|
+
interface DescriptionListItem {
|
|
758
|
+
/** Label / term */
|
|
759
|
+
label: ReactNode;
|
|
760
|
+
/** Value / description */
|
|
761
|
+
value: ReactNode;
|
|
762
|
+
}
|
|
763
|
+
interface DescriptionListProps extends HTMLAttributes<HTMLDListElement> {
|
|
764
|
+
/** Array of label-value pairs */
|
|
765
|
+
items: DescriptionListItem[];
|
|
766
|
+
/** Layout mode */
|
|
767
|
+
layout?: 'vertical' | 'horizontal' | 'grid';
|
|
768
|
+
/** Number of columns for grid layout */
|
|
769
|
+
columns?: number;
|
|
770
|
+
}
|
|
771
|
+
/**
|
|
772
|
+
* DescriptionList — semantic key-value display using dl/dt/dd.
|
|
773
|
+
*
|
|
774
|
+
* Accessibility:
|
|
775
|
+
* - Uses <dl>, <dt>, <dd> semantic HTML
|
|
776
|
+
* - Screen readers will announce terms and definitions
|
|
777
|
+
* - Healthcare note: ideal for patient demographics, encounter details,
|
|
778
|
+
* and insurance information panels
|
|
779
|
+
*/
|
|
780
|
+
declare function DescriptionList({ items, layout, columns, className, style, ...props }: DescriptionListProps): react_jsx_runtime.JSX.Element;
|
|
781
|
+
|
|
782
|
+
interface PopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {
|
|
783
|
+
/** Trigger element that opens the popover */
|
|
784
|
+
trigger: ReactNode;
|
|
785
|
+
/** Content rendered inside the popover */
|
|
786
|
+
content: ReactNode;
|
|
787
|
+
/** Controlled open state */
|
|
788
|
+
open?: boolean;
|
|
789
|
+
/** Callback when open state changes */
|
|
790
|
+
onOpenChange?: (open: boolean) => void;
|
|
791
|
+
/** Placement relative to the trigger */
|
|
792
|
+
placement?: 'top' | 'bottom' | 'left' | 'right';
|
|
793
|
+
/** Alignment along the placement axis */
|
|
794
|
+
align?: 'start' | 'center' | 'end';
|
|
795
|
+
}
|
|
796
|
+
/**
|
|
797
|
+
* Popover — positioned overlay content triggered by a reference element.
|
|
798
|
+
*
|
|
799
|
+
* Accessibility:
|
|
800
|
+
* - Escape key closes the popover
|
|
801
|
+
* - Focus is managed: moves into popover on open, returns on close
|
|
802
|
+
* - Click outside closes the popover
|
|
803
|
+
* - Healthcare note: use for additional context like patient quick-view,
|
|
804
|
+
* medication details, or field-level help without navigating away
|
|
805
|
+
*/
|
|
806
|
+
declare function Popover({ trigger, content, open: controlledOpen, onOpenChange, placement, align, className, ...props }: PopoverProps): react_jsx_runtime.JSX.Element;
|
|
807
|
+
|
|
808
|
+
interface DrawerProps {
|
|
809
|
+
/** Additional className */
|
|
810
|
+
className?: string;
|
|
811
|
+
/** Whether the drawer is visible */
|
|
812
|
+
open: boolean;
|
|
813
|
+
/** Called when the drawer should close */
|
|
814
|
+
onClose: () => void;
|
|
815
|
+
/** Drawer title */
|
|
816
|
+
title: ReactNode;
|
|
817
|
+
/** Width preset */
|
|
818
|
+
size?: 'sm' | 'md' | 'lg';
|
|
819
|
+
/** Which side the drawer slides from */
|
|
820
|
+
position?: 'left' | 'right';
|
|
821
|
+
/** Footer actions */
|
|
822
|
+
footer?: ReactNode;
|
|
823
|
+
/** Drawer body content */
|
|
824
|
+
children?: ReactNode;
|
|
825
|
+
}
|
|
826
|
+
/**
|
|
827
|
+
* Drawer — side panel overlay for detail views and forms.
|
|
828
|
+
*
|
|
829
|
+
* Accessibility:
|
|
830
|
+
* - Uses native <dialog> element for focus trapping
|
|
831
|
+
* - Escape key closes the drawer
|
|
832
|
+
* - aria-labelledby links to the title
|
|
833
|
+
* - Scrim click closes the drawer
|
|
834
|
+
* - Healthcare note: use drawers for patient detail views, order entry,
|
|
835
|
+
* and contextual forms that don't require full-page navigation
|
|
836
|
+
*/
|
|
837
|
+
declare function Drawer({ open, onClose, title, size, position, footer, className, children, }: DrawerProps): react_jsx_runtime.JSX.Element;
|
|
838
|
+
|
|
839
|
+
interface DataGridColumn<T = Record<string, unknown>> {
|
|
840
|
+
/** Unique key for the column, used as the data accessor */
|
|
841
|
+
key: string;
|
|
842
|
+
/** Column header label */
|
|
843
|
+
header: ReactNode;
|
|
844
|
+
/** Custom render function for cell content */
|
|
845
|
+
render?: (value: unknown, row: T, rowIndex: number) => ReactNode;
|
|
846
|
+
/** Whether this column is sortable */
|
|
847
|
+
sortable?: boolean;
|
|
848
|
+
/** Column width (CSS value) */
|
|
849
|
+
width?: string | number;
|
|
850
|
+
/** Text alignment */
|
|
851
|
+
align?: 'left' | 'center' | 'right';
|
|
852
|
+
}
|
|
853
|
+
type SortDirection = 'asc' | 'desc';
|
|
854
|
+
interface DataGridProps<T = Record<string, unknown>> extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {
|
|
855
|
+
/** Column definitions */
|
|
856
|
+
columns: DataGridColumn<T>[];
|
|
857
|
+
/** Data array */
|
|
858
|
+
data: T[];
|
|
859
|
+
/** Enable row selection with checkboxes */
|
|
860
|
+
selectable?: boolean;
|
|
861
|
+
/** Callback when selection changes, receives array of selected row indices */
|
|
862
|
+
onSelectionChange?: (selectedIndices: number[]) => void;
|
|
863
|
+
/** Currently selected row indices (controlled) */
|
|
864
|
+
selectedRows?: number[];
|
|
865
|
+
/** Current sort column key */
|
|
866
|
+
sortColumn?: string;
|
|
867
|
+
/** Current sort direction */
|
|
868
|
+
sortDirection?: SortDirection;
|
|
869
|
+
/** Callback when a sortable column header is clicked */
|
|
870
|
+
onSort?: (column: string, direction: SortDirection) => void;
|
|
871
|
+
/** Show loading skeleton */
|
|
872
|
+
loading?: boolean;
|
|
873
|
+
/** Message shown when data is empty */
|
|
874
|
+
emptyMessage?: string;
|
|
875
|
+
/** Row density */
|
|
876
|
+
density?: 'default' | 'compact' | 'comfortable';
|
|
877
|
+
/** Sticky header */
|
|
878
|
+
stickyHeader?: boolean;
|
|
879
|
+
/** Striped rows */
|
|
880
|
+
striped?: boolean;
|
|
881
|
+
/** Callback when a row is clicked */
|
|
882
|
+
onRowClick?: (row: T, index: number) => void;
|
|
883
|
+
}
|
|
884
|
+
/**
|
|
885
|
+
* DataGrid — composable data grid built on Table primitives.
|
|
886
|
+
*
|
|
887
|
+
* Accessibility:
|
|
888
|
+
* - Built on semantic Table components (table/thead/tbody/tr/th/td)
|
|
889
|
+
* - Sortable columns use aria-sort
|
|
890
|
+
* - Selection checkboxes include accessible labels
|
|
891
|
+
* - Loading state announced via aria-busy
|
|
892
|
+
* - Healthcare note: designed for patient lists, lab results,
|
|
893
|
+
* appointment schedules, and other clinical data views
|
|
894
|
+
*/
|
|
895
|
+
declare function DataGrid<T extends Record<string, unknown>>({ columns, data, selectable, onSelectionChange, selectedRows, sortColumn, sortDirection, onSort, loading, emptyMessage, density, stickyHeader, striped, onRowClick, className, ...props }: DataGridProps<T>): react_jsx_runtime.JSX.Element;
|
|
896
|
+
|
|
897
|
+
interface FormFieldProps {
|
|
898
|
+
/** Label text for the field */
|
|
899
|
+
label?: string;
|
|
900
|
+
/** HTML for attribute to associate label with input */
|
|
901
|
+
htmlFor?: string;
|
|
902
|
+
/** Mark field as required */
|
|
903
|
+
required?: boolean;
|
|
904
|
+
/** Error message string — renders HelperText in error state */
|
|
905
|
+
error?: string;
|
|
906
|
+
/** Helper text displayed below the input */
|
|
907
|
+
helperText?: string;
|
|
908
|
+
/** The form control element (Input, Select, Textarea, etc.) */
|
|
909
|
+
children: ReactNode;
|
|
910
|
+
/** Disabled state — visually dims the field */
|
|
911
|
+
disabled?: boolean;
|
|
912
|
+
/** Additional CSS class */
|
|
913
|
+
className?: string;
|
|
914
|
+
}
|
|
915
|
+
/**
|
|
916
|
+
* FormField — composable wrapper that renders Label + input + HelperText/error.
|
|
917
|
+
*
|
|
918
|
+
* Accessibility:
|
|
919
|
+
* - Generates aria-describedby linking between input and helper/error text
|
|
920
|
+
* - Error messages use role="alert" via HelperText
|
|
921
|
+
* - Required indicator on Label
|
|
922
|
+
* - Disabled state dims the entire field
|
|
923
|
+
*/
|
|
924
|
+
declare function FormField({ label, htmlFor, required, error, helperText, children, disabled, className, }: FormFieldProps): react_jsx_runtime.JSX.Element;
|
|
925
|
+
|
|
926
|
+
interface SearchFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
|
|
927
|
+
/** Size of the search control */
|
|
928
|
+
size?: 'sm' | 'md' | 'lg';
|
|
929
|
+
/** Error state */
|
|
930
|
+
error?: boolean;
|
|
931
|
+
/** Full width */
|
|
932
|
+
fullWidth?: boolean;
|
|
933
|
+
/** Callback when clear button is clicked */
|
|
934
|
+
onClear?: () => void;
|
|
935
|
+
/** Show the clear button when input has a value */
|
|
936
|
+
showClearButton?: boolean;
|
|
937
|
+
}
|
|
938
|
+
/**
|
|
939
|
+
* SearchField — search input with magnifying glass icon and optional clear button.
|
|
940
|
+
*
|
|
941
|
+
* Accessibility:
|
|
942
|
+
* - Uses role="searchbox" for semantic search intent
|
|
943
|
+
* - Clear button has aria-label for screen readers
|
|
944
|
+
* - Search icon is decorative (aria-hidden)
|
|
945
|
+
*/
|
|
946
|
+
declare const SearchField: react.ForwardRefExoticComponent<SearchFieldProps & react.RefAttributes<HTMLInputElement>>;
|
|
947
|
+
|
|
948
|
+
interface NumberFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange' | 'value' | 'prefix'> {
|
|
949
|
+
/** Current numeric value */
|
|
950
|
+
value?: number;
|
|
951
|
+
/** Change handler */
|
|
952
|
+
onChange?: (value: number) => void;
|
|
953
|
+
/** Minimum allowed value */
|
|
954
|
+
min?: number;
|
|
955
|
+
/** Maximum allowed value */
|
|
956
|
+
max?: number;
|
|
957
|
+
/** Increment step */
|
|
958
|
+
step?: number;
|
|
959
|
+
/** Size variant */
|
|
960
|
+
size?: 'sm' | 'md' | 'lg';
|
|
961
|
+
/** Error state */
|
|
962
|
+
error?: boolean;
|
|
963
|
+
/** Prefix text (e.g., "$") */
|
|
964
|
+
prefix?: string;
|
|
965
|
+
/** Suffix text (e.g., "mg") */
|
|
966
|
+
suffix?: string;
|
|
967
|
+
}
|
|
968
|
+
/**
|
|
969
|
+
* NumberField — numeric input with increment/decrement buttons.
|
|
970
|
+
*
|
|
971
|
+
* Accessibility:
|
|
972
|
+
* - Uses native input[type="number"] for spinbutton role
|
|
973
|
+
* - Increment/decrement buttons have aria-labels
|
|
974
|
+
* - Buttons are hidden from tab order (input handles keyboard)
|
|
975
|
+
* - min/max constraints are communicated to AT
|
|
976
|
+
*/
|
|
977
|
+
declare const NumberField: react.ForwardRefExoticComponent<NumberFieldProps & react.RefAttributes<HTMLInputElement>>;
|
|
978
|
+
|
|
979
|
+
interface CheckboxGroupOption {
|
|
980
|
+
value: string;
|
|
981
|
+
label: string;
|
|
982
|
+
disabled?: boolean;
|
|
983
|
+
}
|
|
984
|
+
interface CheckboxGroupProps {
|
|
985
|
+
/** Group label rendered as fieldset legend */
|
|
986
|
+
label: string;
|
|
987
|
+
/** Shared name attribute for all checkboxes */
|
|
988
|
+
name: string;
|
|
989
|
+
/** Array of checkbox options */
|
|
990
|
+
options: CheckboxGroupOption[];
|
|
991
|
+
/** Currently selected values */
|
|
992
|
+
value?: string[];
|
|
993
|
+
/** Change handler — receives updated array of selected values */
|
|
994
|
+
onChange?: (value: string[]) => void;
|
|
995
|
+
/** Error message */
|
|
996
|
+
error?: string;
|
|
997
|
+
/** Layout direction */
|
|
998
|
+
orientation?: 'vertical' | 'horizontal';
|
|
999
|
+
/** Disabled state for all checkboxes */
|
|
1000
|
+
disabled?: boolean;
|
|
1001
|
+
/** Additional CSS class */
|
|
1002
|
+
className?: string;
|
|
1003
|
+
}
|
|
1004
|
+
/**
|
|
1005
|
+
* CheckboxGroup — group of checkboxes with fieldset/legend for accessibility.
|
|
1006
|
+
*
|
|
1007
|
+
* Accessibility:
|
|
1008
|
+
* - Uses <fieldset> and <legend> for semantic grouping
|
|
1009
|
+
* - Error message linked via role="alert"
|
|
1010
|
+
* - Each checkbox is individually focusable
|
|
1011
|
+
*/
|
|
1012
|
+
declare function CheckboxGroup({ label, name, options, value, onChange, error, orientation, disabled, className, }: CheckboxGroupProps): react_jsx_runtime.JSX.Element;
|
|
1013
|
+
|
|
1014
|
+
interface RadioGroupOption {
|
|
1015
|
+
value: string;
|
|
1016
|
+
label: string;
|
|
1017
|
+
disabled?: boolean;
|
|
1018
|
+
}
|
|
1019
|
+
interface RadioGroupProps {
|
|
1020
|
+
/** Group label rendered as fieldset legend */
|
|
1021
|
+
label: string;
|
|
1022
|
+
/** Shared name attribute for all radios */
|
|
1023
|
+
name: string;
|
|
1024
|
+
/** Array of radio options */
|
|
1025
|
+
options: RadioGroupOption[];
|
|
1026
|
+
/** Currently selected value */
|
|
1027
|
+
value?: string;
|
|
1028
|
+
/** Change handler — receives the selected value */
|
|
1029
|
+
onChange?: (value: string) => void;
|
|
1030
|
+
/** Error message */
|
|
1031
|
+
error?: string;
|
|
1032
|
+
/** Layout direction */
|
|
1033
|
+
orientation?: 'vertical' | 'horizontal';
|
|
1034
|
+
/** Disabled state for all radios */
|
|
1035
|
+
disabled?: boolean;
|
|
1036
|
+
/** Additional CSS class */
|
|
1037
|
+
className?: string;
|
|
1038
|
+
}
|
|
1039
|
+
/**
|
|
1040
|
+
* RadioGroup — group of radio buttons with fieldset/legend for accessibility.
|
|
1041
|
+
*
|
|
1042
|
+
* Accessibility:
|
|
1043
|
+
* - Uses <fieldset> and <legend> for semantic grouping
|
|
1044
|
+
* - Arrow keys navigate between radios within the group
|
|
1045
|
+
* - Error message rendered with role="alert"
|
|
1046
|
+
*/
|
|
1047
|
+
declare function RadioGroup({ label, name, options, value, onChange, error, orientation, disabled, className, }: RadioGroupProps): react_jsx_runtime.JSX.Element;
|
|
1048
|
+
|
|
1049
|
+
interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'onChange' | 'value'> {
|
|
1050
|
+
/** Current value */
|
|
1051
|
+
value?: number;
|
|
1052
|
+
/** Change handler */
|
|
1053
|
+
onChange?: (value: number) => void;
|
|
1054
|
+
/** Minimum value */
|
|
1055
|
+
min?: number;
|
|
1056
|
+
/** Maximum value */
|
|
1057
|
+
max?: number;
|
|
1058
|
+
/** Step increment */
|
|
1059
|
+
step?: number;
|
|
1060
|
+
/** Disabled state */
|
|
1061
|
+
disabled?: boolean;
|
|
1062
|
+
/** Size variant */
|
|
1063
|
+
size?: 'sm' | 'md';
|
|
1064
|
+
/** Accessible label text */
|
|
1065
|
+
label?: string;
|
|
1066
|
+
/** Show current value next to the slider */
|
|
1067
|
+
showValue?: boolean;
|
|
1068
|
+
/** Additional CSS class */
|
|
1069
|
+
className?: string;
|
|
1070
|
+
}
|
|
1071
|
+
/**
|
|
1072
|
+
* Slider — range input with custom styling.
|
|
1073
|
+
*
|
|
1074
|
+
* Accessibility:
|
|
1075
|
+
* - Uses native input[type="range"] for full keyboard and AT support
|
|
1076
|
+
* - Label linked via htmlFor/id
|
|
1077
|
+
* - aria-valuemin, aria-valuemax, aria-valuenow communicated natively
|
|
1078
|
+
* - showValue provides visual readout of current value
|
|
1079
|
+
*/
|
|
1080
|
+
declare const Slider: react.ForwardRefExoticComponent<SliderProps & react.RefAttributes<HTMLInputElement>>;
|
|
1081
|
+
|
|
1082
|
+
interface FileUploadProps {
|
|
1083
|
+
/** Accepted file types (e.g., ".pdf,.jpg,image/*") */
|
|
1084
|
+
accept?: string;
|
|
1085
|
+
/** Allow multiple files */
|
|
1086
|
+
multiple?: boolean;
|
|
1087
|
+
/** Max file size in bytes */
|
|
1088
|
+
maxSize?: number;
|
|
1089
|
+
/** Callback when files are selected or dropped */
|
|
1090
|
+
onFilesSelected?: (files: File[]) => void;
|
|
1091
|
+
/** Disabled state */
|
|
1092
|
+
disabled?: boolean;
|
|
1093
|
+
/** Error message */
|
|
1094
|
+
error?: string;
|
|
1095
|
+
/** Additional CSS class */
|
|
1096
|
+
className?: string;
|
|
1097
|
+
}
|
|
1098
|
+
/**
|
|
1099
|
+
* FileUpload — dropzone for file upload with click and drag support.
|
|
1100
|
+
*
|
|
1101
|
+
* Accessibility:
|
|
1102
|
+
* - Keyboard accessible via Enter/Space to open file dialog
|
|
1103
|
+
* - Uses role="button" on the dropzone
|
|
1104
|
+
* - aria-describedby links to instructions
|
|
1105
|
+
* - File list announced after selection
|
|
1106
|
+
*/
|
|
1107
|
+
declare function FileUpload({ accept, multiple, maxSize, onFilesSelected, disabled, error, className, }: FileUploadProps): react_jsx_runtime.JSX.Element;
|
|
1108
|
+
|
|
1109
|
+
interface OTPInputProps {
|
|
1110
|
+
/** Number of OTP digits */
|
|
1111
|
+
length?: number;
|
|
1112
|
+
/** Current value string */
|
|
1113
|
+
value?: string;
|
|
1114
|
+
/** Change handler — receives the full OTP string */
|
|
1115
|
+
onChange?: (value: string) => void;
|
|
1116
|
+
/** Error state */
|
|
1117
|
+
error?: boolean;
|
|
1118
|
+
/** Disabled state */
|
|
1119
|
+
disabled?: boolean;
|
|
1120
|
+
/** Auto-focus first input on mount */
|
|
1121
|
+
autoFocus?: boolean;
|
|
1122
|
+
/** Additional CSS class */
|
|
1123
|
+
className?: string;
|
|
1124
|
+
}
|
|
1125
|
+
/**
|
|
1126
|
+
* OTPInput — code/OTP input with separate boxes that auto-advance.
|
|
1127
|
+
*
|
|
1128
|
+
* Accessibility:
|
|
1129
|
+
* - Each digit input has aria-label describing its position
|
|
1130
|
+
* - Supports keyboard navigation (Backspace moves to previous)
|
|
1131
|
+
* - Paste support fills all boxes at once
|
|
1132
|
+
* - Error state communicated via aria-invalid
|
|
1133
|
+
*/
|
|
1134
|
+
declare function OTPInput({ length, value, onChange, error, disabled, autoFocus, className, }: OTPInputProps): react_jsx_runtime.JSX.Element;
|
|
1135
|
+
|
|
1136
|
+
interface DatePickerProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
|
|
1137
|
+
/** Size variant */
|
|
1138
|
+
size?: 'sm' | 'md' | 'lg';
|
|
1139
|
+
/** Error state */
|
|
1140
|
+
error?: boolean;
|
|
1141
|
+
/** Full width */
|
|
1142
|
+
fullWidth?: boolean;
|
|
1143
|
+
/** Minimum date (ISO format YYYY-MM-DD) */
|
|
1144
|
+
min?: string;
|
|
1145
|
+
/** Maximum date (ISO format YYYY-MM-DD) */
|
|
1146
|
+
max?: string;
|
|
1147
|
+
}
|
|
1148
|
+
/**
|
|
1149
|
+
* DatePicker — styled native date input for consistent appearance.
|
|
1150
|
+
*
|
|
1151
|
+
* Accessibility:
|
|
1152
|
+
* - Uses native input[type="date"] for built-in AT support
|
|
1153
|
+
* - Date picker popup provided by the browser
|
|
1154
|
+
* - aria-invalid signals error state
|
|
1155
|
+
* - Consistent sizing with other Aegis form controls
|
|
1156
|
+
*/
|
|
1157
|
+
declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<HTMLInputElement>>;
|
|
1158
|
+
|
|
1159
|
+
interface MultiSelectOption {
|
|
1160
|
+
value: string;
|
|
1161
|
+
label: string;
|
|
1162
|
+
}
|
|
1163
|
+
interface MultiSelectProps {
|
|
1164
|
+
/** Available options */
|
|
1165
|
+
options: MultiSelectOption[];
|
|
1166
|
+
/** Currently selected values */
|
|
1167
|
+
value?: string[];
|
|
1168
|
+
/** Change handler — receives updated array of selected values */
|
|
1169
|
+
onChange?: (value: string[]) => void;
|
|
1170
|
+
/** Placeholder text */
|
|
1171
|
+
placeholder?: string;
|
|
1172
|
+
/** Disabled state */
|
|
1173
|
+
disabled?: boolean;
|
|
1174
|
+
/** Error state */
|
|
1175
|
+
error?: boolean;
|
|
1176
|
+
/** Size variant */
|
|
1177
|
+
size?: 'sm' | 'md' | 'lg';
|
|
1178
|
+
/** Maximum number of tags visible before showing "+N more" */
|
|
1179
|
+
maxDisplayedTags?: number;
|
|
1180
|
+
/** Additional CSS class */
|
|
1181
|
+
className?: string;
|
|
1182
|
+
}
|
|
1183
|
+
/**
|
|
1184
|
+
* MultiSelect — multi-value select with tags and dropdown checkboxes.
|
|
1185
|
+
*
|
|
1186
|
+
* Accessibility:
|
|
1187
|
+
* - Uses role="combobox" with aria-expanded
|
|
1188
|
+
* - Dropdown uses role="listbox" with role="option" items
|
|
1189
|
+
* - Tags are removable via keyboard (Backspace removes last)
|
|
1190
|
+
* - Escape closes dropdown, focus remains on control
|
|
1191
|
+
*/
|
|
1192
|
+
declare function MultiSelect({ options, value, onChange, placeholder, disabled, error, size, maxDisplayedTags, className, }: MultiSelectProps): react_jsx_runtime.JSX.Element;
|
|
1193
|
+
|
|
1194
|
+
interface AutocompleteOption {
|
|
1195
|
+
value: string;
|
|
1196
|
+
label: string;
|
|
1197
|
+
}
|
|
1198
|
+
interface AutocompleteProps {
|
|
1199
|
+
/** Available options */
|
|
1200
|
+
options: AutocompleteOption[];
|
|
1201
|
+
/** Selected value */
|
|
1202
|
+
value?: string;
|
|
1203
|
+
/** Change handler — receives the selected value */
|
|
1204
|
+
onChange?: (value: string) => void;
|
|
1205
|
+
/** Callback when the text input changes */
|
|
1206
|
+
onInputChange?: (inputValue: string) => void;
|
|
1207
|
+
/** Placeholder text */
|
|
1208
|
+
placeholder?: string;
|
|
1209
|
+
/** Disabled state */
|
|
1210
|
+
disabled?: boolean;
|
|
1211
|
+
/** Error state */
|
|
1212
|
+
error?: boolean;
|
|
1213
|
+
/** Size variant */
|
|
1214
|
+
size?: 'sm' | 'md' | 'lg';
|
|
1215
|
+
/** Show a loading spinner in the dropdown */
|
|
1216
|
+
loading?: boolean;
|
|
1217
|
+
/** Text shown when no results match */
|
|
1218
|
+
noResultsText?: string;
|
|
1219
|
+
/** Additional CSS class */
|
|
1220
|
+
className?: string;
|
|
1221
|
+
}
|
|
1222
|
+
/**
|
|
1223
|
+
* Autocomplete — combobox input with filtered suggestions dropdown.
|
|
1224
|
+
*
|
|
1225
|
+
* Accessibility:
|
|
1226
|
+
* - role="combobox" on input with aria-expanded, aria-controls, aria-activedescendant
|
|
1227
|
+
* - Dropdown uses role="listbox" with role="option" items
|
|
1228
|
+
* - Arrow keys navigate options, Enter selects, Escape closes
|
|
1229
|
+
* - Full ARIA combobox pattern per WAI-ARIA 1.2
|
|
1230
|
+
*/
|
|
1231
|
+
declare function Autocomplete({ options, value, onChange, onInputChange, placeholder, disabled, error, size, loading, noResultsText, className, }: AutocompleteProps): react_jsx_runtime.JSX.Element;
|
|
1232
|
+
|
|
1233
|
+
interface StepperStep {
|
|
1234
|
+
label: string;
|
|
1235
|
+
description?: string;
|
|
1236
|
+
}
|
|
1237
|
+
interface StepperProps {
|
|
1238
|
+
/** Array of step definitions */
|
|
1239
|
+
steps: StepperStep[];
|
|
1240
|
+
/** Currently active step (0-indexed) */
|
|
1241
|
+
activeStep: number;
|
|
1242
|
+
/** Layout orientation */
|
|
1243
|
+
orientation?: 'horizontal' | 'vertical';
|
|
1244
|
+
/** Callback when a step is clicked */
|
|
1245
|
+
onStepClick?: (stepIndex: number) => void;
|
|
1246
|
+
/** Additional CSS class */
|
|
1247
|
+
className?: string;
|
|
1248
|
+
}
|
|
1249
|
+
/**
|
|
1250
|
+
* Stepper — multi-step form progress indicator.
|
|
1251
|
+
*
|
|
1252
|
+
* Accessibility:
|
|
1253
|
+
* - Uses role="navigation" with aria-label
|
|
1254
|
+
* - Each step is a button (when clickable) or div with aria-current="step"
|
|
1255
|
+
* - Completed steps indicated via visual checkmark and sr-only text
|
|
1256
|
+
* - Step descriptions provide additional context
|
|
1257
|
+
*/
|
|
1258
|
+
declare function Stepper({ steps, activeStep, orientation, onStepClick, className, }: StepperProps): react_jsx_runtime.JSX.Element;
|
|
1259
|
+
|
|
1260
|
+
interface AccordionItem {
|
|
1261
|
+
/** Unique identifier */
|
|
1262
|
+
id: string;
|
|
1263
|
+
/** Header title */
|
|
1264
|
+
title: string;
|
|
1265
|
+
/** Panel content */
|
|
1266
|
+
content: ReactNode;
|
|
1267
|
+
}
|
|
1268
|
+
interface AccordionProps {
|
|
1269
|
+
/** Accordion items */
|
|
1270
|
+
items: AccordionItem[];
|
|
1271
|
+
/** Allow multiple panels to be open simultaneously */
|
|
1272
|
+
allowMultiple?: boolean;
|
|
1273
|
+
/** IDs of panels open by default */
|
|
1274
|
+
defaultOpenIds?: string[];
|
|
1275
|
+
/** Additional className */
|
|
1276
|
+
className?: string;
|
|
1277
|
+
}
|
|
1278
|
+
/**
|
|
1279
|
+
* Accordion — expandable/collapsible content sections.
|
|
1280
|
+
*
|
|
1281
|
+
* Accessibility:
|
|
1282
|
+
* - Button triggers with aria-expanded and aria-controls
|
|
1283
|
+
* - Content panels have role="region" and aria-labelledby
|
|
1284
|
+
* - Animated expand/collapse with proper height transitions
|
|
1285
|
+
* - Supports single or multiple open panels
|
|
1286
|
+
*/
|
|
1287
|
+
declare function Accordion({ items, allowMultiple, defaultOpenIds, className }: AccordionProps): react_jsx_runtime.JSX.Element;
|
|
1288
|
+
|
|
1289
|
+
interface BreadcrumbItem {
|
|
1290
|
+
/** Display label */
|
|
1291
|
+
label: string;
|
|
1292
|
+
/** Optional URL for link items */
|
|
1293
|
+
href?: string;
|
|
1294
|
+
/** Optional click handler */
|
|
1295
|
+
onClick?: () => void;
|
|
1296
|
+
}
|
|
1297
|
+
interface BreadcrumbsProps {
|
|
1298
|
+
/** Breadcrumb path items */
|
|
1299
|
+
items: BreadcrumbItem[];
|
|
1300
|
+
/** Separator between items */
|
|
1301
|
+
separator?: ReactNode;
|
|
1302
|
+
/** Additional className */
|
|
1303
|
+
className?: string;
|
|
1304
|
+
}
|
|
1305
|
+
/**
|
|
1306
|
+
* Breadcrumbs — navigational aid showing the current location within a hierarchy.
|
|
1307
|
+
*
|
|
1308
|
+
* Accessibility:
|
|
1309
|
+
* - Wrapped in <nav> with aria-label="Breadcrumb"
|
|
1310
|
+
* - Uses semantic <ol>/<li> list structure
|
|
1311
|
+
* - Last item has aria-current="page" to indicate current location
|
|
1312
|
+
* - Separator is aria-hidden so screen readers skip it
|
|
1313
|
+
*/
|
|
1314
|
+
declare function Breadcrumbs({ items, separator, className }: BreadcrumbsProps): react_jsx_runtime.JSX.Element;
|
|
1315
|
+
|
|
1316
|
+
interface SideNavItem {
|
|
1317
|
+
/** Display label */
|
|
1318
|
+
label: string;
|
|
1319
|
+
/** Optional URL */
|
|
1320
|
+
href?: string;
|
|
1321
|
+
/** Optional click handler */
|
|
1322
|
+
onClick?: () => void;
|
|
1323
|
+
/** Optional icon element */
|
|
1324
|
+
icon?: ReactNode;
|
|
1325
|
+
/** Whether this item is the active/current page */
|
|
1326
|
+
active?: boolean;
|
|
1327
|
+
/** Nested child items */
|
|
1328
|
+
children?: SideNavItem[];
|
|
1329
|
+
}
|
|
1330
|
+
interface SideNavProps {
|
|
1331
|
+
/** Navigation items */
|
|
1332
|
+
items: SideNavItem[];
|
|
1333
|
+
/** Whether the sidebar is collapsed to icon-only mode */
|
|
1334
|
+
collapsed?: boolean;
|
|
1335
|
+
/** Callback when collapse state changes */
|
|
1336
|
+
onCollapse?: (collapsed: boolean) => void;
|
|
1337
|
+
/** Additional className */
|
|
1338
|
+
className?: string;
|
|
1339
|
+
}
|
|
1340
|
+
/**
|
|
1341
|
+
* SideNav — vertical sidebar navigation for dashboard layouts.
|
|
1342
|
+
*
|
|
1343
|
+
* Accessibility:
|
|
1344
|
+
* - Semantic <nav> with <ul>/<li> structure
|
|
1345
|
+
* - aria-current="page" on the active item
|
|
1346
|
+
* - Collapse toggle button with aria-label
|
|
1347
|
+
* - Title attribute on items when collapsed for tooltip-style labels
|
|
1348
|
+
* - Nested items rendered as sub-lists for proper hierarchy
|
|
1349
|
+
*/
|
|
1350
|
+
declare function SideNav({ items, collapsed, onCollapse, className }: SideNavProps): react_jsx_runtime.JSX.Element;
|
|
1351
|
+
|
|
1352
|
+
interface TopNavProps extends HTMLAttributes<HTMLElement> {
|
|
1353
|
+
/** Logo or brand element */
|
|
1354
|
+
logo?: ReactNode;
|
|
1355
|
+
/** Navigation items (center/left area) */
|
|
1356
|
+
children?: ReactNode;
|
|
1357
|
+
/** Action elements on the right (profile, notifications, etc.) */
|
|
1358
|
+
actions?: ReactNode;
|
|
1359
|
+
}
|
|
1360
|
+
/**
|
|
1361
|
+
* TopNav — horizontal top navigation bar for application headers.
|
|
1362
|
+
*
|
|
1363
|
+
* Accessibility:
|
|
1364
|
+
* - Uses <header> with <nav> for semantic structure
|
|
1365
|
+
* - Navigation items should be provided as links or buttons
|
|
1366
|
+
* - Fixed height with clean horizontal layout
|
|
1367
|
+
*/
|
|
1368
|
+
declare function TopNav({ logo, children, actions, className, ...props }: TopNavProps): react_jsx_runtime.JSX.Element;
|
|
1369
|
+
|
|
1370
|
+
interface StatCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
1371
|
+
/** Metric label */
|
|
1372
|
+
label: string;
|
|
1373
|
+
/** Metric value */
|
|
1374
|
+
value: string | number;
|
|
1375
|
+
/** Percentage change */
|
|
1376
|
+
change?: number;
|
|
1377
|
+
/** Label for the change (e.g. "vs last month") */
|
|
1378
|
+
changeLabel?: string;
|
|
1379
|
+
/** Trend direction */
|
|
1380
|
+
trend?: 'up' | 'down' | 'neutral';
|
|
1381
|
+
/** Optional icon */
|
|
1382
|
+
icon?: ReactNode;
|
|
1383
|
+
}
|
|
1384
|
+
/**
|
|
1385
|
+
* StatCard — displays a key metric with optional trend indicator.
|
|
1386
|
+
*
|
|
1387
|
+
* Accessibility:
|
|
1388
|
+
* - Trend icons are aria-hidden; meaning conveyed via visible text
|
|
1389
|
+
* - Uses semantic structure with clear label/value relationship
|
|
1390
|
+
* - sr-only text describes trend for screen readers
|
|
1391
|
+
*/
|
|
1392
|
+
declare function StatCard({ label, value, change, changeLabel, trend, icon, className, ...props }: StatCardProps): react_jsx_runtime.JSX.Element;
|
|
1393
|
+
|
|
1394
|
+
interface ListProps extends HTMLAttributes<HTMLUListElement> {
|
|
1395
|
+
/** Show dividers between items */
|
|
1396
|
+
divided?: boolean;
|
|
1397
|
+
/** Padding inside list items */
|
|
1398
|
+
padding?: 'none' | 'sm' | 'md';
|
|
1399
|
+
}
|
|
1400
|
+
/**
|
|
1401
|
+
* List — composable list container for displaying groups of items.
|
|
1402
|
+
*
|
|
1403
|
+
* Accessibility:
|
|
1404
|
+
* - Uses semantic <ul>/<li> structure
|
|
1405
|
+
* - Interactive items rendered as buttons for keyboard access
|
|
1406
|
+
* - Disabled items use aria-disabled
|
|
1407
|
+
* - Selected items use aria-selected
|
|
1408
|
+
*/
|
|
1409
|
+
declare const List: react.ForwardRefExoticComponent<ListProps & react.RefAttributes<HTMLUListElement>>;
|
|
1410
|
+
interface ListItemProps extends Omit<HTMLAttributes<HTMLLIElement>, 'prefix'> {
|
|
1411
|
+
/** Click handler — makes the item interactive */
|
|
1412
|
+
onClick?: () => void;
|
|
1413
|
+
/** Whether this item is selected */
|
|
1414
|
+
selected?: boolean;
|
|
1415
|
+
/** Whether this item is disabled */
|
|
1416
|
+
disabled?: boolean;
|
|
1417
|
+
/** Leading element (icon, avatar, etc.) */
|
|
1418
|
+
prefix?: ReactNode;
|
|
1419
|
+
/** Trailing element (badge, action button, etc.) */
|
|
1420
|
+
suffix?: ReactNode;
|
|
1421
|
+
/** Secondary description text */
|
|
1422
|
+
description?: string;
|
|
1423
|
+
}
|
|
1424
|
+
declare const ListItem: react.ForwardRefExoticComponent<ListItemProps & react.RefAttributes<HTMLLIElement>>;
|
|
1425
|
+
|
|
1426
|
+
interface CollapsiblePanelProps {
|
|
1427
|
+
/** Panel title */
|
|
1428
|
+
title: string;
|
|
1429
|
+
/** Whether panel is open by default (uncontrolled) */
|
|
1430
|
+
defaultOpen?: boolean;
|
|
1431
|
+
/** Controlled open state */
|
|
1432
|
+
open?: boolean;
|
|
1433
|
+
/** Callback when open state changes */
|
|
1434
|
+
onToggle?: (open: boolean) => void;
|
|
1435
|
+
/** Panel content */
|
|
1436
|
+
children: ReactNode;
|
|
1437
|
+
/** Additional className */
|
|
1438
|
+
className?: string;
|
|
1439
|
+
}
|
|
1440
|
+
/**
|
|
1441
|
+
* CollapsiblePanel — a single collapsible section with animated expand/collapse.
|
|
1442
|
+
*
|
|
1443
|
+
* Accessibility:
|
|
1444
|
+
* - Button trigger with aria-expanded
|
|
1445
|
+
* - Content region with aria-labelledby linking to the trigger
|
|
1446
|
+
* - Chevron icon rotates on expand/collapse
|
|
1447
|
+
* - Supports both controlled and uncontrolled modes
|
|
1448
|
+
*/
|
|
1449
|
+
declare function CollapsiblePanel({ title, defaultOpen, open: controlledOpen, onToggle, children, className, }: CollapsiblePanelProps): react_jsx_runtime.JSX.Element;
|
|
1450
|
+
|
|
1451
|
+
type PatientStatus = 'active' | 'inactive' | 'critical';
|
|
1452
|
+
interface PatientCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
1453
|
+
/** Patient full name */
|
|
1454
|
+
name: string;
|
|
1455
|
+
/** Medical record number */
|
|
1456
|
+
mrn: string;
|
|
1457
|
+
/** Date of birth */
|
|
1458
|
+
dob: string;
|
|
1459
|
+
/** Patient age */
|
|
1460
|
+
age: number;
|
|
1461
|
+
/** Patient gender */
|
|
1462
|
+
gender: string;
|
|
1463
|
+
/** Avatar element */
|
|
1464
|
+
avatar?: ReactNode;
|
|
1465
|
+
/** Patient status */
|
|
1466
|
+
status?: PatientStatus;
|
|
1467
|
+
/** Known allergies */
|
|
1468
|
+
allergies?: string[];
|
|
1469
|
+
/** Primary physician name */
|
|
1470
|
+
primaryPhysician?: string;
|
|
1471
|
+
}
|
|
1472
|
+
/**
|
|
1473
|
+
* PatientCard — summary card displaying patient demographics and key info.
|
|
1474
|
+
*
|
|
1475
|
+
* Accessibility:
|
|
1476
|
+
* - Uses role="region" with aria-label for screen readers
|
|
1477
|
+
* - Status communicated via text, not color alone
|
|
1478
|
+
* - Allergy list uses semantic <ul> element
|
|
1479
|
+
*/
|
|
1480
|
+
declare function PatientCard({ name, mrn, dob, age, gender, avatar, status, allergies, primaryPhysician, className, ...props }: PatientCardProps): react_jsx_runtime.JSX.Element;
|
|
1481
|
+
|
|
1482
|
+
type AppointmentStatus = 'scheduled' | 'checked-in' | 'in-progress' | 'completed' | 'cancelled' | 'no-show';
|
|
1483
|
+
interface AppointmentCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
1484
|
+
/** Patient name */
|
|
1485
|
+
patientName: string;
|
|
1486
|
+
/** Appointment date */
|
|
1487
|
+
date: string;
|
|
1488
|
+
/** Appointment time */
|
|
1489
|
+
time: string;
|
|
1490
|
+
/** Appointment type (e.g., "Follow-up", "New Patient") */
|
|
1491
|
+
type: string;
|
|
1492
|
+
/** Provider / physician name */
|
|
1493
|
+
provider: string;
|
|
1494
|
+
/** Current appointment status */
|
|
1495
|
+
status: AppointmentStatus;
|
|
1496
|
+
/** Location or room */
|
|
1497
|
+
location?: string;
|
|
1498
|
+
}
|
|
1499
|
+
/**
|
|
1500
|
+
* AppointmentCard — displays appointment summary with status indicator.
|
|
1501
|
+
*
|
|
1502
|
+
* Accessibility:
|
|
1503
|
+
* - Uses role="region" with aria-label for context
|
|
1504
|
+
* - Status conveyed via text label, not color alone
|
|
1505
|
+
*/
|
|
1506
|
+
declare function AppointmentCard({ patientName, date, time, type, provider, status, location, className, ...props }: AppointmentCardProps): react_jsx_runtime.JSX.Element;
|
|
1507
|
+
|
|
1508
|
+
type TimelineItemVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
|
|
1509
|
+
interface TimelineItem {
|
|
1510
|
+
/** Unique identifier */
|
|
1511
|
+
id: string;
|
|
1512
|
+
/** Event title */
|
|
1513
|
+
title: string;
|
|
1514
|
+
/** Optional description */
|
|
1515
|
+
description?: string;
|
|
1516
|
+
/** Timestamp display string */
|
|
1517
|
+
timestamp: string;
|
|
1518
|
+
/** Optional icon to replace the default dot */
|
|
1519
|
+
icon?: ReactNode;
|
|
1520
|
+
/** Visual variant */
|
|
1521
|
+
variant?: TimelineItemVariant;
|
|
1522
|
+
}
|
|
1523
|
+
interface TimelineProps extends HTMLAttributes<HTMLOListElement> {
|
|
1524
|
+
/** Timeline items in chronological order */
|
|
1525
|
+
items: TimelineItem[];
|
|
1526
|
+
}
|
|
1527
|
+
/**
|
|
1528
|
+
* Timeline — vertical timeline for displaying sequential events.
|
|
1529
|
+
*
|
|
1530
|
+
* Accessibility:
|
|
1531
|
+
* - Uses semantic <ol> for ordered event sequence
|
|
1532
|
+
* - Each event is an <li> for proper list semantics
|
|
1533
|
+
* - Icons are decorative (aria-hidden)
|
|
1534
|
+
*/
|
|
1535
|
+
declare function Timeline({ items, className, ...props }: TimelineProps): react_jsx_runtime.JSX.Element;
|
|
1536
|
+
|
|
1537
|
+
type ClinicalSeverity = 'critical' | 'high' | 'moderate' | 'low';
|
|
1538
|
+
interface ClinicalBannerProps extends HTMLAttributes<HTMLDivElement> {
|
|
1539
|
+
/** Severity level */
|
|
1540
|
+
severity: ClinicalSeverity;
|
|
1541
|
+
/** Banner title */
|
|
1542
|
+
title: string;
|
|
1543
|
+
/** Dismissible banner */
|
|
1544
|
+
dismissible?: boolean;
|
|
1545
|
+
/** Called when dismiss button is clicked */
|
|
1546
|
+
onDismiss?: () => void;
|
|
1547
|
+
/** Detail content */
|
|
1548
|
+
children?: ReactNode;
|
|
1549
|
+
}
|
|
1550
|
+
/**
|
|
1551
|
+
* ClinicalBanner — prominent banner for critical clinical alerts.
|
|
1552
|
+
*
|
|
1553
|
+
* Accessibility:
|
|
1554
|
+
* - Uses role="alert" for immediate screen reader announcement
|
|
1555
|
+
* - Icon + color + text ensures meaning is communicated multiple ways
|
|
1556
|
+
* - Dismiss button has accessible label
|
|
1557
|
+
*/
|
|
1558
|
+
declare function ClinicalBanner({ severity, title, dismissible, onDismiss, children, className, ...props }: ClinicalBannerProps): react_jsx_runtime.JSX.Element;
|
|
1559
|
+
|
|
1560
|
+
type MedicationStatus = 'active' | 'discontinued' | 'hold' | 'prn';
|
|
1561
|
+
interface MedicationRowProps extends HTMLAttributes<HTMLDivElement> {
|
|
1562
|
+
/** Medication name */
|
|
1563
|
+
name: string;
|
|
1564
|
+
/** Dosage (e.g., "10mg") */
|
|
1565
|
+
dosage: string;
|
|
1566
|
+
/** Frequency (e.g., "Once daily") */
|
|
1567
|
+
frequency: string;
|
|
1568
|
+
/** Route of administration (e.g., "Oral") */
|
|
1569
|
+
route: string;
|
|
1570
|
+
/** Prescribing physician */
|
|
1571
|
+
prescribedBy: string;
|
|
1572
|
+
/** Start date */
|
|
1573
|
+
startDate: string;
|
|
1574
|
+
/** End date */
|
|
1575
|
+
endDate?: string;
|
|
1576
|
+
/** Medication status */
|
|
1577
|
+
status: MedicationStatus;
|
|
1578
|
+
}
|
|
1579
|
+
/**
|
|
1580
|
+
* MedicationRow — compact horizontal display of medication details.
|
|
1581
|
+
*
|
|
1582
|
+
* Accessibility:
|
|
1583
|
+
* - Uses role="row" semantics through div structure
|
|
1584
|
+
* - Status communicated via text label, not color alone
|
|
1585
|
+
* - All information is available as text content for screen readers
|
|
1586
|
+
*/
|
|
1587
|
+
declare function MedicationRow({ name, dosage, frequency, route, prescribedBy, startDate, endDate, status, className, ...props }: MedicationRowProps): react_jsx_runtime.JSX.Element;
|
|
1588
|
+
|
|
1589
|
+
type LabResultStatus = 'normal' | 'abnormal-high' | 'abnormal-low' | 'critical';
|
|
1590
|
+
interface LabResultRowProps extends HTMLAttributes<HTMLDivElement> {
|
|
1591
|
+
/** Test name (e.g., "White Blood Cells") */
|
|
1592
|
+
testName: string;
|
|
1593
|
+
/** Result value */
|
|
1594
|
+
value: string | number;
|
|
1595
|
+
/** Unit of measurement (e.g., "K/uL") */
|
|
1596
|
+
unit: string;
|
|
1597
|
+
/** Reference range (e.g., "4.5-11.0") */
|
|
1598
|
+
referenceRange: string;
|
|
1599
|
+
/** Result status */
|
|
1600
|
+
status: LabResultStatus;
|
|
1601
|
+
/** Date collected */
|
|
1602
|
+
collectedDate: string;
|
|
1603
|
+
}
|
|
1604
|
+
/**
|
|
1605
|
+
* LabResultRow — displays a single lab test result with visual status indicator.
|
|
1606
|
+
*
|
|
1607
|
+
* Accessibility:
|
|
1608
|
+
* - Status conveyed via text label ("High", "Low", "Critical"), not color alone
|
|
1609
|
+
* - Arrow indicators are supplementary (aria-hidden)
|
|
1610
|
+
* - Screen readers receive full context through text content
|
|
1611
|
+
*/
|
|
1612
|
+
declare function LabResultRow({ testName, value, unit, referenceRange, status, collectedDate, className, ...props }: LabResultRowProps): react_jsx_runtime.JSX.Element;
|
|
1613
|
+
|
|
1614
|
+
type InsurancePlanType = 'PPO' | 'HMO' | 'EPO' | 'POS' | 'Medicare' | 'Medicaid' | 'Other';
|
|
1615
|
+
type InsuranceStatus = 'active' | 'inactive' | 'pending';
|
|
1616
|
+
interface InsuranceCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
1617
|
+
/** Plan name */
|
|
1618
|
+
planName: string;
|
|
1619
|
+
/** Member ID */
|
|
1620
|
+
memberId: string;
|
|
1621
|
+
/** Group number */
|
|
1622
|
+
groupNumber: string;
|
|
1623
|
+
/** Plan type */
|
|
1624
|
+
planType: InsurancePlanType;
|
|
1625
|
+
/** Coverage status */
|
|
1626
|
+
status: InsuranceStatus;
|
|
1627
|
+
/** Coverage effective date */
|
|
1628
|
+
effectiveDate: string;
|
|
1629
|
+
/** Coverage expiration date */
|
|
1630
|
+
expirationDate?: string;
|
|
1631
|
+
}
|
|
1632
|
+
/**
|
|
1633
|
+
* InsuranceCard — displays insurance plan summary information.
|
|
1634
|
+
*
|
|
1635
|
+
* Accessibility:
|
|
1636
|
+
* - Uses role="region" with aria-label for screen reader context
|
|
1637
|
+
* - Status communicated via text label, not color alone
|
|
1638
|
+
* - Structured layout for easy scanning
|
|
1639
|
+
*/
|
|
1640
|
+
declare function InsuranceCard({ planName, memberId, groupNumber, planType, status, effectiveDate, expirationDate, className, ...props }: InsuranceCardProps): react_jsx_runtime.JSX.Element;
|
|
1641
|
+
|
|
1642
|
+
type ToastStatus = 'info' | 'success' | 'warning' | 'error';
|
|
1643
|
+
interface ToastProps {
|
|
1644
|
+
/** Toast message */
|
|
1645
|
+
message: string;
|
|
1646
|
+
/** Optional title */
|
|
1647
|
+
title?: string;
|
|
1648
|
+
/** Status variant */
|
|
1649
|
+
status?: ToastStatus;
|
|
1650
|
+
/** Optional action element */
|
|
1651
|
+
action?: ReactNode;
|
|
1652
|
+
/** Called when toast is closed */
|
|
1653
|
+
onClose: () => void;
|
|
1654
|
+
/** Auto-dismiss duration in ms (0 to disable) */
|
|
1655
|
+
duration?: number;
|
|
1656
|
+
/** Additional class name */
|
|
1657
|
+
className?: string;
|
|
1658
|
+
}
|
|
1659
|
+
/**
|
|
1660
|
+
* Toast — transient notification that auto-dismisses.
|
|
1661
|
+
*
|
|
1662
|
+
* Accessibility:
|
|
1663
|
+
* - Uses role="alert" for error/warning (assertive), role="status" for info/success (polite)
|
|
1664
|
+
* - Close button has accessible label
|
|
1665
|
+
* - Auto-dismiss can be disabled for important messages
|
|
1666
|
+
* - Icon + color + text ensures meaning is communicated multiple ways
|
|
1667
|
+
*/
|
|
1668
|
+
declare function Toast({ message, title, status, action, onClose, duration, className, }: ToastProps): react_jsx_runtime.JSX.Element;
|
|
1669
|
+
|
|
1670
|
+
interface ConfirmDialogProps {
|
|
1671
|
+
/** Whether the dialog is open */
|
|
1672
|
+
open: boolean;
|
|
1673
|
+
/** Called when the user confirms */
|
|
1674
|
+
onConfirm: () => void;
|
|
1675
|
+
/** Called when the user cancels */
|
|
1676
|
+
onCancel: () => void;
|
|
1677
|
+
/** Dialog title */
|
|
1678
|
+
title: string;
|
|
1679
|
+
/** Message or content */
|
|
1680
|
+
message: string | ReactNode;
|
|
1681
|
+
/** Confirm button label */
|
|
1682
|
+
confirmLabel?: string;
|
|
1683
|
+
/** Cancel button label */
|
|
1684
|
+
cancelLabel?: string;
|
|
1685
|
+
/** Visual variant */
|
|
1686
|
+
variant?: 'default' | 'danger';
|
|
1687
|
+
/** Show loading state on confirm button */
|
|
1688
|
+
loading?: boolean;
|
|
1689
|
+
/** Additional class name */
|
|
1690
|
+
className?: string;
|
|
1691
|
+
}
|
|
1692
|
+
/**
|
|
1693
|
+
* ConfirmDialog — confirmation dialog built on native <dialog>.
|
|
1694
|
+
*
|
|
1695
|
+
* Accessibility:
|
|
1696
|
+
* - Uses native <dialog> for built-in focus trapping and Escape handling
|
|
1697
|
+
* - aria-labelledby links to the title
|
|
1698
|
+
* - aria-describedby links to the message
|
|
1699
|
+
* - Focus moves to cancel button on open (safe default)
|
|
1700
|
+
* - Escape key closes the dialog
|
|
1701
|
+
* - Backdrop click cancels
|
|
1702
|
+
*/
|
|
1703
|
+
declare function ConfirmDialog({ open, onConfirm, onCancel, title, message, confirmLabel, cancelLabel, variant, loading, className, }: ConfirmDialogProps): react_jsx_runtime.JSX.Element;
|
|
1704
|
+
|
|
1705
|
+
type BannerStatus = 'info' | 'success' | 'warning' | 'error';
|
|
1706
|
+
interface BannerProps extends HTMLAttributes<HTMLDivElement> {
|
|
1707
|
+
/** Status variant */
|
|
1708
|
+
status?: BannerStatus;
|
|
1709
|
+
/** Whether the banner can be dismissed */
|
|
1710
|
+
dismissible?: boolean;
|
|
1711
|
+
/** Called when dismiss button is clicked */
|
|
1712
|
+
onDismiss?: () => void;
|
|
1713
|
+
/** Optional action element */
|
|
1714
|
+
action?: ReactNode;
|
|
1715
|
+
/** Banner content */
|
|
1716
|
+
children: ReactNode;
|
|
1717
|
+
}
|
|
1718
|
+
/**
|
|
1719
|
+
* Banner — full-width banner for page-level messages.
|
|
1720
|
+
*
|
|
1721
|
+
* Accessibility:
|
|
1722
|
+
* - Uses role="alert" for error/warning (assertive announcement)
|
|
1723
|
+
* - Uses role="status" for info/success (polite announcement)
|
|
1724
|
+
* - Icon + color + text ensures meaning is communicated multiple ways
|
|
1725
|
+
* - Dismiss button has accessible label
|
|
1726
|
+
*/
|
|
1727
|
+
declare function Banner({ status, dismissible, onDismiss, action, children, className, ...props }: BannerProps): react_jsx_runtime.JSX.Element;
|
|
1728
|
+
|
|
1729
|
+
/** Merge CSS module class names, filtering out falsy values */
|
|
1730
|
+
declare function cn(...classes: (string | false | null | undefined)[]): string;
|
|
1731
|
+
|
|
1732
|
+
type Size = 'sm' | 'md' | 'lg';
|
|
1733
|
+
type Status = 'success' | 'warning' | 'error' | 'info';
|
|
1734
|
+
type Variant = 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
1735
|
+
|
|
1736
|
+
export { Accordion, type AccordionItem, type AccordionProps, Alert, type AlertProps, AppointmentCard, type AppointmentCardProps, type AppointmentStatus, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, type AvatarProps, Badge, type BadgeProps, Banner, type BannerProps, type BannerStatus, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonProps, Card, type CardProps, Checkbox, CheckboxGroup, type CheckboxGroupOption, type CheckboxGroupProps, type CheckboxProps, ClinicalBanner, type ClinicalBannerProps, type ClinicalSeverity, CollapsiblePanel, type CollapsiblePanelProps, ConfirmDialog, type ConfirmDialogProps, DataGrid, type DataGridColumn, type DataGridProps, DatePicker, type DatePickerProps, DescriptionList, type DescriptionListItem, type DescriptionListProps, Divider, type DividerProps, Drawer, type DrawerProps, EmptyState, type EmptyStateProps, FileUpload, type FileUploadProps, FormField, type FormFieldProps, HelperText, type HelperTextProps, IconButton, type IconButtonProps, Input, type InputProps, InsuranceCard, type InsuranceCardProps, type InsurancePlanType, type InsuranceStatus, LabResultRow, type LabResultRowProps, type LabResultStatus, Label, type LabelProps, List, ListItem, type ListItemProps, type ListProps, MedicationRow, type MedicationRowProps, type MedicationStatus, Modal, type ModalProps, MultiSelect, type MultiSelectOption, type MultiSelectProps, NumberField, type NumberFieldProps, OTPInput, type OTPInputProps, Pagination, type PaginationProps, PatientCard, type PatientCardProps, type PatientStatus, Popover, type PopoverProps, ProgressBar, type ProgressBarProps, Radio, RadioGroup, type RadioGroupOption, type RadioGroupProps, type RadioProps, SearchField, type SearchFieldProps, Select, type SelectProps, SideNav, type SideNavItem, type SideNavProps, type Size, Skeleton, type SkeletonProps, Slider, type SliderProps, type SortDirection, Spinner, type SpinnerProps, StatCard, type StatCardProps, type Status, StatusBadge, type StatusBadgeProps, type StatusBadgeStatus, Stepper, type StepperProps, type StepperStep, Switch, type SwitchProps, type Tab, Table, TableBody, TableCell, TableHead, TableHeaderCell, type TableProps, TableRow, Tabs, type TabsProps, Textarea, type TextareaProps, Timeline, type TimelineItem, type TimelineItemVariant, type TimelineProps, Toast, type ToastProps, type ToastStatus, Tooltip, type TooltipProps, TopNav, type TopNavProps, type Variant, accentTeal, border, borderStyle, borderWidth, brandPrimary, cn, container, controlSize, dataVis, duration, easing, focusRing, fontFamily, fontSize, fontWeight, grid, iconSize, lineHeight, modalSize, neutral, opacity, radius, semantic, shadow, sidebarDefault, space, surface, text, touchMin, tracking, zIndex };
|