@northslopetech/altitude-ui 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +440 -4
- package/dist/index.d.ts +440 -4
- package/dist/index.js +2166 -482
- package/dist/index.mjs +2125 -493
- package/package.json +7 -5
package/dist/index.mjs
CHANGED
|
@@ -690,10 +690,110 @@ function ButtonGroupSeparator({
|
|
|
690
690
|
);
|
|
691
691
|
}
|
|
692
692
|
|
|
693
|
-
// src/components/ui/
|
|
693
|
+
// src/components/ui/empty.tsx
|
|
694
694
|
import { cva as cva5 } from "class-variance-authority";
|
|
695
695
|
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
696
|
-
var
|
|
696
|
+
var emptyVariants = cva5("w-full rounded-md p-8 text-center", {
|
|
697
|
+
variants: {
|
|
698
|
+
variant: {
|
|
699
|
+
default: "",
|
|
700
|
+
outline: "border border-default",
|
|
701
|
+
background: "surface-muted",
|
|
702
|
+
"outline-dashed": "border border-dashed border-default"
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
defaultVariants: {
|
|
706
|
+
variant: "default"
|
|
707
|
+
}
|
|
708
|
+
});
|
|
709
|
+
var Empty = ({ className, variant, children, ref, ...props }) => /* @__PURE__ */ jsx7(
|
|
710
|
+
"div",
|
|
711
|
+
{
|
|
712
|
+
ref,
|
|
713
|
+
"data-slot": "empty",
|
|
714
|
+
className: cn(emptyVariants({ variant }), className),
|
|
715
|
+
...props,
|
|
716
|
+
children: /* @__PURE__ */ jsx7("div", { className: "flex w-full flex-col items-center gap-4", children })
|
|
717
|
+
}
|
|
718
|
+
);
|
|
719
|
+
Empty.displayName = "Empty";
|
|
720
|
+
var emptyMediaVariants = cva5("flex shrink-0 items-center justify-center", {
|
|
721
|
+
variants: {
|
|
722
|
+
variant: {
|
|
723
|
+
default: "",
|
|
724
|
+
icon: "size-10 rounded-lg surface-secondary p-2"
|
|
725
|
+
}
|
|
726
|
+
},
|
|
727
|
+
defaultVariants: {
|
|
728
|
+
variant: "default"
|
|
729
|
+
}
|
|
730
|
+
});
|
|
731
|
+
var EmptyMedia = ({ className, variant, ...props }) => /* @__PURE__ */ jsx7(
|
|
732
|
+
"div",
|
|
733
|
+
{
|
|
734
|
+
"data-slot": "empty-media",
|
|
735
|
+
className: cn(emptyMediaVariants({ variant }), className),
|
|
736
|
+
...props
|
|
737
|
+
}
|
|
738
|
+
);
|
|
739
|
+
EmptyMedia.displayName = "EmptyMedia";
|
|
740
|
+
var EmptyContent = ({ className, ref, ...props }) => /* @__PURE__ */ jsx7(
|
|
741
|
+
"div",
|
|
742
|
+
{
|
|
743
|
+
ref,
|
|
744
|
+
"data-slot": "empty-content",
|
|
745
|
+
className: cn("flex w-full flex-col gap-1", className),
|
|
746
|
+
...props
|
|
747
|
+
}
|
|
748
|
+
);
|
|
749
|
+
EmptyContent.displayName = "EmptyContent";
|
|
750
|
+
var EmptyTitle = ({
|
|
751
|
+
className,
|
|
752
|
+
as: Component = "p",
|
|
753
|
+
ref,
|
|
754
|
+
...props
|
|
755
|
+
}) => /* @__PURE__ */ jsx7(
|
|
756
|
+
Component,
|
|
757
|
+
{
|
|
758
|
+
ref,
|
|
759
|
+
"data-slot": "empty-title",
|
|
760
|
+
className: cn("type-body-md-medium text-default", className),
|
|
761
|
+
...props
|
|
762
|
+
}
|
|
763
|
+
);
|
|
764
|
+
EmptyTitle.displayName = "EmptyTitle";
|
|
765
|
+
var EmptyDescription = ({
|
|
766
|
+
className,
|
|
767
|
+
ref,
|
|
768
|
+
...props
|
|
769
|
+
}) => /* @__PURE__ */ jsx7(
|
|
770
|
+
"p",
|
|
771
|
+
{
|
|
772
|
+
ref,
|
|
773
|
+
"data-slot": "empty-description",
|
|
774
|
+
className: cn("type-body-sm text-secondary", className),
|
|
775
|
+
...props
|
|
776
|
+
}
|
|
777
|
+
);
|
|
778
|
+
EmptyDescription.displayName = "EmptyDescription";
|
|
779
|
+
var EmptyActions = ({ className, ref, ...props }) => /* @__PURE__ */ jsx7(
|
|
780
|
+
"div",
|
|
781
|
+
{
|
|
782
|
+
ref,
|
|
783
|
+
"data-slot": "empty-actions",
|
|
784
|
+
className: cn(
|
|
785
|
+
"flex flex-wrap items-center justify-center gap-2",
|
|
786
|
+
className
|
|
787
|
+
),
|
|
788
|
+
...props
|
|
789
|
+
}
|
|
790
|
+
);
|
|
791
|
+
EmptyActions.displayName = "EmptyActions";
|
|
792
|
+
|
|
793
|
+
// src/components/ui/text.tsx
|
|
794
|
+
import { cva as cva6 } from "class-variance-authority";
|
|
795
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
796
|
+
var textVariants = cva6("text-default", {
|
|
697
797
|
variants: {
|
|
698
798
|
variant: {
|
|
699
799
|
// Headings
|
|
@@ -746,7 +846,7 @@ function getDefaultElement(variant) {
|
|
|
746
846
|
}
|
|
747
847
|
function Text({ className, variant, as, style, ref, ...props }) {
|
|
748
848
|
const Component = as || getDefaultElement(variant);
|
|
749
|
-
return /* @__PURE__ */
|
|
849
|
+
return /* @__PURE__ */ jsx8(
|
|
750
850
|
Component,
|
|
751
851
|
{
|
|
752
852
|
className: cn(textVariants({ variant }), className),
|
|
@@ -758,9 +858,9 @@ function Text({ className, variant, as, style, ref, ...props }) {
|
|
|
758
858
|
}
|
|
759
859
|
|
|
760
860
|
// src/components/ui/card.tsx
|
|
761
|
-
import { jsx as
|
|
861
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
762
862
|
function Card({ className, size = "default", ref, ...props }) {
|
|
763
|
-
return /* @__PURE__ */
|
|
863
|
+
return /* @__PURE__ */ jsx9(
|
|
764
864
|
"div",
|
|
765
865
|
{
|
|
766
866
|
ref,
|
|
@@ -775,7 +875,7 @@ function Card({ className, size = "default", ref, ...props }) {
|
|
|
775
875
|
);
|
|
776
876
|
}
|
|
777
877
|
function CardHeader({ className, ref, ...props }) {
|
|
778
|
-
return /* @__PURE__ */
|
|
878
|
+
return /* @__PURE__ */ jsx9(
|
|
779
879
|
"div",
|
|
780
880
|
{
|
|
781
881
|
ref,
|
|
@@ -789,7 +889,7 @@ function CardHeader({ className, ref, ...props }) {
|
|
|
789
889
|
);
|
|
790
890
|
}
|
|
791
891
|
function CardTitle({ className, ref, ...props }) {
|
|
792
|
-
return /* @__PURE__ */
|
|
892
|
+
return /* @__PURE__ */ jsx9(
|
|
793
893
|
Text,
|
|
794
894
|
{
|
|
795
895
|
ref,
|
|
@@ -801,7 +901,7 @@ function CardTitle({ className, ref, ...props }) {
|
|
|
801
901
|
);
|
|
802
902
|
}
|
|
803
903
|
function CardDescription({ className, ref, ...props }) {
|
|
804
|
-
return /* @__PURE__ */
|
|
904
|
+
return /* @__PURE__ */ jsx9(
|
|
805
905
|
Text,
|
|
806
906
|
{
|
|
807
907
|
ref,
|
|
@@ -813,7 +913,7 @@ function CardDescription({ className, ref, ...props }) {
|
|
|
813
913
|
);
|
|
814
914
|
}
|
|
815
915
|
function CardAction({ className, ref, ...props }) {
|
|
816
|
-
return /* @__PURE__ */
|
|
916
|
+
return /* @__PURE__ */ jsx9(
|
|
817
917
|
"div",
|
|
818
918
|
{
|
|
819
919
|
ref,
|
|
@@ -827,7 +927,7 @@ function CardAction({ className, ref, ...props }) {
|
|
|
827
927
|
);
|
|
828
928
|
}
|
|
829
929
|
function CardContent({ className, bleed, ref, ...props }) {
|
|
830
|
-
return /* @__PURE__ */
|
|
930
|
+
return /* @__PURE__ */ jsx9(
|
|
831
931
|
"div",
|
|
832
932
|
{
|
|
833
933
|
ref,
|
|
@@ -841,7 +941,7 @@ function CardContent({ className, bleed, ref, ...props }) {
|
|
|
841
941
|
);
|
|
842
942
|
}
|
|
843
943
|
function CardFooter({ className, ref, ...props }) {
|
|
844
|
-
return /* @__PURE__ */
|
|
944
|
+
return /* @__PURE__ */ jsx9(
|
|
845
945
|
"div",
|
|
846
946
|
{
|
|
847
947
|
ref,
|
|
@@ -857,9 +957,9 @@ function CardFooter({ className, ref, ...props }) {
|
|
|
857
957
|
|
|
858
958
|
// src/components/ui/select.tsx
|
|
859
959
|
import { Select as SelectPrimitive } from "@base-ui/react/select";
|
|
860
|
-
import { cva as
|
|
861
|
-
import { jsx as
|
|
862
|
-
var selectTriggerVariants =
|
|
960
|
+
import { cva as cva7 } from "class-variance-authority";
|
|
961
|
+
import { jsx as jsx10, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
962
|
+
var selectTriggerVariants = cva7(
|
|
863
963
|
[
|
|
864
964
|
// Layout
|
|
865
965
|
"flex w-full items-center justify-between",
|
|
@@ -911,13 +1011,13 @@ function SelectTrigger({
|
|
|
911
1011
|
className: cn(selectTriggerVariants({ size }), className),
|
|
912
1012
|
...props,
|
|
913
1013
|
children: [
|
|
914
|
-
/* @__PURE__ */
|
|
915
|
-
/* @__PURE__ */
|
|
1014
|
+
/* @__PURE__ */ jsx10("span", { className: "flex-1 truncate text-left", children }),
|
|
1015
|
+
/* @__PURE__ */ jsx10(
|
|
916
1016
|
SelectPrimitive.Icon,
|
|
917
1017
|
{
|
|
918
1018
|
"data-slot": "select-icon",
|
|
919
1019
|
className: "shrink-0 transition-transform duration-200 data-[open]:rotate-180",
|
|
920
|
-
children: /* @__PURE__ */
|
|
1020
|
+
children: /* @__PURE__ */ jsx10(CaretDownIcon, { size: 16, className: "text-secondary" })
|
|
921
1021
|
}
|
|
922
1022
|
)
|
|
923
1023
|
]
|
|
@@ -931,7 +1031,7 @@ function SelectContent({
|
|
|
931
1031
|
ref,
|
|
932
1032
|
...props
|
|
933
1033
|
}) {
|
|
934
|
-
return /* @__PURE__ */
|
|
1034
|
+
return /* @__PURE__ */ jsx10(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx10(
|
|
935
1035
|
SelectPrimitive.Positioner,
|
|
936
1036
|
{
|
|
937
1037
|
side: "bottom",
|
|
@@ -956,65 +1056,470 @@ function SelectContent({
|
|
|
956
1056
|
className
|
|
957
1057
|
),
|
|
958
1058
|
children: [
|
|
959
|
-
/* @__PURE__ */
|
|
960
|
-
/* @__PURE__ */
|
|
961
|
-
/* @__PURE__ */
|
|
1059
|
+
/* @__PURE__ */ jsx10(SelectScrollUpButton, {}),
|
|
1060
|
+
/* @__PURE__ */ jsx10(SelectPrimitive.List, { className: "p-[var(--3xs,2px)] overflow-y-auto max-h-[inherit]", children }),
|
|
1061
|
+
/* @__PURE__ */ jsx10(SelectScrollDownButton, {})
|
|
962
1062
|
]
|
|
963
1063
|
}
|
|
964
1064
|
)
|
|
965
1065
|
}
|
|
966
|
-
) });
|
|
1066
|
+
) });
|
|
1067
|
+
}
|
|
1068
|
+
function SelectLabel({ className, ref, ...props }) {
|
|
1069
|
+
return /* @__PURE__ */ jsx10(
|
|
1070
|
+
SelectPrimitive.GroupLabel,
|
|
1071
|
+
{
|
|
1072
|
+
ref,
|
|
1073
|
+
className: cn(
|
|
1074
|
+
"text-secondary type-label-xs-semibold py-[5.5px] px-2",
|
|
1075
|
+
className
|
|
1076
|
+
),
|
|
1077
|
+
...props
|
|
1078
|
+
}
|
|
1079
|
+
);
|
|
1080
|
+
}
|
|
1081
|
+
function SelectItem({
|
|
1082
|
+
className,
|
|
1083
|
+
children,
|
|
1084
|
+
label,
|
|
1085
|
+
ref,
|
|
1086
|
+
...props
|
|
1087
|
+
}) {
|
|
1088
|
+
return /* @__PURE__ */ jsx10(
|
|
1089
|
+
SelectPrimitive.Item,
|
|
1090
|
+
{
|
|
1091
|
+
ref,
|
|
1092
|
+
label: label ?? (typeof children === "string" ? children : void 0),
|
|
1093
|
+
className: cn(
|
|
1094
|
+
"relative flex w-full cursor-pointer select-none items-center",
|
|
1095
|
+
"min-h-8 px-2 py-[5.5px] rounded-md",
|
|
1096
|
+
"type-body-sm-regular outline-none transition-colors text-default",
|
|
1097
|
+
"data-[highlighted]:interactive-hover",
|
|
1098
|
+
"data-[selected]:surface-secondary",
|
|
1099
|
+
"data-[selected]:data-[highlighted]:interactive-hover",
|
|
1100
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1101
|
+
className
|
|
1102
|
+
),
|
|
1103
|
+
...props,
|
|
1104
|
+
children: /* @__PURE__ */ jsx10(SelectPrimitive.ItemText, { className: "flex-1 min-w-0 truncate", children })
|
|
1105
|
+
}
|
|
1106
|
+
);
|
|
1107
|
+
}
|
|
1108
|
+
function SelectSeparator({
|
|
1109
|
+
className,
|
|
1110
|
+
ref,
|
|
1111
|
+
...props
|
|
1112
|
+
}) {
|
|
1113
|
+
return /* @__PURE__ */ jsx10(
|
|
1114
|
+
"div",
|
|
1115
|
+
{
|
|
1116
|
+
ref,
|
|
1117
|
+
role: "separator",
|
|
1118
|
+
className: cn(
|
|
1119
|
+
"-mx-[2px] my-1 h-px bg-[var(--color-border-default)]",
|
|
1120
|
+
className
|
|
1121
|
+
),
|
|
1122
|
+
...props
|
|
1123
|
+
}
|
|
1124
|
+
);
|
|
1125
|
+
}
|
|
1126
|
+
function SelectScrollUpButton({
|
|
1127
|
+
className,
|
|
1128
|
+
ref,
|
|
1129
|
+
...props
|
|
1130
|
+
}) {
|
|
1131
|
+
return /* @__PURE__ */ jsx10(
|
|
1132
|
+
SelectPrimitive.ScrollUpArrow,
|
|
1133
|
+
{
|
|
1134
|
+
ref,
|
|
1135
|
+
className: cn(
|
|
1136
|
+
"flex cursor-default items-center justify-center py-1 text-secondary",
|
|
1137
|
+
className
|
|
1138
|
+
),
|
|
1139
|
+
...props,
|
|
1140
|
+
children: /* @__PURE__ */ jsx10(CaretUpIcon, { size: 14 })
|
|
1141
|
+
}
|
|
1142
|
+
);
|
|
1143
|
+
}
|
|
1144
|
+
function SelectScrollDownButton({
|
|
1145
|
+
className,
|
|
1146
|
+
ref,
|
|
1147
|
+
...props
|
|
1148
|
+
}) {
|
|
1149
|
+
return /* @__PURE__ */ jsx10(
|
|
1150
|
+
SelectPrimitive.ScrollDownArrow,
|
|
1151
|
+
{
|
|
1152
|
+
ref,
|
|
1153
|
+
className: cn(
|
|
1154
|
+
"flex cursor-default items-center justify-center py-1 text-secondary",
|
|
1155
|
+
className
|
|
1156
|
+
),
|
|
1157
|
+
...props,
|
|
1158
|
+
children: /* @__PURE__ */ jsx10(CaretDownIcon, { size: 14 })
|
|
1159
|
+
}
|
|
1160
|
+
);
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
// src/components/ui/combobox.tsx
|
|
1164
|
+
import * as React5 from "react";
|
|
1165
|
+
import { Combobox as ComboboxPrimitive } from "@base-ui/react";
|
|
1166
|
+
|
|
1167
|
+
// src/components/ui/badge.tsx
|
|
1168
|
+
import * as React4 from "react";
|
|
1169
|
+
import { cva as cva8 } from "class-variance-authority";
|
|
1170
|
+
import { jsxs as jsxs3 } from "react/jsx-runtime";
|
|
1171
|
+
var badgeVariants = cva8(
|
|
1172
|
+
[
|
|
1173
|
+
// Layout
|
|
1174
|
+
"inline-flex items-center justify-center gap-1",
|
|
1175
|
+
// Size
|
|
1176
|
+
"h-6 px-2",
|
|
1177
|
+
// Text
|
|
1178
|
+
"whitespace-nowrap type-label-xs-medium",
|
|
1179
|
+
// Shape
|
|
1180
|
+
"rounded-md",
|
|
1181
|
+
// Transitions
|
|
1182
|
+
"transition-colors",
|
|
1183
|
+
// Focus — flush ring, no gap
|
|
1184
|
+
"focus-visible:outline-none",
|
|
1185
|
+
"focus-visible:ring-2 focus-visible:ring-focus-default",
|
|
1186
|
+
// Icons
|
|
1187
|
+
"[&_svg]:pointer-events-none [&_svg]:size-3 [&_svg]:shrink-0"
|
|
1188
|
+
],
|
|
1189
|
+
{
|
|
1190
|
+
variants: {
|
|
1191
|
+
variant: {
|
|
1192
|
+
primary: ["interactive-accent interactive-accent-fg"],
|
|
1193
|
+
secondary: ["interactive-secondary interactive-secondary-fg"],
|
|
1194
|
+
outline: [
|
|
1195
|
+
"interactive-default interactive-default-fg",
|
|
1196
|
+
"border border-default"
|
|
1197
|
+
],
|
|
1198
|
+
ghost: ["interactive-default interactive-default-fg"],
|
|
1199
|
+
urgent: [
|
|
1200
|
+
"interactive-destructive interactive-destructive-fg",
|
|
1201
|
+
// Focus
|
|
1202
|
+
"focus-visible:ring-3 focus-visible:ring-focus-error"
|
|
1203
|
+
]
|
|
1204
|
+
}
|
|
1205
|
+
},
|
|
1206
|
+
defaultVariants: {}
|
|
1207
|
+
}
|
|
1208
|
+
);
|
|
1209
|
+
function isSingleDisplayCharacter(node) {
|
|
1210
|
+
if (node == null || typeof node === "boolean") return false;
|
|
1211
|
+
if (typeof node === "string" || typeof node === "number") {
|
|
1212
|
+
const trimmed = String(node).trim();
|
|
1213
|
+
return trimmed.length === 1;
|
|
1214
|
+
}
|
|
1215
|
+
if (Array.isArray(node)) {
|
|
1216
|
+
const parts = node.filter((x) => x != null && typeof x !== "boolean");
|
|
1217
|
+
if (parts.length !== 1) return false;
|
|
1218
|
+
return isSingleDisplayCharacter(parts[0]);
|
|
1219
|
+
}
|
|
1220
|
+
if (React4.isValidElement(node)) {
|
|
1221
|
+
return isSingleDisplayCharacter(
|
|
1222
|
+
node.props.children
|
|
1223
|
+
);
|
|
1224
|
+
}
|
|
1225
|
+
return false;
|
|
1226
|
+
}
|
|
1227
|
+
function Badge({
|
|
1228
|
+
className,
|
|
1229
|
+
variant,
|
|
1230
|
+
iconLeft,
|
|
1231
|
+
iconRight,
|
|
1232
|
+
onKeyDown,
|
|
1233
|
+
style,
|
|
1234
|
+
children,
|
|
1235
|
+
ref,
|
|
1236
|
+
...props
|
|
1237
|
+
}) {
|
|
1238
|
+
if (!variant) {
|
|
1239
|
+
return null;
|
|
1240
|
+
}
|
|
1241
|
+
const circle = isSingleDisplayCharacter(children) && !iconLeft && !iconRight;
|
|
1242
|
+
return /* @__PURE__ */ jsxs3(
|
|
1243
|
+
"span",
|
|
1244
|
+
{
|
|
1245
|
+
...props,
|
|
1246
|
+
role: "button",
|
|
1247
|
+
tabIndex: 0,
|
|
1248
|
+
onKeyDown: (e) => {
|
|
1249
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
1250
|
+
e.preventDefault();
|
|
1251
|
+
e.currentTarget.click();
|
|
1252
|
+
}
|
|
1253
|
+
onKeyDown?.(e);
|
|
1254
|
+
},
|
|
1255
|
+
className: cn(
|
|
1256
|
+
badgeVariants({ variant }),
|
|
1257
|
+
circle ? "size-5 shrink-0 p-0" : "",
|
|
1258
|
+
className
|
|
1259
|
+
),
|
|
1260
|
+
style,
|
|
1261
|
+
ref,
|
|
1262
|
+
children: [
|
|
1263
|
+
iconLeft,
|
|
1264
|
+
children,
|
|
1265
|
+
iconRight
|
|
1266
|
+
]
|
|
1267
|
+
}
|
|
1268
|
+
);
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
// src/components/ui/combobox.tsx
|
|
1272
|
+
import { jsx as jsx11, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1273
|
+
var comboboxInputVariants = cva(
|
|
1274
|
+
[
|
|
1275
|
+
// Layout
|
|
1276
|
+
"flex w-full items-center",
|
|
1277
|
+
// Appearance
|
|
1278
|
+
"border border-default surface-default shadow-xs",
|
|
1279
|
+
// Typography
|
|
1280
|
+
"text-default type-body-sm-regular",
|
|
1281
|
+
// Transition
|
|
1282
|
+
"transition-colors",
|
|
1283
|
+
// Focus (delegated from inner input)
|
|
1284
|
+
"focus-within:outline-none focus-within:border-strong focus-within:ring-2 focus-within:ring-focus-default",
|
|
1285
|
+
// Disabled
|
|
1286
|
+
"has-[:disabled]:pointer-events-none has-[:disabled]:opacity-50 has-[:disabled]:cursor-not-allowed",
|
|
1287
|
+
// Error
|
|
1288
|
+
"has-[[aria-invalid=true]]:border-error",
|
|
1289
|
+
"has-[[aria-invalid=true]:focus-visible]:ring-2 has-[[aria-invalid=true]:focus-visible]:ring-focus-error has-[[aria-invalid=true]:focus-visible]:border-error"
|
|
1290
|
+
],
|
|
1291
|
+
{
|
|
1292
|
+
variants: {
|
|
1293
|
+
size: {
|
|
1294
|
+
default: "h-9 gap-2 pl-3 pr-2 rounded-md",
|
|
1295
|
+
large: "h-10 gap-3 pl-4 pr-2 rounded-md",
|
|
1296
|
+
small: "h-8 gap-1.5 px-2 rounded-sm",
|
|
1297
|
+
mini: "h-6 gap-1 px-1.5 rounded-sm type-body-xs-regular"
|
|
1298
|
+
}
|
|
1299
|
+
},
|
|
1300
|
+
defaultVariants: {
|
|
1301
|
+
size: "default"
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1304
|
+
);
|
|
1305
|
+
var Combobox = ComboboxPrimitive.Root;
|
|
1306
|
+
var useComboboxFilter = ComboboxPrimitive.useFilter;
|
|
1307
|
+
function ComboboxTrigger({
|
|
1308
|
+
className,
|
|
1309
|
+
...props
|
|
1310
|
+
}) {
|
|
1311
|
+
return /* @__PURE__ */ jsx11(
|
|
1312
|
+
ComboboxPrimitive.Trigger,
|
|
1313
|
+
{
|
|
1314
|
+
"data-slot": "combobox-trigger",
|
|
1315
|
+
"aria-label": "Toggle suggestions",
|
|
1316
|
+
className: cn(
|
|
1317
|
+
"shrink-0 transition-transform duration-200 data-[open]:rotate-180",
|
|
1318
|
+
className
|
|
1319
|
+
),
|
|
1320
|
+
...props,
|
|
1321
|
+
children: /* @__PURE__ */ jsx11(CaretDownIcon, { size: 16, className: "text-secondary" })
|
|
1322
|
+
}
|
|
1323
|
+
);
|
|
1324
|
+
}
|
|
1325
|
+
function ComboboxClear({ className, ...props }) {
|
|
1326
|
+
return /* @__PURE__ */ jsx11(
|
|
1327
|
+
ComboboxPrimitive.Clear,
|
|
1328
|
+
{
|
|
1329
|
+
"data-slot": "combobox-clear",
|
|
1330
|
+
"aria-label": "Clear selection",
|
|
1331
|
+
className: cn("shrink-0", className),
|
|
1332
|
+
...props,
|
|
1333
|
+
children: /* @__PURE__ */ jsx11(CloseIcon, { size: 16, className: "text-secondary" })
|
|
1334
|
+
}
|
|
1335
|
+
);
|
|
1336
|
+
}
|
|
1337
|
+
function ComboboxInput({
|
|
1338
|
+
className,
|
|
1339
|
+
children,
|
|
1340
|
+
size,
|
|
1341
|
+
disabled = false,
|
|
1342
|
+
showTrigger = true,
|
|
1343
|
+
showClear = false,
|
|
1344
|
+
ref,
|
|
1345
|
+
...props
|
|
1346
|
+
}) {
|
|
1347
|
+
return /* @__PURE__ */ jsxs4(
|
|
1348
|
+
"div",
|
|
1349
|
+
{
|
|
1350
|
+
ref,
|
|
1351
|
+
"data-slot": "combobox-input",
|
|
1352
|
+
className: cn(
|
|
1353
|
+
"group/combobox-input",
|
|
1354
|
+
comboboxInputVariants({ size }),
|
|
1355
|
+
className
|
|
1356
|
+
),
|
|
1357
|
+
children: [
|
|
1358
|
+
/* @__PURE__ */ jsx11(
|
|
1359
|
+
ComboboxPrimitive.Input,
|
|
1360
|
+
{
|
|
1361
|
+
disabled,
|
|
1362
|
+
className: "flex-1 min-w-0 bg-transparent outline-none placeholder:text-secondary",
|
|
1363
|
+
...props
|
|
1364
|
+
}
|
|
1365
|
+
),
|
|
1366
|
+
showClear && /* @__PURE__ */ jsx11(ComboboxClear, { disabled }),
|
|
1367
|
+
showTrigger && /* @__PURE__ */ jsx11(
|
|
1368
|
+
ComboboxTrigger,
|
|
1369
|
+
{
|
|
1370
|
+
className: "group-has-[[data-slot=combobox-clear]]/combobox-input:hidden",
|
|
1371
|
+
disabled
|
|
1372
|
+
}
|
|
1373
|
+
),
|
|
1374
|
+
children
|
|
1375
|
+
]
|
|
1376
|
+
}
|
|
1377
|
+
);
|
|
1378
|
+
}
|
|
1379
|
+
function ComboboxContent({
|
|
1380
|
+
className,
|
|
1381
|
+
side = "bottom",
|
|
1382
|
+
sideOffset = 8,
|
|
1383
|
+
align = "start",
|
|
1384
|
+
alignOffset = 0,
|
|
1385
|
+
anchor,
|
|
1386
|
+
...props
|
|
1387
|
+
}) {
|
|
1388
|
+
return /* @__PURE__ */ jsx11(ComboboxPrimitive.Portal, { children: /* @__PURE__ */ jsx11(
|
|
1389
|
+
ComboboxPrimitive.Positioner,
|
|
1390
|
+
{
|
|
1391
|
+
side,
|
|
1392
|
+
sideOffset,
|
|
1393
|
+
align,
|
|
1394
|
+
alignOffset,
|
|
1395
|
+
anchor,
|
|
1396
|
+
className: "isolate z-50 w-[var(--anchor-width)] outline-none",
|
|
1397
|
+
children: /* @__PURE__ */ jsx11(
|
|
1398
|
+
ComboboxPrimitive.Popup,
|
|
1399
|
+
{
|
|
1400
|
+
"data-slot": "combobox-content",
|
|
1401
|
+
className: cn(
|
|
1402
|
+
// Layout — matches SelectContent
|
|
1403
|
+
"group/combobox-content relative max-h-60 min-w-32 overflow-hidden",
|
|
1404
|
+
// Appearance
|
|
1405
|
+
"rounded-lg border border-default surface-default shadow-md",
|
|
1406
|
+
// Open / close animation
|
|
1407
|
+
"data-[open]:animate-in data-[open]:fade-in-0 data-[open]:zoom-in-95",
|
|
1408
|
+
"data-[closed]:animate-out data-[closed]:fade-out-0 data-[closed]:zoom-out-95",
|
|
1409
|
+
"duration-150",
|
|
1410
|
+
className
|
|
1411
|
+
),
|
|
1412
|
+
...props
|
|
1413
|
+
}
|
|
1414
|
+
)
|
|
1415
|
+
}
|
|
1416
|
+
) });
|
|
1417
|
+
}
|
|
1418
|
+
function ComboboxList({ className, ...props }) {
|
|
1419
|
+
return /* @__PURE__ */ jsx11(
|
|
1420
|
+
ComboboxPrimitive.List,
|
|
1421
|
+
{
|
|
1422
|
+
"data-slot": "combobox-list",
|
|
1423
|
+
className: cn(
|
|
1424
|
+
// Layout — matches SelectContent list
|
|
1425
|
+
"group/combobox-list p-[2px] overflow-y-auto max-h-[inherit]",
|
|
1426
|
+
className
|
|
1427
|
+
),
|
|
1428
|
+
...props
|
|
1429
|
+
}
|
|
1430
|
+
);
|
|
1431
|
+
}
|
|
1432
|
+
function ComboboxItem({
|
|
1433
|
+
className,
|
|
1434
|
+
children,
|
|
1435
|
+
...props
|
|
1436
|
+
}) {
|
|
1437
|
+
return /* @__PURE__ */ jsxs4(
|
|
1438
|
+
ComboboxPrimitive.Item,
|
|
1439
|
+
{
|
|
1440
|
+
"data-slot": "combobox-item",
|
|
1441
|
+
className: cn(
|
|
1442
|
+
// Layout
|
|
1443
|
+
"relative flex w-full cursor-default select-none items-center gap-2",
|
|
1444
|
+
"min-h-8 py-[5.5px] pr-8 pl-2 rounded-md",
|
|
1445
|
+
// Typography & appearance
|
|
1446
|
+
"text-default type-body-sm-regular",
|
|
1447
|
+
"outline-none transition-colors",
|
|
1448
|
+
// Highlighted
|
|
1449
|
+
"data-[highlighted]:interactive-hover data-[highlighted]:outline-none",
|
|
1450
|
+
// Disabled
|
|
1451
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1452
|
+
// SVG
|
|
1453
|
+
"[&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
1454
|
+
className
|
|
1455
|
+
),
|
|
1456
|
+
...props,
|
|
1457
|
+
children: [
|
|
1458
|
+
children,
|
|
1459
|
+
/* @__PURE__ */ jsx11(
|
|
1460
|
+
ComboboxPrimitive.ItemIndicator,
|
|
1461
|
+
{
|
|
1462
|
+
render: /* @__PURE__ */ jsx11("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx11(CheckmarkIcon, { size: 16 }) })
|
|
1463
|
+
}
|
|
1464
|
+
)
|
|
1465
|
+
]
|
|
1466
|
+
}
|
|
1467
|
+
);
|
|
1468
|
+
}
|
|
1469
|
+
function ComboboxGroup({ className, ...props }) {
|
|
1470
|
+
return /* @__PURE__ */ jsx11(
|
|
1471
|
+
ComboboxPrimitive.Group,
|
|
1472
|
+
{
|
|
1473
|
+
"data-slot": "combobox-group",
|
|
1474
|
+
className: cn(className),
|
|
1475
|
+
...props
|
|
1476
|
+
}
|
|
1477
|
+
);
|
|
967
1478
|
}
|
|
968
|
-
function
|
|
969
|
-
|
|
970
|
-
|
|
1479
|
+
function ComboboxLabel({
|
|
1480
|
+
className,
|
|
1481
|
+
...props
|
|
1482
|
+
}) {
|
|
1483
|
+
return /* @__PURE__ */ jsx11(
|
|
1484
|
+
ComboboxPrimitive.GroupLabel,
|
|
971
1485
|
{
|
|
972
|
-
|
|
1486
|
+
"data-slot": "combobox-label",
|
|
973
1487
|
className: cn(
|
|
974
|
-
"text-secondary type-label-xs-semibold
|
|
1488
|
+
"px-2 py-1.5 text-secondary type-label-xs-semibold",
|
|
975
1489
|
className
|
|
976
1490
|
),
|
|
977
1491
|
...props
|
|
978
1492
|
}
|
|
979
1493
|
);
|
|
980
1494
|
}
|
|
981
|
-
function
|
|
1495
|
+
function ComboboxEmpty({
|
|
982
1496
|
className,
|
|
983
|
-
children,
|
|
984
|
-
label,
|
|
985
|
-
ref,
|
|
986
1497
|
...props
|
|
987
1498
|
}) {
|
|
988
|
-
return /* @__PURE__ */
|
|
989
|
-
|
|
1499
|
+
return /* @__PURE__ */ jsx11(
|
|
1500
|
+
"div",
|
|
990
1501
|
{
|
|
991
|
-
|
|
992
|
-
|
|
1502
|
+
"data-slot": "combobox-empty",
|
|
1503
|
+
role: "status",
|
|
993
1504
|
className: cn(
|
|
994
|
-
|
|
995
|
-
"
|
|
996
|
-
"
|
|
997
|
-
"
|
|
998
|
-
"data-[selected]:surface-secondary",
|
|
999
|
-
"data-[selected]:data-[highlighted]:interactive-hover",
|
|
1000
|
-
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
1505
|
+
// Visible by default, hidden when the list contains items
|
|
1506
|
+
"flex group-has-[[data-slot=combobox-item]]/combobox-list:hidden",
|
|
1507
|
+
"w-full justify-center py-2 text-center",
|
|
1508
|
+
"type-body-sm-regular text-secondary",
|
|
1001
1509
|
className
|
|
1002
1510
|
),
|
|
1003
|
-
...props
|
|
1004
|
-
children: /* @__PURE__ */ jsx9(SelectPrimitive.ItemText, { className: "flex-1 min-w-0 truncate", children })
|
|
1511
|
+
...props
|
|
1005
1512
|
}
|
|
1006
1513
|
);
|
|
1007
1514
|
}
|
|
1008
|
-
function
|
|
1515
|
+
function ComboboxSeparator({
|
|
1009
1516
|
className,
|
|
1010
|
-
ref,
|
|
1011
1517
|
...props
|
|
1012
1518
|
}) {
|
|
1013
|
-
return /* @__PURE__ */
|
|
1014
|
-
|
|
1519
|
+
return /* @__PURE__ */ jsx11(
|
|
1520
|
+
ComboboxPrimitive.Separator,
|
|
1015
1521
|
{
|
|
1016
|
-
|
|
1017
|
-
role: "separator",
|
|
1522
|
+
"data-slot": "combobox-separator",
|
|
1018
1523
|
className: cn(
|
|
1019
1524
|
"-mx-[2px] my-1 h-px bg-[var(--color-border-default)]",
|
|
1020
1525
|
className
|
|
@@ -1023,52 +1528,126 @@ function SelectSeparator({
|
|
|
1023
1528
|
}
|
|
1024
1529
|
);
|
|
1025
1530
|
}
|
|
1026
|
-
|
|
1531
|
+
var comboboxChipsVariants = cva(
|
|
1532
|
+
[
|
|
1533
|
+
// Layout
|
|
1534
|
+
"flex w-full flex-wrap items-center",
|
|
1535
|
+
"py-1",
|
|
1536
|
+
// Appearance
|
|
1537
|
+
"border border-default surface-default shadow-xs",
|
|
1538
|
+
// Typography
|
|
1539
|
+
"text-default type-body-sm-regular",
|
|
1540
|
+
// Transition
|
|
1541
|
+
"transition-colors",
|
|
1542
|
+
// Focus (delegated from inner input)
|
|
1543
|
+
"focus-within:outline-none focus-within:border-strong focus-within:ring-2 focus-within:ring-focus-default",
|
|
1544
|
+
// Disabled (uses data attribute since children are consumer-controlled)
|
|
1545
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed",
|
|
1546
|
+
// Error
|
|
1547
|
+
"has-[[aria-invalid=true]]:border-error",
|
|
1548
|
+
"has-[[aria-invalid=true]:focus-visible]:ring-2 has-[[aria-invalid=true]:focus-visible]:ring-focus-error has-[[aria-invalid=true]:focus-visible]:border-error",
|
|
1549
|
+
// When chips are present, tighten horizontal padding
|
|
1550
|
+
"has-data-[slot=combobox-chip]:px-1"
|
|
1551
|
+
],
|
|
1552
|
+
{
|
|
1553
|
+
variants: {
|
|
1554
|
+
size: {
|
|
1555
|
+
default: "min-h-9 gap-1 pl-3 pr-2 rounded-md",
|
|
1556
|
+
large: "min-h-10 gap-1.5 pl-4 pr-2 rounded-md",
|
|
1557
|
+
small: "min-h-8 gap-1 px-2 rounded-sm",
|
|
1558
|
+
mini: "min-h-6 gap-0.5 px-1.5 rounded-sm type-body-xs-regular"
|
|
1559
|
+
}
|
|
1560
|
+
},
|
|
1561
|
+
defaultVariants: {
|
|
1562
|
+
size: "default"
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
);
|
|
1566
|
+
function ComboboxChips({
|
|
1027
1567
|
className,
|
|
1028
|
-
|
|
1568
|
+
children,
|
|
1569
|
+
size,
|
|
1570
|
+
showTrigger = true,
|
|
1571
|
+
disabled = false,
|
|
1029
1572
|
...props
|
|
1030
1573
|
}) {
|
|
1031
|
-
return /* @__PURE__ */
|
|
1032
|
-
|
|
1574
|
+
return /* @__PURE__ */ jsxs4(
|
|
1575
|
+
ComboboxPrimitive.Chips,
|
|
1033
1576
|
{
|
|
1034
|
-
|
|
1577
|
+
"data-slot": "combobox-chips",
|
|
1578
|
+
"data-disabled": disabled || void 0,
|
|
1579
|
+
className: cn(comboboxChipsVariants({ size }), className),
|
|
1580
|
+
...props,
|
|
1581
|
+
children: [
|
|
1582
|
+
children,
|
|
1583
|
+
showTrigger && /* @__PURE__ */ jsx11(ComboboxTrigger, { className: "ml-auto", disabled })
|
|
1584
|
+
]
|
|
1585
|
+
}
|
|
1586
|
+
);
|
|
1587
|
+
}
|
|
1588
|
+
function ComboboxChip({
|
|
1589
|
+
className,
|
|
1590
|
+
children,
|
|
1591
|
+
showRemove = true,
|
|
1592
|
+
removeLabel = "Remove",
|
|
1593
|
+
...props
|
|
1594
|
+
}) {
|
|
1595
|
+
return /* @__PURE__ */ jsxs4(
|
|
1596
|
+
ComboboxPrimitive.Chip,
|
|
1597
|
+
{
|
|
1598
|
+
"data-slot": "combobox-chip",
|
|
1035
1599
|
className: cn(
|
|
1036
|
-
|
|
1600
|
+
badgeVariants({ variant: "secondary" }),
|
|
1601
|
+
// Overrides for chip context
|
|
1602
|
+
"gap-1 whitespace-nowrap",
|
|
1603
|
+
// Disabled
|
|
1604
|
+
"has-[:disabled]:pointer-events-none has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50",
|
|
1037
1605
|
className
|
|
1038
1606
|
),
|
|
1039
1607
|
...props,
|
|
1040
|
-
children:
|
|
1608
|
+
children: [
|
|
1609
|
+
children,
|
|
1610
|
+
showRemove && /* @__PURE__ */ jsx11(
|
|
1611
|
+
ComboboxPrimitive.ChipRemove,
|
|
1612
|
+
{
|
|
1613
|
+
"data-slot": "combobox-chip-remove",
|
|
1614
|
+
"aria-label": removeLabel,
|
|
1615
|
+
render: /* @__PURE__ */ jsx11("span", { className: "inline-flex cursor-pointer opacity-50 hover:opacity-100", children: /* @__PURE__ */ jsx11(CloseIcon, { size: 12, className: "pointer-events-none" }) })
|
|
1616
|
+
}
|
|
1617
|
+
)
|
|
1618
|
+
]
|
|
1041
1619
|
}
|
|
1042
1620
|
);
|
|
1043
1621
|
}
|
|
1044
|
-
function
|
|
1622
|
+
function ComboboxChipsInput({
|
|
1045
1623
|
className,
|
|
1046
|
-
ref,
|
|
1047
1624
|
...props
|
|
1048
1625
|
}) {
|
|
1049
|
-
return /* @__PURE__ */
|
|
1050
|
-
|
|
1626
|
+
return /* @__PURE__ */ jsx11(
|
|
1627
|
+
ComboboxPrimitive.Input,
|
|
1051
1628
|
{
|
|
1052
|
-
|
|
1629
|
+
"data-slot": "combobox-chip-input",
|
|
1053
1630
|
className: cn(
|
|
1054
|
-
"flex
|
|
1631
|
+
"flex-1 min-w-16 bg-transparent outline-none placeholder:text-secondary",
|
|
1055
1632
|
className
|
|
1056
1633
|
),
|
|
1057
|
-
...props
|
|
1058
|
-
children: /* @__PURE__ */ jsx9(CaretDownIcon, { size: 14 })
|
|
1634
|
+
...props
|
|
1059
1635
|
}
|
|
1060
1636
|
);
|
|
1061
1637
|
}
|
|
1638
|
+
function useComboboxAnchor() {
|
|
1639
|
+
return React5.useRef(null);
|
|
1640
|
+
}
|
|
1062
1641
|
|
|
1063
1642
|
// src/components/ui/field.tsx
|
|
1064
1643
|
import { useMemo } from "react";
|
|
1065
|
-
import { cva as
|
|
1644
|
+
import { cva as cva9 } from "class-variance-authority";
|
|
1066
1645
|
|
|
1067
1646
|
// src/components/ui/label.tsx
|
|
1068
|
-
import { jsx as
|
|
1647
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
1069
1648
|
var labelClasses = "type-label-sm-medium flex flex-row items-center gap-2 text-default select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50";
|
|
1070
1649
|
function Label({ className, ref, ...props }) {
|
|
1071
|
-
return /* @__PURE__ */
|
|
1650
|
+
return /* @__PURE__ */ jsx12(
|
|
1072
1651
|
"label",
|
|
1073
1652
|
{
|
|
1074
1653
|
ref,
|
|
@@ -1080,9 +1659,9 @@ function Label({ className, ref, ...props }) {
|
|
|
1080
1659
|
}
|
|
1081
1660
|
|
|
1082
1661
|
// src/components/ui/field.tsx
|
|
1083
|
-
import { jsx as
|
|
1662
|
+
import { jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1084
1663
|
function FieldSet({ className, ...props }) {
|
|
1085
|
-
return /* @__PURE__ */
|
|
1664
|
+
return /* @__PURE__ */ jsx13(
|
|
1086
1665
|
"fieldset",
|
|
1087
1666
|
{
|
|
1088
1667
|
"data-slot": "field-set",
|
|
@@ -1100,7 +1679,7 @@ function FieldLegend({
|
|
|
1100
1679
|
variant = "legend",
|
|
1101
1680
|
...props
|
|
1102
1681
|
}) {
|
|
1103
|
-
return /* @__PURE__ */
|
|
1682
|
+
return /* @__PURE__ */ jsx13(
|
|
1104
1683
|
"legend",
|
|
1105
1684
|
{
|
|
1106
1685
|
"data-slot": "field-legend",
|
|
@@ -1116,7 +1695,7 @@ function FieldLegend({
|
|
|
1116
1695
|
);
|
|
1117
1696
|
}
|
|
1118
1697
|
function FieldGroup({ className, ...props }) {
|
|
1119
|
-
return /* @__PURE__ */
|
|
1698
|
+
return /* @__PURE__ */ jsx13(
|
|
1120
1699
|
"div",
|
|
1121
1700
|
{
|
|
1122
1701
|
"data-slot": "field-group",
|
|
@@ -1128,7 +1707,7 @@ function FieldGroup({ className, ...props }) {
|
|
|
1128
1707
|
}
|
|
1129
1708
|
);
|
|
1130
1709
|
}
|
|
1131
|
-
var fieldVariants =
|
|
1710
|
+
var fieldVariants = cva9(
|
|
1132
1711
|
"group/field data-[invalid=true]:text-error flex w-full gap-3",
|
|
1133
1712
|
{
|
|
1134
1713
|
variants: {
|
|
@@ -1156,7 +1735,7 @@ function Field({
|
|
|
1156
1735
|
orientation = "vertical",
|
|
1157
1736
|
...props
|
|
1158
1737
|
}) {
|
|
1159
|
-
return /* @__PURE__ */
|
|
1738
|
+
return /* @__PURE__ */ jsx13(
|
|
1160
1739
|
"div",
|
|
1161
1740
|
{
|
|
1162
1741
|
role: "group",
|
|
@@ -1168,7 +1747,7 @@ function Field({
|
|
|
1168
1747
|
);
|
|
1169
1748
|
}
|
|
1170
1749
|
function FieldContent({ className, ...props }) {
|
|
1171
|
-
return /* @__PURE__ */
|
|
1750
|
+
return /* @__PURE__ */ jsx13(
|
|
1172
1751
|
"div",
|
|
1173
1752
|
{
|
|
1174
1753
|
"data-slot": "field-content",
|
|
@@ -1184,7 +1763,7 @@ function FieldLabel({
|
|
|
1184
1763
|
className,
|
|
1185
1764
|
...props
|
|
1186
1765
|
}) {
|
|
1187
|
-
return /* @__PURE__ */
|
|
1766
|
+
return /* @__PURE__ */ jsx13(
|
|
1188
1767
|
Label,
|
|
1189
1768
|
{
|
|
1190
1769
|
"data-slot": "field-label",
|
|
@@ -1199,7 +1778,7 @@ function FieldLabel({
|
|
|
1199
1778
|
);
|
|
1200
1779
|
}
|
|
1201
1780
|
function FieldTitle({ className, ...props }) {
|
|
1202
|
-
return /* @__PURE__ */
|
|
1781
|
+
return /* @__PURE__ */ jsx13(
|
|
1203
1782
|
"div",
|
|
1204
1783
|
{
|
|
1205
1784
|
"data-slot": "field-label",
|
|
@@ -1212,7 +1791,7 @@ function FieldTitle({ className, ...props }) {
|
|
|
1212
1791
|
);
|
|
1213
1792
|
}
|
|
1214
1793
|
function FieldDescription({ className, ...props }) {
|
|
1215
|
-
return /* @__PURE__ */
|
|
1794
|
+
return /* @__PURE__ */ jsx13(
|
|
1216
1795
|
"p",
|
|
1217
1796
|
{
|
|
1218
1797
|
"data-slot": "field-description",
|
|
@@ -1231,7 +1810,7 @@ function FieldSeparator({
|
|
|
1231
1810
|
className,
|
|
1232
1811
|
...props
|
|
1233
1812
|
}) {
|
|
1234
|
-
return /* @__PURE__ */
|
|
1813
|
+
return /* @__PURE__ */ jsxs5(
|
|
1235
1814
|
"div",
|
|
1236
1815
|
{
|
|
1237
1816
|
"data-slot": "field-separator",
|
|
@@ -1242,8 +1821,8 @@ function FieldSeparator({
|
|
|
1242
1821
|
),
|
|
1243
1822
|
...props,
|
|
1244
1823
|
children: [
|
|
1245
|
-
/* @__PURE__ */
|
|
1246
|
-
children && /* @__PURE__ */
|
|
1824
|
+
/* @__PURE__ */ jsx13(Separator, { className: "absolute inset-0 top-1/2" }),
|
|
1825
|
+
children && /* @__PURE__ */ jsx13(
|
|
1247
1826
|
"span",
|
|
1248
1827
|
{
|
|
1249
1828
|
className: "surface-default text-secondary relative mx-auto block w-fit px-2",
|
|
@@ -1271,14 +1850,14 @@ function FieldError({
|
|
|
1271
1850
|
if (errors?.length === 1 && errors[0]?.message) {
|
|
1272
1851
|
return errors[0].message;
|
|
1273
1852
|
}
|
|
1274
|
-
return /* @__PURE__ */
|
|
1275
|
-
(error, index) => error?.message && /* @__PURE__ */
|
|
1853
|
+
return /* @__PURE__ */ jsx13("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: errors.map(
|
|
1854
|
+
(error, index) => error?.message && /* @__PURE__ */ jsx13("li", { children: error.message }, index)
|
|
1276
1855
|
) });
|
|
1277
1856
|
}, [children, errors]);
|
|
1278
1857
|
if (!content) {
|
|
1279
1858
|
return null;
|
|
1280
1859
|
}
|
|
1281
|
-
return /* @__PURE__ */
|
|
1860
|
+
return /* @__PURE__ */ jsx13(
|
|
1282
1861
|
"div",
|
|
1283
1862
|
{
|
|
1284
1863
|
role: "alert",
|
|
@@ -1291,19 +1870,19 @@ function FieldError({
|
|
|
1291
1870
|
}
|
|
1292
1871
|
|
|
1293
1872
|
// src/components/ui/dialog.tsx
|
|
1294
|
-
import * as
|
|
1873
|
+
import * as React6 from "react";
|
|
1295
1874
|
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
|
|
1296
|
-
import { jsx as
|
|
1297
|
-
var DialogChromeContext =
|
|
1875
|
+
import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1876
|
+
var DialogChromeContext = React6.createContext(null);
|
|
1298
1877
|
function useDialogChrome() {
|
|
1299
|
-
return
|
|
1878
|
+
return React6.useContext(DialogChromeContext) ?? { showCloseButton: false };
|
|
1300
1879
|
}
|
|
1301
1880
|
function DialogCloseControl({
|
|
1302
1881
|
className,
|
|
1303
1882
|
ref,
|
|
1304
1883
|
...props
|
|
1305
1884
|
}) {
|
|
1306
|
-
return /* @__PURE__ */
|
|
1885
|
+
return /* @__PURE__ */ jsxs6(
|
|
1307
1886
|
DialogPrimitive.Close,
|
|
1308
1887
|
{
|
|
1309
1888
|
ref,
|
|
@@ -1315,8 +1894,8 @@ function DialogCloseControl({
|
|
|
1315
1894
|
),
|
|
1316
1895
|
...props,
|
|
1317
1896
|
children: [
|
|
1318
|
-
/* @__PURE__ */
|
|
1319
|
-
/* @__PURE__ */
|
|
1897
|
+
/* @__PURE__ */ jsx14(CloseIcon, { size: 16, "aria-hidden": "true" }),
|
|
1898
|
+
/* @__PURE__ */ jsx14("span", { className: "sr-only", children: "Close" })
|
|
1320
1899
|
]
|
|
1321
1900
|
}
|
|
1322
1901
|
);
|
|
@@ -1326,7 +1905,7 @@ var DIALOG_MOBILE_FRAME = "w-[320px] min-h-[240px] max-h-[min(640px,calc(100dvh-
|
|
|
1326
1905
|
var Dialog = DialogPrimitive.Root;
|
|
1327
1906
|
var DialogTrigger = DialogPrimitive.Trigger;
|
|
1328
1907
|
function DialogOverlay({ className, ref, ...props }) {
|
|
1329
|
-
return /* @__PURE__ */
|
|
1908
|
+
return /* @__PURE__ */ jsx14(
|
|
1330
1909
|
DialogPrimitive.Backdrop,
|
|
1331
1910
|
{
|
|
1332
1911
|
ref,
|
|
@@ -1346,9 +1925,9 @@ function DialogContent({
|
|
|
1346
1925
|
ref,
|
|
1347
1926
|
...props
|
|
1348
1927
|
}) {
|
|
1349
|
-
return /* @__PURE__ */
|
|
1350
|
-
/* @__PURE__ */
|
|
1351
|
-
/* @__PURE__ */
|
|
1928
|
+
return /* @__PURE__ */ jsxs6(DialogPrimitive.Portal, { children: [
|
|
1929
|
+
/* @__PURE__ */ jsx14(DialogOverlay, {}),
|
|
1930
|
+
/* @__PURE__ */ jsx14(DialogPrimitive.Viewport, { className: "fixed inset-0 z-50 flex items-start justify-center overflow-y-auto p-4 sm:items-center sm:p-6", children: /* @__PURE__ */ jsx14(
|
|
1352
1931
|
DialogPrimitive.Popup,
|
|
1353
1932
|
{
|
|
1354
1933
|
ref,
|
|
@@ -1360,13 +1939,13 @@ function DialogContent({
|
|
|
1360
1939
|
className
|
|
1361
1940
|
),
|
|
1362
1941
|
...props,
|
|
1363
|
-
children: /* @__PURE__ */
|
|
1942
|
+
children: /* @__PURE__ */ jsx14(DialogChromeContext, { value: { showCloseButton }, children })
|
|
1364
1943
|
}
|
|
1365
1944
|
) })
|
|
1366
1945
|
] });
|
|
1367
1946
|
}
|
|
1368
1947
|
function DialogBody({ className, ref, ...props }) {
|
|
1369
|
-
return /* @__PURE__ */
|
|
1948
|
+
return /* @__PURE__ */ jsx14(
|
|
1370
1949
|
"div",
|
|
1371
1950
|
{
|
|
1372
1951
|
ref,
|
|
@@ -1380,7 +1959,7 @@ function DialogBody({ className, ref, ...props }) {
|
|
|
1380
1959
|
);
|
|
1381
1960
|
}
|
|
1382
1961
|
function DialogFooter({ className, ref, ...props }) {
|
|
1383
|
-
return /* @__PURE__ */
|
|
1962
|
+
return /* @__PURE__ */ jsx14(
|
|
1384
1963
|
"div",
|
|
1385
1964
|
{
|
|
1386
1965
|
ref,
|
|
@@ -1399,7 +1978,7 @@ function DialogHeader({
|
|
|
1399
1978
|
...props
|
|
1400
1979
|
}) {
|
|
1401
1980
|
const { showCloseButton } = useDialogChrome();
|
|
1402
|
-
return /* @__PURE__ */
|
|
1981
|
+
return /* @__PURE__ */ jsxs6(
|
|
1403
1982
|
"div",
|
|
1404
1983
|
{
|
|
1405
1984
|
ref,
|
|
@@ -1409,14 +1988,14 @@ function DialogHeader({
|
|
|
1409
1988
|
),
|
|
1410
1989
|
...props,
|
|
1411
1990
|
children: [
|
|
1412
|
-
/* @__PURE__ */
|
|
1413
|
-
showCloseButton ? /* @__PURE__ */
|
|
1991
|
+
/* @__PURE__ */ jsx14("div", { className: "flex min-w-0 flex-col gap-1", children }),
|
|
1992
|
+
showCloseButton ? /* @__PURE__ */ jsx14(DialogCloseControl, {}) : null
|
|
1414
1993
|
]
|
|
1415
1994
|
}
|
|
1416
1995
|
);
|
|
1417
1996
|
}
|
|
1418
1997
|
function DialogTitle({ className, ref, ...props }) {
|
|
1419
|
-
return /* @__PURE__ */
|
|
1998
|
+
return /* @__PURE__ */ jsx14(
|
|
1420
1999
|
DialogPrimitive.Title,
|
|
1421
2000
|
{
|
|
1422
2001
|
ref,
|
|
@@ -1430,7 +2009,7 @@ function DialogDescription({
|
|
|
1430
2009
|
ref,
|
|
1431
2010
|
...props
|
|
1432
2011
|
}) {
|
|
1433
|
-
return /* @__PURE__ */
|
|
2012
|
+
return /* @__PURE__ */ jsx14(
|
|
1434
2013
|
DialogPrimitive.Description,
|
|
1435
2014
|
{
|
|
1436
2015
|
ref,
|
|
@@ -1442,15 +2021,18 @@ function DialogDescription({
|
|
|
1442
2021
|
var DialogClose = DialogPrimitive.Close;
|
|
1443
2022
|
|
|
1444
2023
|
// src/components/ui/drawer.tsx
|
|
1445
|
-
import * as
|
|
2024
|
+
import * as React7 from "react";
|
|
1446
2025
|
import { Drawer as DrawerPrimitive } from "vaul";
|
|
1447
|
-
import { jsx as
|
|
1448
|
-
var
|
|
2026
|
+
import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
2027
|
+
var DrawerContext = React7.createContext({
|
|
2028
|
+
direction: "bottom"
|
|
2029
|
+
});
|
|
2030
|
+
var Drawer = ({ direction = "bottom", ...props }) => /* @__PURE__ */ jsx15(DrawerContext.Provider, { value: { direction }, children: /* @__PURE__ */ jsx15(DrawerPrimitive.Root, { direction, ...props }) });
|
|
1449
2031
|
var DrawerTrigger = DrawerPrimitive.Trigger;
|
|
1450
2032
|
var DrawerPortal = DrawerPrimitive.Portal;
|
|
1451
2033
|
var DrawerClose = DrawerPrimitive.Close;
|
|
1452
|
-
var DrawerOverlay =
|
|
1453
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
2034
|
+
var DrawerOverlay = React7.forwardRef(
|
|
2035
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
|
|
1454
2036
|
DrawerPrimitive.Overlay,
|
|
1455
2037
|
{
|
|
1456
2038
|
ref,
|
|
@@ -1461,44 +2043,43 @@ var DrawerOverlay = React5.forwardRef(
|
|
|
1461
2043
|
)
|
|
1462
2044
|
);
|
|
1463
2045
|
DrawerOverlay.displayName = "DrawerOverlay";
|
|
1464
|
-
var DrawerContent =
|
|
1465
|
-
({ className, children, ...props }, ref) =>
|
|
1466
|
-
|
|
1467
|
-
/* @__PURE__ */
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
"
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
"data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:h-full data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:border-default data-[vaul-drawer-direction=right]:sm:max-w-sm",
|
|
1482
|
-
className
|
|
1483
|
-
),
|
|
1484
|
-
...props,
|
|
1485
|
-
children: [
|
|
1486
|
-
/* @__PURE__ */ jsx13(
|
|
1487
|
-
"div",
|
|
1488
|
-
{
|
|
1489
|
-
"aria-hidden": "true",
|
|
1490
|
-
className: "mx-auto mt-2 hidden h-[3px] w-[50px] shrink-0 rounded-[2px] surface-inverse group-data-[vaul-drawer-direction=bottom]/drawer-content:block"
|
|
1491
|
-
}
|
|
2046
|
+
var DrawerContent = React7.forwardRef(
|
|
2047
|
+
({ className, children, ...props }, ref) => {
|
|
2048
|
+
const { direction } = React7.useContext(DrawerContext);
|
|
2049
|
+
return /* @__PURE__ */ jsxs7(DrawerPortal, { children: [
|
|
2050
|
+
/* @__PURE__ */ jsx15(DrawerOverlay, {}),
|
|
2051
|
+
/* @__PURE__ */ jsxs7(
|
|
2052
|
+
DrawerPrimitive.Content,
|
|
2053
|
+
{
|
|
2054
|
+
ref,
|
|
2055
|
+
"data-slot": "drawer-content",
|
|
2056
|
+
className: cn(
|
|
2057
|
+
"group/drawer-content fixed z-50 flex h-auto flex-col surface-default shadow-lg outline-none",
|
|
2058
|
+
direction === "bottom" && "inset-x-0 bottom-0 mt-24 max-h-[80vh] rounded-t-xl border-t border-default",
|
|
2059
|
+
direction === "top" && "inset-x-0 top-0 mb-24 max-h-[80vh] rounded-b-xl border-b border-default",
|
|
2060
|
+
direction === "left" && "inset-y-0 left-0 h-full w-3/4 rounded-r-xl border-r border-default",
|
|
2061
|
+
direction === "right" && "inset-y-0 right-0 h-full w-3/4 rounded-l-xl border-l border-default",
|
|
2062
|
+
className
|
|
1492
2063
|
),
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
2064
|
+
...props,
|
|
2065
|
+
children: [
|
|
2066
|
+
direction === "bottom" && /* @__PURE__ */ jsx15(
|
|
2067
|
+
"div",
|
|
2068
|
+
{
|
|
2069
|
+
"aria-hidden": "true",
|
|
2070
|
+
className: "mx-auto mt-2 h-[3px] w-[50px] shrink-0 rounded-[2px] surface-inverse"
|
|
2071
|
+
}
|
|
2072
|
+
),
|
|
2073
|
+
children
|
|
2074
|
+
]
|
|
2075
|
+
}
|
|
2076
|
+
)
|
|
2077
|
+
] });
|
|
2078
|
+
}
|
|
1498
2079
|
);
|
|
1499
2080
|
DrawerContent.displayName = "DrawerContent";
|
|
1500
|
-
var DrawerTitle =
|
|
1501
|
-
({ className, children, ...props }, ref) => /* @__PURE__ */
|
|
2081
|
+
var DrawerTitle = React7.forwardRef(
|
|
2082
|
+
({ className, children, ...props }, ref) => /* @__PURE__ */ jsx15("div", { className: "shrink-0 p-4", children: /* @__PURE__ */ jsx15(
|
|
1502
2083
|
DrawerPrimitive.Title,
|
|
1503
2084
|
{
|
|
1504
2085
|
ref,
|
|
@@ -1510,8 +2091,8 @@ var DrawerTitle = React5.forwardRef(
|
|
|
1510
2091
|
) })
|
|
1511
2092
|
);
|
|
1512
2093
|
DrawerTitle.displayName = "DrawerTitle";
|
|
1513
|
-
var DrawerBody =
|
|
1514
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
2094
|
+
var DrawerBody = React7.forwardRef(
|
|
2095
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
|
|
1515
2096
|
"div",
|
|
1516
2097
|
{
|
|
1517
2098
|
ref,
|
|
@@ -1525,7 +2106,7 @@ var DrawerBody = React5.forwardRef(
|
|
|
1525
2106
|
)
|
|
1526
2107
|
);
|
|
1527
2108
|
DrawerBody.displayName = "DrawerBody";
|
|
1528
|
-
var DrawerDescription =
|
|
2109
|
+
var DrawerDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
|
|
1529
2110
|
DrawerPrimitive.Description,
|
|
1530
2111
|
{
|
|
1531
2112
|
ref,
|
|
@@ -1535,8 +2116,8 @@ var DrawerDescription = React5.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
1535
2116
|
}
|
|
1536
2117
|
));
|
|
1537
2118
|
DrawerDescription.displayName = "DrawerDescription";
|
|
1538
|
-
var DrawerFooter =
|
|
1539
|
-
({ className, ...props }, ref) => /* @__PURE__ */
|
|
2119
|
+
var DrawerFooter = React7.forwardRef(
|
|
2120
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsx15(
|
|
1540
2121
|
"div",
|
|
1541
2122
|
{
|
|
1542
2123
|
ref,
|
|
@@ -1554,9 +2135,9 @@ DrawerFooter.displayName = "DrawerFooter";
|
|
|
1554
2135
|
// src/components/ui/breadcrumb.tsx
|
|
1555
2136
|
import { mergeProps as mergeProps2 } from "@base-ui/react/merge-props";
|
|
1556
2137
|
import { useRender as useRender2 } from "@base-ui/react/use-render";
|
|
1557
|
-
import { jsx as
|
|
2138
|
+
import { jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1558
2139
|
function Breadcrumb({ className, ref, ...props }) {
|
|
1559
|
-
return /* @__PURE__ */
|
|
2140
|
+
return /* @__PURE__ */ jsx16(
|
|
1560
2141
|
"nav",
|
|
1561
2142
|
{
|
|
1562
2143
|
"aria-label": "breadcrumb",
|
|
@@ -1568,7 +2149,7 @@ function Breadcrumb({ className, ref, ...props }) {
|
|
|
1568
2149
|
);
|
|
1569
2150
|
}
|
|
1570
2151
|
function BreadcrumbList({ className, ref, ...props }) {
|
|
1571
|
-
return /* @__PURE__ */
|
|
2152
|
+
return /* @__PURE__ */ jsx16(
|
|
1572
2153
|
"ol",
|
|
1573
2154
|
{
|
|
1574
2155
|
"data-slot": "breadcrumb-list",
|
|
@@ -1582,7 +2163,7 @@ function BreadcrumbList({ className, ref, ...props }) {
|
|
|
1582
2163
|
);
|
|
1583
2164
|
}
|
|
1584
2165
|
function BreadcrumbItem({ className, ref, ...props }) {
|
|
1585
|
-
return /* @__PURE__ */
|
|
2166
|
+
return /* @__PURE__ */ jsx16(
|
|
1586
2167
|
"li",
|
|
1587
2168
|
{
|
|
1588
2169
|
"data-slot": "breadcrumb-item",
|
|
@@ -1614,7 +2195,7 @@ function BreadcrumbLink({
|
|
|
1614
2195
|
});
|
|
1615
2196
|
}
|
|
1616
2197
|
function BreadcrumbPage({ className, ref, ...props }) {
|
|
1617
|
-
return /* @__PURE__ */
|
|
2198
|
+
return /* @__PURE__ */ jsx16(
|
|
1618
2199
|
"span",
|
|
1619
2200
|
{
|
|
1620
2201
|
"data-slot": "breadcrumb-page",
|
|
@@ -1633,7 +2214,7 @@ function BreadcrumbSeparator({
|
|
|
1633
2214
|
ref,
|
|
1634
2215
|
...props
|
|
1635
2216
|
}) {
|
|
1636
|
-
return /* @__PURE__ */
|
|
2217
|
+
return /* @__PURE__ */ jsx16(
|
|
1637
2218
|
"li",
|
|
1638
2219
|
{
|
|
1639
2220
|
"data-slot": "breadcrumb-separator",
|
|
@@ -1642,7 +2223,7 @@ function BreadcrumbSeparator({
|
|
|
1642
2223
|
className: cn("[&>svg]:size-3.5", className),
|
|
1643
2224
|
ref,
|
|
1644
2225
|
...props,
|
|
1645
|
-
children: children ?? /* @__PURE__ */
|
|
2226
|
+
children: children ?? /* @__PURE__ */ jsx16(CaretRightIcon, { className: "text-current cn-rtl-flip" })
|
|
1646
2227
|
}
|
|
1647
2228
|
);
|
|
1648
2229
|
}
|
|
@@ -1651,7 +2232,7 @@ function BreadcrumbEllipsis({
|
|
|
1651
2232
|
ref,
|
|
1652
2233
|
...props
|
|
1653
2234
|
}) {
|
|
1654
|
-
return /* @__PURE__ */
|
|
2235
|
+
return /* @__PURE__ */ jsxs8(
|
|
1655
2236
|
"span",
|
|
1656
2237
|
{
|
|
1657
2238
|
"data-slot": "breadcrumb-ellipsis",
|
|
@@ -1664,8 +2245,8 @@ function BreadcrumbEllipsis({
|
|
|
1664
2245
|
ref,
|
|
1665
2246
|
...props,
|
|
1666
2247
|
children: [
|
|
1667
|
-
/* @__PURE__ */
|
|
1668
|
-
/* @__PURE__ */
|
|
2248
|
+
/* @__PURE__ */ jsx16(MoreMenuIcon, { className: "text-current" }),
|
|
2249
|
+
/* @__PURE__ */ jsx16("span", { className: "sr-only", children: "More" })
|
|
1669
2250
|
]
|
|
1670
2251
|
}
|
|
1671
2252
|
);
|
|
@@ -1673,18 +2254,18 @@ function BreadcrumbEllipsis({
|
|
|
1673
2254
|
|
|
1674
2255
|
// src/components/ui/tooltip.tsx
|
|
1675
2256
|
import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
|
|
1676
|
-
import { jsx as
|
|
2257
|
+
import { jsx as jsx17, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1677
2258
|
function TooltipProvider({
|
|
1678
2259
|
delay = 0,
|
|
1679
2260
|
...props
|
|
1680
2261
|
}) {
|
|
1681
|
-
return /* @__PURE__ */
|
|
2262
|
+
return /* @__PURE__ */ jsx17(TooltipPrimitive.Provider, { delay, ...props });
|
|
1682
2263
|
}
|
|
1683
2264
|
function Tooltip({ ...props }) {
|
|
1684
|
-
return /* @__PURE__ */
|
|
2265
|
+
return /* @__PURE__ */ jsx17(TooltipPrimitive.Root, { ...props });
|
|
1685
2266
|
}
|
|
1686
2267
|
function TooltipTrigger({ ...props }) {
|
|
1687
|
-
return /* @__PURE__ */
|
|
2268
|
+
return /* @__PURE__ */ jsx17(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
1688
2269
|
}
|
|
1689
2270
|
function TooltipContent({
|
|
1690
2271
|
className,
|
|
@@ -1695,7 +2276,7 @@ function TooltipContent({
|
|
|
1695
2276
|
children,
|
|
1696
2277
|
...props
|
|
1697
2278
|
}) {
|
|
1698
|
-
return /* @__PURE__ */
|
|
2279
|
+
return /* @__PURE__ */ jsx17(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx17(
|
|
1699
2280
|
TooltipPrimitive.Positioner,
|
|
1700
2281
|
{
|
|
1701
2282
|
align,
|
|
@@ -1703,7 +2284,7 @@ function TooltipContent({
|
|
|
1703
2284
|
side,
|
|
1704
2285
|
sideOffset,
|
|
1705
2286
|
className: "isolate z-50",
|
|
1706
|
-
children: /* @__PURE__ */
|
|
2287
|
+
children: /* @__PURE__ */ jsxs9(
|
|
1707
2288
|
TooltipPrimitive.Popup,
|
|
1708
2289
|
{
|
|
1709
2290
|
"data-slot": "tooltip-content",
|
|
@@ -1727,7 +2308,7 @@ function TooltipContent({
|
|
|
1727
2308
|
...props,
|
|
1728
2309
|
children: [
|
|
1729
2310
|
children,
|
|
1730
|
-
/* @__PURE__ */
|
|
2311
|
+
/* @__PURE__ */ jsx17(
|
|
1731
2312
|
TooltipPrimitive.Arrow,
|
|
1732
2313
|
{
|
|
1733
2314
|
className: cn(
|
|
@@ -1752,14 +2333,281 @@ function TooltipContent({
|
|
|
1752
2333
|
) });
|
|
1753
2334
|
}
|
|
1754
2335
|
|
|
2336
|
+
// src/components/ui/toast.tsx
|
|
2337
|
+
import { Toast as ToastPrimitive } from "@base-ui/react/toast";
|
|
2338
|
+
import { jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
2339
|
+
var toastManager = ToastPrimitive.createToastManager();
|
|
2340
|
+
function emit(manager, type, title, options = {}) {
|
|
2341
|
+
const { description, duration, priority, action, id } = options;
|
|
2342
|
+
return manager.add({
|
|
2343
|
+
id,
|
|
2344
|
+
title,
|
|
2345
|
+
description,
|
|
2346
|
+
type,
|
|
2347
|
+
timeout: duration,
|
|
2348
|
+
priority: priority ?? (type === "error" ? "high" : "low"),
|
|
2349
|
+
actionProps: action ? { children: action.label, onClick: action.onClick } : void 0
|
|
2350
|
+
});
|
|
2351
|
+
}
|
|
2352
|
+
function makeToast(manager) {
|
|
2353
|
+
function base(title, options) {
|
|
2354
|
+
return emit(manager, "default", title, options);
|
|
2355
|
+
}
|
|
2356
|
+
return Object.assign(base, {
|
|
2357
|
+
success: (title, options) => emit(manager, "success", title, options),
|
|
2358
|
+
error: (title, options) => emit(manager, "error", title, options),
|
|
2359
|
+
info: (title, options) => emit(manager, "info", title, options),
|
|
2360
|
+
warning: (title, options) => emit(manager, "warning", title, options),
|
|
2361
|
+
/** Resolve/reject a promise into loading → success/error toasts. */
|
|
2362
|
+
promise: manager.promise,
|
|
2363
|
+
/** Dismiss a specific toast by id. */
|
|
2364
|
+
dismiss: (id) => manager.close(id),
|
|
2365
|
+
/** Imperatively update an existing toast. */
|
|
2366
|
+
update: manager.update
|
|
2367
|
+
});
|
|
2368
|
+
}
|
|
2369
|
+
var toast = makeToast(toastManager);
|
|
2370
|
+
var TYPE_ICON = {
|
|
2371
|
+
default: null,
|
|
2372
|
+
success: CheckmarkIcon,
|
|
2373
|
+
error: ExclamationIcon,
|
|
2374
|
+
info: InformationIcon,
|
|
2375
|
+
warning: WarningIcon
|
|
2376
|
+
};
|
|
2377
|
+
var TYPE_ICON_COLOR = {
|
|
2378
|
+
default: "",
|
|
2379
|
+
success: "text-success",
|
|
2380
|
+
error: "text-error",
|
|
2381
|
+
info: "text-info",
|
|
2382
|
+
warning: "text-warning"
|
|
2383
|
+
};
|
|
2384
|
+
var TYPE_SURFACE = {
|
|
2385
|
+
default: "surface-default border-default",
|
|
2386
|
+
success: "surface-success border-success",
|
|
2387
|
+
error: "surface-error border-error",
|
|
2388
|
+
info: "surface-info border-info",
|
|
2389
|
+
warning: "surface-warning border-warning"
|
|
2390
|
+
};
|
|
2391
|
+
var VIEWPORT_POSITION = {
|
|
2392
|
+
"top-left": "top-4 left-4 sm:top-8 sm:left-8",
|
|
2393
|
+
"top-center": "top-4 left-1/2 -translate-x-1/2 sm:top-8",
|
|
2394
|
+
"top-right": "top-4 right-4 sm:top-8 sm:right-8",
|
|
2395
|
+
"bottom-left": "bottom-4 left-4 sm:bottom-8 sm:left-8",
|
|
2396
|
+
"bottom-center": "bottom-4 left-1/2 -translate-x-1/2 sm:bottom-8",
|
|
2397
|
+
"bottom-right": "bottom-4 right-4 sm:bottom-8 sm:right-8"
|
|
2398
|
+
};
|
|
2399
|
+
function ToastList({ side }) {
|
|
2400
|
+
const { toasts } = ToastPrimitive.useToastManager();
|
|
2401
|
+
return toasts.map((item) => {
|
|
2402
|
+
const rawType = item.type;
|
|
2403
|
+
const type = rawType in TYPE_SURFACE ? rawType : "default";
|
|
2404
|
+
const Icon = TYPE_ICON[type] ?? null;
|
|
2405
|
+
return /* @__PURE__ */ jsx18(
|
|
2406
|
+
ToastPrimitive.Root,
|
|
2407
|
+
{
|
|
2408
|
+
toast: item,
|
|
2409
|
+
"data-slot": "toast",
|
|
2410
|
+
swipeDirection: side === "top" ? ["up", "right"] : ["down", "right"],
|
|
2411
|
+
style: { "--y-dir": side === "top" ? 1 : -1 },
|
|
2412
|
+
className: cn(
|
|
2413
|
+
// Stacking math (CSS variables provided by Base UI)
|
|
2414
|
+
"[--gap:0.75rem] [--peek:0.625rem]",
|
|
2415
|
+
"[--scale:calc(max(0,1-(var(--toast-index)*0.06)))] [--shrink:calc(1-var(--scale))]",
|
|
2416
|
+
"[--height:var(--toast-frontmost-height,var(--toast-height))]",
|
|
2417
|
+
"[--offset-y:calc((var(--toast-offset-y)*var(--y-dir))+(var(--toast-index)*var(--gap)*var(--y-dir))+var(--toast-swipe-movement-y))]",
|
|
2418
|
+
// Layout — anchored to the viewport edge, full width, stacked by z-index
|
|
2419
|
+
"absolute left-auto right-0 mr-0 w-full",
|
|
2420
|
+
"z-[calc(1000-var(--toast-index))] h-[var(--height)] data-expanded:h-[var(--toast-height)]",
|
|
2421
|
+
side === "top" ? "top-0 origin-top" : "bottom-0 origin-bottom",
|
|
2422
|
+
// Surface — variant-tinted to match the Alert component (default = neutral)
|
|
2423
|
+
TYPE_SURFACE[type],
|
|
2424
|
+
"rounded-lg border bg-clip-padding shadow-lg select-none",
|
|
2425
|
+
// Collapsed transform: peek + shrink each toast behind the front one
|
|
2426
|
+
"[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+(var(--y-dir)*((var(--toast-index)*var(--peek))+(var(--shrink)*var(--height))))))_scale(var(--scale))]",
|
|
2427
|
+
// Expanded (hover/focus) transform: fan out by real heights + gap
|
|
2428
|
+
"data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]",
|
|
2429
|
+
// Enter / exit
|
|
2430
|
+
"data-starting-style:[transform:translateY(calc(var(--y-dir)*-150%))]",
|
|
2431
|
+
"data-ending-style:opacity-0 data-limited:opacity-0",
|
|
2432
|
+
"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(calc(var(--y-dir)*-150%))]",
|
|
2433
|
+
// Swipe-to-dismiss exits
|
|
2434
|
+
"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]",
|
|
2435
|
+
"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",
|
|
2436
|
+
"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]",
|
|
2437
|
+
"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]",
|
|
2438
|
+
// Invisible spacer keeps the hover target contiguous across the gap
|
|
2439
|
+
"after:absolute after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']",
|
|
2440
|
+
side === "top" ? "after:top-full" : "after:bottom-full",
|
|
2441
|
+
// Motion
|
|
2442
|
+
"[transition:transform_0.5s_cubic-bezier(0.22,1,0.36,1),opacity_0.4s,height_0.15s]"
|
|
2443
|
+
),
|
|
2444
|
+
children: /* @__PURE__ */ jsxs10(
|
|
2445
|
+
ToastPrimitive.Content,
|
|
2446
|
+
{
|
|
2447
|
+
"data-slot": "toast-content",
|
|
2448
|
+
className: cn(
|
|
2449
|
+
"flex h-full items-start gap-3 p-4 overflow-hidden",
|
|
2450
|
+
"transition-opacity duration-[250ms] ease-[cubic-bezier(0.22,1,0.36,1)]",
|
|
2451
|
+
"data-behind:opacity-0 data-expanded:opacity-100"
|
|
2452
|
+
),
|
|
2453
|
+
children: [
|
|
2454
|
+
Icon ? /* @__PURE__ */ jsx18(
|
|
2455
|
+
Icon,
|
|
2456
|
+
{
|
|
2457
|
+
className: cn("mt-0.5 size-4 shrink-0", TYPE_ICON_COLOR[type])
|
|
2458
|
+
}
|
|
2459
|
+
) : null,
|
|
2460
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
2461
|
+
/* @__PURE__ */ jsx18(
|
|
2462
|
+
ToastPrimitive.Title,
|
|
2463
|
+
{
|
|
2464
|
+
"data-slot": "toast-title",
|
|
2465
|
+
className: "type-body-sm-medium text-default"
|
|
2466
|
+
}
|
|
2467
|
+
),
|
|
2468
|
+
/* @__PURE__ */ jsx18(
|
|
2469
|
+
ToastPrimitive.Description,
|
|
2470
|
+
{
|
|
2471
|
+
"data-slot": "toast-description",
|
|
2472
|
+
className: "type-body-sm-regular text-secondary"
|
|
2473
|
+
}
|
|
2474
|
+
)
|
|
2475
|
+
] }),
|
|
2476
|
+
item.actionProps ? /* @__PURE__ */ jsx18(
|
|
2477
|
+
ToastPrimitive.Action,
|
|
2478
|
+
{
|
|
2479
|
+
"data-slot": "toast-action",
|
|
2480
|
+
className: cn(
|
|
2481
|
+
"shrink-0 rounded-md border border-default px-2.5 py-1",
|
|
2482
|
+
"type-label-xs-medium text-default surface-default",
|
|
2483
|
+
"transition-colors hover:surface-secondary",
|
|
2484
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-default"
|
|
2485
|
+
)
|
|
2486
|
+
}
|
|
2487
|
+
) : null,
|
|
2488
|
+
/* @__PURE__ */ jsx18(
|
|
2489
|
+
ToastPrimitive.Close,
|
|
2490
|
+
{
|
|
2491
|
+
"data-slot": "toast-close",
|
|
2492
|
+
"aria-label": "Dismiss notification",
|
|
2493
|
+
className: cn(
|
|
2494
|
+
"shrink-0 rounded-md p-1 text-secondary",
|
|
2495
|
+
"transition-colors hover:surface-secondary hover:text-default",
|
|
2496
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-default"
|
|
2497
|
+
),
|
|
2498
|
+
children: /* @__PURE__ */ jsx18(CloseIcon, { className: "size-4" })
|
|
2499
|
+
}
|
|
2500
|
+
)
|
|
2501
|
+
]
|
|
2502
|
+
}
|
|
2503
|
+
)
|
|
2504
|
+
},
|
|
2505
|
+
item.id
|
|
2506
|
+
);
|
|
2507
|
+
});
|
|
2508
|
+
}
|
|
2509
|
+
function Toaster({
|
|
2510
|
+
position = "bottom-right",
|
|
2511
|
+
timeout,
|
|
2512
|
+
limit,
|
|
2513
|
+
className,
|
|
2514
|
+
toastManager: manager = toastManager
|
|
2515
|
+
}) {
|
|
2516
|
+
const side = position.startsWith("top") ? "top" : "bottom";
|
|
2517
|
+
return /* @__PURE__ */ jsx18(
|
|
2518
|
+
ToastPrimitive.Provider,
|
|
2519
|
+
{
|
|
2520
|
+
toastManager: manager,
|
|
2521
|
+
timeout,
|
|
2522
|
+
limit,
|
|
2523
|
+
children: /* @__PURE__ */ jsx18(ToastPrimitive.Portal, { children: /* @__PURE__ */ jsx18(
|
|
2524
|
+
ToastPrimitive.Viewport,
|
|
2525
|
+
{
|
|
2526
|
+
"data-slot": "toaster",
|
|
2527
|
+
className: cn(
|
|
2528
|
+
"fixed z-50 mx-auto flex w-[calc(100vw-2rem)] sm:w-[22.5rem]",
|
|
2529
|
+
VIEWPORT_POSITION[position],
|
|
2530
|
+
className
|
|
2531
|
+
),
|
|
2532
|
+
children: /* @__PURE__ */ jsx18(ToastList, { side })
|
|
2533
|
+
}
|
|
2534
|
+
) })
|
|
2535
|
+
}
|
|
2536
|
+
);
|
|
2537
|
+
}
|
|
2538
|
+
function createToaster() {
|
|
2539
|
+
const manager = ToastPrimitive.createToastManager();
|
|
2540
|
+
const scopedToast = makeToast(manager);
|
|
2541
|
+
function ScopedToaster(props) {
|
|
2542
|
+
return /* @__PURE__ */ jsx18(Toaster, { ...props, toastManager: manager });
|
|
2543
|
+
}
|
|
2544
|
+
return { toast: scopedToast, Toaster: ScopedToaster };
|
|
2545
|
+
}
|
|
2546
|
+
|
|
2547
|
+
// src/components/ui/hover-card.tsx
|
|
2548
|
+
import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card";
|
|
2549
|
+
import { jsx as jsx19 } from "react/jsx-runtime";
|
|
2550
|
+
function HoverCard({ ...props }) {
|
|
2551
|
+
return /* @__PURE__ */ jsx19(PreviewCardPrimitive.Root, { ...props });
|
|
2552
|
+
}
|
|
2553
|
+
HoverCard.displayName = "HoverCard";
|
|
2554
|
+
function HoverCardTrigger({ ...props }) {
|
|
2555
|
+
return /* @__PURE__ */ jsx19(PreviewCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props });
|
|
2556
|
+
}
|
|
2557
|
+
HoverCardTrigger.displayName = "HoverCardTrigger";
|
|
2558
|
+
function HoverCardContent({
|
|
2559
|
+
className,
|
|
2560
|
+
side = "bottom",
|
|
2561
|
+
sideOffset = 8,
|
|
2562
|
+
align = "center",
|
|
2563
|
+
alignOffset = 0,
|
|
2564
|
+
...props
|
|
2565
|
+
}) {
|
|
2566
|
+
return /* @__PURE__ */ jsx19(PreviewCardPrimitive.Portal, { children: /* @__PURE__ */ jsx19(
|
|
2567
|
+
PreviewCardPrimitive.Positioner,
|
|
2568
|
+
{
|
|
2569
|
+
align,
|
|
2570
|
+
alignOffset,
|
|
2571
|
+
side,
|
|
2572
|
+
sideOffset,
|
|
2573
|
+
className: "isolate z-50",
|
|
2574
|
+
children: /* @__PURE__ */ jsx19(
|
|
2575
|
+
PreviewCardPrimitive.Popup,
|
|
2576
|
+
{
|
|
2577
|
+
"data-slot": "hover-card-content",
|
|
2578
|
+
className: cn(
|
|
2579
|
+
// Tokens
|
|
2580
|
+
"surface-default border-default text-default",
|
|
2581
|
+
// Layout
|
|
2582
|
+
"flex flex-col items-start w-fit max-w-xs origin-(--transform-origin) rounded-lg border p-4 shadow-md",
|
|
2583
|
+
// Side-based slide-in
|
|
2584
|
+
"data-[side=top]:slide-in-from-bottom-2",
|
|
2585
|
+
"data-[side=bottom]:slide-in-from-top-2",
|
|
2586
|
+
"data-[side=left]:slide-in-from-right-2",
|
|
2587
|
+
"data-[side=right]:slide-in-from-left-2",
|
|
2588
|
+
"data-[side=inline-start]:slide-in-from-right-2",
|
|
2589
|
+
"data-[side=inline-end]:slide-in-from-left-2",
|
|
2590
|
+
// Open / close animations
|
|
2591
|
+
"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
|
|
2592
|
+
"data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
2593
|
+
className
|
|
2594
|
+
),
|
|
2595
|
+
...props
|
|
2596
|
+
}
|
|
2597
|
+
)
|
|
2598
|
+
}
|
|
2599
|
+
) });
|
|
2600
|
+
}
|
|
2601
|
+
HoverCardContent.displayName = "HoverCardContent";
|
|
2602
|
+
|
|
1755
2603
|
// src/components/ui/popover.tsx
|
|
1756
2604
|
import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
|
|
1757
|
-
import { jsx as
|
|
2605
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
1758
2606
|
function Popover({ ...props }) {
|
|
1759
|
-
return /* @__PURE__ */
|
|
2607
|
+
return /* @__PURE__ */ jsx20(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
|
|
1760
2608
|
}
|
|
1761
2609
|
function PopoverTrigger({ ...props }) {
|
|
1762
|
-
return /* @__PURE__ */
|
|
2610
|
+
return /* @__PURE__ */ jsx20(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
1763
2611
|
}
|
|
1764
2612
|
function PopoverContent({
|
|
1765
2613
|
className,
|
|
@@ -1769,7 +2617,7 @@ function PopoverContent({
|
|
|
1769
2617
|
sideOffset = 4,
|
|
1770
2618
|
...props
|
|
1771
2619
|
}) {
|
|
1772
|
-
return /* @__PURE__ */
|
|
2620
|
+
return /* @__PURE__ */ jsx20(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx20(
|
|
1773
2621
|
PopoverPrimitive.Positioner,
|
|
1774
2622
|
{
|
|
1775
2623
|
align,
|
|
@@ -1777,7 +2625,7 @@ function PopoverContent({
|
|
|
1777
2625
|
side,
|
|
1778
2626
|
sideOffset,
|
|
1779
2627
|
className: "isolate z-50",
|
|
1780
|
-
children: /* @__PURE__ */
|
|
2628
|
+
children: /* @__PURE__ */ jsx20(
|
|
1781
2629
|
PopoverPrimitive.Popup,
|
|
1782
2630
|
{
|
|
1783
2631
|
"data-slot": "popover-content",
|
|
@@ -1800,7 +2648,7 @@ function PopoverContent({
|
|
|
1800
2648
|
) });
|
|
1801
2649
|
}
|
|
1802
2650
|
function PopoverHeader({ className, ...props }) {
|
|
1803
|
-
return /* @__PURE__ */
|
|
2651
|
+
return /* @__PURE__ */ jsx20(
|
|
1804
2652
|
"div",
|
|
1805
2653
|
{
|
|
1806
2654
|
"data-slot": "popover-header",
|
|
@@ -1810,7 +2658,7 @@ function PopoverHeader({ className, ...props }) {
|
|
|
1810
2658
|
);
|
|
1811
2659
|
}
|
|
1812
2660
|
function PopoverTitle({ className, ...props }) {
|
|
1813
|
-
return /* @__PURE__ */
|
|
2661
|
+
return /* @__PURE__ */ jsx20(
|
|
1814
2662
|
PopoverPrimitive.Title,
|
|
1815
2663
|
{
|
|
1816
2664
|
"data-slot": "popover-title",
|
|
@@ -1823,7 +2671,7 @@ function PopoverDescription({
|
|
|
1823
2671
|
className,
|
|
1824
2672
|
...props
|
|
1825
2673
|
}) {
|
|
1826
|
-
return /* @__PURE__ */
|
|
2674
|
+
return /* @__PURE__ */ jsx20(
|
|
1827
2675
|
PopoverPrimitive.Description,
|
|
1828
2676
|
{
|
|
1829
2677
|
"data-slot": "popover-description",
|
|
@@ -1834,15 +2682,15 @@ function PopoverDescription({
|
|
|
1834
2682
|
}
|
|
1835
2683
|
|
|
1836
2684
|
// src/components/ui/sidebar.tsx
|
|
1837
|
-
import * as
|
|
1838
|
-
import { jsx as
|
|
2685
|
+
import * as React8 from "react";
|
|
2686
|
+
import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1839
2687
|
var SIDEBAR_CONSTANTS = {
|
|
1840
2688
|
WIDTH: "144px",
|
|
1841
2689
|
WIDTH_ICON: "48px"
|
|
1842
2690
|
};
|
|
1843
|
-
var SidebarContext =
|
|
2691
|
+
var SidebarContext = React8.createContext(null);
|
|
1844
2692
|
function useSidebar() {
|
|
1845
|
-
const context =
|
|
2693
|
+
const context = React8.useContext(SidebarContext);
|
|
1846
2694
|
if (!context) {
|
|
1847
2695
|
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
1848
2696
|
}
|
|
@@ -1858,9 +2706,9 @@ function SidebarProvider({
|
|
|
1858
2706
|
ref,
|
|
1859
2707
|
...props
|
|
1860
2708
|
}) {
|
|
1861
|
-
const [_open, _setOpen] =
|
|
2709
|
+
const [_open, _setOpen] = React8.useState(defaultOpen);
|
|
1862
2710
|
const open = openProp ?? _open;
|
|
1863
|
-
const setOpen =
|
|
2711
|
+
const setOpen = React8.useCallback(
|
|
1864
2712
|
(value) => {
|
|
1865
2713
|
const openState = typeof value === "function" ? value(open) : value;
|
|
1866
2714
|
if (setOpenProp) {
|
|
@@ -1871,11 +2719,11 @@ function SidebarProvider({
|
|
|
1871
2719
|
},
|
|
1872
2720
|
[setOpenProp, open]
|
|
1873
2721
|
);
|
|
1874
|
-
const toggleSidebar =
|
|
2722
|
+
const toggleSidebar = React8.useCallback(() => {
|
|
1875
2723
|
return setOpen((open2) => !open2);
|
|
1876
2724
|
}, [setOpen]);
|
|
1877
2725
|
const state = open ? "expanded" : "collapsed";
|
|
1878
|
-
const contextValue =
|
|
2726
|
+
const contextValue = React8.useMemo(
|
|
1879
2727
|
() => ({
|
|
1880
2728
|
state,
|
|
1881
2729
|
open,
|
|
@@ -1884,7 +2732,7 @@ function SidebarProvider({
|
|
|
1884
2732
|
}),
|
|
1885
2733
|
[state, open, setOpen, toggleSidebar]
|
|
1886
2734
|
);
|
|
1887
|
-
return /* @__PURE__ */
|
|
2735
|
+
return /* @__PURE__ */ jsx21(SidebarContext, { value: contextValue, children: /* @__PURE__ */ jsx21(
|
|
1888
2736
|
"div",
|
|
1889
2737
|
{
|
|
1890
2738
|
style: {
|
|
@@ -1910,7 +2758,7 @@ function Sidebar({
|
|
|
1910
2758
|
...props
|
|
1911
2759
|
}) {
|
|
1912
2760
|
const { state } = useSidebar();
|
|
1913
|
-
return /* @__PURE__ */
|
|
2761
|
+
return /* @__PURE__ */ jsxs11(
|
|
1914
2762
|
"aside",
|
|
1915
2763
|
{
|
|
1916
2764
|
ref,
|
|
@@ -1921,7 +2769,7 @@ function Sidebar({
|
|
|
1921
2769
|
"aria-expanded": state === "expanded",
|
|
1922
2770
|
role: "navigation",
|
|
1923
2771
|
children: [
|
|
1924
|
-
/* @__PURE__ */
|
|
2772
|
+
/* @__PURE__ */ jsx21(
|
|
1925
2773
|
"div",
|
|
1926
2774
|
{
|
|
1927
2775
|
className: cn(
|
|
@@ -1930,14 +2778,14 @@ function Sidebar({
|
|
|
1930
2778
|
)
|
|
1931
2779
|
}
|
|
1932
2780
|
),
|
|
1933
|
-
/* @__PURE__ */
|
|
2781
|
+
/* @__PURE__ */ jsx21(
|
|
1934
2782
|
"div",
|
|
1935
2783
|
{
|
|
1936
2784
|
className: cn(
|
|
1937
2785
|
"fixed inset-y-0 z-10 h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200 ease-linear flex left-0",
|
|
1938
2786
|
"group-data-[collapsible=icon]:w-[var(--sidebar-width-icon)]"
|
|
1939
2787
|
),
|
|
1940
|
-
children: /* @__PURE__ */
|
|
2788
|
+
children: /* @__PURE__ */ jsx21(
|
|
1941
2789
|
"div",
|
|
1942
2790
|
{
|
|
1943
2791
|
"data-sidebar": "sidebar",
|
|
@@ -1956,7 +2804,7 @@ function Sidebar({
|
|
|
1956
2804
|
);
|
|
1957
2805
|
}
|
|
1958
2806
|
function SidebarInset({ className, ref, ...props }) {
|
|
1959
|
-
return /* @__PURE__ */
|
|
2807
|
+
return /* @__PURE__ */ jsx21(
|
|
1960
2808
|
"main",
|
|
1961
2809
|
{
|
|
1962
2810
|
ref,
|
|
@@ -1969,7 +2817,7 @@ function SidebarInset({ className, ref, ...props }) {
|
|
|
1969
2817
|
);
|
|
1970
2818
|
}
|
|
1971
2819
|
function SidebarHeader({ className, ref, ...props }) {
|
|
1972
|
-
return /* @__PURE__ */
|
|
2820
|
+
return /* @__PURE__ */ jsx21(
|
|
1973
2821
|
"div",
|
|
1974
2822
|
{
|
|
1975
2823
|
ref,
|
|
@@ -1984,7 +2832,7 @@ function SidebarHeader({ className, ref, ...props }) {
|
|
|
1984
2832
|
);
|
|
1985
2833
|
}
|
|
1986
2834
|
function SidebarFooter({ className, ref, ...props }) {
|
|
1987
|
-
return /* @__PURE__ */
|
|
2835
|
+
return /* @__PURE__ */ jsx21(
|
|
1988
2836
|
"div",
|
|
1989
2837
|
{
|
|
1990
2838
|
ref,
|
|
@@ -1995,7 +2843,7 @@ function SidebarFooter({ className, ref, ...props }) {
|
|
|
1995
2843
|
);
|
|
1996
2844
|
}
|
|
1997
2845
|
function SidebarContent({ className, ref, ...props }) {
|
|
1998
|
-
return /* @__PURE__ */
|
|
2846
|
+
return /* @__PURE__ */ jsx21(
|
|
1999
2847
|
"div",
|
|
2000
2848
|
{
|
|
2001
2849
|
ref,
|
|
@@ -2009,7 +2857,7 @@ function SidebarContent({ className, ref, ...props }) {
|
|
|
2009
2857
|
);
|
|
2010
2858
|
}
|
|
2011
2859
|
function SidebarGroup({ className, ref, ...props }) {
|
|
2012
|
-
return /* @__PURE__ */
|
|
2860
|
+
return /* @__PURE__ */ jsx21(
|
|
2013
2861
|
"div",
|
|
2014
2862
|
{
|
|
2015
2863
|
ref,
|
|
@@ -2024,7 +2872,7 @@ function SidebarGroupContent({
|
|
|
2024
2872
|
ref,
|
|
2025
2873
|
...props
|
|
2026
2874
|
}) {
|
|
2027
|
-
return /* @__PURE__ */
|
|
2875
|
+
return /* @__PURE__ */ jsx21(
|
|
2028
2876
|
"div",
|
|
2029
2877
|
{
|
|
2030
2878
|
ref,
|
|
@@ -2035,7 +2883,7 @@ function SidebarGroupContent({
|
|
|
2035
2883
|
);
|
|
2036
2884
|
}
|
|
2037
2885
|
function SidebarMenu({ className, ref, ...props }) {
|
|
2038
|
-
return /* @__PURE__ */
|
|
2886
|
+
return /* @__PURE__ */ jsx21(
|
|
2039
2887
|
"ul",
|
|
2040
2888
|
{
|
|
2041
2889
|
ref,
|
|
@@ -2046,7 +2894,7 @@ function SidebarMenu({ className, ref, ...props }) {
|
|
|
2046
2894
|
);
|
|
2047
2895
|
}
|
|
2048
2896
|
function SidebarMenuItem({ className, ref, ...props }) {
|
|
2049
|
-
return /* @__PURE__ */
|
|
2897
|
+
return /* @__PURE__ */ jsx21(
|
|
2050
2898
|
"li",
|
|
2051
2899
|
{
|
|
2052
2900
|
ref,
|
|
@@ -2065,7 +2913,7 @@ function SidebarMenuButton({
|
|
|
2065
2913
|
...props
|
|
2066
2914
|
}) {
|
|
2067
2915
|
const { state } = useSidebar();
|
|
2068
|
-
const button = /* @__PURE__ */
|
|
2916
|
+
const button = /* @__PURE__ */ jsx21(
|
|
2069
2917
|
"button",
|
|
2070
2918
|
{
|
|
2071
2919
|
ref,
|
|
@@ -2084,19 +2932,19 @@ function SidebarMenuButton({
|
|
|
2084
2932
|
return button;
|
|
2085
2933
|
}
|
|
2086
2934
|
const tooltipProps = typeof tooltip === "string" ? { children: tooltip } : tooltip;
|
|
2087
|
-
return /* @__PURE__ */
|
|
2088
|
-
/* @__PURE__ */
|
|
2089
|
-
/* @__PURE__ */
|
|
2935
|
+
return /* @__PURE__ */ jsx21(TooltipProvider, { delay: 0, children: /* @__PURE__ */ jsxs11(Tooltip, { children: [
|
|
2936
|
+
/* @__PURE__ */ jsx21(TooltipTrigger, { render: button }),
|
|
2937
|
+
/* @__PURE__ */ jsx21(TooltipContent, { side: "right", align: "center", ...tooltipProps })
|
|
2090
2938
|
] }) });
|
|
2091
2939
|
}
|
|
2092
2940
|
|
|
2093
2941
|
// src/components/ui/calendar.tsx
|
|
2094
|
-
import * as
|
|
2942
|
+
import * as React9 from "react";
|
|
2095
2943
|
import {
|
|
2096
2944
|
DayPicker,
|
|
2097
2945
|
getDefaultClassNames
|
|
2098
2946
|
} from "react-day-picker";
|
|
2099
|
-
import { jsx as
|
|
2947
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
2100
2948
|
function Calendar({
|
|
2101
2949
|
className,
|
|
2102
2950
|
classNames,
|
|
@@ -2109,7 +2957,7 @@ function Calendar({
|
|
|
2109
2957
|
...props
|
|
2110
2958
|
}) {
|
|
2111
2959
|
const defaultClassNames = getDefaultClassNames();
|
|
2112
|
-
return /* @__PURE__ */
|
|
2960
|
+
return /* @__PURE__ */ jsx22(
|
|
2113
2961
|
DayPicker,
|
|
2114
2962
|
{
|
|
2115
2963
|
showOutsideDays,
|
|
@@ -2212,7 +3060,7 @@ function Calendar({
|
|
|
2212
3060
|
...classNames
|
|
2213
3061
|
},
|
|
2214
3062
|
components: {
|
|
2215
|
-
Root: ({ className: rootClassName, rootRef, ...rootProps }) => /* @__PURE__ */
|
|
3063
|
+
Root: ({ className: rootClassName, rootRef, ...rootProps }) => /* @__PURE__ */ jsx22(
|
|
2216
3064
|
"div",
|
|
2217
3065
|
{
|
|
2218
3066
|
"data-slot": "calendar",
|
|
@@ -2227,7 +3075,7 @@ function Calendar({
|
|
|
2227
3075
|
...chevronProps
|
|
2228
3076
|
}) => {
|
|
2229
3077
|
if (orientation === "left") {
|
|
2230
|
-
return /* @__PURE__ */
|
|
3078
|
+
return /* @__PURE__ */ jsx22(
|
|
2231
3079
|
ArrowLeftIcon,
|
|
2232
3080
|
{
|
|
2233
3081
|
className: cn("size-4", chevronClassName),
|
|
@@ -2236,7 +3084,7 @@ function Calendar({
|
|
|
2236
3084
|
);
|
|
2237
3085
|
}
|
|
2238
3086
|
if (orientation === "right") {
|
|
2239
|
-
return /* @__PURE__ */
|
|
3087
|
+
return /* @__PURE__ */ jsx22(
|
|
2240
3088
|
ArrowRightIcon,
|
|
2241
3089
|
{
|
|
2242
3090
|
className: cn("size-4", chevronClassName),
|
|
@@ -2244,7 +3092,7 @@ function Calendar({
|
|
|
2244
3092
|
}
|
|
2245
3093
|
);
|
|
2246
3094
|
}
|
|
2247
|
-
return /* @__PURE__ */
|
|
3095
|
+
return /* @__PURE__ */ jsx22(
|
|
2248
3096
|
CaretDownIcon,
|
|
2249
3097
|
{
|
|
2250
3098
|
className: cn("size-4", chevronClassName),
|
|
@@ -2252,8 +3100,8 @@ function Calendar({
|
|
|
2252
3100
|
}
|
|
2253
3101
|
);
|
|
2254
3102
|
},
|
|
2255
|
-
DayButton: (dayButtonProps) => /* @__PURE__ */
|
|
2256
|
-
WeekNumber: ({ children, ...weekNumberProps }) => /* @__PURE__ */
|
|
3103
|
+
DayButton: (dayButtonProps) => /* @__PURE__ */ jsx22(CalendarDayButton, { locale, ...dayButtonProps }),
|
|
3104
|
+
WeekNumber: ({ children, ...weekNumberProps }) => /* @__PURE__ */ jsx22("td", { ...weekNumberProps, children: /* @__PURE__ */ jsx22("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }),
|
|
2257
3105
|
...components
|
|
2258
3106
|
},
|
|
2259
3107
|
...props
|
|
@@ -2267,11 +3115,11 @@ function CalendarDayButton({
|
|
|
2267
3115
|
locale,
|
|
2268
3116
|
...props
|
|
2269
3117
|
}) {
|
|
2270
|
-
const ref =
|
|
2271
|
-
|
|
3118
|
+
const ref = React9.useRef(null);
|
|
3119
|
+
React9.useEffect(() => {
|
|
2272
3120
|
if (modifiers.focused) ref.current?.focus();
|
|
2273
3121
|
}, [modifiers.focused]);
|
|
2274
|
-
return /* @__PURE__ */
|
|
3122
|
+
return /* @__PURE__ */ jsx22(
|
|
2275
3123
|
Button,
|
|
2276
3124
|
{
|
|
2277
3125
|
ref,
|
|
@@ -2306,8 +3154,8 @@ Calendar.displayName = "Calendar";
|
|
|
2306
3154
|
CalendarDayButton.displayName = "CalendarDayButton";
|
|
2307
3155
|
|
|
2308
3156
|
// src/components/ui/date-picker.tsx
|
|
2309
|
-
import * as
|
|
2310
|
-
import { jsx as
|
|
3157
|
+
import * as React10 from "react";
|
|
3158
|
+
import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
2311
3159
|
function DatePickerTrigger({
|
|
2312
3160
|
label,
|
|
2313
3161
|
placeholder = "Pick a date",
|
|
@@ -2316,11 +3164,11 @@ function DatePickerTrigger({
|
|
|
2316
3164
|
ref,
|
|
2317
3165
|
...rest
|
|
2318
3166
|
}) {
|
|
2319
|
-
return /* @__PURE__ */
|
|
3167
|
+
return /* @__PURE__ */ jsxs12(
|
|
2320
3168
|
PopoverTrigger,
|
|
2321
3169
|
{
|
|
2322
3170
|
disabled,
|
|
2323
|
-
render: /* @__PURE__ */
|
|
3171
|
+
render: /* @__PURE__ */ jsx23(
|
|
2324
3172
|
"button",
|
|
2325
3173
|
{
|
|
2326
3174
|
ref,
|
|
@@ -2345,7 +3193,7 @@ function DatePickerTrigger({
|
|
|
2345
3193
|
}
|
|
2346
3194
|
),
|
|
2347
3195
|
children: [
|
|
2348
|
-
/* @__PURE__ */
|
|
3196
|
+
/* @__PURE__ */ jsx23(
|
|
2349
3197
|
CalendarIcon,
|
|
2350
3198
|
{
|
|
2351
3199
|
size: 16,
|
|
@@ -2353,7 +3201,7 @@ function DatePickerTrigger({
|
|
|
2353
3201
|
"aria-hidden": "true"
|
|
2354
3202
|
}
|
|
2355
3203
|
),
|
|
2356
|
-
/* @__PURE__ */
|
|
3204
|
+
/* @__PURE__ */ jsx23("span", { className: "truncate", children: label ?? placeholder })
|
|
2357
3205
|
]
|
|
2358
3206
|
}
|
|
2359
3207
|
);
|
|
@@ -2370,8 +3218,8 @@ function DatePicker(props) {
|
|
|
2370
3218
|
className,
|
|
2371
3219
|
ref
|
|
2372
3220
|
} = props;
|
|
2373
|
-
const [date, setDate] =
|
|
2374
|
-
const isControlled =
|
|
3221
|
+
const [date, setDate] = React10.useState(defaultValue);
|
|
3222
|
+
const isControlled = React10.useRef("value" in props).current;
|
|
2375
3223
|
const selected = isControlled ? value : date;
|
|
2376
3224
|
const handleSelect = (day) => {
|
|
2377
3225
|
if (!isControlled) setDate(day);
|
|
@@ -2382,8 +3230,8 @@ function DatePicker(props) {
|
|
|
2382
3230
|
month: "long",
|
|
2383
3231
|
day: "numeric"
|
|
2384
3232
|
}) : null;
|
|
2385
|
-
return /* @__PURE__ */
|
|
2386
|
-
/* @__PURE__ */
|
|
3233
|
+
return /* @__PURE__ */ jsxs12(Popover, { children: [
|
|
3234
|
+
/* @__PURE__ */ jsx23(
|
|
2387
3235
|
DatePickerTrigger,
|
|
2388
3236
|
{
|
|
2389
3237
|
ref,
|
|
@@ -2393,7 +3241,7 @@ function DatePicker(props) {
|
|
|
2393
3241
|
className
|
|
2394
3242
|
}
|
|
2395
3243
|
),
|
|
2396
|
-
/* @__PURE__ */
|
|
3244
|
+
/* @__PURE__ */ jsx23(PopoverContent, { className: "w-auto p-0", align: "center", children: /* @__PURE__ */ jsx23(
|
|
2397
3245
|
Calendar,
|
|
2398
3246
|
{
|
|
2399
3247
|
mode: "single",
|
|
@@ -2412,11 +3260,11 @@ function DatePicker(props) {
|
|
|
2412
3260
|
}
|
|
2413
3261
|
|
|
2414
3262
|
// src/components/ui/upload.tsx
|
|
2415
|
-
import * as
|
|
2416
|
-
import { cva as
|
|
2417
|
-
import { jsx as
|
|
3263
|
+
import * as React11 from "react";
|
|
3264
|
+
import { cva as cva10 } from "class-variance-authority";
|
|
3265
|
+
import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2418
3266
|
var DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
2419
|
-
var uploadVariants =
|
|
3267
|
+
var uploadVariants = cva10(
|
|
2420
3268
|
"relative flex flex-col items-center justify-center rounded-lg transition-all duration-200 ease-in-out overflow-hidden w-full p-16 min-h-[200px]",
|
|
2421
3269
|
{
|
|
2422
3270
|
variants: {
|
|
@@ -2451,8 +3299,8 @@ function Upload({
|
|
|
2451
3299
|
ref,
|
|
2452
3300
|
...props
|
|
2453
3301
|
}) {
|
|
2454
|
-
const fileInputRef =
|
|
2455
|
-
const [isDragOver, setIsDragOver] =
|
|
3302
|
+
const fileInputRef = React11.useRef(null);
|
|
3303
|
+
const [isDragOver, setIsDragOver] = React11.useState(false);
|
|
2456
3304
|
const getFileTypeDisplay = () => {
|
|
2457
3305
|
const typeMap = {
|
|
2458
3306
|
"application/pdf": "PDF",
|
|
@@ -2516,17 +3364,17 @@ function Upload({
|
|
|
2516
3364
|
const renderContent = () => {
|
|
2517
3365
|
switch (effectiveState) {
|
|
2518
3366
|
case "error":
|
|
2519
|
-
return /* @__PURE__ */
|
|
3367
|
+
return /* @__PURE__ */ jsxs13(
|
|
2520
3368
|
"div",
|
|
2521
3369
|
{
|
|
2522
3370
|
className: "flex flex-col items-center text-center max-w-[289px]",
|
|
2523
3371
|
style: { gap: "32px" },
|
|
2524
3372
|
children: [
|
|
2525
|
-
/* @__PURE__ */
|
|
2526
|
-
/* @__PURE__ */
|
|
2527
|
-
/* @__PURE__ */
|
|
3373
|
+
/* @__PURE__ */ jsxs13("div", { className: "space-y-4", children: [
|
|
3374
|
+
/* @__PURE__ */ jsx24(Text, { variant: "h5", children: "Upload fail" }),
|
|
3375
|
+
/* @__PURE__ */ jsx24(Text, { variant: "body-md", className: "text-error", children: errorMessage })
|
|
2528
3376
|
] }),
|
|
2529
|
-
/* @__PURE__ */
|
|
3377
|
+
/* @__PURE__ */ jsx24(
|
|
2530
3378
|
Button,
|
|
2531
3379
|
{
|
|
2532
3380
|
variant: "destructive",
|
|
@@ -2540,22 +3388,22 @@ function Upload({
|
|
|
2540
3388
|
}
|
|
2541
3389
|
);
|
|
2542
3390
|
case "uploading":
|
|
2543
|
-
return /* @__PURE__ */
|
|
3391
|
+
return /* @__PURE__ */ jsxs13(
|
|
2544
3392
|
"div",
|
|
2545
3393
|
{
|
|
2546
3394
|
className: "flex flex-col items-center text-center max-w-[289px]",
|
|
2547
3395
|
style: { gap: "32px" },
|
|
2548
3396
|
children: [
|
|
2549
|
-
/* @__PURE__ */
|
|
2550
|
-
/* @__PURE__ */
|
|
2551
|
-
/* @__PURE__ */
|
|
3397
|
+
/* @__PURE__ */ jsx24(Text, { variant: "h5", className: "text-default", children: "Uploading files" }),
|
|
3398
|
+
/* @__PURE__ */ jsxs13("div", { className: "w-full max-w-[720px] space-y-2", children: [
|
|
3399
|
+
/* @__PURE__ */ jsx24("div", { className: "w-full surface-secondary rounded-full h-2", children: /* @__PURE__ */ jsx24(
|
|
2552
3400
|
"div",
|
|
2553
3401
|
{
|
|
2554
3402
|
className: "interactive-accent h-2 rounded-full transition-all duration-300 ease-in-out",
|
|
2555
3403
|
style: { width: `${progress}%` }
|
|
2556
3404
|
}
|
|
2557
3405
|
) }),
|
|
2558
|
-
/* @__PURE__ */
|
|
3406
|
+
/* @__PURE__ */ jsxs13(Text, { variant: "body-sm", className: "text-secondary text-center", children: [
|
|
2559
3407
|
Math.round(progress),
|
|
2560
3408
|
"% complete"
|
|
2561
3409
|
] })
|
|
@@ -2564,29 +3412,29 @@ function Upload({
|
|
|
2564
3412
|
}
|
|
2565
3413
|
);
|
|
2566
3414
|
case "success":
|
|
2567
|
-
return /* @__PURE__ */
|
|
3415
|
+
return /* @__PURE__ */ jsx24(
|
|
2568
3416
|
"div",
|
|
2569
3417
|
{
|
|
2570
3418
|
className: "flex flex-col items-center text-center max-w-[289px]",
|
|
2571
3419
|
style: { gap: "32px" },
|
|
2572
|
-
children: /* @__PURE__ */
|
|
2573
|
-
/* @__PURE__ */
|
|
2574
|
-
selectedFiles.length > 0 && /* @__PURE__ */
|
|
3420
|
+
children: /* @__PURE__ */ jsxs13("div", { className: "space-y-4", children: [
|
|
3421
|
+
/* @__PURE__ */ jsx24(Text, { variant: "h5", className: "text-success", children: "Upload successful!" }),
|
|
3422
|
+
selectedFiles.length > 0 && /* @__PURE__ */ jsx24("div", { className: "text-center", children: selectedFiles.map((file, index) => /* @__PURE__ */ jsx24(Text, { variant: "body-sm", children: file.name }, index)) })
|
|
2575
3423
|
] })
|
|
2576
3424
|
}
|
|
2577
3425
|
);
|
|
2578
3426
|
default:
|
|
2579
|
-
return /* @__PURE__ */
|
|
3427
|
+
return /* @__PURE__ */ jsxs13(
|
|
2580
3428
|
"div",
|
|
2581
3429
|
{
|
|
2582
3430
|
className: "flex flex-col items-center text-center max-w-[289px]",
|
|
2583
3431
|
style: { gap: "32px" },
|
|
2584
3432
|
children: [
|
|
2585
|
-
/* @__PURE__ */
|
|
2586
|
-
/* @__PURE__ */
|
|
2587
|
-
/* @__PURE__ */
|
|
3433
|
+
/* @__PURE__ */ jsxs13("div", { className: "space-y-4", children: [
|
|
3434
|
+
/* @__PURE__ */ jsx24(Text, { variant: "h5", className: "text-default", children: "Drag & drop files here" }),
|
|
3435
|
+
/* @__PURE__ */ jsx24(Text, { variant: "body-md", className: "text-secondary", children: "or click to browse from your computer" })
|
|
2588
3436
|
] }),
|
|
2589
|
-
/* @__PURE__ */
|
|
3437
|
+
/* @__PURE__ */ jsx24(
|
|
2590
3438
|
Button,
|
|
2591
3439
|
{
|
|
2592
3440
|
variant: "default",
|
|
@@ -2600,10 +3448,10 @@ function Upload({
|
|
|
2600
3448
|
children: "Choose files"
|
|
2601
3449
|
}
|
|
2602
3450
|
),
|
|
2603
|
-
/* @__PURE__ */
|
|
3451
|
+
/* @__PURE__ */ jsxs13(Text, { variant: "body-sm", className: "text-secondary", children: [
|
|
2604
3452
|
"Supported file: ",
|
|
2605
3453
|
getFileTypeDisplay(),
|
|
2606
|
-
/* @__PURE__ */
|
|
3454
|
+
/* @__PURE__ */ jsx24("br", {}),
|
|
2607
3455
|
"Max: ",
|
|
2608
3456
|
Math.round(maxFileSize / 1024 / 1024),
|
|
2609
3457
|
" MB each"
|
|
@@ -2613,7 +3461,7 @@ function Upload({
|
|
|
2613
3461
|
);
|
|
2614
3462
|
}
|
|
2615
3463
|
};
|
|
2616
|
-
return /* @__PURE__ */
|
|
3464
|
+
return /* @__PURE__ */ jsxs13(
|
|
2617
3465
|
"div",
|
|
2618
3466
|
{
|
|
2619
3467
|
ref,
|
|
@@ -2632,7 +3480,7 @@ function Upload({
|
|
|
2632
3480
|
"aria-disabled": disabled,
|
|
2633
3481
|
...props,
|
|
2634
3482
|
children: [
|
|
2635
|
-
/* @__PURE__ */
|
|
3483
|
+
/* @__PURE__ */ jsx24(
|
|
2636
3484
|
"input",
|
|
2637
3485
|
{
|
|
2638
3486
|
ref: fileInputRef,
|
|
@@ -2651,9 +3499,9 @@ function Upload({
|
|
|
2651
3499
|
|
|
2652
3500
|
// src/components/ui/avatar.tsx
|
|
2653
3501
|
import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
|
|
2654
|
-
import { cva as
|
|
2655
|
-
import { jsx as
|
|
2656
|
-
var avatarVariants =
|
|
3502
|
+
import { cva as cva11 } from "class-variance-authority";
|
|
3503
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
3504
|
+
var avatarVariants = cva11(
|
|
2657
3505
|
"relative flex shrink-0 overflow-hidden select-none",
|
|
2658
3506
|
{
|
|
2659
3507
|
variants: {
|
|
@@ -2681,7 +3529,7 @@ var avatarVariants = cva9(
|
|
|
2681
3529
|
}
|
|
2682
3530
|
);
|
|
2683
3531
|
function Avatar({ className, size, shape, ref, ...props }) {
|
|
2684
|
-
return /* @__PURE__ */
|
|
3532
|
+
return /* @__PURE__ */ jsx25(
|
|
2685
3533
|
AvatarPrimitive.Root,
|
|
2686
3534
|
{
|
|
2687
3535
|
ref,
|
|
@@ -2697,7 +3545,7 @@ function AvatarImage({
|
|
|
2697
3545
|
ref,
|
|
2698
3546
|
...props
|
|
2699
3547
|
}) {
|
|
2700
|
-
return /* @__PURE__ */
|
|
3548
|
+
return /* @__PURE__ */ jsx25(
|
|
2701
3549
|
AvatarPrimitive.Image,
|
|
2702
3550
|
{
|
|
2703
3551
|
ref,
|
|
@@ -2712,7 +3560,7 @@ function AvatarFallback({
|
|
|
2712
3560
|
ref,
|
|
2713
3561
|
...props
|
|
2714
3562
|
}) {
|
|
2715
|
-
return /* @__PURE__ */
|
|
3563
|
+
return /* @__PURE__ */ jsx25(
|
|
2716
3564
|
AvatarPrimitive.Fallback,
|
|
2717
3565
|
{
|
|
2718
3566
|
ref,
|
|
@@ -2737,7 +3585,7 @@ function AvatarGroup({
|
|
|
2737
3585
|
ref,
|
|
2738
3586
|
...props
|
|
2739
3587
|
}) {
|
|
2740
|
-
return /* @__PURE__ */
|
|
3588
|
+
return /* @__PURE__ */ jsx25(
|
|
2741
3589
|
"div",
|
|
2742
3590
|
{
|
|
2743
3591
|
ref,
|
|
@@ -2758,7 +3606,7 @@ function AvatarGroupCount({
|
|
|
2758
3606
|
ref,
|
|
2759
3607
|
...props
|
|
2760
3608
|
}) {
|
|
2761
|
-
return /* @__PURE__ */
|
|
3609
|
+
return /* @__PURE__ */ jsx25(
|
|
2762
3610
|
"div",
|
|
2763
3611
|
{
|
|
2764
3612
|
ref,
|
|
@@ -2780,9 +3628,9 @@ function AvatarGroupCount({
|
|
|
2780
3628
|
|
|
2781
3629
|
// src/components/ui/checkbox.tsx
|
|
2782
3630
|
import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
|
|
2783
|
-
import { cva as
|
|
2784
|
-
import { jsx as
|
|
2785
|
-
var checkboxVariants =
|
|
3631
|
+
import { cva as cva12 } from "class-variance-authority";
|
|
3632
|
+
import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3633
|
+
var checkboxVariants = cva12([
|
|
2786
3634
|
// Base layout & appearance
|
|
2787
3635
|
"peer group relative size-4 shrink-0",
|
|
2788
3636
|
"rounded-xs border border-default surface-default shadow-xs",
|
|
@@ -2807,27 +3655,27 @@ var checkboxVariants = cva10([
|
|
|
2807
3655
|
"[&_svg]:pointer-events-none [&_svg]:shrink-0"
|
|
2808
3656
|
]);
|
|
2809
3657
|
function Checkbox({ className, ref, ...props }) {
|
|
2810
|
-
return /* @__PURE__ */
|
|
3658
|
+
return /* @__PURE__ */ jsx26(
|
|
2811
3659
|
CheckboxPrimitive.Root,
|
|
2812
3660
|
{
|
|
2813
3661
|
"data-slot": "checkbox",
|
|
2814
3662
|
ref,
|
|
2815
3663
|
className: cn(checkboxVariants(), className),
|
|
2816
3664
|
...props,
|
|
2817
|
-
children: /* @__PURE__ */
|
|
3665
|
+
children: /* @__PURE__ */ jsxs14(
|
|
2818
3666
|
CheckboxPrimitive.Indicator,
|
|
2819
3667
|
{
|
|
2820
3668
|
"data-slot": "checkbox-indicator",
|
|
2821
3669
|
className: "absolute inset-0 flex items-center justify-center text-current",
|
|
2822
3670
|
children: [
|
|
2823
|
-
/* @__PURE__ */
|
|
3671
|
+
/* @__PURE__ */ jsx26(
|
|
2824
3672
|
CheckmarkIcon,
|
|
2825
3673
|
{
|
|
2826
3674
|
size: 14,
|
|
2827
3675
|
className: "text-current hidden group-data-[checked]:block"
|
|
2828
3676
|
}
|
|
2829
3677
|
),
|
|
2830
|
-
/* @__PURE__ */
|
|
3678
|
+
/* @__PURE__ */ jsx26(
|
|
2831
3679
|
MinusIcon,
|
|
2832
3680
|
{
|
|
2833
3681
|
size: 14,
|
|
@@ -2841,11 +3689,143 @@ function Checkbox({ className, ref, ...props }) {
|
|
|
2841
3689
|
);
|
|
2842
3690
|
}
|
|
2843
3691
|
|
|
3692
|
+
// src/components/ui/radio-group.tsx
|
|
3693
|
+
import * as React12 from "react";
|
|
3694
|
+
import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
|
|
3695
|
+
import { Radio as RadioPrimitive } from "@base-ui/react/radio";
|
|
3696
|
+
import { cva as cva13 } from "class-variance-authority";
|
|
3697
|
+
import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3698
|
+
var radioGroupVariants = cva13("flex", {
|
|
3699
|
+
variants: {
|
|
3700
|
+
orientation: {
|
|
3701
|
+
vertical: "flex-col gap-2",
|
|
3702
|
+
horizontal: "flex-row flex-wrap gap-4"
|
|
3703
|
+
},
|
|
3704
|
+
layout: {
|
|
3705
|
+
// Items shrink-wrap their content
|
|
3706
|
+
inline: "",
|
|
3707
|
+
// Items stretch to fill the container; labels take remaining space.
|
|
3708
|
+
// Requires each item to be wrapped in a single element:
|
|
3709
|
+
// RadioGroup > div > (RadioGroupItem + label)
|
|
3710
|
+
// Using RadioGroupCard satisfies this automatically.
|
|
3711
|
+
// Extra wrapper elements (Fragment, nested divs) will silently break this layout.
|
|
3712
|
+
block: "[&>*>label]:flex-1 [&>*>label]:min-w-0"
|
|
3713
|
+
}
|
|
3714
|
+
},
|
|
3715
|
+
compoundVariants: [
|
|
3716
|
+
// vertical + block: each item spans full container width
|
|
3717
|
+
{ orientation: "vertical", layout: "block", class: "[&>*]:w-full" },
|
|
3718
|
+
// horizontal + block: items share the row equally
|
|
3719
|
+
{ orientation: "horizontal", layout: "block", class: "[&>*]:flex-1" }
|
|
3720
|
+
],
|
|
3721
|
+
defaultVariants: {
|
|
3722
|
+
orientation: "vertical",
|
|
3723
|
+
layout: "inline"
|
|
3724
|
+
}
|
|
3725
|
+
});
|
|
3726
|
+
var radioItemVariants = cva13([
|
|
3727
|
+
// Base layout & appearance
|
|
3728
|
+
"peer group inline-flex relative size-4 shrink-0",
|
|
3729
|
+
"rounded-full border border-default surface-default shadow-xs",
|
|
3730
|
+
// Transitions & hover
|
|
3731
|
+
"transition-colors hover:interactive-hover",
|
|
3732
|
+
// Focus
|
|
3733
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-default",
|
|
3734
|
+
// Disabled — checked items are slightly more opaque per design
|
|
3735
|
+
"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50",
|
|
3736
|
+
"data-[disabled]:data-[checked]:opacity-30",
|
|
3737
|
+
// Error (aria-invalid)
|
|
3738
|
+
"aria-invalid:border-error",
|
|
3739
|
+
"aria-invalid:focus-visible:ring-3 aria-invalid:focus-visible:ring-focus-error"
|
|
3740
|
+
]);
|
|
3741
|
+
function RadioGroup({
|
|
3742
|
+
className,
|
|
3743
|
+
orientation,
|
|
3744
|
+
layout,
|
|
3745
|
+
...props
|
|
3746
|
+
}) {
|
|
3747
|
+
return /* @__PURE__ */ jsx27(
|
|
3748
|
+
RadioGroupPrimitive,
|
|
3749
|
+
{
|
|
3750
|
+
"data-slot": "radio-group",
|
|
3751
|
+
className: cn(radioGroupVariants({ orientation, layout }), className),
|
|
3752
|
+
...props
|
|
3753
|
+
}
|
|
3754
|
+
);
|
|
3755
|
+
}
|
|
3756
|
+
function RadioGroupItem({ className, ...props }) {
|
|
3757
|
+
return /* @__PURE__ */ jsx27(
|
|
3758
|
+
RadioPrimitive.Root,
|
|
3759
|
+
{
|
|
3760
|
+
"data-slot": "radio-group-item",
|
|
3761
|
+
className: cn(radioItemVariants(), className),
|
|
3762
|
+
...props,
|
|
3763
|
+
children: /* @__PURE__ */ jsx27(
|
|
3764
|
+
RadioPrimitive.Indicator,
|
|
3765
|
+
{
|
|
3766
|
+
"data-slot": "radio-group-indicator",
|
|
3767
|
+
className: "absolute inset-0 flex items-center justify-center",
|
|
3768
|
+
children: /* @__PURE__ */ jsx27("span", { className: "size-2 rounded-full interactive-accent group-aria-invalid:interactive-destructive" })
|
|
3769
|
+
}
|
|
3770
|
+
)
|
|
3771
|
+
}
|
|
3772
|
+
);
|
|
3773
|
+
}
|
|
3774
|
+
function RadioGroupCard({
|
|
3775
|
+
className,
|
|
3776
|
+
label,
|
|
3777
|
+
description,
|
|
3778
|
+
flipped = false,
|
|
3779
|
+
id,
|
|
3780
|
+
ref,
|
|
3781
|
+
...props
|
|
3782
|
+
}) {
|
|
3783
|
+
const generatedId = React12.useId();
|
|
3784
|
+
const itemId = id ?? generatedId;
|
|
3785
|
+
return /* @__PURE__ */ jsxs15(
|
|
3786
|
+
"label",
|
|
3787
|
+
{
|
|
3788
|
+
ref,
|
|
3789
|
+
"data-slot": "radio-group-card",
|
|
3790
|
+
"data-disabled": props.disabled ? "" : void 0,
|
|
3791
|
+
className: cn(
|
|
3792
|
+
"flex items-start gap-3 p-3 border border-default surface-default rounded-md cursor-pointer w-full",
|
|
3793
|
+
"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50",
|
|
3794
|
+
className
|
|
3795
|
+
),
|
|
3796
|
+
children: [
|
|
3797
|
+
!flipped && // data-[disabled]:opacity-100 cancels the item-level opacity since
|
|
3798
|
+
// the card wrapper already applies opacity-50 for the whole card.
|
|
3799
|
+
/* @__PURE__ */ jsx27(
|
|
3800
|
+
RadioGroupItem,
|
|
3801
|
+
{
|
|
3802
|
+
id: itemId,
|
|
3803
|
+
className: "mt-[2.5px] data-[disabled]:opacity-100",
|
|
3804
|
+
...props
|
|
3805
|
+
}
|
|
3806
|
+
),
|
|
3807
|
+
/* @__PURE__ */ jsxs15("div", { className: "flex flex-col gap-1.5 min-w-0 flex-1", children: [
|
|
3808
|
+
/* @__PURE__ */ jsx27("span", { className: "type-body-sm-medium text-default", children: label }),
|
|
3809
|
+
description && /* @__PURE__ */ jsx27("span", { className: "type-body-xs-regular text-secondary", children: description })
|
|
3810
|
+
] }),
|
|
3811
|
+
flipped && /* @__PURE__ */ jsx27(
|
|
3812
|
+
RadioGroupItem,
|
|
3813
|
+
{
|
|
3814
|
+
id: itemId,
|
|
3815
|
+
className: "mt-[2.5px] data-[disabled]:opacity-100",
|
|
3816
|
+
...props
|
|
3817
|
+
}
|
|
3818
|
+
)
|
|
3819
|
+
]
|
|
3820
|
+
}
|
|
3821
|
+
);
|
|
3822
|
+
}
|
|
3823
|
+
|
|
2844
3824
|
// src/components/ui/switch.tsx
|
|
2845
3825
|
import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
|
|
2846
|
-
import { cva as
|
|
2847
|
-
import { jsx as
|
|
2848
|
-
var switchVariants =
|
|
3826
|
+
import { cva as cva14 } from "class-variance-authority";
|
|
3827
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
3828
|
+
var switchVariants = cva14(
|
|
2849
3829
|
"peer inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 relative focus-visible:ring-3 focus-visible:ring-focus-default aria-invalid:border-error aria-invalid:ring-3 aria-invalid:ring-focus-error data-checked:interactive-accent data-unchecked:interactive-secondary data-unchecked:border-default data-disabled:cursor-not-allowed data-disabled:opacity-50",
|
|
2850
3830
|
{
|
|
2851
3831
|
variants: {
|
|
@@ -2859,7 +3839,7 @@ var switchVariants = cva11(
|
|
|
2859
3839
|
}
|
|
2860
3840
|
}
|
|
2861
3841
|
);
|
|
2862
|
-
var switchThumbVariants =
|
|
3842
|
+
var switchThumbVariants = cva14(
|
|
2863
3843
|
"pointer-events-none block rounded-full surface-default shadow-sm ring-0 transition-transform",
|
|
2864
3844
|
{
|
|
2865
3845
|
variants: {
|
|
@@ -2874,14 +3854,14 @@ var switchThumbVariants = cva11(
|
|
|
2874
3854
|
}
|
|
2875
3855
|
);
|
|
2876
3856
|
function Switch({ className, size, ref, ...props }) {
|
|
2877
|
-
return /* @__PURE__ */
|
|
3857
|
+
return /* @__PURE__ */ jsx28(
|
|
2878
3858
|
SwitchPrimitive.Root,
|
|
2879
3859
|
{
|
|
2880
3860
|
ref,
|
|
2881
3861
|
"data-slot": "switch",
|
|
2882
3862
|
className: cn(switchVariants({ size }), className),
|
|
2883
3863
|
...props,
|
|
2884
|
-
children: /* @__PURE__ */
|
|
3864
|
+
children: /* @__PURE__ */ jsx28(
|
|
2885
3865
|
SwitchPrimitive.Thumb,
|
|
2886
3866
|
{
|
|
2887
3867
|
"data-slot": "switch-thumb",
|
|
@@ -2892,11 +3872,116 @@ function Switch({ className, size, ref, ...props }) {
|
|
|
2892
3872
|
);
|
|
2893
3873
|
}
|
|
2894
3874
|
|
|
3875
|
+
// src/components/ui/slider.tsx
|
|
3876
|
+
import { Slider as SliderPrimitive } from "@base-ui/react/slider";
|
|
3877
|
+
import { cva as cva15 } from "class-variance-authority";
|
|
3878
|
+
import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3879
|
+
var sliderControlVariants = cva15([
|
|
3880
|
+
// Base layout
|
|
3881
|
+
"relative flex w-full touch-none select-none items-center",
|
|
3882
|
+
// Disabled
|
|
3883
|
+
"data-[disabled]:opacity-50",
|
|
3884
|
+
// Vertical orientation
|
|
3885
|
+
"data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40",
|
|
3886
|
+
"data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col"
|
|
3887
|
+
]);
|
|
3888
|
+
var sliderTrackVariants = cva15([
|
|
3889
|
+
// Base layout & appearance
|
|
3890
|
+
"relative grow overflow-hidden rounded-full",
|
|
3891
|
+
"interactive-secondary",
|
|
3892
|
+
// Horizontal orientation
|
|
3893
|
+
"data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full",
|
|
3894
|
+
// Vertical orientation
|
|
3895
|
+
"data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-1"
|
|
3896
|
+
]);
|
|
3897
|
+
var sliderIndicatorVariants = cva15([
|
|
3898
|
+
// Background
|
|
3899
|
+
"interactive-accent",
|
|
3900
|
+
// Horizontal orientation
|
|
3901
|
+
"data-[orientation=horizontal]:h-full",
|
|
3902
|
+
// Vertical orientation
|
|
3903
|
+
"data-[orientation=vertical]:w-full"
|
|
3904
|
+
]);
|
|
3905
|
+
var sliderThumbVariants = cva15([
|
|
3906
|
+
// Base layout & appearance
|
|
3907
|
+
"relative block size-3 shrink-0",
|
|
3908
|
+
"rounded-full border border-[var(--color-interactive-accent)] interactive-default shadow-xs",
|
|
3909
|
+
// Transitions
|
|
3910
|
+
"transition-[color,box-shadow]",
|
|
3911
|
+
// Extended hit area
|
|
3912
|
+
"after:absolute after:-inset-2",
|
|
3913
|
+
// Hover & active
|
|
3914
|
+
"hover:ring-2 hover:ring-focus-default active:ring-2 active:ring-focus-default",
|
|
3915
|
+
// Focus (targets inner hidden input via :has)
|
|
3916
|
+
"has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-focus-default has-[:focus-visible]:outline-hidden",
|
|
3917
|
+
// Disabled
|
|
3918
|
+
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
|
|
3919
|
+
]);
|
|
3920
|
+
function Slider({
|
|
3921
|
+
className,
|
|
3922
|
+
defaultValue,
|
|
3923
|
+
value,
|
|
3924
|
+
min = 0,
|
|
3925
|
+
max = 100,
|
|
3926
|
+
thumbLabels,
|
|
3927
|
+
...props
|
|
3928
|
+
}) {
|
|
3929
|
+
const values = Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : typeof value === "number" ? [value] : typeof defaultValue === "number" ? [defaultValue] : [min];
|
|
3930
|
+
return /* @__PURE__ */ jsx29(
|
|
3931
|
+
SliderPrimitive.Root,
|
|
3932
|
+
{
|
|
3933
|
+
"data-slot": "slider",
|
|
3934
|
+
className: cn(
|
|
3935
|
+
"data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full",
|
|
3936
|
+
className
|
|
3937
|
+
),
|
|
3938
|
+
defaultValue,
|
|
3939
|
+
value,
|
|
3940
|
+
min,
|
|
3941
|
+
max,
|
|
3942
|
+
thumbAlignment: "edge",
|
|
3943
|
+
...props,
|
|
3944
|
+
children: /* @__PURE__ */ jsxs16(
|
|
3945
|
+
SliderPrimitive.Control,
|
|
3946
|
+
{
|
|
3947
|
+
"data-slot": "slider-control",
|
|
3948
|
+
className: sliderControlVariants(),
|
|
3949
|
+
children: [
|
|
3950
|
+
/* @__PURE__ */ jsx29(
|
|
3951
|
+
SliderPrimitive.Track,
|
|
3952
|
+
{
|
|
3953
|
+
"data-slot": "slider-track",
|
|
3954
|
+
className: sliderTrackVariants(),
|
|
3955
|
+
children: /* @__PURE__ */ jsx29(
|
|
3956
|
+
SliderPrimitive.Indicator,
|
|
3957
|
+
{
|
|
3958
|
+
"data-slot": "slider-range",
|
|
3959
|
+
className: sliderIndicatorVariants()
|
|
3960
|
+
}
|
|
3961
|
+
)
|
|
3962
|
+
}
|
|
3963
|
+
),
|
|
3964
|
+
Array.from({ length: values.length }, (_, index) => /* @__PURE__ */ jsx29(
|
|
3965
|
+
SliderPrimitive.Thumb,
|
|
3966
|
+
{
|
|
3967
|
+
"data-slot": "slider-thumb",
|
|
3968
|
+
"aria-label": thumbLabels?.[index],
|
|
3969
|
+
className: sliderThumbVariants()
|
|
3970
|
+
},
|
|
3971
|
+
index
|
|
3972
|
+
))
|
|
3973
|
+
]
|
|
3974
|
+
}
|
|
3975
|
+
)
|
|
3976
|
+
}
|
|
3977
|
+
);
|
|
3978
|
+
}
|
|
3979
|
+
|
|
2895
3980
|
// src/components/ui/input.tsx
|
|
2896
3981
|
import { Input as InputPrimitive } from "@base-ui/react/input";
|
|
2897
|
-
import { cva as
|
|
2898
|
-
import { jsx as
|
|
2899
|
-
var inputVariants =
|
|
3982
|
+
import { cva as cva16 } from "class-variance-authority";
|
|
3983
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
3984
|
+
var inputVariants = cva16(
|
|
2900
3985
|
cn(
|
|
2901
3986
|
// Layout
|
|
2902
3987
|
"w-full min-w-0",
|
|
@@ -2934,7 +4019,7 @@ var inputVariants = cva12(
|
|
|
2934
4019
|
}
|
|
2935
4020
|
);
|
|
2936
4021
|
function Input({ className, size, roundness, ref, ...props }) {
|
|
2937
|
-
return /* @__PURE__ */
|
|
4022
|
+
return /* @__PURE__ */ jsx30(
|
|
2938
4023
|
InputPrimitive,
|
|
2939
4024
|
{
|
|
2940
4025
|
"data-slot": "input",
|
|
@@ -2946,9 +4031,9 @@ function Input({ className, size, roundness, ref, ...props }) {
|
|
|
2946
4031
|
}
|
|
2947
4032
|
|
|
2948
4033
|
// src/components/ui/textarea.tsx
|
|
2949
|
-
import { jsx as
|
|
4034
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
2950
4035
|
function Textarea({ className, style, ref, ...props }) {
|
|
2951
|
-
return /* @__PURE__ */
|
|
4036
|
+
return /* @__PURE__ */ jsx31(
|
|
2952
4037
|
"textarea",
|
|
2953
4038
|
{
|
|
2954
4039
|
className: cn(
|
|
@@ -2963,9 +4048,9 @@ function Textarea({ className, style, ref, ...props }) {
|
|
|
2963
4048
|
}
|
|
2964
4049
|
|
|
2965
4050
|
// src/components/ui/input-group.tsx
|
|
2966
|
-
import { cva as
|
|
2967
|
-
import { jsx as
|
|
2968
|
-
var inputGroupVariants =
|
|
4051
|
+
import { cva as cva17 } from "class-variance-authority";
|
|
4052
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
4053
|
+
var inputGroupVariants = cva17(
|
|
2969
4054
|
cn(
|
|
2970
4055
|
// Layout
|
|
2971
4056
|
"group/input-group relative flex w-full min-w-0 items-center overflow-hidden",
|
|
@@ -3012,7 +4097,7 @@ function InputGroup({
|
|
|
3012
4097
|
ref,
|
|
3013
4098
|
...props
|
|
3014
4099
|
}) {
|
|
3015
|
-
return /* @__PURE__ */
|
|
4100
|
+
return /* @__PURE__ */ jsx32(
|
|
3016
4101
|
"div",
|
|
3017
4102
|
{
|
|
3018
4103
|
ref,
|
|
@@ -3024,7 +4109,7 @@ function InputGroup({
|
|
|
3024
4109
|
}
|
|
3025
4110
|
);
|
|
3026
4111
|
}
|
|
3027
|
-
var inputGroupAddonVariants =
|
|
4112
|
+
var inputGroupAddonVariants = cva17(
|
|
3028
4113
|
"flex h-auto items-center justify-center gap-2 py-1.5 type-body-sm-regular group-data-[size=mini]/input-group:type-body-xs-regular text-secondary select-none [&>svg:not([class*='size-'])]:size-4",
|
|
3029
4114
|
{
|
|
3030
4115
|
variants: {
|
|
@@ -3046,7 +4131,7 @@ function InputGroupAddon({
|
|
|
3046
4131
|
ref,
|
|
3047
4132
|
...props
|
|
3048
4133
|
}) {
|
|
3049
|
-
return /* @__PURE__ */
|
|
4134
|
+
return /* @__PURE__ */ jsx32(
|
|
3050
4135
|
"div",
|
|
3051
4136
|
{
|
|
3052
4137
|
ref,
|
|
@@ -3061,7 +4146,7 @@ function InputGroupAddon({
|
|
|
3061
4146
|
}
|
|
3062
4147
|
);
|
|
3063
4148
|
}
|
|
3064
|
-
var inputGroupButtonVariants =
|
|
4149
|
+
var inputGroupButtonVariants = cva17("shadow-none py-0", {
|
|
3065
4150
|
variants: {
|
|
3066
4151
|
size: {
|
|
3067
4152
|
xs: "h-6 gap-1 rounded-sm px-1.5 type-label-xs-medium [&>svg:not([class*='size-'])]:size-3.5",
|
|
@@ -3082,7 +4167,7 @@ function InputGroupButton({
|
|
|
3082
4167
|
ref,
|
|
3083
4168
|
...props
|
|
3084
4169
|
}) {
|
|
3085
|
-
return /* @__PURE__ */
|
|
4170
|
+
return /* @__PURE__ */ jsx32(
|
|
3086
4171
|
Button,
|
|
3087
4172
|
{
|
|
3088
4173
|
ref,
|
|
@@ -3094,7 +4179,7 @@ function InputGroupButton({
|
|
|
3094
4179
|
);
|
|
3095
4180
|
}
|
|
3096
4181
|
function InputGroupText({ className, ref, ...props }) {
|
|
3097
|
-
return /* @__PURE__ */
|
|
4182
|
+
return /* @__PURE__ */ jsx32(
|
|
3098
4183
|
"span",
|
|
3099
4184
|
{
|
|
3100
4185
|
ref,
|
|
@@ -3111,7 +4196,7 @@ function InputGroupInput({ className, ref, ...props }) {
|
|
|
3111
4196
|
// Most of these classes override Input's default border, background, shadow,
|
|
3112
4197
|
// and focus/error/disabled styles so that InputGroup owns all visual states
|
|
3113
4198
|
// via its own has-[...] selectors.
|
|
3114
|
-
/* @__PURE__ */
|
|
4199
|
+
/* @__PURE__ */ jsx32(
|
|
3115
4200
|
Input,
|
|
3116
4201
|
{
|
|
3117
4202
|
ref,
|
|
@@ -3133,7 +4218,7 @@ function InputGroupTextarea({
|
|
|
3133
4218
|
return (
|
|
3134
4219
|
// Same overrides as InputGroupInput — strips Textarea's own border, background,
|
|
3135
4220
|
// shadow, and focus/error/disabled styles so InputGroup owns all visual states.
|
|
3136
|
-
/* @__PURE__ */
|
|
4221
|
+
/* @__PURE__ */ jsx32(
|
|
3137
4222
|
Textarea,
|
|
3138
4223
|
{
|
|
3139
4224
|
ref,
|
|
@@ -3148,121 +4233,59 @@ function InputGroupTextarea({
|
|
|
3148
4233
|
);
|
|
3149
4234
|
}
|
|
3150
4235
|
|
|
3151
|
-
// src/components/ui/
|
|
3152
|
-
import
|
|
3153
|
-
import {
|
|
3154
|
-
|
|
3155
|
-
var badgeVariants = cva14(
|
|
4236
|
+
// src/components/ui/tag.tsx
|
|
4237
|
+
import { cva as cva18 } from "class-variance-authority";
|
|
4238
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
4239
|
+
var tagVariants = cva18(
|
|
3156
4240
|
[
|
|
3157
4241
|
// Layout
|
|
3158
|
-
"inline-flex items-center justify-center
|
|
3159
|
-
// Size
|
|
3160
|
-
"h-6 px-2",
|
|
3161
|
-
// Text
|
|
3162
|
-
"whitespace-nowrap type-label-xs-medium",
|
|
3163
|
-
// Shape
|
|
3164
|
-
"rounded-
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
}
|
|
3189
|
-
},
|
|
3190
|
-
defaultVariants: {}
|
|
3191
|
-
}
|
|
3192
|
-
);
|
|
3193
|
-
function isSingleDisplayCharacter(node) {
|
|
3194
|
-
if (node == null || typeof node === "boolean") return false;
|
|
3195
|
-
if (typeof node === "string" || typeof node === "number") {
|
|
3196
|
-
const trimmed = String(node).trim();
|
|
3197
|
-
return trimmed.length === 1;
|
|
3198
|
-
}
|
|
3199
|
-
if (Array.isArray(node)) {
|
|
3200
|
-
const parts = node.filter((x) => x != null && typeof x !== "boolean");
|
|
3201
|
-
if (parts.length !== 1) return false;
|
|
3202
|
-
return isSingleDisplayCharacter(parts[0]);
|
|
3203
|
-
}
|
|
3204
|
-
if (React10.isValidElement(node)) {
|
|
3205
|
-
return isSingleDisplayCharacter(
|
|
3206
|
-
node.props.children
|
|
3207
|
-
);
|
|
3208
|
-
}
|
|
3209
|
-
return false;
|
|
3210
|
-
}
|
|
3211
|
-
function Badge({
|
|
3212
|
-
className,
|
|
3213
|
-
variant,
|
|
3214
|
-
iconLeft,
|
|
3215
|
-
iconRight,
|
|
3216
|
-
onKeyDown,
|
|
3217
|
-
style,
|
|
3218
|
-
children,
|
|
3219
|
-
ref,
|
|
3220
|
-
...props
|
|
3221
|
-
}) {
|
|
3222
|
-
if (!variant) {
|
|
3223
|
-
return null;
|
|
3224
|
-
}
|
|
3225
|
-
const circle = isSingleDisplayCharacter(children) && !iconLeft && !iconRight;
|
|
3226
|
-
return /* @__PURE__ */ jsxs12(
|
|
3227
|
-
"span",
|
|
3228
|
-
{
|
|
3229
|
-
...props,
|
|
3230
|
-
role: "button",
|
|
3231
|
-
tabIndex: 0,
|
|
3232
|
-
onKeyDown: (e) => {
|
|
3233
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
3234
|
-
e.preventDefault();
|
|
3235
|
-
e.currentTarget.click();
|
|
3236
|
-
}
|
|
3237
|
-
onKeyDown?.(e);
|
|
3238
|
-
},
|
|
3239
|
-
className: cn(
|
|
3240
|
-
badgeVariants({ variant }),
|
|
3241
|
-
circle ? "size-5 shrink-0 p-0" : "",
|
|
3242
|
-
className
|
|
3243
|
-
),
|
|
3244
|
-
style,
|
|
4242
|
+
"inline-flex items-center justify-center",
|
|
4243
|
+
// Size
|
|
4244
|
+
"h-6 px-2.5",
|
|
4245
|
+
// Text
|
|
4246
|
+
"whitespace-nowrap type-label-xs-medium",
|
|
4247
|
+
// Shape
|
|
4248
|
+
"rounded-full"
|
|
4249
|
+
],
|
|
4250
|
+
{
|
|
4251
|
+
variants: {
|
|
4252
|
+
color: {
|
|
4253
|
+
violet: "bg-violet-100 text-violet-800",
|
|
4254
|
+
cyan: "bg-cyan-100 text-cyan-900",
|
|
4255
|
+
indigo: "bg-indigo-100 text-indigo-800",
|
|
4256
|
+
orange: "bg-orange-100 text-orange-900",
|
|
4257
|
+
pink: "bg-pink-100 text-pink-900",
|
|
4258
|
+
verdant: "bg-verdant-100 text-verdant-800",
|
|
4259
|
+
stone: "bg-stone-200 text-stone-800"
|
|
4260
|
+
}
|
|
4261
|
+
},
|
|
4262
|
+
defaultVariants: {
|
|
4263
|
+
color: "stone"
|
|
4264
|
+
}
|
|
4265
|
+
}
|
|
4266
|
+
);
|
|
4267
|
+
function Tag({ className, color, ref, ...props }) {
|
|
4268
|
+
return /* @__PURE__ */ jsx33(
|
|
4269
|
+
"span",
|
|
4270
|
+
{
|
|
4271
|
+
className: cn(tagVariants({ color }), className),
|
|
3245
4272
|
ref,
|
|
3246
|
-
|
|
3247
|
-
iconLeft,
|
|
3248
|
-
children,
|
|
3249
|
-
iconRight
|
|
3250
|
-
]
|
|
4273
|
+
...props
|
|
3251
4274
|
}
|
|
3252
4275
|
);
|
|
3253
4276
|
}
|
|
3254
4277
|
|
|
3255
4278
|
// src/components/ui/alert-dialog.tsx
|
|
3256
4279
|
import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog";
|
|
3257
|
-
import { jsx as
|
|
4280
|
+
import { jsx as jsx34, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3258
4281
|
function AlertDialog({ ...props }) {
|
|
3259
|
-
return /* @__PURE__ */
|
|
4282
|
+
return /* @__PURE__ */ jsx34(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
|
|
3260
4283
|
}
|
|
3261
4284
|
function AlertDialogTrigger({
|
|
3262
4285
|
ref,
|
|
3263
4286
|
...props
|
|
3264
4287
|
}) {
|
|
3265
|
-
return /* @__PURE__ */
|
|
4288
|
+
return /* @__PURE__ */ jsx34(
|
|
3266
4289
|
AlertDialogPrimitive.Trigger,
|
|
3267
4290
|
{
|
|
3268
4291
|
ref,
|
|
@@ -3276,7 +4299,7 @@ function AlertDialogOverlay({
|
|
|
3276
4299
|
ref,
|
|
3277
4300
|
...props
|
|
3278
4301
|
}) {
|
|
3279
|
-
return /* @__PURE__ */
|
|
4302
|
+
return /* @__PURE__ */ jsx34(
|
|
3280
4303
|
AlertDialogPrimitive.Backdrop,
|
|
3281
4304
|
{
|
|
3282
4305
|
ref,
|
|
@@ -3298,9 +4321,9 @@ function AlertDialogContent({
|
|
|
3298
4321
|
ref,
|
|
3299
4322
|
...props
|
|
3300
4323
|
}) {
|
|
3301
|
-
return /* @__PURE__ */
|
|
3302
|
-
/* @__PURE__ */
|
|
3303
|
-
/* @__PURE__ */
|
|
4324
|
+
return /* @__PURE__ */ jsxs17(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", children: [
|
|
4325
|
+
/* @__PURE__ */ jsx34(AlertDialogOverlay, {}),
|
|
4326
|
+
/* @__PURE__ */ jsx34(
|
|
3304
4327
|
AlertDialogPrimitive.Popup,
|
|
3305
4328
|
{
|
|
3306
4329
|
ref,
|
|
@@ -3333,7 +4356,7 @@ function AlertDialogHeader({
|
|
|
3333
4356
|
ref,
|
|
3334
4357
|
...props
|
|
3335
4358
|
}) {
|
|
3336
|
-
return /* @__PURE__ */
|
|
4359
|
+
return /* @__PURE__ */ jsx34(
|
|
3337
4360
|
"div",
|
|
3338
4361
|
{
|
|
3339
4362
|
ref,
|
|
@@ -3353,7 +4376,7 @@ function AlertDialogFooter({
|
|
|
3353
4376
|
ref,
|
|
3354
4377
|
...props
|
|
3355
4378
|
}) {
|
|
3356
|
-
return /* @__PURE__ */
|
|
4379
|
+
return /* @__PURE__ */ jsx34(
|
|
3357
4380
|
"div",
|
|
3358
4381
|
{
|
|
3359
4382
|
ref,
|
|
@@ -3375,7 +4398,7 @@ function AlertDialogTitle({
|
|
|
3375
4398
|
ref,
|
|
3376
4399
|
...props
|
|
3377
4400
|
}) {
|
|
3378
|
-
return /* @__PURE__ */
|
|
4401
|
+
return /* @__PURE__ */ jsx34(
|
|
3379
4402
|
AlertDialogPrimitive.Title,
|
|
3380
4403
|
{
|
|
3381
4404
|
ref,
|
|
@@ -3390,7 +4413,7 @@ function AlertDialogDescription({
|
|
|
3390
4413
|
ref,
|
|
3391
4414
|
...props
|
|
3392
4415
|
}) {
|
|
3393
|
-
return /* @__PURE__ */
|
|
4416
|
+
return /* @__PURE__ */ jsx34(
|
|
3394
4417
|
AlertDialogPrimitive.Description,
|
|
3395
4418
|
{
|
|
3396
4419
|
ref,
|
|
@@ -3407,12 +4430,12 @@ function AlertDialogAction({
|
|
|
3407
4430
|
ref,
|
|
3408
4431
|
...props
|
|
3409
4432
|
}) {
|
|
3410
|
-
return /* @__PURE__ */
|
|
4433
|
+
return /* @__PURE__ */ jsx34(
|
|
3411
4434
|
AlertDialogPrimitive.Close,
|
|
3412
4435
|
{
|
|
3413
4436
|
ref,
|
|
3414
4437
|
"data-slot": "alert-dialog-action",
|
|
3415
|
-
render: /* @__PURE__ */
|
|
4438
|
+
render: /* @__PURE__ */ jsx34(Button, { variant, size }),
|
|
3416
4439
|
className,
|
|
3417
4440
|
...props
|
|
3418
4441
|
}
|
|
@@ -3425,12 +4448,12 @@ function AlertDialogCancel({
|
|
|
3425
4448
|
ref,
|
|
3426
4449
|
...props
|
|
3427
4450
|
}) {
|
|
3428
|
-
return /* @__PURE__ */
|
|
4451
|
+
return /* @__PURE__ */ jsx34(
|
|
3429
4452
|
AlertDialogPrimitive.Close,
|
|
3430
4453
|
{
|
|
3431
4454
|
ref,
|
|
3432
4455
|
"data-slot": "alert-dialog-cancel",
|
|
3433
|
-
render: /* @__PURE__ */
|
|
4456
|
+
render: /* @__PURE__ */ jsx34(Button, { variant, size }),
|
|
3434
4457
|
className,
|
|
3435
4458
|
...props
|
|
3436
4459
|
}
|
|
@@ -3438,14 +4461,14 @@ function AlertDialogCancel({
|
|
|
3438
4461
|
}
|
|
3439
4462
|
|
|
3440
4463
|
// src/components/ui/item.tsx
|
|
3441
|
-
import * as
|
|
4464
|
+
import * as React13 from "react";
|
|
3442
4465
|
import { mergeProps as mergeProps3 } from "@base-ui/react/merge-props";
|
|
3443
4466
|
import { useRender as useRender3 } from "@base-ui/react/use-render";
|
|
3444
|
-
import { cva as
|
|
3445
|
-
import { jsx as
|
|
3446
|
-
var ItemGroupContext =
|
|
4467
|
+
import { cva as cva19 } from "class-variance-authority";
|
|
4468
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
4469
|
+
var ItemGroupContext = React13.createContext(false);
|
|
3447
4470
|
function ItemGroup({ className, ref, ...props }) {
|
|
3448
|
-
return /* @__PURE__ */
|
|
4471
|
+
return /* @__PURE__ */ jsx35(ItemGroupContext, { value: true, children: /* @__PURE__ */ jsx35(
|
|
3449
4472
|
"div",
|
|
3450
4473
|
{
|
|
3451
4474
|
ref,
|
|
@@ -3464,7 +4487,7 @@ function ItemSeparator({
|
|
|
3464
4487
|
ref,
|
|
3465
4488
|
...props
|
|
3466
4489
|
}) {
|
|
3467
|
-
return /* @__PURE__ */
|
|
4490
|
+
return /* @__PURE__ */ jsx35(
|
|
3468
4491
|
Separator,
|
|
3469
4492
|
{
|
|
3470
4493
|
ref,
|
|
@@ -3475,7 +4498,7 @@ function ItemSeparator({
|
|
|
3475
4498
|
}
|
|
3476
4499
|
);
|
|
3477
4500
|
}
|
|
3478
|
-
var itemVariants =
|
|
4501
|
+
var itemVariants = cva19(
|
|
3479
4502
|
"surface-default rounded-md border group/item flex w-full flex-wrap transition-colors duration-100 outline-none [a]:relative [a]:isolate [a]:after:absolute [a]:after:inset-0 [a]:after:rounded-[inherit] [a]:after:-z-10 [a]:after:pointer-events-none [a]:after:transition-colors",
|
|
3480
4503
|
{
|
|
3481
4504
|
variants: {
|
|
@@ -3502,7 +4525,7 @@ var Item = ({
|
|
|
3502
4525
|
render,
|
|
3503
4526
|
...props
|
|
3504
4527
|
}) => {
|
|
3505
|
-
const insideGroup =
|
|
4528
|
+
const insideGroup = React13.useContext(ItemGroupContext);
|
|
3506
4529
|
return useRender3({
|
|
3507
4530
|
defaultTagName: "div",
|
|
3508
4531
|
props: mergeProps3(
|
|
@@ -3520,7 +4543,7 @@ var Item = ({
|
|
|
3520
4543
|
}
|
|
3521
4544
|
});
|
|
3522
4545
|
};
|
|
3523
|
-
var itemMediaVariants =
|
|
4546
|
+
var itemMediaVariants = cva19(
|
|
3524
4547
|
"gap-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none",
|
|
3525
4548
|
{
|
|
3526
4549
|
variants: {
|
|
@@ -3542,7 +4565,7 @@ function ItemMedia({
|
|
|
3542
4565
|
ref,
|
|
3543
4566
|
...props
|
|
3544
4567
|
}) {
|
|
3545
|
-
return /* @__PURE__ */
|
|
4568
|
+
return /* @__PURE__ */ jsx35(
|
|
3546
4569
|
"div",
|
|
3547
4570
|
{
|
|
3548
4571
|
ref,
|
|
@@ -3558,7 +4581,7 @@ function ItemContent({
|
|
|
3558
4581
|
ref,
|
|
3559
4582
|
...props
|
|
3560
4583
|
}) {
|
|
3561
|
-
return /* @__PURE__ */
|
|
4584
|
+
return /* @__PURE__ */ jsx35(
|
|
3562
4585
|
"div",
|
|
3563
4586
|
{
|
|
3564
4587
|
ref,
|
|
@@ -3572,7 +4595,7 @@ function ItemContent({
|
|
|
3572
4595
|
);
|
|
3573
4596
|
}
|
|
3574
4597
|
function ItemTitle({ className, ref, ...props }) {
|
|
3575
|
-
return /* @__PURE__ */
|
|
4598
|
+
return /* @__PURE__ */ jsx35(
|
|
3576
4599
|
"div",
|
|
3577
4600
|
{
|
|
3578
4601
|
ref,
|
|
@@ -3590,7 +4613,7 @@ function ItemDescription({
|
|
|
3590
4613
|
ref,
|
|
3591
4614
|
...props
|
|
3592
4615
|
}) {
|
|
3593
|
-
return /* @__PURE__ */
|
|
4616
|
+
return /* @__PURE__ */ jsx35(
|
|
3594
4617
|
"p",
|
|
3595
4618
|
{
|
|
3596
4619
|
ref,
|
|
@@ -3608,7 +4631,7 @@ function ItemActions({
|
|
|
3608
4631
|
ref,
|
|
3609
4632
|
...props
|
|
3610
4633
|
}) {
|
|
3611
|
-
return /* @__PURE__ */
|
|
4634
|
+
return /* @__PURE__ */ jsx35(
|
|
3612
4635
|
"div",
|
|
3613
4636
|
{
|
|
3614
4637
|
ref,
|
|
@@ -3619,7 +4642,7 @@ function ItemActions({
|
|
|
3619
4642
|
);
|
|
3620
4643
|
}
|
|
3621
4644
|
function ItemHeader({ className, ref, ...props }) {
|
|
3622
|
-
return /* @__PURE__ */
|
|
4645
|
+
return /* @__PURE__ */ jsx35(
|
|
3623
4646
|
"div",
|
|
3624
4647
|
{
|
|
3625
4648
|
ref,
|
|
@@ -3633,7 +4656,7 @@ function ItemHeader({ className, ref, ...props }) {
|
|
|
3633
4656
|
);
|
|
3634
4657
|
}
|
|
3635
4658
|
function ItemFooter({ className, ref, ...props }) {
|
|
3636
|
-
return /* @__PURE__ */
|
|
4659
|
+
return /* @__PURE__ */ jsx35(
|
|
3637
4660
|
"div",
|
|
3638
4661
|
{
|
|
3639
4662
|
ref,
|
|
@@ -3649,14 +4672,14 @@ function ItemFooter({ className, ref, ...props }) {
|
|
|
3649
4672
|
|
|
3650
4673
|
// src/components/ui/tabs.tsx
|
|
3651
4674
|
import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
|
|
3652
|
-
import { cva as
|
|
3653
|
-
import { jsx as
|
|
4675
|
+
import { cva as cva20 } from "class-variance-authority";
|
|
4676
|
+
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
3654
4677
|
function Tabs({
|
|
3655
4678
|
className,
|
|
3656
4679
|
orientation = "horizontal",
|
|
3657
4680
|
...props
|
|
3658
4681
|
}) {
|
|
3659
|
-
return /* @__PURE__ */
|
|
4682
|
+
return /* @__PURE__ */ jsx36(
|
|
3660
4683
|
TabsPrimitive.Root,
|
|
3661
4684
|
{
|
|
3662
4685
|
"data-slot": "tabs",
|
|
@@ -3670,7 +4693,7 @@ function Tabs({
|
|
|
3670
4693
|
}
|
|
3671
4694
|
);
|
|
3672
4695
|
}
|
|
3673
|
-
var tabsListVariants =
|
|
4696
|
+
var tabsListVariants = cva20(
|
|
3674
4697
|
[
|
|
3675
4698
|
// base layout
|
|
3676
4699
|
"group/tabs-list inline-flex w-fit items-center p-1",
|
|
@@ -3698,7 +4721,7 @@ function TabsList({
|
|
|
3698
4721
|
variant = "default",
|
|
3699
4722
|
...props
|
|
3700
4723
|
}) {
|
|
3701
|
-
return /* @__PURE__ */
|
|
4724
|
+
return /* @__PURE__ */ jsx36(
|
|
3702
4725
|
TabsPrimitive.List,
|
|
3703
4726
|
{
|
|
3704
4727
|
"data-slot": "tabs-list",
|
|
@@ -3708,7 +4731,7 @@ function TabsList({
|
|
|
3708
4731
|
}
|
|
3709
4732
|
);
|
|
3710
4733
|
}
|
|
3711
|
-
var tabsTriggerVariants =
|
|
4734
|
+
var tabsTriggerVariants = cva20(
|
|
3712
4735
|
[
|
|
3713
4736
|
// base layout
|
|
3714
4737
|
"relative inline-flex shrink-0 items-center justify-center whitespace-nowrap",
|
|
@@ -3762,7 +4785,7 @@ function TabsTrigger({
|
|
|
3762
4785
|
size = "regular",
|
|
3763
4786
|
...props
|
|
3764
4787
|
}) {
|
|
3765
|
-
return /* @__PURE__ */
|
|
4788
|
+
return /* @__PURE__ */ jsx36(
|
|
3766
4789
|
TabsPrimitive.Tab,
|
|
3767
4790
|
{
|
|
3768
4791
|
"data-slot": "tabs-trigger",
|
|
@@ -3772,7 +4795,7 @@ function TabsTrigger({
|
|
|
3772
4795
|
);
|
|
3773
4796
|
}
|
|
3774
4797
|
function TabsContent({ className, ...props }) {
|
|
3775
|
-
return /* @__PURE__ */
|
|
4798
|
+
return /* @__PURE__ */ jsx36(
|
|
3776
4799
|
TabsPrimitive.Panel,
|
|
3777
4800
|
{
|
|
3778
4801
|
"data-slot": "tabs-content",
|
|
@@ -3785,8 +4808,8 @@ function TabsContent({ className, ...props }) {
|
|
|
3785
4808
|
// src/components/ui/dropdown-menu.tsx
|
|
3786
4809
|
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
|
3787
4810
|
import { Separator as SeparatorPrimitive2 } from "@base-ui/react/separator";
|
|
3788
|
-
import { cva as
|
|
3789
|
-
import { jsx as
|
|
4811
|
+
import { cva as cva21 } from "class-variance-authority";
|
|
4812
|
+
import { jsx as jsx37, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3790
4813
|
var DropdownMenu = MenuPrimitive.Root;
|
|
3791
4814
|
var DropdownMenuGroup = MenuPrimitive.Group;
|
|
3792
4815
|
var DropdownMenuSub = MenuPrimitive.SubmenuRoot;
|
|
@@ -3796,7 +4819,7 @@ function DropdownMenuTrigger({
|
|
|
3796
4819
|
ref,
|
|
3797
4820
|
...props
|
|
3798
4821
|
}) {
|
|
3799
|
-
return /* @__PURE__ */
|
|
4822
|
+
return /* @__PURE__ */ jsx37(
|
|
3800
4823
|
MenuPrimitive.Trigger,
|
|
3801
4824
|
{
|
|
3802
4825
|
"data-slot": "dropdown-trigger",
|
|
@@ -3815,7 +4838,7 @@ function DropdownMenuContent({
|
|
|
3815
4838
|
ref,
|
|
3816
4839
|
...props
|
|
3817
4840
|
}) {
|
|
3818
|
-
return /* @__PURE__ */
|
|
4841
|
+
return /* @__PURE__ */ jsx37(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx37(
|
|
3819
4842
|
MenuPrimitive.Positioner,
|
|
3820
4843
|
{
|
|
3821
4844
|
className: "isolate z-50 outline-none",
|
|
@@ -3823,7 +4846,7 @@ function DropdownMenuContent({
|
|
|
3823
4846
|
alignOffset,
|
|
3824
4847
|
side,
|
|
3825
4848
|
sideOffset,
|
|
3826
|
-
children: /* @__PURE__ */
|
|
4849
|
+
children: /* @__PURE__ */ jsx37(
|
|
3827
4850
|
MenuPrimitive.Popup,
|
|
3828
4851
|
{
|
|
3829
4852
|
"data-slot": "dropdown-content",
|
|
@@ -3850,7 +4873,7 @@ function DropdownMenuSubTrigger({
|
|
|
3850
4873
|
ref,
|
|
3851
4874
|
...props
|
|
3852
4875
|
}) {
|
|
3853
|
-
return /* @__PURE__ */
|
|
4876
|
+
return /* @__PURE__ */ jsxs18(
|
|
3854
4877
|
MenuPrimitive.SubmenuTrigger,
|
|
3855
4878
|
{
|
|
3856
4879
|
"data-slot": "dropdown-sub-trigger",
|
|
@@ -3869,7 +4892,7 @@ function DropdownMenuSubTrigger({
|
|
|
3869
4892
|
...props,
|
|
3870
4893
|
children: [
|
|
3871
4894
|
children,
|
|
3872
|
-
/* @__PURE__ */
|
|
4895
|
+
/* @__PURE__ */ jsx37(ArrowRightIcon, { size: 16, className: "ml-auto text-secondary" })
|
|
3873
4896
|
]
|
|
3874
4897
|
}
|
|
3875
4898
|
);
|
|
@@ -3883,7 +4906,7 @@ function DropdownMenuSubContent({
|
|
|
3883
4906
|
ref,
|
|
3884
4907
|
...props
|
|
3885
4908
|
}) {
|
|
3886
|
-
return /* @__PURE__ */
|
|
4909
|
+
return /* @__PURE__ */ jsx37(
|
|
3887
4910
|
DropdownMenuContent,
|
|
3888
4911
|
{
|
|
3889
4912
|
"data-slot": "dropdown-sub-content",
|
|
@@ -3897,7 +4920,7 @@ function DropdownMenuSubContent({
|
|
|
3897
4920
|
}
|
|
3898
4921
|
);
|
|
3899
4922
|
}
|
|
3900
|
-
var dropdownMenuItemVariants =
|
|
4923
|
+
var dropdownMenuItemVariants = cva21(
|
|
3901
4924
|
[
|
|
3902
4925
|
"relative flex w-full cursor-default select-none items-center gap-2",
|
|
3903
4926
|
"min-h-8 px-2 py-[5.5px] rounded-md",
|
|
@@ -3926,7 +4949,7 @@ function DropdownMenuItem({
|
|
|
3926
4949
|
ref,
|
|
3927
4950
|
...props
|
|
3928
4951
|
}) {
|
|
3929
|
-
return /* @__PURE__ */
|
|
4952
|
+
return /* @__PURE__ */ jsx37(
|
|
3930
4953
|
MenuPrimitive.Item,
|
|
3931
4954
|
{
|
|
3932
4955
|
"data-slot": "dropdown-item",
|
|
@@ -3948,7 +4971,7 @@ function DropdownMenuCheckboxItem({
|
|
|
3948
4971
|
ref,
|
|
3949
4972
|
...props
|
|
3950
4973
|
}) {
|
|
3951
|
-
return /* @__PURE__ */
|
|
4974
|
+
return /* @__PURE__ */ jsxs18(
|
|
3952
4975
|
MenuPrimitive.CheckboxItem,
|
|
3953
4976
|
{
|
|
3954
4977
|
"data-slot": "dropdown-checkbox-item",
|
|
@@ -3966,7 +4989,7 @@ function DropdownMenuCheckboxItem({
|
|
|
3966
4989
|
checked,
|
|
3967
4990
|
...props,
|
|
3968
4991
|
children: [
|
|
3969
|
-
/* @__PURE__ */
|
|
4992
|
+
/* @__PURE__ */ jsx37("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx37(MenuPrimitive.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx37(CheckmarkIcon, { size: 16 }) }) }),
|
|
3970
4993
|
children
|
|
3971
4994
|
]
|
|
3972
4995
|
}
|
|
@@ -3979,7 +5002,7 @@ function DropdownMenuRadioItem({
|
|
|
3979
5002
|
ref,
|
|
3980
5003
|
...props
|
|
3981
5004
|
}) {
|
|
3982
|
-
return /* @__PURE__ */
|
|
5005
|
+
return /* @__PURE__ */ jsxs18(
|
|
3983
5006
|
MenuPrimitive.RadioItem,
|
|
3984
5007
|
{
|
|
3985
5008
|
"data-slot": "dropdown-radio-item",
|
|
@@ -3997,7 +5020,7 @@ function DropdownMenuRadioItem({
|
|
|
3997
5020
|
...props,
|
|
3998
5021
|
children: [
|
|
3999
5022
|
children,
|
|
4000
|
-
/* @__PURE__ */
|
|
5023
|
+
/* @__PURE__ */ jsx37("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx37("span", { className: "hidden size-2 rounded-full bg-[var(--color-interactive-accent)] group-data-[checked]:block" }) })
|
|
4001
5024
|
]
|
|
4002
5025
|
}
|
|
4003
5026
|
);
|
|
@@ -4007,7 +5030,7 @@ function DropdownMenuLabel({
|
|
|
4007
5030
|
ref,
|
|
4008
5031
|
...props
|
|
4009
5032
|
}) {
|
|
4010
|
-
return /* @__PURE__ */
|
|
5033
|
+
return /* @__PURE__ */ jsx37(
|
|
4011
5034
|
MenuPrimitive.GroupLabel,
|
|
4012
5035
|
{
|
|
4013
5036
|
"data-slot": "dropdown-label",
|
|
@@ -4025,7 +5048,7 @@ function DropdownMenuSeparator({
|
|
|
4025
5048
|
ref,
|
|
4026
5049
|
...props
|
|
4027
5050
|
}) {
|
|
4028
|
-
return /* @__PURE__ */
|
|
5051
|
+
return /* @__PURE__ */ jsx37(
|
|
4029
5052
|
SeparatorPrimitive2,
|
|
4030
5053
|
{
|
|
4031
5054
|
"data-slot": "dropdown-separator",
|
|
@@ -4042,7 +5065,7 @@ function DropdownMenuShortcut({
|
|
|
4042
5065
|
className,
|
|
4043
5066
|
...props
|
|
4044
5067
|
}) {
|
|
4045
|
-
return /* @__PURE__ */
|
|
5068
|
+
return /* @__PURE__ */ jsx37(
|
|
4046
5069
|
"span",
|
|
4047
5070
|
{
|
|
4048
5071
|
"data-slot": "dropdown-shortcut",
|
|
@@ -4056,15 +5079,462 @@ function DropdownMenuShortcut({
|
|
|
4056
5079
|
);
|
|
4057
5080
|
}
|
|
4058
5081
|
|
|
5082
|
+
// src/components/ui/chart.tsx
|
|
5083
|
+
import * as React14 from "react";
|
|
5084
|
+
import * as RechartsPrimitive from "recharts";
|
|
5085
|
+
import { Fragment, jsx as jsx38, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
5086
|
+
var THEMES = { light: "", dark: ".dark" };
|
|
5087
|
+
var INITIAL_DIMENSION = { width: 320, height: 200 };
|
|
5088
|
+
var ChartContext = React14.createContext(null);
|
|
5089
|
+
function useChart() {
|
|
5090
|
+
const context = React14.useContext(ChartContext);
|
|
5091
|
+
if (!context) {
|
|
5092
|
+
throw new Error("useChart must be used within a <ChartContainer />");
|
|
5093
|
+
}
|
|
5094
|
+
return context;
|
|
5095
|
+
}
|
|
5096
|
+
function ChartContainer({
|
|
5097
|
+
id,
|
|
5098
|
+
className,
|
|
5099
|
+
children,
|
|
5100
|
+
config,
|
|
5101
|
+
initialDimension = INITIAL_DIMENSION,
|
|
5102
|
+
...props
|
|
5103
|
+
}) {
|
|
5104
|
+
const uniqueId = React14.useId();
|
|
5105
|
+
const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
|
|
5106
|
+
return /* @__PURE__ */ jsx38(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs19(
|
|
5107
|
+
"div",
|
|
5108
|
+
{
|
|
5109
|
+
"data-slot": "chart",
|
|
5110
|
+
"data-chart": chartId,
|
|
5111
|
+
className: cn(
|
|
5112
|
+
// Layout
|
|
5113
|
+
"flex aspect-video justify-center text-xs",
|
|
5114
|
+
// Axis
|
|
5115
|
+
"[&_.recharts-cartesian-axis-tick_text]:fill-(--color-text-secondary)",
|
|
5116
|
+
// Grid
|
|
5117
|
+
"[&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-(--color-border-default)/50",
|
|
5118
|
+
"[&_.recharts-polar-grid_[stroke='#ccc']]:stroke-(--color-border-default)",
|
|
5119
|
+
"[&_.recharts-reference-line_[stroke='#ccc']]:stroke-(--color-border-default)",
|
|
5120
|
+
// Tooltip cursor
|
|
5121
|
+
"[&_.recharts-curve.recharts-tooltip-cursor]:stroke-(--color-border-default)",
|
|
5122
|
+
"[&_.recharts-rectangle.recharts-tooltip-cursor]:fill-(--color-surface-muted)",
|
|
5123
|
+
// Dots & sectors
|
|
5124
|
+
"[&_.recharts-dot[stroke='#fff']]:stroke-transparent",
|
|
5125
|
+
"[&_.recharts-sector]:outline-hidden",
|
|
5126
|
+
// Separate pie/donut slices with a stroke matching the surface behind the chart
|
|
5127
|
+
"[&_.recharts-sector[stroke='#fff']]:stroke-(--color-surface-default)",
|
|
5128
|
+
"[&_.recharts-sector[stroke='#fff']]:[stroke-width:2px]",
|
|
5129
|
+
"[&_.recharts-radial-bar-background-sector]:fill-(--color-surface-muted)",
|
|
5130
|
+
// Misc
|
|
5131
|
+
"[&_.recharts-layer]:outline-hidden",
|
|
5132
|
+
"[&_.recharts-surface]:outline-hidden",
|
|
5133
|
+
className
|
|
5134
|
+
),
|
|
5135
|
+
...props,
|
|
5136
|
+
children: [
|
|
5137
|
+
/* @__PURE__ */ jsx38(ChartStyle, { id: chartId, config }),
|
|
5138
|
+
/* @__PURE__ */ jsx38(
|
|
5139
|
+
RechartsPrimitive.ResponsiveContainer,
|
|
5140
|
+
{
|
|
5141
|
+
initialDimension,
|
|
5142
|
+
children
|
|
5143
|
+
}
|
|
5144
|
+
)
|
|
5145
|
+
]
|
|
5146
|
+
}
|
|
5147
|
+
) });
|
|
5148
|
+
}
|
|
5149
|
+
var ChartStyle = ({ id, config }) => {
|
|
5150
|
+
const colorConfig = Object.entries(config).filter(
|
|
5151
|
+
([, item]) => item.theme ?? item.color
|
|
5152
|
+
);
|
|
5153
|
+
if (!colorConfig.length) {
|
|
5154
|
+
return null;
|
|
5155
|
+
}
|
|
5156
|
+
return /* @__PURE__ */ jsx38(
|
|
5157
|
+
"style",
|
|
5158
|
+
{
|
|
5159
|
+
dangerouslySetInnerHTML: {
|
|
5160
|
+
__html: Object.entries(THEMES).map(
|
|
5161
|
+
([theme, prefix]) => `
|
|
5162
|
+
${prefix} [data-chart=${id}] {
|
|
5163
|
+
${colorConfig.map(([key, itemConfig]) => {
|
|
5164
|
+
const color = itemConfig.theme?.[theme] ?? itemConfig.color;
|
|
5165
|
+
return color ? ` --color-${key}: ${color};` : null;
|
|
5166
|
+
}).filter(Boolean).join("\n")}
|
|
5167
|
+
}
|
|
5168
|
+
`
|
|
5169
|
+
).join("\n")
|
|
5170
|
+
}
|
|
5171
|
+
}
|
|
5172
|
+
);
|
|
5173
|
+
};
|
|
5174
|
+
var ChartTooltip = RechartsPrimitive.Tooltip;
|
|
5175
|
+
function ChartTooltipContent({
|
|
5176
|
+
active,
|
|
5177
|
+
payload,
|
|
5178
|
+
className,
|
|
5179
|
+
indicator = "dot",
|
|
5180
|
+
hideLabel = false,
|
|
5181
|
+
hideIndicator = false,
|
|
5182
|
+
label,
|
|
5183
|
+
labelFormatter,
|
|
5184
|
+
labelClassName,
|
|
5185
|
+
formatter,
|
|
5186
|
+
color,
|
|
5187
|
+
nameKey,
|
|
5188
|
+
labelKey
|
|
5189
|
+
}) {
|
|
5190
|
+
const { config } = useChart();
|
|
5191
|
+
const tooltipLabel = React14.useMemo(() => {
|
|
5192
|
+
if (hideLabel || !payload?.length) {
|
|
5193
|
+
return null;
|
|
5194
|
+
}
|
|
5195
|
+
const [item] = payload;
|
|
5196
|
+
const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`;
|
|
5197
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5198
|
+
const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
|
|
5199
|
+
if (labelFormatter) {
|
|
5200
|
+
return /* @__PURE__ */ jsx38("div", { className: cn("font-semibold text-default", labelClassName), children: labelFormatter(value, payload) });
|
|
5201
|
+
}
|
|
5202
|
+
if (!value) {
|
|
5203
|
+
return null;
|
|
5204
|
+
}
|
|
5205
|
+
return /* @__PURE__ */ jsx38("div", { className: cn("font-semibold text-default", labelClassName), children: value });
|
|
5206
|
+
}, [
|
|
5207
|
+
label,
|
|
5208
|
+
labelFormatter,
|
|
5209
|
+
payload,
|
|
5210
|
+
hideLabel,
|
|
5211
|
+
labelClassName,
|
|
5212
|
+
config,
|
|
5213
|
+
labelKey
|
|
5214
|
+
]);
|
|
5215
|
+
if (!active || !payload?.length) {
|
|
5216
|
+
return null;
|
|
5217
|
+
}
|
|
5218
|
+
const nestLabel = payload.length === 1 && indicator !== "dot";
|
|
5219
|
+
return /* @__PURE__ */ jsxs19(
|
|
5220
|
+
"div",
|
|
5221
|
+
{
|
|
5222
|
+
className: cn(
|
|
5223
|
+
"grid min-w-[8rem] items-start gap-1.5 rounded-xl border border-muted surface-default px-3 py-2.5 text-xs text-secondary shadow-lg",
|
|
5224
|
+
className
|
|
5225
|
+
),
|
|
5226
|
+
children: [
|
|
5227
|
+
!nestLabel ? tooltipLabel : null,
|
|
5228
|
+
/* @__PURE__ */ jsx38("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
5229
|
+
const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
|
|
5230
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5231
|
+
const indicatorColor = color ?? item.payload?.fill ?? item.color ?? (itemConfig && "color" in itemConfig ? itemConfig.color : void 0);
|
|
5232
|
+
return /* @__PURE__ */ jsx38(
|
|
5233
|
+
"div",
|
|
5234
|
+
{
|
|
5235
|
+
className: cn(
|
|
5236
|
+
"flex w-full flex-wrap items-stretch gap-1.5 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-secondary",
|
|
5237
|
+
indicator === "dot" && "items-center"
|
|
5238
|
+
),
|
|
5239
|
+
children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs19(Fragment, { children: [
|
|
5240
|
+
itemConfig?.icon ? /* @__PURE__ */ jsx38(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx38(
|
|
5241
|
+
"div",
|
|
5242
|
+
{
|
|
5243
|
+
className: cn(
|
|
5244
|
+
"shrink-0 border-(--color-border) bg-(--color-bg)",
|
|
5245
|
+
{
|
|
5246
|
+
"h-3.5 w-3.5 rounded-[4px]": indicator === "dot",
|
|
5247
|
+
"w-1 rounded-full": indicator === "line",
|
|
5248
|
+
"w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
|
|
5249
|
+
"my-0.5": nestLabel && indicator === "dashed"
|
|
5250
|
+
}
|
|
5251
|
+
),
|
|
5252
|
+
style: {
|
|
5253
|
+
"--color-bg": indicatorColor,
|
|
5254
|
+
"--color-border": indicatorColor
|
|
5255
|
+
}
|
|
5256
|
+
}
|
|
5257
|
+
),
|
|
5258
|
+
/* @__PURE__ */ jsxs19(
|
|
5259
|
+
"div",
|
|
5260
|
+
{
|
|
5261
|
+
className: cn(
|
|
5262
|
+
"flex flex-1 justify-between leading-none",
|
|
5263
|
+
nestLabel ? "items-end" : "items-center"
|
|
5264
|
+
),
|
|
5265
|
+
children: [
|
|
5266
|
+
/* @__PURE__ */ jsxs19("div", { className: "grid gap-1.5", children: [
|
|
5267
|
+
nestLabel ? tooltipLabel : null,
|
|
5268
|
+
/* @__PURE__ */ jsx38("span", { className: "text-secondary", children: itemConfig?.label ?? item.name })
|
|
5269
|
+
] }),
|
|
5270
|
+
item.value != null && /* @__PURE__ */ jsx38("span", { className: "ml-3 font-semibold text-default tabular-nums", children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value) })
|
|
5271
|
+
]
|
|
5272
|
+
}
|
|
5273
|
+
)
|
|
5274
|
+
] })
|
|
5275
|
+
},
|
|
5276
|
+
index
|
|
5277
|
+
);
|
|
5278
|
+
}) })
|
|
5279
|
+
]
|
|
5280
|
+
}
|
|
5281
|
+
);
|
|
5282
|
+
}
|
|
5283
|
+
var ChartLegend = RechartsPrimitive.Legend;
|
|
5284
|
+
function ChartLegendContent({
|
|
5285
|
+
className,
|
|
5286
|
+
hideIcon = false,
|
|
5287
|
+
payload,
|
|
5288
|
+
verticalAlign = "bottom",
|
|
5289
|
+
nameKey
|
|
5290
|
+
}) {
|
|
5291
|
+
const { config } = useChart();
|
|
5292
|
+
if (!payload?.length) {
|
|
5293
|
+
return null;
|
|
5294
|
+
}
|
|
5295
|
+
return /* @__PURE__ */ jsx38(
|
|
5296
|
+
"div",
|
|
5297
|
+
{
|
|
5298
|
+
className: cn(
|
|
5299
|
+
"flex items-center justify-center gap-4",
|
|
5300
|
+
verticalAlign === "top" ? "pb-3" : "pt-3",
|
|
5301
|
+
className
|
|
5302
|
+
),
|
|
5303
|
+
children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
5304
|
+
const key = `${nameKey ?? item.dataKey ?? "value"}`;
|
|
5305
|
+
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
5306
|
+
const indicatorColor = item.color ?? (itemConfig && "color" in itemConfig ? itemConfig.color : void 0);
|
|
5307
|
+
return /* @__PURE__ */ jsxs19(
|
|
5308
|
+
"div",
|
|
5309
|
+
{
|
|
5310
|
+
className: cn(
|
|
5311
|
+
"flex items-center gap-1.5 text-secondary [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-secondary"
|
|
5312
|
+
),
|
|
5313
|
+
children: [
|
|
5314
|
+
itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx38(itemConfig.icon, {}) : /* @__PURE__ */ jsx38(
|
|
5315
|
+
"div",
|
|
5316
|
+
{
|
|
5317
|
+
className: "h-2 w-2 shrink-0 rounded-[2px]",
|
|
5318
|
+
style: {
|
|
5319
|
+
backgroundColor: indicatorColor
|
|
5320
|
+
}
|
|
5321
|
+
}
|
|
5322
|
+
),
|
|
5323
|
+
itemConfig?.label
|
|
5324
|
+
]
|
|
5325
|
+
},
|
|
5326
|
+
index
|
|
5327
|
+
);
|
|
5328
|
+
})
|
|
5329
|
+
}
|
|
5330
|
+
);
|
|
5331
|
+
}
|
|
5332
|
+
function getPayloadConfigFromPayload(config, payload, key) {
|
|
5333
|
+
if (typeof payload !== "object" || payload === null) {
|
|
5334
|
+
return void 0;
|
|
5335
|
+
}
|
|
5336
|
+
const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
|
|
5337
|
+
let configLabelKey = key;
|
|
5338
|
+
if (key in payload && typeof payload[key] === "string") {
|
|
5339
|
+
configLabelKey = payload[key];
|
|
5340
|
+
} else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
|
|
5341
|
+
configLabelKey = payloadPayload[key];
|
|
5342
|
+
}
|
|
5343
|
+
return configLabelKey in config ? config[configLabelKey] : config[key];
|
|
5344
|
+
}
|
|
5345
|
+
|
|
5346
|
+
// src/components/ui/carousel.tsx
|
|
5347
|
+
import * as React15 from "react";
|
|
5348
|
+
import useEmblaCarousel from "embla-carousel-react";
|
|
5349
|
+
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
5350
|
+
var CarouselContext = React15.createContext(null);
|
|
5351
|
+
function useCarousel() {
|
|
5352
|
+
const context = React15.useContext(CarouselContext);
|
|
5353
|
+
if (!context) {
|
|
5354
|
+
throw new Error("useCarousel must be used within a <Carousel />");
|
|
5355
|
+
}
|
|
5356
|
+
return context;
|
|
5357
|
+
}
|
|
5358
|
+
function Carousel({
|
|
5359
|
+
opts,
|
|
5360
|
+
plugins,
|
|
5361
|
+
setApi,
|
|
5362
|
+
className,
|
|
5363
|
+
children,
|
|
5364
|
+
ref,
|
|
5365
|
+
...props
|
|
5366
|
+
}) {
|
|
5367
|
+
const [carouselRef, api] = useEmblaCarousel({ ...opts }, plugins);
|
|
5368
|
+
const [canScrollPrev, setCanScrollPrev] = React15.useState(false);
|
|
5369
|
+
const [canScrollNext, setCanScrollNext] = React15.useState(false);
|
|
5370
|
+
const onSelect = React15.useCallback((emblaApi) => {
|
|
5371
|
+
if (!emblaApi) return;
|
|
5372
|
+
setCanScrollPrev(emblaApi.canScrollPrev());
|
|
5373
|
+
setCanScrollNext(emblaApi.canScrollNext());
|
|
5374
|
+
}, []);
|
|
5375
|
+
const scrollPrev = React15.useCallback(() => {
|
|
5376
|
+
api?.scrollPrev();
|
|
5377
|
+
}, [api]);
|
|
5378
|
+
const scrollNext = React15.useCallback(() => {
|
|
5379
|
+
api?.scrollNext();
|
|
5380
|
+
}, [api]);
|
|
5381
|
+
const handleKeyDown = React15.useCallback(
|
|
5382
|
+
(event) => {
|
|
5383
|
+
if (event.key === "ArrowLeft") {
|
|
5384
|
+
event.preventDefault();
|
|
5385
|
+
scrollPrev();
|
|
5386
|
+
} else if (event.key === "ArrowRight") {
|
|
5387
|
+
event.preventDefault();
|
|
5388
|
+
scrollNext();
|
|
5389
|
+
}
|
|
5390
|
+
},
|
|
5391
|
+
[scrollPrev, scrollNext]
|
|
5392
|
+
);
|
|
5393
|
+
React15.useEffect(() => {
|
|
5394
|
+
if (!api || !setApi) return;
|
|
5395
|
+
setApi(api);
|
|
5396
|
+
}, [api, setApi]);
|
|
5397
|
+
React15.useEffect(() => {
|
|
5398
|
+
if (!api) return;
|
|
5399
|
+
onSelect(api);
|
|
5400
|
+
api.on("reInit", onSelect);
|
|
5401
|
+
api.on("select", onSelect);
|
|
5402
|
+
return () => {
|
|
5403
|
+
api.off("reInit", onSelect);
|
|
5404
|
+
api.off("select", onSelect);
|
|
5405
|
+
};
|
|
5406
|
+
}, [api, onSelect]);
|
|
5407
|
+
return /* @__PURE__ */ jsx39(
|
|
5408
|
+
CarouselContext.Provider,
|
|
5409
|
+
{
|
|
5410
|
+
value: {
|
|
5411
|
+
carouselRef,
|
|
5412
|
+
api,
|
|
5413
|
+
scrollPrev,
|
|
5414
|
+
scrollNext,
|
|
5415
|
+
canScrollPrev,
|
|
5416
|
+
canScrollNext
|
|
5417
|
+
},
|
|
5418
|
+
children: /* @__PURE__ */ jsx39(
|
|
5419
|
+
"div",
|
|
5420
|
+
{
|
|
5421
|
+
...props,
|
|
5422
|
+
ref,
|
|
5423
|
+
className: cn("flex items-center gap-4", className),
|
|
5424
|
+
role: "region",
|
|
5425
|
+
"aria-roledescription": "carousel",
|
|
5426
|
+
"data-slot": "carousel",
|
|
5427
|
+
tabIndex: 0,
|
|
5428
|
+
onKeyDownCapture: (event) => {
|
|
5429
|
+
props.onKeyDownCapture?.(event);
|
|
5430
|
+
handleKeyDown(event);
|
|
5431
|
+
},
|
|
5432
|
+
children
|
|
5433
|
+
}
|
|
5434
|
+
)
|
|
5435
|
+
}
|
|
5436
|
+
);
|
|
5437
|
+
}
|
|
5438
|
+
function CarouselContent({ className, ref, ...props }) {
|
|
5439
|
+
const { carouselRef } = useCarousel();
|
|
5440
|
+
return /* @__PURE__ */ jsx39(
|
|
5441
|
+
"div",
|
|
5442
|
+
{
|
|
5443
|
+
ref: carouselRef,
|
|
5444
|
+
className: "overflow-hidden flex-1 min-w-0",
|
|
5445
|
+
"data-slot": "carousel-viewport",
|
|
5446
|
+
children: /* @__PURE__ */ jsx39(
|
|
5447
|
+
"div",
|
|
5448
|
+
{
|
|
5449
|
+
ref,
|
|
5450
|
+
"data-slot": "carousel-content",
|
|
5451
|
+
className: cn("flex -ml-4", className),
|
|
5452
|
+
...props
|
|
5453
|
+
}
|
|
5454
|
+
)
|
|
5455
|
+
}
|
|
5456
|
+
);
|
|
5457
|
+
}
|
|
5458
|
+
function CarouselItem({
|
|
5459
|
+
className,
|
|
5460
|
+
index,
|
|
5461
|
+
total,
|
|
5462
|
+
"aria-label": ariaLabel,
|
|
5463
|
+
ref,
|
|
5464
|
+
...props
|
|
5465
|
+
}) {
|
|
5466
|
+
const label = ariaLabel ?? (index !== void 0 && total !== void 0 ? `Slide ${index + 1} of ${total}` : void 0);
|
|
5467
|
+
return /* @__PURE__ */ jsx39(
|
|
5468
|
+
"div",
|
|
5469
|
+
{
|
|
5470
|
+
ref,
|
|
5471
|
+
role: "group",
|
|
5472
|
+
"aria-roledescription": "slide",
|
|
5473
|
+
"aria-label": label,
|
|
5474
|
+
"data-slot": "carousel-item",
|
|
5475
|
+
className: cn("min-w-0 shrink-0 grow-0 basis-full pl-4", className),
|
|
5476
|
+
...props
|
|
5477
|
+
}
|
|
5478
|
+
);
|
|
5479
|
+
}
|
|
5480
|
+
function CarouselPrevious({
|
|
5481
|
+
className,
|
|
5482
|
+
variant = "default",
|
|
5483
|
+
size = "default",
|
|
5484
|
+
ref,
|
|
5485
|
+
...props
|
|
5486
|
+
}) {
|
|
5487
|
+
const { scrollPrev, canScrollPrev } = useCarousel();
|
|
5488
|
+
return /* @__PURE__ */ jsx39(
|
|
5489
|
+
Button,
|
|
5490
|
+
{
|
|
5491
|
+
ref,
|
|
5492
|
+
"data-slot": "carousel-previous",
|
|
5493
|
+
variant,
|
|
5494
|
+
size,
|
|
5495
|
+
className: cn("size-9 shrink-0 rounded-md", className),
|
|
5496
|
+
disabled: !canScrollPrev,
|
|
5497
|
+
onClick: scrollPrev,
|
|
5498
|
+
"aria-label": "Previous slide",
|
|
5499
|
+
...props,
|
|
5500
|
+
children: /* @__PURE__ */ jsx39(ArrowLeftIcon, { className: "size-4" })
|
|
5501
|
+
}
|
|
5502
|
+
);
|
|
5503
|
+
}
|
|
5504
|
+
function CarouselNext({
|
|
5505
|
+
className,
|
|
5506
|
+
variant = "default",
|
|
5507
|
+
size = "default",
|
|
5508
|
+
ref,
|
|
5509
|
+
...props
|
|
5510
|
+
}) {
|
|
5511
|
+
const { scrollNext, canScrollNext } = useCarousel();
|
|
5512
|
+
return /* @__PURE__ */ jsx39(
|
|
5513
|
+
Button,
|
|
5514
|
+
{
|
|
5515
|
+
ref,
|
|
5516
|
+
"data-slot": "carousel-next",
|
|
5517
|
+
variant,
|
|
5518
|
+
size,
|
|
5519
|
+
className: cn("size-9 shrink-0 rounded-md", className),
|
|
5520
|
+
disabled: !canScrollNext,
|
|
5521
|
+
onClick: scrollNext,
|
|
5522
|
+
"aria-label": "Next slide",
|
|
5523
|
+
...props,
|
|
5524
|
+
children: /* @__PURE__ */ jsx39(ArrowRightIcon, { className: "size-4" })
|
|
5525
|
+
}
|
|
5526
|
+
);
|
|
5527
|
+
}
|
|
5528
|
+
|
|
4059
5529
|
// src/components/ui/table.tsx
|
|
4060
|
-
import { jsx as
|
|
5530
|
+
import { jsx as jsx40 } from "react/jsx-runtime";
|
|
4061
5531
|
function Table({ className, ref, ...props }) {
|
|
4062
|
-
return /* @__PURE__ */
|
|
5532
|
+
return /* @__PURE__ */ jsx40(
|
|
4063
5533
|
"div",
|
|
4064
5534
|
{
|
|
4065
5535
|
"data-slot": "table-container",
|
|
4066
5536
|
className: "relative w-full overflow-x-auto",
|
|
4067
|
-
children: /* @__PURE__ */
|
|
5537
|
+
children: /* @__PURE__ */ jsx40(
|
|
4068
5538
|
"table",
|
|
4069
5539
|
{
|
|
4070
5540
|
ref,
|
|
@@ -4085,7 +5555,7 @@ function TableHeader({
|
|
|
4085
5555
|
ref,
|
|
4086
5556
|
...props
|
|
4087
5557
|
}) {
|
|
4088
|
-
return /* @__PURE__ */
|
|
5558
|
+
return /* @__PURE__ */ jsx40(
|
|
4089
5559
|
"thead",
|
|
4090
5560
|
{
|
|
4091
5561
|
ref,
|
|
@@ -4106,14 +5576,14 @@ function TableBody({
|
|
|
4106
5576
|
ref,
|
|
4107
5577
|
...props
|
|
4108
5578
|
}) {
|
|
4109
|
-
return /* @__PURE__ */
|
|
5579
|
+
return /* @__PURE__ */ jsx40("tbody", { ref, "data-slot": "table-body", className, ...props });
|
|
4110
5580
|
}
|
|
4111
5581
|
function TableFooter({
|
|
4112
5582
|
className,
|
|
4113
5583
|
ref,
|
|
4114
5584
|
...props
|
|
4115
5585
|
}) {
|
|
4116
|
-
return /* @__PURE__ */
|
|
5586
|
+
return /* @__PURE__ */ jsx40(
|
|
4117
5587
|
"tfoot",
|
|
4118
5588
|
{
|
|
4119
5589
|
ref,
|
|
@@ -4132,7 +5602,7 @@ function TableFooter({
|
|
|
4132
5602
|
);
|
|
4133
5603
|
}
|
|
4134
5604
|
function TableRow({ className, ref, ...props }) {
|
|
4135
|
-
return /* @__PURE__ */
|
|
5605
|
+
return /* @__PURE__ */ jsx40(
|
|
4136
5606
|
"tr",
|
|
4137
5607
|
{
|
|
4138
5608
|
ref,
|
|
@@ -4156,7 +5626,7 @@ function TableHead({
|
|
|
4156
5626
|
align = "left",
|
|
4157
5627
|
...props
|
|
4158
5628
|
}) {
|
|
4159
|
-
return /* @__PURE__ */
|
|
5629
|
+
return /* @__PURE__ */ jsx40(
|
|
4160
5630
|
"th",
|
|
4161
5631
|
{
|
|
4162
5632
|
ref,
|
|
@@ -4184,7 +5654,7 @@ function TableCell({
|
|
|
4184
5654
|
align = "left",
|
|
4185
5655
|
...props
|
|
4186
5656
|
}) {
|
|
4187
|
-
return /* @__PURE__ */
|
|
5657
|
+
return /* @__PURE__ */ jsx40(
|
|
4188
5658
|
"td",
|
|
4189
5659
|
{
|
|
4190
5660
|
ref,
|
|
@@ -4210,7 +5680,7 @@ function TableCaption({
|
|
|
4210
5680
|
ref,
|
|
4211
5681
|
...props
|
|
4212
5682
|
}) {
|
|
4213
|
-
return /* @__PURE__ */
|
|
5683
|
+
return /* @__PURE__ */ jsx40(
|
|
4214
5684
|
"caption",
|
|
4215
5685
|
{
|
|
4216
5686
|
ref,
|
|
@@ -4227,11 +5697,20 @@ function TableCaption({
|
|
|
4227
5697
|
);
|
|
4228
5698
|
}
|
|
4229
5699
|
|
|
5700
|
+
// src/components/ui/data-table/data-table.tsx
|
|
5701
|
+
import * as React16 from "react";
|
|
5702
|
+
import {
|
|
5703
|
+
useReactTable,
|
|
5704
|
+
getCoreRowModel,
|
|
5705
|
+
getSortedRowModel,
|
|
5706
|
+
getPaginationRowModel
|
|
5707
|
+
} from "@tanstack/react-table";
|
|
5708
|
+
|
|
4230
5709
|
// src/components/ui/data-table/data-table-view.tsx
|
|
4231
5710
|
import {
|
|
4232
5711
|
flexRender
|
|
4233
5712
|
} from "@tanstack/react-table";
|
|
4234
|
-
import { jsx as
|
|
5713
|
+
import { jsx as jsx41, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4235
5714
|
function DataTableView({
|
|
4236
5715
|
table,
|
|
4237
5716
|
emptyState = "No results.",
|
|
@@ -4240,15 +5719,15 @@ function DataTableView({
|
|
|
4240
5719
|
className,
|
|
4241
5720
|
...props
|
|
4242
5721
|
}) {
|
|
4243
|
-
return /* @__PURE__ */
|
|
5722
|
+
return /* @__PURE__ */ jsx41(
|
|
4244
5723
|
"div",
|
|
4245
5724
|
{
|
|
4246
5725
|
className: cn("relative", loading && "opacity-50 pointer-events-none"),
|
|
4247
5726
|
"aria-busy": loading || void 0,
|
|
4248
|
-
children: /* @__PURE__ */
|
|
4249
|
-
/* @__PURE__ */
|
|
5727
|
+
children: /* @__PURE__ */ jsxs20(Table, { className, ...props, children: [
|
|
5728
|
+
/* @__PURE__ */ jsx41(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx41(TableRow, { children: headerGroup.headers.map((header) => {
|
|
4250
5729
|
const sorted = header.column.getIsSorted();
|
|
4251
|
-
return /* @__PURE__ */
|
|
5730
|
+
return /* @__PURE__ */ jsx41(
|
|
4252
5731
|
TableHead,
|
|
4253
5732
|
{
|
|
4254
5733
|
colSpan: header.colSpan,
|
|
@@ -4261,21 +5740,21 @@ function DataTableView({
|
|
|
4261
5740
|
header.id
|
|
4262
5741
|
);
|
|
4263
5742
|
}) }, headerGroup.id)) }),
|
|
4264
|
-
/* @__PURE__ */
|
|
5743
|
+
/* @__PURE__ */ jsx41(TableBody, { children: table.getRowModel().rows.length > 0 ? table.getRowModel().rows.map((row) => {
|
|
4265
5744
|
const rowProps = getRowProps?.(row);
|
|
4266
|
-
return /* @__PURE__ */
|
|
5745
|
+
return /* @__PURE__ */ jsx41(
|
|
4267
5746
|
TableRow,
|
|
4268
5747
|
{
|
|
4269
5748
|
"data-state": row.getIsSelected() ? "selected" : void 0,
|
|
4270
5749
|
...rowProps,
|
|
4271
|
-
children: row.getVisibleCells().map((cell) => /* @__PURE__ */
|
|
5750
|
+
children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx41(TableCell, { children: flexRender(
|
|
4272
5751
|
cell.column.columnDef.cell,
|
|
4273
5752
|
cell.getContext()
|
|
4274
5753
|
) }, cell.id))
|
|
4275
5754
|
},
|
|
4276
5755
|
row.id
|
|
4277
5756
|
);
|
|
4278
|
-
}) : /* @__PURE__ */
|
|
5757
|
+
}) : /* @__PURE__ */ jsx41(TableRow, { children: /* @__PURE__ */ jsx41(
|
|
4279
5758
|
TableCell,
|
|
4280
5759
|
{
|
|
4281
5760
|
colSpan: table.getVisibleLeafColumns().length,
|
|
@@ -4289,7 +5768,7 @@ function DataTableView({
|
|
|
4289
5768
|
}
|
|
4290
5769
|
|
|
4291
5770
|
// src/components/ui/data-table/data-table-pagination.tsx
|
|
4292
|
-
import { jsx as
|
|
5771
|
+
import { jsx as jsx42, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4293
5772
|
function DataTablePagination({
|
|
4294
5773
|
table,
|
|
4295
5774
|
pageSizeOptions = [10, 20, 50, 100],
|
|
@@ -4301,7 +5780,7 @@ function DataTablePagination({
|
|
|
4301
5780
|
const from = totalRows > 0 ? pageIndex * pageSize + 1 : 0;
|
|
4302
5781
|
const to = Math.min((pageIndex + 1) * pageSize, totalRows);
|
|
4303
5782
|
const resolvedPageSizeOptions = pageSizeOptions.includes(pageSize) ? pageSizeOptions : [...pageSizeOptions, pageSize].sort((a, b) => a - b);
|
|
4304
|
-
return /* @__PURE__ */
|
|
5783
|
+
return /* @__PURE__ */ jsxs21(
|
|
4305
5784
|
"div",
|
|
4306
5785
|
{
|
|
4307
5786
|
className: cn(
|
|
@@ -4310,7 +5789,7 @@ function DataTablePagination({
|
|
|
4310
5789
|
),
|
|
4311
5790
|
...props,
|
|
4312
5791
|
children: [
|
|
4313
|
-
/* @__PURE__ */
|
|
5792
|
+
/* @__PURE__ */ jsx42(
|
|
4314
5793
|
Text,
|
|
4315
5794
|
{
|
|
4316
5795
|
variant: "body-sm",
|
|
@@ -4319,8 +5798,8 @@ function DataTablePagination({
|
|
|
4319
5798
|
children: totalRows > 0 ? `Showing ${from}\u2013${to} of ${totalRows}` : "No results"
|
|
4320
5799
|
}
|
|
4321
5800
|
),
|
|
4322
|
-
/* @__PURE__ */
|
|
4323
|
-
/* @__PURE__ */
|
|
5801
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-1", children: [
|
|
5802
|
+
/* @__PURE__ */ jsx42(
|
|
4324
5803
|
Button,
|
|
4325
5804
|
{
|
|
4326
5805
|
variant: "ghost",
|
|
@@ -4328,10 +5807,10 @@ function DataTablePagination({
|
|
|
4328
5807
|
onClick: () => table.firstPage(),
|
|
4329
5808
|
disabled: !table.getCanPreviousPage(),
|
|
4330
5809
|
"aria-label": "Go to first page",
|
|
4331
|
-
children: /* @__PURE__ */
|
|
5810
|
+
children: /* @__PURE__ */ jsx42(ArrowLeftIcon, { "aria-hidden": "true" })
|
|
4332
5811
|
}
|
|
4333
5812
|
),
|
|
4334
|
-
/* @__PURE__ */
|
|
5813
|
+
/* @__PURE__ */ jsx42(
|
|
4335
5814
|
Button,
|
|
4336
5815
|
{
|
|
4337
5816
|
variant: "ghost",
|
|
@@ -4339,11 +5818,11 @@ function DataTablePagination({
|
|
|
4339
5818
|
onClick: () => table.previousPage(),
|
|
4340
5819
|
disabled: !table.getCanPreviousPage(),
|
|
4341
5820
|
"aria-label": "Go to previous page",
|
|
4342
|
-
children: /* @__PURE__ */
|
|
5821
|
+
children: /* @__PURE__ */ jsx42(CaretLeftIcon, { "aria-hidden": "true" })
|
|
4343
5822
|
}
|
|
4344
5823
|
),
|
|
4345
|
-
/* @__PURE__ */
|
|
4346
|
-
/* @__PURE__ */
|
|
5824
|
+
/* @__PURE__ */ jsx42(Text, { as: "span", variant: "body-sm", className: "px-2 whitespace-nowrap", children: table.getPageCount() > 0 ? `Page ${pageIndex + 1} of ${table.getPageCount()}` : "No pages" }),
|
|
5825
|
+
/* @__PURE__ */ jsx42(
|
|
4347
5826
|
Button,
|
|
4348
5827
|
{
|
|
4349
5828
|
variant: "ghost",
|
|
@@ -4351,10 +5830,10 @@ function DataTablePagination({
|
|
|
4351
5830
|
onClick: () => table.nextPage(),
|
|
4352
5831
|
disabled: !table.getCanNextPage(),
|
|
4353
5832
|
"aria-label": "Go to next page",
|
|
4354
|
-
children: /* @__PURE__ */
|
|
5833
|
+
children: /* @__PURE__ */ jsx42(CaretRightIcon, { "aria-hidden": "true" })
|
|
4355
5834
|
}
|
|
4356
5835
|
),
|
|
4357
|
-
/* @__PURE__ */
|
|
5836
|
+
/* @__PURE__ */ jsx42(
|
|
4358
5837
|
Button,
|
|
4359
5838
|
{
|
|
4360
5839
|
variant: "ghost",
|
|
@@ -4362,12 +5841,12 @@ function DataTablePagination({
|
|
|
4362
5841
|
onClick: () => table.lastPage(),
|
|
4363
5842
|
disabled: !table.getCanNextPage(),
|
|
4364
5843
|
"aria-label": "Go to last page",
|
|
4365
|
-
children: /* @__PURE__ */
|
|
5844
|
+
children: /* @__PURE__ */ jsx42(ArrowRightIcon, { "aria-hidden": "true" })
|
|
4366
5845
|
}
|
|
4367
5846
|
)
|
|
4368
5847
|
] }),
|
|
4369
|
-
/* @__PURE__ */
|
|
4370
|
-
/* @__PURE__ */
|
|
5848
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
|
|
5849
|
+
/* @__PURE__ */ jsx42(
|
|
4371
5850
|
Text,
|
|
4372
5851
|
{
|
|
4373
5852
|
as: "span",
|
|
@@ -4376,14 +5855,14 @@ function DataTablePagination({
|
|
|
4376
5855
|
children: "Rows per page"
|
|
4377
5856
|
}
|
|
4378
5857
|
),
|
|
4379
|
-
/* @__PURE__ */
|
|
5858
|
+
/* @__PURE__ */ jsxs21(
|
|
4380
5859
|
Select,
|
|
4381
5860
|
{
|
|
4382
5861
|
value: pageSize.toString(),
|
|
4383
5862
|
onValueChange: (value) => table.setPageSize(Number(value)),
|
|
4384
5863
|
children: [
|
|
4385
|
-
/* @__PURE__ */
|
|
4386
|
-
/* @__PURE__ */
|
|
5864
|
+
/* @__PURE__ */ jsx42(SelectTrigger, { className: "h-8 w-[70px]", children: /* @__PURE__ */ jsx42(SelectValue, {}) }),
|
|
5865
|
+
/* @__PURE__ */ jsx42(SelectContent, { children: resolvedPageSizeOptions.map((size) => /* @__PURE__ */ jsx42(SelectItem, { value: size.toString(), children: size }, size)) })
|
|
4387
5866
|
]
|
|
4388
5867
|
}
|
|
4389
5868
|
)
|
|
@@ -4394,7 +5873,7 @@ function DataTablePagination({
|
|
|
4394
5873
|
}
|
|
4395
5874
|
|
|
4396
5875
|
// src/components/ui/data-table/data-table-column-header.tsx
|
|
4397
|
-
import { jsx as
|
|
5876
|
+
import { jsx as jsx43, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
4398
5877
|
function DataTableColumnHeader({
|
|
4399
5878
|
column,
|
|
4400
5879
|
title,
|
|
@@ -4402,7 +5881,7 @@ function DataTableColumnHeader({
|
|
|
4402
5881
|
...props
|
|
4403
5882
|
}) {
|
|
4404
5883
|
if (!column.getCanSort()) {
|
|
4405
|
-
return /* @__PURE__ */
|
|
5884
|
+
return /* @__PURE__ */ jsx43(
|
|
4406
5885
|
Text,
|
|
4407
5886
|
{
|
|
4408
5887
|
as: "div",
|
|
@@ -4414,9 +5893,9 @@ function DataTableColumnHeader({
|
|
|
4414
5893
|
);
|
|
4415
5894
|
}
|
|
4416
5895
|
const sorted = column.getIsSorted();
|
|
4417
|
-
return /* @__PURE__ */
|
|
4418
|
-
/* @__PURE__ */
|
|
4419
|
-
/* @__PURE__ */
|
|
5896
|
+
return /* @__PURE__ */ jsxs22("div", { className: cn("flex items-center gap-2", className), ...props, children: [
|
|
5897
|
+
/* @__PURE__ */ jsx43(Text, { as: "span", variant: "body-sm-medium", children: title }),
|
|
5898
|
+
/* @__PURE__ */ jsx43(
|
|
4420
5899
|
Button,
|
|
4421
5900
|
{
|
|
4422
5901
|
variant: "ghost",
|
|
@@ -4428,38 +5907,134 @@ function DataTableColumnHeader({
|
|
|
4428
5907
|
},
|
|
4429
5908
|
"aria-label": `Sort by ${title}`,
|
|
4430
5909
|
className: "text-secondary",
|
|
4431
|
-
children: sorted === "desc" ? /* @__PURE__ */
|
|
5910
|
+
children: sorted === "desc" ? /* @__PURE__ */ jsx43(CaretDownIcon, { "aria-hidden": "true" }) : sorted === "asc" ? /* @__PURE__ */ jsx43(CaretUpIcon, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx43(ArrowsDownUpIcon, { "aria-hidden": "true", size: 16 })
|
|
4432
5911
|
}
|
|
4433
5912
|
)
|
|
4434
5913
|
] });
|
|
4435
5914
|
}
|
|
4436
5915
|
|
|
5916
|
+
// src/components/ui/data-table/data-table.tsx
|
|
5917
|
+
import { jsx as jsx44, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
5918
|
+
function createSelectColumn() {
|
|
5919
|
+
return {
|
|
5920
|
+
id: "select",
|
|
5921
|
+
header: ({ table }) => /* @__PURE__ */ jsx44("div", { className: "flex items-center", children: /* @__PURE__ */ jsx44(
|
|
5922
|
+
Checkbox,
|
|
5923
|
+
{
|
|
5924
|
+
checked: table.getIsAllPageRowsSelected(),
|
|
5925
|
+
indeterminate: table.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected(),
|
|
5926
|
+
onCheckedChange: (checked) => table.toggleAllPageRowsSelected(!!checked),
|
|
5927
|
+
"aria-label": "Select all"
|
|
5928
|
+
}
|
|
5929
|
+
) }),
|
|
5930
|
+
cell: ({ row }) => /* @__PURE__ */ jsx44("div", { className: "flex items-center", children: /* @__PURE__ */ jsx44(
|
|
5931
|
+
Checkbox,
|
|
5932
|
+
{
|
|
5933
|
+
checked: row.getIsSelected(),
|
|
5934
|
+
onCheckedChange: (checked) => row.toggleSelected(!!checked),
|
|
5935
|
+
"aria-label": "Select row"
|
|
5936
|
+
}
|
|
5937
|
+
) }),
|
|
5938
|
+
enableSorting: false,
|
|
5939
|
+
enableHiding: false
|
|
5940
|
+
};
|
|
5941
|
+
}
|
|
5942
|
+
function DataTable({
|
|
5943
|
+
columns,
|
|
5944
|
+
data,
|
|
5945
|
+
getRowId,
|
|
5946
|
+
showPagination = true,
|
|
5947
|
+
pageSizeOptions,
|
|
5948
|
+
initialPageSize = 10,
|
|
5949
|
+
enableRowSelection = false,
|
|
5950
|
+
onRowSelectionChange: onRowSelectionChangeProp,
|
|
5951
|
+
enableSorting = true,
|
|
5952
|
+
emptyState,
|
|
5953
|
+
loading,
|
|
5954
|
+
...tableProps
|
|
5955
|
+
}) {
|
|
5956
|
+
const [sorting, setSorting] = React16.useState([]);
|
|
5957
|
+
const [rowSelection, setRowSelection] = React16.useState({});
|
|
5958
|
+
const handleRowSelectionChange = React16.useCallback(
|
|
5959
|
+
(updaterOrValue) => {
|
|
5960
|
+
const next = typeof updaterOrValue === "function" ? updaterOrValue(rowSelection) : updaterOrValue;
|
|
5961
|
+
setRowSelection(next);
|
|
5962
|
+
onRowSelectionChangeProp?.(next);
|
|
5963
|
+
},
|
|
5964
|
+
[rowSelection, onRowSelectionChangeProp]
|
|
5965
|
+
);
|
|
5966
|
+
const allColumns = React16.useMemo(
|
|
5967
|
+
() => enableRowSelection ? [createSelectColumn(), ...columns] : columns,
|
|
5968
|
+
[columns, enableRowSelection]
|
|
5969
|
+
);
|
|
5970
|
+
const resolvedColumns = React16.useMemo(
|
|
5971
|
+
() => enableSorting ? allColumns.map((col) => {
|
|
5972
|
+
if (col.id === "select" || col.id === "actions") return col;
|
|
5973
|
+
if (typeof col.header === "string") {
|
|
5974
|
+
const title = col.header;
|
|
5975
|
+
return {
|
|
5976
|
+
...col,
|
|
5977
|
+
header: ({ column }) => /* @__PURE__ */ jsx44(DataTableColumnHeader, { column, title })
|
|
5978
|
+
};
|
|
5979
|
+
}
|
|
5980
|
+
return col;
|
|
5981
|
+
}) : allColumns,
|
|
5982
|
+
[allColumns, enableSorting]
|
|
5983
|
+
);
|
|
5984
|
+
const table = useReactTable({
|
|
5985
|
+
data,
|
|
5986
|
+
columns: resolvedColumns,
|
|
5987
|
+
state: { sorting, rowSelection },
|
|
5988
|
+
onSortingChange: setSorting,
|
|
5989
|
+
onRowSelectionChange: enableRowSelection ? handleRowSelectionChange : void 0,
|
|
5990
|
+
getCoreRowModel: getCoreRowModel(),
|
|
5991
|
+
getSortedRowModel: enableSorting ? getSortedRowModel() : void 0,
|
|
5992
|
+
getPaginationRowModel: showPagination ? getPaginationRowModel() : void 0,
|
|
5993
|
+
getRowId,
|
|
5994
|
+
...showPagination && {
|
|
5995
|
+
initialState: { pagination: { pageSize: initialPageSize } }
|
|
5996
|
+
}
|
|
5997
|
+
});
|
|
5998
|
+
return /* @__PURE__ */ jsxs23("div", { children: [
|
|
5999
|
+
/* @__PURE__ */ jsx44(
|
|
6000
|
+
DataTableView,
|
|
6001
|
+
{
|
|
6002
|
+
table,
|
|
6003
|
+
emptyState,
|
|
6004
|
+
loading,
|
|
6005
|
+
...tableProps
|
|
6006
|
+
}
|
|
6007
|
+
),
|
|
6008
|
+
showPagination && /* @__PURE__ */ jsx44(DataTablePagination, { table, pageSizeOptions })
|
|
6009
|
+
] });
|
|
6010
|
+
}
|
|
6011
|
+
|
|
4437
6012
|
// src/components/ui/data-table/data-table-view-options.tsx
|
|
4438
|
-
import { jsx as
|
|
6013
|
+
import { jsx as jsx45, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
4439
6014
|
function DataTableViewOptions({
|
|
4440
6015
|
table,
|
|
4441
6016
|
...props
|
|
4442
6017
|
}) {
|
|
4443
|
-
return /* @__PURE__ */
|
|
4444
|
-
/* @__PURE__ */
|
|
6018
|
+
return /* @__PURE__ */ jsxs24(DropdownMenu, { children: [
|
|
6019
|
+
/* @__PURE__ */ jsx45(
|
|
4445
6020
|
DropdownMenuTrigger,
|
|
4446
6021
|
{
|
|
4447
|
-
render: /* @__PURE__ */
|
|
6022
|
+
render: /* @__PURE__ */ jsx45(
|
|
4448
6023
|
Button,
|
|
4449
6024
|
{
|
|
4450
6025
|
variant: "ghost",
|
|
4451
6026
|
size: "sm",
|
|
4452
6027
|
...props,
|
|
4453
6028
|
"aria-label": "Table options",
|
|
4454
|
-
children: /* @__PURE__ */
|
|
6029
|
+
children: /* @__PURE__ */ jsx45(CogIcon, { "aria-hidden": "true" })
|
|
4455
6030
|
}
|
|
4456
6031
|
)
|
|
4457
6032
|
}
|
|
4458
6033
|
),
|
|
4459
|
-
/* @__PURE__ */
|
|
4460
|
-
/* @__PURE__ */
|
|
4461
|
-
/* @__PURE__ */
|
|
4462
|
-
table.getAllColumns().filter((column) => column.getCanHide()).map((column) => /* @__PURE__ */
|
|
6034
|
+
/* @__PURE__ */ jsxs24(DropdownMenuContent, { align: "end", children: [
|
|
6035
|
+
/* @__PURE__ */ jsx45(DropdownMenuLabel, { children: "Toggle columns" }),
|
|
6036
|
+
/* @__PURE__ */ jsx45(DropdownMenuSeparator, {}),
|
|
6037
|
+
table.getAllColumns().filter((column) => column.getCanHide()).map((column) => /* @__PURE__ */ jsx45(
|
|
4463
6038
|
DropdownMenuCheckboxItem,
|
|
4464
6039
|
{
|
|
4465
6040
|
checked: column.getIsVisible(),
|
|
@@ -4528,6 +6103,16 @@ export {
|
|
|
4528
6103
|
CaretLeftIcon,
|
|
4529
6104
|
CaretRightIcon,
|
|
4530
6105
|
CaretUpIcon,
|
|
6106
|
+
Carousel,
|
|
6107
|
+
CarouselContent,
|
|
6108
|
+
CarouselItem,
|
|
6109
|
+
CarouselNext,
|
|
6110
|
+
CarouselPrevious,
|
|
6111
|
+
ChartContainer,
|
|
6112
|
+
ChartLegend,
|
|
6113
|
+
ChartLegendContent,
|
|
6114
|
+
ChartTooltip,
|
|
6115
|
+
ChartTooltipContent,
|
|
4531
6116
|
ChatIcon,
|
|
4532
6117
|
CheckIcon,
|
|
4533
6118
|
Checkbox,
|
|
@@ -4535,7 +6120,21 @@ export {
|
|
|
4535
6120
|
CheckmarkSquareIcon,
|
|
4536
6121
|
CloseIcon,
|
|
4537
6122
|
CogIcon,
|
|
6123
|
+
Combobox,
|
|
6124
|
+
ComboboxChip,
|
|
6125
|
+
ComboboxChips,
|
|
6126
|
+
ComboboxChipsInput,
|
|
6127
|
+
ComboboxContent,
|
|
6128
|
+
ComboboxEmpty,
|
|
6129
|
+
ComboboxGroup,
|
|
6130
|
+
ComboboxInput,
|
|
6131
|
+
ComboboxItem,
|
|
6132
|
+
ComboboxLabel,
|
|
6133
|
+
ComboboxList,
|
|
6134
|
+
ComboboxSeparator,
|
|
6135
|
+
ComboboxTrigger,
|
|
4538
6136
|
CredentialsIcon,
|
|
6137
|
+
DataTable,
|
|
4539
6138
|
DataTableColumnHeader,
|
|
4540
6139
|
DataTablePagination,
|
|
4541
6140
|
DataTableView,
|
|
@@ -4580,6 +6179,12 @@ export {
|
|
|
4580
6179
|
DropdownMenuSubTrigger,
|
|
4581
6180
|
DropdownMenuTrigger,
|
|
4582
6181
|
EditIcon,
|
|
6182
|
+
Empty,
|
|
6183
|
+
EmptyActions,
|
|
6184
|
+
EmptyContent,
|
|
6185
|
+
EmptyDescription,
|
|
6186
|
+
EmptyMedia,
|
|
6187
|
+
EmptyTitle,
|
|
4583
6188
|
EnvelopeIcon,
|
|
4584
6189
|
ExclamationIcon,
|
|
4585
6190
|
EyeClosedIcon,
|
|
@@ -4602,6 +6207,9 @@ export {
|
|
|
4602
6207
|
GraphPieIcon,
|
|
4603
6208
|
HamburgerMenuIcon,
|
|
4604
6209
|
HomeIcon,
|
|
6210
|
+
HoverCard,
|
|
6211
|
+
HoverCardContent,
|
|
6212
|
+
HoverCardTrigger,
|
|
4605
6213
|
InformationIcon,
|
|
4606
6214
|
Input,
|
|
4607
6215
|
InputGroup,
|
|
@@ -4638,6 +6246,9 @@ export {
|
|
|
4638
6246
|
PopoverTrigger,
|
|
4639
6247
|
PrintIcon,
|
|
4640
6248
|
QuestionCircleIcon,
|
|
6249
|
+
RadioGroup,
|
|
6250
|
+
RadioGroupCard,
|
|
6251
|
+
RadioGroupItem,
|
|
4641
6252
|
Select,
|
|
4642
6253
|
SelectContent,
|
|
4643
6254
|
SelectGroup,
|
|
@@ -4661,6 +6272,7 @@ export {
|
|
|
4661
6272
|
SidebarMenuButton,
|
|
4662
6273
|
SidebarMenuItem,
|
|
4663
6274
|
SidebarProvider,
|
|
6275
|
+
Slider,
|
|
4664
6276
|
StarIcon,
|
|
4665
6277
|
StatementIcon,
|
|
4666
6278
|
Switch,
|
|
@@ -4677,8 +6289,10 @@ export {
|
|
|
4677
6289
|
TabsContent,
|
|
4678
6290
|
TabsList,
|
|
4679
6291
|
TabsTrigger,
|
|
6292
|
+
Tag,
|
|
4680
6293
|
Text,
|
|
4681
6294
|
Textarea,
|
|
6295
|
+
Toaster,
|
|
4682
6296
|
Tooltip,
|
|
4683
6297
|
TooltipContent,
|
|
4684
6298
|
TooltipProvider,
|
|
@@ -4689,6 +6303,8 @@ export {
|
|
|
4689
6303
|
UserMultiIcon,
|
|
4690
6304
|
WarningIcon,
|
|
4691
6305
|
WrenchIcon,
|
|
6306
|
+
ZoomInIcon,
|
|
6307
|
+
ZoomOutIcon,
|
|
4692
6308
|
alertVariants,
|
|
4693
6309
|
avatarVariants,
|
|
4694
6310
|
badgeVariants,
|
|
@@ -4696,18 +6312,34 @@ export {
|
|
|
4696
6312
|
buttonGroupVariants,
|
|
4697
6313
|
buttonVariants,
|
|
4698
6314
|
checkboxVariants,
|
|
6315
|
+
cn,
|
|
6316
|
+
comboboxChipsVariants,
|
|
6317
|
+
comboboxInputVariants,
|
|
6318
|
+
createToaster,
|
|
6319
|
+
cva,
|
|
4699
6320
|
dropdownMenuItemVariants,
|
|
6321
|
+
emptyMediaVariants,
|
|
6322
|
+
emptyVariants,
|
|
4700
6323
|
inputGroupAddonVariants,
|
|
4701
6324
|
inputGroupButtonVariants,
|
|
4702
6325
|
inputGroupVariants,
|
|
4703
6326
|
inputVariants,
|
|
4704
6327
|
itemMediaVariants,
|
|
4705
6328
|
itemVariants,
|
|
6329
|
+
radioGroupVariants,
|
|
6330
|
+
radioItemVariants,
|
|
4706
6331
|
selectTriggerVariants,
|
|
4707
6332
|
switchVariants,
|
|
4708
6333
|
tabsListVariants,
|
|
4709
6334
|
tabsTriggerVariants,
|
|
6335
|
+
tagVariants,
|
|
4710
6336
|
textVariants,
|
|
6337
|
+
toast,
|
|
6338
|
+
toastManager,
|
|
4711
6339
|
uploadVariants,
|
|
6340
|
+
useCarousel,
|
|
6341
|
+
useChart,
|
|
6342
|
+
useComboboxAnchor,
|
|
6343
|
+
useComboboxFilter,
|
|
4712
6344
|
useSidebar
|
|
4713
6345
|
};
|