@dimaan/ui 0.0.28 → 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.cjs CHANGED
@@ -120,21 +120,21 @@ var AlertDialogDescription = react.forwardRef(function AlertDialogDescription2({
120
120
 
121
121
  // src/components/button/buttonVariants.ts
122
122
  var buttonVariantClass = {
123
- primary: "bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 focus-visible:ring-primary/40",
123
+ 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",
124
124
  secondary: "bg-muted text-foreground hover:bg-muted/80 focus-visible:ring-muted-foreground/30",
125
125
  outline: "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring/40",
126
126
  ghost: "bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground focus-visible:ring-ring/40",
127
- destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90 focus-visible:ring-destructive/40",
128
- success: "bg-success text-success-foreground shadow-sm hover:bg-success/90 focus-visible:ring-success/40",
129
- warning: "bg-warning text-warning-foreground shadow-sm hover:bg-warning/90 focus-visible:ring-warning/40",
127
+ 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",
128
+ 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",
129
+ 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",
130
130
  link: "text-primary underline-offset-4 hover:underline focus-visible:ring-primary/40 px-0 shadow-none"
131
131
  };
132
132
  var buttonSizeClass = {
133
- sm: "h-8 gap-1.5 rounded-md px-3 text-sm",
134
- md: "h-9 gap-2 rounded-md px-4 text-sm",
135
- lg: "h-11 gap-2.5 rounded-md px-6 text-base",
136
- icon: "h-9 w-9 shrink-0 rounded-md p-0",
137
- "icon-sm": "h-8 w-8 shrink-0 rounded-md p-0"
133
+ sm: "h-8 gap-1.5 rounded-[10px] px-3 text-sm",
134
+ md: "h-9 gap-2 rounded-[10px] px-4 text-sm",
135
+ lg: "h-11 gap-2.5 rounded-[10px] px-6 text-base",
136
+ icon: "size-9 shrink-0 rounded-[10px] p-0",
137
+ "icon-sm": "size-8 shrink-0 rounded-[10px] p-0"
138
138
  };
139
139
  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";
140
140
  var Button = react.forwardRef(function Button2({
@@ -197,10 +197,10 @@ var Button = react.forwardRef(function Button2({
197
197
  );
198
198
  });
199
199
  function Slot({ children }) {
200
- return /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "inline-flex h-4 w-4 items-center justify-center", children });
200
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "inline-flex size-4 items-center justify-center", children });
201
201
  }
202
202
  function Spinner() {
203
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { "aria-hidden": "true", className: "h-4 w-4 animate-spin", "data-testid": "button-spinner" });
203
+ return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { "aria-hidden": "true", className: "size-4 animate-spin", "data-testid": "button-spinner" });
204
204
  }
205
205
  var ConfirmDialogContext = react.createContext(null);
206
206
  function ConfirmDialogProvider({ labels, children }) {
@@ -475,7 +475,7 @@ var HeaderSearch = react.forwardRef(
475
475
  "span",
476
476
  {
477
477
  "aria-hidden": "true",
478
- className: "pointer-events-none absolute start-3 flex h-4 w-4 items-center justify-center text-muted-foreground",
478
+ className: "pointer-events-none absolute start-3 flex size-4 items-center justify-center text-muted-foreground",
479
479
  children: icon
480
480
  }
481
481
  ) : null,
@@ -683,7 +683,7 @@ function SidebarNavGroup({
683
683
  className: "absolute inset-y-1.5 start-0 w-1 rounded-full bg-primary"
684
684
  }
685
685
  ) : null,
686
- icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "flex h-5 w-5 shrink-0 items-center justify-center", children: icon }) : null,
686
+ icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "flex size-5 shrink-0 items-center justify-center", children: icon }) : null,
687
687
  /* @__PURE__ */ jsxRuntime.jsx(
688
688
  "span",
689
689
  {
@@ -719,7 +719,7 @@ function ChevronCaret({ open }) {
719
719
  {
720
720
  "aria-hidden": "true",
721
721
  className: cn(
722
- "h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform duration-200",
722
+ "size-3.5 shrink-0 text-muted-foreground transition-transform duration-200",
723
723
  open && "rotate-180"
724
724
  )
725
725
  }
@@ -766,7 +766,7 @@ function SidebarNavItem({
766
766
  className: "absolute inset-y-1.5 start-0 w-1 rounded-full bg-primary"
767
767
  }
768
768
  ) : null,
769
- icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "flex h-5 w-5 shrink-0 items-center justify-center", children: icon }) : null,
769
+ icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "flex size-5 shrink-0 items-center justify-center", children: icon }) : null,
770
770
  /* @__PURE__ */ jsxRuntime.jsx(
771
771
  "span",
772
772
  {
@@ -884,9 +884,9 @@ function AppShell({
884
884
  ) });
885
885
  }
886
886
  var sizeClass = {
887
- sm: "h-7 w-7 text-xs",
888
- md: "h-9 w-9 text-sm",
889
- lg: "h-11 w-11 text-base"
887
+ sm: "size-7 text-xs",
888
+ md: "size-9 text-sm",
889
+ lg: "size-11 text-base"
890
890
  };
891
891
  function Avatar({ src, alt = "", fallback, size = "md", className, ...props }) {
892
892
  const [errored, setErrored] = react.useState(false);
@@ -922,6 +922,14 @@ var badgeVariantClass = {
922
922
  destructive: "bg-destructive text-destructive-foreground border-transparent",
923
923
  outline: "border-border bg-transparent text-foreground"
924
924
  };
925
+ var badgeSoftVariantClass = {
926
+ default: "bg-muted text-muted-foreground border-transparent",
927
+ primary: "bg-primary/15 text-primary-soft-foreground border-transparent",
928
+ success: "bg-success/15 text-success-soft-foreground border-transparent",
929
+ warning: "bg-warning/15 text-warning-soft-foreground border-transparent",
930
+ destructive: "bg-destructive/15 text-destructive-soft-foreground border-transparent",
931
+ outline: "border-border bg-transparent text-foreground"
932
+ };
925
933
  var badgeSizeClass = {
926
934
  sm: "h-5 gap-1 px-2 text-[11px]",
927
935
  md: "h-6 gap-1.5 px-2.5 text-xs"
@@ -931,14 +939,16 @@ var badgeDotSizeClass = {
931
939
  md: "size-2"
932
940
  };
933
941
  var badgeBaseClass = "inline-flex shrink-0 items-center rounded-full border font-medium leading-none whitespace-nowrap select-none transition-colors";
934
- var Badge = react.forwardRef(function Badge2({ variant = "default", size = "md", dot = false, className, children, ...props }, ref) {
942
+ var Badge = react.forwardRef(function Badge2({ variant = "default", size = "md", tone = "solid", dot = false, className, children, ...props }, ref) {
943
+ const variantClass = tone === "soft" ? badgeSoftVariantClass[variant] : badgeVariantClass[variant];
935
944
  return /* @__PURE__ */ jsxRuntime.jsxs(
936
945
  "span",
937
946
  {
938
947
  ref,
939
948
  "data-slot": "badge",
940
949
  "data-variant": variant,
941
- className: cn(badgeBaseClass, badgeVariantClass[variant], badgeSizeClass[size], className),
950
+ "data-tone": tone,
951
+ className: cn(badgeBaseClass, variantClass, badgeSizeClass[size], className),
942
952
  ...props,
943
953
  children: [
944
954
  dot ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -953,9 +963,75 @@ var Badge = react.forwardRef(function Badge2({ variant = "default", size = "md",
953
963
  }
954
964
  );
955
965
  });
966
+
967
+ // src/components/card/cardVariants.ts
968
+ var cardBaseClass = "rounded-xl border border-border bg-card text-card-foreground shadow-[var(--shadow-card)]";
969
+ var cardHeaderClass = "flex flex-col gap-1.5 p-6";
970
+ var cardTitleClass = "text-lg font-semibold leading-none tracking-tight text-foreground";
971
+ var cardDescriptionClass = "text-sm text-muted-foreground";
972
+ var cardContentClass = "p-6 pt-0";
973
+ var cardFooterClass = "flex items-center gap-2 p-6 pt-0";
974
+ var Card = react.forwardRef(function Card2({ className, ...props }, ref) {
975
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-slot": "card", className: cn(cardBaseClass, className), ...props });
976
+ });
977
+ var CardHeader = react.forwardRef(
978
+ function CardHeader2({ className, ...props }, ref) {
979
+ return /* @__PURE__ */ jsxRuntime.jsx(
980
+ "div",
981
+ {
982
+ ref,
983
+ "data-slot": "card-header",
984
+ className: cn(cardHeaderClass, className),
985
+ ...props
986
+ }
987
+ );
988
+ }
989
+ );
990
+ var CardTitle = react.forwardRef(
991
+ function CardTitle2({ className, ...props }, ref) {
992
+ return /* @__PURE__ */ jsxRuntime.jsx("h3", { ref, "data-slot": "card-title", className: cn(cardTitleClass, className), ...props });
993
+ }
994
+ );
995
+ var CardDescription = react.forwardRef(function CardDescription2({ className, ...props }, ref) {
996
+ return /* @__PURE__ */ jsxRuntime.jsx(
997
+ "p",
998
+ {
999
+ ref,
1000
+ "data-slot": "card-description",
1001
+ className: cn(cardDescriptionClass, className),
1002
+ ...props
1003
+ }
1004
+ );
1005
+ });
1006
+ var CardContent = react.forwardRef(
1007
+ function CardContent2({ className, ...props }, ref) {
1008
+ return /* @__PURE__ */ jsxRuntime.jsx(
1009
+ "div",
1010
+ {
1011
+ ref,
1012
+ "data-slot": "card-content",
1013
+ className: cn(cardContentClass, className),
1014
+ ...props
1015
+ }
1016
+ );
1017
+ }
1018
+ );
1019
+ var CardFooter = react.forwardRef(
1020
+ function CardFooter2({ className, ...props }, ref) {
1021
+ return /* @__PURE__ */ jsxRuntime.jsx(
1022
+ "div",
1023
+ {
1024
+ ref,
1025
+ "data-slot": "card-footer",
1026
+ className: cn(cardFooterClass, className),
1027
+ ...props
1028
+ }
1029
+ );
1030
+ }
1031
+ );
956
1032
  var sizeClass2 = {
957
- sm: "h-3.5 w-3.5",
958
- md: "h-4 w-4"
1033
+ sm: "size-3.5",
1034
+ md: "size-4"
959
1035
  };
960
1036
  var Checkbox = react.forwardRef(function Checkbox2({
961
1037
  checked,
@@ -998,7 +1074,7 @@ var Checkbox = react.forwardRef(function Checkbox2({
998
1074
  "indeterminate:border-primary indeterminate:bg-primary",
999
1075
  "hover:border-ring",
1000
1076
  "disabled:cursor-not-allowed disabled:opacity-50",
1001
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background"
1077
+ "focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-primary-glow"
1002
1078
  ),
1003
1079
  ...rest
1004
1080
  }
@@ -1008,7 +1084,7 @@ var Checkbox = react.forwardRef(function Checkbox2({
1008
1084
  {
1009
1085
  "aria-hidden": "true",
1010
1086
  strokeWidth: 3,
1011
- 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"
1087
+ className: "pointer-events-none absolute inset-0 m-auto size-3 text-primary-foreground opacity-0 peer-checked:opacity-100 peer-indeterminate:opacity-0"
1012
1088
  }
1013
1089
  ),
1014
1090
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1016,7 +1092,7 @@ var Checkbox = react.forwardRef(function Checkbox2({
1016
1092
  {
1017
1093
  "aria-hidden": "true",
1018
1094
  strokeWidth: 3,
1019
- className: "pointer-events-none absolute inset-0 m-auto h-3 w-3 text-primary-foreground opacity-0 peer-indeterminate:opacity-100"
1095
+ className: "pointer-events-none absolute inset-0 m-auto size-3 text-primary-foreground opacity-0 peer-indeterminate:opacity-100"
1020
1096
  }
1021
1097
  )
1022
1098
  ] });
@@ -1033,20 +1109,20 @@ var datePickerTriggerSizeClass = {
1033
1109
  md: "h-9 rounded-md ps-3 pe-9 text-sm gap-2",
1034
1110
  lg: "h-11 rounded-md ps-4 pe-10 text-base gap-2"
1035
1111
  };
1036
- 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";
1112
+ 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";
1037
1113
  var datePickerPlaceholderClass = "truncate text-muted-foreground";
1038
1114
  var datePickerValueClass = "truncate text-foreground";
1039
1115
  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";
1040
1116
  var datePickerCalendarClass = "text-sm";
1041
1117
  var datePickerCaptionClass = "flex items-center justify-between gap-2 pb-2 text-sm font-semibold";
1042
- 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";
1118
+ 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";
1043
1119
  var datePickerDayWrapperClass = "p-0 text-center";
1044
- 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";
1120
+ 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";
1045
1121
  var datePickerSelectedClass = "[&_button]:bg-primary [&_button]:text-primary-foreground [&_button]:hover:bg-primary [&_button]:hover:text-primary-foreground";
1046
1122
  var datePickerTodayClass = "[&_button]:font-semibold [&_button]:ring-1 [&_button]:ring-inset [&_button]:ring-ring/40";
1047
1123
  var datePickerOutsideClass = "[&_button]:text-muted-foreground [&_button]:opacity-60";
1048
1124
  var datePickerDisabledClass = "[&_button]:pointer-events-none [&_button]:opacity-40";
1049
- var datePickerWeekdayClass = "h-8 w-8 text-center text-xs font-medium text-muted-foreground";
1125
+ var datePickerWeekdayClass = "size-8 text-center text-xs font-medium text-muted-foreground";
1050
1126
  var datePickerWeekClass = "flex w-full";
1051
1127
  var datePickerWeekdaysClass = "flex w-full";
1052
1128
  var datePickerMonthGridClass = "w-full border-collapse";
@@ -1357,6 +1433,9 @@ var pageHeaderBorderedClass = "border-b border-border pb-4";
1357
1433
  var pageHeaderTitleRowClass = "flex flex-wrap items-start justify-between gap-3 sm:gap-4";
1358
1434
  var pageHeaderTitleBlockClass = "min-w-0 flex-1 space-y-1";
1359
1435
  var pageHeaderTitleClass = "text-2xl font-semibold tracking-tight text-foreground";
1436
+ var pageHeaderEyebrowClass = "text-xs font-semibold uppercase tracking-wide text-primary";
1437
+ var pageHeaderTitleLineClass = "flex flex-wrap items-center gap-x-2.5 gap-y-1";
1438
+ var pageHeaderTitleMetaClass = "shrink-0";
1360
1439
  var pageHeaderDescriptionClass = "text-sm text-muted-foreground";
1361
1440
  var pageHeaderActionsClass = "flex shrink-0 flex-wrap items-center gap-2";
1362
1441
  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";
@@ -1365,6 +1444,8 @@ var pageHeaderBreadcrumbsClass = "text-xs text-muted-foreground";
1365
1444
  var PageHeader = react.forwardRef(function PageHeader2({
1366
1445
  title,
1367
1446
  description,
1447
+ eyebrow,
1448
+ titleMeta,
1368
1449
  breadcrumbs,
1369
1450
  back,
1370
1451
  actions,
@@ -1385,11 +1466,15 @@ var PageHeader = react.forwardRef(function PageHeader2({
1385
1466
  back ? /* @__PURE__ */ jsxRuntime.jsx(PageHeaderBack, { ...back }) : null,
1386
1467
  /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "page-header-row", className: pageHeaderTitleRowClass, children: [
1387
1468
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: pageHeaderTitleBlockClass, children: [
1388
- react.createElement(
1389
- as,
1390
- { "data-slot": "page-header-title", className: pageHeaderTitleClass },
1391
- title
1392
- ),
1469
+ eyebrow ? /* @__PURE__ */ jsxRuntime.jsx("p", { "data-slot": "page-header-eyebrow", className: pageHeaderEyebrowClass, children: eyebrow }) : null,
1470
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: pageHeaderTitleLineClass, children: [
1471
+ react.createElement(
1472
+ as,
1473
+ { "data-slot": "page-header-title", className: pageHeaderTitleClass },
1474
+ title
1475
+ ),
1476
+ titleMeta ? /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "page-header-title-meta", className: pageHeaderTitleMetaClass, children: titleMeta }) : null
1477
+ ] }),
1393
1478
  description ? /* @__PURE__ */ jsxRuntime.jsx("p", { "data-slot": "page-header-description", className: pageHeaderDescriptionClass, children: description }) : null
1394
1479
  ] }),
1395
1480
  actions ? /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "page-header-actions", className: pageHeaderActionsClass, children: actions }) : null
@@ -1421,7 +1506,7 @@ function PageHeaderBack({ label = "Back", to, onClick, render }) {
1421
1506
  var detailPageBaseClass = "flex w-full flex-col gap-6";
1422
1507
  var detailPageBodyClass = "flex flex-col gap-6";
1423
1508
  var detailPageSkeletonRowClass = "h-5 w-full animate-pulse rounded-md bg-muted";
1424
- var detailPageEmptyClass = "rounded-md border border-border bg-card";
1509
+ var detailPageEmptyClass = "rounded-xl border border-border bg-card";
1425
1510
  var DEFAULT_LABELS_LTR = {
1426
1511
  back: "Back",
1427
1512
  notFoundTitle: "Not found",
@@ -2088,7 +2173,7 @@ var inputSizeClass = {
2088
2173
  md: "h-9 rounded-md px-3 text-sm gap-2",
2089
2174
  lg: "h-11 rounded-md px-4 text-base gap-2.5"
2090
2175
  };
2091
- 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";
2176
+ 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";
2092
2177
  var Input = react.forwardRef(function Input2({
2093
2178
  variant = "default",
2094
2179
  inputSize = "md",
@@ -2122,7 +2207,7 @@ var Input = react.forwardRef(function Input2({
2122
2207
  "span",
2123
2208
  {
2124
2209
  "aria-hidden": "true",
2125
- className: "inline-flex h-4 w-4 items-center justify-center text-muted-foreground",
2210
+ className: "inline-flex size-4 items-center justify-center text-muted-foreground",
2126
2211
  children: leadingIcon
2127
2212
  }
2128
2213
  ) : null,
@@ -2146,7 +2231,7 @@ var Input = react.forwardRef(function Input2({
2146
2231
  "span",
2147
2232
  {
2148
2233
  "aria-hidden": "true",
2149
- className: "inline-flex h-4 w-4 items-center justify-center text-muted-foreground",
2234
+ className: "inline-flex size-4 items-center justify-center text-muted-foreground",
2150
2235
  children: trailingIcon
2151
2236
  }
2152
2237
  ) : null
@@ -2267,7 +2352,7 @@ function Pagination({
2267
2352
  disabled: isFirst,
2268
2353
  onClick: goPrev,
2269
2354
  "aria-label": labels.previousPage,
2270
- children: isRtl ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { "aria-hidden": "true", className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { "aria-hidden": "true", className: "h-3.5 w-3.5" })
2355
+ children: isRtl ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { "aria-hidden": "true", className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { "aria-hidden": "true", className: "size-3.5" })
2271
2356
  }
2272
2357
  ),
2273
2358
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "px-1 text-foreground", children: [
@@ -2284,7 +2369,7 @@ function Pagination({
2284
2369
  disabled: isLast,
2285
2370
  onClick: goNext,
2286
2371
  "aria-label": labels.nextPage,
2287
- children: isRtl ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { "aria-hidden": "true", className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { "aria-hidden": "true", className: "h-3.5 w-3.5" })
2372
+ children: isRtl ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { "aria-hidden": "true", className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { "aria-hidden": "true", className: "size-3.5" })
2288
2373
  }
2289
2374
  )
2290
2375
  ] })
@@ -2313,23 +2398,23 @@ function Toolbar({ count, onClear, renderLabel, clearLabel, children }) {
2313
2398
  var tableSizeClass = {
2314
2399
  sm: {
2315
2400
  row: "",
2316
- cell: "px-3 py-1.5 text-xs",
2401
+ cell: "px-3 py-1.5 text-xs tabular-nums",
2317
2402
  head: "whitespace-nowrap px-3 py-2 text-xs font-medium"
2318
2403
  },
2319
2404
  md: {
2320
2405
  row: "",
2321
- cell: "px-4 py-2.5 text-sm",
2406
+ cell: "px-4 py-2.5 text-sm tabular-nums",
2322
2407
  head: "whitespace-nowrap px-4 py-2.5 text-xs font-medium uppercase tracking-wide"
2323
2408
  },
2324
2409
  lg: {
2325
2410
  row: "",
2326
- cell: "px-5 py-3.5 text-sm",
2411
+ cell: "px-5 py-3.5 text-sm tabular-nums",
2327
2412
  head: "whitespace-nowrap px-5 py-3 text-sm font-medium"
2328
2413
  }
2329
2414
  };
2330
2415
  var tableBaseClass = "w-full caption-bottom border-collapse";
2331
- var selectedRowClass = "bg-muted/40";
2332
- var sortIconClass = "inline-flex h-3 w-3 shrink-0 items-center justify-center";
2416
+ var selectedRowClass = "bg-primary/10";
2417
+ var sortIconClass = "inline-flex size-3 shrink-0 items-center justify-center";
2333
2418
  var alignClass = {
2334
2419
  start: "text-start",
2335
2420
  center: "text-center",
@@ -2456,7 +2541,7 @@ function Table(props) {
2456
2541
  "div",
2457
2542
  {
2458
2543
  className: cn(
2459
- "overflow-x-auto rounded-md border border-border bg-background",
2544
+ "overflow-x-auto rounded-xl border border-border bg-card shadow-[var(--shadow-card)]",
2460
2545
  maxHeight !== void 0 && "overflow-y-auto"
2461
2546
  ),
2462
2547
  style: maxHeight !== void 0 ? { maxHeight } : void 0,
@@ -2474,9 +2559,11 @@ function Table(props) {
2474
2559
  "thead",
2475
2560
  {
2476
2561
  className: cn(
2477
- // Opaque (not bg-muted/40) so a sticky header fully hides the rows
2478
- // scrolling underneath it.
2479
- "bg-muted text-muted-foreground",
2562
+ // Clean opaque header (so a sticky header fully hides the rows
2563
+ // scrolling underneath it) with a hairline bottom rule drawn via an
2564
+ // inset shadow — it stays attached to the sticky header instead of
2565
+ // collapsing into the first row's border.
2566
+ "bg-card text-muted-foreground shadow-[inset_0_-1px_0_var(--color-border)]",
2480
2567
  maxHeight !== void 0 && "sticky top-0 z-10"
2481
2568
  ),
2482
2569
  children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
@@ -2553,8 +2640,8 @@ function Table(props) {
2553
2640
  "data-selected": isSelected ? "true" : void 0,
2554
2641
  "aria-selected": enableRowSelection ? isSelected : void 0,
2555
2642
  className: cn(
2556
- "border-t border-border transition-colors",
2557
- "hover:bg-accent",
2643
+ "border-t border-border/60 first:border-t-0 transition-colors",
2644
+ "hover:bg-primary/5",
2558
2645
  striped && rowIndex % 2 === 1 && "bg-muted/20",
2559
2646
  isSelected && selectedRowClass,
2560
2647
  onRowClick && "cursor-pointer"
@@ -2637,10 +2724,7 @@ function SkeletonRows({ rowCount, columnCount, cellClassName }) {
2637
2724
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: rowKeys.map((rowKey) => /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "border-t border-border", "data-testid": "table-skeleton-row", children: colKeys.map((colKey) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: cellClassName, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block h-3 w-full animate-pulse rounded bg-muted" }) }, `${rowKey}-${colKey}`)) }, rowKey)) });
2638
2725
  }
2639
2726
  function SortIndicator({ active, direction }) {
2640
- const className = cn(
2641
- "h-3.5 w-3.5 shrink-0",
2642
- active ? "text-foreground" : "text-muted-foreground"
2643
- );
2727
+ const className = cn("size-3.5 shrink-0", active ? "text-foreground" : "text-muted-foreground");
2644
2728
  if (!active) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronsUpDown, { "aria-hidden": "true", className });
2645
2729
  return direction === "asc" ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { "aria-hidden": "true", className }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { "aria-hidden": "true", className });
2646
2730
  }
@@ -2656,11 +2740,11 @@ var selectSizeClass = {
2656
2740
  md: "h-9 rounded-md ps-3 pe-9 text-sm",
2657
2741
  lg: "h-11 rounded-md ps-4 pe-10 text-base"
2658
2742
  };
2659
- 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";
2743
+ 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";
2660
2744
  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";
2661
2745
  var selectViewportClass = "p-1";
2662
2746
  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";
2663
- 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";
2747
+ var selectItemIndicatorClass = "absolute start-2 inline-flex size-3.5 items-center justify-center [&_svg]:h-3.5 [&_svg]:w-3.5";
2664
2748
  var selectGroupLabelClass = "px-2 py-1.5 text-xs font-semibold text-muted-foreground";
2665
2749
  var selectSeparatorClass = "-mx-1 my-1 h-px bg-border";
2666
2750
  var selectStatusClass = "flex items-center justify-center gap-2 px-2 py-6 text-center text-sm text-muted-foreground";
@@ -3023,6 +3107,16 @@ function hasActiveFilters(filters, values) {
3023
3107
  }
3024
3108
  return false;
3025
3109
  }
3110
+ function countActiveFilters(filters, values) {
3111
+ let count = 0;
3112
+ for (const filter of filters ?? []) {
3113
+ const current = values?.[filter.key];
3114
+ if (current === void 0) continue;
3115
+ const value = filter.type === "text" ? current.trim() : current;
3116
+ if (value !== filterDefaultValue(filter)) count += 1;
3117
+ }
3118
+ return count;
3119
+ }
3026
3120
  function DebouncedFilterInput({
3027
3121
  value,
3028
3122
  onChange,
@@ -3087,7 +3181,6 @@ function ListPageFilterBar({
3087
3181
  labels
3088
3182
  }) {
3089
3183
  const manual = mode === "manual";
3090
- const active = hasActiveFilters(filters, values);
3091
3184
  const appliedKey = JSON.stringify(values ?? {});
3092
3185
  const [draft, setDraft] = react.useState(values ?? {});
3093
3186
  react.useEffect(() => {
@@ -3118,8 +3211,11 @@ function ListPageFilterBar({
3118
3211
  for (const filter of filters ?? []) {
3119
3212
  onChange?.(filter.key, filterDefaultValue(filter));
3120
3213
  }
3214
+ if (manual) setDraft({});
3121
3215
  };
3122
- const controls = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: filters?.map((filter) => /* @__PURE__ */ jsxRuntime.jsx(
3216
+ if (!filters || filters.length === 0) return null;
3217
+ const activeCount = countActiveFilters(filters, effectiveValues);
3218
+ const controls = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: filters.map((filter) => /* @__PURE__ */ jsxRuntime.jsx(
3123
3219
  FilterControl,
3124
3220
  {
3125
3221
  filter,
@@ -3130,22 +3226,41 @@ function ListPageFilterBar({
3130
3226
  },
3131
3227
  filter.key
3132
3228
  )) });
3133
- const resetButton = active && !disabled ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "ghost", size: "sm", onClick: reset, children: [
3134
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "size-4" }),
3135
- labels.reset
3136
- ] }) : null;
3229
+ const header = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 border-b border-border bg-primary/5 px-4 py-3", children: [
3230
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-semibold text-foreground", children: labels.title ?? "Filters" }),
3231
+ activeCount > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center rounded-full bg-primary/10 px-2 py-0.5 text-xs font-semibold text-primary", children: [
3232
+ activeCount,
3233
+ " ",
3234
+ labels.activeLabel ?? "active"
3235
+ ] }) : null,
3236
+ activeCount > 0 && !disabled ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { type: "button", variant: "ghost", size: "sm", className: "ms-auto", onClick: reset, children: [
3237
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "size-4" }),
3238
+ labels.reset
3239
+ ] }) : null
3240
+ ] });
3241
+ const cardClass = "overflow-hidden rounded-xl border border-border bg-card";
3137
3242
  if (manual) {
3138
- return /* @__PURE__ */ jsxRuntime.jsxs("form", { "data-slot": "list-page-filter-bar", className: "space-y-3", onSubmit: apply, children: [
3139
- controls,
3140
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2", children: [
3141
- resetButton,
3142
- /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", size: "sm", disabled: disabled || !dirty, children: labels.apply ?? "Apply" })
3243
+ return /* @__PURE__ */ jsxRuntime.jsxs("form", { "data-slot": "list-page-filter-bar", className: cardClass, onSubmit: apply, children: [
3244
+ header,
3245
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4", children: [
3246
+ controls,
3247
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(
3248
+ Button,
3249
+ {
3250
+ type: "submit",
3251
+ size: "sm",
3252
+ leadingIcon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "size-4" }),
3253
+ className: "min-w-32",
3254
+ disabled: disabled || !dirty,
3255
+ children: labels.apply ?? "Apply"
3256
+ }
3257
+ ) })
3143
3258
  ] })
3144
3259
  ] });
3145
3260
  }
3146
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "list-page-filter-bar", className: "space-y-3", children: [
3147
- controls,
3148
- resetButton ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: resetButton }) : null
3261
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "list-page-filter-bar", className: cardClass, children: [
3262
+ header,
3263
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4", children: controls })
3149
3264
  ] });
3150
3265
  }
3151
3266
  function FilterControl({ filter, value, onChange, disabled, mode }) {
@@ -3213,6 +3328,8 @@ function renderFilterControl({
3213
3328
  var EN_LABELS2 = {
3214
3329
  reset: "Reset filters",
3215
3330
  apply: "Apply",
3331
+ filtersTitle: "Filters",
3332
+ filtersActive: "active",
3216
3333
  emptyTitle: "No results",
3217
3334
  emptyDescription: "Try clearing the search or adjusting the filters.",
3218
3335
  noDataTitle: "No data yet",
@@ -3220,7 +3337,9 @@ var EN_LABELS2 = {
3220
3337
  };
3221
3338
  var AR_LABELS2 = {
3222
3339
  reset: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0627\u0644\u0641\u0644\u0627\u062A\u0631",
3223
- apply: "\u062A\u0637\u0628\u064A\u0642",
3340
+ apply: "\u0639\u0631\u0636 \u0627\u0644\u0646\u062A\u0627\u0626\u062C",
3341
+ filtersTitle: "\u0627\u0644\u062A\u0635\u0641\u064A\u0629",
3342
+ filtersActive: "\u0645\u0641\u0639\u0651\u0644",
3224
3343
  emptyTitle: "\u0644\u0627 \u062A\u0648\u062C\u062F \u0646\u062A\u0627\u0626\u062C",
3225
3344
  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.",
3226
3345
  noDataTitle: "\u0644\u0627 \u062A\u0648\u062C\u062F \u0628\u064A\u0627\u0646\u0627\u062A \u0628\u0639\u062F",
@@ -3245,6 +3364,7 @@ function ListPage({
3245
3364
  pagination,
3246
3365
  onPaginationChange,
3247
3366
  totalCount,
3367
+ eyebrow,
3248
3368
  pageSizeOptions,
3249
3369
  emptyState,
3250
3370
  noDataState,
@@ -3265,7 +3385,17 @@ function ListPage({
3265
3385
  };
3266
3386
  const tableMode = isLoading ? "loading" : data.length === 0 && !hasActiveQuery ? "no-data" : data.length === 0 && hasActiveQuery ? "no-results" : "rows";
3267
3387
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "list-page", className: cn("space-y-6", className), children: [
3268
- /* @__PURE__ */ jsxRuntime.jsx(PageHeader, { title, description, bordered, actions }),
3388
+ /* @__PURE__ */ jsxRuntime.jsx(
3389
+ PageHeader,
3390
+ {
3391
+ title,
3392
+ description,
3393
+ eyebrow,
3394
+ titleMeta: typeof totalCount === "number" && totalCount > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "primary", tone: "soft", size: "sm", children: totalCount }) : void 0,
3395
+ bordered,
3396
+ actions
3397
+ }
3398
+ ),
3269
3399
  showFilterBar ? /* @__PURE__ */ jsxRuntime.jsx(
3270
3400
  ListPageFilterBar,
3271
3401
  {
@@ -3273,7 +3403,12 @@ function ListPage({
3273
3403
  values: filterValues,
3274
3404
  onChange: onFilterChange,
3275
3405
  mode: filterMode,
3276
- labels: { reset: labels.reset, apply: labels.apply }
3406
+ labels: {
3407
+ reset: labels.reset,
3408
+ apply: labels.apply,
3409
+ title: labels.filtersTitle,
3410
+ activeLabel: labels.filtersActive
3411
+ }
3277
3412
  }
3278
3413
  ) : null,
3279
3414
  tableMode === "loading" || tableMode === "rows" ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -3350,7 +3485,7 @@ var radioLabelSizeClass = {
3350
3485
  md: "text-sm",
3351
3486
  lg: "text-base"
3352
3487
  };
3353
- 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";
3488
+ 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";
3354
3489
  var radioIndicatorBaseClass = "flex h-full w-full items-center justify-center";
3355
3490
  var radioIndicatorDotClass = "rounded-full bg-primary";
3356
3491
  var radioOptionRowClass = "flex cursor-pointer items-start gap-2 has-[button:disabled]:cursor-not-allowed";
@@ -3521,7 +3656,7 @@ var switchThumbClass = {
3521
3656
  md: "size-4 data-[state=checked]:translate-x-4 data-[state=checked]:rtl:-translate-x-4",
3522
3657
  lg: "size-5 data-[state=checked]:translate-x-5 data-[state=checked]:rtl:-translate-x-5"
3523
3658
  };
3524
- 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";
3659
+ 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";
3525
3660
  var switchThumbBaseClass = "pointer-events-none block rounded-full bg-background shadow-sm ring-0 transition-transform";
3526
3661
  var Switch = react.forwardRef(function Switch2({
3527
3662
  switchSize = "md",
@@ -3602,7 +3737,7 @@ var textareaResizeClass = {
3602
3737
  horizontal: "resize-x",
3603
3738
  both: "resize"
3604
3739
  };
3605
- 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";
3740
+ 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";
3606
3741
  var Textarea = react.forwardRef(function Textarea2({
3607
3742
  variant = "default",
3608
3743
  textareaSize = "md",
@@ -3765,6 +3900,12 @@ exports.AppShell = AppShell;
3765
3900
  exports.Avatar = Avatar;
3766
3901
  exports.Badge = Badge;
3767
3902
  exports.Button = Button;
3903
+ exports.Card = Card;
3904
+ exports.CardContent = CardContent;
3905
+ exports.CardDescription = CardDescription;
3906
+ exports.CardFooter = CardFooter;
3907
+ exports.CardHeader = CardHeader;
3908
+ exports.CardTitle = CardTitle;
3768
3909
  exports.Checkbox = Checkbox;
3769
3910
  exports.ConfirmDialogProvider = ConfirmDialogProvider;
3770
3911
  exports.DashboardContent = DashboardContent;
@@ -3826,10 +3967,17 @@ exports.TooltipProvider = TooltipProvider;
3826
3967
  exports.badgeBaseClass = badgeBaseClass;
3827
3968
  exports.badgeDotSizeClass = badgeDotSizeClass;
3828
3969
  exports.badgeSizeClass = badgeSizeClass;
3970
+ exports.badgeSoftVariantClass = badgeSoftVariantClass;
3829
3971
  exports.badgeVariantClass = badgeVariantClass;
3830
3972
  exports.buttonBaseClass = buttonBaseClass;
3831
3973
  exports.buttonSizeClass = buttonSizeClass;
3832
3974
  exports.buttonVariantClass = buttonVariantClass;
3975
+ exports.cardBaseClass = cardBaseClass;
3976
+ exports.cardContentClass = cardContentClass;
3977
+ exports.cardDescriptionClass = cardDescriptionClass;
3978
+ exports.cardFooterClass = cardFooterClass;
3979
+ exports.cardHeaderClass = cardHeaderClass;
3980
+ exports.cardTitleClass = cardTitleClass;
3833
3981
  exports.cn = cn;
3834
3982
  exports.datePickerCalendarClass = datePickerCalendarClass;
3835
3983
  exports.datePickerCaptionClass = datePickerCaptionClass;
@@ -3910,8 +4058,11 @@ exports.pageHeaderBaseClass = pageHeaderBaseClass;
3910
4058
  exports.pageHeaderBorderedClass = pageHeaderBorderedClass;
3911
4059
  exports.pageHeaderBreadcrumbsClass = pageHeaderBreadcrumbsClass;
3912
4060
  exports.pageHeaderDescriptionClass = pageHeaderDescriptionClass;
4061
+ exports.pageHeaderEyebrowClass = pageHeaderEyebrowClass;
3913
4062
  exports.pageHeaderTitleBlockClass = pageHeaderTitleBlockClass;
3914
4063
  exports.pageHeaderTitleClass = pageHeaderTitleClass;
4064
+ exports.pageHeaderTitleLineClass = pageHeaderTitleLineClass;
4065
+ exports.pageHeaderTitleMetaClass = pageHeaderTitleMetaClass;
3915
4066
  exports.pageHeaderTitleRowClass = pageHeaderTitleRowClass;
3916
4067
  exports.radioGroupBaseClass = radioGroupBaseClass;
3917
4068
  exports.radioGroupOrientationClass = radioGroupOrientationClass;