@dimaan/ui 0.0.27 → 0.0.29

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
@@ -5,7 +5,7 @@ import { twMerge } from 'tailwind-merge';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
  import { Loader2, Check, Minus, Calendar, X, ChevronLeft, ChevronRight, Upload, File as File$1, ChevronDown, Search, ChevronUp, ArrowLeft, Menu, FileQuestion, ChevronsUpDown, Inbox, RefreshCw, SearchX, Trash2, Pencil, Eye } from 'lucide-react';
7
7
  import { DirectionProvider } from '@radix-ui/react-direction';
8
- import { Link, useLocation, useResolvedPath, useNavigate } from 'react-router-dom';
8
+ import { Link, useResolvedPath, useMatch, useNavigate } from 'react-router-dom';
9
9
  import * as RadixPopover from '@radix-ui/react-popover';
10
10
  import { DayPicker } from 'react-day-picker';
11
11
  import * as RadixDialog from '@radix-ui/react-dialog';
@@ -92,21 +92,21 @@ var AlertDialogDescription = forwardRef(function AlertDialogDescription2({ class
92
92
 
93
93
  // src/components/button/buttonVariants.ts
94
94
  var buttonVariantClass = {
95
- primary: "bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 focus-visible:ring-primary/40",
95
+ primary: "bg-primary text-primary-foreground shadow-[var(--shadow-btn)] hover:bg-primary/95 hover:-translate-y-px hover:shadow-[var(--shadow-btn-hover)] active:translate-y-0 active:shadow-[var(--shadow-btn-active)] focus-visible:ring-primary/40",
96
96
  secondary: "bg-muted text-foreground hover:bg-muted/80 focus-visible:ring-muted-foreground/30",
97
97
  outline: "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring/40",
98
98
  ghost: "bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring/40",
99
- destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 focus-visible:ring-destructive/40",
100
- success: "bg-success text-success-foreground shadow-sm hover:bg-success/90 focus-visible:ring-success/40",
101
- warning: "bg-warning text-warning-foreground shadow-sm hover:bg-warning/90 focus-visible:ring-warning/40",
99
+ destructive: "bg-destructive text-destructive-foreground shadow-[var(--shadow-solid)] hover:bg-destructive/95 hover:-translate-y-px hover:shadow-[var(--shadow-solid-hover)] active:translate-y-0 active:shadow-[var(--shadow-solid-active)] focus-visible:ring-destructive/40",
100
+ success: "bg-success text-success-foreground shadow-[var(--shadow-solid)] hover:bg-success/95 hover:-translate-y-px hover:shadow-[var(--shadow-solid-hover)] active:translate-y-0 active:shadow-[var(--shadow-solid-active)] focus-visible:ring-success/40",
101
+ warning: "bg-warning text-warning-foreground shadow-[var(--shadow-solid)] hover:bg-warning/95 hover:-translate-y-px hover:shadow-[var(--shadow-solid-hover)] active:translate-y-0 active:shadow-[var(--shadow-solid-active)] focus-visible:ring-warning/40",
102
102
  link: "text-primary underline-offset-4 hover:underline focus-visible:ring-primary/40 px-0 shadow-none"
103
103
  };
104
104
  var buttonSizeClass = {
105
- sm: "h-8 gap-1.5 rounded-md px-3 text-sm",
106
- md: "h-9 gap-2 rounded-md px-4 text-sm",
107
- lg: "h-11 gap-2.5 rounded-md px-6 text-base",
108
- icon: "h-9 w-9 shrink-0 rounded-md p-0",
109
- "icon-sm": "h-8 w-8 shrink-0 rounded-md p-0"
105
+ sm: "h-8 gap-1.5 rounded-[10px] px-3 text-sm",
106
+ md: "h-9 gap-2 rounded-[10px] px-4 text-sm",
107
+ lg: "h-11 gap-2.5 rounded-[10px] px-6 text-base",
108
+ icon: "size-9 shrink-0 rounded-[10px] p-0",
109
+ "icon-sm": "size-8 shrink-0 rounded-[10px] p-0"
110
110
  };
111
111
  var buttonBaseClass = "group/button relative inline-flex items-center justify-center font-medium select-none whitespace-nowrap outline-none transition-[background-color,color,box-shadow,opacity,transform] active:scale-[0.98] focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 motion-reduce:transition-none motion-reduce:active:scale-100 [&_svg]:pointer-events-none [&_svg]:shrink-0";
112
112
  var Button = forwardRef(function Button2({
@@ -169,10 +169,10 @@ var Button = forwardRef(function Button2({
169
169
  );
170
170
  });
171
171
  function Slot({ children }) {
172
- return /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "inline-flex h-4 w-4 items-center justify-center", children });
172
+ return /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "inline-flex size-4 items-center justify-center", children });
173
173
  }
174
174
  function Spinner() {
175
- return /* @__PURE__ */ jsx(Loader2, { "aria-hidden": "true", className: "h-4 w-4 animate-spin", "data-testid": "button-spinner" });
175
+ return /* @__PURE__ */ jsx(Loader2, { "aria-hidden": "true", className: "size-4 animate-spin", "data-testid": "button-spinner" });
176
176
  }
177
177
  var ConfirmDialogContext = createContext(null);
178
178
  function ConfirmDialogProvider({ labels, children }) {
@@ -447,7 +447,7 @@ var HeaderSearch = forwardRef(
447
447
  "span",
448
448
  {
449
449
  "aria-hidden": "true",
450
- className: "pointer-events-none absolute start-3 flex h-4 w-4 items-center justify-center text-muted-foreground",
450
+ className: "pointer-events-none absolute start-3 flex size-4 items-center justify-center text-muted-foreground",
451
451
  children: icon
452
452
  }
453
453
  ) : null,
@@ -574,6 +574,7 @@ function SidebarHeader({ className, children, ...props }) {
574
574
  function SidebarNav({ className, children, ...props }) {
575
575
  return /* @__PURE__ */ jsx("nav", { className: cn("flex flex-1 flex-col gap-1 overflow-y-auto p-2", className), ...props, children });
576
576
  }
577
+ var SidebarNavGroupContext = createContext(null);
577
578
  function SidebarNavGroup({
578
579
  icon,
579
580
  label,
@@ -599,19 +600,39 @@ function SidebarNavGroup({
599
600
  },
600
601
  [isControlled, onOpenChange]
601
602
  );
603
+ const [activeChildIds, setActiveChildIds] = useState(() => /* @__PURE__ */ new Set());
604
+ const reportActive = useCallback((id, isItemActive) => {
605
+ setActiveChildIds((prev) => {
606
+ if (isItemActive === prev.has(id)) return prev;
607
+ const next = new Set(prev);
608
+ if (isItemActive) next.add(id);
609
+ else next.delete(id);
610
+ return next;
611
+ });
612
+ }, []);
613
+ const contextValue = useMemo(() => ({ reportActive }), [reportActive]);
614
+ const hasActiveChild = activeChildIds.size > 0;
615
+ const isActive = active || hasActiveChild;
616
+ const prevHasActiveChild = useRef(false);
617
+ useEffect(() => {
618
+ if (hasActiveChild && !prevHasActiveChild.current && !collapsed) {
619
+ setOpen(true);
620
+ }
621
+ prevHasActiveChild.current = hasActiveChild;
622
+ }, [hasActiveChild, collapsed, setOpen]);
602
623
  useEffect(() => {
603
624
  if (collapsed && open) setOpen(false);
604
625
  }, [collapsed, open, setOpen]);
605
626
  const titleAttr = collapsed && typeof label === "string" ? label : props.title ?? void 0;
606
627
  const showChildren = !collapsed;
607
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
628
+ return /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-col", children: [
608
629
  /* @__PURE__ */ jsxs(
609
630
  "button",
610
631
  {
611
632
  type: "button",
612
633
  "aria-expanded": showChildren ? open : void 0,
613
634
  "aria-controls": showChildren ? submenuId : void 0,
614
- "data-active": active ? "true" : void 0,
635
+ "data-active": isActive ? "true" : void 0,
615
636
  title: titleAttr,
616
637
  onClick: (e) => {
617
638
  if (showChildren) setOpen(!open);
@@ -621,13 +642,20 @@ function SidebarNavGroup({
621
642
  "group relative flex h-9 w-full items-center gap-3 rounded-md px-3 text-sm font-medium outline-none transition-colors",
622
643
  "text-sidebar-foreground/80 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
623
644
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-sidebar",
624
- active && "bg-sidebar-accent text-sidebar-accent-foreground",
645
+ isActive && "bg-sidebar-accent text-sidebar-accent-foreground",
625
646
  collapsed && "justify-center px-0",
626
647
  className
627
648
  ),
628
649
  ...props,
629
650
  children: [
630
- icon ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "flex h-5 w-5 shrink-0 items-center justify-center", children: icon }) : null,
651
+ isActive ? /* @__PURE__ */ jsx(
652
+ "span",
653
+ {
654
+ "aria-hidden": "true",
655
+ className: "absolute inset-y-1.5 start-0 w-1 rounded-full bg-primary"
656
+ }
657
+ ) : null,
658
+ icon ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "flex size-5 shrink-0 items-center justify-center", children: icon }) : null,
631
659
  /* @__PURE__ */ jsx(
632
660
  "span",
633
661
  {
@@ -652,7 +680,7 @@ function SidebarNavGroup({
652
680
  "grid transition-[grid-template-rows] duration-200 ease-out",
653
681
  showChildren && open ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
654
682
  ),
655
- children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5 ps-7 pt-1", children }) })
683
+ children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5 ps-7 pt-1", children: /* @__PURE__ */ jsx(SidebarNavGroupContext.Provider, { value: contextValue, children }) }) })
656
684
  }
657
685
  )
658
686
  ] });
@@ -663,7 +691,7 @@ function ChevronCaret({ open }) {
663
691
  {
664
692
  "aria-hidden": "true",
665
693
  className: cn(
666
- "h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform duration-200",
694
+ "size-3.5 shrink-0 text-muted-foreground transition-transform duration-200",
667
695
  open && "rotate-180"
668
696
  )
669
697
  }
@@ -682,13 +710,20 @@ function SidebarNavItem({
682
710
  ...props
683
711
  }) {
684
712
  const { collapsed } = useDashboardLayout();
685
- const location = useLocation();
686
713
  const resolved = useResolvedPath(to);
687
- const isActive = forcedActive || (end ? location.pathname === resolved.pathname : location.pathname.startsWith(resolved.pathname));
714
+ const group = useContext(SidebarNavGroupContext);
715
+ const itemId = useId();
716
+ const routeMatch = useMatch({ path: resolved.pathname, end: end ?? false });
717
+ const isActive = forcedActive || routeMatch != null;
718
+ useEffect(() => {
719
+ if (!group) return;
720
+ group.reportActive(itemId, isActive);
721
+ return () => group.reportActive(itemId, false);
722
+ }, [group, itemId, isActive]);
688
723
  const labelContent = label ?? children;
689
724
  const titleAttr = collapsed && typeof labelContent === "string" ? labelContent : props.title;
690
725
  const getClassName = (active) => cn(
691
- "group relative flex h-9 items-center gap-3 rounded-md px-3 text-sm font-medium outline-none transition-colors",
726
+ "group relative flex h-9 shrink-0 items-center gap-3 rounded-md px-3 text-sm font-medium outline-none transition-colors",
692
727
  "text-sidebar-foreground/80 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
693
728
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-sidebar",
694
729
  active && "bg-sidebar-accent text-sidebar-accent-foreground",
@@ -696,7 +731,14 @@ function SidebarNavItem({
696
731
  className
697
732
  );
698
733
  const innerContent = /* @__PURE__ */ jsxs(Fragment, { children: [
699
- icon ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "flex h-5 w-5 shrink-0 items-center justify-center", children: icon }) : null,
734
+ isActive ? /* @__PURE__ */ jsx(
735
+ "span",
736
+ {
737
+ "aria-hidden": "true",
738
+ className: "absolute inset-y-1.5 start-0 w-1 rounded-full bg-primary"
739
+ }
740
+ ) : null,
741
+ icon ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "flex size-5 shrink-0 items-center justify-center", children: icon }) : null,
700
742
  /* @__PURE__ */ jsx(
701
743
  "span",
702
744
  {
@@ -814,9 +856,9 @@ function AppShell({
814
856
  ) });
815
857
  }
816
858
  var sizeClass = {
817
- sm: "h-7 w-7 text-xs",
818
- md: "h-9 w-9 text-sm",
819
- lg: "h-11 w-11 text-base"
859
+ sm: "size-7 text-xs",
860
+ md: "size-9 text-sm",
861
+ lg: "size-11 text-base"
820
862
  };
821
863
  function Avatar({ src, alt = "", fallback, size = "md", className, ...props }) {
822
864
  const [errored, setErrored] = useState(false);
@@ -852,6 +894,14 @@ var badgeVariantClass = {
852
894
  destructive: "bg-destructive text-destructive-foreground border-transparent",
853
895
  outline: "border-border bg-transparent text-foreground"
854
896
  };
897
+ var badgeSoftVariantClass = {
898
+ default: "bg-muted text-muted-foreground border-transparent",
899
+ primary: "bg-primary/15 text-primary-soft-foreground border-transparent",
900
+ success: "bg-success/15 text-success-soft-foreground border-transparent",
901
+ warning: "bg-warning/15 text-warning-soft-foreground border-transparent",
902
+ destructive: "bg-destructive/15 text-destructive-soft-foreground border-transparent",
903
+ outline: "border-border bg-transparent text-foreground"
904
+ };
855
905
  var badgeSizeClass = {
856
906
  sm: "h-5 gap-1 px-2 text-[11px]",
857
907
  md: "h-6 gap-1.5 px-2.5 text-xs"
@@ -861,14 +911,16 @@ var badgeDotSizeClass = {
861
911
  md: "size-2"
862
912
  };
863
913
  var badgeBaseClass = "inline-flex shrink-0 items-center rounded-full border font-medium leading-none whitespace-nowrap select-none transition-colors";
864
- var Badge = forwardRef(function Badge2({ variant = "default", size = "md", dot = false, className, children, ...props }, ref) {
914
+ var Badge = forwardRef(function Badge2({ variant = "default", size = "md", tone = "solid", dot = false, className, children, ...props }, ref) {
915
+ const variantClass = tone === "soft" ? badgeSoftVariantClass[variant] : badgeVariantClass[variant];
865
916
  return /* @__PURE__ */ jsxs(
866
917
  "span",
867
918
  {
868
919
  ref,
869
920
  "data-slot": "badge",
870
921
  "data-variant": variant,
871
- className: cn(badgeBaseClass, badgeVariantClass[variant], badgeSizeClass[size], className),
922
+ "data-tone": tone,
923
+ className: cn(badgeBaseClass, variantClass, badgeSizeClass[size], className),
872
924
  ...props,
873
925
  children: [
874
926
  dot ? /* @__PURE__ */ jsx(
@@ -883,9 +935,75 @@ var Badge = forwardRef(function Badge2({ variant = "default", size = "md", dot =
883
935
  }
884
936
  );
885
937
  });
938
+
939
+ // src/components/card/cardVariants.ts
940
+ var cardBaseClass = "rounded-xl border border-border bg-card text-card-foreground shadow-[var(--shadow-card)]";
941
+ var cardHeaderClass = "flex flex-col gap-1.5 p-6";
942
+ var cardTitleClass = "text-lg font-semibold leading-none tracking-tight text-foreground";
943
+ var cardDescriptionClass = "text-sm text-muted-foreground";
944
+ var cardContentClass = "p-6 pt-0";
945
+ var cardFooterClass = "flex items-center gap-2 p-6 pt-0";
946
+ var Card = forwardRef(function Card2({ className, ...props }, ref) {
947
+ return /* @__PURE__ */ jsx("div", { ref, "data-slot": "card", className: cn(cardBaseClass, className), ...props });
948
+ });
949
+ var CardHeader = forwardRef(
950
+ function CardHeader2({ className, ...props }, ref) {
951
+ return /* @__PURE__ */ jsx(
952
+ "div",
953
+ {
954
+ ref,
955
+ "data-slot": "card-header",
956
+ className: cn(cardHeaderClass, className),
957
+ ...props
958
+ }
959
+ );
960
+ }
961
+ );
962
+ var CardTitle = forwardRef(
963
+ function CardTitle2({ className, ...props }, ref) {
964
+ return /* @__PURE__ */ jsx("h3", { ref, "data-slot": "card-title", className: cn(cardTitleClass, className), ...props });
965
+ }
966
+ );
967
+ var CardDescription = forwardRef(function CardDescription2({ className, ...props }, ref) {
968
+ return /* @__PURE__ */ jsx(
969
+ "p",
970
+ {
971
+ ref,
972
+ "data-slot": "card-description",
973
+ className: cn(cardDescriptionClass, className),
974
+ ...props
975
+ }
976
+ );
977
+ });
978
+ var CardContent = forwardRef(
979
+ function CardContent2({ className, ...props }, ref) {
980
+ return /* @__PURE__ */ jsx(
981
+ "div",
982
+ {
983
+ ref,
984
+ "data-slot": "card-content",
985
+ className: cn(cardContentClass, className),
986
+ ...props
987
+ }
988
+ );
989
+ }
990
+ );
991
+ var CardFooter = forwardRef(
992
+ function CardFooter2({ className, ...props }, ref) {
993
+ return /* @__PURE__ */ jsx(
994
+ "div",
995
+ {
996
+ ref,
997
+ "data-slot": "card-footer",
998
+ className: cn(cardFooterClass, className),
999
+ ...props
1000
+ }
1001
+ );
1002
+ }
1003
+ );
886
1004
  var sizeClass2 = {
887
- sm: "h-3.5 w-3.5",
888
- md: "h-4 w-4"
1005
+ sm: "size-3.5",
1006
+ md: "size-4"
889
1007
  };
890
1008
  var Checkbox = forwardRef(function Checkbox2({
891
1009
  checked,
@@ -928,7 +1046,7 @@ var Checkbox = forwardRef(function Checkbox2({
928
1046
  "indeterminate:border-primary indeterminate:bg-primary",
929
1047
  "hover:border-ring",
930
1048
  "disabled:cursor-not-allowed disabled:opacity-50",
931
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background"
1049
+ "focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-primary-glow"
932
1050
  ),
933
1051
  ...rest
934
1052
  }
@@ -938,7 +1056,7 @@ var Checkbox = forwardRef(function Checkbox2({
938
1056
  {
939
1057
  "aria-hidden": "true",
940
1058
  strokeWidth: 3,
941
- className: "pointer-events-none absolute inset-0 m-auto h-3 w-3 text-primary-foreground opacity-0 peer-checked:opacity-100 peer-indeterminate:opacity-0"
1059
+ className: "pointer-events-none absolute inset-0 m-auto size-3 text-primary-foreground opacity-0 peer-checked:opacity-100 peer-indeterminate:opacity-0"
942
1060
  }
943
1061
  ),
944
1062
  /* @__PURE__ */ jsx(
@@ -946,7 +1064,7 @@ var Checkbox = forwardRef(function Checkbox2({
946
1064
  {
947
1065
  "aria-hidden": "true",
948
1066
  strokeWidth: 3,
949
- className: "pointer-events-none absolute inset-0 m-auto h-3 w-3 text-primary-foreground opacity-0 peer-indeterminate:opacity-100"
1067
+ className: "pointer-events-none absolute inset-0 m-auto size-3 text-primary-foreground opacity-0 peer-indeterminate:opacity-100"
950
1068
  }
951
1069
  )
952
1070
  ] });
@@ -963,20 +1081,20 @@ var datePickerTriggerSizeClass = {
963
1081
  md: "h-9 rounded-md ps-3 pe-9 text-sm gap-2",
964
1082
  lg: "h-11 rounded-md ps-4 pe-10 text-base gap-2"
965
1083
  };
966
- var datePickerTriggerBaseClass = "group/datepicker relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-1 focus-visible:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer";
1084
+ var datePickerTriggerBaseClass = "group/datepicker relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-visible:ring-[3px] focus-visible:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer";
967
1085
  var datePickerPlaceholderClass = "truncate text-muted-foreground";
968
1086
  var datePickerValueClass = "truncate text-foreground";
969
1087
  var datePickerContentClass = "z-50 overflow-hidden rounded-md border border-border bg-popover p-3 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95";
970
1088
  var datePickerCalendarClass = "text-sm";
971
1089
  var datePickerCaptionClass = "flex items-center justify-between gap-2 pb-2 text-sm font-semibold";
972
- var datePickerNavButtonClass = "inline-flex h-7 w-7 items-center justify-center rounded-md border border-input bg-background text-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50";
1090
+ var datePickerNavButtonClass = "inline-flex size-7 items-center justify-center rounded-md border border-input bg-background text-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50";
973
1091
  var datePickerDayWrapperClass = "p-0 text-center";
974
- var datePickerDayBaseClass = "inline-flex h-8 w-8 items-center justify-center rounded-md text-sm text-foreground font-normal transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40";
1092
+ var datePickerDayBaseClass = "inline-flex size-8 items-center justify-center rounded-md text-sm text-foreground font-normal transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40";
975
1093
  var datePickerSelectedClass = "[&_button]:bg-primary [&_button]:text-primary-foreground [&_button]:hover:bg-primary [&_button]:hover:text-primary-foreground";
976
1094
  var datePickerTodayClass = "[&_button]:font-semibold [&_button]:ring-1 [&_button]:ring-inset [&_button]:ring-ring/40";
977
1095
  var datePickerOutsideClass = "[&_button]:text-muted-foreground [&_button]:opacity-60";
978
1096
  var datePickerDisabledClass = "[&_button]:pointer-events-none [&_button]:opacity-40";
979
- var datePickerWeekdayClass = "h-8 w-8 text-center text-xs font-medium text-muted-foreground";
1097
+ var datePickerWeekdayClass = "size-8 text-center text-xs font-medium text-muted-foreground";
980
1098
  var datePickerWeekClass = "flex w-full";
981
1099
  var datePickerWeekdaysClass = "flex w-full";
982
1100
  var datePickerMonthGridClass = "w-full border-collapse";
@@ -1287,6 +1405,9 @@ var pageHeaderBorderedClass = "border-b border-border pb-4";
1287
1405
  var pageHeaderTitleRowClass = "flex flex-wrap items-start justify-between gap-3 sm:gap-4";
1288
1406
  var pageHeaderTitleBlockClass = "min-w-0 flex-1 space-y-1";
1289
1407
  var pageHeaderTitleClass = "text-2xl font-semibold tracking-tight text-foreground";
1408
+ var pageHeaderEyebrowClass = "text-xs font-semibold uppercase tracking-wide text-primary";
1409
+ var pageHeaderTitleLineClass = "flex flex-wrap items-center gap-x-2.5 gap-y-1";
1410
+ var pageHeaderTitleMetaClass = "shrink-0";
1290
1411
  var pageHeaderDescriptionClass = "text-sm text-muted-foreground";
1291
1412
  var pageHeaderActionsClass = "flex shrink-0 flex-wrap items-center gap-2";
1292
1413
  var pageHeaderBackClass = "inline-flex items-center gap-1.5 self-start text-sm text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-md";
@@ -1295,6 +1416,8 @@ var pageHeaderBreadcrumbsClass = "text-xs text-muted-foreground";
1295
1416
  var PageHeader = forwardRef(function PageHeader2({
1296
1417
  title,
1297
1418
  description,
1419
+ eyebrow,
1420
+ titleMeta,
1298
1421
  breadcrumbs,
1299
1422
  back,
1300
1423
  actions,
@@ -1315,11 +1438,15 @@ var PageHeader = forwardRef(function PageHeader2({
1315
1438
  back ? /* @__PURE__ */ jsx(PageHeaderBack, { ...back }) : null,
1316
1439
  /* @__PURE__ */ jsxs("div", { "data-slot": "page-header-row", className: pageHeaderTitleRowClass, children: [
1317
1440
  /* @__PURE__ */ jsxs("div", { className: pageHeaderTitleBlockClass, children: [
1318
- createElement(
1319
- as,
1320
- { "data-slot": "page-header-title", className: pageHeaderTitleClass },
1321
- title
1322
- ),
1441
+ eyebrow ? /* @__PURE__ */ jsx("p", { "data-slot": "page-header-eyebrow", className: pageHeaderEyebrowClass, children: eyebrow }) : null,
1442
+ /* @__PURE__ */ jsxs("div", { className: pageHeaderTitleLineClass, children: [
1443
+ createElement(
1444
+ as,
1445
+ { "data-slot": "page-header-title", className: pageHeaderTitleClass },
1446
+ title
1447
+ ),
1448
+ titleMeta ? /* @__PURE__ */ jsx("span", { "data-slot": "page-header-title-meta", className: pageHeaderTitleMetaClass, children: titleMeta }) : null
1449
+ ] }),
1323
1450
  description ? /* @__PURE__ */ jsx("p", { "data-slot": "page-header-description", className: pageHeaderDescriptionClass, children: description }) : null
1324
1451
  ] }),
1325
1452
  actions ? /* @__PURE__ */ jsx("div", { "data-slot": "page-header-actions", className: pageHeaderActionsClass, children: actions }) : null
@@ -1351,7 +1478,7 @@ function PageHeaderBack({ label = "Back", to, onClick, render }) {
1351
1478
  var detailPageBaseClass = "flex w-full flex-col gap-6";
1352
1479
  var detailPageBodyClass = "flex flex-col gap-6";
1353
1480
  var detailPageSkeletonRowClass = "h-5 w-full animate-pulse rounded-md bg-muted";
1354
- var detailPageEmptyClass = "rounded-md border border-border bg-card";
1481
+ var detailPageEmptyClass = "rounded-xl border border-border bg-card";
1355
1482
  var DEFAULT_LABELS_LTR = {
1356
1483
  back: "Back",
1357
1484
  notFoundTitle: "Not found",
@@ -2018,7 +2145,7 @@ var inputSizeClass = {
2018
2145
  md: "h-9 rounded-md px-3 text-sm gap-2",
2019
2146
  lg: "h-11 rounded-md px-4 text-base gap-2.5"
2020
2147
  };
2021
- var inputBaseClass = "group/input relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-2 focus-within:ring-ring/40 focus-within:ring-offset-1 focus-within:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[input:disabled]:pointer-events-none has-[input:disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0";
2148
+ var inputBaseClass = "group/input relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-[3px] focus-within:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[input:disabled]:pointer-events-none has-[input:disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0";
2022
2149
  var Input = forwardRef(function Input2({
2023
2150
  variant = "default",
2024
2151
  inputSize = "md",
@@ -2052,7 +2179,7 @@ var Input = forwardRef(function Input2({
2052
2179
  "span",
2053
2180
  {
2054
2181
  "aria-hidden": "true",
2055
- className: "inline-flex h-4 w-4 items-center justify-center text-muted-foreground",
2182
+ className: "inline-flex size-4 items-center justify-center text-muted-foreground",
2056
2183
  children: leadingIcon
2057
2184
  }
2058
2185
  ) : null,
@@ -2076,7 +2203,7 @@ var Input = forwardRef(function Input2({
2076
2203
  "span",
2077
2204
  {
2078
2205
  "aria-hidden": "true",
2079
- className: "inline-flex h-4 w-4 items-center justify-center text-muted-foreground",
2206
+ className: "inline-flex size-4 items-center justify-center text-muted-foreground",
2080
2207
  children: trailingIcon
2081
2208
  }
2082
2209
  ) : null
@@ -2197,7 +2324,7 @@ function Pagination({
2197
2324
  disabled: isFirst,
2198
2325
  onClick: goPrev,
2199
2326
  "aria-label": labels.previousPage,
2200
- children: isRtl ? /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": "true", className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": "true", className: "h-3.5 w-3.5" })
2327
+ children: isRtl ? /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": "true", className: "size-3.5" }) : /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": "true", className: "size-3.5" })
2201
2328
  }
2202
2329
  ),
2203
2330
  /* @__PURE__ */ jsxs("span", { className: "px-1 text-foreground", children: [
@@ -2214,7 +2341,7 @@ function Pagination({
2214
2341
  disabled: isLast,
2215
2342
  onClick: goNext,
2216
2343
  "aria-label": labels.nextPage,
2217
- children: isRtl ? /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": "true", className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": "true", className: "h-3.5 w-3.5" })
2344
+ children: isRtl ? /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": "true", className: "size-3.5" }) : /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": "true", className: "size-3.5" })
2218
2345
  }
2219
2346
  )
2220
2347
  ] })
@@ -2243,23 +2370,23 @@ function Toolbar({ count, onClear, renderLabel, clearLabel, children }) {
2243
2370
  var tableSizeClass = {
2244
2371
  sm: {
2245
2372
  row: "",
2246
- cell: "px-3 py-1.5 text-xs",
2373
+ cell: "px-3 py-1.5 text-xs tabular-nums",
2247
2374
  head: "whitespace-nowrap px-3 py-2 text-xs font-medium"
2248
2375
  },
2249
2376
  md: {
2250
2377
  row: "",
2251
- cell: "px-4 py-2.5 text-sm",
2378
+ cell: "px-4 py-2.5 text-sm tabular-nums",
2252
2379
  head: "whitespace-nowrap px-4 py-2.5 text-xs font-medium uppercase tracking-wide"
2253
2380
  },
2254
2381
  lg: {
2255
2382
  row: "",
2256
- cell: "px-5 py-3.5 text-sm",
2383
+ cell: "px-5 py-3.5 text-sm tabular-nums",
2257
2384
  head: "whitespace-nowrap px-5 py-3 text-sm font-medium"
2258
2385
  }
2259
2386
  };
2260
2387
  var tableBaseClass = "w-full caption-bottom border-collapse";
2261
- var selectedRowClass = "bg-muted/40";
2262
- var sortIconClass = "inline-flex h-3 w-3 shrink-0 items-center justify-center";
2388
+ var selectedRowClass = "bg-primary/10";
2389
+ var sortIconClass = "inline-flex size-3 shrink-0 items-center justify-center";
2263
2390
  var alignClass = {
2264
2391
  start: "text-start",
2265
2392
  center: "text-center",
@@ -2386,7 +2513,7 @@ function Table(props) {
2386
2513
  "div",
2387
2514
  {
2388
2515
  className: cn(
2389
- "overflow-x-auto rounded-md border border-border bg-background",
2516
+ "overflow-x-auto rounded-xl border border-border bg-card shadow-[var(--shadow-card)]",
2390
2517
  maxHeight !== void 0 && "overflow-y-auto"
2391
2518
  ),
2392
2519
  style: maxHeight !== void 0 ? { maxHeight } : void 0,
@@ -2404,9 +2531,11 @@ function Table(props) {
2404
2531
  "thead",
2405
2532
  {
2406
2533
  className: cn(
2407
- // Opaque (not bg-muted/40) so a sticky header fully hides the rows
2408
- // scrolling underneath it.
2409
- "bg-muted text-muted-foreground",
2534
+ // Clean opaque header (so a sticky header fully hides the rows
2535
+ // scrolling underneath it) with a hairline bottom rule drawn via an
2536
+ // inset shadow — it stays attached to the sticky header instead of
2537
+ // collapsing into the first row's border.
2538
+ "bg-card text-muted-foreground shadow-[inset_0_-1px_0_var(--color-border)]",
2410
2539
  maxHeight !== void 0 && "sticky top-0 z-10"
2411
2540
  ),
2412
2541
  children: /* @__PURE__ */ jsxs("tr", { children: [
@@ -2483,8 +2612,8 @@ function Table(props) {
2483
2612
  "data-selected": isSelected ? "true" : void 0,
2484
2613
  "aria-selected": enableRowSelection ? isSelected : void 0,
2485
2614
  className: cn(
2486
- "border-t border-border transition-colors",
2487
- "hover:bg-accent",
2615
+ "border-t border-border/60 first:border-t-0 transition-colors",
2616
+ "hover:bg-primary/5",
2488
2617
  striped && rowIndex % 2 === 1 && "bg-muted/20",
2489
2618
  isSelected && selectedRowClass,
2490
2619
  onRowClick && "cursor-pointer"
@@ -2567,10 +2696,7 @@ function SkeletonRows({ rowCount, columnCount, cellClassName }) {
2567
2696
  return /* @__PURE__ */ jsx(Fragment, { children: rowKeys.map((rowKey) => /* @__PURE__ */ jsx("tr", { className: "border-t border-border", "data-testid": "table-skeleton-row", children: colKeys.map((colKey) => /* @__PURE__ */ jsx("td", { className: cellClassName, children: /* @__PURE__ */ jsx("span", { className: "block h-3 w-full animate-pulse rounded bg-muted" }) }, `${rowKey}-${colKey}`)) }, rowKey)) });
2568
2697
  }
2569
2698
  function SortIndicator({ active, direction }) {
2570
- const className = cn(
2571
- "h-3.5 w-3.5 shrink-0",
2572
- active ? "text-foreground" : "text-muted-foreground"
2573
- );
2699
+ const className = cn("size-3.5 shrink-0", active ? "text-foreground" : "text-muted-foreground");
2574
2700
  if (!active) return /* @__PURE__ */ jsx(ChevronsUpDown, { "aria-hidden": "true", className });
2575
2701
  return direction === "asc" ? /* @__PURE__ */ jsx(ChevronUp, { "aria-hidden": "true", className }) : /* @__PURE__ */ jsx(ChevronDown, { "aria-hidden": "true", className });
2576
2702
  }
@@ -2586,13 +2712,14 @@ var selectSizeClass = {
2586
2712
  md: "h-9 rounded-md ps-3 pe-9 text-sm",
2587
2713
  lg: "h-11 rounded-md ps-4 pe-10 text-base"
2588
2714
  };
2589
- var selectBaseClass = "group/select relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus:ring-2 focus:ring-ring/40 focus:ring-offset-1 focus:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer data-[placeholder]:text-muted-foreground";
2715
+ var selectBaseClass = "group/select relative inline-flex w-full items-center text-foreground outline-none transition-[background-color,border-color,box-shadow] focus:ring-[3px] focus:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:ring-destructive/40 disabled:pointer-events-none disabled:opacity-50 cursor-pointer data-[placeholder]:text-muted-foreground";
2590
2716
  var selectContentClass = "z-50 max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width) overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95";
2591
2717
  var selectViewportClass = "p-1";
2592
2718
  var selectItemClass = "relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
2593
- var selectItemIndicatorClass = "absolute start-2 inline-flex h-3.5 w-3.5 items-center justify-center [&_svg]:h-3.5 [&_svg]:w-3.5";
2719
+ var selectItemIndicatorClass = "absolute start-2 inline-flex size-3.5 items-center justify-center [&_svg]:h-3.5 [&_svg]:w-3.5";
2594
2720
  var selectGroupLabelClass = "px-2 py-1.5 text-xs font-semibold text-muted-foreground";
2595
2721
  var selectSeparatorClass = "-mx-1 my-1 h-px bg-border";
2722
+ var selectStatusClass = "flex items-center justify-center gap-2 px-2 py-6 text-center text-sm text-muted-foreground";
2596
2723
 
2597
2724
  // src/components/multi-select/multiSelectVariants.ts
2598
2725
  var multiSelectTriggerSizeClass = {
@@ -2610,11 +2737,13 @@ var multiSelectOptionClass = "flex w-full cursor-pointer select-none items-cente
2610
2737
  var multiSelectEmptyClass = "px-2 py-6 text-center text-sm text-muted-foreground";
2611
2738
  var DEFAULT_LABELS_LTR4 = {
2612
2739
  search: "Search\u2026",
2613
- empty: "No results"
2740
+ empty: "No results",
2741
+ loading: "Loading\u2026"
2614
2742
  };
2615
2743
  var DEFAULT_LABELS_RTL4 = {
2616
2744
  search: "\u0628\u062D\u062B\u2026",
2617
- empty: "\u0644\u0627 \u0646\u062A\u0627\u0626\u062C"
2745
+ empty: "\u0644\u0627 \u0646\u062A\u0627\u0626\u062C",
2746
+ loading: "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0645\u064A\u0644\u2026"
2618
2747
  };
2619
2748
  function toArray(value) {
2620
2749
  return Array.isArray(value) ? value : [];
@@ -2624,6 +2753,7 @@ var MultiSelect = forwardRef(function MultiSelect2({
2624
2753
  selectSize = "md",
2625
2754
  options,
2626
2755
  placeholder,
2756
+ loading = false,
2627
2757
  value,
2628
2758
  defaultValue,
2629
2759
  onValueChange,
@@ -2704,7 +2834,10 @@ var MultiSelect = forwardRef(function MultiSelect2({
2704
2834
  className
2705
2835
  ),
2706
2836
  children: [
2707
- /* @__PURE__ */ jsx("span", { className: multiSelectValueRowClass, children: selected.length === 0 ? /* @__PURE__ */ jsx("span", { className: "truncate text-muted-foreground", children: placeholder }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2837
+ /* @__PURE__ */ jsx("span", { className: multiSelectValueRowClass, children: loading ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2 text-muted-foreground", children: [
2838
+ /* @__PURE__ */ jsx(Loader2, { "aria-hidden": "true", className: "size-4 shrink-0 animate-spin" }),
2839
+ labels.loading
2840
+ ] }) : selected.length === 0 ? /* @__PURE__ */ jsx("span", { className: "truncate text-muted-foreground", children: placeholder }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2708
2841
  shownValues.map((v) => /* @__PURE__ */ jsxs(Badge, { variant: "default", size: "sm", className: multiSelectChipClass, children: [
2709
2842
  /* @__PURE__ */ jsx("span", { className: "truncate", children: labelByValue.get(v) ?? v }),
2710
2843
  /* @__PURE__ */ jsx(
@@ -2739,7 +2872,7 @@ var MultiSelect = forwardRef(function MultiSelect2({
2739
2872
  ]
2740
2873
  }
2741
2874
  ) }),
2742
- /* @__PURE__ */ jsx(RadixPopover.Portal, { children: /* @__PURE__ */ jsxs(
2875
+ /* @__PURE__ */ jsx(RadixPopover.Portal, { children: /* @__PURE__ */ jsx(
2743
2876
  RadixPopover.Content,
2744
2877
  {
2745
2878
  align: "start",
@@ -2749,7 +2882,10 @@ var MultiSelect = forwardRef(function MultiSelect2({
2749
2882
  onOpenAutoFocus: (event) => {
2750
2883
  if (!searchable) event.preventDefault();
2751
2884
  },
2752
- children: [
2885
+ children: loading ? /* @__PURE__ */ jsx("div", { className: multiSelectEmptyClass, children: /* @__PURE__ */ jsxs("span", { className: "flex items-center justify-center gap-2", children: [
2886
+ /* @__PURE__ */ jsx(Loader2, { "aria-hidden": "true", className: "size-4 shrink-0 animate-spin" }),
2887
+ labels.loading
2888
+ ] }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2753
2889
  searchable ? /* @__PURE__ */ jsx("div", { className: multiSelectSearchRowClass, children: /* @__PURE__ */ jsx(
2754
2890
  Input,
2755
2891
  {
@@ -2789,7 +2925,7 @@ var MultiSelect = forwardRef(function MultiSelect2({
2789
2925
  option.value
2790
2926
  );
2791
2927
  }) })
2792
- ]
2928
+ ] })
2793
2929
  }
2794
2930
  ) })
2795
2931
  ] });
@@ -2803,6 +2939,9 @@ var Select = forwardRef(function Select2({
2803
2939
  selectSize = "md",
2804
2940
  options,
2805
2941
  placeholder,
2942
+ loading = false,
2943
+ loadingText = "Loading\u2026",
2944
+ emptyText = "No options",
2806
2945
  value,
2807
2946
  defaultValue,
2808
2947
  onValueChange,
@@ -2861,7 +3000,7 @@ var Select = forwardRef(function Select2({
2861
3000
  className
2862
3001
  ),
2863
3002
  children: [
2864
- /* @__PURE__ */ jsx(RadixSelect.Value, { placeholder }),
3003
+ /* @__PURE__ */ jsx(RadixSelect.Value, { placeholder, children: loading ? /* @__PURE__ */ jsx("span", { className: "flex items-center gap-2 text-muted-foreground", children: /* @__PURE__ */ jsx(SelectLoading, { text: loadingText }) }) : void 0 }),
2865
3004
  /* @__PURE__ */ jsx(RadixSelect.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: "pointer-events-none absolute end-3 top-1/2 size-4 shrink-0 -translate-y-1/2 text-muted-foreground" }) })
2866
3005
  ]
2867
3006
  }
@@ -2875,7 +3014,7 @@ var Select = forwardRef(function Select2({
2875
3014
  className: selectContentClass,
2876
3015
  children: [
2877
3016
  /* @__PURE__ */ jsx(RadixSelect.ScrollUpButton, { className: "flex h-6 cursor-default items-center justify-center bg-popover text-muted-foreground", children: /* @__PURE__ */ jsx(ChevronUp, { className: "size-4" }) }),
2878
- /* @__PURE__ */ jsx(RadixSelect.Viewport, { className: selectViewportClass, children: children ?? (options ? renderOptions(options) : null) }),
3017
+ /* @__PURE__ */ jsx(RadixSelect.Viewport, { className: selectViewportClass, children: children ?? renderViewportContent({ loading, options, loadingText, emptyText }) }),
2879
3018
  /* @__PURE__ */ jsx(RadixSelect.ScrollDownButton, { className: "flex h-6 cursor-default items-center justify-center bg-popover text-muted-foreground", children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4" }) })
2880
3019
  ]
2881
3020
  }
@@ -2884,6 +3023,26 @@ var Select = forwardRef(function Select2({
2884
3023
  }
2885
3024
  );
2886
3025
  });
3026
+ function SelectLoading({ text }) {
3027
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3028
+ /* @__PURE__ */ jsx(Loader2, { "aria-hidden": "true", className: "size-4 shrink-0 animate-spin" }),
3029
+ text
3030
+ ] });
3031
+ }
3032
+ function renderViewportContent({
3033
+ loading,
3034
+ options,
3035
+ loadingText,
3036
+ emptyText
3037
+ }) {
3038
+ if (loading) {
3039
+ return /* @__PURE__ */ jsx("div", { className: selectStatusClass, role: "presentation", children: /* @__PURE__ */ jsx(SelectLoading, { text: loadingText }) });
3040
+ }
3041
+ if (!options || options.length === 0) {
3042
+ return /* @__PURE__ */ jsx("div", { className: selectStatusClass, role: "presentation", children: emptyText });
3043
+ }
3044
+ return renderOptions(options);
3045
+ }
2887
3046
  function renderOptions(options) {
2888
3047
  if (isGroupedOptions(options)) {
2889
3048
  const lastIndex = options.length - 1;
@@ -2920,10 +3079,21 @@ function hasActiveFilters(filters, values) {
2920
3079
  }
2921
3080
  return false;
2922
3081
  }
3082
+ function countActiveFilters(filters, values) {
3083
+ let count = 0;
3084
+ for (const filter of filters ?? []) {
3085
+ const current = values?.[filter.key];
3086
+ if (current === void 0) continue;
3087
+ const value = filter.type === "text" ? current.trim() : current;
3088
+ if (value !== filterDefaultValue(filter)) count += 1;
3089
+ }
3090
+ return count;
3091
+ }
2923
3092
  function DebouncedFilterInput({
2924
3093
  value,
2925
3094
  onChange,
2926
3095
  debounceMs,
3096
+ id,
2927
3097
  ariaLabel,
2928
3098
  placeholder,
2929
3099
  wrapperClassName,
@@ -2961,6 +3131,7 @@ function DebouncedFilterInput({
2961
3131
  return /* @__PURE__ */ jsx(
2962
3132
  Input,
2963
3133
  {
3134
+ id,
2964
3135
  type: "search",
2965
3136
  "aria-label": ariaLabel,
2966
3137
  placeholder,
@@ -2982,7 +3153,6 @@ function ListPageFilterBar({
2982
3153
  labels
2983
3154
  }) {
2984
3155
  const manual = mode === "manual";
2985
- const active = hasActiveFilters(filters, values);
2986
3156
  const appliedKey = JSON.stringify(values ?? {});
2987
3157
  const [draft, setDraft] = useState(values ?? {});
2988
3158
  useEffect(() => {
@@ -3013,8 +3183,11 @@ function ListPageFilterBar({
3013
3183
  for (const filter of filters ?? []) {
3014
3184
  onChange?.(filter.key, filterDefaultValue(filter));
3015
3185
  }
3186
+ if (manual) setDraft({});
3016
3187
  };
3017
- const controls = /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: filters?.map((filter) => /* @__PURE__ */ jsx(
3188
+ if (!filters || filters.length === 0) return null;
3189
+ const activeCount = countActiveFilters(filters, effectiveValues);
3190
+ const controls = /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: filters.map((filter) => /* @__PURE__ */ jsx(
3018
3191
  FilterControl,
3019
3192
  {
3020
3193
  filter,
@@ -3025,26 +3198,55 @@ function ListPageFilterBar({
3025
3198
  },
3026
3199
  filter.key
3027
3200
  )) });
3028
- const resetButton = active && !disabled ? /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: reset, children: [
3029
- /* @__PURE__ */ jsx(RefreshCw, { className: "size-4" }),
3030
- labels.reset
3031
- ] }) : null;
3201
+ const header = /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 border-b border-border bg-primary/5 px-4 py-3", children: [
3202
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground", children: labels.title ?? "Filters" }),
3203
+ activeCount > 0 ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center rounded-full bg-primary/10 px-2 py-0.5 text-xs font-semibold text-primary", children: [
3204
+ activeCount,
3205
+ " ",
3206
+ labels.activeLabel ?? "active"
3207
+ ] }) : null,
3208
+ activeCount > 0 && !disabled ? /* @__PURE__ */ jsxs(Button, { type: "button", variant: "ghost", size: "sm", className: "ms-auto", onClick: reset, children: [
3209
+ /* @__PURE__ */ jsx(RefreshCw, { className: "size-4" }),
3210
+ labels.reset
3211
+ ] }) : null
3212
+ ] });
3213
+ const cardClass = "overflow-hidden rounded-xl border border-border bg-card";
3032
3214
  if (manual) {
3033
- return /* @__PURE__ */ jsxs("form", { "data-slot": "list-page-filter-bar", className: "space-y-3", onSubmit: apply, children: [
3034
- controls,
3035
- /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
3036
- resetButton,
3037
- /* @__PURE__ */ jsx(Button, { type: "submit", size: "sm", disabled: disabled || !dirty, children: labels.apply ?? "Apply" })
3215
+ return /* @__PURE__ */ jsxs("form", { "data-slot": "list-page-filter-bar", className: cardClass, onSubmit: apply, children: [
3216
+ header,
3217
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4 p-4", children: [
3218
+ controls,
3219
+ /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(
3220
+ Button,
3221
+ {
3222
+ type: "submit",
3223
+ size: "sm",
3224
+ leadingIcon: /* @__PURE__ */ jsx(Search, { className: "size-4" }),
3225
+ className: "min-w-32",
3226
+ disabled: disabled || !dirty,
3227
+ children: labels.apply ?? "Apply"
3228
+ }
3229
+ ) })
3038
3230
  ] })
3039
3231
  ] });
3040
3232
  }
3041
- return /* @__PURE__ */ jsxs("div", { "data-slot": "list-page-filter-bar", className: "space-y-3", children: [
3042
- controls,
3043
- resetButton ? /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: resetButton }) : null
3233
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "list-page-filter-bar", className: cardClass, children: [
3234
+ header,
3235
+ /* @__PURE__ */ jsx("div", { className: "p-4", children: controls })
3044
3236
  ] });
3045
3237
  }
3046
3238
  function FilterControl({ filter, value, onChange, disabled, mode }) {
3047
3239
  const spanClass = FILTER_SPAN_CLASS[filter.width ?? "default"];
3240
+ const label = filter.label ?? filter.key;
3241
+ return /* @__PURE__ */ jsx(Field, { label, className: spanClass, children: renderFilterControl({ filter, value, onChange, disabled, mode }) });
3242
+ }
3243
+ function renderFilterControl({
3244
+ filter,
3245
+ value,
3246
+ onChange,
3247
+ disabled,
3248
+ mode
3249
+ }) {
3048
3250
  const ariaLabel = typeof filter.label === "string" ? filter.label : filter.key;
3049
3251
  switch (filter.type) {
3050
3252
  case "select":
@@ -3055,7 +3257,6 @@ function FilterControl({ filter, value, onChange, disabled, mode }) {
3055
3257
  value: value ?? filterDefaultValue(filter),
3056
3258
  onValueChange: (v) => onChange?.(filter.key, v),
3057
3259
  options: filter.options,
3058
- className: spanClass,
3059
3260
  disabled
3060
3261
  }
3061
3262
  );
@@ -3068,7 +3269,6 @@ function FilterControl({ filter, value, onChange, disabled, mode }) {
3068
3269
  debounceMs: mode === "live" ? filter.debounceMs ?? DEFAULT_TEXT_DEBOUNCE_MS : 0,
3069
3270
  ariaLabel,
3070
3271
  placeholder: filter.placeholder,
3071
- wrapperClassName: spanClass,
3072
3272
  disabled
3073
3273
  }
3074
3274
  );
@@ -3080,7 +3280,6 @@ function FilterControl({ filter, value, onChange, disabled, mode }) {
3080
3280
  placeholder: filter.placeholder,
3081
3281
  value: value ?? "",
3082
3282
  onValueChange: (v) => onChange?.(filter.key, v),
3083
- className: spanClass,
3084
3283
  disabled
3085
3284
  }
3086
3285
  );
@@ -3093,7 +3292,6 @@ function FilterControl({ filter, value, onChange, disabled, mode }) {
3093
3292
  options: filter.options,
3094
3293
  value: value ? value.split(",").filter(Boolean) : [],
3095
3294
  onValueChange: (values) => onChange?.(filter.key, values.join(",")),
3096
- className: spanClass,
3097
3295
  disabled
3098
3296
  }
3099
3297
  );
@@ -3102,6 +3300,8 @@ function FilterControl({ filter, value, onChange, disabled, mode }) {
3102
3300
  var EN_LABELS2 = {
3103
3301
  reset: "Reset filters",
3104
3302
  apply: "Apply",
3303
+ filtersTitle: "Filters",
3304
+ filtersActive: "active",
3105
3305
  emptyTitle: "No results",
3106
3306
  emptyDescription: "Try clearing the search or adjusting the filters.",
3107
3307
  noDataTitle: "No data yet",
@@ -3109,7 +3309,9 @@ var EN_LABELS2 = {
3109
3309
  };
3110
3310
  var AR_LABELS2 = {
3111
3311
  reset: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0641\u0644\u0627\u062A\u0631",
3112
- apply: "\u062A\u0637\u0628\u064A\u0642",
3312
+ apply: "\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C",
3313
+ filtersTitle: "\u0627\u0644\u062A\u0635\u0641\u064A\u0629",
3314
+ filtersActive: "\u0645\u0641\u0639\u0651\u0644",
3113
3315
  emptyTitle: "\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C",
3114
3316
  emptyDescription: "\u062C\u0631\u0651\u0628 \u0645\u0633\u062D \u0627\u0644\u0628\u062D\u062B \u0623\u0648 \u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0641\u0644\u0627\u062A\u0631.",
3115
3317
  noDataTitle: "\u0644\u0627 \u062A\u0648\u062C\u062F \u0628\u064A\u0627\u0646\u0627\u062A \u0628\u0639\u062F",
@@ -3134,6 +3336,7 @@ function ListPage({
3134
3336
  pagination,
3135
3337
  onPaginationChange,
3136
3338
  totalCount,
3339
+ eyebrow,
3137
3340
  pageSizeOptions,
3138
3341
  emptyState,
3139
3342
  noDataState,
@@ -3154,7 +3357,17 @@ function ListPage({
3154
3357
  };
3155
3358
  const tableMode = isLoading ? "loading" : data.length === 0 && !hasActiveQuery ? "no-data" : data.length === 0 && hasActiveQuery ? "no-results" : "rows";
3156
3359
  return /* @__PURE__ */ jsxs("div", { "data-slot": "list-page", className: cn("space-y-6", className), children: [
3157
- /* @__PURE__ */ jsx(PageHeader, { title, description, bordered, actions }),
3360
+ /* @__PURE__ */ jsx(
3361
+ PageHeader,
3362
+ {
3363
+ title,
3364
+ description,
3365
+ eyebrow,
3366
+ titleMeta: typeof totalCount === "number" && totalCount > 0 ? /* @__PURE__ */ jsx(Badge, { variant: "primary", tone: "soft", size: "sm", children: totalCount }) : void 0,
3367
+ bordered,
3368
+ actions
3369
+ }
3370
+ ),
3158
3371
  showFilterBar ? /* @__PURE__ */ jsx(
3159
3372
  ListPageFilterBar,
3160
3373
  {
@@ -3162,7 +3375,12 @@ function ListPage({
3162
3375
  values: filterValues,
3163
3376
  onChange: onFilterChange,
3164
3377
  mode: filterMode,
3165
- labels: { reset: labels.reset, apply: labels.apply }
3378
+ labels: {
3379
+ reset: labels.reset,
3380
+ apply: labels.apply,
3381
+ title: labels.filtersTitle,
3382
+ activeLabel: labels.filtersActive
3383
+ }
3166
3384
  }
3167
3385
  ) : null,
3168
3386
  tableMode === "loading" || tableMode === "rows" ? /* @__PURE__ */ jsx(
@@ -3239,7 +3457,7 @@ var radioLabelSizeClass = {
3239
3457
  md: "text-sm",
3240
3458
  lg: "text-base"
3241
3459
  };
3242
- var radioItemBaseClass = "aspect-square shrink-0 rounded-full border border-input bg-background text-primary outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background hover:border-ring disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 data-[state=checked]:border-primary";
3460
+ var radioItemBaseClass = "aspect-square shrink-0 rounded-full border border-input bg-background text-primary outline-none transition-colors focus-visible:ring-[3px] focus-visible:ring-primary-glow hover:border-ring disabled:cursor-not-allowed disabled:opacity-50 aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-visible:ring-destructive/40 data-[state=checked]:border-primary";
3243
3461
  var radioIndicatorBaseClass = "flex h-full w-full items-center justify-center";
3244
3462
  var radioIndicatorDotClass = "rounded-full bg-primary";
3245
3463
  var radioOptionRowClass = "flex cursor-pointer items-start gap-2 has-[button:disabled]:cursor-not-allowed";
@@ -3410,7 +3628,7 @@ var switchThumbClass = {
3410
3628
  md: "size-4 data-[state=checked]:translate-x-4 data-[state=checked]:rtl:-translate-x-4",
3411
3629
  lg: "size-5 data-[state=checked]:translate-x-5 data-[state=checked]:rtl:-translate-x-5"
3412
3630
  };
3413
- var switchTrackBaseClass = "relative inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-input transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-destructive/40";
3631
+ var switchTrackBaseClass = "relative inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent bg-input transition-colors focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-primary-glow disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary aria-[invalid=true]:ring-[3px] aria-[invalid=true]:ring-destructive/40";
3414
3632
  var switchThumbBaseClass = "pointer-events-none block rounded-full bg-background shadow-sm ring-0 transition-transform";
3415
3633
  var Switch = forwardRef(function Switch2({
3416
3634
  switchSize = "md",
@@ -3491,7 +3709,7 @@ var textareaResizeClass = {
3491
3709
  horizontal: "resize-x",
3492
3710
  both: "resize"
3493
3711
  };
3494
- var textareaBaseClass = "group/textarea relative flex w-full text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-2 focus-within:ring-ring/40 focus-within:ring-offset-1 focus-within:ring-offset-background aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[textarea:disabled]:pointer-events-none has-[textarea:disabled]:opacity-50";
3712
+ var textareaBaseClass = "group/textarea relative flex w-full text-foreground outline-none transition-[background-color,border-color,box-shadow] focus-within:ring-[3px] focus-within:ring-primary-glow aria-[invalid=true]:border-destructive aria-[invalid=true]:focus-within:ring-destructive/40 has-[textarea:disabled]:pointer-events-none has-[textarea:disabled]:opacity-50";
3495
3713
  var Textarea = forwardRef(function Textarea2({
3496
3714
  variant = "default",
3497
3715
  textareaSize = "md",
@@ -3635,6 +3853,6 @@ function Tooltip({
3635
3853
  );
3636
3854
  }
3637
3855
 
3638
- export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AppShell, Avatar, Badge, Button, Checkbox, ConfirmDialogProvider, DashboardContent, DashboardHeader, DashboardLayout, DashboardMain, DatePicker, DetailPage, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, EmptyState, Field, FileUpload2 as FileUpload, FormPage, HeaderActions, HeaderCollapseTrigger, HeaderMobileTrigger, HeaderSearch, HeaderTitle, Input, LanguageSwitcher, ListPage, MultiSelect, PageHeader, RadioGroup, RadioGroupItem, RowActions, Select, Sidebar, SidebarFooter, SidebarGroup, SidebarHeader, SidebarNav, SidebarNavGroup, SidebarNavItem, Switch, Table, Textarea, Toaster, Tooltip, TooltipProvider, badgeBaseClass, badgeDotSizeClass, badgeSizeClass, badgeVariantClass, buttonBaseClass, buttonSizeClass, buttonVariantClass, cn, datePickerCalendarClass, datePickerCaptionClass, datePickerContentClass, datePickerDayBaseClass, datePickerDayWrapperClass, datePickerDisabledClass, datePickerMonthClass, datePickerMonthGridClass, datePickerMonthsClass, datePickerNavButtonClass, datePickerNavClass, datePickerOutsideClass, datePickerPlaceholderClass, datePickerSelectedClass, datePickerTodayClass, datePickerTriggerBaseClass, datePickerTriggerSizeClass, datePickerTriggerVariantClass, datePickerValueClass, datePickerWeekClass, datePickerWeekdayClass, datePickerWeekdaysClass, detailPageBaseClass, detailPageBodyClass, detailPageEmptyClass, detailPageSkeletonRowClass, dialogCloseButtonClass, dialogContentClass, dialogDescriptionClass, dialogFooterClass, dialogHeaderClass, dialogOverlayClass, dialogTitleClass, dropdownMenuContentClass, dropdownMenuItemBaseClass, dropdownMenuItemInsetClass, dropdownMenuItemVariantClass, dropdownMenuLabelClass, dropdownMenuSeparatorClass, dropdownMenuShortcutClass, emptyStateActionsSpacingClass, emptyStateBaseClass, emptyStateContainerSizeClass, emptyStateDescriptionSizeClass, emptyStateIconWrapperBaseClass, emptyStateIconWrapperSizeClass, emptyStateTitleSizeClass, fileUploadBaseClass, fileUploadDropzoneClass, fileUploadFileNameClass, fileUploadFileRowClass, fileUploadFileSizeClass, fileUploadHintClass, fileUploadIconClass, fileUploadPromptClass, fileUploadRemoveClass, formPageActionsBarClass, formPageBaseClass, formPageBodyClass, formPageSkeletonRowClass, inputBaseClass, inputSizeClass, inputVariantClass, multiSelectChipClass, multiSelectChipRemoveClass, multiSelectContentClass, multiSelectEmptyClass, multiSelectListClass, multiSelectOptionClass, multiSelectSearchRowClass, multiSelectTriggerSizeClass, multiSelectValueRowClass, pageHeaderActionsClass, pageHeaderBackClass, pageHeaderBackIconClass, pageHeaderBaseClass, pageHeaderBorderedClass, pageHeaderBreadcrumbsClass, pageHeaderDescriptionClass, pageHeaderTitleBlockClass, pageHeaderTitleClass, pageHeaderTitleRowClass, radioGroupBaseClass, radioGroupOrientationClass, radioIndicatorBaseClass, radioIndicatorDotClass, radioIndicatorSizeClass, radioItemBaseClass, radioItemSizeClass, radioLabelSizeClass, radioOptionRowClass, rowActionsBaseClass, rowActionsDestructiveClass, selectBaseClass, selectSizeClass, selectVariantClass, switchThumbBaseClass, switchThumbClass, switchTrackBaseClass, switchTrackClass, alignClass as tableAlignClass, tableBaseClass, selectedRowClass as tableSelectedRowClass, tableSizeClass, sortIconClass as tableSortIconClass, textareaBaseClass, textareaResizeClass, textareaSizeClass, textareaVariantClass, toastClassNames, tooltipArrowClass, tooltipContentClass, useConfirm, useDashboardLayout, useDirection };
3856
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AppShell, Avatar, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, ConfirmDialogProvider, DashboardContent, DashboardHeader, DashboardLayout, DashboardMain, DatePicker, DetailPage, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, EmptyState, Field, FileUpload2 as FileUpload, FormPage, HeaderActions, HeaderCollapseTrigger, HeaderMobileTrigger, HeaderSearch, HeaderTitle, Input, LanguageSwitcher, ListPage, MultiSelect, PageHeader, RadioGroup, RadioGroupItem, RowActions, Select, Sidebar, SidebarFooter, SidebarGroup, SidebarHeader, SidebarNav, SidebarNavGroup, SidebarNavItem, Switch, Table, Textarea, Toaster, Tooltip, TooltipProvider, badgeBaseClass, badgeDotSizeClass, badgeSizeClass, badgeSoftVariantClass, badgeVariantClass, buttonBaseClass, buttonSizeClass, buttonVariantClass, cardBaseClass, cardContentClass, cardDescriptionClass, cardFooterClass, cardHeaderClass, cardTitleClass, cn, datePickerCalendarClass, datePickerCaptionClass, datePickerContentClass, datePickerDayBaseClass, datePickerDayWrapperClass, datePickerDisabledClass, datePickerMonthClass, datePickerMonthGridClass, datePickerMonthsClass, datePickerNavButtonClass, datePickerNavClass, datePickerOutsideClass, datePickerPlaceholderClass, datePickerSelectedClass, datePickerTodayClass, datePickerTriggerBaseClass, datePickerTriggerSizeClass, datePickerTriggerVariantClass, datePickerValueClass, datePickerWeekClass, datePickerWeekdayClass, datePickerWeekdaysClass, detailPageBaseClass, detailPageBodyClass, detailPageEmptyClass, detailPageSkeletonRowClass, dialogCloseButtonClass, dialogContentClass, dialogDescriptionClass, dialogFooterClass, dialogHeaderClass, dialogOverlayClass, dialogTitleClass, dropdownMenuContentClass, dropdownMenuItemBaseClass, dropdownMenuItemInsetClass, dropdownMenuItemVariantClass, dropdownMenuLabelClass, dropdownMenuSeparatorClass, dropdownMenuShortcutClass, emptyStateActionsSpacingClass, emptyStateBaseClass, emptyStateContainerSizeClass, emptyStateDescriptionSizeClass, emptyStateIconWrapperBaseClass, emptyStateIconWrapperSizeClass, emptyStateTitleSizeClass, fileUploadBaseClass, fileUploadDropzoneClass, fileUploadFileNameClass, fileUploadFileRowClass, fileUploadFileSizeClass, fileUploadHintClass, fileUploadIconClass, fileUploadPromptClass, fileUploadRemoveClass, formPageActionsBarClass, formPageBaseClass, formPageBodyClass, formPageSkeletonRowClass, inputBaseClass, inputSizeClass, inputVariantClass, multiSelectChipClass, multiSelectChipRemoveClass, multiSelectContentClass, multiSelectEmptyClass, multiSelectListClass, multiSelectOptionClass, multiSelectSearchRowClass, multiSelectTriggerSizeClass, multiSelectValueRowClass, pageHeaderActionsClass, pageHeaderBackClass, pageHeaderBackIconClass, pageHeaderBaseClass, pageHeaderBorderedClass, pageHeaderBreadcrumbsClass, pageHeaderDescriptionClass, pageHeaderEyebrowClass, pageHeaderTitleBlockClass, pageHeaderTitleClass, pageHeaderTitleLineClass, pageHeaderTitleMetaClass, pageHeaderTitleRowClass, radioGroupBaseClass, radioGroupOrientationClass, radioIndicatorBaseClass, radioIndicatorDotClass, radioIndicatorSizeClass, radioItemBaseClass, radioItemSizeClass, radioLabelSizeClass, radioOptionRowClass, rowActionsBaseClass, rowActionsDestructiveClass, selectBaseClass, selectSizeClass, selectVariantClass, switchThumbBaseClass, switchThumbClass, switchTrackBaseClass, switchTrackClass, alignClass as tableAlignClass, tableBaseClass, selectedRowClass as tableSelectedRowClass, tableSizeClass, sortIconClass as tableSortIconClass, textareaBaseClass, textareaResizeClass, textareaSizeClass, textareaVariantClass, toastClassNames, tooltipArrowClass, tooltipContentClass, useConfirm, useDashboardLayout, useDirection };
3639
3857
  //# sourceMappingURL=index.js.map
3640
3858
  //# sourceMappingURL=index.js.map