@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/dist/index.mjs ADDED
@@ -0,0 +1,3677 @@
1
+ "use client";
2
+
3
+ // src/tokens/colors.ts
4
+ var brandPrimary = {
5
+ 50: "#EEF4FF",
6
+ 100: "#DCE8FF",
7
+ 200: "#BED4FF",
8
+ 300: "#8FB7FF",
9
+ 400: "#5C92F2",
10
+ 500: "#2F6FE4",
11
+ 600: "#1F5CCD",
12
+ 700: "#1849A6",
13
+ 800: "#153B82",
14
+ 900: "#112E63"
15
+ };
16
+ var accentTeal = {
17
+ 50: "#EDF9F8",
18
+ 100: "#D4F1EE",
19
+ 200: "#A9E0D9",
20
+ 300: "#77C9BE",
21
+ 400: "#48AE9F",
22
+ 500: "#2E8F83",
23
+ 600: "#237368",
24
+ 700: "#1D5D54"
25
+ };
26
+ var neutral = {
27
+ 0: "#FFFFFF",
28
+ 25: "#FCFDFE",
29
+ 50: "#F6F8FA",
30
+ 100: "#EDF1F5",
31
+ 200: "#DCE3EA",
32
+ 300: "#C1CBD6",
33
+ 400: "#93A1B2",
34
+ 500: "#66768A",
35
+ 600: "#4B5B6C",
36
+ 700: "#334155",
37
+ 800: "#223042",
38
+ 900: "#16202B"
39
+ };
40
+ var semantic = {
41
+ success: { 50: "#EEF8F1", 500: "#2F8F57", 700: "#1F6B3D" },
42
+ warning: { 50: "#FFF6E8", 500: "#B86A00", 700: "#8D4F00" },
43
+ error: { 50: "#FFF0F0", 500: "#C23A3A", 700: "#8F2626" },
44
+ info: { 50: "#EEF6FF", 500: "#2563B8", 700: "#1B4C8E" }
45
+ };
46
+ var text = {
47
+ primary: "#16202B",
48
+ secondary: "#4B5B6C",
49
+ muted: "#66768A",
50
+ inverse: "#FFFFFF"
51
+ };
52
+ var surface = {
53
+ canvas: "#FCFDFE",
54
+ default: "#FFFFFF",
55
+ subtle: "#F6F8FA",
56
+ raised: "#FFFFFF"
57
+ };
58
+ var border = {
59
+ default: "#DCE3EA",
60
+ strong: "#C1CBD6",
61
+ inverse: "#334155"
62
+ };
63
+ var dataVis = {
64
+ 1: "#2F6FE4",
65
+ 2: "#2E8F83",
66
+ 3: "#7B61C9",
67
+ 4: "#B86A00",
68
+ 5: "#C23A3A",
69
+ gridline: "#DCE3EA",
70
+ axis: "#66768A"
71
+ };
72
+
73
+ // src/tokens/typography.ts
74
+ var fontFamily = {
75
+ sans: '"Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
76
+ mono: '"IBM Plex Mono", "SFMono-Regular", Consolas, monospace'
77
+ };
78
+ var fontWeight = {
79
+ regular: 400,
80
+ medium: 500,
81
+ semibold: 600,
82
+ bold: 700
83
+ };
84
+ var fontSize = {
85
+ "display-lg": "40px",
86
+ "display-md": "32px",
87
+ "heading-xl": "28px",
88
+ "heading-lg": "24px",
89
+ "heading-md": "20px",
90
+ "heading-sm": "18px",
91
+ "body-lg": "16px",
92
+ "body-md": "14px",
93
+ "body-sm": "13px",
94
+ "label-lg": "14px",
95
+ "label-md": "13px",
96
+ caption: "12px",
97
+ data: "14px",
98
+ code: "13px"
99
+ };
100
+ var lineHeight = {
101
+ "display-lg": "48px",
102
+ "display-md": "40px",
103
+ "heading-xl": "36px",
104
+ "heading-lg": "32px",
105
+ "heading-md": "28px",
106
+ "heading-sm": "26px",
107
+ "body-lg": "24px",
108
+ "body-md": "22px",
109
+ "body-sm": "20px",
110
+ "label-lg": "20px",
111
+ "label-md": "18px",
112
+ caption: "16px",
113
+ data: "20px",
114
+ code: "18px"
115
+ };
116
+ var tracking = {
117
+ tight: "-0.02em",
118
+ normal: "0em",
119
+ wide: "0.01em"
120
+ };
121
+
122
+ // src/tokens/spacing.ts
123
+ var space = {
124
+ 0: "0",
125
+ 1: "4px",
126
+ 2: "8px",
127
+ 3: "12px",
128
+ 4: "16px",
129
+ 5: "20px",
130
+ 6: "24px",
131
+ 8: "32px",
132
+ 10: "40px",
133
+ 12: "48px",
134
+ 16: "64px",
135
+ 20: "80px"
136
+ };
137
+
138
+ // src/tokens/sizing.ts
139
+ var controlSize = {
140
+ sm: "32px",
141
+ md: "40px",
142
+ lg: "48px"
143
+ };
144
+ var iconSize = {
145
+ xs: "12px",
146
+ sm: "16px",
147
+ md: "20px",
148
+ lg: "24px"
149
+ };
150
+ var touchMin = "44px";
151
+ var modalSize = {
152
+ sm: "400px",
153
+ md: "560px",
154
+ lg: "720px",
155
+ xl: "880px"
156
+ };
157
+ var sidebarDefault = "280px";
158
+
159
+ // src/tokens/radius.ts
160
+ var radius = {
161
+ none: "0",
162
+ sm: "6px",
163
+ md: "10px",
164
+ lg: "14px",
165
+ xl: "18px",
166
+ full: "9999px"
167
+ };
168
+
169
+ // src/tokens/borders.ts
170
+ var borderWidth = {
171
+ none: "0",
172
+ hairline: "1px",
173
+ medium: "2px",
174
+ strong: "3px"
175
+ };
176
+ var borderStyle = {
177
+ default: "solid"
178
+ };
179
+
180
+ // src/tokens/shadows.ts
181
+ var shadow = {
182
+ none: "none",
183
+ xs: "0 1px 2px rgba(22, 32, 43, 0.05)",
184
+ sm: "0 1px 3px rgba(22, 32, 43, 0.06), 0 2px 8px rgba(22, 32, 43, 0.04)",
185
+ md: "0 2px 4px rgba(22, 32, 43, 0.04), 0 8px 20px rgba(22, 32, 43, 0.08)",
186
+ lg: "0 4px 8px rgba(22, 32, 43, 0.04), 0 16px 40px rgba(22, 32, 43, 0.12)",
187
+ xl: "0 8px 16px rgba(22, 32, 43, 0.06), 0 24px 56px rgba(22, 32, 43, 0.16)",
188
+ focus: "0 0 0 3px rgba(47, 111, 228, 0.28)",
189
+ focusError: "0 0 0 3px rgba(194, 58, 58, 0.2)",
190
+ focusSuccess: "0 0 0 3px rgba(47, 143, 87, 0.2)",
191
+ insetXs: "inset 0 1px 2px rgba(22, 32, 43, 0.06)",
192
+ insetSm: "inset 0 2px 4px rgba(22, 32, 43, 0.08)"
193
+ };
194
+
195
+ // src/tokens/motion.ts
196
+ var duration = {
197
+ fast: "120ms",
198
+ base: "180ms",
199
+ slow: "240ms"
200
+ };
201
+ var easing = {
202
+ standard: "cubic-bezier(0.2, 0, 0, 1)",
203
+ emphasized: "cubic-bezier(0.2, 0, 0, 1)",
204
+ exit: "cubic-bezier(0.4, 0, 1, 1)"
205
+ };
206
+
207
+ // src/tokens/opacity.ts
208
+ var opacity = {
209
+ disabled: 0.48,
210
+ subtle: 0.72,
211
+ overlay: 0.48,
212
+ scrimStrong: 0.64
213
+ };
214
+
215
+ // src/tokens/zIndex.ts
216
+ var zIndex = {
217
+ base: 0,
218
+ dropdown: 1e3,
219
+ sticky: 1100,
220
+ banner: 1200,
221
+ overlay: 1300,
222
+ modal: 1400,
223
+ toast: 1500,
224
+ tooltip: 1600
225
+ };
226
+
227
+ // src/tokens/layout.ts
228
+ var container = {
229
+ max: "1280px",
230
+ reading: "720px"
231
+ };
232
+ var grid = {
233
+ columns: 12,
234
+ gutter: "24px",
235
+ margin: {
236
+ desktop: "32px",
237
+ tablet: "24px",
238
+ mobile: "16px"
239
+ }
240
+ };
241
+
242
+ // src/tokens/focus.ts
243
+ var focusRing = {
244
+ width: "3px",
245
+ color: "rgba(47, 111, 228, 0.28)",
246
+ offset: "2px",
247
+ outlineColor: "#2F6FE4"
248
+ };
249
+
250
+ // src/components/Button/Button.tsx
251
+ import { forwardRef } from "react";
252
+
253
+ // src/utils/cn.ts
254
+ function cn(...classes) {
255
+ return classes.filter(Boolean).join(" ");
256
+ }
257
+
258
+ // src/components/Button/Button.module.css
259
+ var Button_default = {};
260
+
261
+ // src/components/Button/Button.tsx
262
+ import { jsx, jsxs } from "react/jsx-runtime";
263
+ var Button = forwardRef(
264
+ ({
265
+ variant = "primary",
266
+ size = "md",
267
+ fullWidth = false,
268
+ loading = false,
269
+ disabled = false,
270
+ iconLeft,
271
+ iconRight,
272
+ children,
273
+ className,
274
+ ...props
275
+ }, ref) => {
276
+ const isDisabled = disabled || loading;
277
+ return /* @__PURE__ */ jsxs(
278
+ "button",
279
+ {
280
+ ref,
281
+ className: cn(
282
+ Button_default.button,
283
+ Button_default[variant],
284
+ Button_default[size],
285
+ fullWidth && Button_default.fullWidth,
286
+ loading && Button_default.loading,
287
+ className
288
+ ),
289
+ disabled: isDisabled,
290
+ "aria-disabled": isDisabled || void 0,
291
+ "aria-busy": loading || void 0,
292
+ ...props,
293
+ children: [
294
+ loading && /* @__PURE__ */ jsx("span", { className: Button_default.spinner, "aria-hidden": "true", children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsx("circle", { cx: "8", cy: "8", r: "6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeDasharray: "28", strokeDashoffset: "8" }) }) }),
295
+ iconLeft && /* @__PURE__ */ jsx("span", { className: Button_default.iconLeft, "aria-hidden": "true", children: iconLeft }),
296
+ /* @__PURE__ */ jsx("span", { className: Button_default.label, children }),
297
+ iconRight && /* @__PURE__ */ jsx("span", { className: Button_default.iconRight, "aria-hidden": "true", children: iconRight })
298
+ ]
299
+ }
300
+ );
301
+ }
302
+ );
303
+ Button.displayName = "Button";
304
+
305
+ // src/components/IconButton/IconButton.tsx
306
+ import { forwardRef as forwardRef2 } from "react";
307
+
308
+ // src/components/IconButton/IconButton.module.css
309
+ var IconButton_default = {};
310
+
311
+ // src/components/IconButton/IconButton.tsx
312
+ import { jsx as jsx2 } from "react/jsx-runtime";
313
+ var IconButton = forwardRef2(
314
+ ({ icon, variant = "ghost", size = "md", className, ...props }, ref) => /* @__PURE__ */ jsx2(
315
+ "button",
316
+ {
317
+ ref,
318
+ className: cn(IconButton_default.iconButton, IconButton_default[variant], IconButton_default[size], className),
319
+ ...props,
320
+ children: /* @__PURE__ */ jsx2("span", { "aria-hidden": "true", children: icon })
321
+ }
322
+ )
323
+ );
324
+ IconButton.displayName = "IconButton";
325
+
326
+ // src/components/Input/Input.tsx
327
+ import { forwardRef as forwardRef3 } from "react";
328
+
329
+ // src/components/Input/Input.module.css
330
+ var Input_default = {};
331
+
332
+ // src/components/Input/Input.tsx
333
+ import { jsx as jsx3 } from "react/jsx-runtime";
334
+ var Input = forwardRef3(
335
+ ({ size = "md", error = false, fullWidth = false, className, ...props }, ref) => /* @__PURE__ */ jsx3(
336
+ "input",
337
+ {
338
+ ref,
339
+ className: cn(
340
+ Input_default.input,
341
+ Input_default[size],
342
+ error && Input_default.error,
343
+ fullWidth && Input_default.fullWidth,
344
+ className
345
+ ),
346
+ "aria-invalid": error || void 0,
347
+ ...props
348
+ }
349
+ )
350
+ );
351
+ Input.displayName = "Input";
352
+
353
+ // src/components/Textarea/Textarea.tsx
354
+ import { forwardRef as forwardRef4 } from "react";
355
+
356
+ // src/components/Textarea/Textarea.module.css
357
+ var Textarea_default = {};
358
+
359
+ // src/components/Textarea/Textarea.tsx
360
+ import { jsx as jsx4 } from "react/jsx-runtime";
361
+ var Textarea = forwardRef4(
362
+ ({ error = false, fullWidth = false, resize = "vertical", className, style, ...props }, ref) => /* @__PURE__ */ jsx4(
363
+ "textarea",
364
+ {
365
+ ref,
366
+ className: cn(
367
+ Textarea_default.textarea,
368
+ error && Textarea_default.error,
369
+ fullWidth && Textarea_default.fullWidth,
370
+ className
371
+ ),
372
+ "aria-invalid": error || void 0,
373
+ style: { ...style, resize },
374
+ ...props
375
+ }
376
+ )
377
+ );
378
+ Textarea.displayName = "Textarea";
379
+
380
+ // src/components/Select/Select.tsx
381
+ import { forwardRef as forwardRef5 } from "react";
382
+
383
+ // src/components/Select/Select.module.css
384
+ var Select_default = {};
385
+
386
+ // src/components/Select/Select.tsx
387
+ import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
388
+ var Select = forwardRef5(
389
+ ({ size = "md", error = false, fullWidth = false, className, children, ...props }, ref) => /* @__PURE__ */ jsxs2("div", { className: cn(Select_default.wrapper, fullWidth && Select_default.fullWidth), children: [
390
+ /* @__PURE__ */ jsx5(
391
+ "select",
392
+ {
393
+ ref,
394
+ className: cn(
395
+ Select_default.select,
396
+ Select_default[size],
397
+ error && Select_default.error,
398
+ fullWidth && Select_default.fullWidth,
399
+ className
400
+ ),
401
+ "aria-invalid": error || void 0,
402
+ ...props,
403
+ children
404
+ }
405
+ ),
406
+ /* @__PURE__ */ jsx5("span", { className: Select_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ jsx5("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx5("path", { d: "M4 6l4 4 4-4" }) }) })
407
+ ] })
408
+ );
409
+ Select.displayName = "Select";
410
+
411
+ // src/components/Checkbox/Checkbox.tsx
412
+ import { forwardRef as forwardRef6 } from "react";
413
+
414
+ // src/components/Checkbox/Checkbox.module.css
415
+ var Checkbox_default = {};
416
+
417
+ // src/components/Checkbox/Checkbox.tsx
418
+ import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
419
+ var Checkbox = forwardRef6(
420
+ ({ label, error = false, className, id, ...props }, ref) => {
421
+ const inputId = id || (label ? `checkbox-${label.replace(/\s+/g, "-").toLowerCase()}` : void 0);
422
+ return /* @__PURE__ */ jsxs3("label", { className: cn(Checkbox_default.wrapper, error && Checkbox_default.error, className), children: [
423
+ /* @__PURE__ */ jsx6(
424
+ "input",
425
+ {
426
+ ref,
427
+ type: "checkbox",
428
+ className: Checkbox_default.input,
429
+ id: inputId,
430
+ "aria-invalid": error || void 0,
431
+ ...props
432
+ }
433
+ ),
434
+ /* @__PURE__ */ jsx6("span", { className: Checkbox_default.control, "aria-hidden": "true", children: /* @__PURE__ */ jsx6("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx6("path", { d: "M2.5 6L5 8.5L9.5 3.5" }) }) }),
435
+ label && /* @__PURE__ */ jsx6("span", { className: Checkbox_default.label, children: label })
436
+ ] });
437
+ }
438
+ );
439
+ Checkbox.displayName = "Checkbox";
440
+
441
+ // src/components/Radio/Radio.tsx
442
+ import { forwardRef as forwardRef7 } from "react";
443
+
444
+ // src/components/Radio/Radio.module.css
445
+ var Radio_default = {};
446
+
447
+ // src/components/Radio/Radio.tsx
448
+ import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
449
+ var Radio = forwardRef7(
450
+ ({ label, error = false, className, id, ...props }, ref) => {
451
+ const inputId = id || (label ? `radio-${label.replace(/\s+/g, "-").toLowerCase()}` : void 0);
452
+ return /* @__PURE__ */ jsxs4("label", { className: cn(Radio_default.wrapper, error && Radio_default.error, className), children: [
453
+ /* @__PURE__ */ jsx7(
454
+ "input",
455
+ {
456
+ ref,
457
+ type: "radio",
458
+ className: Radio_default.input,
459
+ id: inputId,
460
+ "aria-invalid": error || void 0,
461
+ ...props
462
+ }
463
+ ),
464
+ /* @__PURE__ */ jsx7("span", { className: Radio_default.control, "aria-hidden": "true", children: /* @__PURE__ */ jsx7("span", { className: Radio_default.dot }) }),
465
+ label && /* @__PURE__ */ jsx7("span", { className: Radio_default.label, children: label })
466
+ ] });
467
+ }
468
+ );
469
+ Radio.displayName = "Radio";
470
+
471
+ // src/components/Switch/Switch.tsx
472
+ import { forwardRef as forwardRef8 } from "react";
473
+
474
+ // src/components/Switch/Switch.module.css
475
+ var Switch_default = {};
476
+
477
+ // src/components/Switch/Switch.tsx
478
+ import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
479
+ var Switch = forwardRef8(
480
+ ({ label, className, checked, defaultChecked, ...props }, ref) => /* @__PURE__ */ jsxs5("label", { className: cn(Switch_default.wrapper, className), children: [
481
+ /* @__PURE__ */ jsx8(
482
+ "input",
483
+ {
484
+ ref,
485
+ type: "checkbox",
486
+ role: "switch",
487
+ className: Switch_default.input,
488
+ checked,
489
+ defaultChecked,
490
+ "aria-checked": checked,
491
+ ...props
492
+ }
493
+ ),
494
+ /* @__PURE__ */ jsx8("span", { className: Switch_default.track, "aria-hidden": "true", children: /* @__PURE__ */ jsx8("span", { className: Switch_default.thumb }) }),
495
+ label && /* @__PURE__ */ jsx8("span", { className: Switch_default.label, children: label })
496
+ ] })
497
+ );
498
+ Switch.displayName = "Switch";
499
+
500
+ // src/components/Label/Label.module.css
501
+ var Label_default = {};
502
+
503
+ // src/components/Label/Label.tsx
504
+ import { Fragment, jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
505
+ function Label({ required, className, children, ...props }) {
506
+ return /* @__PURE__ */ jsxs6("label", { className: cn(Label_default.label, className), ...props, children: [
507
+ children,
508
+ required && /* @__PURE__ */ jsxs6(Fragment, { children: [
509
+ /* @__PURE__ */ jsx9("span", { className: Label_default.required, "aria-hidden": "true", children: " *" }),
510
+ /* @__PURE__ */ jsx9("span", { className: Label_default.srOnly, children: " (required)" })
511
+ ] })
512
+ ] });
513
+ }
514
+
515
+ // src/components/HelperText/HelperText.module.css
516
+ var HelperText_default = {};
517
+
518
+ // src/components/HelperText/HelperText.tsx
519
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
520
+ function HelperText({ error = false, className, children, ...props }) {
521
+ return /* @__PURE__ */ jsxs7(
522
+ "p",
523
+ {
524
+ className: cn(HelperText_default.helperText, error && HelperText_default.error, className),
525
+ role: error ? "alert" : void 0,
526
+ ...props,
527
+ children: [
528
+ error && /* @__PURE__ */ jsx10("svg", { className: HelperText_default.icon, width: "14", height: "14", viewBox: "0 0 14 14", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx10("path", { d: "M7 0a7 7 0 110 14A7 7 0 017 0zm0 9.5a.75.75 0 100 1.5.75.75 0 000-1.5zM7 3a.75.75 0 00-.75.75v4a.75.75 0 001.5 0v-4A.75.75 0 007 3z" }) }),
529
+ children
530
+ ]
531
+ }
532
+ );
533
+ }
534
+
535
+ // src/components/Card/Card.module.css
536
+ var Card_default = {};
537
+
538
+ // src/components/Card/Card.tsx
539
+ import { jsx as jsx11 } from "react/jsx-runtime";
540
+ function Card({ elevation = "flat", padding = "md", className, children, ...props }) {
541
+ return /* @__PURE__ */ jsx11(
542
+ "div",
543
+ {
544
+ className: cn(Card_default.card, Card_default[elevation], Card_default[`pad-${padding}`], className),
545
+ ...props,
546
+ children
547
+ }
548
+ );
549
+ }
550
+
551
+ // src/components/Badge/Badge.module.css
552
+ var Badge_default = {};
553
+
554
+ // src/components/Badge/Badge.tsx
555
+ import { jsx as jsx12 } from "react/jsx-runtime";
556
+ function Badge({ status = "neutral", className, children, ...props }) {
557
+ return /* @__PURE__ */ jsx12("span", { className: cn(Badge_default.badge, Badge_default[status], className), ...props, children });
558
+ }
559
+
560
+ // src/components/Alert/Alert.module.css
561
+ var Alert_default = {};
562
+
563
+ // src/components/Alert/Alert.tsx
564
+ import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
565
+ var statusIcons = {
566
+ info: /* @__PURE__ */ jsx13("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx13("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 8a1 1 0 00-1 1v5a1 1 0 102 0V9a1 1 0 00-1-1zm0-3.5a1 1 0 100 2 1 1 0 000-2z" }) }),
567
+ success: /* @__PURE__ */ jsx13("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx13("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm4.3 7.3a1 1 0 00-1.4-1.4L8.5 10.3 7.1 8.9a1 1 0 10-1.4 1.4l2.1 2.1a1 1 0 001.4 0l5.1-5.1z" }) }),
568
+ warning: /* @__PURE__ */ jsx13("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx13("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 13a1 1 0 100 2 1 1 0 000-2zm0-8a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" }) }),
569
+ error: /* @__PURE__ */ jsx13("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx13("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm3.5 6.5a1 1 0 00-1.4 0L10 8.6 7.9 6.5a1 1 0 10-1.4 1.4L8.6 10l-2.1 2.1a1 1 0 101.4 1.4L10 11.4l2.1 2.1a1 1 0 001.4-1.4L11.4 10l2.1-2.1a1 1 0 000-1.4z" }) })
570
+ };
571
+ function Alert({ status = "info", title, action, className, children, ...props }) {
572
+ const isUrgent = status === "error" || status === "warning";
573
+ return /* @__PURE__ */ jsxs8(
574
+ "div",
575
+ {
576
+ className: cn(Alert_default.alert, Alert_default[status], className),
577
+ role: isUrgent ? "alert" : "status",
578
+ ...props,
579
+ children: [
580
+ /* @__PURE__ */ jsx13("span", { className: Alert_default.icon, "aria-hidden": "true", children: statusIcons[status] }),
581
+ /* @__PURE__ */ jsxs8("div", { className: Alert_default.content, children: [
582
+ title && /* @__PURE__ */ jsx13("p", { className: Alert_default.title, children: title }),
583
+ children && /* @__PURE__ */ jsx13("div", { className: Alert_default.body, children })
584
+ ] }),
585
+ action && /* @__PURE__ */ jsx13("div", { className: Alert_default.action, children: action })
586
+ ]
587
+ }
588
+ );
589
+ }
590
+
591
+ // src/components/Tabs/Tabs.tsx
592
+ import { useState, useRef, useCallback } from "react";
593
+
594
+ // src/components/Tabs/Tabs.module.css
595
+ var Tabs_default = {};
596
+
597
+ // src/components/Tabs/Tabs.tsx
598
+ import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
599
+ function Tabs({ tabs, activeTab, onTabChange, className }) {
600
+ const [internalActive, setInternalActive] = useState(tabs[0]?.id ?? "");
601
+ const tabListRef = useRef(null);
602
+ const active = activeTab ?? internalActive;
603
+ const setActive = useCallback(
604
+ (id) => {
605
+ if (!activeTab) setInternalActive(id);
606
+ onTabChange?.(id);
607
+ },
608
+ [activeTab, onTabChange]
609
+ );
610
+ const enabledTabs = tabs.filter((t) => !t.disabled);
611
+ const handleKeyDown = useCallback(
612
+ (e) => {
613
+ const currentIndex = enabledTabs.findIndex((t) => t.id === active);
614
+ let nextIndex = currentIndex;
615
+ switch (e.key) {
616
+ case "ArrowRight":
617
+ nextIndex = (currentIndex + 1) % enabledTabs.length;
618
+ break;
619
+ case "ArrowLeft":
620
+ nextIndex = (currentIndex - 1 + enabledTabs.length) % enabledTabs.length;
621
+ break;
622
+ case "Home":
623
+ nextIndex = 0;
624
+ break;
625
+ case "End":
626
+ nextIndex = enabledTabs.length - 1;
627
+ break;
628
+ default:
629
+ return;
630
+ }
631
+ e.preventDefault();
632
+ const nextTab = enabledTabs[nextIndex];
633
+ setActive(nextTab.id);
634
+ const button = tabListRef.current?.querySelector(`[data-tab-id="${nextTab.id}"]`);
635
+ button?.focus();
636
+ },
637
+ [active, enabledTabs, setActive]
638
+ );
639
+ const activePanel = tabs.find((t) => t.id === active);
640
+ return /* @__PURE__ */ jsxs9("div", { className: cn(Tabs_default.wrapper, className), children: [
641
+ /* @__PURE__ */ jsx14(
642
+ "div",
643
+ {
644
+ ref: tabListRef,
645
+ role: "tablist",
646
+ className: Tabs_default.tabList,
647
+ onKeyDown: handleKeyDown,
648
+ children: tabs.map((tab) => /* @__PURE__ */ jsx14(
649
+ "button",
650
+ {
651
+ role: "tab",
652
+ "data-tab-id": tab.id,
653
+ id: `tab-${tab.id}`,
654
+ className: cn(Tabs_default.tab, tab.id === active && Tabs_default.active),
655
+ "aria-selected": tab.id === active,
656
+ "aria-controls": `panel-${tab.id}`,
657
+ tabIndex: tab.id === active ? 0 : -1,
658
+ disabled: tab.disabled,
659
+ onClick: () => setActive(tab.id),
660
+ children: tab.label
661
+ },
662
+ tab.id
663
+ ))
664
+ }
665
+ ),
666
+ activePanel && /* @__PURE__ */ jsx14(
667
+ "div",
668
+ {
669
+ role: "tabpanel",
670
+ id: `panel-${activePanel.id}`,
671
+ "aria-labelledby": `tab-${activePanel.id}`,
672
+ className: Tabs_default.panel,
673
+ tabIndex: 0,
674
+ children: activePanel.content
675
+ },
676
+ activePanel.id
677
+ )
678
+ ] });
679
+ }
680
+
681
+ // src/components/Modal/Modal.tsx
682
+ import { useEffect, useRef as useRef2 } from "react";
683
+
684
+ // src/components/Modal/Modal.module.css
685
+ var Modal_default = {};
686
+
687
+ // src/components/Modal/Modal.tsx
688
+ import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
689
+ function Modal({ open, onClose, title, size = "md", footer, className, children }) {
690
+ const dialogRef = useRef2(null);
691
+ useEffect(() => {
692
+ const dialog = dialogRef.current;
693
+ if (!dialog) return;
694
+ if (open && !dialog.open) {
695
+ dialog.showModal();
696
+ } else if (!open && dialog.open) {
697
+ dialog.close();
698
+ }
699
+ }, [open]);
700
+ useEffect(() => {
701
+ const dialog = dialogRef.current;
702
+ if (!dialog) return;
703
+ const handleClose = () => onClose();
704
+ dialog.addEventListener("close", handleClose);
705
+ return () => dialog.removeEventListener("close", handleClose);
706
+ }, [onClose]);
707
+ const handleBackdropClick = (e) => {
708
+ if (e.target === dialogRef.current) {
709
+ onClose();
710
+ }
711
+ };
712
+ return /* @__PURE__ */ jsx15(
713
+ "dialog",
714
+ {
715
+ ref: dialogRef,
716
+ className: cn(Modal_default.dialog, Modal_default[size], className),
717
+ "aria-labelledby": "aegis-modal-title",
718
+ onClick: handleBackdropClick,
719
+ children: /* @__PURE__ */ jsxs10("div", { className: Modal_default.content, children: [
720
+ /* @__PURE__ */ jsxs10("header", { className: Modal_default.header, children: [
721
+ /* @__PURE__ */ jsx15("h2", { id: "aegis-modal-title", className: Modal_default.title, children: title }),
722
+ /* @__PURE__ */ jsx15(
723
+ "button",
724
+ {
725
+ className: Modal_default.close,
726
+ onClick: onClose,
727
+ "aria-label": "Close dialog",
728
+ children: /* @__PURE__ */ jsxs10("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", children: [
729
+ /* @__PURE__ */ jsx15("line", { x1: "5", y1: "5", x2: "15", y2: "15" }),
730
+ /* @__PURE__ */ jsx15("line", { x1: "15", y1: "5", x2: "5", y2: "15" })
731
+ ] })
732
+ }
733
+ )
734
+ ] }),
735
+ /* @__PURE__ */ jsx15("div", { className: Modal_default.body, children }),
736
+ footer && /* @__PURE__ */ jsx15("footer", { className: Modal_default.footer, children: footer })
737
+ ] })
738
+ }
739
+ );
740
+ }
741
+
742
+ // src/components/Table/Table.module.css
743
+ var Table_default = {};
744
+
745
+ // src/components/Table/Table.tsx
746
+ import { jsx as jsx16 } from "react/jsx-runtime";
747
+ function Table({ density = "default", striped = false, className, children, ...props }) {
748
+ return /* @__PURE__ */ jsx16("div", { className: Table_default.wrapper, children: /* @__PURE__ */ jsx16(
749
+ "table",
750
+ {
751
+ className: cn(Table_default.table, Table_default[density], striped && Table_default.striped, className),
752
+ ...props,
753
+ children
754
+ }
755
+ ) });
756
+ }
757
+ function TableHead({ className, children, ...props }) {
758
+ return /* @__PURE__ */ jsx16("thead", { className: cn(Table_default.thead, className), ...props, children });
759
+ }
760
+ function TableBody({ className, children, ...props }) {
761
+ return /* @__PURE__ */ jsx16("tbody", { className: cn(Table_default.tbody, className), ...props, children });
762
+ }
763
+ function TableRow({ className, children, ...props }) {
764
+ return /* @__PURE__ */ jsx16("tr", { className: cn(Table_default.tr, className), ...props, children });
765
+ }
766
+ function TableHeaderCell({ className, children, ...props }) {
767
+ return /* @__PURE__ */ jsx16("th", { scope: "col", className: cn(Table_default.th, className), ...props, children });
768
+ }
769
+ function TableCell({ className, children, ...props }) {
770
+ return /* @__PURE__ */ jsx16("td", { className: cn(Table_default.td, className), ...props, children });
771
+ }
772
+
773
+ // src/components/Tooltip/Tooltip.tsx
774
+ import { useState as useState2, useRef as useRef3 } from "react";
775
+
776
+ // src/components/Tooltip/Tooltip.module.css
777
+ var Tooltip_default = {};
778
+
779
+ // src/components/Tooltip/Tooltip.tsx
780
+ import { jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
781
+ function Tooltip({ content, children, placement = "top", delay = 200, className }) {
782
+ const [visible, setVisible] = useState2(false);
783
+ const timeoutRef = useRef3();
784
+ const tooltipId = useRef3(`tooltip-${Math.random().toString(36).slice(2, 9)}`).current;
785
+ const show = () => {
786
+ timeoutRef.current = setTimeout(() => setVisible(true), delay);
787
+ };
788
+ const hide = () => {
789
+ clearTimeout(timeoutRef.current);
790
+ setVisible(false);
791
+ };
792
+ return /* @__PURE__ */ jsxs11(
793
+ "div",
794
+ {
795
+ className: cn(Tooltip_default.wrapper, className),
796
+ onMouseEnter: show,
797
+ onMouseLeave: hide,
798
+ onFocus: show,
799
+ onBlur: hide,
800
+ children: [
801
+ /* @__PURE__ */ jsx17("div", { "aria-describedby": visible ? tooltipId : void 0, children }),
802
+ visible && /* @__PURE__ */ jsx17(
803
+ "div",
804
+ {
805
+ id: tooltipId,
806
+ role: "tooltip",
807
+ className: cn(Tooltip_default.tooltip, Tooltip_default[placement]),
808
+ children: content
809
+ }
810
+ )
811
+ ]
812
+ }
813
+ );
814
+ }
815
+
816
+ // src/components/Divider/Divider.module.css
817
+ var Divider_default = {};
818
+
819
+ // src/components/Divider/Divider.tsx
820
+ import { jsx as jsx18 } from "react/jsx-runtime";
821
+ function Divider({ spacing = "md", className, ...props }) {
822
+ return /* @__PURE__ */ jsx18("hr", { className: cn(Divider_default.divider, Divider_default[spacing], className), ...props });
823
+ }
824
+
825
+ // src/components/Spinner/Spinner.module.css
826
+ var Spinner_default = {};
827
+
828
+ // src/components/Spinner/Spinner.tsx
829
+ import { jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
830
+ function Spinner({ size = "md", label = "Loading", className, ...props }) {
831
+ const sizeMap = { sm: 16, md: 24, lg: 32 };
832
+ const s = sizeMap[size];
833
+ return /* @__PURE__ */ jsx19(
834
+ "span",
835
+ {
836
+ className: cn(Spinner_default.spinner, className),
837
+ role: "status",
838
+ "aria-label": label,
839
+ "aria-live": "polite",
840
+ ...props,
841
+ children: /* @__PURE__ */ jsxs12(
842
+ "svg",
843
+ {
844
+ width: s,
845
+ height: s,
846
+ viewBox: "0 0 24 24",
847
+ fill: "none",
848
+ className: Spinner_default.svg,
849
+ "aria-hidden": "true",
850
+ children: [
851
+ /* @__PURE__ */ jsx19(
852
+ "circle",
853
+ {
854
+ cx: "12",
855
+ cy: "12",
856
+ r: "10",
857
+ stroke: "currentColor",
858
+ strokeWidth: "2.5",
859
+ strokeLinecap: "round",
860
+ opacity: "0.2"
861
+ }
862
+ ),
863
+ /* @__PURE__ */ jsx19(
864
+ "circle",
865
+ {
866
+ cx: "12",
867
+ cy: "12",
868
+ r: "10",
869
+ stroke: "currentColor",
870
+ strokeWidth: "2.5",
871
+ strokeLinecap: "round",
872
+ strokeDasharray: "50",
873
+ strokeDashoffset: "35"
874
+ }
875
+ )
876
+ ]
877
+ }
878
+ )
879
+ }
880
+ );
881
+ }
882
+
883
+ // src/components/Skeleton/Skeleton.module.css
884
+ var Skeleton_default = {};
885
+
886
+ // src/components/Skeleton/Skeleton.tsx
887
+ import { jsx as jsx20 } from "react/jsx-runtime";
888
+ function Skeleton({
889
+ variant = "text",
890
+ width,
891
+ height,
892
+ lines = 1,
893
+ className,
894
+ style,
895
+ ...props
896
+ }) {
897
+ if (variant === "text" && lines > 1) {
898
+ return /* @__PURE__ */ jsx20("div", { className: cn(Skeleton_default.group, className), "aria-hidden": "true", ...props, children: Array.from({ length: lines }, (_, i) => /* @__PURE__ */ jsx20(
899
+ "div",
900
+ {
901
+ className: cn(Skeleton_default.skeleton, Skeleton_default.text),
902
+ style: {
903
+ width: i === lines - 1 ? "75%" : width ?? "100%",
904
+ height: height ?? void 0,
905
+ ...style
906
+ }
907
+ },
908
+ i
909
+ )) });
910
+ }
911
+ return /* @__PURE__ */ jsx20(
912
+ "div",
913
+ {
914
+ className: cn(Skeleton_default.skeleton, Skeleton_default[variant], className),
915
+ "aria-hidden": "true",
916
+ style: {
917
+ width: width ?? (variant === "circular" ? 40 : "100%"),
918
+ height: height ?? (variant === "circular" ? 40 : variant === "rectangular" ? 120 : void 0),
919
+ ...style
920
+ },
921
+ ...props
922
+ }
923
+ );
924
+ }
925
+
926
+ // src/components/StatusBadge/StatusBadge.module.css
927
+ var StatusBadge_default = {};
928
+
929
+ // src/components/StatusBadge/StatusBadge.tsx
930
+ import { jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
931
+ var statusLabels = {
932
+ active: "Active",
933
+ inactive: "Inactive",
934
+ pending: "Pending",
935
+ critical: "Critical",
936
+ discharged: "Discharged",
937
+ scheduled: "Scheduled",
938
+ cancelled: "Cancelled",
939
+ "in-progress": "In Progress"
940
+ };
941
+ function StatusBadge({
942
+ status,
943
+ size = "md",
944
+ dot = false,
945
+ className,
946
+ children,
947
+ ...props
948
+ }) {
949
+ return /* @__PURE__ */ jsxs13(
950
+ "span",
951
+ {
952
+ className: cn(StatusBadge_default.badge, StatusBadge_default[status], StatusBadge_default[size], className),
953
+ ...props,
954
+ children: [
955
+ dot && /* @__PURE__ */ jsx21("span", { className: StatusBadge_default.dot, "aria-hidden": "true" }),
956
+ children ?? statusLabels[status]
957
+ ]
958
+ }
959
+ );
960
+ }
961
+
962
+ // src/components/Avatar/Avatar.tsx
963
+ import { useState as useState3 } from "react";
964
+
965
+ // src/components/Avatar/Avatar.module.css
966
+ var Avatar_default = {};
967
+
968
+ // src/components/Avatar/Avatar.tsx
969
+ import { jsx as jsx22, jsxs as jsxs14 } from "react/jsx-runtime";
970
+ function getInitials(name) {
971
+ const parts = name.trim().split(/\s+/);
972
+ if (parts.length === 0) return "";
973
+ if (parts.length === 1) return parts[0][0]?.toUpperCase() ?? "";
974
+ return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
975
+ }
976
+ function Avatar({
977
+ src,
978
+ alt,
979
+ name,
980
+ size = "md",
981
+ status,
982
+ className,
983
+ ...props
984
+ }) {
985
+ const [imgError, setImgError] = useState3(false);
986
+ const showImage = src && !imgError;
987
+ const initials = name ? getInitials(name) : "";
988
+ return /* @__PURE__ */ jsxs14(
989
+ "span",
990
+ {
991
+ className: cn(Avatar_default.avatar, Avatar_default[size], className),
992
+ role: "img",
993
+ "aria-label": alt ?? name ?? "Avatar",
994
+ ...props,
995
+ children: [
996
+ showImage ? /* @__PURE__ */ jsx22(
997
+ "img",
998
+ {
999
+ src,
1000
+ alt: alt ?? name ?? "Avatar",
1001
+ className: Avatar_default.image,
1002
+ onError: () => setImgError(true)
1003
+ }
1004
+ ) : /* @__PURE__ */ jsx22("span", { className: Avatar_default.initials, "aria-hidden": "true", children: initials }),
1005
+ status && /* @__PURE__ */ jsx22("span", { className: cn(Avatar_default.status, Avatar_default[`status-${status}`]), "aria-hidden": "true", children: /* @__PURE__ */ jsx22("span", { className: Avatar_default.srOnly, children: status }) })
1006
+ ]
1007
+ }
1008
+ );
1009
+ }
1010
+
1011
+ // src/components/EmptyState/EmptyState.module.css
1012
+ var EmptyState_default = {};
1013
+
1014
+ // src/components/EmptyState/EmptyState.tsx
1015
+ import { jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
1016
+ function EmptyState({
1017
+ icon,
1018
+ title,
1019
+ description,
1020
+ action,
1021
+ className,
1022
+ ...props
1023
+ }) {
1024
+ return /* @__PURE__ */ jsxs15("div", { className: cn(EmptyState_default.container, className), ...props, children: [
1025
+ icon && /* @__PURE__ */ jsx23("div", { className: EmptyState_default.icon, "aria-hidden": "true", children: icon }),
1026
+ /* @__PURE__ */ jsx23("h3", { className: EmptyState_default.title, children: title }),
1027
+ description && /* @__PURE__ */ jsx23("p", { className: EmptyState_default.description, children: description }),
1028
+ action && /* @__PURE__ */ jsx23("div", { className: EmptyState_default.action, children: action })
1029
+ ] });
1030
+ }
1031
+
1032
+ // src/components/ProgressBar/ProgressBar.module.css
1033
+ var ProgressBar_default = {};
1034
+
1035
+ // src/components/ProgressBar/ProgressBar.tsx
1036
+ import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
1037
+ function ProgressBar({
1038
+ value,
1039
+ max = 100,
1040
+ size = "md",
1041
+ variant = "default",
1042
+ label,
1043
+ showValue = false,
1044
+ className,
1045
+ ...props
1046
+ }) {
1047
+ const pct = Math.min(100, Math.max(0, value / max * 100));
1048
+ return /* @__PURE__ */ jsxs16("div", { className: cn(ProgressBar_default.container, className), ...props, children: [
1049
+ (label || showValue) && /* @__PURE__ */ jsxs16("div", { className: ProgressBar_default.header, children: [
1050
+ label && /* @__PURE__ */ jsx24("span", { className: ProgressBar_default.label, children: label }),
1051
+ showValue && /* @__PURE__ */ jsxs16("span", { className: ProgressBar_default.value, children: [
1052
+ Math.round(pct),
1053
+ "%"
1054
+ ] })
1055
+ ] }),
1056
+ /* @__PURE__ */ jsx24(
1057
+ "div",
1058
+ {
1059
+ className: cn(ProgressBar_default.track, ProgressBar_default[size]),
1060
+ role: "progressbar",
1061
+ "aria-valuenow": value,
1062
+ "aria-valuemin": 0,
1063
+ "aria-valuemax": max,
1064
+ "aria-label": label,
1065
+ children: /* @__PURE__ */ jsx24(
1066
+ "div",
1067
+ {
1068
+ className: cn(ProgressBar_default.fill, ProgressBar_default[variant]),
1069
+ style: { width: `${pct}%` }
1070
+ }
1071
+ )
1072
+ }
1073
+ )
1074
+ ] });
1075
+ }
1076
+
1077
+ // src/components/Pagination/Pagination.module.css
1078
+ var Pagination_default = {};
1079
+
1080
+ // src/components/Pagination/Pagination.tsx
1081
+ import { jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
1082
+ function getPageRange(current, total, siblings) {
1083
+ const totalNumbers = siblings * 2 + 3;
1084
+ const totalBlocks = totalNumbers + 2;
1085
+ if (total <= totalBlocks) {
1086
+ return Array.from({ length: total }, (_, i) => i + 1);
1087
+ }
1088
+ const leftSibling = Math.max(current - siblings, 1);
1089
+ const rightSibling = Math.min(current + siblings, total);
1090
+ const showLeftEllipsis = leftSibling > 2;
1091
+ const showRightEllipsis = rightSibling < total - 1;
1092
+ if (!showLeftEllipsis && showRightEllipsis) {
1093
+ const leftCount = 3 + 2 * siblings;
1094
+ const leftRange = Array.from({ length: leftCount }, (_, i) => i + 1);
1095
+ return [...leftRange, "ellipsis", total];
1096
+ }
1097
+ if (showLeftEllipsis && !showRightEllipsis) {
1098
+ const rightCount = 3 + 2 * siblings;
1099
+ const rightRange = Array.from({ length: rightCount }, (_, i) => total - rightCount + i + 1);
1100
+ return [1, "ellipsis", ...rightRange];
1101
+ }
1102
+ const middleRange = Array.from(
1103
+ { length: rightSibling - leftSibling + 1 },
1104
+ (_, i) => leftSibling + i
1105
+ );
1106
+ return [1, "ellipsis", ...middleRange, "ellipsis", total];
1107
+ }
1108
+ function Pagination({
1109
+ currentPage,
1110
+ totalPages,
1111
+ onPageChange,
1112
+ siblingCount = 1,
1113
+ size = "md",
1114
+ className,
1115
+ ...props
1116
+ }) {
1117
+ const pages = getPageRange(currentPage, totalPages, siblingCount);
1118
+ if (totalPages <= 1) return null;
1119
+ return /* @__PURE__ */ jsxs17(
1120
+ "nav",
1121
+ {
1122
+ className: cn(Pagination_default.pagination, Pagination_default[size], className),
1123
+ "aria-label": "Pagination",
1124
+ ...props,
1125
+ children: [
1126
+ /* @__PURE__ */ jsx25(
1127
+ "button",
1128
+ {
1129
+ className: cn(Pagination_default.button, Pagination_default.nav),
1130
+ onClick: () => onPageChange(currentPage - 1),
1131
+ disabled: currentPage <= 1,
1132
+ "aria-label": "Previous page",
1133
+ children: /* @__PURE__ */ jsx25("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx25("polyline", { points: "10 4 6 8 10 12" }) })
1134
+ }
1135
+ ),
1136
+ pages.map(
1137
+ (page, idx) => page === "ellipsis" ? /* @__PURE__ */ jsx25("span", { className: Pagination_default.ellipsis, "aria-hidden": "true", children: "\u2026" }, `ellipsis-${idx}`) : /* @__PURE__ */ jsx25(
1138
+ "button",
1139
+ {
1140
+ className: cn(Pagination_default.button, page === currentPage && Pagination_default.active),
1141
+ onClick: () => onPageChange(page),
1142
+ "aria-current": page === currentPage ? "page" : void 0,
1143
+ "aria-label": `Page ${page}`,
1144
+ children: page
1145
+ },
1146
+ page
1147
+ )
1148
+ ),
1149
+ /* @__PURE__ */ jsx25(
1150
+ "button",
1151
+ {
1152
+ className: cn(Pagination_default.button, Pagination_default.nav),
1153
+ onClick: () => onPageChange(currentPage + 1),
1154
+ disabled: currentPage >= totalPages,
1155
+ "aria-label": "Next page",
1156
+ children: /* @__PURE__ */ jsx25("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx25("polyline", { points: "6 4 10 8 6 12" }) })
1157
+ }
1158
+ )
1159
+ ]
1160
+ }
1161
+ );
1162
+ }
1163
+
1164
+ // src/components/DescriptionList/DescriptionList.module.css
1165
+ var DescriptionList_default = {};
1166
+
1167
+ // src/components/DescriptionList/DescriptionList.tsx
1168
+ import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
1169
+ function DescriptionList({
1170
+ items,
1171
+ layout = "vertical",
1172
+ columns = 2,
1173
+ className,
1174
+ style,
1175
+ ...props
1176
+ }) {
1177
+ return /* @__PURE__ */ jsx26(
1178
+ "dl",
1179
+ {
1180
+ className: cn(DescriptionList_default.list, DescriptionList_default[layout], className),
1181
+ style: {
1182
+ ...layout === "grid" ? { "--dl-columns": columns } : {},
1183
+ ...style
1184
+ },
1185
+ ...props,
1186
+ children: items.map((item, i) => /* @__PURE__ */ jsxs18("div", { className: DescriptionList_default.item, children: [
1187
+ /* @__PURE__ */ jsx26("dt", { className: DescriptionList_default.term, children: item.label }),
1188
+ /* @__PURE__ */ jsx26("dd", { className: DescriptionList_default.definition, children: item.value })
1189
+ ] }, i))
1190
+ }
1191
+ );
1192
+ }
1193
+
1194
+ // src/components/Popover/Popover.tsx
1195
+ import { useState as useState4, useRef as useRef4, useEffect as useEffect2, useCallback as useCallback2 } from "react";
1196
+
1197
+ // src/components/Popover/Popover.module.css
1198
+ var Popover_default = {};
1199
+
1200
+ // src/components/Popover/Popover.tsx
1201
+ import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
1202
+ function Popover({
1203
+ trigger,
1204
+ content,
1205
+ open: controlledOpen,
1206
+ onOpenChange,
1207
+ placement = "bottom",
1208
+ align = "center",
1209
+ className,
1210
+ ...props
1211
+ }) {
1212
+ const [internalOpen, setInternalOpen] = useState4(false);
1213
+ const isControlled = controlledOpen !== void 0;
1214
+ const isOpen = isControlled ? controlledOpen : internalOpen;
1215
+ const containerRef = useRef4(null);
1216
+ const contentRef = useRef4(null);
1217
+ const setOpen = useCallback2(
1218
+ (value) => {
1219
+ if (!isControlled) setInternalOpen(value);
1220
+ onOpenChange?.(value);
1221
+ },
1222
+ [isControlled, onOpenChange]
1223
+ );
1224
+ const toggle = useCallback2(() => setOpen(!isOpen), [isOpen, setOpen]);
1225
+ useEffect2(() => {
1226
+ if (!isOpen) return;
1227
+ const handleKeyDown = (e) => {
1228
+ if (e.key === "Escape") {
1229
+ setOpen(false);
1230
+ }
1231
+ };
1232
+ document.addEventListener("keydown", handleKeyDown);
1233
+ return () => document.removeEventListener("keydown", handleKeyDown);
1234
+ }, [isOpen, setOpen]);
1235
+ useEffect2(() => {
1236
+ if (!isOpen) return;
1237
+ const handleClick = (e) => {
1238
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
1239
+ setOpen(false);
1240
+ }
1241
+ };
1242
+ document.addEventListener("mousedown", handleClick);
1243
+ return () => document.removeEventListener("mousedown", handleClick);
1244
+ }, [isOpen, setOpen]);
1245
+ useEffect2(() => {
1246
+ if (isOpen && contentRef.current) {
1247
+ const firstFocusable = contentRef.current.querySelector(
1248
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
1249
+ );
1250
+ if (firstFocusable) {
1251
+ firstFocusable.focus();
1252
+ }
1253
+ }
1254
+ }, [isOpen]);
1255
+ return /* @__PURE__ */ jsxs19("div", { ref: containerRef, className: cn(Popover_default.container, className), ...props, children: [
1256
+ /* @__PURE__ */ jsx27("div", { className: Popover_default.trigger, onClick: toggle, children: trigger }),
1257
+ isOpen && /* @__PURE__ */ jsx27(
1258
+ "div",
1259
+ {
1260
+ ref: contentRef,
1261
+ className: cn(Popover_default.content, Popover_default[placement], Popover_default[`align-${align}`]),
1262
+ role: "dialog",
1263
+ "aria-modal": "false",
1264
+ children: content
1265
+ }
1266
+ )
1267
+ ] });
1268
+ }
1269
+
1270
+ // src/components/Drawer/Drawer.tsx
1271
+ import { useEffect as useEffect3, useRef as useRef5 } from "react";
1272
+
1273
+ // src/components/Drawer/Drawer.module.css
1274
+ var Drawer_default = {};
1275
+
1276
+ // src/components/Drawer/Drawer.tsx
1277
+ import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
1278
+ function Drawer({
1279
+ open,
1280
+ onClose,
1281
+ title,
1282
+ size = "md",
1283
+ position = "right",
1284
+ footer,
1285
+ className,
1286
+ children
1287
+ }) {
1288
+ const dialogRef = useRef5(null);
1289
+ useEffect3(() => {
1290
+ const dialog = dialogRef.current;
1291
+ if (!dialog) return;
1292
+ if (open && !dialog.open) {
1293
+ dialog.showModal();
1294
+ } else if (!open && dialog.open) {
1295
+ dialog.close();
1296
+ }
1297
+ }, [open]);
1298
+ useEffect3(() => {
1299
+ const dialog = dialogRef.current;
1300
+ if (!dialog) return;
1301
+ const handleClose = () => onClose();
1302
+ dialog.addEventListener("close", handleClose);
1303
+ return () => dialog.removeEventListener("close", handleClose);
1304
+ }, [onClose]);
1305
+ const handleBackdropClick = (e) => {
1306
+ if (e.target === dialogRef.current) {
1307
+ onClose();
1308
+ }
1309
+ };
1310
+ return /* @__PURE__ */ jsx28(
1311
+ "dialog",
1312
+ {
1313
+ ref: dialogRef,
1314
+ className: cn(Drawer_default.dialog, Drawer_default[position], Drawer_default[size], className),
1315
+ "aria-labelledby": "aegis-drawer-title",
1316
+ onClick: handleBackdropClick,
1317
+ children: /* @__PURE__ */ jsxs20("div", { className: Drawer_default.panel, children: [
1318
+ /* @__PURE__ */ jsxs20("header", { className: Drawer_default.header, children: [
1319
+ /* @__PURE__ */ jsx28("h2", { id: "aegis-drawer-title", className: Drawer_default.title, children: title }),
1320
+ /* @__PURE__ */ jsx28(
1321
+ "button",
1322
+ {
1323
+ className: Drawer_default.close,
1324
+ onClick: onClose,
1325
+ "aria-label": "Close drawer",
1326
+ children: /* @__PURE__ */ jsxs20("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", "aria-hidden": "true", children: [
1327
+ /* @__PURE__ */ jsx28("line", { x1: "5", y1: "5", x2: "15", y2: "15" }),
1328
+ /* @__PURE__ */ jsx28("line", { x1: "15", y1: "5", x2: "5", y2: "15" })
1329
+ ] })
1330
+ }
1331
+ )
1332
+ ] }),
1333
+ /* @__PURE__ */ jsx28("div", { className: Drawer_default.body, children }),
1334
+ footer && /* @__PURE__ */ jsx28("footer", { className: Drawer_default.footer, children: footer })
1335
+ ] })
1336
+ }
1337
+ );
1338
+ }
1339
+
1340
+ // src/components/DataGrid/DataGrid.tsx
1341
+ import { useCallback as useCallback3 } from "react";
1342
+
1343
+ // src/components/DataGrid/DataGrid.module.css
1344
+ var DataGrid_default = {};
1345
+
1346
+ // src/components/DataGrid/DataGrid.tsx
1347
+ import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
1348
+ function DataGrid({
1349
+ columns,
1350
+ data,
1351
+ selectable = false,
1352
+ onSelectionChange,
1353
+ selectedRows = [],
1354
+ sortColumn,
1355
+ sortDirection,
1356
+ onSort,
1357
+ loading = false,
1358
+ emptyMessage = "No data available",
1359
+ density = "default",
1360
+ stickyHeader = false,
1361
+ striped = false,
1362
+ onRowClick,
1363
+ className,
1364
+ ...props
1365
+ }) {
1366
+ const allSelected = data.length > 0 && selectedRows.length === data.length;
1367
+ const someSelected = selectedRows.length > 0 && !allSelected;
1368
+ const handleSelectAll = useCallback3(() => {
1369
+ if (!onSelectionChange) return;
1370
+ if (allSelected) {
1371
+ onSelectionChange([]);
1372
+ } else {
1373
+ onSelectionChange(data.map((_, i) => i));
1374
+ }
1375
+ }, [allSelected, data, onSelectionChange]);
1376
+ const handleSelectRow = useCallback3(
1377
+ (index) => {
1378
+ if (!onSelectionChange) return;
1379
+ if (selectedRows.includes(index)) {
1380
+ onSelectionChange(selectedRows.filter((i) => i !== index));
1381
+ } else {
1382
+ onSelectionChange([...selectedRows, index]);
1383
+ }
1384
+ },
1385
+ [selectedRows, onSelectionChange]
1386
+ );
1387
+ const handleSort = useCallback3(
1388
+ (key) => {
1389
+ if (!onSort) return;
1390
+ const newDirection = sortColumn === key && sortDirection === "asc" ? "desc" : "asc";
1391
+ onSort(key, newDirection);
1392
+ },
1393
+ [sortColumn, sortDirection, onSort]
1394
+ );
1395
+ const tableDensity = density === "comfortable" ? "default" : density;
1396
+ const getAriaSort = (key) => {
1397
+ if (sortColumn !== key) return "none";
1398
+ return sortDirection === "asc" ? "ascending" : "descending";
1399
+ };
1400
+ const getValue = (row, key) => {
1401
+ return key.split(".").reduce((obj, k) => {
1402
+ if (obj && typeof obj === "object") return obj[k];
1403
+ return void 0;
1404
+ }, row);
1405
+ };
1406
+ const loadingRows = 5;
1407
+ return /* @__PURE__ */ jsx29(
1408
+ "div",
1409
+ {
1410
+ className: cn(DataGrid_default.container, stickyHeader && DataGrid_default.stickyHeader, className),
1411
+ "aria-busy": loading,
1412
+ ...props,
1413
+ children: /* @__PURE__ */ jsxs21(
1414
+ Table,
1415
+ {
1416
+ density: tableDensity,
1417
+ striped,
1418
+ className: cn(density === "comfortable" && DataGrid_default.comfortable),
1419
+ children: [
1420
+ /* @__PURE__ */ jsx29(TableHead, { children: /* @__PURE__ */ jsxs21(TableRow, { children: [
1421
+ selectable && /* @__PURE__ */ jsx29(TableHeaderCell, { style: { width: 44 }, children: /* @__PURE__ */ jsx29(
1422
+ "input",
1423
+ {
1424
+ type: "checkbox",
1425
+ checked: allSelected,
1426
+ ref: (el) => {
1427
+ if (el) el.indeterminate = someSelected;
1428
+ },
1429
+ onChange: handleSelectAll,
1430
+ "aria-label": "Select all rows",
1431
+ className: DataGrid_default.checkbox
1432
+ }
1433
+ ) }),
1434
+ columns.map((col) => /* @__PURE__ */ jsx29(
1435
+ TableHeaderCell,
1436
+ {
1437
+ style: {
1438
+ width: col.width,
1439
+ textAlign: col.align
1440
+ },
1441
+ "aria-sort": col.sortable ? getAriaSort(col.key) : void 0,
1442
+ children: col.sortable ? /* @__PURE__ */ jsxs21(
1443
+ "button",
1444
+ {
1445
+ className: DataGrid_default.sortButton,
1446
+ onClick: () => handleSort(col.key),
1447
+ style: { textAlign: col.align },
1448
+ children: [
1449
+ col.header,
1450
+ /* @__PURE__ */ jsx29("span", { className: DataGrid_default.sortIcon, "aria-hidden": "true", children: sortColumn === col.key ? sortDirection === "asc" ? /* @__PURE__ */ jsx29("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx29("polyline", { points: "4 8 7 5 10 8" }) }) : /* @__PURE__ */ jsx29("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx29("polyline", { points: "4 6 7 9 10 6" }) }) : /* @__PURE__ */ jsxs21("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", opacity: "0.3", children: [
1451
+ /* @__PURE__ */ jsx29("polyline", { points: "4 5 7 3 10 5" }),
1452
+ /* @__PURE__ */ jsx29("polyline", { points: "4 9 7 11 10 9" })
1453
+ ] }) })
1454
+ ]
1455
+ }
1456
+ ) : col.header
1457
+ },
1458
+ col.key
1459
+ ))
1460
+ ] }) }),
1461
+ /* @__PURE__ */ jsx29(TableBody, { children: loading ? Array.from({ length: loadingRows }, (_, rowIdx) => /* @__PURE__ */ jsxs21(TableRow, { children: [
1462
+ selectable && /* @__PURE__ */ jsx29(TableCell, { children: /* @__PURE__ */ jsx29(Skeleton, { variant: "rectangular", width: 16, height: 16 }) }),
1463
+ columns.map((col) => /* @__PURE__ */ jsx29(TableCell, { children: /* @__PURE__ */ jsx29(Skeleton, { variant: "text", width: "80%" }) }, col.key))
1464
+ ] }, `skeleton-${rowIdx}`)) : data.length === 0 ? /* @__PURE__ */ jsx29("tr", { children: /* @__PURE__ */ jsx29("td", { colSpan: columns.length + (selectable ? 1 : 0), children: /* @__PURE__ */ jsx29(EmptyState, { title: emptyMessage }) }) }) : data.map((row, rowIdx) => {
1465
+ const isSelected = selectedRows.includes(rowIdx);
1466
+ return /* @__PURE__ */ jsxs21(
1467
+ TableRow,
1468
+ {
1469
+ className: cn(
1470
+ isSelected && DataGrid_default.selectedRow,
1471
+ onRowClick && DataGrid_default.clickableRow
1472
+ ),
1473
+ onClick: onRowClick ? () => onRowClick(row, rowIdx) : void 0,
1474
+ children: [
1475
+ selectable && /* @__PURE__ */ jsx29(TableCell, { children: /* @__PURE__ */ jsx29(
1476
+ "input",
1477
+ {
1478
+ type: "checkbox",
1479
+ checked: isSelected,
1480
+ onChange: (e) => {
1481
+ e.stopPropagation();
1482
+ handleSelectRow(rowIdx);
1483
+ },
1484
+ onClick: (e) => e.stopPropagation(),
1485
+ "aria-label": `Select row ${rowIdx + 1}`,
1486
+ className: DataGrid_default.checkbox
1487
+ }
1488
+ ) }),
1489
+ columns.map((col) => {
1490
+ const value = getValue(row, col.key);
1491
+ return /* @__PURE__ */ jsx29(TableCell, { style: { textAlign: col.align }, children: col.render ? col.render(value, row, rowIdx) : value }, col.key);
1492
+ })
1493
+ ]
1494
+ },
1495
+ rowIdx
1496
+ );
1497
+ }) })
1498
+ ]
1499
+ }
1500
+ )
1501
+ }
1502
+ );
1503
+ }
1504
+
1505
+ // src/components/FormField/FormField.tsx
1506
+ import { useId } from "react";
1507
+
1508
+ // src/components/FormField/FormField.module.css
1509
+ var FormField_default = {};
1510
+
1511
+ // src/components/FormField/FormField.tsx
1512
+ import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
1513
+ function FormField({
1514
+ label,
1515
+ htmlFor,
1516
+ required,
1517
+ error,
1518
+ helperText,
1519
+ children,
1520
+ disabled,
1521
+ className
1522
+ }) {
1523
+ const generatedId = useId();
1524
+ const descriptionId = `${generatedId}-description`;
1525
+ const hasDescription = Boolean(error || helperText);
1526
+ return /* @__PURE__ */ jsxs22("div", { className: cn(FormField_default.formField, disabled && FormField_default.disabled, className), children: [
1527
+ label && /* @__PURE__ */ jsx30(Label, { htmlFor, required, children: label }),
1528
+ /* @__PURE__ */ jsx30("div", { className: FormField_default.control, "data-describedby": hasDescription ? descriptionId : void 0, children }),
1529
+ (error || helperText) && /* @__PURE__ */ jsx30(HelperText, { id: descriptionId, error: Boolean(error), children: error || helperText })
1530
+ ] });
1531
+ }
1532
+
1533
+ // src/components/SearchField/SearchField.tsx
1534
+ import { forwardRef as forwardRef9 } from "react";
1535
+
1536
+ // src/components/SearchField/SearchField.module.css
1537
+ var SearchField_default = {};
1538
+
1539
+ // src/components/SearchField/SearchField.tsx
1540
+ import { jsx as jsx31, jsxs as jsxs23 } from "react/jsx-runtime";
1541
+ var SearchField = forwardRef9(
1542
+ ({
1543
+ size = "md",
1544
+ error = false,
1545
+ fullWidth = false,
1546
+ onClear,
1547
+ showClearButton = true,
1548
+ className,
1549
+ value,
1550
+ defaultValue,
1551
+ ...props
1552
+ }, ref) => {
1553
+ const hasValue = Boolean(value || defaultValue);
1554
+ return /* @__PURE__ */ jsxs23("div", { className: cn(SearchField_default.wrapper, SearchField_default[size], fullWidth && SearchField_default.fullWidth, className), children: [
1555
+ /* @__PURE__ */ jsxs23(
1556
+ "svg",
1557
+ {
1558
+ className: SearchField_default.searchIcon,
1559
+ width: "16",
1560
+ height: "16",
1561
+ viewBox: "0 0 16 16",
1562
+ fill: "none",
1563
+ stroke: "currentColor",
1564
+ strokeWidth: "2",
1565
+ strokeLinecap: "round",
1566
+ strokeLinejoin: "round",
1567
+ "aria-hidden": "true",
1568
+ children: [
1569
+ /* @__PURE__ */ jsx31("circle", { cx: "6.5", cy: "6.5", r: "5.5" }),
1570
+ /* @__PURE__ */ jsx31("path", { d: "M11 11l4 4" })
1571
+ ]
1572
+ }
1573
+ ),
1574
+ /* @__PURE__ */ jsx31(
1575
+ "input",
1576
+ {
1577
+ ref,
1578
+ type: "search",
1579
+ role: "searchbox",
1580
+ className: cn(SearchField_default.input, error && SearchField_default.error),
1581
+ value,
1582
+ defaultValue,
1583
+ "aria-invalid": error || void 0,
1584
+ ...props
1585
+ }
1586
+ ),
1587
+ showClearButton && hasValue && onClear && /* @__PURE__ */ jsx31(
1588
+ "button",
1589
+ {
1590
+ type: "button",
1591
+ className: SearchField_default.clearButton,
1592
+ onClick: onClear,
1593
+ "aria-label": "Clear search",
1594
+ tabIndex: -1,
1595
+ children: /* @__PURE__ */ jsx31(
1596
+ "svg",
1597
+ {
1598
+ width: "14",
1599
+ height: "14",
1600
+ viewBox: "0 0 14 14",
1601
+ fill: "none",
1602
+ stroke: "currentColor",
1603
+ strokeWidth: "2",
1604
+ strokeLinecap: "round",
1605
+ "aria-hidden": "true",
1606
+ children: /* @__PURE__ */ jsx31("path", { d: "M3 3l8 8M11 3l-8 8" })
1607
+ }
1608
+ )
1609
+ }
1610
+ )
1611
+ ] });
1612
+ }
1613
+ );
1614
+ SearchField.displayName = "SearchField";
1615
+
1616
+ // src/components/NumberField/NumberField.tsx
1617
+ import { forwardRef as forwardRef10, useCallback as useCallback4 } from "react";
1618
+
1619
+ // src/components/NumberField/NumberField.module.css
1620
+ var NumberField_default = {};
1621
+
1622
+ // src/components/NumberField/NumberField.tsx
1623
+ import { jsx as jsx32, jsxs as jsxs24 } from "react/jsx-runtime";
1624
+ var NumberField = forwardRef10(
1625
+ ({
1626
+ value,
1627
+ onChange,
1628
+ min,
1629
+ max,
1630
+ step = 1,
1631
+ size = "md",
1632
+ error = false,
1633
+ disabled = false,
1634
+ prefix,
1635
+ suffix,
1636
+ className,
1637
+ ...props
1638
+ }, ref) => {
1639
+ const clamp = useCallback4(
1640
+ (v) => {
1641
+ let clamped = v;
1642
+ if (min !== void 0) clamped = Math.max(min, clamped);
1643
+ if (max !== void 0) clamped = Math.min(max, clamped);
1644
+ return clamped;
1645
+ },
1646
+ [min, max]
1647
+ );
1648
+ const handleChange = useCallback4(
1649
+ (e) => {
1650
+ const raw = parseFloat(e.target.value);
1651
+ if (!isNaN(raw)) onChange?.(clamp(raw));
1652
+ },
1653
+ [onChange, clamp]
1654
+ );
1655
+ const increment = useCallback4(() => {
1656
+ if (disabled) return;
1657
+ const current = value ?? 0;
1658
+ onChange?.(clamp(current + step));
1659
+ }, [value, step, onChange, clamp, disabled]);
1660
+ const decrement = useCallback4(() => {
1661
+ if (disabled) return;
1662
+ const current = value ?? 0;
1663
+ onChange?.(clamp(current - step));
1664
+ }, [value, step, onChange, clamp, disabled]);
1665
+ const atMin = min !== void 0 && value !== void 0 && value <= min;
1666
+ const atMax = max !== void 0 && value !== void 0 && value >= max;
1667
+ return /* @__PURE__ */ jsxs24(
1668
+ "div",
1669
+ {
1670
+ className: cn(
1671
+ NumberField_default.wrapper,
1672
+ NumberField_default[size],
1673
+ error && NumberField_default.error,
1674
+ disabled && NumberField_default.disabled,
1675
+ className
1676
+ ),
1677
+ children: [
1678
+ prefix && /* @__PURE__ */ jsx32("span", { className: NumberField_default.prefix, children: prefix }),
1679
+ /* @__PURE__ */ jsx32(
1680
+ "input",
1681
+ {
1682
+ ref,
1683
+ type: "number",
1684
+ className: NumberField_default.input,
1685
+ value: value ?? "",
1686
+ onChange: handleChange,
1687
+ min,
1688
+ max,
1689
+ step,
1690
+ disabled,
1691
+ "aria-invalid": error || void 0,
1692
+ ...props
1693
+ }
1694
+ ),
1695
+ suffix && /* @__PURE__ */ jsx32("span", { className: NumberField_default.suffix, children: suffix }),
1696
+ /* @__PURE__ */ jsxs24("div", { className: NumberField_default.buttons, children: [
1697
+ /* @__PURE__ */ jsx32(
1698
+ "button",
1699
+ {
1700
+ type: "button",
1701
+ className: NumberField_default.button,
1702
+ onClick: increment,
1703
+ disabled: disabled || atMax,
1704
+ "aria-label": "Increment",
1705
+ tabIndex: -1,
1706
+ children: /* @__PURE__ */ jsx32("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx32("path", { d: "M2 6.5L5 3.5L8 6.5" }) })
1707
+ }
1708
+ ),
1709
+ /* @__PURE__ */ jsx32(
1710
+ "button",
1711
+ {
1712
+ type: "button",
1713
+ className: NumberField_default.button,
1714
+ onClick: decrement,
1715
+ disabled: disabled || atMin,
1716
+ "aria-label": "Decrement",
1717
+ tabIndex: -1,
1718
+ children: /* @__PURE__ */ jsx32("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx32("path", { d: "M2 3.5L5 6.5L8 3.5" }) })
1719
+ }
1720
+ )
1721
+ ] })
1722
+ ]
1723
+ }
1724
+ );
1725
+ }
1726
+ );
1727
+ NumberField.displayName = "NumberField";
1728
+
1729
+ // src/components/CheckboxGroup/CheckboxGroup.tsx
1730
+ import { useCallback as useCallback5 } from "react";
1731
+
1732
+ // src/components/CheckboxGroup/CheckboxGroup.module.css
1733
+ var CheckboxGroup_default = {};
1734
+
1735
+ // src/components/CheckboxGroup/CheckboxGroup.tsx
1736
+ import { jsx as jsx33, jsxs as jsxs25 } from "react/jsx-runtime";
1737
+ function CheckboxGroup({
1738
+ label,
1739
+ name,
1740
+ options,
1741
+ value = [],
1742
+ onChange,
1743
+ error,
1744
+ orientation = "vertical",
1745
+ disabled = false,
1746
+ className
1747
+ }) {
1748
+ const handleChange = useCallback5(
1749
+ (optionValue, checked) => {
1750
+ if (!onChange) return;
1751
+ const next = checked ? [...value, optionValue] : value.filter((v) => v !== optionValue);
1752
+ onChange(next);
1753
+ },
1754
+ [value, onChange]
1755
+ );
1756
+ return /* @__PURE__ */ jsxs25(
1757
+ "fieldset",
1758
+ {
1759
+ className: cn(CheckboxGroup_default.fieldset, className),
1760
+ disabled,
1761
+ children: [
1762
+ /* @__PURE__ */ jsx33("legend", { className: CheckboxGroup_default.legend, children: label }),
1763
+ /* @__PURE__ */ jsx33("div", { className: cn(CheckboxGroup_default.options, CheckboxGroup_default[orientation]), children: options.map((opt) => /* @__PURE__ */ jsx33(
1764
+ Checkbox,
1765
+ {
1766
+ name,
1767
+ label: opt.label,
1768
+ value: opt.value,
1769
+ checked: value.includes(opt.value),
1770
+ onChange: (e) => handleChange(opt.value, e.target.checked),
1771
+ disabled: opt.disabled || disabled,
1772
+ error: Boolean(error)
1773
+ },
1774
+ opt.value
1775
+ )) }),
1776
+ error && /* @__PURE__ */ jsx33(HelperText, { error: true, children: error })
1777
+ ]
1778
+ }
1779
+ );
1780
+ }
1781
+
1782
+ // src/components/RadioGroup/RadioGroup.tsx
1783
+ import { useCallback as useCallback6 } from "react";
1784
+
1785
+ // src/components/RadioGroup/RadioGroup.module.css
1786
+ var RadioGroup_default = {};
1787
+
1788
+ // src/components/RadioGroup/RadioGroup.tsx
1789
+ import { jsx as jsx34, jsxs as jsxs26 } from "react/jsx-runtime";
1790
+ function RadioGroup({
1791
+ label,
1792
+ name,
1793
+ options,
1794
+ value,
1795
+ onChange,
1796
+ error,
1797
+ orientation = "vertical",
1798
+ disabled = false,
1799
+ className
1800
+ }) {
1801
+ const handleChange = useCallback6(
1802
+ (optionValue) => {
1803
+ onChange?.(optionValue);
1804
+ },
1805
+ [onChange]
1806
+ );
1807
+ return /* @__PURE__ */ jsxs26(
1808
+ "fieldset",
1809
+ {
1810
+ className: cn(RadioGroup_default.fieldset, className),
1811
+ disabled,
1812
+ children: [
1813
+ /* @__PURE__ */ jsx34("legend", { className: RadioGroup_default.legend, children: label }),
1814
+ /* @__PURE__ */ jsx34("div", { className: cn(RadioGroup_default.options, RadioGroup_default[orientation]), children: options.map((opt) => /* @__PURE__ */ jsx34(
1815
+ Radio,
1816
+ {
1817
+ name,
1818
+ label: opt.label,
1819
+ value: opt.value,
1820
+ checked: value === opt.value,
1821
+ onChange: () => handleChange(opt.value),
1822
+ disabled: opt.disabled || disabled,
1823
+ error: Boolean(error)
1824
+ },
1825
+ opt.value
1826
+ )) }),
1827
+ error && /* @__PURE__ */ jsx34(HelperText, { error: true, children: error })
1828
+ ]
1829
+ }
1830
+ );
1831
+ }
1832
+
1833
+ // src/components/Slider/Slider.tsx
1834
+ import { forwardRef as forwardRef11, useId as useId2 } from "react";
1835
+
1836
+ // src/components/Slider/Slider.module.css
1837
+ var Slider_default = {};
1838
+
1839
+ // src/components/Slider/Slider.tsx
1840
+ import { jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
1841
+ var Slider = forwardRef11(
1842
+ ({
1843
+ value,
1844
+ onChange,
1845
+ min = 0,
1846
+ max = 100,
1847
+ step = 1,
1848
+ disabled = false,
1849
+ size = "md",
1850
+ label,
1851
+ showValue = false,
1852
+ className,
1853
+ id,
1854
+ ...props
1855
+ }, ref) => {
1856
+ const generatedId = useId2();
1857
+ const inputId = id || generatedId;
1858
+ const current = value ?? min;
1859
+ const percentage = (current - min) / (max - min) * 100;
1860
+ return /* @__PURE__ */ jsxs27("div", { className: cn(Slider_default.wrapper, Slider_default[size], disabled && Slider_default.disabled, className), children: [
1861
+ label && /* @__PURE__ */ jsxs27("div", { className: Slider_default.header, children: [
1862
+ /* @__PURE__ */ jsx35("label", { htmlFor: inputId, className: Slider_default.label, children: label }),
1863
+ showValue && /* @__PURE__ */ jsx35("span", { className: Slider_default.value, "aria-hidden": "true", children: current })
1864
+ ] }),
1865
+ !label && showValue && /* @__PURE__ */ jsx35("span", { className: Slider_default.value, "aria-hidden": "true", children: current }),
1866
+ /* @__PURE__ */ jsx35(
1867
+ "input",
1868
+ {
1869
+ ref,
1870
+ id: inputId,
1871
+ type: "range",
1872
+ className: Slider_default.input,
1873
+ value,
1874
+ onChange: (e) => onChange?.(Number(e.target.value)),
1875
+ min,
1876
+ max,
1877
+ step,
1878
+ disabled,
1879
+ style: { "--slider-fill": `${percentage}%` },
1880
+ ...props
1881
+ }
1882
+ )
1883
+ ] });
1884
+ }
1885
+ );
1886
+ Slider.displayName = "Slider";
1887
+
1888
+ // src/components/FileUpload/FileUpload.tsx
1889
+ import { useCallback as useCallback7, useRef as useRef6, useState as useState5 } from "react";
1890
+
1891
+ // src/components/FileUpload/FileUpload.module.css
1892
+ var FileUpload_default = {};
1893
+
1894
+ // src/components/FileUpload/FileUpload.tsx
1895
+ import { jsx as jsx36, jsxs as jsxs28 } from "react/jsx-runtime";
1896
+ function formatFileSize(bytes) {
1897
+ if (bytes < 1024) return `${bytes} B`;
1898
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
1899
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
1900
+ }
1901
+ function FileUpload({
1902
+ accept,
1903
+ multiple = false,
1904
+ maxSize,
1905
+ onFilesSelected,
1906
+ disabled = false,
1907
+ error,
1908
+ className
1909
+ }) {
1910
+ const inputRef = useRef6(null);
1911
+ const [isDragging, setIsDragging] = useState5(false);
1912
+ const [files, setFiles] = useState5([]);
1913
+ const [sizeError, setSizeError] = useState5(null);
1914
+ const processFiles = useCallback7(
1915
+ (fileList) => {
1916
+ if (!fileList) return;
1917
+ const selected = Array.from(fileList);
1918
+ if (maxSize) {
1919
+ const oversized = selected.filter((f) => f.size > maxSize);
1920
+ if (oversized.length > 0) {
1921
+ setSizeError(`File(s) exceed maximum size of ${formatFileSize(maxSize)}`);
1922
+ return;
1923
+ }
1924
+ }
1925
+ setSizeError(null);
1926
+ setFiles(selected);
1927
+ onFilesSelected?.(selected);
1928
+ },
1929
+ [maxSize, onFilesSelected]
1930
+ );
1931
+ const handleClick = () => {
1932
+ if (!disabled) inputRef.current?.click();
1933
+ };
1934
+ const handleKeyDown = (e) => {
1935
+ if (e.key === "Enter" || e.key === " ") {
1936
+ e.preventDefault();
1937
+ handleClick();
1938
+ }
1939
+ };
1940
+ const handleDragOver = (e) => {
1941
+ e.preventDefault();
1942
+ if (!disabled) setIsDragging(true);
1943
+ };
1944
+ const handleDragLeave = (e) => {
1945
+ e.preventDefault();
1946
+ setIsDragging(false);
1947
+ };
1948
+ const handleDrop = (e) => {
1949
+ e.preventDefault();
1950
+ setIsDragging(false);
1951
+ if (!disabled) processFiles(e.dataTransfer.files);
1952
+ };
1953
+ const handleInputChange = (e) => {
1954
+ processFiles(e.target.files);
1955
+ };
1956
+ const removeFile = (index) => {
1957
+ const next = files.filter((_, i) => i !== index);
1958
+ setFiles(next);
1959
+ onFilesSelected?.(next);
1960
+ };
1961
+ const displayError = error || sizeError;
1962
+ return /* @__PURE__ */ jsxs28("div", { className: cn(FileUpload_default.container, className), children: [
1963
+ /* @__PURE__ */ jsxs28(
1964
+ "div",
1965
+ {
1966
+ className: cn(
1967
+ FileUpload_default.dropzone,
1968
+ isDragging && FileUpload_default.dragging,
1969
+ disabled && FileUpload_default.disabled,
1970
+ displayError && FileUpload_default.error
1971
+ ),
1972
+ role: "button",
1973
+ tabIndex: disabled ? -1 : 0,
1974
+ onClick: handleClick,
1975
+ onKeyDown: handleKeyDown,
1976
+ onDragOver: handleDragOver,
1977
+ onDragLeave: handleDragLeave,
1978
+ onDrop: handleDrop,
1979
+ "aria-label": `Upload file${multiple ? "s" : ""}`,
1980
+ "aria-disabled": disabled,
1981
+ children: [
1982
+ /* @__PURE__ */ jsxs28(
1983
+ "svg",
1984
+ {
1985
+ className: FileUpload_default.icon,
1986
+ width: "32",
1987
+ height: "32",
1988
+ viewBox: "0 0 32 32",
1989
+ fill: "none",
1990
+ stroke: "currentColor",
1991
+ strokeWidth: "2",
1992
+ strokeLinecap: "round",
1993
+ strokeLinejoin: "round",
1994
+ "aria-hidden": "true",
1995
+ children: [
1996
+ /* @__PURE__ */ jsx36("path", { d: "M16 20V8M16 8l-5 5M16 8l5 5" }),
1997
+ /* @__PURE__ */ jsx36("path", { d: "M4 22v4a2 2 0 002 2h20a2 2 0 002-2v-4" })
1998
+ ]
1999
+ }
2000
+ ),
2001
+ /* @__PURE__ */ jsxs28("p", { className: FileUpload_default.text, children: [
2002
+ /* @__PURE__ */ jsx36("span", { className: FileUpload_default.link, children: "Click to upload" }),
2003
+ " or drag and drop"
2004
+ ] }),
2005
+ accept && /* @__PURE__ */ jsx36("p", { className: FileUpload_default.hint, children: accept.replace(/,/g, ", ") }),
2006
+ maxSize && /* @__PURE__ */ jsxs28("p", { className: FileUpload_default.hint, children: [
2007
+ "Max size: ",
2008
+ formatFileSize(maxSize)
2009
+ ] })
2010
+ ]
2011
+ }
2012
+ ),
2013
+ /* @__PURE__ */ jsx36(
2014
+ "input",
2015
+ {
2016
+ ref: inputRef,
2017
+ type: "file",
2018
+ className: FileUpload_default.input,
2019
+ accept,
2020
+ multiple,
2021
+ onChange: handleInputChange,
2022
+ disabled,
2023
+ tabIndex: -1,
2024
+ "aria-hidden": "true"
2025
+ }
2026
+ ),
2027
+ files.length > 0 && /* @__PURE__ */ jsx36("ul", { className: FileUpload_default.fileList, "aria-label": "Selected files", children: files.map((file, i) => /* @__PURE__ */ jsxs28("li", { className: FileUpload_default.fileItem, children: [
2028
+ /* @__PURE__ */ jsxs28(
2029
+ "svg",
2030
+ {
2031
+ width: "16",
2032
+ height: "16",
2033
+ viewBox: "0 0 16 16",
2034
+ fill: "none",
2035
+ stroke: "currentColor",
2036
+ strokeWidth: "1.5",
2037
+ strokeLinecap: "round",
2038
+ strokeLinejoin: "round",
2039
+ "aria-hidden": "true",
2040
+ children: [
2041
+ /* @__PURE__ */ jsx36("path", { d: "M9 1H4a1 1 0 00-1 1v12a1 1 0 001 1h8a1 1 0 001-1V5L9 1z" }),
2042
+ /* @__PURE__ */ jsx36("path", { d: "M9 1v4h4" })
2043
+ ]
2044
+ }
2045
+ ),
2046
+ /* @__PURE__ */ jsx36("span", { className: FileUpload_default.fileName, children: file.name }),
2047
+ /* @__PURE__ */ jsx36("span", { className: FileUpload_default.fileSize, children: formatFileSize(file.size) }),
2048
+ /* @__PURE__ */ jsx36(
2049
+ "button",
2050
+ {
2051
+ type: "button",
2052
+ className: FileUpload_default.removeButton,
2053
+ onClick: () => removeFile(i),
2054
+ "aria-label": `Remove ${file.name}`,
2055
+ children: /* @__PURE__ */ jsx36("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx36("path", { d: "M2 2l8 8M10 2l-8 8" }) })
2056
+ }
2057
+ )
2058
+ ] }, `${file.name}-${i}`)) }),
2059
+ displayError && /* @__PURE__ */ jsx36(HelperText, { error: true, children: displayError })
2060
+ ] });
2061
+ }
2062
+
2063
+ // src/components/OTPInput/OTPInput.tsx
2064
+ import { useCallback as useCallback8, useRef as useRef7, useEffect as useEffect4 } from "react";
2065
+
2066
+ // src/components/OTPInput/OTPInput.module.css
2067
+ var OTPInput_default = {};
2068
+
2069
+ // src/components/OTPInput/OTPInput.tsx
2070
+ import { jsx as jsx37 } from "react/jsx-runtime";
2071
+ function OTPInput({
2072
+ length = 6,
2073
+ value = "",
2074
+ onChange,
2075
+ error = false,
2076
+ disabled = false,
2077
+ autoFocus = false,
2078
+ className
2079
+ }) {
2080
+ const inputRefs = useRef7([]);
2081
+ useEffect4(() => {
2082
+ if (autoFocus && inputRefs.current[0]) {
2083
+ inputRefs.current[0].focus();
2084
+ }
2085
+ }, [autoFocus]);
2086
+ const focusInput = useCallback8((index) => {
2087
+ if (index >= 0 && index < length) {
2088
+ inputRefs.current[index]?.focus();
2089
+ inputRefs.current[index]?.select();
2090
+ }
2091
+ }, [length]);
2092
+ const updateValue = useCallback8(
2093
+ (newValue) => {
2094
+ onChange?.(newValue.slice(0, length));
2095
+ },
2096
+ [onChange, length]
2097
+ );
2098
+ const handleInput = useCallback8(
2099
+ (index, digit) => {
2100
+ if (!/^\d$/.test(digit)) return;
2101
+ const chars = value.split("");
2102
+ while (chars.length < length) chars.push("");
2103
+ chars[index] = digit;
2104
+ updateValue(chars.join(""));
2105
+ if (index < length - 1) {
2106
+ focusInput(index + 1);
2107
+ }
2108
+ },
2109
+ [value, length, updateValue, focusInput]
2110
+ );
2111
+ const handleKeyDown = useCallback8(
2112
+ (index, e) => {
2113
+ if (e.key === "Backspace") {
2114
+ e.preventDefault();
2115
+ const chars = value.split("");
2116
+ while (chars.length < length) chars.push("");
2117
+ if (chars[index]) {
2118
+ chars[index] = "";
2119
+ updateValue(chars.join(""));
2120
+ } else if (index > 0) {
2121
+ chars[index - 1] = "";
2122
+ updateValue(chars.join(""));
2123
+ focusInput(index - 1);
2124
+ }
2125
+ } else if (e.key === "ArrowLeft") {
2126
+ e.preventDefault();
2127
+ focusInput(index - 1);
2128
+ } else if (e.key === "ArrowRight") {
2129
+ e.preventDefault();
2130
+ focusInput(index + 1);
2131
+ }
2132
+ },
2133
+ [value, length, updateValue, focusInput]
2134
+ );
2135
+ const handlePaste = useCallback8(
2136
+ (e) => {
2137
+ e.preventDefault();
2138
+ const pasted = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, length);
2139
+ if (pasted) {
2140
+ updateValue(pasted);
2141
+ focusInput(Math.min(pasted.length, length - 1));
2142
+ }
2143
+ },
2144
+ [length, updateValue, focusInput]
2145
+ );
2146
+ return /* @__PURE__ */ jsx37("div", { className: cn(OTPInput_default.wrapper, error && OTPInput_default.error, disabled && OTPInput_default.disabled, className), role: "group", "aria-label": "One-time password", children: Array.from({ length }, (_, i) => /* @__PURE__ */ jsx37(
2147
+ "input",
2148
+ {
2149
+ ref: (el) => {
2150
+ inputRefs.current[i] = el;
2151
+ },
2152
+ type: "text",
2153
+ inputMode: "numeric",
2154
+ autoComplete: "one-time-code",
2155
+ maxLength: 1,
2156
+ className: OTPInput_default.digit,
2157
+ value: value[i] || "",
2158
+ onChange: (e) => {
2159
+ const v = e.target.value;
2160
+ if (v.length <= 1) handleInput(i, v);
2161
+ },
2162
+ onKeyDown: (e) => handleKeyDown(i, e),
2163
+ onPaste: handlePaste,
2164
+ onFocus: (e) => e.target.select(),
2165
+ disabled,
2166
+ "aria-label": `Digit ${i + 1} of ${length}`,
2167
+ "aria-invalid": error || void 0
2168
+ },
2169
+ i
2170
+ )) });
2171
+ }
2172
+
2173
+ // src/components/DatePicker/DatePicker.tsx
2174
+ import { forwardRef as forwardRef12 } from "react";
2175
+
2176
+ // src/components/DatePicker/DatePicker.module.css
2177
+ var DatePicker_default = {};
2178
+
2179
+ // src/components/DatePicker/DatePicker.tsx
2180
+ import { jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
2181
+ var DatePicker = forwardRef12(
2182
+ ({ size = "md", error = false, fullWidth = false, className, min, max, ...props }, ref) => /* @__PURE__ */ jsxs29("div", { className: cn(DatePicker_default.wrapper, DatePicker_default[size], fullWidth && DatePicker_default.fullWidth, className), children: [
2183
+ /* @__PURE__ */ jsx38(
2184
+ "input",
2185
+ {
2186
+ ref,
2187
+ type: "date",
2188
+ className: cn(DatePicker_default.input, error && DatePicker_default.error),
2189
+ min,
2190
+ max,
2191
+ "aria-invalid": error || void 0,
2192
+ ...props
2193
+ }
2194
+ ),
2195
+ /* @__PURE__ */ jsxs29(
2196
+ "svg",
2197
+ {
2198
+ className: DatePicker_default.icon,
2199
+ width: "16",
2200
+ height: "16",
2201
+ viewBox: "0 0 16 16",
2202
+ fill: "none",
2203
+ stroke: "currentColor",
2204
+ strokeWidth: "1.5",
2205
+ strokeLinecap: "round",
2206
+ strokeLinejoin: "round",
2207
+ "aria-hidden": "true",
2208
+ children: [
2209
+ /* @__PURE__ */ jsx38("rect", { x: "2", y: "3", width: "12", height: "11", rx: "1" }),
2210
+ /* @__PURE__ */ jsx38("path", { d: "M5 1v3M11 1v3M2 7h12" })
2211
+ ]
2212
+ }
2213
+ )
2214
+ ] })
2215
+ );
2216
+ DatePicker.displayName = "DatePicker";
2217
+
2218
+ // src/components/MultiSelect/MultiSelect.tsx
2219
+ import { useState as useState6, useRef as useRef8, useCallback as useCallback9, useEffect as useEffect5, useId as useId3 } from "react";
2220
+
2221
+ // src/components/MultiSelect/MultiSelect.module.css
2222
+ var MultiSelect_default = {};
2223
+
2224
+ // src/components/MultiSelect/MultiSelect.tsx
2225
+ import { jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
2226
+ function MultiSelect({
2227
+ options,
2228
+ value = [],
2229
+ onChange,
2230
+ placeholder = "Select...",
2231
+ disabled = false,
2232
+ error = false,
2233
+ size = "md",
2234
+ maxDisplayedTags,
2235
+ className
2236
+ }) {
2237
+ const [isOpen, setIsOpen] = useState6(false);
2238
+ const [focusedIndex, setFocusedIndex] = useState6(-1);
2239
+ const wrapperRef = useRef8(null);
2240
+ const listboxId = useId3();
2241
+ const toggle = useCallback9(
2242
+ (optionValue) => {
2243
+ if (!onChange) return;
2244
+ const next = value.includes(optionValue) ? value.filter((v) => v !== optionValue) : [...value, optionValue];
2245
+ onChange(next);
2246
+ },
2247
+ [value, onChange]
2248
+ );
2249
+ const removeTag = useCallback9(
2250
+ (optionValue) => {
2251
+ onChange?.(value.filter((v) => v !== optionValue));
2252
+ },
2253
+ [value, onChange]
2254
+ );
2255
+ const handleKeyDown = useCallback9(
2256
+ (e) => {
2257
+ if (disabled) return;
2258
+ switch (e.key) {
2259
+ case "Enter":
2260
+ case " ":
2261
+ e.preventDefault();
2262
+ if (isOpen && focusedIndex >= 0) {
2263
+ toggle(options[focusedIndex].value);
2264
+ } else {
2265
+ setIsOpen(!isOpen);
2266
+ }
2267
+ break;
2268
+ case "Escape":
2269
+ e.preventDefault();
2270
+ setIsOpen(false);
2271
+ break;
2272
+ case "ArrowDown":
2273
+ e.preventDefault();
2274
+ if (!isOpen) {
2275
+ setIsOpen(true);
2276
+ setFocusedIndex(0);
2277
+ } else {
2278
+ setFocusedIndex((prev) => Math.min(prev + 1, options.length - 1));
2279
+ }
2280
+ break;
2281
+ case "ArrowUp":
2282
+ e.preventDefault();
2283
+ setFocusedIndex((prev) => Math.max(prev - 1, 0));
2284
+ break;
2285
+ case "Backspace":
2286
+ if (value.length > 0) {
2287
+ onChange?.(value.slice(0, -1));
2288
+ }
2289
+ break;
2290
+ }
2291
+ },
2292
+ [disabled, isOpen, focusedIndex, options, value, onChange, toggle]
2293
+ );
2294
+ useEffect5(() => {
2295
+ if (!isOpen) return;
2296
+ const handleClick = (e) => {
2297
+ if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {
2298
+ setIsOpen(false);
2299
+ }
2300
+ };
2301
+ document.addEventListener("mousedown", handleClick);
2302
+ return () => document.removeEventListener("mousedown", handleClick);
2303
+ }, [isOpen]);
2304
+ const selectedLabels = value.map((v) => options.find((o) => o.value === v)).filter(Boolean);
2305
+ const displayedTags = maxDisplayedTags ? selectedLabels.slice(0, maxDisplayedTags) : selectedLabels;
2306
+ const hiddenCount = maxDisplayedTags ? Math.max(0, selectedLabels.length - maxDisplayedTags) : 0;
2307
+ return /* @__PURE__ */ jsxs30("div", { ref: wrapperRef, className: cn(MultiSelect_default.wrapper, MultiSelect_default[size], className), children: [
2308
+ /* @__PURE__ */ jsxs30(
2309
+ "div",
2310
+ {
2311
+ className: cn(
2312
+ MultiSelect_default.control,
2313
+ isOpen && MultiSelect_default.open,
2314
+ error && MultiSelect_default.error,
2315
+ disabled && MultiSelect_default.disabled
2316
+ ),
2317
+ role: "combobox",
2318
+ "aria-expanded": isOpen,
2319
+ "aria-haspopup": "listbox",
2320
+ "aria-controls": listboxId,
2321
+ "aria-disabled": disabled,
2322
+ tabIndex: disabled ? -1 : 0,
2323
+ onClick: () => !disabled && setIsOpen(!isOpen),
2324
+ onKeyDown: handleKeyDown,
2325
+ children: [
2326
+ /* @__PURE__ */ jsxs30("div", { className: MultiSelect_default.tags, children: [
2327
+ displayedTags.length === 0 && /* @__PURE__ */ jsx39("span", { className: MultiSelect_default.placeholder, children: placeholder }),
2328
+ displayedTags.map((opt) => /* @__PURE__ */ jsxs30("span", { className: MultiSelect_default.tag, children: [
2329
+ opt.label,
2330
+ /* @__PURE__ */ jsx39(
2331
+ "button",
2332
+ {
2333
+ type: "button",
2334
+ className: MultiSelect_default.tagRemove,
2335
+ onClick: (e) => {
2336
+ e.stopPropagation();
2337
+ removeTag(opt.value);
2338
+ },
2339
+ "aria-label": `Remove ${opt.label}`,
2340
+ tabIndex: -1,
2341
+ children: /* @__PURE__ */ jsx39("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx39("path", { d: "M2 2l6 6M8 2l-6 6" }) })
2342
+ }
2343
+ )
2344
+ ] }, opt.value)),
2345
+ hiddenCount > 0 && /* @__PURE__ */ jsxs30("span", { className: MultiSelect_default.moreTag, children: [
2346
+ "+",
2347
+ hiddenCount,
2348
+ " more"
2349
+ ] })
2350
+ ] }),
2351
+ /* @__PURE__ */ jsx39(
2352
+ "svg",
2353
+ {
2354
+ className: cn(MultiSelect_default.chevron, isOpen && MultiSelect_default.chevronOpen),
2355
+ width: "14",
2356
+ height: "14",
2357
+ viewBox: "0 0 14 14",
2358
+ fill: "none",
2359
+ stroke: "currentColor",
2360
+ strokeWidth: "2",
2361
+ strokeLinecap: "round",
2362
+ "aria-hidden": "true",
2363
+ children: /* @__PURE__ */ jsx39("path", { d: "M3 5l4 4 4-4" })
2364
+ }
2365
+ )
2366
+ ]
2367
+ }
2368
+ ),
2369
+ isOpen && /* @__PURE__ */ jsx39("ul", { id: listboxId, className: MultiSelect_default.dropdown, role: "listbox", "aria-multiselectable": "true", children: options.map((opt, i) => {
2370
+ const isSelected = value.includes(opt.value);
2371
+ const isFocused = i === focusedIndex;
2372
+ return /* @__PURE__ */ jsxs30(
2373
+ "li",
2374
+ {
2375
+ className: cn(MultiSelect_default.option, isFocused && MultiSelect_default.optionFocused),
2376
+ role: "option",
2377
+ "aria-selected": isSelected,
2378
+ onClick: () => toggle(opt.value),
2379
+ children: [
2380
+ /* @__PURE__ */ jsx39("span", { className: cn(MultiSelect_default.checkbox, isSelected && MultiSelect_default.checkboxChecked), "aria-hidden": "true", children: isSelected && /* @__PURE__ */ jsx39("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx39("path", { d: "M2 5l2 2 4-4" }) }) }),
2381
+ opt.label
2382
+ ]
2383
+ },
2384
+ opt.value
2385
+ );
2386
+ }) })
2387
+ ] });
2388
+ }
2389
+
2390
+ // src/components/Autocomplete/Autocomplete.tsx
2391
+ import { useState as useState7, useRef as useRef9, useCallback as useCallback10, useEffect as useEffect6, useId as useId4 } from "react";
2392
+
2393
+ // src/components/Autocomplete/Autocomplete.module.css
2394
+ var Autocomplete_default = {};
2395
+
2396
+ // src/components/Autocomplete/Autocomplete.tsx
2397
+ import { jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
2398
+ function Autocomplete({
2399
+ options,
2400
+ value,
2401
+ onChange,
2402
+ onInputChange,
2403
+ placeholder = "Search...",
2404
+ disabled = false,
2405
+ error = false,
2406
+ size = "md",
2407
+ loading = false,
2408
+ noResultsText = "No results found",
2409
+ className
2410
+ }) {
2411
+ const selectedLabel = options.find((o) => o.value === value)?.label ?? "";
2412
+ const [inputValue, setInputValue] = useState7(selectedLabel);
2413
+ const [isOpen, setIsOpen] = useState7(false);
2414
+ const [focusedIndex, setFocusedIndex] = useState7(-1);
2415
+ const wrapperRef = useRef9(null);
2416
+ const inputRef = useRef9(null);
2417
+ const listboxId = useId4();
2418
+ useEffect6(() => {
2419
+ const label = options.find((o) => o.value === value)?.label ?? "";
2420
+ setInputValue(label);
2421
+ }, [value, options]);
2422
+ const filteredOptions = options.filter(
2423
+ (opt) => opt.label.toLowerCase().includes(inputValue.toLowerCase())
2424
+ );
2425
+ const handleInputChange = useCallback10(
2426
+ (e) => {
2427
+ const val = e.target.value;
2428
+ setInputValue(val);
2429
+ setIsOpen(true);
2430
+ setFocusedIndex(-1);
2431
+ onInputChange?.(val);
2432
+ },
2433
+ [onInputChange]
2434
+ );
2435
+ const selectOption = useCallback10(
2436
+ (opt) => {
2437
+ setInputValue(opt.label);
2438
+ onChange?.(opt.value);
2439
+ setIsOpen(false);
2440
+ setFocusedIndex(-1);
2441
+ inputRef.current?.focus();
2442
+ },
2443
+ [onChange]
2444
+ );
2445
+ const handleKeyDown = useCallback10(
2446
+ (e) => {
2447
+ switch (e.key) {
2448
+ case "ArrowDown":
2449
+ e.preventDefault();
2450
+ if (!isOpen) {
2451
+ setIsOpen(true);
2452
+ setFocusedIndex(0);
2453
+ } else {
2454
+ setFocusedIndex((prev) => Math.min(prev + 1, filteredOptions.length - 1));
2455
+ }
2456
+ break;
2457
+ case "ArrowUp":
2458
+ e.preventDefault();
2459
+ setFocusedIndex((prev) => Math.max(prev - 1, 0));
2460
+ break;
2461
+ case "Enter":
2462
+ e.preventDefault();
2463
+ if (isOpen && focusedIndex >= 0 && filteredOptions[focusedIndex]) {
2464
+ selectOption(filteredOptions[focusedIndex]);
2465
+ }
2466
+ break;
2467
+ case "Escape":
2468
+ e.preventDefault();
2469
+ setIsOpen(false);
2470
+ setFocusedIndex(-1);
2471
+ break;
2472
+ }
2473
+ },
2474
+ [isOpen, focusedIndex, filteredOptions, selectOption]
2475
+ );
2476
+ useEffect6(() => {
2477
+ if (!isOpen) return;
2478
+ const handleClick = (e) => {
2479
+ if (wrapperRef.current && !wrapperRef.current.contains(e.target)) {
2480
+ setIsOpen(false);
2481
+ }
2482
+ };
2483
+ document.addEventListener("mousedown", handleClick);
2484
+ return () => document.removeEventListener("mousedown", handleClick);
2485
+ }, [isOpen]);
2486
+ const activeDescendant = focusedIndex >= 0 && filteredOptions[focusedIndex] ? `${listboxId}-option-${focusedIndex}` : void 0;
2487
+ return /* @__PURE__ */ jsxs31("div", { ref: wrapperRef, className: cn(Autocomplete_default.wrapper, Autocomplete_default[size], className), children: [
2488
+ /* @__PURE__ */ jsx40(
2489
+ "input",
2490
+ {
2491
+ ref: inputRef,
2492
+ type: "text",
2493
+ className: cn(Autocomplete_default.input, error && Autocomplete_default.error),
2494
+ value: inputValue,
2495
+ onChange: handleInputChange,
2496
+ onFocus: () => setIsOpen(true),
2497
+ onKeyDown: handleKeyDown,
2498
+ placeholder,
2499
+ disabled,
2500
+ role: "combobox",
2501
+ "aria-expanded": isOpen,
2502
+ "aria-haspopup": "listbox",
2503
+ "aria-controls": listboxId,
2504
+ "aria-activedescendant": activeDescendant,
2505
+ "aria-autocomplete": "list",
2506
+ "aria-invalid": error || void 0,
2507
+ autoComplete: "off"
2508
+ }
2509
+ ),
2510
+ isOpen && /* @__PURE__ */ jsxs31("ul", { id: listboxId, className: Autocomplete_default.dropdown, role: "listbox", children: [
2511
+ loading && /* @__PURE__ */ jsx40("li", { className: Autocomplete_default.message, "aria-live": "polite", children: "Loading..." }),
2512
+ !loading && filteredOptions.length === 0 && /* @__PURE__ */ jsx40("li", { className: Autocomplete_default.message, children: noResultsText }),
2513
+ !loading && filteredOptions.map((opt, i) => /* @__PURE__ */ jsx40(
2514
+ "li",
2515
+ {
2516
+ id: `${listboxId}-option-${i}`,
2517
+ className: cn(
2518
+ Autocomplete_default.option,
2519
+ i === focusedIndex && Autocomplete_default.optionFocused,
2520
+ opt.value === value && Autocomplete_default.optionSelected
2521
+ ),
2522
+ role: "option",
2523
+ "aria-selected": opt.value === value,
2524
+ onClick: () => selectOption(opt),
2525
+ children: opt.label
2526
+ },
2527
+ opt.value
2528
+ ))
2529
+ ] })
2530
+ ] });
2531
+ }
2532
+
2533
+ // src/components/Stepper/Stepper.module.css
2534
+ var Stepper_default = {};
2535
+
2536
+ // src/components/Stepper/Stepper.tsx
2537
+ import { Fragment as Fragment2, jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
2538
+ function Stepper({
2539
+ steps,
2540
+ activeStep,
2541
+ orientation = "horizontal",
2542
+ onStepClick,
2543
+ className
2544
+ }) {
2545
+ return /* @__PURE__ */ jsx41(
2546
+ "nav",
2547
+ {
2548
+ className: cn(Stepper_default.stepper, Stepper_default[orientation], className),
2549
+ "aria-label": "Progress",
2550
+ children: /* @__PURE__ */ jsx41("ol", { className: Stepper_default.list, children: steps.map((step, index) => {
2551
+ const isCompleted = index < activeStep;
2552
+ const isCurrent = index === activeStep;
2553
+ const isClickable = Boolean(onStepClick);
2554
+ const stepContent = /* @__PURE__ */ jsxs32(Fragment2, { children: [
2555
+ /* @__PURE__ */ jsx41(
2556
+ "span",
2557
+ {
2558
+ className: cn(
2559
+ Stepper_default.indicator,
2560
+ isCompleted && Stepper_default.indicatorCompleted,
2561
+ isCurrent && Stepper_default.indicatorCurrent
2562
+ ),
2563
+ children: isCompleted ? /* @__PURE__ */ jsx41(
2564
+ "svg",
2565
+ {
2566
+ width: "14",
2567
+ height: "14",
2568
+ viewBox: "0 0 14 14",
2569
+ fill: "none",
2570
+ stroke: "currentColor",
2571
+ strokeWidth: "2",
2572
+ strokeLinecap: "round",
2573
+ strokeLinejoin: "round",
2574
+ "aria-hidden": "true",
2575
+ children: /* @__PURE__ */ jsx41("path", { d: "M3 7l3 3 5-5" })
2576
+ }
2577
+ ) : /* @__PURE__ */ jsx41("span", { "aria-hidden": "true", children: index + 1 })
2578
+ }
2579
+ ),
2580
+ /* @__PURE__ */ jsxs32("span", { className: Stepper_default.content, children: [
2581
+ /* @__PURE__ */ jsx41("span", { className: cn(Stepper_default.label, isCurrent && Stepper_default.labelCurrent), children: step.label }),
2582
+ step.description && /* @__PURE__ */ jsx41("span", { className: Stepper_default.description, children: step.description })
2583
+ ] }),
2584
+ isCompleted && /* @__PURE__ */ jsx41("span", { className: Stepper_default.srOnly, children: "(completed)" }),
2585
+ isCurrent && /* @__PURE__ */ jsx41("span", { className: Stepper_default.srOnly, children: "(current step)" })
2586
+ ] });
2587
+ return /* @__PURE__ */ jsxs32("li", { className: cn(Stepper_default.step, index < steps.length - 1 && Stepper_default.stepWithConnector), children: [
2588
+ isClickable ? /* @__PURE__ */ jsx41(
2589
+ "button",
2590
+ {
2591
+ type: "button",
2592
+ className: Stepper_default.stepButton,
2593
+ onClick: () => onStepClick?.(index),
2594
+ "aria-current": isCurrent ? "step" : void 0,
2595
+ children: stepContent
2596
+ }
2597
+ ) : /* @__PURE__ */ jsx41(
2598
+ "div",
2599
+ {
2600
+ className: Stepper_default.stepButton,
2601
+ "aria-current": isCurrent ? "step" : void 0,
2602
+ children: stepContent
2603
+ }
2604
+ ),
2605
+ index < steps.length - 1 && /* @__PURE__ */ jsx41(
2606
+ "span",
2607
+ {
2608
+ className: cn(Stepper_default.connector, isCompleted && Stepper_default.connectorCompleted),
2609
+ "aria-hidden": "true"
2610
+ }
2611
+ )
2612
+ ] }, index);
2613
+ }) })
2614
+ }
2615
+ );
2616
+ }
2617
+
2618
+ // src/components/Accordion/Accordion.tsx
2619
+ import { useState as useState8, useCallback as useCallback11, useRef as useRef10, useEffect as useEffect7 } from "react";
2620
+
2621
+ // src/components/Accordion/Accordion.module.css
2622
+ var Accordion_default = {};
2623
+
2624
+ // src/components/Accordion/Accordion.tsx
2625
+ import { jsx as jsx42, jsxs as jsxs33 } from "react/jsx-runtime";
2626
+ function AccordionPanel({
2627
+ item,
2628
+ isOpen,
2629
+ onToggle
2630
+ }) {
2631
+ const contentRef = useRef10(null);
2632
+ const [height, setHeight] = useState8(isOpen ? void 0 : 0);
2633
+ useEffect7(() => {
2634
+ if (!contentRef.current) return;
2635
+ if (isOpen) {
2636
+ setHeight(contentRef.current.scrollHeight);
2637
+ const timer = setTimeout(() => setHeight(void 0), 200);
2638
+ return () => clearTimeout(timer);
2639
+ } else {
2640
+ setHeight(contentRef.current.scrollHeight);
2641
+ requestAnimationFrame(() => {
2642
+ requestAnimationFrame(() => setHeight(0));
2643
+ });
2644
+ }
2645
+ }, [isOpen]);
2646
+ const triggerId = `accordion-trigger-${item.id}`;
2647
+ const panelId = `accordion-panel-${item.id}`;
2648
+ return /* @__PURE__ */ jsxs33("div", { className: cn(Accordion_default.item, isOpen && Accordion_default.open), children: [
2649
+ /* @__PURE__ */ jsx42("h3", { className: Accordion_default.heading, children: /* @__PURE__ */ jsxs33(
2650
+ "button",
2651
+ {
2652
+ type: "button",
2653
+ id: triggerId,
2654
+ className: Accordion_default.trigger,
2655
+ "aria-expanded": isOpen,
2656
+ "aria-controls": panelId,
2657
+ onClick: () => onToggle(item.id),
2658
+ children: [
2659
+ /* @__PURE__ */ jsx42("span", { className: Accordion_default.triggerLabel, children: item.title }),
2660
+ /* @__PURE__ */ jsx42(
2661
+ "svg",
2662
+ {
2663
+ className: Accordion_default.chevron,
2664
+ width: "20",
2665
+ height: "20",
2666
+ viewBox: "0 0 20 20",
2667
+ fill: "none",
2668
+ stroke: "currentColor",
2669
+ strokeWidth: "2",
2670
+ strokeLinecap: "round",
2671
+ strokeLinejoin: "round",
2672
+ "aria-hidden": "true",
2673
+ children: /* @__PURE__ */ jsx42("polyline", { points: "6 8 10 12 14 8" })
2674
+ }
2675
+ )
2676
+ ]
2677
+ }
2678
+ ) }),
2679
+ /* @__PURE__ */ jsx42(
2680
+ "div",
2681
+ {
2682
+ id: panelId,
2683
+ role: "region",
2684
+ "aria-labelledby": triggerId,
2685
+ className: Accordion_default.panel,
2686
+ style: { height: height !== void 0 ? `${height}px` : "auto" },
2687
+ hidden: !isOpen && height === 0,
2688
+ children: /* @__PURE__ */ jsx42("div", { ref: contentRef, className: Accordion_default.panelContent, children: item.content })
2689
+ }
2690
+ )
2691
+ ] });
2692
+ }
2693
+ function Accordion({ items, allowMultiple = false, defaultOpenIds = [], className }) {
2694
+ const [openIds, setOpenIds] = useState8(new Set(defaultOpenIds));
2695
+ const handleToggle = useCallback11(
2696
+ (id) => {
2697
+ setOpenIds((prev) => {
2698
+ const next = new Set(prev);
2699
+ if (next.has(id)) {
2700
+ next.delete(id);
2701
+ } else {
2702
+ if (!allowMultiple) {
2703
+ next.clear();
2704
+ }
2705
+ next.add(id);
2706
+ }
2707
+ return next;
2708
+ });
2709
+ },
2710
+ [allowMultiple]
2711
+ );
2712
+ return /* @__PURE__ */ jsx42("div", { className: cn(Accordion_default.accordion, className), children: items.map((item) => /* @__PURE__ */ jsx42(
2713
+ AccordionPanel,
2714
+ {
2715
+ item,
2716
+ isOpen: openIds.has(item.id),
2717
+ onToggle: handleToggle
2718
+ },
2719
+ item.id
2720
+ )) });
2721
+ }
2722
+
2723
+ // src/components/Breadcrumbs/Breadcrumbs.module.css
2724
+ var Breadcrumbs_default = {};
2725
+
2726
+ // src/components/Breadcrumbs/Breadcrumbs.tsx
2727
+ import { jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
2728
+ function Breadcrumbs({ items, separator = "/", className }) {
2729
+ return /* @__PURE__ */ jsx43("nav", { "aria-label": "Breadcrumb", className: cn(Breadcrumbs_default.nav, className), children: /* @__PURE__ */ jsx43("ol", { className: Breadcrumbs_default.list, children: items.map((item, index) => {
2730
+ const isLast = index === items.length - 1;
2731
+ return /* @__PURE__ */ jsxs34("li", { className: Breadcrumbs_default.item, children: [
2732
+ index > 0 && /* @__PURE__ */ jsx43("span", { className: Breadcrumbs_default.separator, "aria-hidden": "true", children: separator }),
2733
+ isLast ? /* @__PURE__ */ jsx43("span", { className: Breadcrumbs_default.current, "aria-current": "page", children: item.label }) : item.href ? /* @__PURE__ */ jsx43("a", { href: item.href, className: Breadcrumbs_default.link, onClick: item.onClick, children: item.label }) : /* @__PURE__ */ jsx43(
2734
+ "button",
2735
+ {
2736
+ type: "button",
2737
+ className: Breadcrumbs_default.link,
2738
+ onClick: item.onClick,
2739
+ children: item.label
2740
+ }
2741
+ )
2742
+ ] }, index);
2743
+ }) }) });
2744
+ }
2745
+
2746
+ // src/components/SideNav/SideNav.module.css
2747
+ var SideNav_default = {};
2748
+
2749
+ // src/components/SideNav/SideNav.tsx
2750
+ import { Fragment as Fragment3, jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
2751
+ function NavItem({ item, collapsed, depth = 0 }) {
2752
+ const hasChildren = item.children && item.children.length > 0;
2753
+ const content = /* @__PURE__ */ jsxs35(Fragment3, { children: [
2754
+ item.icon && /* @__PURE__ */ jsx44("span", { className: SideNav_default.icon, "aria-hidden": "true", children: item.icon }),
2755
+ !collapsed && /* @__PURE__ */ jsx44("span", { className: SideNav_default.label, children: item.label })
2756
+ ] });
2757
+ const commonProps = {
2758
+ className: cn(
2759
+ SideNav_default.navItem,
2760
+ item.active && SideNav_default.active,
2761
+ collapsed && SideNav_default.iconOnly,
2762
+ depth > 0 && SideNav_default.nested
2763
+ ),
2764
+ ...item.active ? { "aria-current": "page" } : {},
2765
+ ...collapsed ? { title: item.label } : {}
2766
+ };
2767
+ return /* @__PURE__ */ jsxs35("li", { children: [
2768
+ item.href ? /* @__PURE__ */ jsx44("a", { href: item.href, onClick: item.onClick, ...commonProps, children: content }) : /* @__PURE__ */ jsx44("button", { type: "button", onClick: item.onClick, ...commonProps, children: content }),
2769
+ hasChildren && !collapsed && /* @__PURE__ */ jsx44("ul", { className: SideNav_default.subList, children: item.children.map((child, index) => /* @__PURE__ */ jsx44(NavItem, { item: child, collapsed, depth: depth + 1 }, index)) })
2770
+ ] });
2771
+ }
2772
+ function SideNav({ items, collapsed = false, onCollapse, className }) {
2773
+ return /* @__PURE__ */ jsxs35("nav", { "aria-label": "Side navigation", className: cn(SideNav_default.sideNav, collapsed && SideNav_default.collapsed, className), children: [
2774
+ onCollapse && /* @__PURE__ */ jsx44(
2775
+ "button",
2776
+ {
2777
+ type: "button",
2778
+ className: SideNav_default.collapseToggle,
2779
+ onClick: () => onCollapse(!collapsed),
2780
+ "aria-label": collapsed ? "Expand navigation" : "Collapse navigation",
2781
+ children: /* @__PURE__ */ jsx44(
2782
+ "svg",
2783
+ {
2784
+ width: "20",
2785
+ height: "20",
2786
+ viewBox: "0 0 20 20",
2787
+ fill: "none",
2788
+ stroke: "currentColor",
2789
+ strokeWidth: "2",
2790
+ strokeLinecap: "round",
2791
+ strokeLinejoin: "round",
2792
+ "aria-hidden": "true",
2793
+ children: collapsed ? /* @__PURE__ */ jsx44("polyline", { points: "8 4 14 10 8 16" }) : /* @__PURE__ */ jsx44("polyline", { points: "12 4 6 10 12 16" })
2794
+ }
2795
+ )
2796
+ }
2797
+ ),
2798
+ /* @__PURE__ */ jsx44("ul", { className: SideNav_default.list, children: items.map((item, index) => /* @__PURE__ */ jsx44(NavItem, { item, collapsed }, index)) })
2799
+ ] });
2800
+ }
2801
+
2802
+ // src/components/TopNav/TopNav.module.css
2803
+ var TopNav_default = {};
2804
+
2805
+ // src/components/TopNav/TopNav.tsx
2806
+ import { jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
2807
+ function TopNav({ logo, children, actions, className, ...props }) {
2808
+ return /* @__PURE__ */ jsx45("header", { className: cn(TopNav_default.topNav, className), ...props, children: /* @__PURE__ */ jsxs36("div", { className: TopNav_default.inner, children: [
2809
+ logo && /* @__PURE__ */ jsx45("div", { className: TopNav_default.logo, children: logo }),
2810
+ children && /* @__PURE__ */ jsx45("nav", { "aria-label": "Main navigation", className: TopNav_default.nav, children }),
2811
+ actions && /* @__PURE__ */ jsx45("div", { className: TopNav_default.actions, children: actions })
2812
+ ] }) });
2813
+ }
2814
+
2815
+ // src/components/StatCard/StatCard.module.css
2816
+ var StatCard_default = {};
2817
+
2818
+ // src/components/StatCard/StatCard.tsx
2819
+ import { jsx as jsx46, jsxs as jsxs37 } from "react/jsx-runtime";
2820
+ var trendIcons = {
2821
+ up: /* @__PURE__ */ jsx46("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx46("path", { d: "M8 3l5 5h-3v5H6V8H3l5-5z" }) }),
2822
+ down: /* @__PURE__ */ jsx46("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx46("path", { d: "M8 13l5-5h-3V3H6v5H3l5 5z" }) }),
2823
+ neutral: /* @__PURE__ */ jsx46("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx46("path", { d: "M2 7h12v2H2V7z" }) })
2824
+ };
2825
+ function StatCard({
2826
+ label,
2827
+ value,
2828
+ change,
2829
+ changeLabel,
2830
+ trend = "neutral",
2831
+ icon,
2832
+ className,
2833
+ ...props
2834
+ }) {
2835
+ const formattedChange = change !== void 0 ? `${change > 0 ? "+" : ""}${change}%` : void 0;
2836
+ return /* @__PURE__ */ jsxs37("div", { className: cn(StatCard_default.card, className), ...props, children: [
2837
+ /* @__PURE__ */ jsxs37("div", { className: StatCard_default.header, children: [
2838
+ /* @__PURE__ */ jsx46("span", { className: StatCard_default.label, children: label }),
2839
+ icon && /* @__PURE__ */ jsx46("span", { className: StatCard_default.icon, "aria-hidden": "true", children: icon })
2840
+ ] }),
2841
+ /* @__PURE__ */ jsx46("div", { className: StatCard_default.value, children: value }),
2842
+ formattedChange && /* @__PURE__ */ jsxs37("div", { className: cn(StatCard_default.trend, StatCard_default[trend]), children: [
2843
+ trendIcons[trend],
2844
+ /* @__PURE__ */ jsx46("span", { children: formattedChange }),
2845
+ changeLabel && /* @__PURE__ */ jsx46("span", { className: StatCard_default.changeLabel, children: changeLabel }),
2846
+ /* @__PURE__ */ jsx46("span", { className: StatCard_default.srOnly, children: trend === "up" ? "increase" : trend === "down" ? "decrease" : "no change" })
2847
+ ] })
2848
+ ] });
2849
+ }
2850
+
2851
+ // src/components/List/List.tsx
2852
+ import { forwardRef as forwardRef13 } from "react";
2853
+
2854
+ // src/components/List/List.module.css
2855
+ var List_default = {};
2856
+
2857
+ // src/components/List/List.tsx
2858
+ import { Fragment as Fragment4, jsx as jsx47, jsxs as jsxs38 } from "react/jsx-runtime";
2859
+ var List = forwardRef13(
2860
+ ({ divided = false, padding = "md", className, children, ...props }, ref) => {
2861
+ return /* @__PURE__ */ jsx47(
2862
+ "ul",
2863
+ {
2864
+ ref,
2865
+ className: cn(List_default.list, divided && List_default.divided, List_default[`pad-${padding}`], className),
2866
+ ...props,
2867
+ children
2868
+ }
2869
+ );
2870
+ }
2871
+ );
2872
+ List.displayName = "List";
2873
+ var ListItem = forwardRef13(
2874
+ ({ onClick, selected, disabled, prefix, suffix, description, className, children, ...props }, ref) => {
2875
+ const isInteractive = !!onClick;
2876
+ const content = /* @__PURE__ */ jsxs38(Fragment4, { children: [
2877
+ prefix && /* @__PURE__ */ jsx47("span", { className: List_default.prefix, children: prefix }),
2878
+ /* @__PURE__ */ jsxs38("span", { className: List_default.content, children: [
2879
+ /* @__PURE__ */ jsx47("span", { className: List_default.primary, children }),
2880
+ description && /* @__PURE__ */ jsx47("span", { className: List_default.description, children: description })
2881
+ ] }),
2882
+ suffix && /* @__PURE__ */ jsx47("span", { className: List_default.suffix, children: suffix })
2883
+ ] });
2884
+ return /* @__PURE__ */ jsx47(
2885
+ "li",
2886
+ {
2887
+ ref,
2888
+ className: cn(List_default.item, className),
2889
+ ...props,
2890
+ children: isInteractive ? /* @__PURE__ */ jsx47(
2891
+ "button",
2892
+ {
2893
+ type: "button",
2894
+ className: cn(List_default.interactive, selected && List_default.selected, disabled && List_default.disabled),
2895
+ onClick,
2896
+ disabled,
2897
+ "aria-selected": selected || void 0,
2898
+ "aria-disabled": disabled || void 0,
2899
+ children: content
2900
+ }
2901
+ ) : /* @__PURE__ */ jsx47("div", { className: cn(List_default.static, selected && List_default.selected, disabled && List_default.disabled), children: content })
2902
+ }
2903
+ );
2904
+ }
2905
+ );
2906
+ ListItem.displayName = "ListItem";
2907
+
2908
+ // src/components/CollapsiblePanel/CollapsiblePanel.tsx
2909
+ import { useState as useState9, useRef as useRef11, useEffect as useEffect8 } from "react";
2910
+
2911
+ // src/components/CollapsiblePanel/CollapsiblePanel.module.css
2912
+ var CollapsiblePanel_default = {};
2913
+
2914
+ // src/components/CollapsiblePanel/CollapsiblePanel.tsx
2915
+ import { jsx as jsx48, jsxs as jsxs39 } from "react/jsx-runtime";
2916
+ function CollapsiblePanel({
2917
+ title,
2918
+ defaultOpen = false,
2919
+ open: controlledOpen,
2920
+ onToggle,
2921
+ children,
2922
+ className
2923
+ }) {
2924
+ const [internalOpen, setInternalOpen] = useState9(defaultOpen);
2925
+ const isOpen = controlledOpen !== void 0 ? controlledOpen : internalOpen;
2926
+ const contentRef = useRef11(null);
2927
+ const [height, setHeight] = useState9(isOpen ? void 0 : 0);
2928
+ const panelId = useRef11(`collapsible-panel-${Math.random().toString(36).slice(2, 9)}`).current;
2929
+ const triggerId = `${panelId}-trigger`;
2930
+ useEffect8(() => {
2931
+ if (!contentRef.current) return;
2932
+ if (isOpen) {
2933
+ setHeight(contentRef.current.scrollHeight);
2934
+ const timer = setTimeout(() => setHeight(void 0), 200);
2935
+ return () => clearTimeout(timer);
2936
+ } else {
2937
+ setHeight(contentRef.current.scrollHeight);
2938
+ requestAnimationFrame(() => {
2939
+ requestAnimationFrame(() => setHeight(0));
2940
+ });
2941
+ }
2942
+ }, [isOpen]);
2943
+ const handleToggle = () => {
2944
+ const next = !isOpen;
2945
+ if (controlledOpen === void 0) {
2946
+ setInternalOpen(next);
2947
+ }
2948
+ onToggle?.(next);
2949
+ };
2950
+ return /* @__PURE__ */ jsxs39("div", { className: cn(CollapsiblePanel_default.panel, isOpen && CollapsiblePanel_default.open, className), children: [
2951
+ /* @__PURE__ */ jsxs39(
2952
+ "button",
2953
+ {
2954
+ type: "button",
2955
+ id: triggerId,
2956
+ className: CollapsiblePanel_default.trigger,
2957
+ "aria-expanded": isOpen,
2958
+ "aria-controls": panelId,
2959
+ onClick: handleToggle,
2960
+ children: [
2961
+ /* @__PURE__ */ jsx48(
2962
+ "svg",
2963
+ {
2964
+ className: CollapsiblePanel_default.chevron,
2965
+ width: "20",
2966
+ height: "20",
2967
+ viewBox: "0 0 20 20",
2968
+ fill: "none",
2969
+ stroke: "currentColor",
2970
+ strokeWidth: "2",
2971
+ strokeLinecap: "round",
2972
+ strokeLinejoin: "round",
2973
+ "aria-hidden": "true",
2974
+ children: /* @__PURE__ */ jsx48("polyline", { points: "8 4 14 10 8 16" })
2975
+ }
2976
+ ),
2977
+ /* @__PURE__ */ jsx48("span", { className: CollapsiblePanel_default.title, children: title })
2978
+ ]
2979
+ }
2980
+ ),
2981
+ /* @__PURE__ */ jsx48(
2982
+ "div",
2983
+ {
2984
+ id: panelId,
2985
+ role: "region",
2986
+ "aria-labelledby": triggerId,
2987
+ className: CollapsiblePanel_default.content,
2988
+ style: { height: height !== void 0 ? `${height}px` : "auto" },
2989
+ hidden: !isOpen && height === 0,
2990
+ children: /* @__PURE__ */ jsx48("div", { ref: contentRef, className: CollapsiblePanel_default.contentInner, children })
2991
+ }
2992
+ )
2993
+ ] });
2994
+ }
2995
+
2996
+ // src/components/PatientCard/PatientCard.module.css
2997
+ var PatientCard_default = {};
2998
+
2999
+ // src/components/PatientCard/PatientCard.tsx
3000
+ import { jsx as jsx49, jsxs as jsxs40 } from "react/jsx-runtime";
3001
+ var statusLabels2 = {
3002
+ active: "Active",
3003
+ inactive: "Inactive",
3004
+ critical: "Critical"
3005
+ };
3006
+ function PatientCard({
3007
+ name,
3008
+ mrn,
3009
+ dob,
3010
+ age,
3011
+ gender,
3012
+ avatar,
3013
+ status = "active",
3014
+ allergies = [],
3015
+ primaryPhysician,
3016
+ className,
3017
+ ...props
3018
+ }) {
3019
+ return /* @__PURE__ */ jsxs40(
3020
+ "div",
3021
+ {
3022
+ className: cn(PatientCard_default.card, PatientCard_default[status], className),
3023
+ role: "region",
3024
+ "aria-label": `Patient card for ${name}`,
3025
+ ...props,
3026
+ children: [
3027
+ /* @__PURE__ */ jsxs40("div", { className: PatientCard_default.header, children: [
3028
+ avatar && /* @__PURE__ */ jsx49("div", { className: PatientCard_default.avatar, "aria-hidden": "true", children: avatar }),
3029
+ /* @__PURE__ */ jsxs40("div", { className: PatientCard_default.identity, children: [
3030
+ /* @__PURE__ */ jsx49("h3", { className: PatientCard_default.name, children: name }),
3031
+ /* @__PURE__ */ jsxs40("span", { className: PatientCard_default.mrn, children: [
3032
+ "MRN: ",
3033
+ mrn
3034
+ ] })
3035
+ ] }),
3036
+ /* @__PURE__ */ jsx49("span", { className: cn(PatientCard_default.statusBadge, PatientCard_default[`status-${status}`]), children: statusLabels2[status] })
3037
+ ] }),
3038
+ /* @__PURE__ */ jsxs40("div", { className: PatientCard_default.details, children: [
3039
+ /* @__PURE__ */ jsxs40("div", { className: PatientCard_default.field, children: [
3040
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.label, children: "DOB" }),
3041
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.value, children: dob })
3042
+ ] }),
3043
+ /* @__PURE__ */ jsxs40("div", { className: PatientCard_default.field, children: [
3044
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.label, children: "Age" }),
3045
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.value, children: age })
3046
+ ] }),
3047
+ /* @__PURE__ */ jsxs40("div", { className: PatientCard_default.field, children: [
3048
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.label, children: "Gender" }),
3049
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.value, children: gender })
3050
+ ] }),
3051
+ primaryPhysician && /* @__PURE__ */ jsxs40("div", { className: PatientCard_default.field, children: [
3052
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.label, children: "PCP" }),
3053
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.value, children: primaryPhysician })
3054
+ ] })
3055
+ ] }),
3056
+ allergies.length > 0 && /* @__PURE__ */ jsxs40("div", { className: PatientCard_default.allergies, children: [
3057
+ /* @__PURE__ */ jsx49("span", { className: PatientCard_default.allergiesLabel, children: "Allergies:" }),
3058
+ /* @__PURE__ */ jsx49("ul", { className: PatientCard_default.allergyList, children: allergies.map((allergy) => /* @__PURE__ */ jsx49("li", { className: PatientCard_default.allergyItem, children: allergy }, allergy)) })
3059
+ ] })
3060
+ ]
3061
+ }
3062
+ );
3063
+ }
3064
+
3065
+ // src/components/AppointmentCard/AppointmentCard.module.css
3066
+ var AppointmentCard_default = {};
3067
+
3068
+ // src/components/AppointmentCard/AppointmentCard.tsx
3069
+ import { jsx as jsx50, jsxs as jsxs41 } from "react/jsx-runtime";
3070
+ var statusLabels3 = {
3071
+ scheduled: "Scheduled",
3072
+ "checked-in": "Checked In",
3073
+ "in-progress": "In Progress",
3074
+ completed: "Completed",
3075
+ cancelled: "Cancelled",
3076
+ "no-show": "No Show"
3077
+ };
3078
+ function AppointmentCard({
3079
+ patientName,
3080
+ date,
3081
+ time,
3082
+ type,
3083
+ provider,
3084
+ status,
3085
+ location,
3086
+ className,
3087
+ ...props
3088
+ }) {
3089
+ return /* @__PURE__ */ jsxs41(
3090
+ "div",
3091
+ {
3092
+ className: cn(AppointmentCard_default.card, AppointmentCard_default[status], className),
3093
+ role: "region",
3094
+ "aria-label": `Appointment for ${patientName}`,
3095
+ ...props,
3096
+ children: [
3097
+ /* @__PURE__ */ jsx50("div", { className: AppointmentCard_default.statusBar, "aria-hidden": "true" }),
3098
+ /* @__PURE__ */ jsxs41("div", { className: AppointmentCard_default.content, children: [
3099
+ /* @__PURE__ */ jsxs41("div", { className: AppointmentCard_default.header, children: [
3100
+ /* @__PURE__ */ jsx50("h3", { className: AppointmentCard_default.patientName, children: patientName }),
3101
+ /* @__PURE__ */ jsx50("span", { className: cn(AppointmentCard_default.statusBadge, AppointmentCard_default[`badge-${status}`]), children: statusLabels3[status] })
3102
+ ] }),
3103
+ /* @__PURE__ */ jsx50("p", { className: AppointmentCard_default.type, children: type }),
3104
+ /* @__PURE__ */ jsxs41("div", { className: AppointmentCard_default.details, children: [
3105
+ /* @__PURE__ */ jsxs41("div", { className: AppointmentCard_default.field, children: [
3106
+ /* @__PURE__ */ jsx50("svg", { className: AppointmentCard_default.icon, width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx50("path", { d: "M5 0a1 1 0 011 1v1h4V1a1 1 0 112 0v1h1.5A2.5 2.5 0 0116 4.5v9a2.5 2.5 0 01-2.5 2.5h-11A2.5 2.5 0 010 13.5v-9A2.5 2.5 0 012.5 2H4V1a1 1 0 011-1zM2 6v7.5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5V6H2z" }) }),
3107
+ /* @__PURE__ */ jsx50("span", { children: date })
3108
+ ] }),
3109
+ /* @__PURE__ */ jsxs41("div", { className: AppointmentCard_default.field, children: [
3110
+ /* @__PURE__ */ jsx50("svg", { className: AppointmentCard_default.icon, width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx50("path", { d: "M8 0a8 8 0 110 16A8 8 0 018 0zm0 2a6 6 0 100 12A6 6 0 008 2zm.5 2a.5.5 0 01.5.5V8h2a.5.5 0 010 1H8a.5.5 0 01-.5-.5v-4a.5.5 0 01.5-.5z" }) }),
3111
+ /* @__PURE__ */ jsx50("span", { children: time })
3112
+ ] }),
3113
+ /* @__PURE__ */ jsxs41("div", { className: AppointmentCard_default.field, children: [
3114
+ /* @__PURE__ */ jsx50("svg", { className: AppointmentCard_default.icon, width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx50("path", { d: "M8 0a5 5 0 014.9 5.9L8 14.5 3.1 5.9A5 5 0 018 0zm0 3a2 2 0 100 4 2 2 0 000-4z" }) }),
3115
+ /* @__PURE__ */ jsx50("span", { children: provider })
3116
+ ] }),
3117
+ location && /* @__PURE__ */ jsxs41("div", { className: AppointmentCard_default.field, children: [
3118
+ /* @__PURE__ */ jsx50("svg", { className: AppointmentCard_default.icon, width: "16", height: "16", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx50("path", { d: "M2 2a2 2 0 012-2h8a2 2 0 012 2v12a2 2 0 01-2 2H4a2 2 0 01-2-2V2zm2 0v12h8V2H4zm2 1h4v2H6V3z" }) }),
3119
+ /* @__PURE__ */ jsx50("span", { children: location })
3120
+ ] })
3121
+ ] })
3122
+ ] })
3123
+ ]
3124
+ }
3125
+ );
3126
+ }
3127
+
3128
+ // src/components/Timeline/Timeline.module.css
3129
+ var Timeline_default = {};
3130
+
3131
+ // src/components/Timeline/Timeline.tsx
3132
+ import { jsx as jsx51, jsxs as jsxs42 } from "react/jsx-runtime";
3133
+ function Timeline({ items, className, ...props }) {
3134
+ return /* @__PURE__ */ jsx51("ol", { className: cn(Timeline_default.timeline, className), ...props, children: items.map((item) => /* @__PURE__ */ jsxs42(
3135
+ "li",
3136
+ {
3137
+ className: cn(Timeline_default.item, Timeline_default[item.variant ?? "default"]),
3138
+ children: [
3139
+ /* @__PURE__ */ jsxs42("div", { className: Timeline_default.indicator, "aria-hidden": "true", children: [
3140
+ item.icon ? /* @__PURE__ */ jsx51("span", { className: Timeline_default.icon, children: item.icon }) : /* @__PURE__ */ jsx51("span", { className: Timeline_default.dot }),
3141
+ /* @__PURE__ */ jsx51("span", { className: Timeline_default.line })
3142
+ ] }),
3143
+ /* @__PURE__ */ jsxs42("div", { className: Timeline_default.content, children: [
3144
+ /* @__PURE__ */ jsx51("p", { className: Timeline_default.title, children: item.title }),
3145
+ item.description && /* @__PURE__ */ jsx51("p", { className: Timeline_default.description, children: item.description }),
3146
+ /* @__PURE__ */ jsx51("time", { className: Timeline_default.timestamp, children: item.timestamp })
3147
+ ] })
3148
+ ]
3149
+ },
3150
+ item.id
3151
+ )) });
3152
+ }
3153
+
3154
+ // src/components/ClinicalBanner/ClinicalBanner.module.css
3155
+ var ClinicalBanner_default = {};
3156
+
3157
+ // src/components/ClinicalBanner/ClinicalBanner.tsx
3158
+ import { jsx as jsx52, jsxs as jsxs43 } from "react/jsx-runtime";
3159
+ var severityIcons = {
3160
+ critical: /* @__PURE__ */ jsx52("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx52("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm3.5 6.5a1 1 0 00-1.4 0L10 8.6 7.9 6.5a1 1 0 10-1.4 1.4L8.6 10l-2.1 2.1a1 1 0 101.4 1.4L10 11.4l2.1 2.1a1 1 0 001.4-1.4L11.4 10l2.1-2.1a1 1 0 000-1.4z" }) }),
3161
+ high: /* @__PURE__ */ jsx52("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx52("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 13a1 1 0 100 2 1 1 0 000-2zm0-8a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" }) }),
3162
+ moderate: /* @__PURE__ */ jsx52("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx52("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 8a1 1 0 00-1 1v5a1 1 0 102 0V9a1 1 0 00-1-1zm0-3.5a1 1 0 100 2 1 1 0 000-2z" }) }),
3163
+ low: /* @__PURE__ */ jsx52("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx52("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 8a1 1 0 00-1 1v5a1 1 0 102 0V9a1 1 0 00-1-1zm0-3.5a1 1 0 100 2 1 1 0 000-2z" }) })
3164
+ };
3165
+ function ClinicalBanner({
3166
+ severity,
3167
+ title,
3168
+ dismissible = false,
3169
+ onDismiss,
3170
+ children,
3171
+ className,
3172
+ ...props
3173
+ }) {
3174
+ return /* @__PURE__ */ jsxs43(
3175
+ "div",
3176
+ {
3177
+ className: cn(ClinicalBanner_default.banner, ClinicalBanner_default[severity], className),
3178
+ role: "alert",
3179
+ ...props,
3180
+ children: [
3181
+ /* @__PURE__ */ jsx52("span", { className: ClinicalBanner_default.icon, "aria-hidden": "true", children: severityIcons[severity] }),
3182
+ /* @__PURE__ */ jsxs43("div", { className: ClinicalBanner_default.content, children: [
3183
+ /* @__PURE__ */ jsx52("p", { className: ClinicalBanner_default.title, children: title }),
3184
+ children && /* @__PURE__ */ jsx52("div", { className: ClinicalBanner_default.body, children })
3185
+ ] }),
3186
+ dismissible && /* @__PURE__ */ jsx52(
3187
+ "button",
3188
+ {
3189
+ className: ClinicalBanner_default.dismiss,
3190
+ onClick: onDismiss,
3191
+ "aria-label": "Dismiss alert",
3192
+ type: "button",
3193
+ children: /* @__PURE__ */ jsxs43("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", children: [
3194
+ /* @__PURE__ */ jsx52("line", { x1: "4", y1: "4", x2: "12", y2: "12" }),
3195
+ /* @__PURE__ */ jsx52("line", { x1: "12", y1: "4", x2: "4", y2: "12" })
3196
+ ] })
3197
+ }
3198
+ )
3199
+ ]
3200
+ }
3201
+ );
3202
+ }
3203
+
3204
+ // src/components/MedicationRow/MedicationRow.module.css
3205
+ var MedicationRow_default = {};
3206
+
3207
+ // src/components/MedicationRow/MedicationRow.tsx
3208
+ import { jsx as jsx53, jsxs as jsxs44 } from "react/jsx-runtime";
3209
+ var statusLabels4 = {
3210
+ active: "Active",
3211
+ discontinued: "Discontinued",
3212
+ hold: "On Hold",
3213
+ prn: "PRN"
3214
+ };
3215
+ function MedicationRow({
3216
+ name,
3217
+ dosage,
3218
+ frequency,
3219
+ route,
3220
+ prescribedBy,
3221
+ startDate,
3222
+ endDate,
3223
+ status,
3224
+ className,
3225
+ ...props
3226
+ }) {
3227
+ return /* @__PURE__ */ jsxs44(
3228
+ "div",
3229
+ {
3230
+ className: cn(MedicationRow_default.row, MedicationRow_default[status], className),
3231
+ ...props,
3232
+ children: [
3233
+ /* @__PURE__ */ jsxs44("div", { className: MedicationRow_default.primary, children: [
3234
+ /* @__PURE__ */ jsx53("span", { className: cn(MedicationRow_default.statusIndicator, MedicationRow_default[`indicator-${status}`]), "aria-hidden": "true" }),
3235
+ /* @__PURE__ */ jsx53("span", { className: MedicationRow_default.name, children: name }),
3236
+ /* @__PURE__ */ jsx53("span", { className: MedicationRow_default.dosage, children: dosage }),
3237
+ /* @__PURE__ */ jsx53("span", { className: cn(MedicationRow_default.statusBadge, MedicationRow_default[`badge-${status}`]), children: statusLabels4[status] })
3238
+ ] }),
3239
+ /* @__PURE__ */ jsxs44("div", { className: MedicationRow_default.secondary, children: [
3240
+ /* @__PURE__ */ jsxs44("span", { className: MedicationRow_default.detail, children: [
3241
+ /* @__PURE__ */ jsx53("span", { className: MedicationRow_default.detailLabel, children: "Freq:" }),
3242
+ " ",
3243
+ frequency
3244
+ ] }),
3245
+ /* @__PURE__ */ jsxs44("span", { className: MedicationRow_default.detail, children: [
3246
+ /* @__PURE__ */ jsx53("span", { className: MedicationRow_default.detailLabel, children: "Route:" }),
3247
+ " ",
3248
+ route
3249
+ ] }),
3250
+ /* @__PURE__ */ jsxs44("span", { className: MedicationRow_default.detail, children: [
3251
+ /* @__PURE__ */ jsx53("span", { className: MedicationRow_default.detailLabel, children: "By:" }),
3252
+ " ",
3253
+ prescribedBy
3254
+ ] }),
3255
+ /* @__PURE__ */ jsxs44("span", { className: MedicationRow_default.detail, children: [
3256
+ /* @__PURE__ */ jsx53("span", { className: MedicationRow_default.detailLabel, children: "Start:" }),
3257
+ " ",
3258
+ startDate
3259
+ ] }),
3260
+ endDate && /* @__PURE__ */ jsxs44("span", { className: MedicationRow_default.detail, children: [
3261
+ /* @__PURE__ */ jsx53("span", { className: MedicationRow_default.detailLabel, children: "End:" }),
3262
+ " ",
3263
+ endDate
3264
+ ] })
3265
+ ] })
3266
+ ]
3267
+ }
3268
+ );
3269
+ }
3270
+
3271
+ // src/components/LabResultRow/LabResultRow.module.css
3272
+ var LabResultRow_default = {};
3273
+
3274
+ // src/components/LabResultRow/LabResultRow.tsx
3275
+ import { jsx as jsx54, jsxs as jsxs45 } from "react/jsx-runtime";
3276
+ var statusLabels5 = {
3277
+ normal: "Normal",
3278
+ "abnormal-high": "High",
3279
+ "abnormal-low": "Low",
3280
+ critical: "Critical"
3281
+ };
3282
+ var statusArrow = {
3283
+ normal: "",
3284
+ "abnormal-high": "\u2191",
3285
+ "abnormal-low": "\u2193",
3286
+ critical: "\u2191\u2191"
3287
+ };
3288
+ function LabResultRow({
3289
+ testName,
3290
+ value,
3291
+ unit,
3292
+ referenceRange,
3293
+ status,
3294
+ collectedDate,
3295
+ className,
3296
+ ...props
3297
+ }) {
3298
+ const isAbnormal = status !== "normal";
3299
+ return /* @__PURE__ */ jsxs45(
3300
+ "div",
3301
+ {
3302
+ className: cn(LabResultRow_default.row, LabResultRow_default[status], className),
3303
+ ...props,
3304
+ children: [
3305
+ /* @__PURE__ */ jsx54("div", { className: LabResultRow_default.testInfo, children: /* @__PURE__ */ jsx54("span", { className: LabResultRow_default.testName, children: testName }) }),
3306
+ /* @__PURE__ */ jsxs45("div", { className: LabResultRow_default.result, children: [
3307
+ /* @__PURE__ */ jsxs45("span", { className: cn(LabResultRow_default.value, isAbnormal && LabResultRow_default.abnormalValue), children: [
3308
+ value,
3309
+ statusArrow[status] && /* @__PURE__ */ jsxs45("span", { className: LabResultRow_default.arrow, "aria-hidden": "true", children: [
3310
+ " ",
3311
+ statusArrow[status]
3312
+ ] })
3313
+ ] }),
3314
+ /* @__PURE__ */ jsx54("span", { className: LabResultRow_default.unit, children: unit })
3315
+ ] }),
3316
+ /* @__PURE__ */ jsxs45("div", { className: LabResultRow_default.range, children: [
3317
+ /* @__PURE__ */ jsx54("span", { className: LabResultRow_default.rangeLabel, children: "Ref:" }),
3318
+ /* @__PURE__ */ jsx54("span", { className: LabResultRow_default.rangeValue, children: referenceRange })
3319
+ ] }),
3320
+ /* @__PURE__ */ jsxs45("div", { className: LabResultRow_default.meta, children: [
3321
+ /* @__PURE__ */ jsx54("span", { className: cn(LabResultRow_default.statusBadge, LabResultRow_default[`badge-${status}`]), children: statusLabels5[status] }),
3322
+ /* @__PURE__ */ jsx54("span", { className: LabResultRow_default.date, children: collectedDate })
3323
+ ] })
3324
+ ]
3325
+ }
3326
+ );
3327
+ }
3328
+
3329
+ // src/components/InsuranceCard/InsuranceCard.module.css
3330
+ var InsuranceCard_default = {};
3331
+
3332
+ // src/components/InsuranceCard/InsuranceCard.tsx
3333
+ import { jsx as jsx55, jsxs as jsxs46 } from "react/jsx-runtime";
3334
+ var statusLabels6 = {
3335
+ active: "Active",
3336
+ inactive: "Inactive",
3337
+ pending: "Pending"
3338
+ };
3339
+ function InsuranceCard({
3340
+ planName,
3341
+ memberId,
3342
+ groupNumber,
3343
+ planType,
3344
+ status,
3345
+ effectiveDate,
3346
+ expirationDate,
3347
+ className,
3348
+ ...props
3349
+ }) {
3350
+ return /* @__PURE__ */ jsxs46(
3351
+ "div",
3352
+ {
3353
+ className: cn(InsuranceCard_default.card, className),
3354
+ role: "region",
3355
+ "aria-label": `Insurance: ${planName}`,
3356
+ ...props,
3357
+ children: [
3358
+ /* @__PURE__ */ jsxs46("div", { className: InsuranceCard_default.header, children: [
3359
+ /* @__PURE__ */ jsxs46("div", { className: InsuranceCard_default.planInfo, children: [
3360
+ /* @__PURE__ */ jsx55("h3", { className: InsuranceCard_default.planName, children: planName }),
3361
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.planType, children: planType })
3362
+ ] }),
3363
+ /* @__PURE__ */ jsx55("span", { className: cn(InsuranceCard_default.statusBadge, InsuranceCard_default[`status-${status}`]), children: statusLabels6[status] })
3364
+ ] }),
3365
+ /* @__PURE__ */ jsxs46("div", { className: InsuranceCard_default.details, children: [
3366
+ /* @__PURE__ */ jsxs46("div", { className: InsuranceCard_default.field, children: [
3367
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.label, children: "Member ID" }),
3368
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.value, children: memberId })
3369
+ ] }),
3370
+ /* @__PURE__ */ jsxs46("div", { className: InsuranceCard_default.field, children: [
3371
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.label, children: "Group #" }),
3372
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.value, children: groupNumber })
3373
+ ] }),
3374
+ /* @__PURE__ */ jsxs46("div", { className: InsuranceCard_default.field, children: [
3375
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.label, children: "Effective" }),
3376
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.value, children: effectiveDate })
3377
+ ] }),
3378
+ expirationDate && /* @__PURE__ */ jsxs46("div", { className: InsuranceCard_default.field, children: [
3379
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.label, children: "Expires" }),
3380
+ /* @__PURE__ */ jsx55("span", { className: InsuranceCard_default.value, children: expirationDate })
3381
+ ] })
3382
+ ] })
3383
+ ]
3384
+ }
3385
+ );
3386
+ }
3387
+
3388
+ // src/components/Toast/Toast.tsx
3389
+ import { useEffect as useEffect9 } from "react";
3390
+
3391
+ // src/components/Toast/Toast.module.css
3392
+ var Toast_default = {};
3393
+
3394
+ // src/components/Toast/Toast.tsx
3395
+ import { jsx as jsx56, jsxs as jsxs47 } from "react/jsx-runtime";
3396
+ var statusIcons2 = {
3397
+ info: /* @__PURE__ */ jsx56("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx56("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 8a1 1 0 00-1 1v5a1 1 0 102 0V9a1 1 0 00-1-1zm0-3.5a1 1 0 100 2 1 1 0 000-2z" }) }),
3398
+ success: /* @__PURE__ */ jsx56("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx56("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm4.3 7.3a1 1 0 00-1.4-1.4L8.5 10.3 7.1 8.9a1 1 0 10-1.4 1.4l2.1 2.1a1 1 0 001.4 0l5.1-5.1z" }) }),
3399
+ warning: /* @__PURE__ */ jsx56("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx56("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 13a1 1 0 100 2 1 1 0 000-2zm0-8a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" }) }),
3400
+ error: /* @__PURE__ */ jsx56("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx56("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm3.5 6.5a1 1 0 00-1.4 0L10 8.6 7.9 6.5a1 1 0 10-1.4 1.4L8.6 10l-2.1 2.1a1 1 0 101.4 1.4L10 11.4l2.1 2.1a1 1 0 001.4-1.4L11.4 10l2.1-2.1a1 1 0 000-1.4z" }) })
3401
+ };
3402
+ function Toast({
3403
+ message,
3404
+ title,
3405
+ status = "info",
3406
+ action,
3407
+ onClose,
3408
+ duration: duration2 = 5e3,
3409
+ className
3410
+ }) {
3411
+ useEffect9(() => {
3412
+ if (duration2 <= 0) return;
3413
+ const timer = setTimeout(onClose, duration2);
3414
+ return () => clearTimeout(timer);
3415
+ }, [duration2, onClose]);
3416
+ const isUrgent = status === "error" || status === "warning";
3417
+ return /* @__PURE__ */ jsxs47(
3418
+ "div",
3419
+ {
3420
+ className: cn(Toast_default.toast, Toast_default[status], className),
3421
+ role: isUrgent ? "alert" : "status",
3422
+ children: [
3423
+ /* @__PURE__ */ jsx56("span", { className: Toast_default.icon, "aria-hidden": "true", children: statusIcons2[status] }),
3424
+ /* @__PURE__ */ jsxs47("div", { className: Toast_default.content, children: [
3425
+ title && /* @__PURE__ */ jsx56("p", { className: Toast_default.title, children: title }),
3426
+ /* @__PURE__ */ jsx56("p", { className: Toast_default.message, children: message })
3427
+ ] }),
3428
+ action && /* @__PURE__ */ jsx56("div", { className: Toast_default.action, children: action }),
3429
+ /* @__PURE__ */ jsx56(
3430
+ "button",
3431
+ {
3432
+ className: Toast_default.close,
3433
+ onClick: onClose,
3434
+ "aria-label": "Dismiss notification",
3435
+ type: "button",
3436
+ children: /* @__PURE__ */ jsxs47("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", children: [
3437
+ /* @__PURE__ */ jsx56("line", { x1: "4", y1: "4", x2: "12", y2: "12" }),
3438
+ /* @__PURE__ */ jsx56("line", { x1: "12", y1: "4", x2: "4", y2: "12" })
3439
+ ] })
3440
+ }
3441
+ )
3442
+ ]
3443
+ }
3444
+ );
3445
+ }
3446
+
3447
+ // src/components/ConfirmDialog/ConfirmDialog.tsx
3448
+ import { useEffect as useEffect10, useRef as useRef12 } from "react";
3449
+
3450
+ // src/components/ConfirmDialog/ConfirmDialog.module.css
3451
+ var ConfirmDialog_default = {};
3452
+
3453
+ // src/components/ConfirmDialog/ConfirmDialog.tsx
3454
+ import { jsx as jsx57, jsxs as jsxs48 } from "react/jsx-runtime";
3455
+ function ConfirmDialog({
3456
+ open,
3457
+ onConfirm,
3458
+ onCancel,
3459
+ title,
3460
+ message,
3461
+ confirmLabel = "Confirm",
3462
+ cancelLabel = "Cancel",
3463
+ variant = "default",
3464
+ loading = false,
3465
+ className
3466
+ }) {
3467
+ const dialogRef = useRef12(null);
3468
+ const cancelRef = useRef12(null);
3469
+ useEffect10(() => {
3470
+ const dialog = dialogRef.current;
3471
+ if (!dialog) return;
3472
+ if (open && !dialog.open) {
3473
+ dialog.showModal();
3474
+ cancelRef.current?.focus();
3475
+ } else if (!open && dialog.open) {
3476
+ dialog.close();
3477
+ }
3478
+ }, [open]);
3479
+ useEffect10(() => {
3480
+ const dialog = dialogRef.current;
3481
+ if (!dialog) return;
3482
+ const handleClose = () => onCancel();
3483
+ dialog.addEventListener("close", handleClose);
3484
+ return () => dialog.removeEventListener("close", handleClose);
3485
+ }, [onCancel]);
3486
+ const handleBackdropClick = (e) => {
3487
+ if (e.target === dialogRef.current) {
3488
+ onCancel();
3489
+ }
3490
+ };
3491
+ return /* @__PURE__ */ jsx57(
3492
+ "dialog",
3493
+ {
3494
+ ref: dialogRef,
3495
+ className: cn(ConfirmDialog_default.dialog, className),
3496
+ "aria-labelledby": "aegis-confirm-title",
3497
+ "aria-describedby": "aegis-confirm-message",
3498
+ onClick: handleBackdropClick,
3499
+ children: /* @__PURE__ */ jsxs48("div", { className: ConfirmDialog_default.content, children: [
3500
+ variant === "danger" && /* @__PURE__ */ jsx57("div", { className: ConfirmDialog_default.dangerIcon, "aria-hidden": "true", children: /* @__PURE__ */ jsx57("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx57("path", { d: "M12 0a12 12 0 110 24 12 12 0 010-24zm0 15a1.25 1.25 0 100 2.5 1.25 1.25 0 000-2.5zm0-9a1 1 0 00-1 1v5.5a1 1 0 102 0V7a1 1 0 00-1-1z" }) }) }),
3501
+ /* @__PURE__ */ jsx57("h2", { id: "aegis-confirm-title", className: ConfirmDialog_default.title, children: title }),
3502
+ /* @__PURE__ */ jsx57("div", { id: "aegis-confirm-message", className: ConfirmDialog_default.message, children: typeof message === "string" ? /* @__PURE__ */ jsx57("p", { children: message }) : message }),
3503
+ /* @__PURE__ */ jsxs48("div", { className: ConfirmDialog_default.actions, children: [
3504
+ /* @__PURE__ */ jsx57(
3505
+ "button",
3506
+ {
3507
+ ref: cancelRef,
3508
+ className: ConfirmDialog_default.cancelButton,
3509
+ onClick: onCancel,
3510
+ type: "button",
3511
+ disabled: loading,
3512
+ children: cancelLabel
3513
+ }
3514
+ ),
3515
+ /* @__PURE__ */ jsx57(
3516
+ "button",
3517
+ {
3518
+ className: cn(ConfirmDialog_default.confirmButton, ConfirmDialog_default[variant]),
3519
+ onClick: onConfirm,
3520
+ type: "button",
3521
+ disabled: loading,
3522
+ "aria-busy": loading,
3523
+ children: loading ? "Loading..." : confirmLabel
3524
+ }
3525
+ )
3526
+ ] })
3527
+ ] })
3528
+ }
3529
+ );
3530
+ }
3531
+
3532
+ // src/components/Banner/Banner.module.css
3533
+ var Banner_default = {};
3534
+
3535
+ // src/components/Banner/Banner.tsx
3536
+ import { jsx as jsx58, jsxs as jsxs49 } from "react/jsx-runtime";
3537
+ var statusIcons3 = {
3538
+ info: /* @__PURE__ */ jsx58("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx58("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 8a1 1 0 00-1 1v5a1 1 0 102 0V9a1 1 0 00-1-1zm0-3.5a1 1 0 100 2 1 1 0 000-2z" }) }),
3539
+ success: /* @__PURE__ */ jsx58("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx58("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm4.3 7.3a1 1 0 00-1.4-1.4L8.5 10.3 7.1 8.9a1 1 0 10-1.4 1.4l2.1 2.1a1 1 0 001.4 0l5.1-5.1z" }) }),
3540
+ warning: /* @__PURE__ */ jsx58("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx58("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm0 13a1 1 0 100 2 1 1 0 000-2zm0-8a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" }) }),
3541
+ error: /* @__PURE__ */ jsx58("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ jsx58("path", { d: "M10 0a10 10 0 110 20 10 10 0 010-20zm3.5 6.5a1 1 0 00-1.4 0L10 8.6 7.9 6.5a1 1 0 10-1.4 1.4L8.6 10l-2.1 2.1a1 1 0 101.4 1.4L10 11.4l2.1 2.1a1 1 0 001.4-1.4L11.4 10l2.1-2.1a1 1 0 000-1.4z" }) })
3542
+ };
3543
+ function Banner({
3544
+ status = "info",
3545
+ dismissible = false,
3546
+ onDismiss,
3547
+ action,
3548
+ children,
3549
+ className,
3550
+ ...props
3551
+ }) {
3552
+ const isUrgent = status === "error" || status === "warning";
3553
+ return /* @__PURE__ */ jsx58(
3554
+ "div",
3555
+ {
3556
+ className: cn(Banner_default.banner, Banner_default[status], className),
3557
+ role: isUrgent ? "alert" : "status",
3558
+ ...props,
3559
+ children: /* @__PURE__ */ jsxs49("div", { className: Banner_default.inner, children: [
3560
+ /* @__PURE__ */ jsx58("span", { className: Banner_default.icon, "aria-hidden": "true", children: statusIcons3[status] }),
3561
+ /* @__PURE__ */ jsx58("div", { className: Banner_default.content, children }),
3562
+ action && /* @__PURE__ */ jsx58("div", { className: Banner_default.action, children: action }),
3563
+ dismissible && /* @__PURE__ */ jsx58(
3564
+ "button",
3565
+ {
3566
+ className: Banner_default.dismiss,
3567
+ onClick: onDismiss,
3568
+ "aria-label": "Dismiss banner",
3569
+ type: "button",
3570
+ children: /* @__PURE__ */ jsxs49("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", children: [
3571
+ /* @__PURE__ */ jsx58("line", { x1: "4", y1: "4", x2: "12", y2: "12" }),
3572
+ /* @__PURE__ */ jsx58("line", { x1: "12", y1: "4", x2: "4", y2: "12" })
3573
+ ] })
3574
+ }
3575
+ )
3576
+ ] })
3577
+ }
3578
+ );
3579
+ }
3580
+ export {
3581
+ Accordion,
3582
+ Alert,
3583
+ AppointmentCard,
3584
+ Autocomplete,
3585
+ Avatar,
3586
+ Badge,
3587
+ Banner,
3588
+ Breadcrumbs,
3589
+ Button,
3590
+ Card,
3591
+ Checkbox,
3592
+ CheckboxGroup,
3593
+ ClinicalBanner,
3594
+ CollapsiblePanel,
3595
+ ConfirmDialog,
3596
+ DataGrid,
3597
+ DatePicker,
3598
+ DescriptionList,
3599
+ Divider,
3600
+ Drawer,
3601
+ EmptyState,
3602
+ FileUpload,
3603
+ FormField,
3604
+ HelperText,
3605
+ IconButton,
3606
+ Input,
3607
+ InsuranceCard,
3608
+ LabResultRow,
3609
+ Label,
3610
+ List,
3611
+ ListItem,
3612
+ MedicationRow,
3613
+ Modal,
3614
+ MultiSelect,
3615
+ NumberField,
3616
+ OTPInput,
3617
+ Pagination,
3618
+ PatientCard,
3619
+ Popover,
3620
+ ProgressBar,
3621
+ Radio,
3622
+ RadioGroup,
3623
+ SearchField,
3624
+ Select,
3625
+ SideNav,
3626
+ Skeleton,
3627
+ Slider,
3628
+ Spinner,
3629
+ StatCard,
3630
+ StatusBadge,
3631
+ Stepper,
3632
+ Switch,
3633
+ Table,
3634
+ TableBody,
3635
+ TableCell,
3636
+ TableHead,
3637
+ TableHeaderCell,
3638
+ TableRow,
3639
+ Tabs,
3640
+ Textarea,
3641
+ Timeline,
3642
+ Toast,
3643
+ Tooltip,
3644
+ TopNav,
3645
+ accentTeal,
3646
+ border,
3647
+ borderStyle,
3648
+ borderWidth,
3649
+ brandPrimary,
3650
+ cn,
3651
+ container,
3652
+ controlSize,
3653
+ dataVis,
3654
+ duration,
3655
+ easing,
3656
+ focusRing,
3657
+ fontFamily,
3658
+ fontSize,
3659
+ fontWeight,
3660
+ grid,
3661
+ iconSize,
3662
+ lineHeight,
3663
+ modalSize,
3664
+ neutral,
3665
+ opacity,
3666
+ radius,
3667
+ semantic,
3668
+ shadow,
3669
+ sidebarDefault,
3670
+ space,
3671
+ surface,
3672
+ text,
3673
+ touchMin,
3674
+ tracking,
3675
+ zIndex
3676
+ };
3677
+ //# sourceMappingURL=index.mjs.map