@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 +228 -77
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +89 -14
- package/dist/index.d.ts +89 -14
- package/dist/index.js +213 -78
- package/dist/index.js.map +1 -1
- package/dist/preset.css +73 -6
- package/package.json +1 -1
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-
|
|
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-
|
|
128
|
-
success: "bg-success text-success-foreground shadow-
|
|
129
|
-
warning: "bg-warning text-warning-foreground shadow-
|
|
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-
|
|
134
|
-
md: "h-9 gap-2 rounded-
|
|
135
|
-
lg: "h-11 gap-2.5 rounded-
|
|
136
|
-
icon: "
|
|
137
|
-
"icon-sm": "
|
|
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
|
|
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: "
|
|
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
|
|
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
|
|
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
|
-
"
|
|
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
|
|
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: "
|
|
888
|
-
md: "
|
|
889
|
-
lg: "
|
|
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
|
-
|
|
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: "
|
|
958
|
-
md: "
|
|
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-
|
|
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
|
|
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
|
|
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-
|
|
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
|
|
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
|
|
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 = "
|
|
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
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
|
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: "
|
|
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: "
|
|
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-
|
|
2332
|
-
var sortIconClass = "inline-flex
|
|
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-
|
|
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
|
-
//
|
|
2478
|
-
// scrolling underneath it
|
|
2479
|
-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
-
|
|
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
|
|
3134
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3135
|
-
|
|
3136
|
-
|
|
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:
|
|
3139
|
-
|
|
3140
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
3141
|
-
|
|
3142
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
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:
|
|
3147
|
-
|
|
3148
|
-
|
|
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\
|
|
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(
|
|
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: {
|
|
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-
|
|
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-
|
|
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-
|
|
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;
|