@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.mjs CHANGED
@@ -690,10 +690,110 @@ function ButtonGroupSeparator({
690
690
  );
691
691
  }
692
692
 
693
- // src/components/ui/text.tsx
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 textVariants = cva5("text-default", {
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__ */ jsx7(
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 jsx8 } from "react/jsx-runtime";
861
+ import { jsx as jsx9 } from "react/jsx-runtime";
762
862
  function Card({ className, size = "default", ref, ...props }) {
763
- return /* @__PURE__ */ jsx8(
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__ */ jsx8(
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__ */ jsx8(
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__ */ jsx8(
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__ */ jsx8(
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__ */ jsx8(
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__ */ jsx8(
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 cva6 } from "class-variance-authority";
861
- import { jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
862
- var selectTriggerVariants = cva6(
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__ */ jsx9("span", { className: "flex-1 truncate text-left", children }),
915
- /* @__PURE__ */ jsx9(
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__ */ jsx9(CaretDownIcon, { size: 16, className: "text-secondary" })
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__ */ jsx9(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx9(
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__ */ jsx9(SelectScrollUpButton, {}),
960
- /* @__PURE__ */ jsx9(SelectPrimitive.List, { className: "p-[var(--3xs,2px)] overflow-y-auto max-h-[inherit]", children }),
961
- /* @__PURE__ */ jsx9(SelectScrollDownButton, {})
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 SelectLabel({ className, ref, ...props }) {
969
- return /* @__PURE__ */ jsx9(
970
- SelectPrimitive.GroupLabel,
1479
+ function ComboboxLabel({
1480
+ className,
1481
+ ...props
1482
+ }) {
1483
+ return /* @__PURE__ */ jsx11(
1484
+ ComboboxPrimitive.GroupLabel,
971
1485
  {
972
- ref,
1486
+ "data-slot": "combobox-label",
973
1487
  className: cn(
974
- "text-secondary type-label-xs-semibold py-[5.5px] px-2",
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 SelectItem({
1495
+ function ComboboxEmpty({
982
1496
  className,
983
- children,
984
- label,
985
- ref,
986
1497
  ...props
987
1498
  }) {
988
- return /* @__PURE__ */ jsx9(
989
- SelectPrimitive.Item,
1499
+ return /* @__PURE__ */ jsx11(
1500
+ "div",
990
1501
  {
991
- ref,
992
- label: label ?? (typeof children === "string" ? children : void 0),
1502
+ "data-slot": "combobox-empty",
1503
+ role: "status",
993
1504
  className: cn(
994
- "relative flex w-full cursor-pointer select-none items-center",
995
- "min-h-8 px-2 py-[5.5px] rounded-md",
996
- "type-body-sm-regular outline-none transition-colors text-default",
997
- "data-[highlighted]:interactive-hover",
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 SelectSeparator({
1515
+ function ComboboxSeparator({
1009
1516
  className,
1010
- ref,
1011
1517
  ...props
1012
1518
  }) {
1013
- return /* @__PURE__ */ jsx9(
1014
- "div",
1519
+ return /* @__PURE__ */ jsx11(
1520
+ ComboboxPrimitive.Separator,
1015
1521
  {
1016
- ref,
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
- function SelectScrollUpButton({
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
- ref,
1568
+ children,
1569
+ size,
1570
+ showTrigger = true,
1571
+ disabled = false,
1029
1572
  ...props
1030
1573
  }) {
1031
- return /* @__PURE__ */ jsx9(
1032
- SelectPrimitive.ScrollUpArrow,
1574
+ return /* @__PURE__ */ jsxs4(
1575
+ ComboboxPrimitive.Chips,
1033
1576
  {
1034
- ref,
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
- "flex cursor-default items-center justify-center py-1 text-secondary",
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: /* @__PURE__ */ jsx9(CaretUpIcon, { size: 14 })
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 SelectScrollDownButton({
1622
+ function ComboboxChipsInput({
1045
1623
  className,
1046
- ref,
1047
1624
  ...props
1048
1625
  }) {
1049
- return /* @__PURE__ */ jsx9(
1050
- SelectPrimitive.ScrollDownArrow,
1626
+ return /* @__PURE__ */ jsx11(
1627
+ ComboboxPrimitive.Input,
1051
1628
  {
1052
- ref,
1629
+ "data-slot": "combobox-chip-input",
1053
1630
  className: cn(
1054
- "flex cursor-default items-center justify-center py-1 text-secondary",
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 cva7 } from "class-variance-authority";
1644
+ import { cva as cva9 } from "class-variance-authority";
1066
1645
 
1067
1646
  // src/components/ui/label.tsx
1068
- import { jsx as jsx10 } from "react/jsx-runtime";
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__ */ jsx10(
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 jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
1662
+ import { jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
1084
1663
  function FieldSet({ className, ...props }) {
1085
- return /* @__PURE__ */ jsx11(
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__ */ jsx11(
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__ */ jsx11(
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 = cva7(
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__ */ jsx11(
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__ */ jsx11(
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__ */ jsx11(
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__ */ jsx11(
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__ */ jsx11(
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__ */ jsxs3(
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__ */ jsx11(Separator, { className: "absolute inset-0 top-1/2" }),
1246
- children && /* @__PURE__ */ jsx11(
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__ */ jsx11("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: errors.map(
1275
- (error, index) => error?.message && /* @__PURE__ */ jsx11("li", { children: error.message }, index)
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__ */ jsx11(
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 React4 from "react";
1873
+ import * as React6 from "react";
1295
1874
  import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
1296
- import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
1297
- var DialogChromeContext = React4.createContext(null);
1875
+ import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
1876
+ var DialogChromeContext = React6.createContext(null);
1298
1877
  function useDialogChrome() {
1299
- return React4.useContext(DialogChromeContext) ?? { showCloseButton: false };
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__ */ jsxs4(
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__ */ jsx12(CloseIcon, { size: 16, "aria-hidden": "true" }),
1319
- /* @__PURE__ */ jsx12("span", { className: "sr-only", children: "Close" })
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__ */ jsx12(
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__ */ jsxs4(DialogPrimitive.Portal, { children: [
1350
- /* @__PURE__ */ jsx12(DialogOverlay, {}),
1351
- /* @__PURE__ */ jsx12(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__ */ jsx12(
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__ */ jsx12(DialogChromeContext, { value: { showCloseButton }, children })
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__ */ jsx12(
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__ */ jsx12(
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__ */ jsxs4(
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__ */ jsx12("div", { className: "flex min-w-0 flex-col gap-1", children }),
1413
- showCloseButton ? /* @__PURE__ */ jsx12(DialogCloseControl, {}) : null
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__ */ jsx12(
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__ */ jsx12(
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 React5 from "react";
2024
+ import * as React7 from "react";
1446
2025
  import { Drawer as DrawerPrimitive } from "vaul";
1447
- import { jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
1448
- var Drawer = DrawerPrimitive.Root;
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 = React5.forwardRef(
1453
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
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 = React5.forwardRef(
1465
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(DrawerPortal, { children: [
1466
- /* @__PURE__ */ jsx13(DrawerOverlay, {}),
1467
- /* @__PURE__ */ jsxs5(
1468
- DrawerPrimitive.Content,
1469
- {
1470
- ref,
1471
- "data-slot": "drawer-content",
1472
- className: cn(
1473
- "group/drawer-content fixed z-50 flex h-auto flex-col surface-default shadow-lg outline-none",
1474
- // Bottom — slides up from the bottom edge
1475
- "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=bottom]:border-default",
1476
- // Top slides down from the top edge
1477
- "data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=top]:border-default",
1478
- // Left slides in from the left edge
1479
- "data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:h-full data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:border-default data-[vaul-drawer-direction=left]:sm:max-w-sm",
1480
- // Right — slides in from the right edge
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
- children
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 = React5.forwardRef(
1501
- ({ className, children, ...props }, ref) => /* @__PURE__ */ jsx13("div", { className: "shrink-0 p-4", children: /* @__PURE__ */ jsx13(
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 = React5.forwardRef(
1514
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
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 = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
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 = React5.forwardRef(
1539
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx13(
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 jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
2138
+ import { jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
1558
2139
  function Breadcrumb({ className, ref, ...props }) {
1559
- return /* @__PURE__ */ jsx14(
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__ */ jsx14(
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__ */ jsx14(
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__ */ jsx14(
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__ */ jsx14(
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__ */ jsx14(CaretRightIcon, { className: "text-current cn-rtl-flip" })
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__ */ jsxs6(
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__ */ jsx14(MoreMenuIcon, { className: "text-current" }),
1668
- /* @__PURE__ */ jsx14("span", { className: "sr-only", children: "More" })
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 jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
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__ */ jsx15(TooltipPrimitive.Provider, { delay, ...props });
2262
+ return /* @__PURE__ */ jsx17(TooltipPrimitive.Provider, { delay, ...props });
1682
2263
  }
1683
2264
  function Tooltip({ ...props }) {
1684
- return /* @__PURE__ */ jsx15(TooltipPrimitive.Root, { ...props });
2265
+ return /* @__PURE__ */ jsx17(TooltipPrimitive.Root, { ...props });
1685
2266
  }
1686
2267
  function TooltipTrigger({ ...props }) {
1687
- return /* @__PURE__ */ jsx15(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
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__ */ jsx15(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx15(
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__ */ jsxs7(
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__ */ jsx15(
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 jsx16 } from "react/jsx-runtime";
2605
+ import { jsx as jsx20 } from "react/jsx-runtime";
1758
2606
  function Popover({ ...props }) {
1759
- return /* @__PURE__ */ jsx16(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
2607
+ return /* @__PURE__ */ jsx20(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
1760
2608
  }
1761
2609
  function PopoverTrigger({ ...props }) {
1762
- return /* @__PURE__ */ jsx16(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
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__ */ jsx16(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx16(
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__ */ jsx16(
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__ */ jsx16(
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__ */ jsx16(
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__ */ jsx16(
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 React6 from "react";
1838
- import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
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 = React6.createContext(null);
2691
+ var SidebarContext = React8.createContext(null);
1844
2692
  function useSidebar() {
1845
- const context = React6.useContext(SidebarContext);
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] = React6.useState(defaultOpen);
2709
+ const [_open, _setOpen] = React8.useState(defaultOpen);
1862
2710
  const open = openProp ?? _open;
1863
- const setOpen = React6.useCallback(
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 = React6.useCallback(() => {
2722
+ const toggleSidebar = React8.useCallback(() => {
1875
2723
  return setOpen((open2) => !open2);
1876
2724
  }, [setOpen]);
1877
2725
  const state = open ? "expanded" : "collapsed";
1878
- const contextValue = React6.useMemo(
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__ */ jsx17(SidebarContext, { value: contextValue, children: /* @__PURE__ */ jsx17(
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__ */ jsxs8(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(
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__ */ jsx17(TooltipProvider, { delay: 0, children: /* @__PURE__ */ jsxs8(Tooltip, { children: [
2088
- /* @__PURE__ */ jsx17(TooltipTrigger, { render: button }),
2089
- /* @__PURE__ */ jsx17(TooltipContent, { side: "right", align: "center", ...tooltipProps })
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 React7 from "react";
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 jsx18 } from "react/jsx-runtime";
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__ */ jsx18(
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__ */ jsx18(
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__ */ jsx18(
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__ */ jsx18(
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__ */ jsx18(
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__ */ jsx18(CalendarDayButton, { locale, ...dayButtonProps }),
2256
- WeekNumber: ({ children, ...weekNumberProps }) => /* @__PURE__ */ jsx18("td", { ...weekNumberProps, children: /* @__PURE__ */ jsx18("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }),
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 = React7.useRef(null);
2271
- React7.useEffect(() => {
3118
+ const ref = React9.useRef(null);
3119
+ React9.useEffect(() => {
2272
3120
  if (modifiers.focused) ref.current?.focus();
2273
3121
  }, [modifiers.focused]);
2274
- return /* @__PURE__ */ jsx18(
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 React8 from "react";
2310
- import { jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
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__ */ jsxs9(
3167
+ return /* @__PURE__ */ jsxs12(
2320
3168
  PopoverTrigger,
2321
3169
  {
2322
3170
  disabled,
2323
- render: /* @__PURE__ */ jsx19(
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__ */ jsx19(
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__ */ jsx19("span", { className: "truncate", children: label ?? placeholder })
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] = React8.useState(defaultValue);
2374
- const isControlled = React8.useRef("value" in props).current;
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__ */ jsxs9(Popover, { children: [
2386
- /* @__PURE__ */ jsx19(
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__ */ jsx19(PopoverContent, { className: "w-auto p-0", align: "center", children: /* @__PURE__ */ jsx19(
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 React9 from "react";
2416
- import { cva as cva8 } from "class-variance-authority";
2417
- import { jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
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 = cva8(
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 = React9.useRef(null);
2455
- const [isDragOver, setIsDragOver] = React9.useState(false);
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__ */ jsxs10(
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__ */ jsxs10("div", { className: "space-y-4", children: [
2526
- /* @__PURE__ */ jsx20(Text, { variant: "h5", children: "Upload fail" }),
2527
- /* @__PURE__ */ jsx20(Text, { variant: "body-md", className: "text-error", children: errorMessage })
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__ */ jsx20(
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__ */ jsxs10(
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__ */ jsx20(Text, { variant: "h5", className: "text-default", children: "Uploading files" }),
2550
- /* @__PURE__ */ jsxs10("div", { className: "w-full max-w-[720px] space-y-2", children: [
2551
- /* @__PURE__ */ jsx20("div", { className: "w-full surface-secondary rounded-full h-2", children: /* @__PURE__ */ jsx20(
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__ */ jsxs10(Text, { variant: "body-sm", className: "text-secondary text-center", children: [
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__ */ jsx20(
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__ */ jsxs10("div", { className: "space-y-4", children: [
2573
- /* @__PURE__ */ jsx20(Text, { variant: "h5", className: "text-success", children: "Upload successful!" }),
2574
- selectedFiles.length > 0 && /* @__PURE__ */ jsx20("div", { className: "text-center", children: selectedFiles.map((file, index) => /* @__PURE__ */ jsx20(Text, { variant: "body-sm", children: file.name }, index)) })
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__ */ jsxs10(
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__ */ jsxs10("div", { className: "space-y-4", children: [
2586
- /* @__PURE__ */ jsx20(Text, { variant: "h5", className: "text-default", children: "Drag & drop files here" }),
2587
- /* @__PURE__ */ jsx20(Text, { variant: "body-md", className: "text-secondary", children: "or click to browse from your computer" })
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__ */ jsx20(
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__ */ jsxs10(Text, { variant: "body-sm", className: "text-secondary", children: [
3451
+ /* @__PURE__ */ jsxs13(Text, { variant: "body-sm", className: "text-secondary", children: [
2604
3452
  "Supported file: ",
2605
3453
  getFileTypeDisplay(),
2606
- /* @__PURE__ */ jsx20("br", {}),
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__ */ jsxs10(
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__ */ jsx20(
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 cva9 } from "class-variance-authority";
2655
- import { jsx as jsx21 } from "react/jsx-runtime";
2656
- var avatarVariants = cva9(
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__ */ jsx21(
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__ */ jsx21(
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__ */ jsx21(
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__ */ jsx21(
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__ */ jsx21(
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 cva10 } from "class-variance-authority";
2784
- import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
2785
- var checkboxVariants = cva10([
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__ */ jsx22(
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__ */ jsxs11(
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__ */ jsx22(
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__ */ jsx22(
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 cva11 } from "class-variance-authority";
2847
- import { jsx as jsx23 } from "react/jsx-runtime";
2848
- var switchVariants = cva11(
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 = cva11(
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__ */ jsx23(
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__ */ jsx23(
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 cva12 } from "class-variance-authority";
2898
- import { jsx as jsx24 } from "react/jsx-runtime";
2899
- var inputVariants = cva12(
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__ */ jsx24(
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 jsx25 } from "react/jsx-runtime";
4034
+ import { jsx as jsx31 } from "react/jsx-runtime";
2950
4035
  function Textarea({ className, style, ref, ...props }) {
2951
- return /* @__PURE__ */ jsx25(
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 cva13 } from "class-variance-authority";
2967
- import { jsx as jsx26 } from "react/jsx-runtime";
2968
- var inputGroupVariants = cva13(
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__ */ jsx26(
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 = cva13(
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__ */ jsx26(
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 = cva13("shadow-none py-0", {
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__ */ jsx26(
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__ */ jsx26(
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__ */ jsx26(
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__ */ jsx26(
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/badge.tsx
3152
- import * as React10 from "react";
3153
- import { cva as cva14 } from "class-variance-authority";
3154
- import { jsxs as jsxs12 } from "react/jsx-runtime";
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 gap-1",
3159
- // Size
3160
- "h-6 px-2",
3161
- // Text
3162
- "whitespace-nowrap type-label-xs-medium",
3163
- // Shape
3164
- "rounded-md",
3165
- // Transitions
3166
- "transition-colors",
3167
- // Focus — flush ring, no gap
3168
- "focus-visible:outline-none",
3169
- "focus-visible:ring-2 focus-visible:ring-focus-default",
3170
- // Icons
3171
- "[&_svg]:pointer-events-none [&_svg]:size-3 [&_svg]:shrink-0"
3172
- ],
3173
- {
3174
- variants: {
3175
- variant: {
3176
- primary: ["interactive-accent interactive-accent-fg"],
3177
- secondary: ["interactive-secondary interactive-secondary-fg"],
3178
- outline: [
3179
- "interactive-default interactive-default-fg",
3180
- "border border-default"
3181
- ],
3182
- ghost: ["interactive-default interactive-default-fg"],
3183
- urgent: [
3184
- "interactive-destructive interactive-destructive-fg",
3185
- // Focus
3186
- "focus-visible:ring-3 focus-visible:ring-focus-error"
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
- children: [
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 jsx27, jsxs as jsxs13 } from "react/jsx-runtime";
4280
+ import { jsx as jsx34, jsxs as jsxs17 } from "react/jsx-runtime";
3258
4281
  function AlertDialog({ ...props }) {
3259
- return /* @__PURE__ */ jsx27(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
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__ */ jsx27(
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__ */ jsx27(
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__ */ jsxs13(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", children: [
3302
- /* @__PURE__ */ jsx27(AlertDialogOverlay, {}),
3303
- /* @__PURE__ */ jsx27(
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__ */ jsx27(
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__ */ jsx27(
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__ */ jsx27(
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__ */ jsx27(
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__ */ jsx27(
4433
+ return /* @__PURE__ */ jsx34(
3411
4434
  AlertDialogPrimitive.Close,
3412
4435
  {
3413
4436
  ref,
3414
4437
  "data-slot": "alert-dialog-action",
3415
- render: /* @__PURE__ */ jsx27(Button, { variant, size }),
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__ */ jsx27(
4451
+ return /* @__PURE__ */ jsx34(
3429
4452
  AlertDialogPrimitive.Close,
3430
4453
  {
3431
4454
  ref,
3432
4455
  "data-slot": "alert-dialog-cancel",
3433
- render: /* @__PURE__ */ jsx27(Button, { variant, size }),
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 React11 from "react";
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 cva15 } from "class-variance-authority";
3445
- import { jsx as jsx28 } from "react/jsx-runtime";
3446
- var ItemGroupContext = React11.createContext(false);
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__ */ jsx28(ItemGroupContext, { value: true, children: /* @__PURE__ */ jsx28(
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__ */ jsx28(
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 = cva15(
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 = React11.useContext(ItemGroupContext);
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 = cva15(
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__ */ jsx28(
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__ */ jsx28(
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__ */ jsx28(
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__ */ jsx28(
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__ */ jsx28(
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__ */ jsx28(
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__ */ jsx28(
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 cva16 } from "class-variance-authority";
3653
- import { jsx as jsx29 } from "react/jsx-runtime";
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__ */ jsx29(
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 = cva16(
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__ */ jsx29(
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 = cva16(
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__ */ jsx29(
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__ */ jsx29(
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 cva17 } from "class-variance-authority";
3789
- import { jsx as jsx30, jsxs as jsxs14 } from "react/jsx-runtime";
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__ */ jsx30(
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__ */ jsx30(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx30(
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__ */ jsx30(
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__ */ jsxs14(
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__ */ jsx30(ArrowRightIcon, { size: 16, className: "ml-auto text-secondary" })
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__ */ jsx30(
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 = cva17(
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__ */ jsx30(
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__ */ jsxs14(
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__ */ jsx30("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx30(MenuPrimitive.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx30(CheckmarkIcon, { size: 16 }) }) }),
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__ */ jsxs14(
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__ */ jsx30("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx30("span", { className: "hidden size-2 rounded-full bg-[var(--color-interactive-accent)] group-data-[checked]:block" }) })
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__ */ jsx30(
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__ */ jsx30(
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__ */ jsx30(
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 jsx31 } from "react/jsx-runtime";
5530
+ import { jsx as jsx40 } from "react/jsx-runtime";
4061
5531
  function Table({ className, ref, ...props }) {
4062
- return /* @__PURE__ */ jsx31(
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__ */ jsx31(
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__ */ jsx31(
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__ */ jsx31("tbody", { ref, "data-slot": "table-body", className, ...props });
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__ */ jsx31(
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__ */ jsx31(
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__ */ jsx31(
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__ */ jsx31(
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__ */ jsx31(
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 jsx32, jsxs as jsxs15 } from "react/jsx-runtime";
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__ */ jsx32(
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__ */ jsxs15(Table, { className, ...props, children: [
4249
- /* @__PURE__ */ jsx32(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx32(TableRow, { children: headerGroup.headers.map((header) => {
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__ */ jsx32(
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__ */ jsx32(TableBody, { children: table.getRowModel().rows.length > 0 ? table.getRowModel().rows.map((row) => {
5743
+ /* @__PURE__ */ jsx41(TableBody, { children: table.getRowModel().rows.length > 0 ? table.getRowModel().rows.map((row) => {
4265
5744
  const rowProps = getRowProps?.(row);
4266
- return /* @__PURE__ */ jsx32(
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__ */ jsx32(TableCell, { children: flexRender(
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__ */ jsx32(TableRow, { children: /* @__PURE__ */ jsx32(
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 jsx33, jsxs as jsxs16 } from "react/jsx-runtime";
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__ */ jsxs16(
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__ */ jsx33(
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__ */ jsxs16("div", { className: "flex items-center gap-1", children: [
4323
- /* @__PURE__ */ jsx33(
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__ */ jsx33(ArrowLeftIcon, { "aria-hidden": "true" })
5810
+ children: /* @__PURE__ */ jsx42(ArrowLeftIcon, { "aria-hidden": "true" })
4332
5811
  }
4333
5812
  ),
4334
- /* @__PURE__ */ jsx33(
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__ */ jsx33(CaretLeftIcon, { "aria-hidden": "true" })
5821
+ children: /* @__PURE__ */ jsx42(CaretLeftIcon, { "aria-hidden": "true" })
4343
5822
  }
4344
5823
  ),
4345
- /* @__PURE__ */ jsx33(Text, { as: "span", variant: "body-sm", className: "px-2 whitespace-nowrap", children: table.getPageCount() > 0 ? `Page ${pageIndex + 1} of ${table.getPageCount()}` : "No pages" }),
4346
- /* @__PURE__ */ jsx33(
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__ */ jsx33(CaretRightIcon, { "aria-hidden": "true" })
5833
+ children: /* @__PURE__ */ jsx42(CaretRightIcon, { "aria-hidden": "true" })
4355
5834
  }
4356
5835
  ),
4357
- /* @__PURE__ */ jsx33(
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__ */ jsx33(ArrowRightIcon, { "aria-hidden": "true" })
5844
+ children: /* @__PURE__ */ jsx42(ArrowRightIcon, { "aria-hidden": "true" })
4366
5845
  }
4367
5846
  )
4368
5847
  ] }),
4369
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
4370
- /* @__PURE__ */ jsx33(
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__ */ jsxs16(
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__ */ jsx33(SelectTrigger, { className: "h-8 w-[70px]", children: /* @__PURE__ */ jsx33(SelectValue, {}) }),
4386
- /* @__PURE__ */ jsx33(SelectContent, { children: resolvedPageSizeOptions.map((size) => /* @__PURE__ */ jsx33(SelectItem, { value: size.toString(), children: size }, size)) })
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 jsx34, jsxs as jsxs17 } from "react/jsx-runtime";
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__ */ jsx34(
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__ */ jsxs17("div", { className: cn("flex items-center gap-2", className), ...props, children: [
4418
- /* @__PURE__ */ jsx34(Text, { as: "span", variant: "body-sm-medium", children: title }),
4419
- /* @__PURE__ */ jsx34(
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__ */ jsx34(CaretDownIcon, { "aria-hidden": "true" }) : sorted === "asc" ? /* @__PURE__ */ jsx34(CaretUpIcon, { "aria-hidden": "true" }) : /* @__PURE__ */ jsx34(ArrowsDownUpIcon, { "aria-hidden": "true", size: 16 })
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 jsx35, jsxs as jsxs18 } from "react/jsx-runtime";
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__ */ jsxs18(DropdownMenu, { children: [
4444
- /* @__PURE__ */ jsx35(
6018
+ return /* @__PURE__ */ jsxs24(DropdownMenu, { children: [
6019
+ /* @__PURE__ */ jsx45(
4445
6020
  DropdownMenuTrigger,
4446
6021
  {
4447
- render: /* @__PURE__ */ jsx35(
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__ */ jsx35(CogIcon, { "aria-hidden": "true" })
6029
+ children: /* @__PURE__ */ jsx45(CogIcon, { "aria-hidden": "true" })
4455
6030
  }
4456
6031
  )
4457
6032
  }
4458
6033
  ),
4459
- /* @__PURE__ */ jsxs18(DropdownMenuContent, { align: "end", children: [
4460
- /* @__PURE__ */ jsx35(DropdownMenuLabel, { children: "Toggle columns" }),
4461
- /* @__PURE__ */ jsx35(DropdownMenuSeparator, {}),
4462
- table.getAllColumns().filter((column) => column.getCanHide()).map((column) => /* @__PURE__ */ jsx35(
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
  };