@cytario/design 3.4.0 → 5.0.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.js CHANGED
@@ -328,12 +328,44 @@ function IconButton({
328
328
  // src/components/Form/Input/Input.tsx
329
329
  import {
330
330
  TextField,
331
- Label,
332
331
  Input as AriaInput,
333
332
  Text
334
333
  } from "react-aria-components";
335
334
  import { twMerge as twMerge2 } from "tailwind-merge";
335
+
336
+ // src/components/Form/Label/Label.tsx
337
+ import {
338
+ Label as AriaLabel
339
+ } from "react-aria-components";
336
340
  import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
341
+ function Label({ isRequired, children, className, ...props }) {
342
+ return /* @__PURE__ */ jsxs4(
343
+ AriaLabel,
344
+ {
345
+ ...props,
346
+ className: [
347
+ "text-sm",
348
+ "font-medium",
349
+ "text-(--color-text-primary)",
350
+ className
351
+ ].filter(Boolean).join(" "),
352
+ children: [
353
+ children,
354
+ isRequired && /* @__PURE__ */ jsx6(
355
+ "span",
356
+ {
357
+ "aria-hidden": "true",
358
+ className: "ml-0.5 text-(--color-text-danger)",
359
+ children: "*"
360
+ }
361
+ )
362
+ ]
363
+ }
364
+ );
365
+ }
366
+
367
+ // src/components/Form/Input/Input.tsx
368
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
337
369
  var alignClasses = {
338
370
  left: "text-left",
339
371
  center: "text-center",
@@ -366,14 +398,14 @@ function Input({
366
398
  className,
367
399
  ...props
368
400
  }) {
369
- const Field2 = FieldProp;
401
+ const Field = FieldProp;
370
402
  const isInvalid = !!errorMessage;
371
403
  const { inGroup, position } = useInputGroup();
372
404
  const borderColor = isInvalid ? "border-(--color-border-danger)" : "border-(--color-border-default) hover:border-(--color-border-strong)";
373
405
  const radiusClass = inGroup ? groupRadiusClasses(position) : "rounded-md";
374
406
  const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
375
- return /* @__PURE__ */ jsxs4(
376
- Field2,
407
+ return /* @__PURE__ */ jsxs5(
408
+ Field,
377
409
  {
378
410
  ...props,
379
411
  type,
@@ -387,28 +419,8 @@ function Input({
387
419
  className
388
420
  ),
389
421
  children: [
390
- label && /* @__PURE__ */ jsxs4(
391
- Label,
392
- {
393
- className: twMerge2(
394
- "text-sm",
395
- "font-medium",
396
- "text-(--color-text-primary)"
397
- ),
398
- children: [
399
- label,
400
- isRequired && /* @__PURE__ */ jsx6(
401
- "span",
402
- {
403
- "aria-hidden": "true",
404
- className: "ml-0.5 text-(--color-text-danger)",
405
- children: "*"
406
- }
407
- )
408
- ]
409
- }
410
- ),
411
- prefix ? /* @__PURE__ */ jsxs4(
422
+ label && /* @__PURE__ */ jsx7(Label, { isRequired, children: label }),
423
+ prefix ? /* @__PURE__ */ jsxs5(
412
424
  "div",
413
425
  {
414
426
  className: twMerge2(
@@ -423,7 +435,7 @@ function Input({
423
435
  isDisabled && "opacity-50 pointer-events-none"
424
436
  ),
425
437
  children: [
426
- /* @__PURE__ */ jsx6(
438
+ /* @__PURE__ */ jsx7(
427
439
  "span",
428
440
  {
429
441
  className: twMerge2(
@@ -436,7 +448,7 @@ function Input({
436
448
  children: prefix
437
449
  }
438
450
  ),
439
- /* @__PURE__ */ jsx6(
451
+ /* @__PURE__ */ jsx7(
440
452
  AriaInput,
441
453
  {
442
454
  placeholder,
@@ -452,7 +464,7 @@ function Input({
452
464
  )
453
465
  ]
454
466
  }
455
- ) : /* @__PURE__ */ jsx6(
467
+ ) : /* @__PURE__ */ jsx7(
456
468
  AriaInput,
457
469
  {
458
470
  placeholder,
@@ -473,7 +485,7 @@ function Input({
473
485
  )
474
486
  }
475
487
  ),
476
- description && !isInvalid && /* @__PURE__ */ jsx6(
488
+ description && /* @__PURE__ */ jsx7(
477
489
  Text,
478
490
  {
479
491
  slot: "description",
@@ -481,10 +493,11 @@ function Input({
481
493
  children: description
482
494
  }
483
495
  ),
484
- isInvalid && /* @__PURE__ */ jsx6(
496
+ isInvalid && /* @__PURE__ */ jsx7(
485
497
  Text,
486
498
  {
487
499
  slot: "errorMessage",
500
+ role: "alert",
488
501
  className: "text-sm text-(--color-text-danger)",
489
502
  children: errorMessage
490
503
  }
@@ -498,19 +511,20 @@ function Input({
498
511
  import { Check, ChevronDown } from "lucide-react";
499
512
  import {
500
513
  Button as Button2,
501
- Label as Label2,
502
514
  ListBox,
503
515
  ListBoxItem,
504
516
  Popover,
505
517
  Select as AriaSelect,
506
- SelectValue
518
+ SelectValue,
519
+ Text as Text2
507
520
  } from "react-aria-components";
508
521
  import { twMerge as twMerge3 } from "tailwind-merge";
509
- import { Fragment, jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
522
+ import { Fragment, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
510
523
  function Select({
511
524
  label,
512
525
  items,
513
526
  placeholder = "Select an option",
527
+ description,
514
528
  errorMessage,
515
529
  size = "md",
516
530
  isDisabled,
@@ -520,7 +534,7 @@ function Select({
520
534
  ...props
521
535
  }) {
522
536
  const hasError = Boolean(errorMessage);
523
- return /* @__PURE__ */ jsxs5(
537
+ return /* @__PURE__ */ jsxs6(
524
538
  AriaSelect,
525
539
  {
526
540
  ...props,
@@ -529,20 +543,11 @@ function Select({
529
543
  isInvalid: hasError,
530
544
  className: twMerge3("flex flex-col gap-1", className),
531
545
  children: [
532
- label && /* @__PURE__ */ jsxs5(Label2, { className: "text-sm font-medium text-(--color-text-primary)", children: [
533
- label,
534
- isRequired && /* @__PURE__ */ jsx7(
535
- "span",
536
- {
537
- "aria-hidden": "true",
538
- className: "ml-0.5 text-(--color-text-danger)",
539
- children: "*"
540
- }
541
- )
542
- ] }),
543
- /* @__PURE__ */ jsxs5(
546
+ label && /* @__PURE__ */ jsx8(Label, { isRequired, children: label }),
547
+ /* @__PURE__ */ jsxs6(
544
548
  Button2,
545
549
  {
550
+ "aria-required": isRequired || void 0,
546
551
  className: twMerge3(
547
552
  `
548
553
  inline-flex items-center justify-between
@@ -557,7 +562,7 @@ function Select({
557
562
  hasError ? "border-(--color-border-danger)" : "border-(--color-border-default)"
558
563
  ),
559
564
  children: [
560
- /* @__PURE__ */ jsx7(
565
+ /* @__PURE__ */ jsx8(
561
566
  SelectValue,
562
567
  {
563
568
  className: twMerge3(
@@ -571,7 +576,7 @@ function Select({
571
576
  }
572
577
  }
573
578
  ),
574
- /* @__PURE__ */ jsx7(
579
+ /* @__PURE__ */ jsx8(
575
580
  ChevronDown,
576
581
  {
577
582
  "aria-hidden": true,
@@ -584,8 +589,17 @@ function Select({
584
589
  ]
585
590
  }
586
591
  ),
587
- hasError && /* @__PURE__ */ jsx7("span", { className: "text-sm text-(--color-text-danger)", children: errorMessage }),
588
- /* @__PURE__ */ jsx7(
592
+ description && /* @__PURE__ */ jsx8(Text2, { slot: "description", className: "text-sm text-(--color-text-secondary)", children: description }),
593
+ hasError && /* @__PURE__ */ jsx8(
594
+ Text2,
595
+ {
596
+ slot: "errorMessage",
597
+ role: "alert",
598
+ className: "text-sm text-(--color-text-danger)",
599
+ children: errorMessage
600
+ }
601
+ ),
602
+ /* @__PURE__ */ jsx8(
589
603
  Popover,
590
604
  {
591
605
  className: twMerge3(
@@ -598,7 +612,7 @@ function Select({
598
612
  "entering:animate-in entering:fade-in",
599
613
  "exiting:animate-out exiting:fade-out"
600
614
  ),
601
- children: /* @__PURE__ */ jsx7(ListBox, { className: "p-1 outline-none", items, children: (item) => /* @__PURE__ */ jsx7(
615
+ children: /* @__PURE__ */ jsx8(ListBox, { className: "p-1 outline-none", items, children: (item) => /* @__PURE__ */ jsx8(
602
616
  ListBoxItem,
603
617
  {
604
618
  id: item.id,
@@ -615,9 +629,9 @@ function Select({
615
629
  `,
616
630
  sizeStyles[size]
617
631
  ),
618
- children: ({ isSelected }) => /* @__PURE__ */ jsxs5(Fragment, { children: [
619
- /* @__PURE__ */ jsx7("span", { className: renderItem ? "min-w-0 flex-1" : "truncate", children: renderItem ? renderItem(item) : item.name }),
620
- isSelected && /* @__PURE__ */ jsx7(Check, { className: "h-4 w-4 shrink-0 text-(--color-action-primary)" })
632
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs6(Fragment, { children: [
633
+ /* @__PURE__ */ jsx8("span", { className: renderItem ? "min-w-0 flex-1" : "truncate", children: renderItem ? renderItem(item) : item.name }),
634
+ isSelected && /* @__PURE__ */ jsx8(Check, { className: "h-4 w-4 shrink-0 text-(--color-action-primary)" })
621
635
  ] })
622
636
  }
623
637
  ) })
@@ -637,13 +651,13 @@ import {
637
651
  TableBody as AriaTableBody,
638
652
  TableHeader as AriaTableHeader
639
653
  } from "react-aria-components";
640
- import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
654
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
641
655
  var tableSizeClass = {
642
656
  compact: "[--table-row-py:theme(spacing.1)]",
643
657
  comfortable: "[--table-row-py:theme(spacing.3)]"
644
658
  };
645
659
  function Table({ size = "comfortable", className, ...props }) {
646
- return /* @__PURE__ */ jsx8(
660
+ return /* @__PURE__ */ jsx9(
647
661
  AriaTable,
648
662
  {
649
663
  ...props,
@@ -656,10 +670,10 @@ function Table({ size = "comfortable", className, ...props }) {
656
670
  );
657
671
  }
658
672
  function TableHeader(props) {
659
- return /* @__PURE__ */ jsx8(AriaTableHeader, { ...props });
673
+ return /* @__PURE__ */ jsx9(AriaTableHeader, { ...props });
660
674
  }
661
675
  function Column(props) {
662
- return /* @__PURE__ */ jsx8(
676
+ return /* @__PURE__ */ jsx9(
663
677
  AriaColumn,
664
678
  {
665
679
  ...props,
@@ -669,18 +683,18 @@ function Column(props) {
669
683
  "cursor-default select-none outline-none",
670
684
  "focus-visible:outline-2 focus-visible:outline-(--color-border-focus) focus-visible:outline-offset-[-2px]"
671
685
  ].join(" "),
672
- children: ({ allowsSorting, sortDirection }) => /* @__PURE__ */ jsxs6("span", { className: "inline-flex items-center gap-1", children: [
686
+ children: ({ allowsSorting, sortDirection }) => /* @__PURE__ */ jsxs7("span", { className: "inline-flex items-center gap-1", children: [
673
687
  props.children,
674
- allowsSorting && /* @__PURE__ */ jsx8("span", { "aria-hidden": "true", className: "text-(--color-text-tertiary)", children: sortDirection === "ascending" ? "\u25B2" : sortDirection === "descending" ? "\u25BC" : "\u25B4" })
688
+ allowsSorting && /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "text-(--color-text-tertiary)", children: sortDirection === "ascending" ? "\u25B2" : sortDirection === "descending" ? "\u25BC" : "\u25B4" })
675
689
  ] })
676
690
  }
677
691
  );
678
692
  }
679
693
  function TableBody(props) {
680
- return /* @__PURE__ */ jsx8(AriaTableBody, { ...props });
694
+ return /* @__PURE__ */ jsx9(AriaTableBody, { ...props });
681
695
  }
682
696
  function Row(props) {
683
- return /* @__PURE__ */ jsx8(
697
+ return /* @__PURE__ */ jsx9(
684
698
  AriaRow,
685
699
  {
686
700
  ...props,
@@ -696,7 +710,7 @@ function Row(props) {
696
710
  );
697
711
  }
698
712
  function Cell(props) {
699
- return /* @__PURE__ */ jsx8(
713
+ return /* @__PURE__ */ jsx9(
700
714
  AriaCell,
701
715
  {
702
716
  ...props,
@@ -718,7 +732,7 @@ import {
718
732
  Heading
719
733
  } from "react-aria-components";
720
734
  import { X } from "lucide-react";
721
- import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
735
+ import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
722
736
  var sizeStyles2 = {
723
737
  sm: "max-w-md",
724
738
  md: "max-w-lg",
@@ -734,7 +748,7 @@ function Dialog({
734
748
  children,
735
749
  className
736
750
  }) {
737
- return /* @__PURE__ */ jsx9(
751
+ return /* @__PURE__ */ jsx10(
738
752
  ModalOverlay,
739
753
  {
740
754
  isOpen,
@@ -746,7 +760,7 @@ function Dialog({
746
760
  "data-[entering]:animate-in data-[entering]:fade-in",
747
761
  "data-[exiting]:animate-out data-[exiting]:fade-out"
748
762
  ].join(" "),
749
- children: /* @__PURE__ */ jsx9(
763
+ children: /* @__PURE__ */ jsx10(
750
764
  Modal,
751
765
  {
752
766
  className: [
@@ -757,9 +771,9 @@ function Dialog({
757
771
  "data-[exiting]:animate-out data-[exiting]:zoom-out-95 data-[exiting]:fade-out",
758
772
  className
759
773
  ].filter(Boolean).join(" "),
760
- children: /* @__PURE__ */ jsx9(AriaDialog, { className: "outline-none flex flex-col max-h-[85vh]", children: ({ close }) => /* @__PURE__ */ jsxs7(Fragment2, { children: [
761
- /* @__PURE__ */ jsxs7("div", { className: "flex items-center justify-between px-6 py-4 border-b border-(--color-border-default)", children: [
762
- /* @__PURE__ */ jsx9(
774
+ children: /* @__PURE__ */ jsx10(AriaDialog, { className: "outline-none flex flex-col max-h-[85vh]", children: ({ close }) => /* @__PURE__ */ jsxs8(Fragment2, { children: [
775
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between px-6 py-4 border-b border-(--color-border-default)", children: [
776
+ /* @__PURE__ */ jsx10(
763
777
  Heading,
764
778
  {
765
779
  slot: "title",
@@ -767,7 +781,7 @@ function Dialog({
767
781
  children: title
768
782
  }
769
783
  ),
770
- /* @__PURE__ */ jsx9(
784
+ /* @__PURE__ */ jsx10(
771
785
  "button",
772
786
  {
773
787
  type: "button",
@@ -779,11 +793,11 @@ function Dialog({
779
793
  "transition-colors"
780
794
  ].join(" "),
781
795
  "aria-label": "Close",
782
- children: /* @__PURE__ */ jsx9(X, { size: 20, "aria-hidden": "true" })
796
+ children: /* @__PURE__ */ jsx10(X, { size: 20, "aria-hidden": "true" })
783
797
  }
784
798
  )
785
799
  ] }),
786
- /* @__PURE__ */ jsx9("div", { className: "px-6 py-4 overflow-y-auto", children })
800
+ /* @__PURE__ */ jsx10("div", { className: "px-6 py-4 overflow-y-auto", children })
787
801
  ] }) })
788
802
  }
789
803
  )
@@ -792,7 +806,7 @@ function Dialog({
792
806
  }
793
807
 
794
808
  // src/components/Dialog/DialogFooter.tsx
795
- import { jsx as jsx10 } from "react/jsx-runtime";
809
+ import { jsx as jsx11 } from "react/jsx-runtime";
796
810
 
797
811
  // src/components/Toast/Toast.tsx
798
812
  import {
@@ -805,7 +819,7 @@ import {
805
819
  } from "react";
806
820
  import { createPortal } from "react-dom";
807
821
  import { CheckCircle, XCircle, Info, X as X2 } from "lucide-react";
808
- import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
822
+ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
809
823
  var ToastContext = createContext2(null);
810
824
  var toastCounter = 0;
811
825
  var defaultDuration = {
@@ -863,7 +877,7 @@ function ToastItem({
863
877
  if (timerRef.current) clearTimeout(timerRef.current);
864
878
  };
865
879
  }, [toast.duration, toast.variant, dismiss]);
866
- return /* @__PURE__ */ jsxs8(
880
+ return /* @__PURE__ */ jsxs9(
867
881
  "div",
868
882
  {
869
883
  role: "status",
@@ -876,16 +890,16 @@ function ToastItem({
876
890
  config.containerClass
877
891
  ].join(" "),
878
892
  children: [
879
- /* @__PURE__ */ jsx11(IconComponent, { size: 20, className: ["shrink-0 mt-0.5", config.iconClass].join(" "), "aria-hidden": "true" }),
880
- /* @__PURE__ */ jsx11("p", { className: "flex-1 text-sm font-medium", children: toast.message }),
881
- /* @__PURE__ */ jsx11(
893
+ /* @__PURE__ */ jsx12(IconComponent, { size: 20, className: ["shrink-0 mt-0.5", config.iconClass].join(" "), "aria-hidden": "true" }),
894
+ /* @__PURE__ */ jsx12("p", { className: "flex-1 text-sm font-medium", children: toast.message }),
895
+ /* @__PURE__ */ jsx12(
882
896
  "button",
883
897
  {
884
898
  type: "button",
885
899
  onClick: dismiss,
886
900
  className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
887
901
  "aria-label": "Dismiss",
888
- children: /* @__PURE__ */ jsx11(X2, { size: 16, "aria-hidden": "true" })
902
+ children: /* @__PURE__ */ jsx12(X2, { size: 16, "aria-hidden": "true" })
889
903
  }
890
904
  )
891
905
  ]
@@ -905,7 +919,7 @@ function ToastContainer({
905
919
  }) {
906
920
  if (toasts.length === 0) return null;
907
921
  return createPortal(
908
- /* @__PURE__ */ jsx11(PlacementContext.Provider, { value: placement, children: /* @__PURE__ */ jsx11("div", { className: containerPositionStyles[placement], children: toasts.map((toast) => /* @__PURE__ */ jsx11(ToastItem, { toast, onRemove: removeToast }, toast.id)) }) }),
922
+ /* @__PURE__ */ jsx12(PlacementContext.Provider, { value: placement, children: /* @__PURE__ */ jsx12("div", { className: containerPositionStyles[placement], children: toasts.map((toast) => /* @__PURE__ */ jsx12(ToastItem, { toast, onRemove: removeToast }, toast.id)) }) }),
909
923
  document.body
910
924
  );
911
925
  }
@@ -936,9 +950,9 @@ function ToastProvider({ children, bridge, placement = "bottom-right" }) {
936
950
  if (!bridge) return;
937
951
  return bridge.subscribe(addToast);
938
952
  }, [bridge, addToast]);
939
- return /* @__PURE__ */ jsxs8(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
953
+ return /* @__PURE__ */ jsxs9(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
940
954
  children,
941
- /* @__PURE__ */ jsx11(ToastContainer, { toasts, removeToast, placement })
955
+ /* @__PURE__ */ jsx12(ToastContainer, { toasts, removeToast, placement })
942
956
  ] });
943
957
  }
944
958
  function useToast() {
@@ -954,7 +968,7 @@ function useToast() {
954
968
  }
955
969
 
956
970
  // src/components/EmptyState/EmptyState.tsx
957
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
971
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
958
972
  function EmptyState({
959
973
  icon,
960
974
  title,
@@ -962,7 +976,7 @@ function EmptyState({
962
976
  action,
963
977
  className
964
978
  }) {
965
- return /* @__PURE__ */ jsxs9(
979
+ return /* @__PURE__ */ jsxs10(
966
980
  "div",
967
981
  {
968
982
  className: [
@@ -970,10 +984,10 @@ function EmptyState({
970
984
  className
971
985
  ].filter(Boolean).join(" "),
972
986
  children: [
973
- icon && /* @__PURE__ */ jsx12(Icon, { icon, size: "xl", className: "text-(--color-text-tertiary)" }),
974
- /* @__PURE__ */ jsx12("h3", { className: "text-lg font-semibold text-(--color-text-primary) mt-4", children: title }),
975
- description && /* @__PURE__ */ jsx12("p", { className: "text-sm text-(--color-text-secondary) mt-2 max-w-sm", children: description }),
976
- action && /* @__PURE__ */ jsx12("div", { className: "mt-6", children: action })
987
+ icon && /* @__PURE__ */ jsx13(Icon, { icon, size: "xl", className: "text-(--color-text-tertiary)" }),
988
+ /* @__PURE__ */ jsx13("h3", { className: "text-lg font-semibold text-(--color-text-primary) mt-4", children: title }),
989
+ description && /* @__PURE__ */ jsx13("p", { className: "text-sm text-(--color-text-secondary) mt-2 max-w-sm", children: description }),
990
+ action && /* @__PURE__ */ jsx13("div", { className: "mt-6", children: action })
977
991
  ]
978
992
  }
979
993
  );
@@ -984,9 +998,9 @@ import {
984
998
  Checkbox as AriaCheckbox
985
999
  } from "react-aria-components";
986
1000
  import { Check as Check2 } from "lucide-react";
987
- import { Fragment as Fragment3, jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1001
+ import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
988
1002
  function Checkbox({ children, className, ...props }) {
989
- return /* @__PURE__ */ jsx13(
1003
+ return /* @__PURE__ */ jsx14(
990
1004
  AriaCheckbox,
991
1005
  {
992
1006
  ...props,
@@ -995,8 +1009,8 @@ function Checkbox({ children, className, ...props }) {
995
1009
  "disabled:opacity-50 disabled:cursor-default",
996
1010
  className
997
1011
  ].filter(Boolean).join(" "),
998
- children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs10(Fragment3, { children: [
999
- /* @__PURE__ */ jsxs10(
1012
+ children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs11(Fragment3, { children: [
1013
+ /* @__PURE__ */ jsxs11(
1000
1014
  "div",
1001
1015
  {
1002
1016
  className: [
@@ -1006,12 +1020,12 @@ function Checkbox({ children, className, ...props }) {
1006
1020
  isSelected || isIndeterminate ? "bg-(--color-action-primary) border-(--color-action-primary)" : "bg-(--color-surface-default) border-(--color-border-default) group-hover:border-(--color-border-strong)"
1007
1021
  ].join(" "),
1008
1022
  children: [
1009
- isSelected && /* @__PURE__ */ jsx13(Check2, { className: "w-4 h-4 text-(--color-text-inverse)", strokeWidth: 3 }),
1010
- isIndeterminate && /* @__PURE__ */ jsx13("div", { className: "w-3 h-0.5 bg-(--color-text-inverse) rounded-full" })
1023
+ isSelected && /* @__PURE__ */ jsx14(Check2, { className: "w-4 h-4 text-(--color-text-inverse)", strokeWidth: 3 }),
1024
+ isIndeterminate && /* @__PURE__ */ jsx14("div", { className: "w-3 h-0.5 bg-(--color-text-inverse) rounded-full" })
1011
1025
  ]
1012
1026
  }
1013
1027
  ),
1014
- children && /* @__PURE__ */ jsx13("span", { children })
1028
+ children && /* @__PURE__ */ jsx14("span", { children })
1015
1029
  ] })
1016
1030
  }
1017
1031
  );
@@ -1021,7 +1035,7 @@ function Checkbox({ children, className, ...props }) {
1021
1035
  import {
1022
1036
  Switch as AriaSwitch
1023
1037
  } from "react-aria-components";
1024
- import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1038
+ import { Fragment as Fragment4, jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1025
1039
  var trackColorMap = {
1026
1040
  primary: "bg-(--color-action-primary)",
1027
1041
  success: "bg-(--color-action-success)",
@@ -1038,7 +1052,7 @@ function Switch({
1038
1052
  ...props
1039
1053
  }) {
1040
1054
  const isPreset = isPresetColor(color);
1041
- return /* @__PURE__ */ jsx14(
1055
+ return /* @__PURE__ */ jsx15(
1042
1056
  AriaSwitch,
1043
1057
  {
1044
1058
  ...props,
@@ -1047,8 +1061,8 @@ function Switch({
1047
1061
  "disabled:opacity-50 disabled:cursor-default",
1048
1062
  className
1049
1063
  ].filter(Boolean).join(" "),
1050
- children: ({ isSelected }) => /* @__PURE__ */ jsxs11(Fragment4, { children: [
1051
- /* @__PURE__ */ jsx14(
1064
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs12(Fragment4, { children: [
1065
+ /* @__PURE__ */ jsx15(
1052
1066
  "div",
1053
1067
  {
1054
1068
  className: [
@@ -1057,7 +1071,7 @@ function Switch({
1057
1071
  isSelected && isPreset ? trackColorMap[color] : !isSelected ? "bg-(--color-border-strong)" : ""
1058
1072
  ].join(" "),
1059
1073
  style: isSelected && !isPreset ? { backgroundColor: color } : void 0,
1060
- children: /* @__PURE__ */ jsx14(
1074
+ children: /* @__PURE__ */ jsx15(
1061
1075
  "div",
1062
1076
  {
1063
1077
  className: [
@@ -1068,7 +1082,7 @@ function Switch({
1068
1082
  )
1069
1083
  }
1070
1084
  ),
1071
- children && /* @__PURE__ */ jsx14("span", { children })
1085
+ children && /* @__PURE__ */ jsx15("span", { children })
1072
1086
  ] })
1073
1087
  }
1074
1088
  );
@@ -1079,9 +1093,9 @@ import {
1079
1093
  RadioGroup as AriaRadioGroup,
1080
1094
  Radio as AriaRadio
1081
1095
  } from "react-aria-components";
1082
- import { Fragment as Fragment5, jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1096
+ import { Fragment as Fragment5, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1083
1097
  function RadioGroup({ children, className, ...props }) {
1084
- return /* @__PURE__ */ jsx15(
1098
+ return /* @__PURE__ */ jsx16(
1085
1099
  AriaRadioGroup,
1086
1100
  {
1087
1101
  ...props,
@@ -1095,7 +1109,7 @@ function RadioGroup({ children, className, ...props }) {
1095
1109
  );
1096
1110
  }
1097
1111
  function Radio({ children, className, ...props }) {
1098
- return /* @__PURE__ */ jsx15(
1112
+ return /* @__PURE__ */ jsx16(
1099
1113
  AriaRadio,
1100
1114
  {
1101
1115
  ...props,
@@ -1104,8 +1118,8 @@ function Radio({ children, className, ...props }) {
1104
1118
  "disabled:opacity-50 disabled:cursor-default",
1105
1119
  className
1106
1120
  ].filter(Boolean).join(" "),
1107
- children: ({ isSelected }) => /* @__PURE__ */ jsxs12(Fragment5, { children: [
1108
- /* @__PURE__ */ jsx15(
1121
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs13(Fragment5, { children: [
1122
+ /* @__PURE__ */ jsx16(
1109
1123
  "div",
1110
1124
  {
1111
1125
  className: [
@@ -1114,16 +1128,16 @@ function Radio({ children, className, ...props }) {
1114
1128
  "group-focus-visible:ring-2 group-focus-visible:ring-(--color-border-focus) group-focus-visible:ring-offset-2",
1115
1129
  isSelected ? "border-(--color-action-primary)" : "border-(--color-border-default) group-hover:border-(--color-border-strong)"
1116
1130
  ].join(" "),
1117
- children: isSelected && /* @__PURE__ */ jsx15("div", { className: "w-2.5 h-2.5 rounded-full bg-(--color-action-primary)" })
1131
+ children: isSelected && /* @__PURE__ */ jsx16("div", { className: "w-2.5 h-2.5 rounded-full bg-(--color-action-primary)" })
1118
1132
  }
1119
1133
  ),
1120
- children && /* @__PURE__ */ jsx15("span", { children })
1134
+ children && /* @__PURE__ */ jsx16("span", { children })
1121
1135
  ] })
1122
1136
  }
1123
1137
  );
1124
1138
  }
1125
1139
  function RadioButton({ children, className, ...props }) {
1126
- return /* @__PURE__ */ jsx15(
1140
+ return /* @__PURE__ */ jsx16(
1127
1141
  AriaRadio,
1128
1142
  {
1129
1143
  ...props,
@@ -1132,7 +1146,7 @@ function RadioButton({ children, className, ...props }) {
1132
1146
  "disabled:opacity-50 disabled:cursor-default",
1133
1147
  className
1134
1148
  ].filter(Boolean).join(" "),
1135
- children: ({ isSelected }) => /* @__PURE__ */ jsx15(
1149
+ children: ({ isSelected }) => /* @__PURE__ */ jsx16(
1136
1150
  "div",
1137
1151
  {
1138
1152
  className: [
@@ -1148,71 +1162,10 @@ function RadioButton({ children, className, ...props }) {
1148
1162
  );
1149
1163
  }
1150
1164
 
1151
- // src/components/Form/Label/Label.tsx
1152
- import {
1153
- Label as AriaLabel
1154
- } from "react-aria-components";
1155
- import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1156
- function Label3({ isRequired, children, className, ...props }) {
1157
- return /* @__PURE__ */ jsxs13(
1158
- AriaLabel,
1159
- {
1160
- ...props,
1161
- className: [
1162
- "text-sm",
1163
- "font-medium",
1164
- "text-(--color-text-primary)",
1165
- className
1166
- ].filter(Boolean).join(" "),
1167
- children: [
1168
- children,
1169
- isRequired && /* @__PURE__ */ jsx16(
1170
- "span",
1171
- {
1172
- "aria-hidden": "true",
1173
- className: "ml-0.5 text-(--color-text-danger)",
1174
- children: "*"
1175
- }
1176
- )
1177
- ]
1178
- }
1179
- );
1180
- }
1181
-
1182
- // src/components/Form/Field/Field.tsx
1183
- import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1184
- function getErrorMessage(error) {
1185
- if (!error) return void 0;
1186
- if (typeof error === "string") return error;
1187
- return error.message;
1188
- }
1189
- function Field({
1190
- label,
1191
- isRequired,
1192
- description,
1193
- error,
1194
- children,
1195
- className
1196
- }) {
1197
- const errorMessage = getErrorMessage(error);
1198
- return /* @__PURE__ */ jsxs14(
1199
- "div",
1200
- {
1201
- className: ["flex flex-col gap-1", className].filter(Boolean).join(" "),
1202
- children: [
1203
- label && /* @__PURE__ */ jsx17(Label3, { isRequired, children: label }),
1204
- children,
1205
- description && !errorMessage && /* @__PURE__ */ jsx17("p", { className: "text-sm text-(--color-text-secondary)", children: description }),
1206
- errorMessage && /* @__PURE__ */ jsx17("p", { className: "text-sm text-(--color-text-danger)", children: errorMessage })
1207
- ]
1208
- }
1209
- );
1210
- }
1211
-
1212
1165
  // src/components/Form/Fieldset/Fieldset.tsx
1213
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1166
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1214
1167
  function Fieldset({ legend, children, className }) {
1215
- return /* @__PURE__ */ jsxs15(
1168
+ return /* @__PURE__ */ jsxs14(
1216
1169
  "fieldset",
1217
1170
  {
1218
1171
  className: [
@@ -1221,7 +1174,7 @@ function Fieldset({ legend, children, className }) {
1221
1174
  className
1222
1175
  ].filter(Boolean).join(" "),
1223
1176
  children: [
1224
- legend && /* @__PURE__ */ jsx18(
1177
+ legend && /* @__PURE__ */ jsx17(
1225
1178
  "legend",
1226
1179
  {
1227
1180
  className: [
@@ -1241,18 +1194,18 @@ function Fieldset({ legend, children, className }) {
1241
1194
 
1242
1195
  // src/components/Form/InputGroup/InputGroup.tsx
1243
1196
  import React from "react";
1244
- import { jsx as jsx19 } from "react/jsx-runtime";
1197
+ import { jsx as jsx18 } from "react/jsx-runtime";
1245
1198
  function InputGroup({ children, className }) {
1246
1199
  const childArray = React.Children.toArray(children).filter(
1247
1200
  React.isValidElement
1248
1201
  );
1249
- return /* @__PURE__ */ jsx19(
1202
+ return /* @__PURE__ */ jsx18(
1250
1203
  "div",
1251
1204
  {
1252
1205
  className: ["flex items-stretch", className].filter(Boolean).join(" "),
1253
1206
  children: childArray.map((child, index) => {
1254
1207
  const position = childArray.length === 1 ? "standalone" : index === 0 ? "start" : index === childArray.length - 1 ? "end" : "middle";
1255
- return /* @__PURE__ */ jsx19(
1208
+ return /* @__PURE__ */ jsx18(
1256
1209
  InputGroupContext.Provider,
1257
1210
  {
1258
1211
  value: { inGroup: true, position },
@@ -1266,7 +1219,7 @@ function InputGroup({ children, className }) {
1266
1219
  }
1267
1220
 
1268
1221
  // src/components/Form/InputAddon/InputAddon.tsx
1269
- import { jsx as jsx20 } from "react/jsx-runtime";
1222
+ import { jsx as jsx19 } from "react/jsx-runtime";
1270
1223
  function groupRadiusClass3(position) {
1271
1224
  switch (position) {
1272
1225
  case "start":
@@ -1283,7 +1236,7 @@ function InputAddon({ children, className }) {
1283
1236
  const { inGroup, position } = useInputGroup();
1284
1237
  const radiusClass = inGroup ? groupRadiusClass3(position) : "rounded-md";
1285
1238
  const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
1286
- return /* @__PURE__ */ jsx20(
1239
+ return /* @__PURE__ */ jsx19(
1287
1240
  "div",
1288
1241
  {
1289
1242
  className: [
@@ -1303,7 +1256,7 @@ function InputAddon({ children, className }) {
1303
1256
 
1304
1257
  // src/components/Heading/Heading.tsx
1305
1258
  import { twMerge as twMerge4 } from "tailwind-merge";
1306
- import { jsx as jsx21 } from "react/jsx-runtime";
1259
+ import { jsx as jsx20 } from "react/jsx-runtime";
1307
1260
  var defaultSizeMap = {
1308
1261
  h1: "2xl",
1309
1262
  h2: "xl",
@@ -1333,7 +1286,7 @@ function Heading2({
1333
1286
  children
1334
1287
  }) {
1335
1288
  const resolvedSize = size ?? defaultSizeMap[Tag];
1336
- return /* @__PURE__ */ jsx21(
1289
+ return /* @__PURE__ */ jsx20(
1337
1290
  Tag,
1338
1291
  {
1339
1292
  className: twMerge4(
@@ -1347,7 +1300,7 @@ function Heading2({
1347
1300
  );
1348
1301
  }
1349
1302
  function H1(props) {
1350
- return /* @__PURE__ */ jsx21(
1303
+ return /* @__PURE__ */ jsx20(
1351
1304
  Heading2,
1352
1305
  {
1353
1306
  ...props,
@@ -1358,17 +1311,17 @@ function H1(props) {
1358
1311
  );
1359
1312
  }
1360
1313
  function H2(props) {
1361
- return /* @__PURE__ */ jsx21(Heading2, { ...props, as: "h2", size: props.size ?? "xl" });
1314
+ return /* @__PURE__ */ jsx20(Heading2, { ...props, as: "h2", size: props.size ?? "xl" });
1362
1315
  }
1363
1316
  function H3(props) {
1364
- return /* @__PURE__ */ jsx21(Heading2, { ...props, as: "h3", size: props.size ?? "lg" });
1317
+ return /* @__PURE__ */ jsx20(Heading2, { ...props, as: "h3", size: props.size ?? "lg" });
1365
1318
  }
1366
1319
 
1367
1320
  // src/components/Link/Link.tsx
1368
1321
  import {
1369
1322
  Link as AriaLink
1370
1323
  } from "react-aria-components";
1371
- import { jsx as jsx22 } from "react/jsx-runtime";
1324
+ import { jsx as jsx21 } from "react/jsx-runtime";
1372
1325
  var variantStyles2 = {
1373
1326
  default: [
1374
1327
  "text-teal-700 underline",
@@ -1384,7 +1337,7 @@ function Link({
1384
1337
  className,
1385
1338
  ...props
1386
1339
  }) {
1387
- return /* @__PURE__ */ jsx22(
1340
+ return /* @__PURE__ */ jsx21(
1388
1341
  AriaLink,
1389
1342
  {
1390
1343
  ...props,
@@ -1405,20 +1358,20 @@ import {
1405
1358
  Link as Link2
1406
1359
  } from "react-aria-components";
1407
1360
  import { ChevronRight } from "lucide-react";
1408
- import { Fragment as Fragment6, jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
1361
+ import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
1409
1362
  function Breadcrumbs({ items, className }) {
1410
- return /* @__PURE__ */ jsx23(
1363
+ return /* @__PURE__ */ jsx22(
1411
1364
  "nav",
1412
1365
  {
1413
1366
  "aria-label": "Breadcrumb",
1414
1367
  className,
1415
- children: /* @__PURE__ */ jsx23(
1368
+ children: /* @__PURE__ */ jsx22(
1416
1369
  AriaBreadcrumbs,
1417
1370
  {
1418
1371
  className: "flex items-center gap-1 text-sm min-w-0",
1419
1372
  children: items.map((item, index) => {
1420
1373
  const isLast = index === items.length - 1;
1421
- return /* @__PURE__ */ jsx23(
1374
+ return /* @__PURE__ */ jsx22(
1422
1375
  AriaBreadcrumb,
1423
1376
  {
1424
1377
  id: item.id,
@@ -1426,8 +1379,8 @@ function Breadcrumbs({ items, className }) {
1426
1379
  "flex items-center gap-1",
1427
1380
  isLast ? "min-w-0" : "shrink-0"
1428
1381
  ].join(" "),
1429
- children: isLast ? /* @__PURE__ */ jsx23("span", { className: "font-medium text-(--color-text-primary) truncate", children: item.label }) : /* @__PURE__ */ jsxs16(Fragment6, { children: [
1430
- /* @__PURE__ */ jsx23(
1382
+ children: isLast ? /* @__PURE__ */ jsx22("span", { className: "font-medium text-(--color-text-primary) truncate", children: item.label }) : /* @__PURE__ */ jsxs15(Fragment6, { children: [
1383
+ /* @__PURE__ */ jsx22(
1431
1384
  Link2,
1432
1385
  {
1433
1386
  href: item.href,
@@ -1435,7 +1388,7 @@ function Breadcrumbs({ items, className }) {
1435
1388
  children: item.label
1436
1389
  }
1437
1390
  ),
1438
- /* @__PURE__ */ jsx23(
1391
+ /* @__PURE__ */ jsx22(
1439
1392
  ChevronRight,
1440
1393
  {
1441
1394
  className: "shrink-0 text-neutral-400",
@@ -1459,7 +1412,7 @@ import {
1459
1412
  Link as AriaLink2
1460
1413
  } from "react-aria-components";
1461
1414
  import { twMerge as twMerge5 } from "tailwind-merge";
1462
- import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
1415
+ import { jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
1463
1416
  var iconSizeMap3 = {
1464
1417
  sm: "sm",
1465
1418
  md: "sm",
@@ -1474,7 +1427,7 @@ function ButtonLink({
1474
1427
  children,
1475
1428
  ...props
1476
1429
  }) {
1477
- return /* @__PURE__ */ jsxs17(
1430
+ return /* @__PURE__ */ jsxs16(
1478
1431
  AriaLink2,
1479
1432
  {
1480
1433
  ...props,
@@ -1490,9 +1443,9 @@ function ButtonLink({
1490
1443
  className
1491
1444
  ),
1492
1445
  children: [
1493
- iconLeft && /* @__PURE__ */ jsx24(Icon, { icon: iconLeft, size: iconSizeMap3[size] }),
1446
+ iconLeft && /* @__PURE__ */ jsx23(Icon, { icon: iconLeft, size: iconSizeMap3[size] }),
1494
1447
  children,
1495
- iconRight && /* @__PURE__ */ jsx24(Icon, { icon: iconRight, size: iconSizeMap3[size] })
1448
+ iconRight && /* @__PURE__ */ jsx23(Icon, { icon: iconRight, size: iconSizeMap3[size] })
1496
1449
  ]
1497
1450
  }
1498
1451
  );
@@ -1512,7 +1465,7 @@ function IconButtonLink({
1512
1465
  className,
1513
1466
  ...props
1514
1467
  }) {
1515
- const link = /* @__PURE__ */ jsx24(
1468
+ const link = /* @__PURE__ */ jsx23(
1516
1469
  AriaLink2,
1517
1470
  {
1518
1471
  ...props,
@@ -1526,11 +1479,11 @@ function IconButtonLink({
1526
1479
  squareSizeStyles2[size],
1527
1480
  className
1528
1481
  ),
1529
- children: /* @__PURE__ */ jsx24(Icon, { icon, size: iconSizeMap3[size] })
1482
+ children: /* @__PURE__ */ jsx23(Icon, { icon, size: iconSizeMap3[size] })
1530
1483
  }
1531
1484
  );
1532
1485
  if (showTooltip) {
1533
- return /* @__PURE__ */ jsx24(Tooltip, { content: ariaLabel, placement: tooltipPlacement, children: link });
1486
+ return /* @__PURE__ */ jsx23(Tooltip, { content: ariaLabel, placement: tooltipPlacement, children: link });
1534
1487
  }
1535
1488
  return link;
1536
1489
  }
@@ -1540,7 +1493,7 @@ import {
1540
1493
  ToggleButton as AriaToggleButton
1541
1494
  } from "react-aria-components";
1542
1495
  import { twMerge as twMerge6 } from "tailwind-merge";
1543
- import { jsx as jsx25 } from "react/jsx-runtime";
1496
+ import { jsx as jsx24 } from "react/jsx-runtime";
1544
1497
  var sizeStyles4 = {
1545
1498
  sm: "px-3 py-1.5 text-sm",
1546
1499
  md: "px-4 py-2 text-base",
@@ -1589,7 +1542,7 @@ function ToggleButton({
1589
1542
  ...props
1590
1543
  }) {
1591
1544
  const styles = variantStyles3[variant];
1592
- return /* @__PURE__ */ jsx25(
1545
+ return /* @__PURE__ */ jsx24(
1593
1546
  AriaToggleButton,
1594
1547
  {
1595
1548
  ...props,
@@ -1616,7 +1569,7 @@ import {
1616
1569
  RadioGroup as AriaRadioGroup2,
1617
1570
  Radio as AriaRadio2
1618
1571
  } from "react-aria-components";
1619
- import { jsx as jsx26 } from "react/jsx-runtime";
1572
+ import { jsx as jsx25 } from "react/jsx-runtime";
1620
1573
  var ToggleButtonGroupContext = createContext3({
1621
1574
  size: "md"
1622
1575
  });
@@ -1636,7 +1589,7 @@ function ToggleButtonGroup({
1636
1589
  children,
1637
1590
  ...props
1638
1591
  }) {
1639
- return /* @__PURE__ */ jsx26(ToggleButtonGroupContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx26(
1592
+ return /* @__PURE__ */ jsx25(ToggleButtonGroupContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx25(
1640
1593
  AriaRadioGroup2,
1641
1594
  {
1642
1595
  ...props,
@@ -1656,7 +1609,7 @@ function ToggleButtonGroupItem({
1656
1609
  ...props
1657
1610
  }) {
1658
1611
  const { size } = useContext3(ToggleButtonGroupContext);
1659
- return /* @__PURE__ */ jsx26(
1612
+ return /* @__PURE__ */ jsx25(
1660
1613
  AriaRadio2,
1661
1614
  {
1662
1615
  ...props,
@@ -1688,7 +1641,7 @@ import {
1688
1641
  MenuItem as AriaMenuItem,
1689
1642
  Popover as Popover2
1690
1643
  } from "react-aria-components";
1691
- import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
1644
+ import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
1692
1645
  var popoverStyles = [
1693
1646
  "bg-(--color-surface-default) rounded-md",
1694
1647
  "shadow-lg border border-(--color-border-default)",
@@ -1708,13 +1661,13 @@ function Menu({
1708
1661
  className
1709
1662
  }) {
1710
1663
  const selectionProps = selectionMode && selectionMode !== "none" ? { selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange } : {};
1711
- return /* @__PURE__ */ jsxs18(MenuTrigger, { children: [
1664
+ return /* @__PURE__ */ jsxs17(MenuTrigger, { children: [
1712
1665
  children,
1713
- /* @__PURE__ */ jsx27(
1666
+ /* @__PURE__ */ jsx26(
1714
1667
  Popover2,
1715
1668
  {
1716
1669
  className: [popoverStyles, className].filter(Boolean).join(" "),
1717
- children: items ? /* @__PURE__ */ jsx27(
1670
+ children: items ? /* @__PURE__ */ jsx26(
1718
1671
  AriaMenu,
1719
1672
  {
1720
1673
  items,
@@ -1725,7 +1678,7 @@ function Menu({
1725
1678
  },
1726
1679
  ...selectionProps,
1727
1680
  className: "outline-none",
1728
- children: (item) => /* @__PURE__ */ jsxs18(
1681
+ children: (item) => /* @__PURE__ */ jsxs17(
1729
1682
  AriaMenuItem,
1730
1683
  {
1731
1684
  id: item.id,
@@ -1741,14 +1694,14 @@ function Menu({
1741
1694
  item.isDanger ? "text-(--color-text-danger)" : "text-(--color-text-primary)"
1742
1695
  ].filter(Boolean).join(" "),
1743
1696
  children: [
1744
- item.icon && /* @__PURE__ */ jsx27(Icon, { icon: item.icon, size: "sm" }),
1745
- /* @__PURE__ */ jsx27("span", { className: "flex-1", children: item.label }),
1746
- item.endContent && /* @__PURE__ */ jsx27("span", { className: "ml-auto flex items-center", children: item.endContent })
1697
+ item.icon && /* @__PURE__ */ jsx26(Icon, { icon: item.icon, size: "sm" }),
1698
+ /* @__PURE__ */ jsx26("span", { className: "flex-1", children: item.label }),
1699
+ item.endContent && /* @__PURE__ */ jsx26("span", { className: "ml-auto flex items-center", children: item.endContent })
1747
1700
  ]
1748
1701
  }
1749
1702
  )
1750
1703
  }
1751
- ) : /* @__PURE__ */ jsx27(
1704
+ ) : /* @__PURE__ */ jsx26(
1752
1705
  AriaMenu,
1753
1706
  {
1754
1707
  onAction: (key) => onAction?.(key),
@@ -1764,7 +1717,7 @@ function Menu({
1764
1717
 
1765
1718
  // src/components/Menu/MenuItem.tsx
1766
1719
  import { MenuItem as AriaMenuItem2 } from "react-aria-components";
1767
- import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
1720
+ import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
1768
1721
  function MenuItem({
1769
1722
  id,
1770
1723
  children,
@@ -1778,7 +1731,7 @@ function MenuItem({
1778
1731
  textValue,
1779
1732
  className
1780
1733
  }) {
1781
- return /* @__PURE__ */ jsxs19(
1734
+ return /* @__PURE__ */ jsxs18(
1782
1735
  AriaMenuItem2,
1783
1736
  {
1784
1737
  id,
@@ -1797,9 +1750,9 @@ function MenuItem({
1797
1750
  className
1798
1751
  ].filter(Boolean).join(" "),
1799
1752
  children: [
1800
- icon && /* @__PURE__ */ jsx28(Icon, { icon, size: "sm" }),
1801
- /* @__PURE__ */ jsx28("span", { className: "flex-1", children }),
1802
- endContent && /* @__PURE__ */ jsx28("span", { className: "ml-auto flex items-center", children: endContent })
1753
+ icon && /* @__PURE__ */ jsx27(Icon, { icon, size: "sm" }),
1754
+ /* @__PURE__ */ jsx27("span", { className: "flex-1", children }),
1755
+ endContent && /* @__PURE__ */ jsx27("span", { className: "ml-auto flex items-center", children: endContent })
1803
1756
  ]
1804
1757
  }
1805
1758
  );
@@ -1808,7 +1761,7 @@ function MenuItem({
1808
1761
  // src/components/Menu/MenuCheckboxItem.tsx
1809
1762
  import { MenuItem as AriaMenuItem3 } from "react-aria-components";
1810
1763
  import { Check as Check3 } from "lucide-react";
1811
- import { Fragment as Fragment7, jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
1764
+ import { Fragment as Fragment7, jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
1812
1765
  function MenuCheckboxItem({
1813
1766
  id,
1814
1767
  children,
@@ -1816,7 +1769,7 @@ function MenuCheckboxItem({
1816
1769
  isDisabled,
1817
1770
  className
1818
1771
  }) {
1819
- return /* @__PURE__ */ jsx29(
1772
+ return /* @__PURE__ */ jsx28(
1820
1773
  AriaMenuItem3,
1821
1774
  {
1822
1775
  id,
@@ -1832,9 +1785,9 @@ function MenuCheckboxItem({
1832
1785
  isSelected ? "font-medium" : "",
1833
1786
  className
1834
1787
  ].filter(Boolean).join(" "),
1835
- children: ({ isSelected }) => /* @__PURE__ */ jsxs20(Fragment7, { children: [
1836
- /* @__PURE__ */ jsx29("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx29(Check3, { size: 14, className: "text-(--color-action-primary)", "aria-hidden": "true" }) }),
1837
- /* @__PURE__ */ jsx29("span", { className: "flex-1", children })
1788
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs19(Fragment7, { children: [
1789
+ /* @__PURE__ */ jsx28("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx28(Check3, { size: 14, className: "text-(--color-action-primary)", "aria-hidden": "true" }) }),
1790
+ /* @__PURE__ */ jsx28("span", { className: "flex-1", children })
1838
1791
  ] })
1839
1792
  }
1840
1793
  );
@@ -1845,15 +1798,15 @@ import {
1845
1798
  MenuSection as AriaMenuSection,
1846
1799
  Header
1847
1800
  } from "react-aria-components";
1848
- import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
1801
+ import { jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
1849
1802
  function MenuSection({
1850
1803
  header,
1851
1804
  children,
1852
1805
  "aria-label": ariaLabel,
1853
1806
  className
1854
1807
  }) {
1855
- return /* @__PURE__ */ jsxs21(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
1856
- header && /* @__PURE__ */ jsx30(
1808
+ return /* @__PURE__ */ jsxs20(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
1809
+ header && /* @__PURE__ */ jsx29(
1857
1810
  Header,
1858
1811
  {
1859
1812
  className: [
@@ -1872,16 +1825,16 @@ function MenuSection({
1872
1825
 
1873
1826
  // src/components/Menu/MenuHeader.tsx
1874
1827
  import { Header as Header2 } from "react-aria-components";
1875
- import { jsx as jsx31 } from "react/jsx-runtime";
1828
+ import { jsx as jsx30 } from "react/jsx-runtime";
1876
1829
  function MenuHeader({ children, className }) {
1877
- return /* @__PURE__ */ jsx31(Header2, { className, children });
1830
+ return /* @__PURE__ */ jsx30(Header2, { className, children });
1878
1831
  }
1879
1832
 
1880
1833
  // src/components/Menu/MenuSeparator.tsx
1881
1834
  import { Separator } from "react-aria-components";
1882
- import { jsx as jsx32 } from "react/jsx-runtime";
1835
+ import { jsx as jsx31 } from "react/jsx-runtime";
1883
1836
  function MenuSeparator({ className }) {
1884
- return /* @__PURE__ */ jsx32(
1837
+ return /* @__PURE__ */ jsx31(
1885
1838
  Separator,
1886
1839
  {
1887
1840
  className: [
@@ -1899,16 +1852,16 @@ import {
1899
1852
  Button as AriaButton3
1900
1853
  } from "react-aria-components";
1901
1854
  import { twMerge as twMerge8 } from "tailwind-merge";
1902
- import { jsx as jsx33 } from "react/jsx-runtime";
1855
+ import { jsx as jsx32 } from "react/jsx-runtime";
1903
1856
  function Popover3({ children, isOpen, onOpenChange }) {
1904
- return /* @__PURE__ */ jsx33(DialogTrigger, { isOpen, onOpenChange, children });
1857
+ return /* @__PURE__ */ jsx32(DialogTrigger, { isOpen, onOpenChange, children });
1905
1858
  }
1906
1859
  function PopoverTrigger({ children, className }) {
1907
1860
  const cx = `
1908
1861
  inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer
1909
1862
  focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:rounded-sm
1910
1863
  `;
1911
- return /* @__PURE__ */ jsx33(AriaButton3, { className: twMerge8(cx, className), children });
1864
+ return /* @__PURE__ */ jsx32(AriaButton3, { className: twMerge8(cx, className), children });
1912
1865
  }
1913
1866
  function PopoverContent({
1914
1867
  placement = "bottom",
@@ -1929,7 +1882,7 @@ function PopoverContent({
1929
1882
  entering:placement-left:slide-in-from-right-1
1930
1883
  entering:placement-right:slide-in-from-left-1
1931
1884
  `;
1932
- return /* @__PURE__ */ jsx33(
1885
+ return /* @__PURE__ */ jsx32(
1933
1886
  AriaPopover,
1934
1887
  {
1935
1888
  ...rest,
@@ -1950,7 +1903,7 @@ import {
1950
1903
  Tab as AriaTab,
1951
1904
  TabPanel as AriaTabPanel
1952
1905
  } from "react-aria-components";
1953
- import { jsx as jsx34 } from "react/jsx-runtime";
1906
+ import { jsx as jsx33 } from "react/jsx-runtime";
1954
1907
  var TabsContext = createContext4({
1955
1908
  variant: "underline",
1956
1909
  size: "md"
@@ -1968,7 +1921,7 @@ function Tabs({
1968
1921
  children,
1969
1922
  ...props
1970
1923
  }) {
1971
- return /* @__PURE__ */ jsx34(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx34(
1924
+ return /* @__PURE__ */ jsx33(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx33(
1972
1925
  AriaTabs,
1973
1926
  {
1974
1927
  ...props,
@@ -1988,7 +1941,7 @@ function TabList({
1988
1941
  const { variant } = useContext4(TabsContext);
1989
1942
  const baseStyles = variant === "unstyled" ? "flex items-center" : variant === "underline" ? "flex items-center border-b border-(--color-border-default)" : "inline-flex items-center bg-(--color-surface-muted) rounded-lg p-1 gap-1";
1990
1943
  const verticalStyles = variant === "unstyled" ? "flex-col" : variant === "underline" ? "flex-col border-b-0 border-r border-(--color-border-default)" : "flex-col";
1991
- return /* @__PURE__ */ jsx34(
1944
+ return /* @__PURE__ */ jsx33(
1992
1945
  AriaTabList,
1993
1946
  {
1994
1947
  ...props,
@@ -2002,7 +1955,7 @@ function TabList({
2002
1955
  }
2003
1956
  function Tab({ className, ...props }) {
2004
1957
  const { variant, size } = useContext4(TabsContext);
2005
- return /* @__PURE__ */ jsx34(
1958
+ return /* @__PURE__ */ jsx33(
2006
1959
  AriaTab,
2007
1960
  {
2008
1961
  ...props,
@@ -2059,7 +2012,7 @@ function getTabVariantStyles(variant, state) {
2059
2012
  }
2060
2013
  function TabPanel({ className, ...props }) {
2061
2014
  const { variant } = useContext4(TabsContext);
2062
- return /* @__PURE__ */ jsx34(
2015
+ return /* @__PURE__ */ jsx33(
2063
2016
  AriaTabPanel,
2064
2017
  {
2065
2018
  ...props,
@@ -2079,240 +2032,6 @@ import {
2079
2032
  TabPanel as TabPanel2
2080
2033
  } from "react-aria-components";
2081
2034
 
2082
- // src/components/Tree/Tree.tsx
2083
- import { useCallback as useCallback2, useImperativeHandle, useRef as useRef2, useState as useState2 } from "react";
2084
- import { Tree as ArboristTree } from "react-arborist";
2085
- import { ChevronRight as ChevronRight2, Folder, File } from "lucide-react";
2086
- import { Check as Check4 } from "lucide-react";
2087
- import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
2088
- var rowHeightMap = {
2089
- compact: 32,
2090
- comfortable: 40
2091
- };
2092
- function NodeRenderer({
2093
- node,
2094
- style,
2095
- tree,
2096
- dragHandle,
2097
- checkedIds,
2098
- onCheckToggle,
2099
- selectionMode,
2100
- size,
2101
- onHover,
2102
- onHoverEnd,
2103
- onToggle
2104
- }) {
2105
- const data = node.data;
2106
- const isCheckbox = selectionMode === "checkbox";
2107
- const isChecked = isCheckbox && checkedIds.has(node.id);
2108
- const isSelected = node.isSelected && !isCheckbox;
2109
- const isCompact = size === "compact";
2110
- const IconComponent = data.icon ? data.icon : node.isInternal ? Folder : File;
2111
- return /* @__PURE__ */ jsxs22(
2112
- "div",
2113
- {
2114
- ref: dragHandle,
2115
- style,
2116
- className: [
2117
- "relative flex items-center cursor-default select-none",
2118
- isCompact ? "gap-0.5 px-2" : "gap-1 px-3",
2119
- "text-sm text-(--color-text-primary)",
2120
- "outline-none",
2121
- // Full-width background via pseudo-element
2122
- "before:absolute before:inset-y-0 before:left-[-100vw] before:right-0 before:-z-10 before:transition-colors",
2123
- isSelected ? "before:bg-(--color-surface-selected) hover:before:bg-(--color-surface-selected-hover) border-l-2 border-l-(--color-brand-accent)" : "hover:before:bg-(--color-surface-hover)",
2124
- node.isFocused ? "outline-2 outline-(--color-border-focus) outline-offset-[-2px]" : ""
2125
- ].filter(Boolean).join(" "),
2126
- role: "treeitem",
2127
- "aria-selected": isCheckbox ? isChecked : node.isSelected,
2128
- "aria-expanded": node.isInternal ? node.isOpen : void 0,
2129
- "aria-level": node.level + 1,
2130
- onPointerEnter: () => onHover?.(node.data),
2131
- onPointerLeave: () => onHoverEnd?.(node.data),
2132
- onClick: (e) => {
2133
- if (isCheckbox) {
2134
- onCheckToggle(node.id);
2135
- } else {
2136
- node.handleClick(e);
2137
- }
2138
- },
2139
- onKeyDown: (e) => {
2140
- if (isCheckbox && (e.key === " " || e.key === "Enter")) {
2141
- e.preventDefault();
2142
- onCheckToggle(node.id);
2143
- }
2144
- },
2145
- children: [
2146
- /* @__PURE__ */ jsx35(
2147
- "button",
2148
- {
2149
- type: "button",
2150
- className: [
2151
- "flex items-center justify-center w-6 h-6 shrink-0",
2152
- "rounded-sm",
2153
- "text-(--color-text-secondary)",
2154
- "hover:text-(--color-text-primary)",
2155
- "transition-transform",
2156
- node.isInternal ? "visible" : "invisible"
2157
- ].filter(Boolean).join(" "),
2158
- onClick: (e) => {
2159
- e.stopPropagation();
2160
- node.toggle();
2161
- onToggle?.(node.data);
2162
- },
2163
- tabIndex: -1,
2164
- "aria-label": node.isOpen ? "Collapse" : "Expand",
2165
- children: /* @__PURE__ */ jsx35(
2166
- ChevronRight2,
2167
- {
2168
- size: 14,
2169
- className: [
2170
- "transition-transform",
2171
- node.isOpen ? "rotate-90" : ""
2172
- ].filter(Boolean).join(" ")
2173
- }
2174
- )
2175
- }
2176
- ),
2177
- isCheckbox && /* @__PURE__ */ jsx35(
2178
- "div",
2179
- {
2180
- className: [
2181
- "flex items-center justify-center w-5 h-5 shrink-0",
2182
- "rounded-sm border transition-colors",
2183
- isChecked ? "bg-(--color-action-primary) border-(--color-action-primary)" : "bg-(--color-surface-default) border-(--color-border-default) hover:border-(--color-border-strong)"
2184
- ].join(" "),
2185
- role: "checkbox",
2186
- "aria-checked": isChecked,
2187
- "aria-label": `Select ${data.name}`,
2188
- children: isChecked && /* @__PURE__ */ jsx35(
2189
- Check4,
2190
- {
2191
- className: "w-3 h-3 text-(--color-text-inverse)",
2192
- strokeWidth: 3
2193
- }
2194
- )
2195
- }
2196
- ),
2197
- /* @__PURE__ */ jsx35(
2198
- IconComponent,
2199
- {
2200
- size: 16,
2201
- className: "shrink-0 text-(--color-text-secondary)",
2202
- "aria-hidden": "true"
2203
- }
2204
- ),
2205
- /* @__PURE__ */ jsx35("span", { className: "truncate", children: data.name })
2206
- ]
2207
- }
2208
- );
2209
- }
2210
- function Tree({
2211
- data,
2212
- "aria-label": ariaLabel,
2213
- size = "comfortable",
2214
- selectionMode = "single",
2215
- selectedIds,
2216
- onSelectionChange,
2217
- onActivate,
2218
- onToggle,
2219
- onHover,
2220
- onHoverEnd,
2221
- openByDefault = false,
2222
- searchTerm,
2223
- searchMatch,
2224
- height = 400,
2225
- indent = 24,
2226
- disableDrag = true,
2227
- disableDrop = true,
2228
- treeRef,
2229
- className
2230
- }) {
2231
- const internalRef = useRef2(null);
2232
- useImperativeHandle(treeRef, () => internalRef.current, []);
2233
- const [internalChecked, setInternalChecked] = useState2(
2234
- () => /* @__PURE__ */ new Set()
2235
- );
2236
- const checkedIds = selectedIds ?? internalChecked;
2237
- const handleCheckToggle = useCallback2(
2238
- (id) => {
2239
- const next = new Set(checkedIds);
2240
- if (next.has(id)) {
2241
- next.delete(id);
2242
- } else {
2243
- next.add(id);
2244
- }
2245
- if (onSelectionChange) {
2246
- onSelectionChange(next);
2247
- } else {
2248
- setInternalChecked(next);
2249
- }
2250
- },
2251
- [checkedIds, onSelectionChange]
2252
- );
2253
- const handleSelect = useCallback2(
2254
- (nodes) => {
2255
- if (selectionMode === "checkbox" || selectionMode === "none") return;
2256
- if (onSelectionChange) {
2257
- onSelectionChange(new Set(nodes.map((n) => n.id)));
2258
- }
2259
- },
2260
- [selectionMode, onSelectionChange]
2261
- );
2262
- const handleActivate = useCallback2(
2263
- (node) => {
2264
- if (onActivate) {
2265
- onActivate(node.data);
2266
- }
2267
- },
2268
- [onActivate]
2269
- );
2270
- const arboristSearchMatch = searchMatch ? (node, term) => searchMatch(node.data, term) : void 0;
2271
- const selectionProp = selectionMode === "single" && selectedIds && selectedIds.size > 0 ? [...selectedIds][0] : void 0;
2272
- return /* @__PURE__ */ jsx35(
2273
- "div",
2274
- {
2275
- role: "tree",
2276
- "aria-label": ariaLabel,
2277
- className: ["outline-none overflow-hidden", className].filter(Boolean).join(" "),
2278
- children: /* @__PURE__ */ jsx35(
2279
- ArboristTree,
2280
- {
2281
- ref: internalRef,
2282
- data,
2283
- width: "100%",
2284
- height,
2285
- rowHeight: rowHeightMap[size],
2286
- indent,
2287
- openByDefault,
2288
- searchTerm,
2289
- searchMatch: arboristSearchMatch,
2290
- disableDrag,
2291
- disableDrop,
2292
- disableMultiSelection: selectionMode === "single" || selectionMode === "none",
2293
- selection: selectionProp,
2294
- onSelect: handleSelect,
2295
- onActivate: handleActivate,
2296
- disableEdit: true,
2297
- children: (props) => /* @__PURE__ */ jsx35(
2298
- NodeRenderer,
2299
- {
2300
- ...props,
2301
- checkedIds,
2302
- onCheckToggle: handleCheckToggle,
2303
- selectionMode,
2304
- size,
2305
- onHover,
2306
- onHoverEnd,
2307
- onToggle
2308
- }
2309
- )
2310
- }
2311
- )
2312
- }
2313
- );
2314
- }
2315
-
2316
2035
  // src/components/SegmentedControl/SegmentedControl.tsx
2317
2036
  import { createContext as createContext5, useContext as useContext5 } from "react";
2318
2037
  import { twMerge as twMerge10 } from "tailwind-merge";
@@ -2320,7 +2039,7 @@ import {
2320
2039
  ToggleButtonGroup as AriaToggleButtonGroup,
2321
2040
  ToggleButton as AriaToggleButton2
2322
2041
  } from "react-aria-components";
2323
- import { jsx as jsx36 } from "react/jsx-runtime";
2042
+ import { jsx as jsx34 } from "react/jsx-runtime";
2324
2043
  var SegmentedControlContext = createContext5({
2325
2044
  size: "md"
2326
2045
  });
@@ -2340,7 +2059,7 @@ function SegmentedControl({
2340
2059
  ...props
2341
2060
  }) {
2342
2061
  const isNoneMode = selectionMode === "none";
2343
- return /* @__PURE__ */ jsx36(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx36(
2062
+ return /* @__PURE__ */ jsx34(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx34(
2344
2063
  AriaToggleButtonGroup,
2345
2064
  {
2346
2065
  ...props,
@@ -2361,7 +2080,7 @@ function SegmentedControlItem({
2361
2080
  ...props
2362
2081
  }) {
2363
2082
  const { size } = useContext5(SegmentedControlContext);
2364
- return /* @__PURE__ */ jsx36(
2083
+ return /* @__PURE__ */ jsx34(
2365
2084
  AriaToggleButton2,
2366
2085
  {
2367
2086
  ...props,
@@ -2385,257 +2104,9 @@ function SegmentedControlItem({
2385
2104
  );
2386
2105
  }
2387
2106
 
2388
- // src/components/FileCard/FileCard.tsx
2389
- import { useCallback as useCallback3 } from "react";
2390
- import { File as File2, Info as Info2 } from "lucide-react";
2391
- import { Fragment as Fragment8, jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
2392
- function FileCard({
2393
- name,
2394
- icon: IconComponent = File2,
2395
- size,
2396
- compact = false,
2397
- children,
2398
- onInfo,
2399
- onPress,
2400
- className
2401
- }) {
2402
- const isInteractive = !!onPress;
2403
- const radius = compact ? "rounded-md" : "rounded-lg";
2404
- const iconSize = compact ? 24 : 32;
2405
- const thumbnailClass = compact ? "aspect-square rounded-t-(--border-radius-md)" : "aspect-[4/3] rounded-t-(--border-radius-lg)";
2406
- const handleInfoClick = useCallback3(
2407
- (e) => {
2408
- if (isInteractive) {
2409
- e.stopPropagation();
2410
- e.preventDefault();
2411
- }
2412
- onInfo?.();
2413
- },
2414
- [onInfo, isInteractive]
2415
- );
2416
- const handleKeyDown = useCallback3(
2417
- (e) => {
2418
- if (onPress && (e.key === "Enter" || e.key === " ")) {
2419
- e.preventDefault();
2420
- onPress();
2421
- }
2422
- },
2423
- [onPress]
2424
- );
2425
- const cardContent = /* @__PURE__ */ jsxs23(Fragment8, { children: [
2426
- /* @__PURE__ */ jsx37(
2427
- "div",
2428
- {
2429
- className: `shrink-0 overflow-hidden bg-neutral-900 ${thumbnailClass}`,
2430
- children: children ? /* @__PURE__ */ jsx37("div", { className: "h-full w-full overflow-hidden", children }) : /* @__PURE__ */ jsx37("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx37(IconComponent, { size: iconSize, className: "text-(--color-text-secondary)" }) })
2431
- }
2432
- ),
2433
- /* @__PURE__ */ jsx37(
2434
- "div",
2435
- {
2436
- className: [
2437
- "flex flex-col border-t border-(--color-border-default)",
2438
- "bg-(--color-surface-default)",
2439
- compact ? "px-2 py-1.5 rounded-b-(--border-radius-md)" : "gap-0.5 px-3 py-2 rounded-b-(--border-radius-lg)"
2440
- ].join(" "),
2441
- children: compact ? /* @__PURE__ */ jsx37("span", { className: "text-xs font-medium text-(--color-text-primary) truncate", children: name }) : /* @__PURE__ */ jsxs23(Fragment8, { children: [
2442
- /* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1.5", children: [
2443
- /* @__PURE__ */ jsx37(
2444
- IconComponent,
2445
- {
2446
- size: 16,
2447
- className: "shrink-0 text-(--color-text-secondary)"
2448
- }
2449
- ),
2450
- /* @__PURE__ */ jsx37("span", { className: "min-w-0 flex-1 text-sm font-medium text-(--color-text-primary) truncate", children: name }),
2451
- onInfo && /* @__PURE__ */ jsx37(
2452
- "span",
2453
- {
2454
- onClick: handleInfoClick,
2455
- onKeyDown: (e) => {
2456
- if (e.key === "Enter" || e.key === " ") {
2457
- handleInfoClick(e);
2458
- }
2459
- },
2460
- role: "presentation",
2461
- children: /* @__PURE__ */ jsx37(
2462
- IconButton,
2463
- {
2464
- icon: Info2,
2465
- "aria-label": `Show info for ${name}`,
2466
- variant: "ghost",
2467
- size: "sm",
2468
- className: "shrink-0 -mt-0.5 -mr-1",
2469
- onPress: onInfo
2470
- }
2471
- )
2472
- }
2473
- )
2474
- ] }),
2475
- size && /* @__PURE__ */ jsx37("span", { className: "text-xs text-(--color-text-secondary) tabular-nums pl-[22px]", children: size })
2476
- ] })
2477
- }
2478
- )
2479
- ] });
2480
- const baseStyles = [
2481
- "group flex flex-col overflow-hidden",
2482
- radius,
2483
- "border border-(--color-border-default)",
2484
- "shadow-sm",
2485
- "transition-all",
2486
- isInteractive && "hover:border-(--color-border-focus) hover:shadow-md cursor-pointer",
2487
- isInteractive && "focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:ring-offset-2 outline-none",
2488
- className
2489
- ].filter(Boolean).join(" ");
2490
- if (onPress) {
2491
- return /* @__PURE__ */ jsx37(
2492
- "div",
2493
- {
2494
- role: "button",
2495
- tabIndex: 0,
2496
- "aria-label": name,
2497
- className: baseStyles,
2498
- onClick: onPress,
2499
- onKeyDown: handleKeyDown,
2500
- children: cardContent
2501
- }
2502
- );
2503
- }
2504
- return /* @__PURE__ */ jsx37("div", { className: baseStyles, children: cardContent });
2505
- }
2506
-
2507
- // src/components/StorageConnectionCard/StorageConnectionCard.tsx
2508
- import { useCallback as useCallback4 } from "react";
2509
- import { AlertCircle, Database } from "lucide-react";
2510
- import { twMerge as twMerge11 } from "tailwind-merge";
2511
- import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
2512
- var statusDotStyles = {
2513
- connected: "bg-(--color-status-success)",
2514
- error: "border-2 border-(--color-status-danger) bg-transparent",
2515
- loading: "bg-(--color-status-warning) animate-pulse"
2516
- };
2517
- function PreviewArea({
2518
- status = "connected",
2519
- errorMessage,
2520
- children
2521
- }) {
2522
- if (status === "loading") {
2523
- return /* @__PURE__ */ jsx38("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx38(Spinner, { size: "lg", "aria-label": "Loading connection" }) });
2524
- }
2525
- if (status === "error") {
2526
- return /* @__PURE__ */ jsxs24("div", { className: "flex h-full flex-col items-center justify-center gap-2 bg-(--color-surface-danger) px-4", children: [
2527
- /* @__PURE__ */ jsx38(
2528
- Icon,
2529
- {
2530
- icon: AlertCircle,
2531
- size: "lg",
2532
- className: "text-(--color-text-danger)"
2533
- }
2534
- ),
2535
- errorMessage && /* @__PURE__ */ jsx38("p", { className: "text-center text-xs text-(--color-text-danger)", children: errorMessage })
2536
- ] });
2537
- }
2538
- if (children) {
2539
- return /* @__PURE__ */ jsx38("div", { className: "h-full w-full overflow-hidden", children });
2540
- }
2541
- return /* @__PURE__ */ jsx38("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx38(
2542
- Icon,
2543
- {
2544
- icon: Database,
2545
- size: "xl",
2546
- className: "text-(--color-text-secondary)"
2547
- }
2548
- ) });
2549
- }
2550
- function StorageConnectionCard({
2551
- name,
2552
- status,
2553
- errorMessage,
2554
- meta,
2555
- children,
2556
- href,
2557
- onPress,
2558
- actions,
2559
- className
2560
- }) {
2561
- const isInteractive = !!href || !!onPress;
2562
- const handleKeyDown = useCallback4(
2563
- (e) => {
2564
- if (onPress && (e.key === "Enter" || e.key === " ")) {
2565
- e.preventDefault();
2566
- onPress();
2567
- }
2568
- },
2569
- [onPress]
2570
- );
2571
- const cardContent = /* @__PURE__ */ jsxs24(Fragment9, { children: [
2572
- /* @__PURE__ */ jsx38("div", { className: "aspect-[4/3] bg-neutral-900 overflow-hidden rounded-t-(--border-radius-lg)", children: /* @__PURE__ */ jsx38(PreviewArea, { status, errorMessage, children }) }),
2573
- /* @__PURE__ */ jsxs24("div", { className: "flex flex-col gap-1.5 border-t border-(--color-border-default) bg-(--color-surface-default) px-3 py-2.5 rounded-b-(--border-radius-lg)", children: [
2574
- /* @__PURE__ */ jsxs24("div", { className: "flex items-start gap-2", children: [
2575
- status && /* @__PURE__ */ jsx38(
2576
- "span",
2577
- {
2578
- className: twMerge11(
2579
- "mt-1.5 h-2 w-2 shrink-0 rounded-full",
2580
- statusDotStyles[status]
2581
- ),
2582
- "aria-label": `Status: ${status}`
2583
- }
2584
- ),
2585
- /* @__PURE__ */ jsx38("span", { className: "min-w-0 flex-1 line-clamp-2 text-sm font-medium text-(--color-text-primary)", children: name }),
2586
- actions && /* @__PURE__ */ jsx38(
2587
- "span",
2588
- {
2589
- onClick: (e) => {
2590
- if (isInteractive) {
2591
- e.stopPropagation();
2592
- e.preventDefault();
2593
- }
2594
- },
2595
- onKeyDown: (e) => {
2596
- if (isInteractive) {
2597
- e.stopPropagation();
2598
- }
2599
- },
2600
- role: "presentation",
2601
- className: "shrink-0 -mt-1 -mr-1",
2602
- children: actions
2603
- }
2604
- )
2605
- ] }),
2606
- meta && /* @__PURE__ */ jsx38("div", { className: twMerge11("flex items-center gap-2", status && "pl-4"), children: meta })
2607
- ] })
2608
- ] });
2609
- const baseStyles = twMerge11(
2610
- "flex flex-col overflow-hidden rounded-lg",
2611
- "border border-(--color-border-default)",
2612
- "shadow-sm transition-all",
2613
- isInteractive && "hover:border-(--color-border-focus) hover:shadow-md cursor-pointer",
2614
- isInteractive && "focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:ring-offset-2 outline-none",
2615
- className
2616
- );
2617
- if (href) {
2618
- return /* @__PURE__ */ jsx38("a", { href, className: twMerge11(baseStyles, "no-underline"), children: cardContent });
2619
- }
2620
- if (onPress) {
2621
- return /* @__PURE__ */ jsx38(
2622
- "div",
2623
- {
2624
- role: "button",
2625
- tabIndex: 0,
2626
- className: baseStyles,
2627
- onClick: onPress,
2628
- onKeyDown: handleKeyDown,
2629
- children: cardContent
2630
- }
2631
- );
2632
- }
2633
- return /* @__PURE__ */ jsx38("div", { className: baseStyles, children: cardContent });
2634
- }
2635
-
2636
2107
  // src/components/Badge/Badge.tsx
2637
- import { twMerge as twMerge12 } from "tailwind-merge";
2638
- import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
2108
+ import { twMerge as twMerge11 } from "tailwind-merge";
2109
+ import { jsx as jsx35, jsxs as jsxs21 } from "react/jsx-runtime";
2639
2110
  var variantStyles4 = {
2640
2111
  neutral: "bg-(--color-badge-neutral-bg) text-(--color-badge-neutral-text)",
2641
2112
  purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text)",
@@ -2660,10 +2131,10 @@ function Badge({
2660
2131
  icon: IconComponent,
2661
2132
  className
2662
2133
  }) {
2663
- return /* @__PURE__ */ jsxs25(
2134
+ return /* @__PURE__ */ jsxs21(
2664
2135
  "span",
2665
2136
  {
2666
- className: twMerge12(
2137
+ className: twMerge11(
2667
2138
  "inline-flex items-center gap-1 rounded-full",
2668
2139
  "text-xs font-medium leading-tight",
2669
2140
  variantStyles4[variant],
@@ -2671,7 +2142,7 @@ function Badge({
2671
2142
  className
2672
2143
  ),
2673
2144
  children: [
2674
- IconComponent && /* @__PURE__ */ jsx39(IconComponent, { size: iconSizeMap4[size], "aria-hidden": "true" }),
2145
+ IconComponent && /* @__PURE__ */ jsx35(IconComponent, { size: iconSizeMap4[size], "aria-hidden": "true" }),
2675
2146
  children
2676
2147
  ]
2677
2148
  }
@@ -2679,9 +2150,9 @@ function Badge({
2679
2150
  }
2680
2151
 
2681
2152
  // src/components/Card/Card.tsx
2682
- import { useCallback as useCallback5 } from "react";
2683
- import { twMerge as twMerge13 } from "tailwind-merge";
2684
- import { Fragment as Fragment10, jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
2153
+ import { useCallback as useCallback2 } from "react";
2154
+ import { twMerge as twMerge12 } from "tailwind-merge";
2155
+ import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
2685
2156
  var paddingStyles = {
2686
2157
  none: "p-0",
2687
2158
  sm: "p-3",
@@ -2699,13 +2170,13 @@ function Card({
2699
2170
  className
2700
2171
  }) {
2701
2172
  const isInteractive = interactive || !!href || !!onPress;
2702
- const containerClass = twMerge13(
2173
+ const containerClass = twMerge12(
2703
2174
  "bg-(--color-surface-default) border border-(--color-border-default) rounded-lg overflow-hidden shadow-sm",
2704
2175
  isInteractive && "transition-all hover:shadow-md hover:border-(--color-border-focus) cursor-pointer",
2705
2176
  (href || onPress) && "block focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:ring-offset-2 outline-none",
2706
2177
  className
2707
2178
  );
2708
- const handleKeyDown = useCallback5(
2179
+ const handleKeyDown = useCallback2(
2709
2180
  (e) => {
2710
2181
  if (onPress && (e.key === "Enter" || e.key === " ")) {
2711
2182
  e.preventDefault();
@@ -2714,22 +2185,22 @@ function Card({
2714
2185
  },
2715
2186
  [onPress]
2716
2187
  );
2717
- const content = /* @__PURE__ */ jsxs26(Fragment10, { children: [
2718
- header && /* @__PURE__ */ jsx40(
2188
+ const content = /* @__PURE__ */ jsxs22(Fragment8, { children: [
2189
+ header && /* @__PURE__ */ jsx36(
2719
2190
  "div",
2720
2191
  {
2721
- className: twMerge13(
2192
+ className: twMerge12(
2722
2193
  "border-b border-(--color-border-default)",
2723
2194
  paddingStyles[padding]
2724
2195
  ),
2725
2196
  children: header
2726
2197
  }
2727
2198
  ),
2728
- /* @__PURE__ */ jsx40("div", { className: paddingStyles[padding], children }),
2729
- footer && /* @__PURE__ */ jsx40(
2199
+ /* @__PURE__ */ jsx36("div", { className: paddingStyles[padding], children }),
2200
+ footer && /* @__PURE__ */ jsx36(
2730
2201
  "div",
2731
2202
  {
2732
- className: twMerge13(
2203
+ className: twMerge12(
2733
2204
  "border-t border-(--color-border-default)",
2734
2205
  paddingStyles[padding]
2735
2206
  ),
@@ -2738,10 +2209,10 @@ function Card({
2738
2209
  )
2739
2210
  ] });
2740
2211
  if (href) {
2741
- return /* @__PURE__ */ jsx40("a", { href, className: containerClass, children: content });
2212
+ return /* @__PURE__ */ jsx36("a", { href, className: containerClass, children: content });
2742
2213
  }
2743
2214
  if (onPress) {
2744
- return /* @__PURE__ */ jsx40(
2215
+ return /* @__PURE__ */ jsx36(
2745
2216
  "div",
2746
2217
  {
2747
2218
  role: "button",
@@ -2753,13 +2224,13 @@ function Card({
2753
2224
  }
2754
2225
  );
2755
2226
  }
2756
- return /* @__PURE__ */ jsx40("div", { className: containerClass, children: content });
2227
+ return /* @__PURE__ */ jsx36("div", { className: containerClass, children: content });
2757
2228
  }
2758
2229
 
2759
2230
  // src/components/DeltaIndicator/DeltaIndicator.tsx
2760
2231
  import { ArrowUp, ArrowDown, Minus } from "lucide-react";
2761
- import { twMerge as twMerge14 } from "tailwind-merge";
2762
- import { jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
2232
+ import { twMerge as twMerge13 } from "tailwind-merge";
2233
+ import { jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
2763
2234
  function getDirection(current, previous) {
2764
2235
  const diff = current - previous;
2765
2236
  if (diff > 0) return "increase";
@@ -2812,16 +2283,16 @@ function DeltaIndicator({
2812
2283
  className
2813
2284
  }) {
2814
2285
  if (unavailable) {
2815
- return /* @__PURE__ */ jsxs27(
2286
+ return /* @__PURE__ */ jsxs23(
2816
2287
  "span",
2817
2288
  {
2818
- className: twMerge14(
2289
+ className: twMerge13(
2819
2290
  "inline-flex items-center gap-1 font-medium",
2820
2291
  "text-(--color-text-tertiary)",
2821
2292
  className
2822
2293
  ),
2823
2294
  children: [
2824
- label && /* @__PURE__ */ jsx41("span", { className: "text-sm text-(--color-text-secondary) mr-1", children: label }),
2295
+ label && /* @__PURE__ */ jsx37("span", { className: "text-sm text-(--color-text-secondary) mr-1", children: label }),
2825
2296
  unavailableText
2826
2297
  ]
2827
2298
  }
@@ -2851,10 +2322,10 @@ function DeltaIndicator({
2851
2322
  }
2852
2323
  }
2853
2324
  const isPill = mode === "pill";
2854
- return /* @__PURE__ */ jsxs27(
2325
+ return /* @__PURE__ */ jsxs23(
2855
2326
  "span",
2856
2327
  {
2857
- className: twMerge14(
2328
+ className: twMerge13(
2858
2329
  "inline-flex items-center gap-1 font-medium",
2859
2330
  colorStyles2,
2860
2331
  isPill && [
@@ -2865,8 +2336,8 @@ function DeltaIndicator({
2865
2336
  className
2866
2337
  ),
2867
2338
  children: [
2868
- label && /* @__PURE__ */ jsx41("span", { className: "text-sm text-(--color-text-secondary) mr-1", children: label }),
2869
- /* @__PURE__ */ jsx41(IconComponent, { size: 14, "aria-hidden": true }),
2339
+ label && /* @__PURE__ */ jsx37("span", { className: "text-sm text-(--color-text-secondary) mr-1", children: label }),
2340
+ /* @__PURE__ */ jsx37(IconComponent, { size: 14, "aria-hidden": true }),
2870
2341
  valueText
2871
2342
  ]
2872
2343
  }
@@ -2874,8 +2345,8 @@ function DeltaIndicator({
2874
2345
  }
2875
2346
 
2876
2347
  // src/components/ProgressBar/ProgressBar.tsx
2877
- import { twMerge as twMerge15 } from "tailwind-merge";
2878
- import { jsx as jsx42, jsxs as jsxs28 } from "react/jsx-runtime";
2348
+ import { twMerge as twMerge14 } from "tailwind-merge";
2349
+ import { jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
2879
2350
  var fillStyles = {
2880
2351
  brand: "bg-(--color-progress-fill)",
2881
2352
  success: "bg-(--color-progress-fill-success)",
@@ -2898,12 +2369,12 @@ function ProgressBar({
2898
2369
  className
2899
2370
  }) {
2900
2371
  const clampedValue = Math.min(100, Math.max(0, value));
2901
- return /* @__PURE__ */ jsxs28("div", { className: twMerge15("w-full", className), children: [
2902
- (label || description || showValue) && /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between mb-2", children: [
2903
- /* @__PURE__ */ jsx42("span", { className: "text-sm font-medium text-(--color-text-primary)", children: label }),
2904
- /* @__PURE__ */ jsx42("span", { className: "text-sm text-(--color-text-secondary)", children: description ?? (showValue ? `${clampedValue}%` : null) })
2372
+ return /* @__PURE__ */ jsxs24("div", { className: twMerge14("w-full", className), children: [
2373
+ (label || description || showValue) && /* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between mb-2", children: [
2374
+ /* @__PURE__ */ jsx38("span", { className: "text-sm font-medium text-(--color-text-primary)", children: label }),
2375
+ /* @__PURE__ */ jsx38("span", { className: "text-sm text-(--color-text-secondary)", children: description ?? (showValue ? `${clampedValue}%` : null) })
2905
2376
  ] }),
2906
- /* @__PURE__ */ jsx42(
2377
+ /* @__PURE__ */ jsx38(
2907
2378
  "div",
2908
2379
  {
2909
2380
  role: "progressbar",
@@ -2911,14 +2382,14 @@ function ProgressBar({
2911
2382
  "aria-valuemin": 0,
2912
2383
  "aria-valuemax": 100,
2913
2384
  "aria-label": label ?? "Progress",
2914
- className: twMerge15(
2385
+ className: twMerge14(
2915
2386
  "w-full rounded-full bg-(--color-progress-track)",
2916
2387
  sizeStyles9[size]
2917
2388
  ),
2918
- children: /* @__PURE__ */ jsx42(
2389
+ children: /* @__PURE__ */ jsx38(
2919
2390
  "div",
2920
2391
  {
2921
- className: twMerge15(
2392
+ className: twMerge14(
2922
2393
  "h-full rounded-full transition-all duration-300",
2923
2394
  fillStyles[variant]
2924
2395
  ),
@@ -2931,19 +2402,19 @@ function ProgressBar({
2931
2402
  }
2932
2403
 
2933
2404
  // src/components/Banner/Banner.tsx
2934
- import { useState as useState3 } from "react";
2405
+ import { useState as useState2 } from "react";
2935
2406
  import {
2936
- Info as Info3,
2407
+ Info as Info2,
2937
2408
  AlertTriangle,
2938
- AlertCircle as AlertCircle2,
2409
+ AlertCircle,
2939
2410
  CheckCircle2,
2940
2411
  X as X3
2941
2412
  } from "lucide-react";
2942
- import { twMerge as twMerge16 } from "tailwind-merge";
2943
- import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
2413
+ import { twMerge as twMerge15 } from "tailwind-merge";
2414
+ import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
2944
2415
  var variantConfig2 = {
2945
2416
  info: {
2946
- icon: Info3,
2417
+ icon: Info2,
2947
2418
  containerClass: "bg-(--color-banner-info-bg) border-(--color-banner-info-border) text-(--color-banner-info-text)",
2948
2419
  iconClass: "text-(--color-banner-info-icon)",
2949
2420
  role: "status"
@@ -2955,7 +2426,7 @@ var variantConfig2 = {
2955
2426
  role: "alert"
2956
2427
  },
2957
2428
  danger: {
2958
- icon: AlertCircle2,
2429
+ icon: AlertCircle,
2959
2430
  containerClass: "bg-(--color-banner-danger-bg) border-(--color-banner-danger-border) text-(--color-banner-danger-text)",
2960
2431
  iconClass: "text-(--color-banner-danger-icon)",
2961
2432
  role: "alert"
@@ -2976,7 +2447,7 @@ function Banner({
2976
2447
  onDismiss,
2977
2448
  className
2978
2449
  }) {
2979
- const [dismissed, setDismissed] = useState3(false);
2450
+ const [dismissed, setDismissed] = useState2(false);
2980
2451
  if (dismissed) return null;
2981
2452
  const config = variantConfig2[variant];
2982
2453
  const IconComponent = icon ?? config.icon;
@@ -2984,40 +2455,40 @@ function Banner({
2984
2455
  setDismissed(true);
2985
2456
  onDismiss?.();
2986
2457
  };
2987
- return /* @__PURE__ */ jsxs29(
2458
+ return /* @__PURE__ */ jsxs25(
2988
2459
  "div",
2989
2460
  {
2990
2461
  role: config.role,
2991
- className: twMerge16(
2462
+ className: twMerge15(
2992
2463
  "flex items-start gap-3 rounded-lg border px-4 py-3",
2993
2464
  "text-sm",
2994
2465
  config.containerClass,
2995
2466
  className
2996
2467
  ),
2997
2468
  children: [
2998
- /* @__PURE__ */ jsx43(
2469
+ /* @__PURE__ */ jsx39(
2999
2470
  IconComponent,
3000
2471
  {
3001
2472
  size: 20,
3002
- className: twMerge16("shrink-0 mt-0.5", config.iconClass),
2473
+ className: twMerge15("shrink-0 mt-0.5", config.iconClass),
3003
2474
  "aria-hidden": "true"
3004
2475
  }
3005
2476
  ),
3006
- /* @__PURE__ */ jsxs29("div", { className: "flex-1", children: [
3007
- title && /* @__PURE__ */ jsxs29("span", { className: "font-medium", children: [
2477
+ /* @__PURE__ */ jsxs25("div", { className: "flex-1", children: [
2478
+ title && /* @__PURE__ */ jsxs25("span", { className: "font-medium", children: [
3008
2479
  title,
3009
2480
  " \u2014 "
3010
2481
  ] }),
3011
2482
  children
3012
2483
  ] }),
3013
- dismissible && /* @__PURE__ */ jsx43(
2484
+ dismissible && /* @__PURE__ */ jsx39(
3014
2485
  "button",
3015
2486
  {
3016
2487
  type: "button",
3017
2488
  onClick: handleDismiss,
3018
2489
  className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
3019
2490
  "aria-label": "Dismiss",
3020
- children: /* @__PURE__ */ jsx43(X3, { size: 16, "aria-hidden": "true" })
2491
+ children: /* @__PURE__ */ jsx39(X3, { size: 16, "aria-hidden": "true" })
3021
2492
  }
3022
2493
  )
3023
2494
  ]
@@ -3026,8 +2497,8 @@ function Banner({
3026
2497
  }
3027
2498
 
3028
2499
  // src/components/MetricCard/MetricCard.tsx
3029
- import { twMerge as twMerge17 } from "tailwind-merge";
3030
- import { Fragment as Fragment11, jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
2500
+ import { twMerge as twMerge16 } from "tailwind-merge";
2501
+ import { Fragment as Fragment9, jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
3031
2502
  var sizeConfig = {
3032
2503
  sm: {
3033
2504
  padding: "p-3",
@@ -3049,58 +2520,58 @@ function MetricCard({
3049
2520
  className
3050
2521
  }) {
3051
2522
  const config = sizeConfig[size];
3052
- const containerClass = twMerge17(
2523
+ const containerClass = twMerge16(
3053
2524
  "bg-(--color-surface-default) border border-(--color-border-default) rounded-lg shadow-sm",
3054
2525
  config.padding,
3055
2526
  href && "block transition-shadow hover:shadow-md hover:border-(--color-border-focus) focus-visible:ring-2 focus-visible:ring-(--color-border-focus) focus-visible:ring-offset-2 outline-none",
3056
2527
  className
3057
2528
  );
3058
- const content = /* @__PURE__ */ jsxs30(Fragment11, { children: [
3059
- /* @__PURE__ */ jsx44("div", { className: twMerge17(config.labelClass, "text-(--color-text-secondary)"), children: label }),
3060
- /* @__PURE__ */ jsx44(
2529
+ const content = /* @__PURE__ */ jsxs26(Fragment9, { children: [
2530
+ /* @__PURE__ */ jsx40("div", { className: twMerge16(config.labelClass, "text-(--color-text-secondary)"), children: label }),
2531
+ /* @__PURE__ */ jsx40(
3061
2532
  "div",
3062
2533
  {
3063
- className: twMerge17(
2534
+ className: twMerge16(
3064
2535
  config.valueClass,
3065
2536
  "font-semibold text-(--color-text-primary) mt-1 tabular-nums"
3066
2537
  ),
3067
2538
  children: value
3068
2539
  }
3069
2540
  ),
3070
- secondary && /* @__PURE__ */ jsx44("div", { className: "mt-1 text-sm", children: secondary })
2541
+ secondary && /* @__PURE__ */ jsx40("div", { className: "mt-1 text-sm", children: secondary })
3071
2542
  ] });
3072
2543
  if (href) {
3073
- return /* @__PURE__ */ jsx44("a", { href, className: containerClass, children: content });
2544
+ return /* @__PURE__ */ jsx40("a", { href, className: containerClass, children: content });
3074
2545
  }
3075
- return /* @__PURE__ */ jsx44("div", { className: containerClass, children: content });
2546
+ return /* @__PURE__ */ jsx40("div", { className: containerClass, children: content });
3076
2547
  }
3077
2548
 
3078
2549
  // src/components/SectionHeader/SectionHeader.tsx
3079
- import { twMerge as twMerge18 } from "tailwind-merge";
3080
- import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
2550
+ import { twMerge as twMerge17 } from "tailwind-merge";
2551
+ import { jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
3081
2552
  function SectionHeader({
3082
2553
  title,
3083
2554
  children,
3084
2555
  className
3085
2556
  }) {
3086
- return /* @__PURE__ */ jsxs31(
2557
+ return /* @__PURE__ */ jsxs27(
3087
2558
  "div",
3088
2559
  {
3089
- className: twMerge18(
2560
+ className: twMerge17(
3090
2561
  "flex flex-wrap items-center gap-3 py-4",
3091
2562
  className
3092
2563
  ),
3093
2564
  children: [
3094
- /* @__PURE__ */ jsx45(H2, { children: title }),
3095
- children && /* @__PURE__ */ jsx45("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
2565
+ /* @__PURE__ */ jsx41(H2, { children: title }),
2566
+ children && /* @__PURE__ */ jsx41("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
3096
2567
  ]
3097
2568
  }
3098
2569
  );
3099
2570
  }
3100
2571
 
3101
2572
  // src/components/Pill/Pill.tsx
3102
- import { twMerge as twMerge19 } from "tailwind-merge";
3103
- import { jsx as jsx46 } from "react/jsx-runtime";
2573
+ import { twMerge as twMerge18 } from "tailwind-merge";
2574
+ import { jsx as jsx42 } from "react/jsx-runtime";
3104
2575
  var hashColors = {
3105
2576
  purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text) border-(--color-badge-purple-text)/20",
3106
2577
  teal: "bg-(--color-badge-teal-bg) text-(--color-badge-teal-text) border-(--color-badge-teal-text)/20",
@@ -3126,7 +2597,7 @@ function Pill({
3126
2597
  className,
3127
2598
  ...rest
3128
2599
  }) {
3129
- const cx = twMerge19(
2600
+ const cx = twMerge18(
3130
2601
  `
3131
2602
  inline-flex items-center
3132
2603
  rounded-full
@@ -3138,12 +2609,12 @@ function Pill({
3138
2609
  colorStyles[color],
3139
2610
  className
3140
2611
  );
3141
- return /* @__PURE__ */ jsx46("span", { className: cx, ...rest, children });
2612
+ return /* @__PURE__ */ jsx42("span", { className: cx, ...rest, children });
3142
2613
  }
3143
2614
 
3144
2615
  // src/components/Pill/PathPill.tsx
3145
- import { twMerge as twMerge20 } from "tailwind-merge";
3146
- import { jsx as jsx47 } from "react/jsx-runtime";
2616
+ import { twMerge as twMerge19 } from "tailwind-merge";
2617
+ import { jsx as jsx43 } from "react/jsx-runtime";
3147
2618
  function PathPill({
3148
2619
  children,
3149
2620
  visibleCount,
@@ -3155,17 +2626,17 @@ function PathPill({
3155
2626
  const effectiveVisible = visibleCount ?? segments.length;
3156
2627
  const dotCount = Math.max(0, segments.length - effectiveVisible);
3157
2628
  const fullPath = segments.join(" / ");
3158
- return /* @__PURE__ */ jsx47(
2629
+ return /* @__PURE__ */ jsx43(
3159
2630
  "div",
3160
2631
  {
3161
- className: twMerge20("relative flex", className),
2632
+ className: twMerge19("relative flex", className),
3162
2633
  "aria-label": `Path: ${fullPath}`,
3163
2634
  children: segments.map((segment, i) => {
3164
2635
  const isCollapsed = i < dotCount;
3165
2636
  const isLast = i === segments.length - 1;
3166
- const cx = twMerge20(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
2637
+ const cx = twMerge19(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
3167
2638
  const color = colorFn ? colorFn(segment, i) : pillColorFromName(segment);
3168
- return /* @__PURE__ */ jsx47(
2639
+ return /* @__PURE__ */ jsx43(
3169
2640
  Pill,
3170
2641
  {
3171
2642
  className: cx,
@@ -3181,8 +2652,8 @@ function PathPill({
3181
2652
  }
3182
2653
 
3183
2654
  // src/components/FormWizard/FormWizard.tsx
3184
- import { createContext as createContext6, useContext as useContext6, useCallback as useCallback6, useMemo } from "react";
3185
- import { jsx as jsx48 } from "react/jsx-runtime";
2655
+ import { createContext as createContext6, useContext as useContext6, useCallback as useCallback3, useMemo } from "react";
2656
+ import { jsx as jsx44 } from "react/jsx-runtime";
3186
2657
  var FormWizardContext = createContext6({
3187
2658
  currentStep: 0,
3188
2659
  totalSteps: 1,
@@ -3202,7 +2673,7 @@ function FormWizard({
3202
2673
  }) {
3203
2674
  const canGoBack = currentStep > 0;
3204
2675
  const isLastStep = currentStep >= totalSteps - 1;
3205
- const goBack = useCallback6(() => {
2676
+ const goBack = useCallback3(() => {
3206
2677
  if (currentStep > 0) {
3207
2678
  onStepChange(currentStep - 1);
3208
2679
  }
@@ -3217,13 +2688,13 @@ function FormWizard({
3217
2688
  }),
3218
2689
  [currentStep, totalSteps, canGoBack, goBack, isLastStep]
3219
2690
  );
3220
- return /* @__PURE__ */ jsx48(FormWizardContext.Provider, { value, children });
2691
+ return /* @__PURE__ */ jsx44(FormWizardContext.Provider, { value, children });
3221
2692
  }
3222
2693
 
3223
2694
  // src/components/FormWizard/FormWizardProgress.tsx
3224
- import { jsx as jsx49, jsxs as jsxs32 } from "react/jsx-runtime";
2695
+ import { jsx as jsx45, jsxs as jsxs28 } from "react/jsx-runtime";
3225
2696
  function CheckIcon() {
3226
- return /* @__PURE__ */ jsx49(
2697
+ return /* @__PURE__ */ jsx45(
3227
2698
  "svg",
3228
2699
  {
3229
2700
  "aria-hidden": "true",
@@ -3234,24 +2705,24 @@ function CheckIcon() {
3234
2705
  strokeWidth: "2",
3235
2706
  strokeLinecap: "round",
3236
2707
  strokeLinejoin: "round",
3237
- children: /* @__PURE__ */ jsx49("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
2708
+ children: /* @__PURE__ */ jsx45("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
3238
2709
  }
3239
2710
  );
3240
2711
  }
3241
2712
  function FormWizardProgress({ labels }) {
3242
2713
  const { currentStep, totalSteps } = useFormWizard();
3243
- return /* @__PURE__ */ jsx49("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx49("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
2714
+ return /* @__PURE__ */ jsx45("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx45("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
3244
2715
  const isCompleted = index < currentStep;
3245
2716
  const isCurrent = index === currentStep;
3246
2717
  const isFuture = index > currentStep;
3247
- return /* @__PURE__ */ jsxs32(
2718
+ return /* @__PURE__ */ jsxs28(
3248
2719
  "li",
3249
2720
  {
3250
2721
  className: "flex flex-1 flex-col items-center",
3251
2722
  "aria-current": isCurrent ? "step" : void 0,
3252
2723
  children: [
3253
- /* @__PURE__ */ jsxs32("div", { className: "flex w-full items-center", children: [
3254
- index > 0 ? /* @__PURE__ */ jsx49(
2724
+ /* @__PURE__ */ jsxs28("div", { className: "flex w-full items-center", children: [
2725
+ index > 0 ? /* @__PURE__ */ jsx45(
3255
2726
  "div",
3256
2727
  {
3257
2728
  "aria-hidden": "true",
@@ -3260,8 +2731,8 @@ function FormWizardProgress({ labels }) {
3260
2731
  index <= currentStep ? "bg-(--color-brand-primary)" : "bg-(--color-border-default)"
3261
2732
  ].join(" ")
3262
2733
  }
3263
- ) : /* @__PURE__ */ jsx49("div", { className: "flex-1", "aria-hidden": "true" }),
3264
- /* @__PURE__ */ jsx49(
2734
+ ) : /* @__PURE__ */ jsx45("div", { className: "flex-1", "aria-hidden": "true" }),
2735
+ /* @__PURE__ */ jsx45(
3265
2736
  "div",
3266
2737
  {
3267
2738
  className: [
@@ -3273,10 +2744,10 @@ function FormWizardProgress({ labels }) {
3273
2744
  isFuture ? "border-2 border-(--color-border-default) bg-(--color-surface-default) text-(--color-text-tertiary)" : ""
3274
2745
  ].join(" "),
3275
2746
  "aria-hidden": "true",
3276
- children: isCompleted ? /* @__PURE__ */ jsx49(CheckIcon, {}) : index + 1
2747
+ children: isCompleted ? /* @__PURE__ */ jsx45(CheckIcon, {}) : index + 1
3277
2748
  }
3278
2749
  ),
3279
- index < totalSteps - 1 ? /* @__PURE__ */ jsx49(
2750
+ index < totalSteps - 1 ? /* @__PURE__ */ jsx45(
3280
2751
  "div",
3281
2752
  {
3282
2753
  "aria-hidden": "true",
@@ -3285,9 +2756,9 @@ function FormWizardProgress({ labels }) {
3285
2756
  index < currentStep ? "bg-(--color-brand-primary)" : "bg-(--color-border-default)"
3286
2757
  ].join(" ")
3287
2758
  }
3288
- ) : /* @__PURE__ */ jsx49("div", { className: "flex-1", "aria-hidden": "true" })
2759
+ ) : /* @__PURE__ */ jsx45("div", { className: "flex-1", "aria-hidden": "true" })
3289
2760
  ] }),
3290
- /* @__PURE__ */ jsx49(
2761
+ /* @__PURE__ */ jsx45(
3291
2762
  "span",
3292
2763
  {
3293
2764
  className: [
@@ -3305,15 +2776,15 @@ function FormWizardProgress({ labels }) {
3305
2776
  }
3306
2777
 
3307
2778
  // src/components/FormWizard/FormWizardNav.tsx
3308
- import { jsx as jsx50, jsxs as jsxs33 } from "react/jsx-runtime";
2779
+ import { jsx as jsx46, jsxs as jsxs29 } from "react/jsx-runtime";
3309
2780
  function FormWizardNav({
3310
2781
  onNext,
3311
2782
  isSubmitting = false,
3312
2783
  submitLabel = "Submit"
3313
2784
  }) {
3314
2785
  const { canGoBack, goBack, isLastStep } = useFormWizard();
3315
- return /* @__PURE__ */ jsxs33("div", { className: "flex items-center justify-end gap-3", children: [
3316
- canGoBack && /* @__PURE__ */ jsx50(
2786
+ return /* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-end gap-3", children: [
2787
+ canGoBack && /* @__PURE__ */ jsx46(
3317
2788
  Button,
3318
2789
  {
3319
2790
  variant: "secondary",
@@ -3323,7 +2794,7 @@ function FormWizardNav({
3323
2794
  children: "Back"
3324
2795
  }
3325
2796
  ),
3326
- /* @__PURE__ */ jsx50(
2797
+ /* @__PURE__ */ jsx46(
3327
2798
  Button,
3328
2799
  {
3329
2800
  variant: "primary",
@@ -3728,9 +3199,7 @@ export {
3728
3199
  DeltaIndicator,
3729
3200
  Dialog,
3730
3201
  EmptyState,
3731
- Field,
3732
3202
  Fieldset,
3733
- FileCard,
3734
3203
  FontSize2xl,
3735
3204
  FontSize3xl,
3736
3205
  FontSize4xl,
@@ -3760,7 +3229,7 @@ export {
3760
3229
  InputAddon,
3761
3230
  InputGroup,
3762
3231
  InputGroupContext,
3763
- Label3 as Label,
3232
+ Label,
3764
3233
  LineHeightNormal,
3765
3234
  LineHeightRelaxed,
3766
3235
  LineHeightTight,
@@ -3796,7 +3265,6 @@ export {
3796
3265
  Spacing6,
3797
3266
  Spacing8,
3798
3267
  Spinner,
3799
- StorageConnectionCard,
3800
3268
  Switch,
3801
3269
  Tab,
3802
3270
  TabList,
@@ -3810,7 +3278,6 @@ export {
3810
3278
  ToggleButtonGroup,
3811
3279
  ToggleButtonGroupItem,
3812
3280
  Tooltip,
3813
- Tree,
3814
3281
  Tab2 as UnstyledTab,
3815
3282
  TabList2 as UnstyledTabList,
3816
3283
  TabPanel2 as UnstyledTabPanel,