@evinvest/uikit 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -266,6 +266,53 @@ function useRovingFocus(opts) {
266
266
  return { activeIndex, setActiveIndex, onKeyDown };
267
267
  }
268
268
 
269
+ // src/primitives/use-hover-intent.ts
270
+ import * as React9 from "react";
271
+ function useHoverIntent(opts) {
272
+ const { onOpen, onClose, openDelay = 500, closeDelay = 0 } = opts;
273
+ const openRef = React9.useRef(onOpen);
274
+ const closeRef = React9.useRef(onClose);
275
+ React9.useEffect(() => {
276
+ openRef.current = onOpen;
277
+ closeRef.current = onClose;
278
+ });
279
+ const timer = React9.useRef(null);
280
+ const clear = React9.useCallback(() => {
281
+ if (timer.current != null) {
282
+ clearTimeout(timer.current);
283
+ timer.current = null;
284
+ }
285
+ }, []);
286
+ React9.useEffect(() => clear, [clear]);
287
+ const onPointerEnter = React9.useCallback(
288
+ (event) => {
289
+ if (event.pointerType !== "mouse") return;
290
+ clear();
291
+ timer.current = setTimeout(() => {
292
+ timer.current = null;
293
+ openRef.current();
294
+ }, openDelay);
295
+ },
296
+ [clear, openDelay]
297
+ );
298
+ const onPointerLeave = React9.useCallback(
299
+ (event) => {
300
+ if (event.pointerType !== "mouse") return;
301
+ clear();
302
+ if (closeDelay > 0) {
303
+ timer.current = setTimeout(() => {
304
+ timer.current = null;
305
+ closeRef.current();
306
+ }, closeDelay);
307
+ } else {
308
+ closeRef.current();
309
+ }
310
+ },
311
+ [clear, closeDelay]
312
+ );
313
+ return { onPointerEnter, onPointerLeave };
314
+ }
315
+
269
316
  // src/primitives/merge-refs.ts
270
317
  import "react";
271
318
  function mergeRefs(...refs) {
@@ -327,7 +374,7 @@ function AlertDescription({
327
374
  }
328
375
 
329
376
  // src/components/avatar.tsx
330
- import * as React11 from "react";
377
+ import * as React12 from "react";
331
378
 
332
379
  // src/generated/avatar.ts
333
380
  var AVATAR = "relative flex size-8 shrink-0 overflow-hidden rounded-full";
@@ -351,7 +398,7 @@ function AvatarImage({
351
398
  onError,
352
399
  ...props
353
400
  }) {
354
- const [errored, setErrored] = React11.useState(false);
401
+ const [errored, setErrored] = React12.useState(false);
355
402
  if (errored) return null;
356
403
  return /* @__PURE__ */ jsx2(
357
404
  "img",
@@ -825,7 +872,7 @@ function EmptyContent({
825
872
  }
826
873
 
827
874
  // src/components/field.tsx
828
- import * as React19 from "react";
875
+ import * as React20 from "react";
829
876
 
830
877
  // src/components/label.tsx
831
878
  import "react";
@@ -983,7 +1030,7 @@ function FieldError({
983
1030
  errors,
984
1031
  ...props
985
1032
  }) {
986
- const content = React19.useMemo(() => {
1033
+ const content = React20.useMemo(() => {
987
1034
  if (children) {
988
1035
  return children;
989
1036
  }
@@ -1012,8 +1059,92 @@ function FieldError({
1012
1059
  );
1013
1060
  }
1014
1061
 
1062
+ // src/components/section-descriptor.tsx
1063
+ import "react";
1064
+ import { Fragment, jsx as jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
1065
+ var SECTION_DESCRIPTOR = "flex flex-col gap-2 rounded-lg border bg-accent p-4 text-left";
1066
+ function InfoGlyph({ className }) {
1067
+ return /* @__PURE__ */ jsxs3(
1068
+ "svg",
1069
+ {
1070
+ viewBox: "0 0 24 24",
1071
+ fill: "none",
1072
+ stroke: "currentColor",
1073
+ strokeWidth: 2,
1074
+ strokeLinecap: "round",
1075
+ strokeLinejoin: "round",
1076
+ "aria-hidden": true,
1077
+ className: cn("size-4 shrink-0", className),
1078
+ children: [
1079
+ /* @__PURE__ */ jsx11("circle", { cx: "12", cy: "12", r: "10" }),
1080
+ /* @__PURE__ */ jsx11("path", { d: "M12 16v-4" }),
1081
+ /* @__PURE__ */ jsx11("path", { d: "M12 8h.01" })
1082
+ ]
1083
+ }
1084
+ );
1085
+ }
1086
+ function SectionDescriptor({
1087
+ title,
1088
+ icon = true,
1089
+ collapsible = false,
1090
+ defaultOpen = false,
1091
+ className,
1092
+ children,
1093
+ ...props
1094
+ }) {
1095
+ const titleContent = /* @__PURE__ */ jsxs3(Fragment, { children: [
1096
+ icon && /* @__PURE__ */ jsx11(InfoGlyph, { className: "text-main-accent-t1" }),
1097
+ /* @__PURE__ */ jsx11("span", { children: title })
1098
+ ] });
1099
+ if (collapsible) {
1100
+ return /* @__PURE__ */ jsxs3(
1101
+ "details",
1102
+ {
1103
+ "data-slot": "section-descriptor",
1104
+ "data-collapsible": "",
1105
+ open: defaultOpen,
1106
+ className: cn(SECTION_DESCRIPTOR, className),
1107
+ ...props,
1108
+ children: [
1109
+ /* @__PURE__ */ jsx11(
1110
+ "summary",
1111
+ {
1112
+ "data-slot": "section-descriptor-title",
1113
+ className: cn(
1114
+ FIELD_TITLE,
1115
+ "cursor-pointer list-none [&::-webkit-details-marker]:hidden"
1116
+ ),
1117
+ children: titleContent
1118
+ }
1119
+ ),
1120
+ /* @__PURE__ */ jsx11(
1121
+ "p",
1122
+ {
1123
+ "data-slot": "section-descriptor-body",
1124
+ className: cn(FIELD_DESCRIPTION, "mt-2"),
1125
+ children
1126
+ }
1127
+ )
1128
+ ]
1129
+ }
1130
+ );
1131
+ }
1132
+ return /* @__PURE__ */ jsxs3(
1133
+ "section",
1134
+ {
1135
+ "data-slot": "section-descriptor",
1136
+ className: cn(SECTION_DESCRIPTOR, className),
1137
+ ...props,
1138
+ children: [
1139
+ /* @__PURE__ */ jsx11("div", { "data-slot": "section-descriptor-title", className: FIELD_TITLE, children: titleContent }),
1140
+ /* @__PURE__ */ jsx11("p", { "data-slot": "section-descriptor-body", className: FIELD_DESCRIPTION, children })
1141
+ ]
1142
+ }
1143
+ );
1144
+ }
1145
+
1015
1146
  // src/components/footer.tsx
1016
- import * as React22 from "react";
1147
+ import * as React24 from "react";
1017
1148
 
1018
1149
  // src/components/container.tsx
1019
1150
  import "react";
@@ -1022,9 +1153,9 @@ import "react";
1022
1153
  var CONTAINER_BASE = "mx-auto w-full max-w-[var(--page-max,90rem)] px-[var(--page-px,1rem)]";
1023
1154
 
1024
1155
  // src/components/container.tsx
1025
- import { jsx as jsx11 } from "react/jsx-runtime";
1156
+ import { jsx as jsx12 } from "react/jsx-runtime";
1026
1157
  function Container({ className, ...props }) {
1027
- return /* @__PURE__ */ jsx11(
1158
+ return /* @__PURE__ */ jsx12(
1028
1159
  "div",
1029
1160
  {
1030
1161
  "data-slot": "container",
@@ -1036,7 +1167,7 @@ function Container({ className, ...props }) {
1036
1167
 
1037
1168
  // src/components/logo.tsx
1038
1169
  import "react";
1039
- import { jsx as jsx12 } from "react/jsx-runtime";
1170
+ import { jsx as jsx13 } from "react/jsx-runtime";
1040
1171
  var LOGO_DATA_URI = "data:image/svg+xml,%3Csvg width=%22387%22 height=%22335%22 viewBox=%220 0 387 335%22 fill=%22none%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cpath d=%22M0.120605 130.841L140.84 112.176V61.7481L156.149 65.3501V104.786L163.641 103.662V66.6599L178.625 69.607V102.353L185.791 101.043V61.0932L156.475 48.3224L119.992 60.4383V101.043L0.120605 130.841Z%22 fill=%22black%22/%3E%3Cpath d=%22M213.479 112.176L237.584 114.469L237.258 0.841309L202.078 19.8338V72.8816L213.479 78.1209V112.176Z%22 fill=%22black%22/%3E%3Cpath d=%22M240.841 0.841309L276.347 20.1612V117.743L260.711 115.778V26.3829L240.841 15.9043V0.841309Z%22 fill=%22black%22/%3E%3Cpath d=%22M284.816 118.725L386.121 127.239L304.36 109.884V74.1914L284.816 63.7128V118.725Z%22 fill=%22black%22/%3E%3Cpath d=%22M0.120605 130.841L140.84 112.176V61.7481L156.149 65.3501V104.786L163.641 103.662V66.6599L178.625 69.607V102.353L185.791 101.043V61.0932L156.475 48.3224L119.992 60.4383V101.043L0.120605 130.841Z%22 stroke=%22black%22/%3E%3Cpath d=%22M213.479 112.176L237.584 114.469L237.258 0.841309L202.078 19.8338V72.8816L213.479 78.1209V112.176Z%22 stroke=%22black%22/%3E%3Cpath d=%22M240.841 0.841309L276.347 20.1612V117.743L260.711 115.778V26.3829L240.841 15.9043V0.841309Z%22 stroke=%22black%22/%3E%3Cpath d=%22M284.816 118.725L386.121 127.239L304.36 109.884V74.1914L284.816 63.7128V118.725Z%22 stroke=%22black%22/%3E%3Cpath d=%22M25.1206 333.987H31.6206V306.987H25.1206V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M92.6206 333.987H100.121L110.621 307.487H104.621L96.6206 325.987L88.6206 307.487H81.6206L92.6206 333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M44.6206 333.987H51.6206V318.987L65.1206 333.987H71.6206V307.487H65.1206V322.987L50.6206 307.487H44.6206V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M120.621 333.987H142.121V329.487H127.621V322.987H140.121V318.487H127.621V312.487H142.121V307.487H120.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M152.121 331.987L153.621 327.987C165.659 329.418 167.304 330.676 168.121 326.487C168.937 322.297 152.785 322.989 152.621 313.987C152.456 304.984 165.853 306.198 174.121 308.487L173.121 312.487C162.364 310.724 159.121 310.487 159.121 313.987C159.121 317.487 175.621 318.748 175.621 326.487C175.621 334.225 167.278 335.691 152.121 331.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M192.621 333.987H199.621V312.487H208.621V307.487H183.621V312.487H192.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M219.121 333.987H225.121V318.987L233.621 329.987H237.621L245.121 318.987V333.987L252.121 333.987V307.487H245.121L235.621 322.487L225.121 307.487H219.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M265.121 333.987H286.621V329.487H272.121V322.987H284.621V318.487H272.121V312.487H286.621V307.487H265.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M298.621 333.987H305.621V318.987L319.121 333.987H325.621V307.487H319.121V322.987L304.621 307.487H298.621V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M345.121 333.987H352.121V312.487H361.121V307.487H336.121V312.487H345.121V333.987Z%22 fill=%22black%22/%3E%3Cpath d=%22M25.1206 333.987H31.6206V306.987H25.1206V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M92.6206 333.987H100.121L110.621 307.487H104.621L96.6206 325.987L88.6206 307.487H81.6206L92.6206 333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M44.6206 333.987H51.6206V318.987L65.1206 333.987H71.6206V307.487H65.1206V322.987L50.6206 307.487H44.6206V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M120.621 333.987H142.121V329.487H127.621V322.987H140.121V318.487H127.621V312.487H142.121V307.487H120.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M152.121 331.987L153.621 327.987C165.659 329.418 167.304 330.676 168.121 326.487C168.937 322.297 152.785 322.989 152.621 313.987C152.456 304.984 165.853 306.198 174.121 308.487L173.121 312.487C162.364 310.724 159.121 310.487 159.121 313.987C159.121 317.487 175.621 318.748 175.621 326.487C175.621 334.225 167.278 335.691 152.121 331.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M192.621 333.987H199.621V312.487H208.621V307.487H183.621V312.487H192.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M219.121 333.987H225.121V318.987L233.621 329.987H237.621L245.121 318.987V333.987L252.121 333.987V307.487H245.121L235.621 322.487L225.121 307.487H219.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M265.121 333.987H286.621V329.487H272.121V322.987H284.621V318.487H272.121V312.487H286.621V307.487H265.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M298.621 333.987H305.621V318.987L319.121 333.987H325.621V307.487H319.121V322.987L304.621 307.487H298.621V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M345.121 333.987H352.121V312.487H361.121V307.487H336.121V312.487H345.121V333.987Z%22 stroke=%22black%22/%3E%3Cpath d=%22M232.621 276.02L166.121 145.841H204.905L255.905 246.341L306.905 145.841H345.905L279.405 276.02H232.621Z%22 fill=%22black%22 stroke=%22black%22/%3E%3Cpath d=%22M41.1206 276.02H208.336L195.73 251.341H74.8362V220.341H179.894L168.144 197.341H74.8362V170.841L154.352 170.341L141.836 145.841H41.1206V276.02Z%22 fill=%22black%22 stroke=%22black%22/%3E%3C/svg%3E";
1041
1172
  var LOGO_BG = "oklch(0.256 0.1 260)";
1042
1173
  function Logo({ className, withBackground = false, src }) {
@@ -1052,7 +1183,7 @@ function Logo({ className, withBackground = false, src }) {
1052
1183
  maskSize: "contain",
1053
1184
  WebkitMaskSize: "contain"
1054
1185
  };
1055
- const mark = /* @__PURE__ */ jsx12(
1186
+ const mark = /* @__PURE__ */ jsx13(
1056
1187
  "span",
1057
1188
  {
1058
1189
  "data-slot": "logo",
@@ -1063,7 +1194,7 @@ function Logo({ className, withBackground = false, src }) {
1063
1194
  }
1064
1195
  );
1065
1196
  if (!withBackground) return mark;
1066
- return /* @__PURE__ */ jsx12(
1197
+ return /* @__PURE__ */ jsx13(
1067
1198
  "span",
1068
1199
  {
1069
1200
  "data-slot": "logo-background",
@@ -1075,7 +1206,7 @@ function Logo({ className, withBackground = false, src }) {
1075
1206
  }
1076
1207
 
1077
1208
  // src/components/footer.tsx
1078
- import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs3 } from "react/jsx-runtime";
1209
+ import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
1079
1210
  var DEFAULT_DESCRIPTION = "EV Investment is a registered real estate advisory and investment management fund specializing in premium coastal developments in Quy Nhon, Binh Dinh province, Vietnam.";
1080
1211
  var DEFAULT_OFFICES = [
1081
1212
  {
@@ -1105,37 +1236,37 @@ function Footer({
1105
1236
  children
1106
1237
  }) {
1107
1238
  const L = linkComponent ?? "a";
1108
- return /* @__PURE__ */ jsxs3(
1239
+ return /* @__PURE__ */ jsxs4(
1109
1240
  "footer",
1110
1241
  {
1111
1242
  "data-slot": "footer",
1112
1243
  className: "bg-main-black border-t border-main-mist/10 py-16",
1113
1244
  children: [
1114
1245
  children,
1115
- /* @__PURE__ */ jsxs3(Container, { children: [
1116
- /* @__PURE__ */ jsxs3("div", { className: "grid grid-cols-2 gap-x-8 gap-y-8 lg:grid-cols-12 mb-12", children: [
1117
- /* @__PURE__ */ jsxs3("div", { className: "col-span-2 lg:col-span-3", children: [
1118
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3 mb-6", children: [
1119
- /* @__PURE__ */ jsx13(Logo, { className: "w-8 h-8 text-white" }),
1120
- /* @__PURE__ */ jsxs3("div", { className: "flex flex-col", children: [
1121
- /* @__PURE__ */ jsx13("span", { className: "font-serif-display font-bold text-base tracking-wider text-white", children: "EV INVESTMENT" }),
1122
- /* @__PURE__ */ jsx13("span", { className: "text-[8px] font-mono-tech tracking-[0.3em] text-main-accent-t1 uppercase", children: tagline })
1246
+ /* @__PURE__ */ jsxs4(Container, { children: [
1247
+ /* @__PURE__ */ jsxs4("div", { className: "grid grid-cols-2 gap-x-8 gap-y-8 lg:grid-cols-12 mb-12", children: [
1248
+ /* @__PURE__ */ jsxs4("div", { className: "col-span-2 lg:col-span-3", children: [
1249
+ /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-3 mb-6", children: [
1250
+ /* @__PURE__ */ jsx14(Logo, { className: "w-8 h-8 text-white" }),
1251
+ /* @__PURE__ */ jsxs4("div", { className: "flex flex-col", children: [
1252
+ /* @__PURE__ */ jsx14("span", { className: "font-serif-display font-bold text-base tracking-wider text-white", children: "EV INVESTMENT" }),
1253
+ /* @__PURE__ */ jsx14("span", { className: "text-[8px] font-mono-tech tracking-[0.3em] text-main-accent-t1 uppercase", children: tagline })
1123
1254
  ] })
1124
1255
  ] }),
1125
- /* @__PURE__ */ jsx13("p", { className: "text-main-mist/40 text-xs font-light max-w-sm leading-relaxed mb-6", children: description }),
1126
- /* @__PURE__ */ jsx13("div", { className: "flex gap-4 text-xs font-mono-tech text-main-accent-t1", children: legalLinks.map((link, i) => /* @__PURE__ */ jsxs3(React22.Fragment, { children: [
1127
- i > 0 && /* @__PURE__ */ jsx13("span", { className: "text-main-mist/20", children: "|" }),
1128
- /* @__PURE__ */ jsx13(L, { href: link.href, className: "hover:underline", children: link.label })
1256
+ /* @__PURE__ */ jsx14("p", { className: "text-main-mist/40 text-xs font-light max-w-sm leading-relaxed mb-6", children: description }),
1257
+ /* @__PURE__ */ jsx14("div", { className: "flex gap-4 text-xs font-mono-tech text-main-accent-t1", children: legalLinks.map((link, i) => /* @__PURE__ */ jsxs4(React24.Fragment, { children: [
1258
+ i > 0 && /* @__PURE__ */ jsx14("span", { className: "text-main-mist/20", children: "|" }),
1259
+ /* @__PURE__ */ jsx14(L, { href: link.href, className: "hover:underline", children: link.label })
1129
1260
  ] }, link.label)) })
1130
1261
  ] }),
1131
- nav.map((group) => /* @__PURE__ */ jsxs3(
1262
+ nav.map((group) => /* @__PURE__ */ jsxs4(
1132
1263
  "nav",
1133
1264
  {
1134
1265
  "aria-label": `Footer ${group.heading} links`,
1135
1266
  className: "lg:col-span-2",
1136
1267
  children: [
1137
- /* @__PURE__ */ jsx13("h4", { className: "font-mono-tech text-xs text-white uppercase tracking-widest mb-6", children: group.heading }),
1138
- /* @__PURE__ */ jsx13("ul", { className: "space-y-3", children: group.links.map((link) => /* @__PURE__ */ jsx13("li", { children: /* @__PURE__ */ jsx13(
1268
+ /* @__PURE__ */ jsx14("h4", { className: "font-mono-tech text-xs text-white uppercase tracking-widest mb-6", children: group.heading }),
1269
+ /* @__PURE__ */ jsx14("ul", { className: "space-y-3", children: group.links.map((link) => /* @__PURE__ */ jsx14("li", { children: /* @__PURE__ */ jsx14(
1139
1270
  L,
1140
1271
  {
1141
1272
  href: link.href,
@@ -1147,24 +1278,24 @@ function Footer({
1147
1278
  },
1148
1279
  group.heading
1149
1280
  )),
1150
- /* @__PURE__ */ jsxs3("div", { className: "col-span-2 lg:col-span-3", children: [
1151
- /* @__PURE__ */ jsx13("h4", { className: "font-mono-tech text-xs text-white uppercase tracking-widest mb-6", children: "Offices" }),
1152
- /* @__PURE__ */ jsx13("ul", { className: "space-y-4 text-xs text-main-mist/70 font-light leading-relaxed", children: offices.map((office) => /* @__PURE__ */ jsxs3("li", { children: [
1153
- /* @__PURE__ */ jsx13("strong", { className: "text-white block font-mono-tech text-[10px] uppercase tracking-wider mb-1", children: office.name }),
1281
+ /* @__PURE__ */ jsxs4("div", { className: "col-span-2 lg:col-span-3", children: [
1282
+ /* @__PURE__ */ jsx14("h4", { className: "font-mono-tech text-xs text-white uppercase tracking-widest mb-6", children: "Offices" }),
1283
+ /* @__PURE__ */ jsx14("ul", { className: "space-y-4 text-xs text-main-mist/70 font-light leading-relaxed", children: offices.map((office) => /* @__PURE__ */ jsxs4("li", { children: [
1284
+ /* @__PURE__ */ jsx14("strong", { className: "text-white block font-mono-tech text-[10px] uppercase tracking-wider mb-1", children: office.name }),
1154
1285
  office.address
1155
1286
  ] }, office.name)) })
1156
1287
  ] }),
1157
- newsletter && /* @__PURE__ */ jsxs3("div", { className: "col-span-2 lg:col-span-2", children: [
1158
- /* @__PURE__ */ jsx13("h4", { className: "font-mono-tech text-xs text-white uppercase tracking-widest mb-6", children: "Newsletter" }),
1159
- /* @__PURE__ */ jsx13("p", { className: "text-sm sm:text-xs font-light leading-relaxed text-main-mist/70 mb-4", children: newsletterBlurb }),
1288
+ newsletter && /* @__PURE__ */ jsxs4("div", { className: "col-span-2 lg:col-span-2", children: [
1289
+ /* @__PURE__ */ jsx14("h4", { className: "font-mono-tech text-xs text-white uppercase tracking-widest mb-6", children: "Newsletter" }),
1290
+ /* @__PURE__ */ jsx14("p", { className: "text-sm sm:text-xs font-light leading-relaxed text-main-mist/70 mb-4", children: newsletterBlurb }),
1160
1291
  newsletter
1161
1292
  ] })
1162
1293
  ] }),
1163
- /* @__PURE__ */ jsx13("div", { className: "border-t border-main-mist/10 pt-8 text-[10px] font-mono-tech text-main-mist/40", children: /* @__PURE__ */ jsxs3("p", { children: [
1294
+ /* @__PURE__ */ jsx14("div", { className: "border-t border-main-mist/10 pt-8 text-[10px] font-mono-tech text-main-mist/40", children: /* @__PURE__ */ jsxs4("p", { children: [
1164
1295
  "\xA9 2026 EV Investment. All rights reserved.",
1165
- version && /* @__PURE__ */ jsxs3(Fragment2, { children: [
1296
+ version && /* @__PURE__ */ jsxs4(Fragment3, { children: [
1166
1297
  " ",
1167
- /* @__PURE__ */ jsx13("a", { href: commitHref, className: "text-main-mist/30", children: version })
1298
+ /* @__PURE__ */ jsx14("a", { href: commitHref, className: "text-main-mist/30", children: version })
1168
1299
  ] })
1169
1300
  ] }) })
1170
1301
  ] })
@@ -1180,9 +1311,9 @@ import "react";
1180
1311
  var INPUT_BASE = "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:border-destructive";
1181
1312
 
1182
1313
  // src/components/input.tsx
1183
- import { jsx as jsx14 } from "react/jsx-runtime";
1314
+ import { jsx as jsx15 } from "react/jsx-runtime";
1184
1315
  function Input({ className, type, ...props }) {
1185
- return /* @__PURE__ */ jsx14(
1316
+ return /* @__PURE__ */ jsx15(
1186
1317
  "input",
1187
1318
  {
1188
1319
  type,
@@ -1200,9 +1331,9 @@ import "react";
1200
1331
  var TEXTAREA_BASE = "border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm";
1201
1332
 
1202
1333
  // src/components/textarea.tsx
1203
- import { jsx as jsx15 } from "react/jsx-runtime";
1334
+ import { jsx as jsx16 } from "react/jsx-runtime";
1204
1335
  function Textarea({ className, ...props }) {
1205
- return /* @__PURE__ */ jsx15("textarea", { "data-slot": "textarea", className: cn(TEXTAREA_BASE, className), ...props });
1336
+ return /* @__PURE__ */ jsx16("textarea", { "data-slot": "textarea", className: cn(TEXTAREA_BASE, className), ...props });
1206
1337
  }
1207
1338
 
1208
1339
  // src/components/input-group.tsx
@@ -1229,12 +1360,12 @@ var INPUT_GROUP_INPUT_CONTROL = "flex-1 rounded-none border-0 bg-transparent sha
1229
1360
  var INPUT_GROUP_TEXTAREA_CONTROL = "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0";
1230
1361
 
1231
1362
  // src/components/input-group.tsx
1232
- import { jsx as jsx16 } from "react/jsx-runtime";
1363
+ import { jsx as jsx17 } from "react/jsx-runtime";
1233
1364
  function InputGroup({
1234
1365
  className,
1235
1366
  ...props
1236
1367
  }) {
1237
- return /* @__PURE__ */ jsx16(
1368
+ return /* @__PURE__ */ jsx17(
1238
1369
  "div",
1239
1370
  {
1240
1371
  "data-slot": "input-group",
@@ -1249,7 +1380,7 @@ function InputGroupAddon({
1249
1380
  align = "inline-start",
1250
1381
  ...props
1251
1382
  }) {
1252
- return /* @__PURE__ */ jsx16(
1383
+ return /* @__PURE__ */ jsx17(
1253
1384
  "div",
1254
1385
  {
1255
1386
  role: "group",
@@ -1275,7 +1406,7 @@ function InputGroupButton({
1275
1406
  size = "xs",
1276
1407
  ...props
1277
1408
  }) {
1278
- return /* @__PURE__ */ jsx16(
1409
+ return /* @__PURE__ */ jsx17(
1279
1410
  Button,
1280
1411
  {
1281
1412
  type,
@@ -1294,7 +1425,7 @@ function InputGroupText({
1294
1425
  className,
1295
1426
  ...props
1296
1427
  }) {
1297
- return /* @__PURE__ */ jsx16(
1428
+ return /* @__PURE__ */ jsx17(
1298
1429
  "span",
1299
1430
  {
1300
1431
  className: cn(INPUT_GROUP_TEXT, className),
@@ -1306,7 +1437,7 @@ function InputGroupInput({
1306
1437
  className,
1307
1438
  ...props
1308
1439
  }) {
1309
- return /* @__PURE__ */ jsx16(
1440
+ return /* @__PURE__ */ jsx17(
1310
1441
  Input,
1311
1442
  {
1312
1443
  "data-slot": "input-group-control",
@@ -1319,7 +1450,7 @@ function InputGroupTextarea({
1319
1450
  className,
1320
1451
  ...props
1321
1452
  }) {
1322
- return /* @__PURE__ */ jsx16(
1453
+ return /* @__PURE__ */ jsx17(
1323
1454
  Textarea,
1324
1455
  {
1325
1456
  "data-slot": "input-group-control",
@@ -1343,13 +1474,13 @@ var separatorOrientations = {
1343
1474
  };
1344
1475
 
1345
1476
  // src/components/separator.tsx
1346
- import { jsx as jsx17 } from "react/jsx-runtime";
1477
+ import { jsx as jsx18 } from "react/jsx-runtime";
1347
1478
  function Separator({
1348
1479
  className,
1349
1480
  orientation = "horizontal",
1350
1481
  ...props
1351
1482
  }) {
1352
- return /* @__PURE__ */ jsx17(
1483
+ return /* @__PURE__ */ jsx18(
1353
1484
  "div",
1354
1485
  {
1355
1486
  role: "separator",
@@ -1392,9 +1523,9 @@ var ITEM_HEADER = "flex basis-full items-center justify-between gap-2";
1392
1523
  var ITEM_FOOTER = "flex basis-full items-center justify-between gap-2";
1393
1524
 
1394
1525
  // src/components/item.tsx
1395
- import { jsx as jsx18 } from "react/jsx-runtime";
1526
+ import { jsx as jsx19 } from "react/jsx-runtime";
1396
1527
  function ItemGroup({ className, ...props }) {
1397
- return /* @__PURE__ */ jsx18(
1528
+ return /* @__PURE__ */ jsx19(
1398
1529
  "div",
1399
1530
  {
1400
1531
  role: "list",
@@ -1408,7 +1539,7 @@ function ItemSeparator({
1408
1539
  className,
1409
1540
  ...props
1410
1541
  }) {
1411
- return /* @__PURE__ */ jsx18(
1542
+ return /* @__PURE__ */ jsx19(
1412
1543
  Separator,
1413
1544
  {
1414
1545
  "data-slot": "item-separator",
@@ -1426,7 +1557,7 @@ function Item({
1426
1557
  ...props
1427
1558
  }) {
1428
1559
  const Comp = asChild ? Slot : "div";
1429
- return /* @__PURE__ */ jsx18(
1560
+ return /* @__PURE__ */ jsx19(
1430
1561
  Comp,
1431
1562
  {
1432
1563
  "data-slot": "item",
@@ -1442,7 +1573,7 @@ function ItemMedia({
1442
1573
  variant = "default",
1443
1574
  ...props
1444
1575
  }) {
1445
- return /* @__PURE__ */ jsx18(
1576
+ return /* @__PURE__ */ jsx19(
1446
1577
  "div",
1447
1578
  {
1448
1579
  "data-slot": "item-media",
@@ -1456,7 +1587,7 @@ function ItemContent({
1456
1587
  className,
1457
1588
  ...props
1458
1589
  }) {
1459
- return /* @__PURE__ */ jsx18(
1590
+ return /* @__PURE__ */ jsx19(
1460
1591
  "div",
1461
1592
  {
1462
1593
  "data-slot": "item-content",
@@ -1466,7 +1597,7 @@ function ItemContent({
1466
1597
  );
1467
1598
  }
1468
1599
  function ItemTitle({ className, ...props }) {
1469
- return /* @__PURE__ */ jsx18(
1600
+ return /* @__PURE__ */ jsx19(
1470
1601
  "div",
1471
1602
  {
1472
1603
  "data-slot": "item-title",
@@ -1479,7 +1610,7 @@ function ItemDescription({
1479
1610
  className,
1480
1611
  ...props
1481
1612
  }) {
1482
- return /* @__PURE__ */ jsx18(
1613
+ return /* @__PURE__ */ jsx19(
1483
1614
  "p",
1484
1615
  {
1485
1616
  "data-slot": "item-description",
@@ -1492,7 +1623,7 @@ function ItemActions({
1492
1623
  className,
1493
1624
  ...props
1494
1625
  }) {
1495
- return /* @__PURE__ */ jsx18(
1626
+ return /* @__PURE__ */ jsx19(
1496
1627
  "div",
1497
1628
  {
1498
1629
  "data-slot": "item-actions",
@@ -1505,7 +1636,7 @@ function ItemHeader({
1505
1636
  className,
1506
1637
  ...props
1507
1638
  }) {
1508
- return /* @__PURE__ */ jsx18(
1639
+ return /* @__PURE__ */ jsx19(
1509
1640
  "div",
1510
1641
  {
1511
1642
  "data-slot": "item-header",
@@ -1518,7 +1649,7 @@ function ItemFooter({
1518
1649
  className,
1519
1650
  ...props
1520
1651
  }) {
1521
- return /* @__PURE__ */ jsx18(
1652
+ return /* @__PURE__ */ jsx19(
1522
1653
  "div",
1523
1654
  {
1524
1655
  "data-slot": "item-footer",
@@ -1536,9 +1667,9 @@ var KBD_BASE = "bg-muted text-muted-foreground pointer-events-none inline-flex h
1536
1667
  var KBD_GROUP_BASE = "inline-flex items-center gap-1";
1537
1668
 
1538
1669
  // src/components/kbd.tsx
1539
- import { jsx as jsx19 } from "react/jsx-runtime";
1670
+ import { jsx as jsx20 } from "react/jsx-runtime";
1540
1671
  function Kbd({ className, ...props }) {
1541
- return /* @__PURE__ */ jsx19(
1672
+ return /* @__PURE__ */ jsx20(
1542
1673
  "kbd",
1543
1674
  {
1544
1675
  "data-slot": "kbd",
@@ -1548,7 +1679,7 @@ function Kbd({ className, ...props }) {
1548
1679
  );
1549
1680
  }
1550
1681
  function KbdGroup({ className, ...props }) {
1551
- return /* @__PURE__ */ jsx19(
1682
+ return /* @__PURE__ */ jsx20(
1552
1683
  "kbd",
1553
1684
  {
1554
1685
  "data-slot": "kbd-group",
@@ -1560,9 +1691,9 @@ function KbdGroup({ className, ...props }) {
1560
1691
 
1561
1692
  // src/components/pagination.tsx
1562
1693
  import "react";
1563
- import { jsx as jsx20, jsxs as jsxs4 } from "react/jsx-runtime";
1694
+ import { jsx as jsx21, jsxs as jsxs5 } from "react/jsx-runtime";
1564
1695
  function Pagination({ className, ...props }) {
1565
- return /* @__PURE__ */ jsx20(
1696
+ return /* @__PURE__ */ jsx21(
1566
1697
  "nav",
1567
1698
  {
1568
1699
  role: "navigation",
@@ -1577,7 +1708,7 @@ function PaginationContent({
1577
1708
  className,
1578
1709
  ...props
1579
1710
  }) {
1580
- return /* @__PURE__ */ jsx20(
1711
+ return /* @__PURE__ */ jsx21(
1581
1712
  "ul",
1582
1713
  {
1583
1714
  "data-slot": "pagination-content",
@@ -1587,7 +1718,7 @@ function PaginationContent({
1587
1718
  );
1588
1719
  }
1589
1720
  function PaginationItem(props) {
1590
- return /* @__PURE__ */ jsx20("li", { "data-slot": "pagination-item", ...props });
1721
+ return /* @__PURE__ */ jsx21("li", { "data-slot": "pagination-item", ...props });
1591
1722
  }
1592
1723
  function PaginationLink({
1593
1724
  className,
@@ -1595,7 +1726,7 @@ function PaginationLink({
1595
1726
  size = "icon",
1596
1727
  ...props
1597
1728
  }) {
1598
- return /* @__PURE__ */ jsx20(
1729
+ return /* @__PURE__ */ jsx21(
1599
1730
  "a",
1600
1731
  {
1601
1732
  "aria-current": isActive ? "page" : void 0,
@@ -1612,9 +1743,9 @@ function PaginationLink({
1612
1743
  }
1613
1744
  );
1614
1745
  }
1615
- var ChevronLeft = () => /* @__PURE__ */ jsx20("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx20("path", { d: "m15 18-6-6 6-6" }) });
1616
- var ChevronRight = () => /* @__PURE__ */ jsx20("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx20("path", { d: "m9 18 6-6-6-6" }) });
1617
- var MoreHorizontal = () => /* @__PURE__ */ jsxs4(
1746
+ var ChevronLeft = () => /* @__PURE__ */ jsx21("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx21("path", { d: "m15 18-6-6 6-6" }) });
1747
+ var ChevronRight = () => /* @__PURE__ */ jsx21("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx21("path", { d: "m9 18 6-6-6-6" }) });
1748
+ var MoreHorizontal = () => /* @__PURE__ */ jsxs5(
1618
1749
  "svg",
1619
1750
  {
1620
1751
  className: "size-4",
@@ -1623,9 +1754,9 @@ var MoreHorizontal = () => /* @__PURE__ */ jsxs4(
1623
1754
  stroke: "currentColor",
1624
1755
  strokeWidth: 2,
1625
1756
  children: [
1626
- /* @__PURE__ */ jsx20("circle", { cx: "12", cy: "12", r: "1" }),
1627
- /* @__PURE__ */ jsx20("circle", { cx: "19", cy: "12", r: "1" }),
1628
- /* @__PURE__ */ jsx20("circle", { cx: "5", cy: "12", r: "1" })
1757
+ /* @__PURE__ */ jsx21("circle", { cx: "12", cy: "12", r: "1" }),
1758
+ /* @__PURE__ */ jsx21("circle", { cx: "19", cy: "12", r: "1" }),
1759
+ /* @__PURE__ */ jsx21("circle", { cx: "5", cy: "12", r: "1" })
1629
1760
  ]
1630
1761
  }
1631
1762
  );
@@ -1633,7 +1764,7 @@ function PaginationPrevious({
1633
1764
  className,
1634
1765
  ...props
1635
1766
  }) {
1636
- return /* @__PURE__ */ jsxs4(
1767
+ return /* @__PURE__ */ jsxs5(
1637
1768
  PaginationLink,
1638
1769
  {
1639
1770
  "aria-label": "Go to previous page",
@@ -1641,8 +1772,8 @@ function PaginationPrevious({
1641
1772
  className: cn("gap-1 px-2.5 sm:pl-2.5", className),
1642
1773
  ...props,
1643
1774
  children: [
1644
- /* @__PURE__ */ jsx20(ChevronLeft, {}),
1645
- /* @__PURE__ */ jsx20("span", { className: "hidden sm:block", children: "Previous" })
1775
+ /* @__PURE__ */ jsx21(ChevronLeft, {}),
1776
+ /* @__PURE__ */ jsx21("span", { className: "hidden sm:block", children: "Previous" })
1646
1777
  ]
1647
1778
  }
1648
1779
  );
@@ -1651,7 +1782,7 @@ function PaginationNext({
1651
1782
  className,
1652
1783
  ...props
1653
1784
  }) {
1654
- return /* @__PURE__ */ jsxs4(
1785
+ return /* @__PURE__ */ jsxs5(
1655
1786
  PaginationLink,
1656
1787
  {
1657
1788
  "aria-label": "Go to next page",
@@ -1659,8 +1790,8 @@ function PaginationNext({
1659
1790
  className: cn("gap-1 px-2.5 sm:pr-2.5", className),
1660
1791
  ...props,
1661
1792
  children: [
1662
- /* @__PURE__ */ jsx20("span", { className: "hidden sm:block", children: "Next" }),
1663
- /* @__PURE__ */ jsx20(ChevronRight, {})
1793
+ /* @__PURE__ */ jsx21("span", { className: "hidden sm:block", children: "Next" }),
1794
+ /* @__PURE__ */ jsx21(ChevronRight, {})
1664
1795
  ]
1665
1796
  }
1666
1797
  );
@@ -1669,7 +1800,7 @@ function PaginationEllipsis({
1669
1800
  className,
1670
1801
  ...props
1671
1802
  }) {
1672
- return /* @__PURE__ */ jsxs4(
1803
+ return /* @__PURE__ */ jsxs5(
1673
1804
  "span",
1674
1805
  {
1675
1806
  "aria-hidden": true,
@@ -1677,8 +1808,8 @@ function PaginationEllipsis({
1677
1808
  className: cn("flex size-9 items-center justify-center", className),
1678
1809
  ...props,
1679
1810
  children: [
1680
- /* @__PURE__ */ jsx20(MoreHorizontal, {}),
1681
- /* @__PURE__ */ jsx20("span", { className: "sr-only", children: "More pages" })
1811
+ /* @__PURE__ */ jsx21(MoreHorizontal, {}),
1812
+ /* @__PURE__ */ jsx21("span", { className: "sr-only", children: "More pages" })
1682
1813
  ]
1683
1814
  }
1684
1815
  );
@@ -1692,9 +1823,9 @@ var PROGRESS_TRACK = "bg-primary/20 relative h-2 w-full overflow-hidden rounded-
1692
1823
  var PROGRESS_INDICATOR = "bg-primary h-full w-full flex-1 transition-all";
1693
1824
 
1694
1825
  // src/components/progress.tsx
1695
- import { jsx as jsx21 } from "react/jsx-runtime";
1826
+ import { jsx as jsx22 } from "react/jsx-runtime";
1696
1827
  function Progress({ className, value = 0, ...props }) {
1697
- return /* @__PURE__ */ jsx21(
1828
+ return /* @__PURE__ */ jsx22(
1698
1829
  "div",
1699
1830
  {
1700
1831
  "data-slot": "progress",
@@ -1704,7 +1835,7 @@ function Progress({ className, value = 0, ...props }) {
1704
1835
  "aria-valuemax": 100,
1705
1836
  className: cn(PROGRESS_TRACK, className),
1706
1837
  ...props,
1707
- children: /* @__PURE__ */ jsx21(
1838
+ children: /* @__PURE__ */ jsx22(
1708
1839
  "div",
1709
1840
  {
1710
1841
  "data-slot": "progress-indicator",
@@ -1723,9 +1854,9 @@ import "react";
1723
1854
  var SKELETON_BASE = "bg-accent animate-pulse rounded-md";
1724
1855
 
1725
1856
  // src/components/skeleton.tsx
1726
- import { jsx as jsx22 } from "react/jsx-runtime";
1857
+ import { jsx as jsx23 } from "react/jsx-runtime";
1727
1858
  function Skeleton({ className, ...props }) {
1728
- return /* @__PURE__ */ jsx22(
1859
+ return /* @__PURE__ */ jsx23(
1729
1860
  "div",
1730
1861
  {
1731
1862
  "data-slot": "skeleton",
@@ -1737,9 +1868,9 @@ function Skeleton({ className, ...props }) {
1737
1868
 
1738
1869
  // src/components/spinner.tsx
1739
1870
  import "react";
1740
- import { jsx as jsx23 } from "react/jsx-runtime";
1871
+ import { jsx as jsx24 } from "react/jsx-runtime";
1741
1872
  function Spinner({ className, ...props }) {
1742
- return /* @__PURE__ */ jsx23(
1873
+ return /* @__PURE__ */ jsx24(
1743
1874
  "svg",
1744
1875
  {
1745
1876
  role: "status",
@@ -1750,14 +1881,14 @@ function Spinner({ className, ...props }) {
1750
1881
  stroke: "currentColor",
1751
1882
  strokeWidth: 2,
1752
1883
  ...props,
1753
- children: /* @__PURE__ */ jsx23("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
1884
+ children: /* @__PURE__ */ jsx24("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
1754
1885
  }
1755
1886
  );
1756
1887
  }
1757
1888
 
1758
1889
  // src/components/status-screen.tsx
1759
1890
  import "react";
1760
- import { jsx as jsx24, jsxs as jsxs5 } from "react/jsx-runtime";
1891
+ import { jsx as jsx25, jsxs as jsxs6 } from "react/jsx-runtime";
1761
1892
  var ACCENT_TEXT = {
1762
1893
  teal: "text-main-accent-t1",
1763
1894
  gold: "text-main-accent-t3",
@@ -1781,15 +1912,15 @@ function statusButtonClass(accent, variant) {
1781
1912
  return cn(BTN_BASE, variant === "filled" ? BTN_FILLED[accent] : BTN_OUTLINE[accent]);
1782
1913
  }
1783
1914
  function LogoMark({ className }) {
1784
- return /* @__PURE__ */ jsx24("svg", { viewBox: "0 0 140 48", className, "aria-hidden": true, children: /* @__PURE__ */ jsxs5("g", { fill: "currentColor", children: [
1785
- /* @__PURE__ */ jsx24("path", { d: "M0.0437012 47.3326L50.9499 40.5805V22.3378L56.4881 23.6408V37.9071L59.1984 37.5005V24.1147L64.6189 25.1808V37.0269L67.2113 36.553V22.1009L56.606 17.481L43.408 21.864V36.553L0.0437012 47.3326Z" }),
1786
- /* @__PURE__ */ jsx24("path", { d: "M77.2277 40.5804L85.9478 41.4099L85.8299 0.304321L73.1033 7.17499V26.3654L77.2277 28.2608V40.5804Z" }),
1787
- /* @__PURE__ */ jsx24("path", { d: "M87.126 0.304321L99.9705 7.29343V42.5943L94.3141 41.8835V9.54417L87.126 5.75347V0.304321Z" }),
1788
- /* @__PURE__ */ jsx24("path", { d: "M103.034 42.9496L139.682 46.0296L110.104 39.7513V26.8393L103.034 23.0486V42.9496Z" })
1915
+ return /* @__PURE__ */ jsx25("svg", { viewBox: "0 0 140 48", className, "aria-hidden": true, children: /* @__PURE__ */ jsxs6("g", { fill: "currentColor", children: [
1916
+ /* @__PURE__ */ jsx25("path", { d: "M0.0437012 47.3326L50.9499 40.5805V22.3378L56.4881 23.6408V37.9071L59.1984 37.5005V24.1147L64.6189 25.1808V37.0269L67.2113 36.553V22.1009L56.606 17.481L43.408 21.864V36.553L0.0437012 47.3326Z" }),
1917
+ /* @__PURE__ */ jsx25("path", { d: "M77.2277 40.5804L85.9478 41.4099L85.8299 0.304321L73.1033 7.17499V26.3654L77.2277 28.2608V40.5804Z" }),
1918
+ /* @__PURE__ */ jsx25("path", { d: "M87.126 0.304321L99.9705 7.29343V42.5943L94.3141 41.8835V9.54417L87.126 5.75347V0.304321Z" }),
1919
+ /* @__PURE__ */ jsx25("path", { d: "M103.034 42.9496L139.682 46.0296L110.104 39.7513V26.8393L103.034 23.0486V42.9496Z" })
1789
1920
  ] }) });
1790
1921
  }
1791
1922
  function ArrowLeftIcon({ className }) {
1792
- return /* @__PURE__ */ jsxs5(
1923
+ return /* @__PURE__ */ jsxs6(
1793
1924
  "svg",
1794
1925
  {
1795
1926
  className,
@@ -1801,8 +1932,8 @@ function ArrowLeftIcon({ className }) {
1801
1932
  strokeLinejoin: "round",
1802
1933
  "aria-hidden": true,
1803
1934
  children: [
1804
- /* @__PURE__ */ jsx24("path", { d: "m12 19-7-7 7-7" }),
1805
- /* @__PURE__ */ jsx24("path", { d: "M19 12H5" })
1935
+ /* @__PURE__ */ jsx25("path", { d: "m12 19-7-7 7-7" }),
1936
+ /* @__PURE__ */ jsx25("path", { d: "M19 12H5" })
1806
1937
  ]
1807
1938
  }
1808
1939
  );
@@ -1821,8 +1952,8 @@ function StatusScreen({
1821
1952
  }) {
1822
1953
  const L = linkComponent ?? "a";
1823
1954
  const accentText = ACCENT_TEXT[accent];
1824
- return /* @__PURE__ */ jsxs5("section", { className: "relative flex min-h-screen flex-col items-center justify-center overflow-hidden bg-main-black px-6 py-32 text-center", children: [
1825
- /* @__PURE__ */ jsx24(
1955
+ return /* @__PURE__ */ jsxs6("section", { className: "relative flex min-h-screen flex-col items-center justify-center overflow-hidden bg-main-black px-6 py-32 text-center", children: [
1956
+ /* @__PURE__ */ jsx25(
1826
1957
  "div",
1827
1958
  {
1828
1959
  "aria-hidden": true,
@@ -1832,20 +1963,20 @@ function StatusScreen({
1832
1963
  )
1833
1964
  }
1834
1965
  ),
1835
- /* @__PURE__ */ jsxs5("div", { className: "relative z-10 flex w-full max-w-2xl flex-col items-center", children: [
1836
- /* @__PURE__ */ jsx24(LogoMark, { className: cn("mb-7 h-10 w-auto", accentText) }),
1837
- /* @__PURE__ */ jsx24("p", { className: cn("mb-6 font-mono-tech text-[11px] uppercase tracking-[0.34em]", accentText), children: eyebrow }),
1838
- /* @__PURE__ */ jsx24("p", { className: cn("font-serif-display text-[110px] font-medium leading-[0.9] sm:text-[180px]", accentText), children: code }),
1839
- /* @__PURE__ */ jsxs5("h1", { className: "mt-4 font-serif-display text-3xl font-light leading-tight text-white sm:text-5xl", children: [
1966
+ /* @__PURE__ */ jsxs6("div", { className: "relative z-10 flex w-full max-w-2xl flex-col items-center", children: [
1967
+ /* @__PURE__ */ jsx25(LogoMark, { className: cn("mb-7 h-10 w-auto", accentText) }),
1968
+ /* @__PURE__ */ jsx25("p", { className: cn("mb-6 font-mono-tech text-[11px] uppercase tracking-[0.34em]", accentText), children: eyebrow }),
1969
+ /* @__PURE__ */ jsx25("p", { className: cn("font-serif-display text-[110px] font-medium leading-[0.9] sm:text-[180px]", accentText), children: code }),
1970
+ /* @__PURE__ */ jsxs6("h1", { className: "mt-4 font-serif-display text-3xl font-light leading-tight text-white sm:text-5xl", children: [
1840
1971
  headlineLead,
1841
- /* @__PURE__ */ jsx24("span", { className: cn("font-serif italic", accentText), children: headlineAccent }),
1972
+ /* @__PURE__ */ jsx25("span", { className: cn("font-serif italic", accentText), children: headlineAccent }),
1842
1973
  headlineTail
1843
1974
  ] }),
1844
- /* @__PURE__ */ jsx24("p", { className: "mx-auto mt-5 max-w-md text-sm leading-relaxed text-main-mist/60 sm:text-base", children: subtext }),
1845
- /* @__PURE__ */ jsxs5("div", { className: "mt-9 flex flex-col items-center gap-3 sm:flex-row", children: [
1975
+ /* @__PURE__ */ jsx25("p", { className: "mx-auto mt-5 max-w-md text-sm leading-relaxed text-main-mist/60 sm:text-base", children: subtext }),
1976
+ /* @__PURE__ */ jsxs6("div", { className: "mt-9 flex flex-col items-center gap-3 sm:flex-row", children: [
1846
1977
  children,
1847
- links?.map((link) => /* @__PURE__ */ jsxs5(L, { href: link.href, className: statusButtonClass(accent, link.variant ?? "filled"), children: [
1848
- link.leadingArrow ? /* @__PURE__ */ jsx24(ArrowLeftIcon, { className: "mr-2 h-4 w-4" }) : null,
1978
+ links?.map((link) => /* @__PURE__ */ jsxs6(L, { href: link.href, className: statusButtonClass(accent, link.variant ?? "filled"), children: [
1979
+ link.leadingArrow ? /* @__PURE__ */ jsx25(ArrowLeftIcon, { className: "mr-2 h-4 w-4" }) : null,
1849
1980
  link.label
1850
1981
  ] }, link.label))
1851
1982
  ] })
@@ -1853,7 +1984,7 @@ function StatusScreen({
1853
1984
  ] });
1854
1985
  }
1855
1986
  function NotFound({ linkComponent = "a", homeHref = "/", contactHref = "/contact" }) {
1856
- return /* @__PURE__ */ jsx24(
1987
+ return /* @__PURE__ */ jsx25(
1857
1988
  StatusScreen,
1858
1989
  {
1859
1990
  accent: "teal",
@@ -1871,7 +2002,7 @@ function NotFound({ linkComponent = "a", homeHref = "/", contactHref = "/contact
1871
2002
  );
1872
2003
  }
1873
2004
  function Forbidden({ linkComponent = "a", homeHref = "/", contactHref = "/contact" }) {
1874
- return /* @__PURE__ */ jsx24(
2005
+ return /* @__PURE__ */ jsx25(
1875
2006
  StatusScreen,
1876
2007
  {
1877
2008
  accent: "gold",
@@ -1889,7 +2020,7 @@ function Forbidden({ linkComponent = "a", homeHref = "/", contactHref = "/contac
1889
2020
  );
1890
2021
  }
1891
2022
  function ServerError({ linkComponent = "a", homeHref = "/", reset }) {
1892
- return /* @__PURE__ */ jsx24(
2023
+ return /* @__PURE__ */ jsx25(
1893
2024
  StatusScreen,
1894
2025
  {
1895
2026
  accent: "red",
@@ -1900,7 +2031,7 @@ function ServerError({ linkComponent = "a", homeHref = "/", reset }) {
1900
2031
  subtext: "Something broke on our end \u2014 not yours. We've been alerted and are restoring service. Please try again in a moment.",
1901
2032
  linkComponent,
1902
2033
  links: [{ label: "Back to home", href: homeHref, variant: "outline", leadingArrow: true }],
1903
- children: /* @__PURE__ */ jsx24(
2034
+ children: /* @__PURE__ */ jsx25(
1904
2035
  "button",
1905
2036
  {
1906
2037
  type: "button",
@@ -1928,14 +2059,14 @@ var TABLE_CELL = "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr
1928
2059
  var TABLE_CAPTION = "text-muted-foreground mt-4 text-sm";
1929
2060
 
1930
2061
  // src/components/table.tsx
1931
- import { jsx as jsx25 } from "react/jsx-runtime";
2062
+ import { jsx as jsx26 } from "react/jsx-runtime";
1932
2063
  function Table({ className, ...props }) {
1933
- return /* @__PURE__ */ jsx25(
2064
+ return /* @__PURE__ */ jsx26(
1934
2065
  "div",
1935
2066
  {
1936
2067
  "data-slot": "table-container",
1937
2068
  className: TABLE_CONTAINER,
1938
- children: /* @__PURE__ */ jsx25(
2069
+ children: /* @__PURE__ */ jsx26(
1939
2070
  "table",
1940
2071
  {
1941
2072
  "data-slot": "table",
@@ -1950,7 +2081,7 @@ function TableHeader({
1950
2081
  className,
1951
2082
  ...props
1952
2083
  }) {
1953
- return /* @__PURE__ */ jsx25(
2084
+ return /* @__PURE__ */ jsx26(
1954
2085
  "thead",
1955
2086
  {
1956
2087
  "data-slot": "table-header",
@@ -1963,7 +2094,7 @@ function TableBody({
1963
2094
  className,
1964
2095
  ...props
1965
2096
  }) {
1966
- return /* @__PURE__ */ jsx25(
2097
+ return /* @__PURE__ */ jsx26(
1967
2098
  "tbody",
1968
2099
  {
1969
2100
  "data-slot": "table-body",
@@ -1976,7 +2107,7 @@ function TableFooter({
1976
2107
  className,
1977
2108
  ...props
1978
2109
  }) {
1979
- return /* @__PURE__ */ jsx25(
2110
+ return /* @__PURE__ */ jsx26(
1980
2111
  "tfoot",
1981
2112
  {
1982
2113
  "data-slot": "table-footer",
@@ -1986,7 +2117,7 @@ function TableFooter({
1986
2117
  );
1987
2118
  }
1988
2119
  function TableRow({ className, ...props }) {
1989
- return /* @__PURE__ */ jsx25(
2120
+ return /* @__PURE__ */ jsx26(
1990
2121
  "tr",
1991
2122
  {
1992
2123
  "data-slot": "table-row",
@@ -1996,7 +2127,7 @@ function TableRow({ className, ...props }) {
1996
2127
  );
1997
2128
  }
1998
2129
  function TableHead({ className, ...props }) {
1999
- return /* @__PURE__ */ jsx25(
2130
+ return /* @__PURE__ */ jsx26(
2000
2131
  "th",
2001
2132
  {
2002
2133
  "data-slot": "table-head",
@@ -2006,7 +2137,7 @@ function TableHead({ className, ...props }) {
2006
2137
  );
2007
2138
  }
2008
2139
  function TableCell({ className, ...props }) {
2009
- return /* @__PURE__ */ jsx25(
2140
+ return /* @__PURE__ */ jsx26(
2010
2141
  "td",
2011
2142
  {
2012
2143
  "data-slot": "table-cell",
@@ -2019,7 +2150,7 @@ function TableCaption({
2019
2150
  className,
2020
2151
  ...props
2021
2152
  }) {
2022
- return /* @__PURE__ */ jsx25(
2153
+ return /* @__PURE__ */ jsx26(
2023
2154
  "caption",
2024
2155
  {
2025
2156
  "data-slot": "table-caption",
@@ -2030,7 +2161,7 @@ function TableCaption({
2030
2161
  }
2031
2162
 
2032
2163
  // src/components/accordion.tsx
2033
- import * as React35 from "react";
2164
+ import * as React37 from "react";
2034
2165
 
2035
2166
  // src/generated/accordion.ts
2036
2167
  var ACCORDION_ITEM = "border-b last:border-b-0";
@@ -2040,16 +2171,16 @@ var ACCORDION_CONTENT = "data-[state=closed]:animate-accordion-up data-[state=op
2040
2171
  var ACCORDION_CONTENT_INNER = "pt-0 pb-4";
2041
2172
 
2042
2173
  // src/components/accordion.tsx
2043
- import { jsx as jsx26, jsxs as jsxs6 } from "react/jsx-runtime";
2044
- var AccordionContext = React35.createContext(null);
2174
+ import { jsx as jsx27, jsxs as jsxs7 } from "react/jsx-runtime";
2175
+ var AccordionContext = React37.createContext(null);
2045
2176
  function useAccordion() {
2046
- const ctx = React35.useContext(AccordionContext);
2177
+ const ctx = React37.useContext(AccordionContext);
2047
2178
  if (!ctx) throw new Error("Accordion parts must be used within <Accordion>");
2048
2179
  return ctx;
2049
2180
  }
2050
- var ItemContext = React35.createContext(null);
2181
+ var ItemContext = React37.createContext(null);
2051
2182
  function useItemValue() {
2052
- const value = React35.useContext(ItemContext);
2183
+ const value = React37.useContext(ItemContext);
2053
2184
  if (value === null)
2054
2185
  throw new Error("AccordionTrigger/Content must be used within <AccordionItem>");
2055
2186
  return value;
@@ -2077,7 +2208,7 @@ function Accordion({
2077
2208
  if (open.includes(v)) setOpen(collapsible ? [] : open);
2078
2209
  else setOpen([v]);
2079
2210
  };
2080
- return /* @__PURE__ */ jsx26(AccordionContext.Provider, { value: { isOpen, toggle }, children: /* @__PURE__ */ jsx26("div", { "data-slot": "accordion", ...props, children }) });
2211
+ return /* @__PURE__ */ jsx27(AccordionContext.Provider, { value: { isOpen, toggle }, children: /* @__PURE__ */ jsx27("div", { "data-slot": "accordion", ...props, children }) });
2081
2212
  }
2082
2213
  function AccordionItem({
2083
2214
  className,
@@ -2085,7 +2216,7 @@ function AccordionItem({
2085
2216
  children,
2086
2217
  ...props
2087
2218
  }) {
2088
- return /* @__PURE__ */ jsx26(ItemContext.Provider, { value, children: /* @__PURE__ */ jsx26(
2219
+ return /* @__PURE__ */ jsx27(ItemContext.Provider, { value, children: /* @__PURE__ */ jsx27(
2089
2220
  "div",
2090
2221
  {
2091
2222
  "data-slot": "accordion-item",
@@ -2104,7 +2235,7 @@ function AccordionTrigger({
2104
2235
  const { isOpen, toggle } = useAccordion();
2105
2236
  const value = useItemValue();
2106
2237
  const open = isOpen(value);
2107
- return /* @__PURE__ */ jsx26("h3", { className: ACCORDION_HEADER, "data-slot": "accordion-header", children: /* @__PURE__ */ jsxs6(
2238
+ return /* @__PURE__ */ jsx27("h3", { className: ACCORDION_HEADER, "data-slot": "accordion-header", children: /* @__PURE__ */ jsxs7(
2108
2239
  "button",
2109
2240
  {
2110
2241
  type: "button",
@@ -2119,7 +2250,7 @@ function AccordionTrigger({
2119
2250
  ...props,
2120
2251
  children: [
2121
2252
  children,
2122
- /* @__PURE__ */ jsx26(
2253
+ /* @__PURE__ */ jsx27(
2123
2254
  "svg",
2124
2255
  {
2125
2256
  xmlns: "http://www.w3.org/2000/svg",
@@ -2132,7 +2263,7 @@ function AccordionTrigger({
2132
2263
  strokeLinecap: "round",
2133
2264
  strokeLinejoin: "round",
2134
2265
  className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200",
2135
- children: /* @__PURE__ */ jsx26("path", { d: "m6 9 6 6 6-6" })
2266
+ children: /* @__PURE__ */ jsx27("path", { d: "m6 9 6 6 6-6" })
2136
2267
  }
2137
2268
  )
2138
2269
  ]
@@ -2147,26 +2278,26 @@ function AccordionContent({
2147
2278
  const { isOpen } = useAccordion();
2148
2279
  const value = useItemValue();
2149
2280
  if (!isOpen(value)) return null;
2150
- return /* @__PURE__ */ jsx26(
2281
+ return /* @__PURE__ */ jsx27(
2151
2282
  "div",
2152
2283
  {
2153
2284
  "data-slot": "accordion-content",
2154
2285
  "data-state": "open",
2155
2286
  className: ACCORDION_CONTENT,
2156
2287
  ...props,
2157
- children: /* @__PURE__ */ jsx26("div", { className: cn(ACCORDION_CONTENT_INNER, className), children })
2288
+ children: /* @__PURE__ */ jsx27("div", { className: cn(ACCORDION_CONTENT_INNER, className), children })
2158
2289
  }
2159
2290
  );
2160
2291
  }
2161
2292
 
2162
2293
  // src/components/collapsible.tsx
2163
- import * as React36 from "react";
2164
- import { jsx as jsx27 } from "react/jsx-runtime";
2165
- var CollapsibleContext = React36.createContext(
2294
+ import * as React38 from "react";
2295
+ import { jsx as jsx28 } from "react/jsx-runtime";
2296
+ var CollapsibleContext = React38.createContext(
2166
2297
  null
2167
2298
  );
2168
2299
  function useCollapsible() {
2169
- const ctx = React36.useContext(CollapsibleContext);
2300
+ const ctx = React38.useContext(CollapsibleContext);
2170
2301
  if (!ctx) throw new Error("Collapsible parts must be used within <Collapsible>");
2171
2302
  return ctx;
2172
2303
  }
@@ -2182,14 +2313,14 @@ function Collapsible({
2182
2313
  defaultValue: defaultOpen,
2183
2314
  ...onOpenChange ? { onChange: onOpenChange } : {}
2184
2315
  });
2185
- return /* @__PURE__ */ jsx27(CollapsibleContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx27("div", { "data-slot": "collapsible", "data-state": isOpen ? "open" : "closed", ...props, children }) });
2316
+ return /* @__PURE__ */ jsx28(CollapsibleContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx28("div", { "data-slot": "collapsible", "data-state": isOpen ? "open" : "closed", ...props, children }) });
2186
2317
  }
2187
2318
  function CollapsibleTrigger({
2188
2319
  onClick,
2189
2320
  ...props
2190
2321
  }) {
2191
2322
  const { open, setOpen } = useCollapsible();
2192
- return /* @__PURE__ */ jsx27(
2323
+ return /* @__PURE__ */ jsx28(
2193
2324
  "button",
2194
2325
  {
2195
2326
  type: "button",
@@ -2210,11 +2341,11 @@ function CollapsibleContent({
2210
2341
  }) {
2211
2342
  const { open } = useCollapsible();
2212
2343
  if (!open) return null;
2213
- return /* @__PURE__ */ jsx27("div", { "data-slot": "collapsible-content", "data-state": "open", ...props, children });
2344
+ return /* @__PURE__ */ jsx28("div", { "data-slot": "collapsible-content", "data-state": "open", ...props, children });
2214
2345
  }
2215
2346
 
2216
2347
  // src/components/tabs.tsx
2217
- import * as React37 from "react";
2348
+ import * as React39 from "react";
2218
2349
 
2219
2350
  // src/generated/tabs.ts
2220
2351
  var TABS_ROOT = "flex flex-col gap-2";
@@ -2223,10 +2354,10 @@ var TABS_TRIGGER = "data-[state=active]:bg-background focus-visible:border-ring
2223
2354
  var TABS_CONTENT = "flex-1 outline-none";
2224
2355
 
2225
2356
  // src/components/tabs.tsx
2226
- import { jsx as jsx28 } from "react/jsx-runtime";
2227
- var TabsContext = React37.createContext(null);
2357
+ import { jsx as jsx29 } from "react/jsx-runtime";
2358
+ var TabsContext = React39.createContext(null);
2228
2359
  function useTabs() {
2229
- const ctx = React37.useContext(TabsContext);
2360
+ const ctx = React39.useContext(TabsContext);
2230
2361
  if (!ctx) throw new Error("Tabs parts must be used within <Tabs>");
2231
2362
  return ctx;
2232
2363
  }
@@ -2244,7 +2375,7 @@ function Tabs({
2244
2375
  defaultValue,
2245
2376
  ...onValueChange ? { onChange: onValueChange } : {}
2246
2377
  });
2247
- return /* @__PURE__ */ jsx28(TabsContext.Provider, { value: { value: active, setValue, orientation }, children: /* @__PURE__ */ jsx28(
2378
+ return /* @__PURE__ */ jsx29(TabsContext.Provider, { value: { value: active, setValue, orientation }, children: /* @__PURE__ */ jsx29(
2248
2379
  "div",
2249
2380
  {
2250
2381
  "data-slot": "tabs",
@@ -2262,12 +2393,12 @@ function TabsList({
2262
2393
  ...props
2263
2394
  }) {
2264
2395
  const { orientation } = useTabs();
2265
- const items = React37.Children.toArray(children);
2396
+ const items = React39.Children.toArray(children);
2266
2397
  const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } = useRovingFocus({
2267
2398
  count: items.length,
2268
2399
  orientation: orientation === "vertical" ? "vertical" : "horizontal"
2269
2400
  });
2270
- return /* @__PURE__ */ jsx28(
2401
+ return /* @__PURE__ */ jsx29(
2271
2402
  "div",
2272
2403
  {
2273
2404
  role: "tablist",
@@ -2280,7 +2411,7 @@ function TabsList({
2280
2411
  },
2281
2412
  ...props,
2282
2413
  children: items.map(
2283
- (child, index) => React37.isValidElement(child) ? React37.cloneElement(child, {
2414
+ (child, index) => React39.isValidElement(child) ? React39.cloneElement(child, {
2284
2415
  __index: index,
2285
2416
  __isFocusItem: index === activeIndex,
2286
2417
  __onFocusItem: () => setActiveIndex(index)
@@ -2300,7 +2431,7 @@ function TabsTrigger({
2300
2431
  }) {
2301
2432
  const { value: active, setValue } = useTabs();
2302
2433
  const selected = active === value;
2303
- return /* @__PURE__ */ jsx28(
2434
+ return /* @__PURE__ */ jsx29(
2304
2435
  "button",
2305
2436
  {
2306
2437
  type: "button",
@@ -2331,7 +2462,7 @@ function TabsContent({
2331
2462
  }) {
2332
2463
  const { value: active } = useTabs();
2333
2464
  if (active !== value) return null;
2334
- return /* @__PURE__ */ jsx28(
2465
+ return /* @__PURE__ */ jsx29(
2335
2466
  "div",
2336
2467
  {
2337
2468
  role: "tabpanel",
@@ -2360,7 +2491,7 @@ var toggleSizeClasses = {
2360
2491
  };
2361
2492
 
2362
2493
  // src/components/toggle.tsx
2363
- import { jsx as jsx29 } from "react/jsx-runtime";
2494
+ import { jsx as jsx30 } from "react/jsx-runtime";
2364
2495
  function toggleVariants({
2365
2496
  variant = "default",
2366
2497
  size = "default",
@@ -2383,7 +2514,7 @@ function Toggle({
2383
2514
  defaultValue: defaultPressed,
2384
2515
  ...onPressedChange ? { onChange: onPressedChange } : {}
2385
2516
  });
2386
- return /* @__PURE__ */ jsx29(
2517
+ return /* @__PURE__ */ jsx30(
2387
2518
  "button",
2388
2519
  {
2389
2520
  type: "button",
@@ -2401,9 +2532,9 @@ function Toggle({
2401
2532
  }
2402
2533
 
2403
2534
  // src/components/toggle-group.tsx
2404
- import * as React39 from "react";
2405
- import { jsx as jsx30 } from "react/jsx-runtime";
2406
- var ToggleGroupContext = React39.createContext({
2535
+ import * as React41 from "react";
2536
+ import { jsx as jsx31 } from "react/jsx-runtime";
2537
+ var ToggleGroupContext = React41.createContext({
2407
2538
  variant: "default",
2408
2539
  size: "default",
2409
2540
  value: [],
@@ -2430,7 +2561,7 @@ function ToggleGroup({
2430
2561
  defaultValue: toArray(defaultValue),
2431
2562
  onChange: (next) => onValueChange?.(type === "single" ? next[0] ?? "" : next)
2432
2563
  });
2433
- const toggle = React39.useCallback(
2564
+ const toggle = React41.useCallback(
2434
2565
  (itemValue) => {
2435
2566
  if (type === "single") {
2436
2567
  setSelected(selected.includes(itemValue) ? [] : [itemValue]);
@@ -2442,7 +2573,7 @@ function ToggleGroup({
2442
2573
  },
2443
2574
  [type, selected, setSelected]
2444
2575
  );
2445
- return /* @__PURE__ */ jsx30(
2576
+ return /* @__PURE__ */ jsx31(
2446
2577
  "div",
2447
2578
  {
2448
2579
  "data-slot": "toggle-group",
@@ -2453,7 +2584,7 @@ function ToggleGroup({
2453
2584
  className
2454
2585
  ),
2455
2586
  ...props,
2456
- children: /* @__PURE__ */ jsx30(ToggleGroupContext.Provider, { value: { variant, size, value: selected, toggle }, children })
2587
+ children: /* @__PURE__ */ jsx31(ToggleGroupContext.Provider, { value: { variant, size, value: selected, toggle }, children })
2457
2588
  }
2458
2589
  );
2459
2590
  }
@@ -2466,11 +2597,11 @@ function ToggleGroupItem({
2466
2597
  onClick,
2467
2598
  ...props
2468
2599
  }) {
2469
- const context = React39.useContext(ToggleGroupContext);
2600
+ const context = React41.useContext(ToggleGroupContext);
2470
2601
  const resolvedVariant = context.variant || variant || "default";
2471
2602
  const resolvedSize = context.size || size || "default";
2472
2603
  const on = context.value.includes(value);
2473
- return /* @__PURE__ */ jsx30(
2604
+ return /* @__PURE__ */ jsx31(
2474
2605
  "button",
2475
2606
  {
2476
2607
  type: "button",
@@ -2496,7 +2627,7 @@ function ToggleGroupItem({
2496
2627
 
2497
2628
  // src/components/switch.tsx
2498
2629
  import "react";
2499
- import { jsx as jsx31 } from "react/jsx-runtime";
2630
+ import { jsx as jsx32 } from "react/jsx-runtime";
2500
2631
  function Switch({
2501
2632
  className,
2502
2633
  checked,
@@ -2512,7 +2643,7 @@ function Switch({
2512
2643
  ...onCheckedChange ? { onChange: onCheckedChange } : {}
2513
2644
  });
2514
2645
  const state = on ? "checked" : "unchecked";
2515
- return /* @__PURE__ */ jsx31(
2646
+ return /* @__PURE__ */ jsx32(
2516
2647
  "button",
2517
2648
  {
2518
2649
  type: "button",
@@ -2530,12 +2661,12 @@ function Switch({
2530
2661
  setOn(!on);
2531
2662
  },
2532
2663
  ...props,
2533
- children: /* @__PURE__ */ jsx31(
2664
+ children: /* @__PURE__ */ jsx32(
2534
2665
  "span",
2535
2666
  {
2536
2667
  "data-slot": "switch-thumb",
2537
2668
  "data-state": state,
2538
- className: "bg-background pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
2669
+ className: "data-[state=checked]:bg-primary-foreground data-[state=unchecked]:bg-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
2539
2670
  }
2540
2671
  )
2541
2672
  }
@@ -2544,7 +2675,7 @@ function Switch({
2544
2675
 
2545
2676
  // src/components/checkbox.tsx
2546
2677
  import "react";
2547
- import { jsx as jsx32 } from "react/jsx-runtime";
2678
+ import { jsx as jsx33 } from "react/jsx-runtime";
2548
2679
  function Checkbox({
2549
2680
  className,
2550
2681
  checked,
@@ -2560,7 +2691,7 @@ function Checkbox({
2560
2691
  ...onCheckedChange ? { onChange: onCheckedChange } : {}
2561
2692
  });
2562
2693
  const state = on ? "checked" : "unchecked";
2563
- return /* @__PURE__ */ jsx32(
2694
+ return /* @__PURE__ */ jsx33(
2564
2695
  "button",
2565
2696
  {
2566
2697
  type: "button",
@@ -2578,12 +2709,12 @@ function Checkbox({
2578
2709
  setOn(!on);
2579
2710
  },
2580
2711
  ...props,
2581
- children: on && /* @__PURE__ */ jsx32(
2712
+ children: on && /* @__PURE__ */ jsx33(
2582
2713
  "span",
2583
2714
  {
2584
2715
  "data-slot": "checkbox-indicator",
2585
2716
  className: "flex items-center justify-center text-current transition-none",
2586
- children: /* @__PURE__ */ jsx32(
2717
+ children: /* @__PURE__ */ jsx33(
2587
2718
  "svg",
2588
2719
  {
2589
2720
  xmlns: "http://www.w3.org/2000/svg",
@@ -2595,7 +2726,7 @@ function Checkbox({
2595
2726
  strokeLinejoin: "round",
2596
2727
  className: "size-3.5",
2597
2728
  "aria-hidden": "true",
2598
- children: /* @__PURE__ */ jsx32("path", { d: "M20 6 9 17l-5-5" })
2729
+ children: /* @__PURE__ */ jsx33("path", { d: "M20 6 9 17l-5-5" })
2599
2730
  }
2600
2731
  )
2601
2732
  }
@@ -2605,15 +2736,15 @@ function Checkbox({
2605
2736
  }
2606
2737
 
2607
2738
  // src/components/radio-group.tsx
2608
- import * as React42 from "react";
2739
+ import * as React44 from "react";
2609
2740
 
2610
2741
  // src/generated/radio-group.ts
2611
2742
  var RADIO_GROUP_ROOT = "grid gap-3";
2612
2743
  var RADIO_GROUP_ITEM = "border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50";
2613
2744
 
2614
2745
  // src/components/radio-group.tsx
2615
- import { jsx as jsx33 } from "react/jsx-runtime";
2616
- var RadioGroupContext = React42.createContext(
2746
+ import { jsx as jsx34 } from "react/jsx-runtime";
2747
+ var RadioGroupContext = React44.createContext(
2617
2748
  null
2618
2749
  );
2619
2750
  function RadioGroup({
@@ -2630,10 +2761,10 @@ function RadioGroup({
2630
2761
  defaultValue,
2631
2762
  ...onValueChange ? { onChange: onValueChange } : {}
2632
2763
  });
2633
- const itemsRef = React42.useRef([]);
2634
- const [count, setCount] = React42.useState(0);
2764
+ const itemsRef = React44.useRef([]);
2765
+ const [count, setCount] = React44.useState(0);
2635
2766
  const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } = useRovingFocus({ count, orientation: "vertical", loop: true });
2636
- const register = React42.useCallback((el) => {
2767
+ const register = React44.useCallback((el) => {
2637
2768
  const list = itemsRef.current;
2638
2769
  let index = list.indexOf(el);
2639
2770
  if (index === -1) {
@@ -2643,11 +2774,11 @@ function RadioGroup({
2643
2774
  }
2644
2775
  return index;
2645
2776
  }, []);
2646
- const ctx = React42.useMemo(
2777
+ const ctx = React44.useMemo(
2647
2778
  () => ({ value: current, setValue: setCurrent, register, activeIndex, setActiveIndex }),
2648
2779
  [current, setCurrent, register, activeIndex, setActiveIndex]
2649
2780
  );
2650
- return /* @__PURE__ */ jsx33(RadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx33(
2781
+ return /* @__PURE__ */ jsx34(RadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx34(
2651
2782
  "div",
2652
2783
  {
2653
2784
  "data-slot": "radio-group",
@@ -2669,14 +2800,14 @@ function RadioGroupItem({
2669
2800
  onClick,
2670
2801
  ...props
2671
2802
  }) {
2672
- const ctx = React42.useContext(RadioGroupContext);
2803
+ const ctx = React44.useContext(RadioGroupContext);
2673
2804
  if (!ctx) throw new Error("RadioGroupItem must be used within a RadioGroup");
2674
- const indexRef = React42.useRef(-1);
2805
+ const indexRef = React44.useRef(-1);
2675
2806
  const checked = ctx.value === value;
2676
- React42.useEffect(() => {
2807
+ React44.useEffect(() => {
2677
2808
  if (checked) ctx.setActiveIndex(indexRef.current);
2678
2809
  }, [checked]);
2679
- return /* @__PURE__ */ jsx33(
2810
+ return /* @__PURE__ */ jsx34(
2680
2811
  "button",
2681
2812
  {
2682
2813
  ref: (el) => {
@@ -2695,18 +2826,18 @@ function RadioGroupItem({
2695
2826
  ctx.setValue(value);
2696
2827
  },
2697
2828
  ...props,
2698
- children: checked ? /* @__PURE__ */ jsx33(
2829
+ children: checked ? /* @__PURE__ */ jsx34(
2699
2830
  "span",
2700
2831
  {
2701
2832
  "data-slot": "radio-group-indicator",
2702
2833
  className: "relative flex items-center justify-center",
2703
- children: /* @__PURE__ */ jsx33(
2834
+ children: /* @__PURE__ */ jsx34(
2704
2835
  "svg",
2705
2836
  {
2706
2837
  className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2",
2707
2838
  viewBox: "0 0 24 24",
2708
2839
  "aria-hidden": "true",
2709
- children: /* @__PURE__ */ jsx33("circle", { cx: "12", cy: "12", r: "10" })
2840
+ children: /* @__PURE__ */ jsx34("circle", { cx: "12", cy: "12", r: "10" })
2710
2841
  }
2711
2842
  )
2712
2843
  }
@@ -2716,7 +2847,7 @@ function RadioGroupItem({
2716
2847
  }
2717
2848
 
2718
2849
  // src/components/slider.tsx
2719
- import * as React43 from "react";
2850
+ import * as React45 from "react";
2720
2851
 
2721
2852
  // src/generated/slider.ts
2722
2853
  var SLIDER_ROOT = "relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col";
@@ -2725,7 +2856,7 @@ var SLIDER_RANGE = "bg-primary absolute data-[orientation=horizontal]:h-full dat
2725
2856
  var SLIDER_THUMB = "border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50";
2726
2857
 
2727
2858
  // src/components/slider.tsx
2728
- import { jsx as jsx34, jsxs as jsxs7 } from "react/jsx-runtime";
2859
+ import { jsx as jsx35, jsxs as jsxs8 } from "react/jsx-runtime";
2729
2860
  function clampStep(value, min, max, step) {
2730
2861
  const clamped = Math.min(max, Math.max(min, value));
2731
2862
  if (step <= 0) return clamped;
@@ -2752,9 +2883,9 @@ function Slider({
2752
2883
  const current = clampStep(raw, min, max, step);
2753
2884
  const span = Math.max(max - min, Number.EPSILON);
2754
2885
  const percent = Math.min(100, Math.max(0, (current - min) / span * 100));
2755
- const trackRef = React43.useRef(null);
2756
- const draggingRef = React43.useRef(false);
2757
- const valueFromPointer = React43.useCallback(
2886
+ const trackRef = React45.useRef(null);
2887
+ const draggingRef = React45.useRef(false);
2888
+ const valueFromPointer = React45.useCallback(
2758
2889
  (clientX, clientY) => {
2759
2890
  const rect = trackRef.current?.getBoundingClientRect();
2760
2891
  if (!rect) return current;
@@ -2803,7 +2934,7 @@ function Slider({
2803
2934
  };
2804
2935
  const rangeStyle = orientation === "vertical" ? { height: `${percent}%` } : { width: `${percent}%` };
2805
2936
  const thumbStyle = orientation === "vertical" ? { position: "absolute", bottom: `${percent}%`, left: "50%", transform: "translate(-50%, 50%)" } : { position: "absolute", left: `${percent}%`, top: "50%", transform: "translate(-50%, -50%)" };
2806
- return /* @__PURE__ */ jsxs7(
2937
+ return /* @__PURE__ */ jsxs8(
2807
2938
  "span",
2808
2939
  {
2809
2940
  "data-slot": "slider",
@@ -2815,14 +2946,14 @@ function Slider({
2815
2946
  onPointerMove,
2816
2947
  onPointerUp,
2817
2948
  children: [
2818
- /* @__PURE__ */ jsx34(
2949
+ /* @__PURE__ */ jsx35(
2819
2950
  "span",
2820
2951
  {
2821
2952
  ref: trackRef,
2822
2953
  "data-slot": "slider-track",
2823
2954
  "data-orientation": orientation,
2824
2955
  className: SLIDER_TRACK,
2825
- children: /* @__PURE__ */ jsx34(
2956
+ children: /* @__PURE__ */ jsx35(
2826
2957
  "span",
2827
2958
  {
2828
2959
  "data-slot": "slider-range",
@@ -2833,7 +2964,7 @@ function Slider({
2833
2964
  )
2834
2965
  }
2835
2966
  ),
2836
- /* @__PURE__ */ jsx34(
2967
+ /* @__PURE__ */ jsx35(
2837
2968
  "span",
2838
2969
  {
2839
2970
  "data-slot": "slider-thumb",
@@ -2868,15 +2999,15 @@ var scrollBarOrientations = {
2868
2999
  };
2869
3000
 
2870
3001
  // src/components/scroll-area.tsx
2871
- import { jsx as jsx35, jsxs as jsxs8 } from "react/jsx-runtime";
3002
+ import { jsx as jsx36, jsxs as jsxs9 } from "react/jsx-runtime";
2872
3003
  function ScrollArea({
2873
3004
  className,
2874
3005
  children,
2875
3006
  ...props
2876
3007
  }) {
2877
- return /* @__PURE__ */ jsxs8("div", { "data-slot": "scroll-area", className: cn("relative", className), ...props, children: [
2878
- /* @__PURE__ */ jsx35("div", { "data-slot": "scroll-area-viewport", className: SCROLL_AREA_VIEWPORT, children }),
2879
- /* @__PURE__ */ jsx35(ScrollBar, {})
3008
+ return /* @__PURE__ */ jsxs9("div", { "data-slot": "scroll-area", className: cn("relative", className), ...props, children: [
3009
+ /* @__PURE__ */ jsx36("div", { "data-slot": "scroll-area-viewport", className: SCROLL_AREA_VIEWPORT, children }),
3010
+ /* @__PURE__ */ jsx36(ScrollBar, {})
2880
3011
  ] });
2881
3012
  }
2882
3013
  function ScrollBar({
@@ -2884,20 +3015,20 @@ function ScrollBar({
2884
3015
  orientation = "vertical",
2885
3016
  ...props
2886
3017
  }) {
2887
- return /* @__PURE__ */ jsx35(
3018
+ return /* @__PURE__ */ jsx36(
2888
3019
  "div",
2889
3020
  {
2890
3021
  "data-slot": "scroll-area-scrollbar",
2891
3022
  "data-orientation": orientation,
2892
3023
  className: cn(SCROLLBAR_BASE, scrollBarOrientations[orientation], className),
2893
3024
  ...props,
2894
- children: /* @__PURE__ */ jsx35("div", { "data-slot": "scroll-area-thumb", className: SCROLL_AREA_THUMB })
3025
+ children: /* @__PURE__ */ jsx36("div", { "data-slot": "scroll-area-thumb", className: SCROLL_AREA_THUMB })
2895
3026
  }
2896
3027
  );
2897
3028
  }
2898
3029
 
2899
3030
  // src/components/sidebar.tsx
2900
- import * as React45 from "react";
3031
+ import * as React47 from "react";
2901
3032
 
2902
3033
  // src/generated/sidebar.ts
2903
3034
  var SIDEBAR_MENU_BUTTON_BASE = "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0";
@@ -2927,12 +3058,12 @@ var SIDEBAR_MENU = "flex w-full min-w-0 flex-col gap-1";
2927
3058
  var SIDEBAR_MENU_ITEM = "group/menu-item relative";
2928
3059
 
2929
3060
  // src/components/sidebar.tsx
2930
- import { jsx as jsx36, jsxs as jsxs9 } from "react/jsx-runtime";
3061
+ import { jsx as jsx37, jsxs as jsxs10 } from "react/jsx-runtime";
2931
3062
  var SIDEBAR_WIDTH = "16rem";
2932
3063
  var SIDEBAR_WIDTH_ICON = "3rem";
2933
- var SidebarContext = React45.createContext(null);
3064
+ var SidebarContext = React47.createContext(null);
2934
3065
  function useSidebar() {
2935
- const ctx = React45.useContext(SidebarContext);
3066
+ const ctx = React47.useContext(SidebarContext);
2936
3067
  if (!ctx) throw new Error("useSidebar must be used within a SidebarProvider.");
2937
3068
  return ctx;
2938
3069
  }
@@ -2950,16 +3081,16 @@ function SidebarProvider({
2950
3081
  defaultValue: defaultOpen,
2951
3082
  ...onOpenChange ? { onChange: onOpenChange } : {}
2952
3083
  });
2953
- const toggleSidebar = React45.useCallback(
3084
+ const toggleSidebar = React47.useCallback(
2954
3085
  () => setOpen(!open),
2955
3086
  [open, setOpen]
2956
3087
  );
2957
3088
  const state = open ? "expanded" : "collapsed";
2958
- const contextValue = React45.useMemo(
3089
+ const contextValue = React47.useMemo(
2959
3090
  () => ({ state, open, setOpen, toggleSidebar }),
2960
3091
  [state, open, setOpen, toggleSidebar]
2961
3092
  );
2962
- return /* @__PURE__ */ jsx36(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx36(
3093
+ return /* @__PURE__ */ jsx37(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx37(
2963
3094
  "div",
2964
3095
  {
2965
3096
  "data-slot": "sidebar-wrapper",
@@ -2984,7 +3115,7 @@ function Sidebar({
2984
3115
  }) {
2985
3116
  const { state } = useSidebar();
2986
3117
  if (collapsible === "none") {
2987
- return /* @__PURE__ */ jsx36(
3118
+ return /* @__PURE__ */ jsx37(
2988
3119
  "div",
2989
3120
  {
2990
3121
  "data-slot": "sidebar",
@@ -2994,7 +3125,7 @@ function Sidebar({
2994
3125
  }
2995
3126
  );
2996
3127
  }
2997
- return /* @__PURE__ */ jsx36(
3128
+ return /* @__PURE__ */ jsx37(
2998
3129
  "div",
2999
3130
  {
3000
3131
  className: "group peer text-sidebar-foreground hidden md:block",
@@ -3003,7 +3134,7 @@ function Sidebar({
3003
3134
  "data-variant": variant,
3004
3135
  "data-side": side,
3005
3136
  "data-slot": "sidebar",
3006
- children: /* @__PURE__ */ jsx36(
3137
+ children: /* @__PURE__ */ jsx37(
3007
3138
  "div",
3008
3139
  {
3009
3140
  "data-slot": "sidebar-inner",
@@ -3022,7 +3153,7 @@ function SidebarTrigger({
3022
3153
  ...props
3023
3154
  }) {
3024
3155
  const { toggleSidebar } = useSidebar();
3025
- return /* @__PURE__ */ jsxs9(
3156
+ return /* @__PURE__ */ jsxs10(
3026
3157
  "button",
3027
3158
  {
3028
3159
  type: "button",
@@ -3037,7 +3168,7 @@ function SidebarTrigger({
3037
3168
  ...props,
3038
3169
  children: [
3039
3170
  children,
3040
- /* @__PURE__ */ jsx36("span", { className: "sr-only", children: "Toggle Sidebar" })
3171
+ /* @__PURE__ */ jsx37("span", { className: "sr-only", children: "Toggle Sidebar" })
3041
3172
  ]
3042
3173
  }
3043
3174
  );
@@ -3047,7 +3178,7 @@ function SidebarRail({
3047
3178
  ...props
3048
3179
  }) {
3049
3180
  const { toggleSidebar } = useSidebar();
3050
- return /* @__PURE__ */ jsx36(
3181
+ return /* @__PURE__ */ jsx37(
3051
3182
  "button",
3052
3183
  {
3053
3184
  type: "button",
@@ -3063,7 +3194,7 @@ function SidebarRail({
3063
3194
  );
3064
3195
  }
3065
3196
  function SidebarInset({ className, ...props }) {
3066
- return /* @__PURE__ */ jsx36(
3197
+ return /* @__PURE__ */ jsx37(
3067
3198
  "main",
3068
3199
  {
3069
3200
  "data-slot": "sidebar-inset",
@@ -3073,7 +3204,7 @@ function SidebarInset({ className, ...props }) {
3073
3204
  );
3074
3205
  }
3075
3206
  function SidebarHeader({ className, ...props }) {
3076
- return /* @__PURE__ */ jsx36(
3207
+ return /* @__PURE__ */ jsx37(
3077
3208
  "div",
3078
3209
  {
3079
3210
  "data-slot": "sidebar-header",
@@ -3084,7 +3215,7 @@ function SidebarHeader({ className, ...props }) {
3084
3215
  );
3085
3216
  }
3086
3217
  function SidebarFooter({ className, ...props }) {
3087
- return /* @__PURE__ */ jsx36(
3218
+ return /* @__PURE__ */ jsx37(
3088
3219
  "div",
3089
3220
  {
3090
3221
  "data-slot": "sidebar-footer",
@@ -3098,7 +3229,7 @@ function SidebarSeparator({
3098
3229
  className,
3099
3230
  ...props
3100
3231
  }) {
3101
- return /* @__PURE__ */ jsx36(
3232
+ return /* @__PURE__ */ jsx37(
3102
3233
  "div",
3103
3234
  {
3104
3235
  "data-slot": "sidebar-separator",
@@ -3110,7 +3241,7 @@ function SidebarSeparator({
3110
3241
  );
3111
3242
  }
3112
3243
  function SidebarContent({ className, ...props }) {
3113
- return /* @__PURE__ */ jsx36(
3244
+ return /* @__PURE__ */ jsx37(
3114
3245
  "div",
3115
3246
  {
3116
3247
  "data-slot": "sidebar-content",
@@ -3121,7 +3252,7 @@ function SidebarContent({ className, ...props }) {
3121
3252
  );
3122
3253
  }
3123
3254
  function SidebarGroup({ className, ...props }) {
3124
- return /* @__PURE__ */ jsx36(
3255
+ return /* @__PURE__ */ jsx37(
3125
3256
  "div",
3126
3257
  {
3127
3258
  "data-slot": "sidebar-group",
@@ -3137,7 +3268,7 @@ function SidebarGroupLabel({
3137
3268
  ...props
3138
3269
  }) {
3139
3270
  const Comp = asChild ? Slot : "div";
3140
- return /* @__PURE__ */ jsx36(
3271
+ return /* @__PURE__ */ jsx37(
3141
3272
  Comp,
3142
3273
  {
3143
3274
  "data-slot": "sidebar-group-label",
@@ -3151,7 +3282,7 @@ function SidebarGroupContent({
3151
3282
  className,
3152
3283
  ...props
3153
3284
  }) {
3154
- return /* @__PURE__ */ jsx36(
3285
+ return /* @__PURE__ */ jsx37(
3155
3286
  "div",
3156
3287
  {
3157
3288
  "data-slot": "sidebar-group-content",
@@ -3162,7 +3293,7 @@ function SidebarGroupContent({
3162
3293
  );
3163
3294
  }
3164
3295
  function SidebarMenu({ className, ...props }) {
3165
- return /* @__PURE__ */ jsx36(
3296
+ return /* @__PURE__ */ jsx37(
3166
3297
  "ul",
3167
3298
  {
3168
3299
  "data-slot": "sidebar-menu",
@@ -3173,7 +3304,7 @@ function SidebarMenu({ className, ...props }) {
3173
3304
  );
3174
3305
  }
3175
3306
  function SidebarMenuItem({ className, ...props }) {
3176
- return /* @__PURE__ */ jsx36(
3307
+ return /* @__PURE__ */ jsx37(
3177
3308
  "li",
3178
3309
  {
3179
3310
  "data-slot": "sidebar-menu-item",
@@ -3192,7 +3323,7 @@ function SidebarMenuButton({
3192
3323
  ...props
3193
3324
  }) {
3194
3325
  const Comp = asChild ? Slot : "button";
3195
- return /* @__PURE__ */ jsx36(
3326
+ return /* @__PURE__ */ jsx37(
3196
3327
  Comp,
3197
3328
  {
3198
3329
  "data-slot": "sidebar-menu-button",
@@ -3211,7 +3342,7 @@ function SidebarMenuButton({
3211
3342
  }
3212
3343
 
3213
3344
  // src/components/carousel.tsx
3214
- import * as React46 from "react";
3345
+ import * as React48 from "react";
3215
3346
 
3216
3347
  // src/generated/carousel.ts
3217
3348
  var CAROUSEL_CONTENT_VIEWPORT = "overflow-hidden";
@@ -3226,14 +3357,14 @@ var CAROUSEL_PREVIOUS_HORIZONTAL = "top-1/2 -left-12 -translate-y-1/2";
3226
3357
  var CAROUSEL_PREVIOUS_VERTICAL = "-top-12 left-1/2 -translate-x-1/2 rotate-90";
3227
3358
  var CAROUSEL_NEXT_HORIZONTAL = "top-1/2 -right-12 -translate-y-1/2";
3228
3359
  var CAROUSEL_NEXT_VERTICAL = "-bottom-12 left-1/2 -translate-x-1/2 rotate-90";
3229
- var CAROUSEL_EDGE_FADE_PREV = "pointer-events-none absolute inset-y-0 left-0 w-20 bg-gradient-to-r from-background via-background/60 to-transparent transition-opacity duration-300";
3230
- var CAROUSEL_EDGE_FADE_NEXT = "pointer-events-none absolute inset-y-0 right-0 w-20 bg-gradient-to-l from-background via-background/60 to-transparent transition-opacity duration-300";
3360
+ var CAROUSEL_EDGE_FADE_PREV = "pointer-events-none absolute inset-y-0 left-0 w-24 bg-gradient-to-r from-background/45 via-background/20 to-transparent";
3361
+ var CAROUSEL_EDGE_FADE_NEXT = "pointer-events-none absolute inset-y-0 right-0 w-24 bg-gradient-to-l from-background/45 via-background/20 to-transparent";
3231
3362
 
3232
3363
  // src/components/carousel.tsx
3233
- import { Fragment as Fragment3, jsx as jsx37, jsxs as jsxs10 } from "react/jsx-runtime";
3234
- var CarouselContext = React46.createContext(null);
3364
+ import { Fragment as Fragment4, jsx as jsx38, jsxs as jsxs11 } from "react/jsx-runtime";
3365
+ var CarouselContext = React48.createContext(null);
3235
3366
  function useCarousel() {
3236
- const context = React46.useContext(CarouselContext);
3367
+ const context = React48.useContext(CarouselContext);
3237
3368
  if (!context) {
3238
3369
  throw new Error("useCarousel must be used within a <Carousel />");
3239
3370
  }
@@ -3254,13 +3385,13 @@ function Carousel({
3254
3385
  defaultValue: defaultIndex,
3255
3386
  onChange: onIndexChange
3256
3387
  });
3257
- const [count, setCount] = React46.useState(0);
3388
+ const [count, setCount] = React48.useState(0);
3258
3389
  const canScrollPrev = index > 0;
3259
3390
  const canScrollNext = index < count - 1;
3260
- const scrollPrev = React46.useCallback(() => {
3391
+ const scrollPrev = React48.useCallback(() => {
3261
3392
  if (index > 0) setIndex(index - 1);
3262
3393
  }, [index, setIndex]);
3263
- const scrollNext = React46.useCallback(() => {
3394
+ const scrollNext = React48.useCallback(() => {
3264
3395
  if (index < count - 1) setIndex(index + 1);
3265
3396
  }, [index, count, setIndex]);
3266
3397
  const handleKeyDown = (event) => {
@@ -3273,7 +3404,7 @@ function Carousel({
3273
3404
  }
3274
3405
  onKeyDown?.(event);
3275
3406
  };
3276
- return /* @__PURE__ */ jsx37(
3407
+ return /* @__PURE__ */ jsx38(
3277
3408
  CarouselContext.Provider,
3278
3409
  {
3279
3410
  value: {
@@ -3286,7 +3417,7 @@ function Carousel({
3286
3417
  canScrollPrev,
3287
3418
  canScrollNext
3288
3419
  },
3289
- children: /* @__PURE__ */ jsx37(
3420
+ children: /* @__PURE__ */ jsx38(
3290
3421
  "div",
3291
3422
  {
3292
3423
  onKeyDownCapture: handleKeyDown,
@@ -3308,12 +3439,12 @@ function CarouselContent({
3308
3439
  ...props
3309
3440
  }) {
3310
3441
  const { orientation, index, setCount } = useCarousel();
3311
- const childCount = React46.Children.count(children);
3312
- React46.useEffect(() => {
3442
+ const childCount = React48.Children.count(children);
3443
+ React48.useEffect(() => {
3313
3444
  setCount(childCount);
3314
3445
  }, [childCount, setCount]);
3315
3446
  const transform = orientation === "horizontal" ? `translate3d(-${index * 100}%, 0, 0)` : `translate3d(0, -${index * 100}%, 0)`;
3316
- return /* @__PURE__ */ jsx37("div", { className: CAROUSEL_CONTENT_VIEWPORT, "data-slot": "carousel-content", children: /* @__PURE__ */ jsx37(
3447
+ return /* @__PURE__ */ jsx38("div", { className: CAROUSEL_CONTENT_VIEWPORT, "data-slot": "carousel-content", children: /* @__PURE__ */ jsx38(
3317
3448
  "div",
3318
3449
  {
3319
3450
  className: cn(
@@ -3332,7 +3463,7 @@ function CarouselItem({
3332
3463
  ...props
3333
3464
  }) {
3334
3465
  const { orientation } = useCarousel();
3335
- return /* @__PURE__ */ jsx37(
3466
+ return /* @__PURE__ */ jsx38(
3336
3467
  "div",
3337
3468
  {
3338
3469
  role: "group",
@@ -3351,8 +3482,8 @@ function CarouselEdgeFade({
3351
3482
  className
3352
3483
  }) {
3353
3484
  const { canScrollPrev, canScrollNext } = useCarousel();
3354
- return /* @__PURE__ */ jsxs10(Fragment3, { children: [
3355
- /* @__PURE__ */ jsx37(
3485
+ return /* @__PURE__ */ jsxs11(Fragment4, { children: [
3486
+ /* @__PURE__ */ jsx38(
3356
3487
  "div",
3357
3488
  {
3358
3489
  "aria-hidden": true,
@@ -3363,7 +3494,7 @@ function CarouselEdgeFade({
3363
3494
  )
3364
3495
  }
3365
3496
  ),
3366
- /* @__PURE__ */ jsx37(
3497
+ /* @__PURE__ */ jsx38(
3367
3498
  "div",
3368
3499
  {
3369
3500
  "aria-hidden": true,
@@ -3383,7 +3514,7 @@ function CarouselPrevious({
3383
3514
  ...props
3384
3515
  }) {
3385
3516
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
3386
- return /* @__PURE__ */ jsxs10(
3517
+ return /* @__PURE__ */ jsxs11(
3387
3518
  Button,
3388
3519
  {
3389
3520
  "data-slot": "carousel-previous",
@@ -3398,7 +3529,7 @@ function CarouselPrevious({
3398
3529
  onClick: scrollPrev,
3399
3530
  ...props,
3400
3531
  children: [
3401
- /* @__PURE__ */ jsx37(
3532
+ /* @__PURE__ */ jsx38(
3402
3533
  "svg",
3403
3534
  {
3404
3535
  xmlns: "http://www.w3.org/2000/svg",
@@ -3409,10 +3540,10 @@ function CarouselPrevious({
3409
3540
  strokeLinecap: "round",
3410
3541
  strokeLinejoin: "round",
3411
3542
  "aria-hidden": "true",
3412
- children: /* @__PURE__ */ jsx37("path", { d: "m15 18-6-6 6-6" })
3543
+ children: /* @__PURE__ */ jsx38("path", { d: "m15 18-6-6 6-6" })
3413
3544
  }
3414
3545
  ),
3415
- /* @__PURE__ */ jsx37("span", { className: "sr-only", children: "Previous slide" })
3546
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Previous slide" })
3416
3547
  ]
3417
3548
  }
3418
3549
  );
@@ -3424,7 +3555,7 @@ function CarouselNext({
3424
3555
  ...props
3425
3556
  }) {
3426
3557
  const { orientation, scrollNext, canScrollNext } = useCarousel();
3427
- return /* @__PURE__ */ jsxs10(
3558
+ return /* @__PURE__ */ jsxs11(
3428
3559
  Button,
3429
3560
  {
3430
3561
  "data-slot": "carousel-next",
@@ -3439,7 +3570,7 @@ function CarouselNext({
3439
3570
  onClick: scrollNext,
3440
3571
  ...props,
3441
3572
  children: [
3442
- /* @__PURE__ */ jsx37(
3573
+ /* @__PURE__ */ jsx38(
3443
3574
  "svg",
3444
3575
  {
3445
3576
  xmlns: "http://www.w3.org/2000/svg",
@@ -3450,17 +3581,17 @@ function CarouselNext({
3450
3581
  strokeLinecap: "round",
3451
3582
  strokeLinejoin: "round",
3452
3583
  "aria-hidden": "true",
3453
- children: /* @__PURE__ */ jsx37("path", { d: "m9 18 6-6-6-6" })
3584
+ children: /* @__PURE__ */ jsx38("path", { d: "m9 18 6-6-6-6" })
3454
3585
  }
3455
3586
  ),
3456
- /* @__PURE__ */ jsx37("span", { className: "sr-only", children: "Next slide" })
3587
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Next slide" })
3457
3588
  ]
3458
3589
  }
3459
3590
  );
3460
3591
  }
3461
3592
 
3462
3593
  // src/components/input-otp.tsx
3463
- import * as React47 from "react";
3594
+ import * as React49 from "react";
3464
3595
 
3465
3596
  // src/generated/input-otp.ts
3466
3597
  var INPUT_OTP_CONTAINER = "relative flex items-center gap-2 has-disabled:opacity-50";
@@ -3471,10 +3602,10 @@ var INPUT_OTP_SLOT_CARET_WRAPPER = "pointer-events-none absolute inset-0 flex it
3471
3602
  var INPUT_OTP_SLOT_CARET = "animate-caret-blink bg-foreground h-4 w-px duration-1000";
3472
3603
 
3473
3604
  // src/components/input-otp.tsx
3474
- import { jsx as jsx38, jsxs as jsxs11 } from "react/jsx-runtime";
3475
- var InputOTPContext = React47.createContext(null);
3605
+ import { jsx as jsx39, jsxs as jsxs12 } from "react/jsx-runtime";
3606
+ var InputOTPContext = React49.createContext(null);
3476
3607
  function useInputOTP() {
3477
- const context = React47.useContext(InputOTPContext);
3608
+ const context = React49.useContext(InputOTPContext);
3478
3609
  if (!context) {
3479
3610
  throw new Error("InputOTP slots must be used within an <InputOTP />");
3480
3611
  }
@@ -3496,16 +3627,16 @@ function InputOTP({
3496
3627
  defaultValue,
3497
3628
  onChange
3498
3629
  });
3499
- const [focused, setFocused] = React47.useState(false);
3630
+ const [focused, setFocused] = React49.useState(false);
3500
3631
  const activeIndex = focused ? Math.min(value.length, maxLength - 1) : -1;
3501
- return /* @__PURE__ */ jsx38(InputOTPContext.Provider, { value: { value, maxLength, activeIndex }, children: /* @__PURE__ */ jsxs11(
3632
+ return /* @__PURE__ */ jsx39(InputOTPContext.Provider, { value: { value, maxLength, activeIndex }, children: /* @__PURE__ */ jsxs12(
3502
3633
  "div",
3503
3634
  {
3504
3635
  "data-slot": "input-otp",
3505
3636
  className: cn(INPUT_OTP_CONTAINER, containerClassName),
3506
3637
  children: [
3507
3638
  children,
3508
- /* @__PURE__ */ jsx38(
3639
+ /* @__PURE__ */ jsx39(
3509
3640
  "input",
3510
3641
  {
3511
3642
  inputMode: "numeric",
@@ -3528,7 +3659,7 @@ function InputOTPGroup({
3528
3659
  className,
3529
3660
  ...props
3530
3661
  }) {
3531
- return /* @__PURE__ */ jsx38(
3662
+ return /* @__PURE__ */ jsx39(
3532
3663
  "div",
3533
3664
  {
3534
3665
  "data-slot": "input-otp-group",
@@ -3542,7 +3673,7 @@ function InputOTPSlot({ index, className, ...props }) {
3542
3673
  const char = value[index];
3543
3674
  const isActive = activeIndex === index;
3544
3675
  const hasFakeCaret = isActive && char === void 0;
3545
- return /* @__PURE__ */ jsxs11(
3676
+ return /* @__PURE__ */ jsxs12(
3546
3677
  "div",
3547
3678
  {
3548
3679
  "data-slot": "input-otp-slot",
@@ -3551,13 +3682,13 @@ function InputOTPSlot({ index, className, ...props }) {
3551
3682
  ...props,
3552
3683
  children: [
3553
3684
  char,
3554
- hasFakeCaret && /* @__PURE__ */ jsx38("div", { className: INPUT_OTP_SLOT_CARET_WRAPPER, children: /* @__PURE__ */ jsx38("div", { className: INPUT_OTP_SLOT_CARET }) })
3685
+ hasFakeCaret && /* @__PURE__ */ jsx39("div", { className: INPUT_OTP_SLOT_CARET_WRAPPER, children: /* @__PURE__ */ jsx39("div", { className: INPUT_OTP_SLOT_CARET }) })
3555
3686
  ]
3556
3687
  }
3557
3688
  );
3558
3689
  }
3559
3690
  function InputOTPSeparator({ ...props }) {
3560
- return /* @__PURE__ */ jsx38("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx38(
3691
+ return /* @__PURE__ */ jsx39("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx39(
3561
3692
  "svg",
3562
3693
  {
3563
3694
  xmlns: "http://www.w3.org/2000/svg",
@@ -3568,27 +3699,27 @@ function InputOTPSeparator({ ...props }) {
3568
3699
  strokeLinecap: "round",
3569
3700
  strokeLinejoin: "round",
3570
3701
  "aria-hidden": "true",
3571
- children: /* @__PURE__ */ jsx38("path", { d: "M5 12h14" })
3702
+ children: /* @__PURE__ */ jsx39("path", { d: "M5 12h14" })
3572
3703
  }
3573
3704
  ) });
3574
3705
  }
3575
3706
 
3576
3707
  // src/components/tooltip.tsx
3577
- import * as React48 from "react";
3708
+ import * as React50 from "react";
3578
3709
 
3579
3710
  // src/generated/tooltip.ts
3580
3711
  var TOOLTIP_CONTENT = "bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance";
3581
3712
 
3582
3713
  // src/components/tooltip.tsx
3583
- import { Fragment as Fragment4, jsx as jsx39 } from "react/jsx-runtime";
3584
- var TooltipContext = React48.createContext(null);
3714
+ import { Fragment as Fragment5, jsx as jsx40 } from "react/jsx-runtime";
3715
+ var TooltipContext = React50.createContext(null);
3585
3716
  function useTooltip() {
3586
- const ctx = React48.useContext(TooltipContext);
3717
+ const ctx = React50.useContext(TooltipContext);
3587
3718
  if (!ctx) throw new Error("Tooltip parts must be used within <Tooltip>");
3588
3719
  return ctx;
3589
3720
  }
3590
3721
  function TooltipProvider({ children }) {
3591
- return /* @__PURE__ */ jsx39(Fragment4, { children });
3722
+ return /* @__PURE__ */ jsx40(Fragment5, { children });
3592
3723
  }
3593
3724
  function Tooltip({ open, defaultOpen = false, onOpenChange, children }) {
3594
3725
  const [isOpen, setOpen] = useControllableState({
@@ -3596,8 +3727,8 @@ function Tooltip({ open, defaultOpen = false, onOpenChange, children }) {
3596
3727
  defaultValue: defaultOpen,
3597
3728
  ...onOpenChange ? { onChange: onOpenChange } : {}
3598
3729
  });
3599
- const anchorRef = React48.useRef(null);
3600
- return /* @__PURE__ */ jsx39(TooltipProvider, { children: /* @__PURE__ */ jsx39(TooltipContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children }) });
3730
+ const anchorRef = React50.useRef(null);
3731
+ return /* @__PURE__ */ jsx40(TooltipProvider, { children: /* @__PURE__ */ jsx40(TooltipContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children }) });
3601
3732
  }
3602
3733
  function TooltipTrigger({
3603
3734
  asChild = false,
@@ -3609,7 +3740,7 @@ function TooltipTrigger({
3609
3740
  }) {
3610
3741
  const { setOpen, anchorRef } = useTooltip();
3611
3742
  const Comp = asChild ? Slot : "button";
3612
- return /* @__PURE__ */ jsx39(
3743
+ return /* @__PURE__ */ jsx40(
3613
3744
  Comp,
3614
3745
  {
3615
3746
  "data-slot": "tooltip-trigger",
@@ -3650,7 +3781,7 @@ function TooltipContent({
3650
3781
  offset: sideOffset
3651
3782
  });
3652
3783
  if (!isPresent) return null;
3653
- return /* @__PURE__ */ jsx39(Portal, { children: /* @__PURE__ */ jsx39(
3784
+ return /* @__PURE__ */ jsx40(Portal, { children: /* @__PURE__ */ jsx40(
3654
3785
  "div",
3655
3786
  {
3656
3787
  "data-slot": "tooltip-content",
@@ -3667,16 +3798,16 @@ function TooltipContent({
3667
3798
  }
3668
3799
 
3669
3800
  // src/components/popover.tsx
3670
- import * as React49 from "react";
3801
+ import * as React51 from "react";
3671
3802
 
3672
3803
  // src/generated/popover.ts
3673
3804
  var POPOVER_CONTENT = "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-hidden";
3674
3805
 
3675
3806
  // src/components/popover.tsx
3676
- import { jsx as jsx40 } from "react/jsx-runtime";
3677
- var PopoverContext = React49.createContext(null);
3807
+ import { jsx as jsx41 } from "react/jsx-runtime";
3808
+ var PopoverContext = React51.createContext(null);
3678
3809
  function usePopover() {
3679
- const ctx = React49.useContext(PopoverContext);
3810
+ const ctx = React51.useContext(PopoverContext);
3680
3811
  if (!ctx) throw new Error("Popover parts must be used within <Popover>");
3681
3812
  return ctx;
3682
3813
  }
@@ -3686,13 +3817,13 @@ function Popover({ open, defaultOpen = false, onOpenChange, children }) {
3686
3817
  defaultValue: defaultOpen,
3687
3818
  ...onOpenChange ? { onChange: onOpenChange } : {}
3688
3819
  });
3689
- const anchorRef = React49.useRef(null);
3690
- return /* @__PURE__ */ jsx40(PopoverContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
3820
+ const anchorRef = React51.useRef(null);
3821
+ return /* @__PURE__ */ jsx41(PopoverContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
3691
3822
  }
3692
3823
  function PopoverTrigger({ asChild = false, onClick, ...props }) {
3693
3824
  const { open, setOpen, anchorRef } = usePopover();
3694
3825
  const Comp = asChild ? Slot : "button";
3695
- return /* @__PURE__ */ jsx40(
3826
+ return /* @__PURE__ */ jsx41(
3696
3827
  Comp,
3697
3828
  {
3698
3829
  "data-slot": "popover-trigger",
@@ -3709,7 +3840,7 @@ function PopoverTrigger({ asChild = false, onClick, ...props }) {
3709
3840
  function PopoverAnchor({ asChild = false, ...props }) {
3710
3841
  const { anchorRef } = usePopover();
3711
3842
  const Comp = asChild ? Slot : "div";
3712
- return /* @__PURE__ */ jsx40(
3843
+ return /* @__PURE__ */ jsx41(
3713
3844
  Comp,
3714
3845
  {
3715
3846
  "data-slot": "popover-anchor",
@@ -3741,7 +3872,7 @@ function PopoverContent({
3741
3872
  exclude: [anchorRef]
3742
3873
  });
3743
3874
  if (!isPresent) return null;
3744
- return /* @__PURE__ */ jsx40(Portal, { children: /* @__PURE__ */ jsx40(
3875
+ return /* @__PURE__ */ jsx41(Portal, { children: /* @__PURE__ */ jsx41(
3745
3876
  "div",
3746
3877
  {
3747
3878
  "data-slot": "popover-content",
@@ -3760,17 +3891,163 @@ function PopoverContent({
3760
3891
  ) });
3761
3892
  }
3762
3893
 
3894
+ // src/components/info-tip.tsx
3895
+ import * as React52 from "react";
3896
+ import { jsx as jsx42, jsxs as jsxs13 } from "react/jsx-runtime";
3897
+ var InfoTipContext = React52.createContext(null);
3898
+ function useInfoTip() {
3899
+ const ctx = React52.useContext(InfoTipContext);
3900
+ if (!ctx) throw new Error("InfoTip parts must be used within <InfoTip>");
3901
+ return ctx;
3902
+ }
3903
+ function InfoTip({
3904
+ open,
3905
+ defaultOpen = false,
3906
+ onOpenChange,
3907
+ children
3908
+ }) {
3909
+ const [isOpen, setOpen] = useControllableState({
3910
+ ...open !== void 0 ? { value: open } : {},
3911
+ defaultValue: defaultOpen,
3912
+ ...onOpenChange ? { onChange: onOpenChange } : {}
3913
+ });
3914
+ const anchorRef = React52.useRef(null);
3915
+ const contentId = React52.useId();
3916
+ return /* @__PURE__ */ jsx42(
3917
+ InfoTipContext.Provider,
3918
+ {
3919
+ value: { open: isOpen, setOpen, anchorRef, contentId },
3920
+ children
3921
+ }
3922
+ );
3923
+ }
3924
+ function InfoGlyph2({ className }) {
3925
+ return /* @__PURE__ */ jsxs13(
3926
+ "svg",
3927
+ {
3928
+ viewBox: "0 0 24 24",
3929
+ fill: "none",
3930
+ stroke: "currentColor",
3931
+ strokeWidth: 2,
3932
+ strokeLinecap: "round",
3933
+ strokeLinejoin: "round",
3934
+ "aria-hidden": true,
3935
+ className: cn("size-4", className),
3936
+ children: [
3937
+ /* @__PURE__ */ jsx42("circle", { cx: "12", cy: "12", r: "10" }),
3938
+ /* @__PURE__ */ jsx42("path", { d: "M12 16v-4" }),
3939
+ /* @__PURE__ */ jsx42("path", { d: "M12 8h.01" })
3940
+ ]
3941
+ }
3942
+ );
3943
+ }
3944
+ function InfoTipTrigger({
3945
+ asChild = false,
3946
+ label = "More information",
3947
+ hoverDelay = 500,
3948
+ className,
3949
+ onClick,
3950
+ onBlur,
3951
+ onPointerEnter,
3952
+ onPointerLeave,
3953
+ children,
3954
+ ...props
3955
+ }) {
3956
+ const { open, setOpen, anchorRef, contentId } = useInfoTip();
3957
+ const hover = useHoverIntent({
3958
+ onOpen: () => setOpen(true),
3959
+ onClose: () => setOpen(false),
3960
+ openDelay: hoverDelay
3961
+ });
3962
+ const Comp = asChild ? Slot : "button";
3963
+ return /* @__PURE__ */ jsx42(
3964
+ Comp,
3965
+ {
3966
+ "data-slot": "info-tip-trigger",
3967
+ "data-state": open ? "open" : "closed",
3968
+ type: asChild ? void 0 : "button",
3969
+ "aria-label": label,
3970
+ "aria-expanded": open,
3971
+ "aria-controls": contentId,
3972
+ ref: anchorRef,
3973
+ className: cn(
3974
+ "inline-flex size-4 shrink-0 cursor-help items-center justify-center rounded-full align-middle text-muted-foreground outline-none transition-colors hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring data-[state=open]:text-main-accent-t1",
3975
+ className
3976
+ ),
3977
+ onClick: (e) => {
3978
+ onClick?.(e);
3979
+ setOpen(!open);
3980
+ },
3981
+ onBlur: (e) => {
3982
+ onBlur?.(e);
3983
+ setOpen(false);
3984
+ },
3985
+ onPointerEnter: (e) => {
3986
+ onPointerEnter?.(e);
3987
+ hover.onPointerEnter(e);
3988
+ },
3989
+ onPointerLeave: (e) => {
3990
+ onPointerLeave?.(e);
3991
+ hover.onPointerLeave(e);
3992
+ },
3993
+ ...props,
3994
+ children: children ?? /* @__PURE__ */ jsx42(InfoGlyph2, {})
3995
+ }
3996
+ );
3997
+ }
3998
+ function InfoTipContent({
3999
+ className,
4000
+ side: sideProp = "bottom",
4001
+ align = "center",
4002
+ sideOffset = 6,
4003
+ children,
4004
+ ...props
4005
+ }) {
4006
+ const { open, setOpen, anchorRef, contentId } = useInfoTip();
4007
+ const { isPresent, ref: presRef } = usePresence(open);
4008
+ const { floatingRef, style, side } = useFloating({
4009
+ anchorRef,
4010
+ open,
4011
+ side: sideProp,
4012
+ align,
4013
+ offset: sideOffset
4014
+ });
4015
+ const dismissRef = useDismissableLayer({
4016
+ enabled: open,
4017
+ onDismiss: () => setOpen(false),
4018
+ exclude: [anchorRef]
4019
+ });
4020
+ if (!isPresent) return null;
4021
+ return /* @__PURE__ */ jsx42(Portal, { children: /* @__PURE__ */ jsx42(
4022
+ "div",
4023
+ {
4024
+ id: contentId,
4025
+ role: "status",
4026
+ "aria-live": "polite",
4027
+ "data-slot": "info-tip-content",
4028
+ "data-state": open ? "open" : "closed",
4029
+ "data-side": side,
4030
+ "data-align": align,
4031
+ ref: mergeRefs(floatingRef, dismissRef, presRef),
4032
+ style,
4033
+ className: cn(POPOVER_CONTENT, "w-64 p-3 text-sm", className),
4034
+ ...props,
4035
+ children
4036
+ }
4037
+ ) });
4038
+ }
4039
+
3763
4040
  // src/components/hover-card.tsx
3764
- import * as React50 from "react";
4041
+ import * as React53 from "react";
3765
4042
 
3766
4043
  // src/generated/hover-card.ts
3767
4044
  var HOVER_CARD_CONTENT = "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 rounded-md border p-4 shadow-md outline-hidden";
3768
4045
 
3769
4046
  // src/components/hover-card.tsx
3770
- import { jsx as jsx41 } from "react/jsx-runtime";
3771
- var HoverCardContext = React50.createContext(null);
4047
+ import { jsx as jsx43 } from "react/jsx-runtime";
4048
+ var HoverCardContext = React53.createContext(null);
3772
4049
  function useHoverCard() {
3773
- const ctx = React50.useContext(HoverCardContext);
4050
+ const ctx = React53.useContext(HoverCardContext);
3774
4051
  if (!ctx) throw new Error("HoverCard parts must be used within <HoverCard>");
3775
4052
  return ctx;
3776
4053
  }
@@ -3780,8 +4057,8 @@ function HoverCard({ open, defaultOpen = false, onOpenChange, children }) {
3780
4057
  defaultValue: defaultOpen,
3781
4058
  ...onOpenChange ? { onChange: onOpenChange } : {}
3782
4059
  });
3783
- const anchorRef = React50.useRef(null);
3784
- return /* @__PURE__ */ jsx41(HoverCardContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
4060
+ const anchorRef = React53.useRef(null);
4061
+ return /* @__PURE__ */ jsx43(HoverCardContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
3785
4062
  }
3786
4063
  function HoverCardTrigger({
3787
4064
  asChild = false,
@@ -3791,7 +4068,7 @@ function HoverCardTrigger({
3791
4068
  }) {
3792
4069
  const { setOpen, anchorRef } = useHoverCard();
3793
4070
  const Comp = asChild ? Slot : "a";
3794
- return /* @__PURE__ */ jsx41(
4071
+ return /* @__PURE__ */ jsx43(
3795
4072
  Comp,
3796
4073
  {
3797
4074
  "data-slot": "hover-card-trigger",
@@ -3826,7 +4103,7 @@ function HoverCardContent({
3826
4103
  offset: sideOffset
3827
4104
  });
3828
4105
  if (!isPresent) return null;
3829
- return /* @__PURE__ */ jsx41(Portal, { children: /* @__PURE__ */ jsx41(
4106
+ return /* @__PURE__ */ jsx43(Portal, { children: /* @__PURE__ */ jsx43(
3830
4107
  "div",
3831
4108
  {
3832
4109
  "data-slot": "hover-card-content",
@@ -3843,7 +4120,7 @@ function HoverCardContent({
3843
4120
  }
3844
4121
 
3845
4122
  // src/components/dropdown-menu.tsx
3846
- import * as React51 from "react";
4123
+ import * as React54 from "react";
3847
4124
 
3848
4125
  // src/generated/dropdown-menu.ts
3849
4126
  var DROPDOWN_MENU_CONTENT = "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md";
@@ -3857,12 +4134,12 @@ var DROPDOWN_MENU_SEPARATOR = "bg-border -mx-1 my-1 h-px";
3857
4134
  var DROPDOWN_MENU_SHORTCUT = "text-muted-foreground ml-auto text-xs tracking-widest";
3858
4135
 
3859
4136
  // src/components/dropdown-menu.tsx
3860
- import { jsx as jsx42, jsxs as jsxs12 } from "react/jsx-runtime";
3861
- var DropdownMenuContext = React51.createContext(
4137
+ import { jsx as jsx44, jsxs as jsxs14 } from "react/jsx-runtime";
4138
+ var DropdownMenuContext = React54.createContext(
3862
4139
  null
3863
4140
  );
3864
4141
  function useDropdownMenu() {
3865
- const ctx = React51.useContext(DropdownMenuContext);
4142
+ const ctx = React54.useContext(DropdownMenuContext);
3866
4143
  if (!ctx) throw new Error("DropdownMenu parts must be used within <DropdownMenu>");
3867
4144
  return ctx;
3868
4145
  }
@@ -3872,16 +4149,16 @@ function DropdownMenu({ open, defaultOpen = false, onOpenChange, children }) {
3872
4149
  defaultValue: defaultOpen,
3873
4150
  ...onOpenChange ? { onChange: onOpenChange } : {}
3874
4151
  });
3875
- const anchorRef = React51.useRef(null);
3876
- return /* @__PURE__ */ jsx42(DropdownMenuContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children: /* @__PURE__ */ jsx42("div", { "data-slot": "dropdown-menu", children }) });
4152
+ const anchorRef = React54.useRef(null);
4153
+ return /* @__PURE__ */ jsx44(DropdownMenuContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children: /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu", children }) });
3877
4154
  }
3878
4155
  function DropdownMenuPortal({ children }) {
3879
- return /* @__PURE__ */ jsx42(Portal, { children });
4156
+ return /* @__PURE__ */ jsx44(Portal, { children });
3880
4157
  }
3881
4158
  function DropdownMenuTrigger({ asChild = false, onClick, ...props }) {
3882
4159
  const { open, setOpen, anchorRef } = useDropdownMenu();
3883
4160
  const Comp = asChild ? Slot : "button";
3884
- return /* @__PURE__ */ jsx42(
4161
+ return /* @__PURE__ */ jsx44(
3885
4162
  Comp,
3886
4163
  {
3887
4164
  "data-slot": "dropdown-menu-trigger",
@@ -3917,7 +4194,7 @@ function DropdownMenuContent({
3917
4194
  onDismiss: () => setOpen(false),
3918
4195
  exclude: [anchorRef]
3919
4196
  });
3920
- const contentRef = React51.useRef(null);
4197
+ const contentRef = React54.useRef(null);
3921
4198
  const items = () => Array.from(
3922
4199
  contentRef.current?.querySelectorAll("[role^='menuitem']") ?? []
3923
4200
  ).filter((el) => el.getAttribute("data-disabled") === null);
@@ -3926,13 +4203,13 @@ function DropdownMenuContent({
3926
4203
  orientation: "vertical",
3927
4204
  loop: true
3928
4205
  });
3929
- React51.useEffect(() => {
4206
+ React54.useEffect(() => {
3930
4207
  if (!open) return;
3931
4208
  items()[activeIndex]?.focus();
3932
4209
  }, [open, activeIndex]);
3933
- const close = React51.useCallback(() => setOpen(false), [setOpen]);
4210
+ const close = React54.useCallback(() => setOpen(false), [setOpen]);
3934
4211
  if (!isPresent) return null;
3935
- return /* @__PURE__ */ jsx42(Portal, { children: /* @__PURE__ */ jsx42(DropdownMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx42(
4212
+ return /* @__PURE__ */ jsx44(Portal, { children: /* @__PURE__ */ jsx44(DropdownMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx44(
3936
4213
  "div",
3937
4214
  {
3938
4215
  "data-slot": "dropdown-menu-content",
@@ -3955,10 +4232,10 @@ function DropdownMenuContent({
3955
4232
  }
3956
4233
  ) }) });
3957
4234
  }
3958
- var DropdownMenuCloseContext = React51.createContext(() => {
4235
+ var DropdownMenuCloseContext = React54.createContext(() => {
3959
4236
  });
3960
4237
  function DropdownMenuGroup({ className, ...props }) {
3961
- return /* @__PURE__ */ jsx42("div", { "data-slot": "dropdown-menu-group", role: "group", className, ...props });
4238
+ return /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-group", role: "group", className, ...props });
3962
4239
  }
3963
4240
  function DropdownMenuItem({
3964
4241
  className,
@@ -3969,8 +4246,8 @@ function DropdownMenuItem({
3969
4246
  onKeyDown,
3970
4247
  ...props
3971
4248
  }) {
3972
- const close = React51.useContext(DropdownMenuCloseContext);
3973
- return /* @__PURE__ */ jsx42(
4249
+ const close = React54.useContext(DropdownMenuCloseContext);
4250
+ return /* @__PURE__ */ jsx44(
3974
4251
  "div",
3975
4252
  {
3976
4253
  "data-slot": "dropdown-menu-item",
@@ -4007,8 +4284,8 @@ function DropdownMenuCheckboxItem({
4007
4284
  onClick,
4008
4285
  ...props
4009
4286
  }) {
4010
- const close = React51.useContext(DropdownMenuCloseContext);
4011
- return /* @__PURE__ */ jsxs12(
4287
+ const close = React54.useContext(DropdownMenuCloseContext);
4288
+ return /* @__PURE__ */ jsxs14(
4012
4289
  "div",
4013
4290
  {
4014
4291
  "data-slot": "dropdown-menu-checkbox-item",
@@ -4028,13 +4305,13 @@ function DropdownMenuCheckboxItem({
4028
4305
  },
4029
4306
  ...props,
4030
4307
  children: [
4031
- /* @__PURE__ */ jsx42("span", { className: DROPDOWN_MENU_ITEM_INDICATOR, children: checked ? /* @__PURE__ */ jsx42("svg", { className: "size-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx42("path", { d: "M20 6 9 17l-5-5" }) }) : null }),
4308
+ /* @__PURE__ */ jsx44("span", { className: DROPDOWN_MENU_ITEM_INDICATOR, children: checked ? /* @__PURE__ */ jsx44("svg", { className: "size-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx44("path", { d: "M20 6 9 17l-5-5" }) }) : null }),
4032
4309
  children
4033
4310
  ]
4034
4311
  }
4035
4312
  );
4036
4313
  }
4037
- var DropdownMenuRadioGroupContext = React51.createContext(null);
4314
+ var DropdownMenuRadioGroupContext = React54.createContext(null);
4038
4315
  function DropdownMenuRadioGroup({
4039
4316
  className,
4040
4317
  value,
@@ -4042,11 +4319,11 @@ function DropdownMenuRadioGroup({
4042
4319
  children,
4043
4320
  ...props
4044
4321
  }) {
4045
- const ctx = React51.useMemo(
4322
+ const ctx = React54.useMemo(
4046
4323
  () => ({ value, setValue: (next) => onValueChange?.(next) }),
4047
4324
  [value, onValueChange]
4048
4325
  );
4049
- return /* @__PURE__ */ jsx42(DropdownMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx42("div", { "data-slot": "dropdown-menu-radio-group", role: "group", className, ...props, children }) });
4326
+ return /* @__PURE__ */ jsx44(DropdownMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-radio-group", role: "group", className, ...props, children }) });
4050
4327
  }
4051
4328
  function DropdownMenuRadioItem({
4052
4329
  className,
@@ -4056,10 +4333,10 @@ function DropdownMenuRadioItem({
4056
4333
  onClick,
4057
4334
  ...props
4058
4335
  }) {
4059
- const close = React51.useContext(DropdownMenuCloseContext);
4060
- const group = React51.useContext(DropdownMenuRadioGroupContext);
4336
+ const close = React54.useContext(DropdownMenuCloseContext);
4337
+ const group = React54.useContext(DropdownMenuRadioGroupContext);
4061
4338
  const checked = group?.value === value;
4062
- return /* @__PURE__ */ jsxs12(
4339
+ return /* @__PURE__ */ jsxs14(
4063
4340
  "div",
4064
4341
  {
4065
4342
  "data-slot": "dropdown-menu-radio-item",
@@ -4080,14 +4357,14 @@ function DropdownMenuRadioItem({
4080
4357
  },
4081
4358
  ...props,
4082
4359
  children: [
4083
- /* @__PURE__ */ jsx42("span", { className: DROPDOWN_MENU_ITEM_INDICATOR, children: checked ? /* @__PURE__ */ jsx42("svg", { className: "size-2 fill-current", viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx42("circle", { cx: "12", cy: "12", r: "10" }) }) : null }),
4360
+ /* @__PURE__ */ jsx44("span", { className: DROPDOWN_MENU_ITEM_INDICATOR, children: checked ? /* @__PURE__ */ jsx44("svg", { className: "size-2 fill-current", viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx44("circle", { cx: "12", cy: "12", r: "10" }) }) : null }),
4084
4361
  children
4085
4362
  ]
4086
4363
  }
4087
4364
  );
4088
4365
  }
4089
4366
  function DropdownMenuLabel({ className, inset, ...props }) {
4090
- return /* @__PURE__ */ jsx42(
4367
+ return /* @__PURE__ */ jsx44(
4091
4368
  "div",
4092
4369
  {
4093
4370
  "data-slot": "dropdown-menu-label",
@@ -4098,7 +4375,7 @@ function DropdownMenuLabel({ className, inset, ...props }) {
4098
4375
  );
4099
4376
  }
4100
4377
  function DropdownMenuSeparator({ className, ...props }) {
4101
- return /* @__PURE__ */ jsx42(
4378
+ return /* @__PURE__ */ jsx44(
4102
4379
  "div",
4103
4380
  {
4104
4381
  "data-slot": "dropdown-menu-separator",
@@ -4109,7 +4386,7 @@ function DropdownMenuSeparator({ className, ...props }) {
4109
4386
  );
4110
4387
  }
4111
4388
  function DropdownMenuShortcut({ className, ...props }) {
4112
- return /* @__PURE__ */ jsx42(
4389
+ return /* @__PURE__ */ jsx44(
4113
4390
  "span",
4114
4391
  {
4115
4392
  "data-slot": "dropdown-menu-shortcut",
@@ -4118,18 +4395,18 @@ function DropdownMenuShortcut({ className, ...props }) {
4118
4395
  }
4119
4396
  );
4120
4397
  }
4121
- var DropdownMenuSubContext = React51.createContext(null);
4398
+ var DropdownMenuSubContext = React54.createContext(null);
4122
4399
  function DropdownMenuSub({ open, defaultOpen = false, onOpenChange, children }) {
4123
4400
  const [isOpen, setOpen] = useControllableState({
4124
4401
  ...open !== void 0 ? { value: open } : {},
4125
4402
  defaultValue: defaultOpen,
4126
4403
  ...onOpenChange ? { onChange: onOpenChange } : {}
4127
4404
  });
4128
- return /* @__PURE__ */ jsx42(DropdownMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx42("div", { "data-slot": "dropdown-menu-sub", children }) });
4405
+ return /* @__PURE__ */ jsx44(DropdownMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-sub", children }) });
4129
4406
  }
4130
4407
  function DropdownMenuSubTrigger({ className, inset, children, onClick, ...props }) {
4131
- const ctx = React51.useContext(DropdownMenuSubContext);
4132
- return /* @__PURE__ */ jsxs12(
4408
+ const ctx = React54.useContext(DropdownMenuSubContext);
4409
+ return /* @__PURE__ */ jsxs14(
4133
4410
  "div",
4134
4411
  {
4135
4412
  "data-slot": "dropdown-menu-sub-trigger",
@@ -4150,15 +4427,15 @@ function DropdownMenuSubTrigger({ className, inset, children, onClick, ...props
4150
4427
  ...props,
4151
4428
  children: [
4152
4429
  children,
4153
- /* @__PURE__ */ jsx42("svg", { className: "ml-auto size-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx42("path", { d: "m9 18 6-6-6-6" }) })
4430
+ /* @__PURE__ */ jsx44("svg", { className: "ml-auto size-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx44("path", { d: "m9 18 6-6-6-6" }) })
4154
4431
  ]
4155
4432
  }
4156
4433
  );
4157
4434
  }
4158
4435
  function DropdownMenuSubContent({ className, children, ...props }) {
4159
- const ctx = React51.useContext(DropdownMenuSubContext);
4436
+ const ctx = React54.useContext(DropdownMenuSubContext);
4160
4437
  if (!ctx?.open) return null;
4161
- return /* @__PURE__ */ jsx42(
4438
+ return /* @__PURE__ */ jsx44(
4162
4439
  "div",
4163
4440
  {
4164
4441
  "data-slot": "dropdown-menu-sub-content",
@@ -4175,7 +4452,7 @@ function DropdownMenuSubContent({ className, children, ...props }) {
4175
4452
  }
4176
4453
 
4177
4454
  // src/components/context-menu.tsx
4178
- import * as React52 from "react";
4455
+ import * as React55 from "react";
4179
4456
 
4180
4457
  // src/generated/context-menu.ts
4181
4458
  var CONTEXT_MENU_CONTENT = "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md";
@@ -4188,10 +4465,10 @@ var CONTEXT_MENU_SEPARATOR = "bg-border -mx-1 my-1 h-px";
4188
4465
  var CONTEXT_MENU_SHORTCUT = "text-muted-foreground ml-auto text-xs tracking-widest";
4189
4466
 
4190
4467
  // src/components/context-menu.tsx
4191
- import { jsx as jsx43, jsxs as jsxs13 } from "react/jsx-runtime";
4192
- var ContextMenuContext = React52.createContext(null);
4468
+ import { jsx as jsx45, jsxs as jsxs15 } from "react/jsx-runtime";
4469
+ var ContextMenuContext = React55.createContext(null);
4193
4470
  function useContextMenu() {
4194
- const ctx = React52.useContext(ContextMenuContext);
4471
+ const ctx = React55.useContext(ContextMenuContext);
4195
4472
  if (!ctx) throw new Error("ContextMenu parts must be used within <ContextMenu>");
4196
4473
  return ctx;
4197
4474
  }
@@ -4201,16 +4478,16 @@ function ContextMenu({ open, defaultOpen = false, onOpenChange, children }) {
4201
4478
  defaultValue: defaultOpen,
4202
4479
  ...onOpenChange ? { onChange: onOpenChange } : {}
4203
4480
  });
4204
- const [point, setPoint] = React52.useState({ x: 0, y: 0 });
4205
- return /* @__PURE__ */ jsx43(ContextMenuContext.Provider, { value: { open: isOpen, setOpen, point, setPoint }, children: /* @__PURE__ */ jsx43("div", { "data-slot": "context-menu", children }) });
4481
+ const [point, setPoint] = React55.useState({ x: 0, y: 0 });
4482
+ return /* @__PURE__ */ jsx45(ContextMenuContext.Provider, { value: { open: isOpen, setOpen, point, setPoint }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu", children }) });
4206
4483
  }
4207
4484
  function ContextMenuPortal({ children }) {
4208
- return /* @__PURE__ */ jsx43(Portal, { children });
4485
+ return /* @__PURE__ */ jsx45(Portal, { children });
4209
4486
  }
4210
4487
  function ContextMenuTrigger({ asChild = false, onContextMenu, ...props }) {
4211
4488
  const { setOpen, setPoint } = useContextMenu();
4212
4489
  const Comp = asChild ? Slot : "div";
4213
- return /* @__PURE__ */ jsx43(
4490
+ return /* @__PURE__ */ jsx45(
4214
4491
  Comp,
4215
4492
  {
4216
4493
  "data-slot": "context-menu-trigger",
@@ -4225,9 +4502,9 @@ function ContextMenuTrigger({ asChild = false, onContextMenu, ...props }) {
4225
4502
  );
4226
4503
  }
4227
4504
  function ContextMenuGroup({ className, ...props }) {
4228
- return /* @__PURE__ */ jsx43("div", { "data-slot": "context-menu-group", role: "group", className, ...props });
4505
+ return /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-group", role: "group", className, ...props });
4229
4506
  }
4230
- var ContextMenuCloseContext = React52.createContext(() => {
4507
+ var ContextMenuCloseContext = React55.createContext(() => {
4231
4508
  });
4232
4509
  function ContextMenuContent({ className, children, ...props }) {
4233
4510
  const { open, setOpen, point } = useContextMenu();
@@ -4236,7 +4513,7 @@ function ContextMenuContent({ className, children, ...props }) {
4236
4513
  enabled: open,
4237
4514
  onDismiss: () => setOpen(false)
4238
4515
  });
4239
- const contentRef = React52.useRef(null);
4516
+ const contentRef = React55.useRef(null);
4240
4517
  const items = () => Array.from(
4241
4518
  contentRef.current?.querySelectorAll("[role^='menuitem']") ?? []
4242
4519
  ).filter((el) => el.getAttribute("data-disabled") === null);
@@ -4245,13 +4522,13 @@ function ContextMenuContent({ className, children, ...props }) {
4245
4522
  orientation: "vertical",
4246
4523
  loop: true
4247
4524
  });
4248
- React52.useEffect(() => {
4525
+ React55.useEffect(() => {
4249
4526
  if (!open) return;
4250
4527
  items()[activeIndex]?.focus();
4251
4528
  }, [open, activeIndex]);
4252
- const close = React52.useCallback(() => setOpen(false), [setOpen]);
4529
+ const close = React55.useCallback(() => setOpen(false), [setOpen]);
4253
4530
  if (!isPresent) return null;
4254
- return /* @__PURE__ */ jsx43(Portal, { children: /* @__PURE__ */ jsx43(ContextMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx43(
4531
+ return /* @__PURE__ */ jsx45(Portal, { children: /* @__PURE__ */ jsx45(ContextMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx45(
4255
4532
  "div",
4256
4533
  {
4257
4534
  "data-slot": "context-menu-content",
@@ -4283,8 +4560,8 @@ function ContextMenuItem({
4283
4560
  onKeyDown,
4284
4561
  ...props
4285
4562
  }) {
4286
- const close = React52.useContext(ContextMenuCloseContext);
4287
- return /* @__PURE__ */ jsx43(
4563
+ const close = React55.useContext(ContextMenuCloseContext);
4564
+ return /* @__PURE__ */ jsx45(
4288
4565
  "div",
4289
4566
  {
4290
4567
  "data-slot": "context-menu-item",
@@ -4321,8 +4598,8 @@ function ContextMenuCheckboxItem({
4321
4598
  onClick,
4322
4599
  ...props
4323
4600
  }) {
4324
- const close = React52.useContext(ContextMenuCloseContext);
4325
- return /* @__PURE__ */ jsxs13(
4601
+ const close = React55.useContext(ContextMenuCloseContext);
4602
+ return /* @__PURE__ */ jsxs15(
4326
4603
  "div",
4327
4604
  {
4328
4605
  "data-slot": "context-menu-checkbox-item",
@@ -4342,13 +4619,13 @@ function ContextMenuCheckboxItem({
4342
4619
  },
4343
4620
  ...props,
4344
4621
  children: [
4345
- /* @__PURE__ */ jsx43("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: checked ? /* @__PURE__ */ jsx43("svg", { className: "size-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx43("path", { d: "M20 6 9 17l-5-5" }) }) : null }),
4622
+ /* @__PURE__ */ jsx45("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: checked ? /* @__PURE__ */ jsx45("svg", { className: "size-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx45("path", { d: "M20 6 9 17l-5-5" }) }) : null }),
4346
4623
  children
4347
4624
  ]
4348
4625
  }
4349
4626
  );
4350
4627
  }
4351
- var ContextMenuRadioGroupContext = React52.createContext(null);
4628
+ var ContextMenuRadioGroupContext = React55.createContext(null);
4352
4629
  function ContextMenuRadioGroup({
4353
4630
  className,
4354
4631
  value,
@@ -4356,11 +4633,11 @@ function ContextMenuRadioGroup({
4356
4633
  children,
4357
4634
  ...props
4358
4635
  }) {
4359
- const ctx = React52.useMemo(
4636
+ const ctx = React55.useMemo(
4360
4637
  () => ({ value, setValue: (next) => onValueChange?.(next) }),
4361
4638
  [value, onValueChange]
4362
4639
  );
4363
- return /* @__PURE__ */ jsx43(ContextMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx43("div", { "data-slot": "context-menu-radio-group", role: "group", className, ...props, children }) });
4640
+ return /* @__PURE__ */ jsx45(ContextMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-radio-group", role: "group", className, ...props, children }) });
4364
4641
  }
4365
4642
  function ContextMenuRadioItem({
4366
4643
  className,
@@ -4370,10 +4647,10 @@ function ContextMenuRadioItem({
4370
4647
  onClick,
4371
4648
  ...props
4372
4649
  }) {
4373
- const close = React52.useContext(ContextMenuCloseContext);
4374
- const group = React52.useContext(ContextMenuRadioGroupContext);
4650
+ const close = React55.useContext(ContextMenuCloseContext);
4651
+ const group = React55.useContext(ContextMenuRadioGroupContext);
4375
4652
  const checked = group?.value === value;
4376
- return /* @__PURE__ */ jsxs13(
4653
+ return /* @__PURE__ */ jsxs15(
4377
4654
  "div",
4378
4655
  {
4379
4656
  "data-slot": "context-menu-radio-item",
@@ -4394,14 +4671,14 @@ function ContextMenuRadioItem({
4394
4671
  },
4395
4672
  ...props,
4396
4673
  children: [
4397
- /* @__PURE__ */ jsx43("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: checked ? /* @__PURE__ */ jsx43("svg", { className: "size-2 fill-current", viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx43("circle", { cx: "12", cy: "12", r: "10" }) }) : null }),
4674
+ /* @__PURE__ */ jsx45("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: checked ? /* @__PURE__ */ jsx45("svg", { className: "size-2 fill-current", viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx45("circle", { cx: "12", cy: "12", r: "10" }) }) : null }),
4398
4675
  children
4399
4676
  ]
4400
4677
  }
4401
4678
  );
4402
4679
  }
4403
4680
  function ContextMenuLabel({ className, inset, ...props }) {
4404
- return /* @__PURE__ */ jsx43(
4681
+ return /* @__PURE__ */ jsx45(
4405
4682
  "div",
4406
4683
  {
4407
4684
  "data-slot": "context-menu-label",
@@ -4412,7 +4689,7 @@ function ContextMenuLabel({ className, inset, ...props }) {
4412
4689
  );
4413
4690
  }
4414
4691
  function ContextMenuSeparator({ className, ...props }) {
4415
- return /* @__PURE__ */ jsx43(
4692
+ return /* @__PURE__ */ jsx45(
4416
4693
  "div",
4417
4694
  {
4418
4695
  "data-slot": "context-menu-separator",
@@ -4423,7 +4700,7 @@ function ContextMenuSeparator({ className, ...props }) {
4423
4700
  );
4424
4701
  }
4425
4702
  function ContextMenuShortcut({ className, ...props }) {
4426
- return /* @__PURE__ */ jsx43(
4703
+ return /* @__PURE__ */ jsx45(
4427
4704
  "span",
4428
4705
  {
4429
4706
  "data-slot": "context-menu-shortcut",
@@ -4432,18 +4709,18 @@ function ContextMenuShortcut({ className, ...props }) {
4432
4709
  }
4433
4710
  );
4434
4711
  }
4435
- var ContextMenuSubContext = React52.createContext(null);
4712
+ var ContextMenuSubContext = React55.createContext(null);
4436
4713
  function ContextMenuSub({ open, defaultOpen = false, onOpenChange, children }) {
4437
4714
  const [isOpen, setOpen] = useControllableState({
4438
4715
  ...open !== void 0 ? { value: open } : {},
4439
4716
  defaultValue: defaultOpen,
4440
4717
  ...onOpenChange ? { onChange: onOpenChange } : {}
4441
4718
  });
4442
- return /* @__PURE__ */ jsx43(ContextMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx43("div", { "data-slot": "context-menu-sub", children }) });
4719
+ return /* @__PURE__ */ jsx45(ContextMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-sub", children }) });
4443
4720
  }
4444
4721
  function ContextMenuSubTrigger({ className, inset, children, onClick, ...props }) {
4445
- const ctx = React52.useContext(ContextMenuSubContext);
4446
- return /* @__PURE__ */ jsxs13(
4722
+ const ctx = React55.useContext(ContextMenuSubContext);
4723
+ return /* @__PURE__ */ jsxs15(
4447
4724
  "div",
4448
4725
  {
4449
4726
  "data-slot": "context-menu-sub-trigger",
@@ -4464,15 +4741,15 @@ function ContextMenuSubTrigger({ className, inset, children, onClick, ...props }
4464
4741
  ...props,
4465
4742
  children: [
4466
4743
  children,
4467
- /* @__PURE__ */ jsx43("svg", { className: "ml-auto", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx43("path", { d: "m9 18 6-6-6-6" }) })
4744
+ /* @__PURE__ */ jsx45("svg", { className: "ml-auto", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx45("path", { d: "m9 18 6-6-6-6" }) })
4468
4745
  ]
4469
4746
  }
4470
4747
  );
4471
4748
  }
4472
4749
  function ContextMenuSubContent({ className, children, ...props }) {
4473
- const ctx = React52.useContext(ContextMenuSubContext);
4750
+ const ctx = React55.useContext(ContextMenuSubContext);
4474
4751
  if (!ctx?.open) return null;
4475
- return /* @__PURE__ */ jsx43(
4752
+ return /* @__PURE__ */ jsx45(
4476
4753
  "div",
4477
4754
  {
4478
4755
  "data-slot": "context-menu-sub-content",
@@ -4489,7 +4766,7 @@ function ContextMenuSubContent({ className, children, ...props }) {
4489
4766
  }
4490
4767
 
4491
4768
  // src/components/menubar.tsx
4492
- import * as React53 from "react";
4769
+ import * as React56 from "react";
4493
4770
 
4494
4771
  // src/generated/menubar.ts
4495
4772
  var MENUBAR_ROOT = "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs";
@@ -4506,16 +4783,16 @@ var MENUBAR_SUB_TRIGGER = "focus:bg-accent focus:text-accent-foreground data-[st
4506
4783
  var MENUBAR_SUB_CONTENT = "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 absolute z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg";
4507
4784
 
4508
4785
  // src/components/menubar.tsx
4509
- import { jsx as jsx44, jsxs as jsxs14 } from "react/jsx-runtime";
4510
- var MenubarMenuContext = React53.createContext(null);
4786
+ import { jsx as jsx46, jsxs as jsxs16 } from "react/jsx-runtime";
4787
+ var MenubarMenuContext = React56.createContext(null);
4511
4788
  function useMenu() {
4512
- const ctx = React53.useContext(MenubarMenuContext);
4789
+ const ctx = React56.useContext(MenubarMenuContext);
4513
4790
  if (!ctx) throw new Error("Menubar parts must be used within <MenubarMenu>");
4514
4791
  return ctx;
4515
4792
  }
4516
- var MenubarRadioGroupContext = React53.createContext(null);
4793
+ var MenubarRadioGroupContext = React56.createContext(null);
4517
4794
  function Menubar({ className, ...props }) {
4518
- return /* @__PURE__ */ jsx44(
4795
+ return /* @__PURE__ */ jsx46(
4519
4796
  "div",
4520
4797
  {
4521
4798
  "data-slot": "menubar",
@@ -4531,12 +4808,12 @@ function MenubarMenu({ open, defaultOpen = false, onOpenChange, children }) {
4531
4808
  defaultValue: defaultOpen,
4532
4809
  onChange: onOpenChange
4533
4810
  });
4534
- const triggerRef = React53.useRef(null);
4535
- return /* @__PURE__ */ jsx44(MenubarMenuContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children: /* @__PURE__ */ jsx44("div", { "data-slot": "menubar-menu", className: "relative", children }) });
4811
+ const triggerRef = React56.useRef(null);
4812
+ return /* @__PURE__ */ jsx46(MenubarMenuContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-menu", className: "relative", children }) });
4536
4813
  }
4537
4814
  function MenubarTrigger({ className, onClick, ...props }) {
4538
4815
  const { open, setOpen, triggerRef } = useMenu();
4539
- return /* @__PURE__ */ jsx44(
4816
+ return /* @__PURE__ */ jsx46(
4540
4817
  "button",
4541
4818
  {
4542
4819
  ref: triggerRef,
@@ -4572,10 +4849,10 @@ function MenubarContent({
4572
4849
  onDismiss: () => setOpen(false),
4573
4850
  exclude: [triggerRef]
4574
4851
  });
4575
- const items = React53.Children.toArray(children);
4852
+ const items = React56.Children.toArray(children);
4576
4853
  const { onKeyDown } = useRovingFocus({ count: items.length, orientation: "vertical" });
4577
4854
  if (!isPresent) return null;
4578
- return /* @__PURE__ */ jsx44(Portal, { children: /* @__PURE__ */ jsx44(
4855
+ return /* @__PURE__ */ jsx46(Portal, { children: /* @__PURE__ */ jsx46(
4579
4856
  "div",
4580
4857
  {
4581
4858
  ref: mergeRefs(presenceRef, floatingRef, dismissRef),
@@ -4592,7 +4869,7 @@ function MenubarContent({
4592
4869
  ) });
4593
4870
  }
4594
4871
  function MenubarGroup({ className, ...props }) {
4595
- return /* @__PURE__ */ jsx44("div", { "data-slot": "menubar-group", role: "group", className, ...props });
4872
+ return /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-group", role: "group", className, ...props });
4596
4873
  }
4597
4874
  function MenubarItem({
4598
4875
  className,
@@ -4600,7 +4877,7 @@ function MenubarItem({
4600
4877
  variant = "default",
4601
4878
  ...props
4602
4879
  }) {
4603
- return /* @__PURE__ */ jsx44(
4880
+ return /* @__PURE__ */ jsx46(
4604
4881
  "div",
4605
4882
  {
4606
4883
  "data-slot": "menubar-item",
@@ -4619,7 +4896,7 @@ function MenubarCheckboxItem({
4619
4896
  checked,
4620
4897
  ...props
4621
4898
  }) {
4622
- return /* @__PURE__ */ jsxs14(
4899
+ return /* @__PURE__ */ jsxs16(
4623
4900
  "div",
4624
4901
  {
4625
4902
  "data-slot": "menubar-checkbox-item",
@@ -4629,7 +4906,7 @@ function MenubarCheckboxItem({
4629
4906
  className: cn(MENUBAR_CHECKBOX_ITEM, className),
4630
4907
  ...props,
4631
4908
  children: [
4632
- /* @__PURE__ */ jsx44("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx44(
4909
+ /* @__PURE__ */ jsx46("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx46(
4633
4910
  "svg",
4634
4911
  {
4635
4912
  className: "size-4",
@@ -4639,7 +4916,7 @@ function MenubarCheckboxItem({
4639
4916
  strokeWidth: "2",
4640
4917
  strokeLinecap: "round",
4641
4918
  strokeLinejoin: "round",
4642
- children: /* @__PURE__ */ jsx44("path", { d: "M20 6 9 17l-5-5" })
4919
+ children: /* @__PURE__ */ jsx46("path", { d: "M20 6 9 17l-5-5" })
4643
4920
  }
4644
4921
  ) }),
4645
4922
  children
@@ -4659,7 +4936,7 @@ function MenubarRadioGroup({
4659
4936
  defaultValue,
4660
4937
  onChange: onValueChange
4661
4938
  });
4662
- return /* @__PURE__ */ jsx44(MenubarRadioGroupContext.Provider, { value: { value: current, onValueChange: setValue }, children: /* @__PURE__ */ jsx44("div", { "data-slot": "menubar-radio-group", role: "group", className, children }) });
4939
+ return /* @__PURE__ */ jsx46(MenubarRadioGroupContext.Provider, { value: { value: current, onValueChange: setValue }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-radio-group", role: "group", className, children }) });
4663
4940
  }
4664
4941
  function MenubarRadioItem({
4665
4942
  className,
@@ -4667,9 +4944,9 @@ function MenubarRadioItem({
4667
4944
  value,
4668
4945
  ...props
4669
4946
  }) {
4670
- const ctx = React53.useContext(MenubarRadioGroupContext);
4947
+ const ctx = React56.useContext(MenubarRadioGroupContext);
4671
4948
  const checked = ctx?.value === value;
4672
- return /* @__PURE__ */ jsxs14(
4949
+ return /* @__PURE__ */ jsxs16(
4673
4950
  "div",
4674
4951
  {
4675
4952
  "data-slot": "menubar-radio-item",
@@ -4680,7 +4957,7 @@ function MenubarRadioItem({
4680
4957
  onClick: () => ctx?.onValueChange(value),
4681
4958
  ...props,
4682
4959
  children: [
4683
- /* @__PURE__ */ jsx44("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx44("svg", { className: "size-2 fill-current", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx44("circle", { cx: "12", cy: "12", r: "10" }) }) }),
4960
+ /* @__PURE__ */ jsx46("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx46("svg", { className: "size-2 fill-current", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx46("circle", { cx: "12", cy: "12", r: "10" }) }) }),
4684
4961
  children
4685
4962
  ]
4686
4963
  }
@@ -4691,7 +4968,7 @@ function MenubarLabel({
4691
4968
  inset,
4692
4969
  ...props
4693
4970
  }) {
4694
- return /* @__PURE__ */ jsx44(
4971
+ return /* @__PURE__ */ jsx46(
4695
4972
  "div",
4696
4973
  {
4697
4974
  "data-slot": "menubar-label",
@@ -4702,7 +4979,7 @@ function MenubarLabel({
4702
4979
  );
4703
4980
  }
4704
4981
  function MenubarSeparator({ className, ...props }) {
4705
- return /* @__PURE__ */ jsx44(
4982
+ return /* @__PURE__ */ jsx46(
4706
4983
  "div",
4707
4984
  {
4708
4985
  "data-slot": "menubar-separator",
@@ -4713,7 +4990,7 @@ function MenubarSeparator({ className, ...props }) {
4713
4990
  );
4714
4991
  }
4715
4992
  function MenubarShortcut({ className, ...props }) {
4716
- return /* @__PURE__ */ jsx44(
4993
+ return /* @__PURE__ */ jsx46(
4717
4994
  "span",
4718
4995
  {
4719
4996
  "data-slot": "menubar-shortcut",
@@ -4722,9 +4999,9 @@ function MenubarShortcut({ className, ...props }) {
4722
4999
  }
4723
5000
  );
4724
5001
  }
4725
- var MenubarSubContext = React53.createContext(null);
5002
+ var MenubarSubContext = React56.createContext(null);
4726
5003
  function useSub() {
4727
- const ctx = React53.useContext(MenubarSubContext);
5004
+ const ctx = React56.useContext(MenubarSubContext);
4728
5005
  if (!ctx) throw new Error("MenubarSub parts must be used within <MenubarSub>");
4729
5006
  return ctx;
4730
5007
  }
@@ -4734,7 +5011,7 @@ function MenubarSub({ open, defaultOpen = false, onOpenChange, children }) {
4734
5011
  defaultValue: defaultOpen,
4735
5012
  onChange: onOpenChange
4736
5013
  });
4737
- return /* @__PURE__ */ jsx44(MenubarSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx44("div", { "data-slot": "menubar-sub", className: "relative", children }) });
5014
+ return /* @__PURE__ */ jsx46(MenubarSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-sub", className: "relative", children }) });
4738
5015
  }
4739
5016
  function MenubarSubTrigger({
4740
5017
  className,
@@ -4744,7 +5021,7 @@ function MenubarSubTrigger({
4744
5021
  ...props
4745
5022
  }) {
4746
5023
  const { open, setOpen } = useSub();
4747
- return /* @__PURE__ */ jsxs14(
5024
+ return /* @__PURE__ */ jsxs16(
4748
5025
  "div",
4749
5026
  {
4750
5027
  "data-slot": "menubar-sub-trigger",
@@ -4760,7 +5037,7 @@ function MenubarSubTrigger({
4760
5037
  ...props,
4761
5038
  children: [
4762
5039
  children,
4763
- /* @__PURE__ */ jsx44(
5040
+ /* @__PURE__ */ jsx46(
4764
5041
  "svg",
4765
5042
  {
4766
5043
  className: "ml-auto h-4 w-4",
@@ -4770,7 +5047,7 @@ function MenubarSubTrigger({
4770
5047
  strokeWidth: "2",
4771
5048
  strokeLinecap: "round",
4772
5049
  strokeLinejoin: "round",
4773
- children: /* @__PURE__ */ jsx44("path", { d: "m9 18 6-6-6-6" })
5050
+ children: /* @__PURE__ */ jsx46("path", { d: "m9 18 6-6-6-6" })
4774
5051
  }
4775
5052
  )
4776
5053
  ]
@@ -4781,7 +5058,7 @@ function MenubarSubContent({ className, children, ...props }) {
4781
5058
  const { open } = useSub();
4782
5059
  const { isPresent, ref } = usePresence(open);
4783
5060
  if (!isPresent) return null;
4784
- return /* @__PURE__ */ jsx44(
5061
+ return /* @__PURE__ */ jsx46(
4785
5062
  "div",
4786
5063
  {
4787
5064
  ref,
@@ -4796,7 +5073,7 @@ function MenubarSubContent({ className, children, ...props }) {
4796
5073
  }
4797
5074
 
4798
5075
  // src/components/navigation-menu.tsx
4799
- import * as React54 from "react";
5076
+ import * as React57 from "react";
4800
5077
 
4801
5078
  // src/generated/navigation-menu.ts
4802
5079
  var NAVIGATION_MENU = "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center";
@@ -4809,13 +5086,13 @@ var NAVIGATION_MENU_INDICATOR = "data-[state=visible]:animate-in data-[state=hid
4809
5086
  var NAVIGATION_MENU_VIEWPORT = "origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]";
4810
5087
 
4811
5088
  // src/components/navigation-menu.tsx
4812
- import { jsx as jsx45, jsxs as jsxs15 } from "react/jsx-runtime";
5089
+ import { jsx as jsx47, jsxs as jsxs17 } from "react/jsx-runtime";
4813
5090
  function navigationMenuTriggerStyle() {
4814
5091
  return NAVIGATION_MENU_TRIGGER_STYLE;
4815
5092
  }
4816
- var NavigationMenuItemContext = React54.createContext(null);
5093
+ var NavigationMenuItemContext = React57.createContext(null);
4817
5094
  function useItem() {
4818
- const ctx = React54.useContext(NavigationMenuItemContext);
5095
+ const ctx = React57.useContext(NavigationMenuItemContext);
4819
5096
  if (!ctx) throw new Error("NavigationMenu parts must be used within <NavigationMenuItem>");
4820
5097
  return ctx;
4821
5098
  }
@@ -4825,7 +5102,7 @@ function NavigationMenu({
4825
5102
  viewport = true,
4826
5103
  ...props
4827
5104
  }) {
4828
- return /* @__PURE__ */ jsxs15(
5105
+ return /* @__PURE__ */ jsxs17(
4829
5106
  "nav",
4830
5107
  {
4831
5108
  "data-slot": "navigation-menu",
@@ -4838,13 +5115,13 @@ function NavigationMenu({
4838
5115
  ...props,
4839
5116
  children: [
4840
5117
  children,
4841
- viewport && /* @__PURE__ */ jsx45(NavigationMenuViewport, {})
5118
+ viewport && /* @__PURE__ */ jsx47(NavigationMenuViewport, {})
4842
5119
  ]
4843
5120
  }
4844
5121
  );
4845
5122
  }
4846
5123
  function NavigationMenuList({ className, ...props }) {
4847
- return /* @__PURE__ */ jsx45(
5124
+ return /* @__PURE__ */ jsx47(
4848
5125
  "ul",
4849
5126
  {
4850
5127
  "data-slot": "navigation-menu-list",
@@ -4870,8 +5147,8 @@ function NavigationMenuItem({
4870
5147
  defaultValue: defaultOpen,
4871
5148
  onChange: onOpenChange
4872
5149
  });
4873
- const triggerRef = React54.useRef(null);
4874
- return /* @__PURE__ */ jsx45(NavigationMenuItemContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children: /* @__PURE__ */ jsx45("li", { "data-slot": "navigation-menu-item", className: cn(NAVIGATION_MENU_ITEM, className), ...props, children }) });
5150
+ const triggerRef = React57.useRef(null);
5151
+ return /* @__PURE__ */ jsx47(NavigationMenuItemContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children: /* @__PURE__ */ jsx47("li", { "data-slot": "navigation-menu-item", className: cn(NAVIGATION_MENU_ITEM, className), ...props, children }) });
4875
5152
  }
4876
5153
  function NavigationMenuTrigger({
4877
5154
  className,
@@ -4880,7 +5157,7 @@ function NavigationMenuTrigger({
4880
5157
  ...props
4881
5158
  }) {
4882
5159
  const { open, setOpen, triggerRef } = useItem();
4883
- return /* @__PURE__ */ jsxs15(
5160
+ return /* @__PURE__ */ jsxs17(
4884
5161
  "button",
4885
5162
  {
4886
5163
  ref: triggerRef,
@@ -4896,7 +5173,7 @@ function NavigationMenuTrigger({
4896
5173
  children: [
4897
5174
  children,
4898
5175
  " ",
4899
- /* @__PURE__ */ jsx45(
5176
+ /* @__PURE__ */ jsx47(
4900
5177
  "svg",
4901
5178
  {
4902
5179
  className: "relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
@@ -4907,7 +5184,7 @@ function NavigationMenuTrigger({
4907
5184
  strokeLinecap: "round",
4908
5185
  strokeLinejoin: "round",
4909
5186
  "aria-hidden": "true",
4910
- children: /* @__PURE__ */ jsx45("path", { d: "m6 9 6 6 6-6" })
5187
+ children: /* @__PURE__ */ jsx47("path", { d: "m6 9 6 6 6-6" })
4911
5188
  }
4912
5189
  )
4913
5190
  ]
@@ -4923,7 +5200,7 @@ function NavigationMenuContent({ className, children, ...props }) {
4923
5200
  exclude: [triggerRef]
4924
5201
  });
4925
5202
  if (!isPresent) return null;
4926
- return /* @__PURE__ */ jsx45(
5203
+ return /* @__PURE__ */ jsx47(
4927
5204
  "div",
4928
5205
  {
4929
5206
  ref: mergeRefs(presenceRef, dismissRef),
@@ -4939,7 +5216,7 @@ function NavigationMenuContent({ className, children, ...props }) {
4939
5216
  );
4940
5217
  }
4941
5218
  function NavigationMenuViewport({ className, ...props }) {
4942
- return /* @__PURE__ */ jsx45("div", { className: "absolute top-full left-0 isolate z-50 flex justify-center", children: /* @__PURE__ */ jsx45(
5219
+ return /* @__PURE__ */ jsx47("div", { className: "absolute top-full left-0 isolate z-50 flex justify-center", children: /* @__PURE__ */ jsx47(
4943
5220
  "div",
4944
5221
  {
4945
5222
  "data-slot": "navigation-menu-viewport",
@@ -4957,7 +5234,7 @@ function NavigationMenuLink({
4957
5234
  ...props
4958
5235
  }) {
4959
5236
  const Comp = asChild ? Slot : "a";
4960
- return /* @__PURE__ */ jsx45(
5237
+ return /* @__PURE__ */ jsx47(
4961
5238
  Comp,
4962
5239
  {
4963
5240
  "data-slot": "navigation-menu-link",
@@ -4970,7 +5247,7 @@ function NavigationMenuLink({
4970
5247
  );
4971
5248
  }
4972
5249
  function NavigationMenuIndicator({ className, ...props }) {
4973
- return /* @__PURE__ */ jsx45(
5250
+ return /* @__PURE__ */ jsx47(
4974
5251
  "div",
4975
5252
  {
4976
5253
  "data-slot": "navigation-menu-indicator",
@@ -4979,13 +5256,13 @@ function NavigationMenuIndicator({ className, ...props }) {
4979
5256
  className
4980
5257
  ),
4981
5258
  ...props,
4982
- children: /* @__PURE__ */ jsx45("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
5259
+ children: /* @__PURE__ */ jsx47("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
4983
5260
  }
4984
5261
  );
4985
5262
  }
4986
5263
 
4987
5264
  // src/components/dialog.tsx
4988
- import * as React55 from "react";
5265
+ import * as React58 from "react";
4989
5266
 
4990
5267
  // src/generated/dialog.ts
4991
5268
  var DIALOG_OVERLAY = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50";
@@ -4997,10 +5274,10 @@ var DIALOG_TITLE = "text-lg leading-none font-semibold";
4997
5274
  var DIALOG_DESCRIPTION = "text-muted-foreground text-sm";
4998
5275
 
4999
5276
  // src/components/dialog.tsx
5000
- import { Fragment as Fragment5, jsx as jsx46, jsxs as jsxs16 } from "react/jsx-runtime";
5001
- var DialogContext = React55.createContext(null);
5277
+ import { Fragment as Fragment6, jsx as jsx48, jsxs as jsxs18 } from "react/jsx-runtime";
5278
+ var DialogContext = React58.createContext(null);
5002
5279
  function useDialog() {
5003
- const ctx = React55.useContext(DialogContext);
5280
+ const ctx = React58.useContext(DialogContext);
5004
5281
  if (!ctx) throw new Error("Dialog parts must be used within <Dialog>");
5005
5282
  return ctx;
5006
5283
  }
@@ -5010,13 +5287,13 @@ function Dialog({ open, defaultOpen = false, onOpenChange, children }) {
5010
5287
  defaultValue: defaultOpen,
5011
5288
  ...onOpenChange ? { onChange: onOpenChange } : {}
5012
5289
  });
5013
- const triggerRef = React55.useRef(null);
5014
- return /* @__PURE__ */ jsx46(DialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5290
+ const triggerRef = React58.useRef(null);
5291
+ return /* @__PURE__ */ jsx48(DialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5015
5292
  }
5016
5293
  function DialogTrigger({ asChild = false, onClick, ...props }) {
5017
5294
  const { open, setOpen, triggerRef } = useDialog();
5018
5295
  const Comp = asChild ? Slot : "button";
5019
- return /* @__PURE__ */ jsx46(
5296
+ return /* @__PURE__ */ jsx48(
5020
5297
  Comp,
5021
5298
  {
5022
5299
  "data-slot": "dialog-trigger",
@@ -5031,11 +5308,11 @@ function DialogTrigger({ asChild = false, onClick, ...props }) {
5031
5308
  );
5032
5309
  }
5033
5310
  function DialogPortal({ children }) {
5034
- return /* @__PURE__ */ jsx46(Fragment5, { children });
5311
+ return /* @__PURE__ */ jsx48(Fragment6, { children });
5035
5312
  }
5036
5313
  function DialogOverlay({ className, ...props }) {
5037
5314
  const { open, setOpen } = useDialog();
5038
- return /* @__PURE__ */ jsx46(
5315
+ return /* @__PURE__ */ jsx48(
5039
5316
  "div",
5040
5317
  {
5041
5318
  "data-slot": "dialog-overlay",
@@ -5046,7 +5323,7 @@ function DialogOverlay({ className, ...props }) {
5046
5323
  }
5047
5324
  );
5048
5325
  }
5049
- var XIcon = (props) => /* @__PURE__ */ jsx46(
5326
+ var XIcon = (props) => /* @__PURE__ */ jsx48(
5050
5327
  "svg",
5051
5328
  {
5052
5329
  xmlns: "http://www.w3.org/2000/svg",
@@ -5059,7 +5336,7 @@ var XIcon = (props) => /* @__PURE__ */ jsx46(
5059
5336
  strokeLinecap: "round",
5060
5337
  strokeLinejoin: "round",
5061
5338
  ...props,
5062
- children: /* @__PURE__ */ jsx46("path", { d: "M18 6 6 18M6 6l12 12" })
5339
+ children: /* @__PURE__ */ jsx48("path", { d: "M18 6 6 18M6 6l12 12" })
5063
5340
  }
5064
5341
  );
5065
5342
  function DialogContent({
@@ -5076,7 +5353,7 @@ function DialogContent({
5076
5353
  onDismiss: () => setOpen(false),
5077
5354
  exclude: [triggerRef]
5078
5355
  });
5079
- React55.useEffect(() => {
5356
+ React58.useEffect(() => {
5080
5357
  if (!open) return;
5081
5358
  const prev = document.body.style.overflow;
5082
5359
  document.body.style.overflow = "hidden";
@@ -5085,9 +5362,9 @@ function DialogContent({
5085
5362
  };
5086
5363
  }, [open]);
5087
5364
  if (!isPresent) return null;
5088
- return /* @__PURE__ */ jsxs16(Portal, { children: [
5089
- /* @__PURE__ */ jsx46(DialogOverlay, {}),
5090
- /* @__PURE__ */ jsxs16(
5365
+ return /* @__PURE__ */ jsxs18(Portal, { children: [
5366
+ /* @__PURE__ */ jsx48(DialogOverlay, {}),
5367
+ /* @__PURE__ */ jsxs18(
5091
5368
  "div",
5092
5369
  {
5093
5370
  "data-slot": "dialog-content",
@@ -5099,7 +5376,7 @@ function DialogContent({
5099
5376
  ...props,
5100
5377
  children: [
5101
5378
  children,
5102
- showCloseButton && /* @__PURE__ */ jsxs16(
5379
+ showCloseButton && /* @__PURE__ */ jsxs18(
5103
5380
  "button",
5104
5381
  {
5105
5382
  type: "button",
@@ -5107,8 +5384,8 @@ function DialogContent({
5107
5384
  onClick: () => setOpen(false),
5108
5385
  className: DIALOG_CLOSE,
5109
5386
  children: [
5110
- /* @__PURE__ */ jsx46(XIcon, {}),
5111
- /* @__PURE__ */ jsx46("span", { className: "sr-only", children: "Close" })
5387
+ /* @__PURE__ */ jsx48(XIcon, {}),
5388
+ /* @__PURE__ */ jsx48("span", { className: "sr-only", children: "Close" })
5112
5389
  ]
5113
5390
  }
5114
5391
  )
@@ -5120,7 +5397,7 @@ function DialogContent({
5120
5397
  function DialogClose({ asChild = false, onClick, ...props }) {
5121
5398
  const { setOpen } = useDialog();
5122
5399
  const Comp = asChild ? Slot : "button";
5123
- return /* @__PURE__ */ jsx46(
5400
+ return /* @__PURE__ */ jsx48(
5124
5401
  Comp,
5125
5402
  {
5126
5403
  "data-slot": "dialog-close",
@@ -5133,7 +5410,7 @@ function DialogClose({ asChild = false, onClick, ...props }) {
5133
5410
  );
5134
5411
  }
5135
5412
  function DialogHeader({ className, ...props }) {
5136
- return /* @__PURE__ */ jsx46(
5413
+ return /* @__PURE__ */ jsx48(
5137
5414
  "div",
5138
5415
  {
5139
5416
  "data-slot": "dialog-header",
@@ -5143,7 +5420,7 @@ function DialogHeader({ className, ...props }) {
5143
5420
  );
5144
5421
  }
5145
5422
  function DialogFooter({ className, ...props }) {
5146
- return /* @__PURE__ */ jsx46(
5423
+ return /* @__PURE__ */ jsx48(
5147
5424
  "div",
5148
5425
  {
5149
5426
  "data-slot": "dialog-footer",
@@ -5153,7 +5430,7 @@ function DialogFooter({ className, ...props }) {
5153
5430
  );
5154
5431
  }
5155
5432
  function DialogTitle({ className, ...props }) {
5156
- return /* @__PURE__ */ jsx46(
5433
+ return /* @__PURE__ */ jsx48(
5157
5434
  "h2",
5158
5435
  {
5159
5436
  "data-slot": "dialog-title",
@@ -5163,7 +5440,7 @@ function DialogTitle({ className, ...props }) {
5163
5440
  );
5164
5441
  }
5165
5442
  function DialogDescription({ className, ...props }) {
5166
- return /* @__PURE__ */ jsx46(
5443
+ return /* @__PURE__ */ jsx48(
5167
5444
  "p",
5168
5445
  {
5169
5446
  "data-slot": "dialog-description",
@@ -5174,7 +5451,7 @@ function DialogDescription({ className, ...props }) {
5174
5451
  }
5175
5452
 
5176
5453
  // src/components/alert-dialog.tsx
5177
- import * as React56 from "react";
5454
+ import * as React59 from "react";
5178
5455
 
5179
5456
  // src/generated/alert-dialog.ts
5180
5457
  var ALERT_DIALOG_OVERLAY = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50";
@@ -5185,10 +5462,10 @@ var ALERT_DIALOG_TITLE = "text-lg font-semibold";
5185
5462
  var ALERT_DIALOG_DESCRIPTION = "text-muted-foreground text-sm";
5186
5463
 
5187
5464
  // src/components/alert-dialog.tsx
5188
- import { jsx as jsx47, jsxs as jsxs17 } from "react/jsx-runtime";
5189
- var AlertDialogContext = React56.createContext(null);
5465
+ import { jsx as jsx49, jsxs as jsxs19 } from "react/jsx-runtime";
5466
+ var AlertDialogContext = React59.createContext(null);
5190
5467
  function useAlertDialog() {
5191
- const ctx = React56.useContext(AlertDialogContext);
5468
+ const ctx = React59.useContext(AlertDialogContext);
5192
5469
  if (!ctx) throw new Error("AlertDialog parts must be used within <AlertDialog>");
5193
5470
  return ctx;
5194
5471
  }
@@ -5198,13 +5475,13 @@ function AlertDialog({ open, defaultOpen = false, onOpenChange, children }) {
5198
5475
  defaultValue: defaultOpen,
5199
5476
  ...onOpenChange ? { onChange: onOpenChange } : {}
5200
5477
  });
5201
- const triggerRef = React56.useRef(null);
5202
- return /* @__PURE__ */ jsx47(AlertDialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5478
+ const triggerRef = React59.useRef(null);
5479
+ return /* @__PURE__ */ jsx49(AlertDialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5203
5480
  }
5204
5481
  function AlertDialogTrigger({ asChild = false, onClick, ...props }) {
5205
5482
  const { open, setOpen, triggerRef } = useAlertDialog();
5206
5483
  const Comp = asChild ? Slot : "button";
5207
- return /* @__PURE__ */ jsx47(
5484
+ return /* @__PURE__ */ jsx49(
5208
5485
  Comp,
5209
5486
  {
5210
5487
  "data-slot": "alert-dialog-trigger",
@@ -5220,7 +5497,7 @@ function AlertDialogTrigger({ asChild = false, onClick, ...props }) {
5220
5497
  }
5221
5498
  function AlertDialogOverlay({ className, ...props }) {
5222
5499
  const { open, setOpen } = useAlertDialog();
5223
- return /* @__PURE__ */ jsx47(
5500
+ return /* @__PURE__ */ jsx49(
5224
5501
  "div",
5225
5502
  {
5226
5503
  "data-slot": "alert-dialog-overlay",
@@ -5241,9 +5518,9 @@ function AlertDialogContent({ className, children, ...props }) {
5241
5518
  exclude: [triggerRef]
5242
5519
  });
5243
5520
  if (!isPresent) return null;
5244
- return /* @__PURE__ */ jsxs17(Portal, { children: [
5245
- /* @__PURE__ */ jsx47(AlertDialogOverlay, {}),
5246
- /* @__PURE__ */ jsx47(
5521
+ return /* @__PURE__ */ jsxs19(Portal, { children: [
5522
+ /* @__PURE__ */ jsx49(AlertDialogOverlay, {}),
5523
+ /* @__PURE__ */ jsx49(
5247
5524
  "div",
5248
5525
  {
5249
5526
  "data-slot": "alert-dialog-content",
@@ -5259,7 +5536,7 @@ function AlertDialogContent({ className, children, ...props }) {
5259
5536
  ] });
5260
5537
  }
5261
5538
  function AlertDialogHeader({ className, ...props }) {
5262
- return /* @__PURE__ */ jsx47(
5539
+ return /* @__PURE__ */ jsx49(
5263
5540
  "div",
5264
5541
  {
5265
5542
  "data-slot": "alert-dialog-header",
@@ -5269,7 +5546,7 @@ function AlertDialogHeader({ className, ...props }) {
5269
5546
  );
5270
5547
  }
5271
5548
  function AlertDialogFooter({ className, ...props }) {
5272
- return /* @__PURE__ */ jsx47(
5549
+ return /* @__PURE__ */ jsx49(
5273
5550
  "div",
5274
5551
  {
5275
5552
  "data-slot": "alert-dialog-footer",
@@ -5279,7 +5556,7 @@ function AlertDialogFooter({ className, ...props }) {
5279
5556
  );
5280
5557
  }
5281
5558
  function AlertDialogTitle({ className, ...props }) {
5282
- return /* @__PURE__ */ jsx47(
5559
+ return /* @__PURE__ */ jsx49(
5283
5560
  "h2",
5284
5561
  {
5285
5562
  "data-slot": "alert-dialog-title",
@@ -5289,7 +5566,7 @@ function AlertDialogTitle({ className, ...props }) {
5289
5566
  );
5290
5567
  }
5291
5568
  function AlertDialogDescription({ className, ...props }) {
5292
- return /* @__PURE__ */ jsx47(
5569
+ return /* @__PURE__ */ jsx49(
5293
5570
  "p",
5294
5571
  {
5295
5572
  "data-slot": "alert-dialog-description",
@@ -5300,7 +5577,7 @@ function AlertDialogDescription({ className, ...props }) {
5300
5577
  }
5301
5578
  function AlertDialogAction({ className, onClick, ...props }) {
5302
5579
  const { setOpen } = useAlertDialog();
5303
- return /* @__PURE__ */ jsx47(
5580
+ return /* @__PURE__ */ jsx49(
5304
5581
  "button",
5305
5582
  {
5306
5583
  "data-slot": "alert-dialog-action",
@@ -5315,7 +5592,7 @@ function AlertDialogAction({ className, onClick, ...props }) {
5315
5592
  }
5316
5593
  function AlertDialogCancel({ className, onClick, ...props }) {
5317
5594
  const { setOpen } = useAlertDialog();
5318
- return /* @__PURE__ */ jsx47(
5595
+ return /* @__PURE__ */ jsx49(
5319
5596
  "button",
5320
5597
  {
5321
5598
  "data-slot": "alert-dialog-cancel",
@@ -5330,7 +5607,7 @@ function AlertDialogCancel({ className, onClick, ...props }) {
5330
5607
  }
5331
5608
 
5332
5609
  // src/components/sheet.tsx
5333
- import * as React57 from "react";
5610
+ import * as React60 from "react";
5334
5611
 
5335
5612
  // src/generated/sheet.ts
5336
5613
  var SHEET_OVERLAY = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50";
@@ -5346,10 +5623,10 @@ var SHEET_TITLE = "text-foreground font-semibold";
5346
5623
  var SHEET_DESCRIPTION = "text-muted-foreground text-sm";
5347
5624
 
5348
5625
  // src/components/sheet.tsx
5349
- import { jsx as jsx48, jsxs as jsxs18 } from "react/jsx-runtime";
5350
- var SheetContext = React57.createContext(null);
5626
+ import { jsx as jsx50, jsxs as jsxs20 } from "react/jsx-runtime";
5627
+ var SheetContext = React60.createContext(null);
5351
5628
  function useSheet() {
5352
- const ctx = React57.useContext(SheetContext);
5629
+ const ctx = React60.useContext(SheetContext);
5353
5630
  if (!ctx) throw new Error("Sheet parts must be used within <Sheet>");
5354
5631
  return ctx;
5355
5632
  }
@@ -5359,13 +5636,13 @@ function Sheet({ open, defaultOpen = false, onOpenChange, children }) {
5359
5636
  defaultValue: defaultOpen,
5360
5637
  ...onOpenChange ? { onChange: onOpenChange } : {}
5361
5638
  });
5362
- const triggerRef = React57.useRef(null);
5363
- return /* @__PURE__ */ jsx48(SheetContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5639
+ const triggerRef = React60.useRef(null);
5640
+ return /* @__PURE__ */ jsx50(SheetContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5364
5641
  }
5365
5642
  function SheetTrigger({ asChild = false, onClick, ...props }) {
5366
5643
  const { open, setOpen, triggerRef } = useSheet();
5367
5644
  const Comp = asChild ? Slot : "button";
5368
- return /* @__PURE__ */ jsx48(
5645
+ return /* @__PURE__ */ jsx50(
5369
5646
  Comp,
5370
5647
  {
5371
5648
  "data-slot": "sheet-trigger",
@@ -5381,7 +5658,7 @@ function SheetTrigger({ asChild = false, onClick, ...props }) {
5381
5658
  }
5382
5659
  function SheetOverlay({ className, ...props }) {
5383
5660
  const { open, setOpen } = useSheet();
5384
- return /* @__PURE__ */ jsx48(
5661
+ return /* @__PURE__ */ jsx50(
5385
5662
  "div",
5386
5663
  {
5387
5664
  "data-slot": "sheet-overlay",
@@ -5398,7 +5675,7 @@ var sheetSideClasses = {
5398
5675
  top: SHEET_SIDE_TOP,
5399
5676
  bottom: SHEET_SIDE_BOTTOM
5400
5677
  };
5401
- var XIcon2 = (props) => /* @__PURE__ */ jsx48(
5678
+ var XIcon2 = (props) => /* @__PURE__ */ jsx50(
5402
5679
  "svg",
5403
5680
  {
5404
5681
  xmlns: "http://www.w3.org/2000/svg",
@@ -5411,7 +5688,7 @@ var XIcon2 = (props) => /* @__PURE__ */ jsx48(
5411
5688
  strokeLinecap: "round",
5412
5689
  strokeLinejoin: "round",
5413
5690
  ...props,
5414
- children: /* @__PURE__ */ jsx48("path", { d: "M18 6 6 18M6 6l12 12" })
5691
+ children: /* @__PURE__ */ jsx50("path", { d: "M18 6 6 18M6 6l12 12" })
5415
5692
  }
5416
5693
  );
5417
5694
  function SheetContent({ className, children, side = "right", ...props }) {
@@ -5424,9 +5701,9 @@ function SheetContent({ className, children, side = "right", ...props }) {
5424
5701
  exclude: [triggerRef]
5425
5702
  });
5426
5703
  if (!isPresent) return null;
5427
- return /* @__PURE__ */ jsxs18(Portal, { children: [
5428
- /* @__PURE__ */ jsx48(SheetOverlay, {}),
5429
- /* @__PURE__ */ jsxs18(
5704
+ return /* @__PURE__ */ jsxs20(Portal, { children: [
5705
+ /* @__PURE__ */ jsx50(SheetOverlay, {}),
5706
+ /* @__PURE__ */ jsxs20(
5430
5707
  "div",
5431
5708
  {
5432
5709
  "data-slot": "sheet-content",
@@ -5438,7 +5715,7 @@ function SheetContent({ className, children, side = "right", ...props }) {
5438
5715
  ...props,
5439
5716
  children: [
5440
5717
  children,
5441
- /* @__PURE__ */ jsxs18(
5718
+ /* @__PURE__ */ jsxs20(
5442
5719
  "button",
5443
5720
  {
5444
5721
  type: "button",
@@ -5446,8 +5723,8 @@ function SheetContent({ className, children, side = "right", ...props }) {
5446
5723
  onClick: () => setOpen(false),
5447
5724
  className: SHEET_CLOSE,
5448
5725
  children: [
5449
- /* @__PURE__ */ jsx48(XIcon2, { className: "size-4" }),
5450
- /* @__PURE__ */ jsx48("span", { className: "sr-only", children: "Close" })
5726
+ /* @__PURE__ */ jsx50(XIcon2, { className: "size-4" }),
5727
+ /* @__PURE__ */ jsx50("span", { className: "sr-only", children: "Close" })
5451
5728
  ]
5452
5729
  }
5453
5730
  )
@@ -5459,7 +5736,7 @@ function SheetContent({ className, children, side = "right", ...props }) {
5459
5736
  function SheetClose({ asChild = false, onClick, ...props }) {
5460
5737
  const { setOpen } = useSheet();
5461
5738
  const Comp = asChild ? Slot : "button";
5462
- return /* @__PURE__ */ jsx48(
5739
+ return /* @__PURE__ */ jsx50(
5463
5740
  Comp,
5464
5741
  {
5465
5742
  "data-slot": "sheet-close",
@@ -5472,7 +5749,7 @@ function SheetClose({ asChild = false, onClick, ...props }) {
5472
5749
  );
5473
5750
  }
5474
5751
  function SheetHeader({ className, ...props }) {
5475
- return /* @__PURE__ */ jsx48(
5752
+ return /* @__PURE__ */ jsx50(
5476
5753
  "div",
5477
5754
  {
5478
5755
  "data-slot": "sheet-header",
@@ -5482,7 +5759,7 @@ function SheetHeader({ className, ...props }) {
5482
5759
  );
5483
5760
  }
5484
5761
  function SheetFooter({ className, ...props }) {
5485
- return /* @__PURE__ */ jsx48(
5762
+ return /* @__PURE__ */ jsx50(
5486
5763
  "div",
5487
5764
  {
5488
5765
  "data-slot": "sheet-footer",
@@ -5492,7 +5769,7 @@ function SheetFooter({ className, ...props }) {
5492
5769
  );
5493
5770
  }
5494
5771
  function SheetTitle({ className, ...props }) {
5495
- return /* @__PURE__ */ jsx48(
5772
+ return /* @__PURE__ */ jsx50(
5496
5773
  "h2",
5497
5774
  {
5498
5775
  "data-slot": "sheet-title",
@@ -5502,7 +5779,7 @@ function SheetTitle({ className, ...props }) {
5502
5779
  );
5503
5780
  }
5504
5781
  function SheetDescription({ className, ...props }) {
5505
- return /* @__PURE__ */ jsx48(
5782
+ return /* @__PURE__ */ jsx50(
5506
5783
  "p",
5507
5784
  {
5508
5785
  "data-slot": "sheet-description",
@@ -5513,7 +5790,7 @@ function SheetDescription({ className, ...props }) {
5513
5790
  }
5514
5791
 
5515
5792
  // src/components/drawer.tsx
5516
- import * as React58 from "react";
5793
+ import * as React61 from "react";
5517
5794
 
5518
5795
  // src/generated/drawer.ts
5519
5796
  var DRAWER_CONTENT_BASE = "bg-background fixed z-50 flex h-auto border";
@@ -5531,10 +5808,10 @@ var DRAWER_TITLE = "text-foreground font-semibold";
5531
5808
  var DRAWER_DESCRIPTION = "text-muted-foreground text-sm";
5532
5809
 
5533
5810
  // src/components/drawer.tsx
5534
- import { jsx as jsx49, jsxs as jsxs19 } from "react/jsx-runtime";
5535
- var DrawerContext = React58.createContext(null);
5811
+ import { jsx as jsx51, jsxs as jsxs21 } from "react/jsx-runtime";
5812
+ var DrawerContext = React61.createContext(null);
5536
5813
  function useDrawer() {
5537
- const ctx = React58.useContext(DrawerContext);
5814
+ const ctx = React61.useContext(DrawerContext);
5538
5815
  if (!ctx) throw new Error("Drawer parts must be used within <Drawer>");
5539
5816
  return ctx;
5540
5817
  }
@@ -5550,12 +5827,12 @@ function Drawer({
5550
5827
  defaultValue: defaultOpen,
5551
5828
  ...onOpenChange ? { onChange: onOpenChange } : {}
5552
5829
  });
5553
- return /* @__PURE__ */ jsx49(DrawerContext.Provider, { value: { open: isOpen, setOpen, direction }, children: /* @__PURE__ */ jsx49("div", { "data-slot": "drawer", children }) });
5830
+ return /* @__PURE__ */ jsx51(DrawerContext.Provider, { value: { open: isOpen, setOpen, direction }, children: /* @__PURE__ */ jsx51("div", { "data-slot": "drawer", children }) });
5554
5831
  }
5555
5832
  function DrawerTrigger({ asChild = false, onClick, ...props }) {
5556
5833
  const { setOpen } = useDrawer();
5557
5834
  const Comp = asChild ? Slot : "button";
5558
- return /* @__PURE__ */ jsx49(
5835
+ return /* @__PURE__ */ jsx51(
5559
5836
  Comp,
5560
5837
  {
5561
5838
  "data-slot": "drawer-trigger",
@@ -5570,7 +5847,7 @@ function DrawerTrigger({ asChild = false, onClick, ...props }) {
5570
5847
  function DrawerClose({ asChild = false, onClick, ...props }) {
5571
5848
  const { setOpen } = useDrawer();
5572
5849
  const Comp = asChild ? Slot : "button";
5573
- return /* @__PURE__ */ jsx49(
5850
+ return /* @__PURE__ */ jsx51(
5574
5851
  Comp,
5575
5852
  {
5576
5853
  "data-slot": "drawer-close",
@@ -5585,7 +5862,7 @@ function DrawerClose({ asChild = false, onClick, ...props }) {
5585
5862
  function DrawerOverlay({ className, ...props }) {
5586
5863
  const { open, setOpen } = useDrawer();
5587
5864
  if (!open) return null;
5588
- return /* @__PURE__ */ jsx49(
5865
+ return /* @__PURE__ */ jsx51(
5589
5866
  "div",
5590
5867
  {
5591
5868
  "data-slot": "drawer-overlay",
@@ -5600,8 +5877,8 @@ function DrawerContent({ className, children, ...props }) {
5600
5877
  const { open, setOpen, direction } = useDrawer();
5601
5878
  const scopeRef = useFocusScope(open);
5602
5879
  if (!open) return null;
5603
- return /* @__PURE__ */ jsxs19(Portal, { children: [
5604
- /* @__PURE__ */ jsx49(
5880
+ return /* @__PURE__ */ jsxs21(Portal, { children: [
5881
+ /* @__PURE__ */ jsx51(
5605
5882
  "div",
5606
5883
  {
5607
5884
  "data-slot": "drawer-overlay",
@@ -5609,7 +5886,7 @@ function DrawerContent({ className, children, ...props }) {
5609
5886
  onClick: () => setOpen(false)
5610
5887
  }
5611
5888
  ),
5612
- /* @__PURE__ */ jsxs19(
5889
+ /* @__PURE__ */ jsxs21(
5613
5890
  "div",
5614
5891
  {
5615
5892
  role: "dialog",
@@ -5624,7 +5901,7 @@ function DrawerContent({ className, children, ...props }) {
5624
5901
  className: cn(DRAWER_CONTENT_BASE, drawerDirectionClasses[direction], className),
5625
5902
  ...props,
5626
5903
  children: [
5627
- direction === "bottom" ? /* @__PURE__ */ jsx49(
5904
+ direction === "bottom" ? /* @__PURE__ */ jsx51(
5628
5905
  "div",
5629
5906
  {
5630
5907
  "data-slot": "drawer-handle",
@@ -5638,7 +5915,7 @@ function DrawerContent({ className, children, ...props }) {
5638
5915
  ] });
5639
5916
  }
5640
5917
  function DrawerHeader({ className, ...props }) {
5641
- return /* @__PURE__ */ jsx49(
5918
+ return /* @__PURE__ */ jsx51(
5642
5919
  "div",
5643
5920
  {
5644
5921
  "data-slot": "drawer-header",
@@ -5648,7 +5925,7 @@ function DrawerHeader({ className, ...props }) {
5648
5925
  );
5649
5926
  }
5650
5927
  function DrawerFooter({ className, ...props }) {
5651
- return /* @__PURE__ */ jsx49(
5928
+ return /* @__PURE__ */ jsx51(
5652
5929
  "div",
5653
5930
  {
5654
5931
  "data-slot": "drawer-footer",
@@ -5658,7 +5935,7 @@ function DrawerFooter({ className, ...props }) {
5658
5935
  );
5659
5936
  }
5660
5937
  function DrawerTitle({ className, ...props }) {
5661
- return /* @__PURE__ */ jsx49(
5938
+ return /* @__PURE__ */ jsx51(
5662
5939
  "div",
5663
5940
  {
5664
5941
  "data-slot": "drawer-title",
@@ -5668,7 +5945,7 @@ function DrawerTitle({ className, ...props }) {
5668
5945
  );
5669
5946
  }
5670
5947
  function DrawerDescription({ className, ...props }) {
5671
- return /* @__PURE__ */ jsx49(
5948
+ return /* @__PURE__ */ jsx51(
5672
5949
  "div",
5673
5950
  {
5674
5951
  "data-slot": "drawer-description",
@@ -5679,11 +5956,11 @@ function DrawerDescription({ className, ...props }) {
5679
5956
  }
5680
5957
 
5681
5958
  // src/components/select.tsx
5682
- import * as React59 from "react";
5683
- import { jsx as jsx50, jsxs as jsxs20 } from "react/jsx-runtime";
5684
- var SelectContext = React59.createContext(null);
5959
+ import * as React62 from "react";
5960
+ import { jsx as jsx52, jsxs as jsxs22 } from "react/jsx-runtime";
5961
+ var SelectContext = React62.createContext(null);
5685
5962
  function useSelect() {
5686
- const ctx = React59.useContext(SelectContext);
5963
+ const ctx = React62.useContext(SelectContext);
5687
5964
  if (!ctx) throw new Error("Select parts must be used within <Select>");
5688
5965
  return ctx;
5689
5966
  }
@@ -5706,8 +5983,8 @@ function Select({
5706
5983
  defaultValue: defaultOpen,
5707
5984
  ...onOpenChange ? { onChange: onOpenChange } : {}
5708
5985
  });
5709
- const anchorRef = React59.useRef(null);
5710
- return /* @__PURE__ */ jsx50(
5986
+ const anchorRef = React62.useRef(null);
5987
+ return /* @__PURE__ */ jsx52(
5711
5988
  SelectContext.Provider,
5712
5989
  {
5713
5990
  value: { value: currentValue, setValue, open: isOpen, setOpen, anchorRef },
@@ -5723,7 +6000,7 @@ function SelectTrigger({
5723
6000
  ...props
5724
6001
  }) {
5725
6002
  const { open, setOpen, anchorRef } = useSelect();
5726
- return /* @__PURE__ */ jsxs20(
6003
+ return /* @__PURE__ */ jsxs22(
5727
6004
  "button",
5728
6005
  {
5729
6006
  type: "button",
@@ -5744,7 +6021,7 @@ function SelectTrigger({
5744
6021
  ...props,
5745
6022
  children: [
5746
6023
  children,
5747
- /* @__PURE__ */ jsx50(
6024
+ /* @__PURE__ */ jsx52(
5748
6025
  "svg",
5749
6026
  {
5750
6027
  xmlns: "http://www.w3.org/2000/svg",
@@ -5758,7 +6035,7 @@ function SelectTrigger({
5758
6035
  strokeLinejoin: "round",
5759
6036
  className: "size-4 opacity-50",
5760
6037
  "aria-hidden": "true",
5761
- children: /* @__PURE__ */ jsx50("path", { d: "m6 9 6 6 6-6" })
6038
+ children: /* @__PURE__ */ jsx52("path", { d: "m6 9 6 6 6-6" })
5762
6039
  }
5763
6040
  )
5764
6041
  ]
@@ -5768,7 +6045,7 @@ function SelectTrigger({
5768
6045
  function SelectValue({ className, placeholder, ...props }) {
5769
6046
  const { value } = useSelect();
5770
6047
  const isEmpty = value === "";
5771
- return /* @__PURE__ */ jsx50(
6048
+ return /* @__PURE__ */ jsx52(
5772
6049
  "span",
5773
6050
  {
5774
6051
  "data-slot": "select-value",
@@ -5801,13 +6078,13 @@ function SelectContent({
5801
6078
  onDismiss: () => setOpen(false),
5802
6079
  exclude: [anchorRef]
5803
6080
  });
5804
- const items = React59.Children.toArray(children).filter(React59.isValidElement);
6081
+ const items = React62.Children.toArray(children).filter(React62.isValidElement);
5805
6082
  const { activeIndex, setActiveIndex, onKeyDown } = useRovingFocus({
5806
6083
  count: items.length,
5807
6084
  orientation: "vertical"
5808
6085
  });
5809
6086
  if (!isPresent) return null;
5810
- return /* @__PURE__ */ jsx50(Portal, { children: /* @__PURE__ */ jsx50(
6087
+ return /* @__PURE__ */ jsx52(Portal, { children: /* @__PURE__ */ jsx52(
5811
6088
  "div",
5812
6089
  {
5813
6090
  role: "listbox",
@@ -5823,8 +6100,8 @@ function SelectContent({
5823
6100
  className
5824
6101
  ),
5825
6102
  ...props,
5826
- children: /* @__PURE__ */ jsx50("div", { className: "p-1", children: items.map(
5827
- (child, index) => React59.cloneElement(child, {
6103
+ children: /* @__PURE__ */ jsx52("div", { className: "p-1", children: items.map(
6104
+ (child, index) => React62.cloneElement(child, {
5828
6105
  __index: index,
5829
6106
  __active: index === activeIndex,
5830
6107
  __setActive: setActiveIndex
@@ -5844,7 +6121,7 @@ function SelectItem({
5844
6121
  }) {
5845
6122
  const { value: selectedValue, setValue, setOpen } = useSelect();
5846
6123
  const selected = selectedValue === value;
5847
- return /* @__PURE__ */ jsxs20(
6124
+ return /* @__PURE__ */ jsxs22(
5848
6125
  "div",
5849
6126
  {
5850
6127
  role: "option",
@@ -5869,7 +6146,7 @@ function SelectItem({
5869
6146
  ),
5870
6147
  ...props,
5871
6148
  children: [
5872
- selected ? /* @__PURE__ */ jsx50("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx50(
6149
+ selected ? /* @__PURE__ */ jsx52("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx52(
5873
6150
  "svg",
5874
6151
  {
5875
6152
  xmlns: "http://www.w3.org/2000/svg",
@@ -5883,19 +6160,19 @@ function SelectItem({
5883
6160
  strokeLinejoin: "round",
5884
6161
  className: "size-4",
5885
6162
  "aria-hidden": "true",
5886
- children: /* @__PURE__ */ jsx50("path", { d: "M20 6 9 17l-5-5" })
6163
+ children: /* @__PURE__ */ jsx52("path", { d: "M20 6 9 17l-5-5" })
5887
6164
  }
5888
6165
  ) }) : null,
5889
- /* @__PURE__ */ jsx50("span", { children })
6166
+ /* @__PURE__ */ jsx52("span", { children })
5890
6167
  ]
5891
6168
  }
5892
6169
  );
5893
6170
  }
5894
6171
  function SelectGroup({ className, ...props }) {
5895
- return /* @__PURE__ */ jsx50("div", { role: "group", "data-slot": "select-group", className, ...props });
6172
+ return /* @__PURE__ */ jsx52("div", { role: "group", "data-slot": "select-group", className, ...props });
5896
6173
  }
5897
6174
  function SelectLabel({ className, ...props }) {
5898
- return /* @__PURE__ */ jsx50(
6175
+ return /* @__PURE__ */ jsx52(
5899
6176
  "div",
5900
6177
  {
5901
6178
  "data-slot": "select-label",
@@ -5905,7 +6182,7 @@ function SelectLabel({ className, ...props }) {
5905
6182
  );
5906
6183
  }
5907
6184
  function SelectSeparator({ className, ...props }) {
5908
- return /* @__PURE__ */ jsx50(
6185
+ return /* @__PURE__ */ jsx52(
5909
6186
  "div",
5910
6187
  {
5911
6188
  "data-slot": "select-separator",
@@ -5916,7 +6193,7 @@ function SelectSeparator({ className, ...props }) {
5916
6193
  }
5917
6194
 
5918
6195
  // src/components/command.tsx
5919
- import * as React60 from "react";
6196
+ import * as React63 from "react";
5920
6197
 
5921
6198
  // src/generated/command.ts
5922
6199
  var COMMAND_ROOT = "bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md";
@@ -5933,10 +6210,10 @@ var COMMAND_SEPARATOR = "bg-border -mx-1 h-px";
5933
6210
  var COMMAND_SHORTCUT = "text-muted-foreground ml-auto text-xs tracking-widest";
5934
6211
 
5935
6212
  // src/components/command.tsx
5936
- import { jsx as jsx51, jsxs as jsxs21 } from "react/jsx-runtime";
5937
- var CommandContext = React60.createContext(null);
6213
+ import { jsx as jsx53, jsxs as jsxs23 } from "react/jsx-runtime";
6214
+ var CommandContext = React63.createContext(null);
5938
6215
  function useCommand() {
5939
- const ctx = React60.useContext(CommandContext);
6216
+ const ctx = React63.useContext(CommandContext);
5940
6217
  if (!ctx) throw new Error("Command parts must be used within <Command>");
5941
6218
  return ctx;
5942
6219
  }
@@ -5953,15 +6230,57 @@ function Command({
5953
6230
  defaultValue: defaultSearch,
5954
6231
  ...onSearchChange ? { onChange: onSearchChange } : {}
5955
6232
  });
5956
- return /* @__PURE__ */ jsx51(CommandContext.Provider, { value: { search: currentSearch, setSearch }, children: /* @__PURE__ */ jsx51(
5957
- "div",
6233
+ const [items, setItems] = React63.useState(
6234
+ () => /* @__PURE__ */ new Map()
6235
+ );
6236
+ const registerItem = React63.useCallback((id, value) => {
6237
+ setItems((prev) => {
6238
+ if (prev.get(id) === value) return prev;
6239
+ const next = new Map(prev);
6240
+ next.set(id, value);
6241
+ return next;
6242
+ });
6243
+ }, []);
6244
+ const unregisterItem = React63.useCallback((id) => {
6245
+ setItems((prev) => {
6246
+ if (!prev.has(id)) return prev;
6247
+ const next = new Map(prev);
6248
+ next.delete(id);
6249
+ return next;
6250
+ });
6251
+ }, []);
6252
+ const query = currentSearch.trim().toLowerCase();
6253
+ const matches = React63.useCallback(
6254
+ (value) => query === "" || value.toLowerCase().includes(query),
6255
+ [query]
6256
+ );
6257
+ const hasMatches = React63.useMemo(
6258
+ () => [...items.values()].some(matches),
6259
+ [items, matches]
6260
+ );
6261
+ return /* @__PURE__ */ jsx53(
6262
+ CommandContext.Provider,
5958
6263
  {
5959
- "data-slot": "command",
5960
- className: cn(COMMAND_ROOT, className),
5961
- ...props,
5962
- children
6264
+ value: {
6265
+ search: currentSearch,
6266
+ setSearch,
6267
+ registerItem,
6268
+ unregisterItem,
6269
+ query,
6270
+ matches,
6271
+ hasMatches
6272
+ },
6273
+ children: /* @__PURE__ */ jsx53(
6274
+ "div",
6275
+ {
6276
+ "data-slot": "command",
6277
+ className: cn(COMMAND_ROOT, className),
6278
+ ...props,
6279
+ children
6280
+ }
6281
+ )
5963
6282
  }
5964
- ) });
6283
+ );
5965
6284
  }
5966
6285
  function CommandDialog({
5967
6286
  open,
@@ -5977,8 +6296,8 @@ function CommandDialog({
5977
6296
  });
5978
6297
  const scopeRef = useFocusScope(isOpen);
5979
6298
  if (!isOpen) return null;
5980
- return /* @__PURE__ */ jsxs21(Portal, { children: [
5981
- /* @__PURE__ */ jsx51(
6299
+ return /* @__PURE__ */ jsxs23(Portal, { children: [
6300
+ /* @__PURE__ */ jsx53(
5982
6301
  "div",
5983
6302
  {
5984
6303
  "data-slot": "command-overlay",
@@ -5986,7 +6305,7 @@ function CommandDialog({
5986
6305
  onClick: () => setOpen(false)
5987
6306
  }
5988
6307
  ),
5989
- /* @__PURE__ */ jsx51(
6308
+ /* @__PURE__ */ jsx53(
5990
6309
  "div",
5991
6310
  {
5992
6311
  role: "dialog",
@@ -5997,7 +6316,7 @@ function CommandDialog({
5997
6316
  if (e.key === "Escape") setOpen(false);
5998
6317
  },
5999
6318
  className: cn(COMMAND_DIALOG_CONTENT, className),
6000
- children: /* @__PURE__ */ jsx51(Command, { className: COMMAND_DIALOG_COMMAND, children })
6319
+ children: /* @__PURE__ */ jsx53(Command, { className: COMMAND_DIALOG_COMMAND, children })
6001
6320
  }
6002
6321
  )
6003
6322
  ] });
@@ -6007,8 +6326,8 @@ function CommandInput({
6007
6326
  ...props
6008
6327
  }) {
6009
6328
  const { search, setSearch } = useCommand();
6010
- return /* @__PURE__ */ jsxs21("div", { className: COMMAND_INPUT_WRAPPER, "data-slot": "command-input-wrapper", children: [
6011
- /* @__PURE__ */ jsxs21(
6329
+ return /* @__PURE__ */ jsxs23("div", { className: COMMAND_INPUT_WRAPPER, "data-slot": "command-input-wrapper", children: [
6330
+ /* @__PURE__ */ jsxs23(
6012
6331
  "svg",
6013
6332
  {
6014
6333
  xmlns: "http://www.w3.org/2000/svg",
@@ -6023,12 +6342,12 @@ function CommandInput({
6023
6342
  className: "size-4 shrink-0 opacity-50",
6024
6343
  "aria-hidden": "true",
6025
6344
  children: [
6026
- /* @__PURE__ */ jsx51("circle", { cx: "11", cy: "11", r: "8" }),
6027
- /* @__PURE__ */ jsx51("path", { d: "m21 21-4.3-4.3" })
6345
+ /* @__PURE__ */ jsx53("circle", { cx: "11", cy: "11", r: "8" }),
6346
+ /* @__PURE__ */ jsx53("path", { d: "m21 21-4.3-4.3" })
6028
6347
  ]
6029
6348
  }
6030
6349
  ),
6031
- /* @__PURE__ */ jsx51(
6350
+ /* @__PURE__ */ jsx53(
6032
6351
  "input",
6033
6352
  {
6034
6353
  type: "text",
@@ -6043,7 +6362,7 @@ function CommandInput({
6043
6362
  ] });
6044
6363
  }
6045
6364
  function CommandList({ className, ...props }) {
6046
- return /* @__PURE__ */ jsx51(
6365
+ return /* @__PURE__ */ jsx53(
6047
6366
  "div",
6048
6367
  {
6049
6368
  role: "listbox",
@@ -6054,10 +6373,9 @@ function CommandList({ className, ...props }) {
6054
6373
  );
6055
6374
  }
6056
6375
  function CommandEmpty({ className, children, ...props }) {
6057
- const { search } = useCommand();
6058
- const hasQuery = search.trim() !== "";
6059
- if (!hasQuery) return null;
6060
- return /* @__PURE__ */ jsx51(
6376
+ const { query, hasMatches } = useCommand();
6377
+ if (query === "" || hasMatches) return null;
6378
+ return /* @__PURE__ */ jsx53(
6061
6379
  "div",
6062
6380
  {
6063
6381
  "data-slot": "command-empty",
@@ -6068,7 +6386,7 @@ function CommandEmpty({ className, children, ...props }) {
6068
6386
  );
6069
6387
  }
6070
6388
  function CommandGroup({ className, heading, children, ...props }) {
6071
- return /* @__PURE__ */ jsxs21(
6389
+ return /* @__PURE__ */ jsxs23(
6072
6390
  "div",
6073
6391
  {
6074
6392
  role: "group",
@@ -6076,7 +6394,7 @@ function CommandGroup({ className, heading, children, ...props }) {
6076
6394
  className: cn(COMMAND_GROUP, className),
6077
6395
  ...props,
6078
6396
  children: [
6079
- heading ? /* @__PURE__ */ jsx51("div", { "data-slot": "command-group-heading", children: heading }) : null,
6397
+ heading ? /* @__PURE__ */ jsx53("div", { "data-slot": "command-group-heading", children: heading }) : null,
6080
6398
  children
6081
6399
  ]
6082
6400
  }
@@ -6090,10 +6408,14 @@ function CommandItem({
6090
6408
  children,
6091
6409
  ...props
6092
6410
  }) {
6093
- const { search } = useCommand();
6094
- const query = search.toLowerCase();
6095
- if (query !== "" && !value.toLowerCase().includes(query)) return null;
6096
- return /* @__PURE__ */ jsx51(
6411
+ const { registerItem, unregisterItem, matches } = useCommand();
6412
+ const id = React63.useId();
6413
+ React63.useEffect(() => {
6414
+ registerItem(id, value);
6415
+ return () => unregisterItem(id);
6416
+ }, [id, value, registerItem, unregisterItem]);
6417
+ if (!matches(value)) return null;
6418
+ return /* @__PURE__ */ jsx53(
6097
6419
  "div",
6098
6420
  {
6099
6421
  role: "option",
@@ -6111,7 +6433,7 @@ function CommandItem({
6111
6433
  );
6112
6434
  }
6113
6435
  function CommandSeparator({ className, ...props }) {
6114
- return /* @__PURE__ */ jsx51(
6436
+ return /* @__PURE__ */ jsx53(
6115
6437
  "div",
6116
6438
  {
6117
6439
  "data-slot": "command-separator",
@@ -6121,7 +6443,7 @@ function CommandSeparator({ className, ...props }) {
6121
6443
  );
6122
6444
  }
6123
6445
  function CommandShortcut({ className, ...props }) {
6124
- return /* @__PURE__ */ jsx51(
6446
+ return /* @__PURE__ */ jsx53(
6125
6447
  "span",
6126
6448
  {
6127
6449
  "data-slot": "command-shortcut",
@@ -6132,7 +6454,7 @@ function CommandShortcut({ className, ...props }) {
6132
6454
  }
6133
6455
 
6134
6456
  // src/components/chart.tsx
6135
- import * as React61 from "react";
6457
+ import * as React64 from "react";
6136
6458
 
6137
6459
  // src/generated/chart.ts
6138
6460
  var CHART_CONTAINER = "flex aspect-video justify-center text-xs [&_.recharts-layer]:outline-hidden [&_.recharts-surface]:outline-hidden [&_svg]:outline-hidden";
@@ -6140,10 +6462,10 @@ var CHART_TOOLTIP = "border-border/50 bg-background grid min-w-[8rem] items-star
6140
6462
  var CHART_LEGEND = "flex items-center justify-center gap-4";
6141
6463
 
6142
6464
  // src/components/chart.tsx
6143
- import { Fragment as Fragment6, jsx as jsx52, jsxs as jsxs22 } from "react/jsx-runtime";
6144
- var ChartContext = React61.createContext(null);
6465
+ import { Fragment as Fragment7, jsx as jsx54, jsxs as jsxs24 } from "react/jsx-runtime";
6466
+ var ChartContext = React64.createContext(null);
6145
6467
  function useChart() {
6146
- const context = React61.useContext(ChartContext);
6468
+ const context = React64.useContext(ChartContext);
6147
6469
  if (!context) {
6148
6470
  throw new Error("useChart must be used within a <ChartContainer />");
6149
6471
  }
@@ -6156,9 +6478,9 @@ function ChartContainer({
6156
6478
  config,
6157
6479
  ...props
6158
6480
  }) {
6159
- const uniqueId = React61.useId();
6481
+ const uniqueId = React64.useId();
6160
6482
  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
6161
- return /* @__PURE__ */ jsx52(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs22(
6483
+ return /* @__PURE__ */ jsx54(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs24(
6162
6484
  "div",
6163
6485
  {
6164
6486
  "data-slot": "chart",
@@ -6166,7 +6488,7 @@ function ChartContainer({
6166
6488
  className: cn(CHART_CONTAINER, className),
6167
6489
  ...props,
6168
6490
  children: [
6169
- /* @__PURE__ */ jsx52(ChartStyle, { id: chartId, config }),
6491
+ /* @__PURE__ */ jsx54(ChartStyle, { id: chartId, config }),
6170
6492
  children
6171
6493
  ]
6172
6494
  }
@@ -6177,7 +6499,7 @@ var ChartStyle = ({ id, config }) => {
6177
6499
  if (!colorConfig.length) {
6178
6500
  return null;
6179
6501
  }
6180
- return /* @__PURE__ */ jsx52(
6502
+ return /* @__PURE__ */ jsx54(
6181
6503
  "style",
6182
6504
  {
6183
6505
  dangerouslySetInnerHTML: {
@@ -6188,7 +6510,7 @@ ${colorConfig.map(([key, itemConfig]) => ` --color-${key}: ${itemConfig.color};
6188
6510
  }
6189
6511
  );
6190
6512
  };
6191
- var ChartTooltip = ({ children }) => /* @__PURE__ */ jsx52(Fragment6, { children });
6513
+ var ChartTooltip = ({ children }) => /* @__PURE__ */ jsx54(Fragment7, { children });
6192
6514
  function ChartTooltipContent({
6193
6515
  className,
6194
6516
  items = [],
@@ -6201,21 +6523,21 @@ function ChartTooltipContent({
6201
6523
  if (!items.length) {
6202
6524
  return null;
6203
6525
  }
6204
- return /* @__PURE__ */ jsxs22(
6526
+ return /* @__PURE__ */ jsxs24(
6205
6527
  "div",
6206
6528
  {
6207
6529
  "data-slot": "chart-tooltip",
6208
6530
  className: cn(CHART_TOOLTIP, className),
6209
6531
  children: [
6210
- !hideLabel && label ? /* @__PURE__ */ jsx52("div", { className: cn("font-medium", labelClassName), children: label }) : null,
6211
- /* @__PURE__ */ jsx52("div", { className: "grid gap-1.5", children: items.map((item, index) => /* @__PURE__ */ jsxs22(
6532
+ !hideLabel && label ? /* @__PURE__ */ jsx54("div", { className: cn("font-medium", labelClassName), children: label }) : null,
6533
+ /* @__PURE__ */ jsx54("div", { className: "grid gap-1.5", children: items.map((item, index) => /* @__PURE__ */ jsxs24(
6212
6534
  "div",
6213
6535
  {
6214
6536
  className: cn(
6215
6537
  "[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 items-center"
6216
6538
  ),
6217
6539
  children: [
6218
- !hideIndicator && /* @__PURE__ */ jsx52(
6540
+ !hideIndicator && /* @__PURE__ */ jsx54(
6219
6541
  "div",
6220
6542
  {
6221
6543
  className: "shrink-0 rounded-[2px] h-2.5 w-2.5",
@@ -6225,9 +6547,9 @@ function ChartTooltipContent({
6225
6547
  }
6226
6548
  }
6227
6549
  ),
6228
- /* @__PURE__ */ jsxs22("div", { className: "flex flex-1 justify-between leading-none items-center", children: [
6229
- /* @__PURE__ */ jsx52("span", { className: "text-muted-foreground", children: item.label }),
6230
- item.value !== void 0 && /* @__PURE__ */ jsx52("span", { className: "text-foreground font-mono font-medium tabular-nums", children: item.value })
6550
+ /* @__PURE__ */ jsxs24("div", { className: "flex flex-1 justify-between leading-none items-center", children: [
6551
+ /* @__PURE__ */ jsx54("span", { className: "text-muted-foreground", children: item.label }),
6552
+ item.value !== void 0 && /* @__PURE__ */ jsx54("span", { className: "text-foreground font-mono font-medium tabular-nums", children: item.value })
6231
6553
  ] })
6232
6554
  ]
6233
6555
  },
@@ -6237,7 +6559,7 @@ function ChartTooltipContent({
6237
6559
  }
6238
6560
  );
6239
6561
  }
6240
- var ChartLegend = ({ children }) => /* @__PURE__ */ jsx52(Fragment6, { children });
6562
+ var ChartLegend = ({ children }) => /* @__PURE__ */ jsx54(Fragment7, { children });
6241
6563
  function ChartLegendContent({
6242
6564
  className,
6243
6565
  hideIcon = false,
@@ -6251,19 +6573,19 @@ function ChartLegendContent({
6251
6573
  if (!rows.length) {
6252
6574
  return null;
6253
6575
  }
6254
- return /* @__PURE__ */ jsx52(
6576
+ return /* @__PURE__ */ jsx54(
6255
6577
  "div",
6256
6578
  {
6257
6579
  "data-slot": "chart-legend",
6258
6580
  className: cn(CHART_LEGEND, className),
6259
- children: rows.map((item, index) => /* @__PURE__ */ jsxs22(
6581
+ children: rows.map((item, index) => /* @__PURE__ */ jsxs24(
6260
6582
  "div",
6261
6583
  {
6262
6584
  className: cn(
6263
6585
  "[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"
6264
6586
  ),
6265
6587
  children: [
6266
- !hideIcon && /* @__PURE__ */ jsx52(
6588
+ !hideIcon && /* @__PURE__ */ jsx54(
6267
6589
  "div",
6268
6590
  {
6269
6591
  className: "h-2 w-2 shrink-0 rounded-[2px]",
@@ -6280,7 +6602,7 @@ function ChartLegendContent({
6280
6602
  }
6281
6603
 
6282
6604
  // src/components/calendar.tsx
6283
- import * as React62 from "react";
6605
+ import * as React65 from "react";
6284
6606
 
6285
6607
  // src/generated/calendar.ts
6286
6608
  var CALENDAR_ROOT = "bg-background p-3 w-fit";
@@ -6298,7 +6620,7 @@ var CALENDAR_DAY_SELECTED = "bg-primary text-primary-foreground";
6298
6620
  var CALENDAR_DAY_TODAY = "bg-accent text-accent-foreground rounded-md";
6299
6621
 
6300
6622
  // src/components/calendar.tsx
6301
- import { jsx as jsx53, jsxs as jsxs23 } from "react/jsx-runtime";
6623
+ import { jsx as jsx55, jsxs as jsxs25 } from "react/jsx-runtime";
6302
6624
  var MONTHS = [
6303
6625
  "January",
6304
6626
  "February",
@@ -6317,7 +6639,7 @@ var WEEKDAYS = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"];
6317
6639
  var CHEVRON_LEFT = "m15 18-6-6 6-6";
6318
6640
  var CHEVRON_RIGHT = "m9 18 6-6-6-6";
6319
6641
  function Chevron({ d }) {
6320
- return /* @__PURE__ */ jsx53(
6642
+ return /* @__PURE__ */ jsx55(
6321
6643
  "svg",
6322
6644
  {
6323
6645
  className: "size-4",
@@ -6331,7 +6653,7 @@ function Chevron({ d }) {
6331
6653
  strokeLinecap: "round",
6332
6654
  strokeLinejoin: "round",
6333
6655
  "aria-hidden": true,
6334
- children: /* @__PURE__ */ jsx53("path", { d })
6656
+ children: /* @__PURE__ */ jsx55("path", { d })
6335
6657
  }
6336
6658
  );
6337
6659
  }
@@ -6353,7 +6675,7 @@ function Calendar({
6353
6675
  today = /* @__PURE__ */ new Date(),
6354
6676
  className
6355
6677
  }) {
6356
- const [internal, setInternal] = React62.useState(
6678
+ const [internal, setInternal] = React65.useState(
6357
6679
  () => startOfMonth(defaultMonth ?? /* @__PURE__ */ new Date())
6358
6680
  );
6359
6681
  const view = month ? startOfMonth(month) : internal;
@@ -6378,38 +6700,38 @@ function Calendar({
6378
6700
  size: "icon",
6379
6701
  className: CALENDAR_NAV_BUTTON
6380
6702
  });
6381
- return /* @__PURE__ */ jsxs23(
6703
+ return /* @__PURE__ */ jsxs25(
6382
6704
  "div",
6383
6705
  {
6384
6706
  "data-slot": "calendar",
6385
6707
  role: "application",
6386
6708
  className: cn(CALENDAR_ROOT, className),
6387
6709
  children: [
6388
- /* @__PURE__ */ jsxs23("div", { className: CALENDAR_NAV, children: [
6389
- /* @__PURE__ */ jsx53(
6710
+ /* @__PURE__ */ jsxs25("div", { className: CALENDAR_NAV, children: [
6711
+ /* @__PURE__ */ jsx55(
6390
6712
  "button",
6391
6713
  {
6392
6714
  type: "button",
6393
6715
  className: navClass,
6394
6716
  "aria-label": "Previous month",
6395
6717
  onClick: () => go(-1),
6396
- children: /* @__PURE__ */ jsx53(Chevron, { d: CHEVRON_LEFT })
6718
+ children: /* @__PURE__ */ jsx55(Chevron, { d: CHEVRON_LEFT })
6397
6719
  }
6398
6720
  ),
6399
- /* @__PURE__ */ jsx53("div", { className: CALENDAR_CAPTION, children: caption }),
6400
- /* @__PURE__ */ jsx53(
6721
+ /* @__PURE__ */ jsx55("div", { className: CALENDAR_CAPTION, children: caption }),
6722
+ /* @__PURE__ */ jsx55(
6401
6723
  "button",
6402
6724
  {
6403
6725
  type: "button",
6404
6726
  className: navClass,
6405
6727
  "aria-label": "Next month",
6406
6728
  onClick: () => go(1),
6407
- children: /* @__PURE__ */ jsx53(Chevron, { d: CHEVRON_RIGHT })
6729
+ children: /* @__PURE__ */ jsx55(Chevron, { d: CHEVRON_RIGHT })
6408
6730
  }
6409
6731
  )
6410
6732
  ] }),
6411
- /* @__PURE__ */ jsxs23("table", { className: CALENDAR_GRID, role: "grid", children: [
6412
- /* @__PURE__ */ jsx53("thead", { children: /* @__PURE__ */ jsx53("tr", { className: CALENDAR_WEEKDAY_ROW, children: WEEKDAYS.map((wd) => /* @__PURE__ */ jsx53(
6733
+ /* @__PURE__ */ jsxs25("table", { className: CALENDAR_GRID, role: "grid", children: [
6734
+ /* @__PURE__ */ jsx55("thead", { children: /* @__PURE__ */ jsx55("tr", { className: CALENDAR_WEEKDAY_ROW, children: WEEKDAYS.map((wd) => /* @__PURE__ */ jsx55(
6413
6735
  "th",
6414
6736
  {
6415
6737
  scope: "col",
@@ -6418,9 +6740,9 @@ function Calendar({
6418
6740
  },
6419
6741
  wd
6420
6742
  )) }) }),
6421
- /* @__PURE__ */ jsx53("tbody", { children: weeks.map((week, wi) => /* @__PURE__ */ jsx53("tr", { className: CALENDAR_WEEK, children: week.map((cell, ci) => {
6743
+ /* @__PURE__ */ jsx55("tbody", { children: weeks.map((week, wi) => /* @__PURE__ */ jsx55("tr", { className: CALENDAR_WEEK, children: week.map((cell, ci) => {
6422
6744
  if (cell === null) {
6423
- return /* @__PURE__ */ jsx53(
6745
+ return /* @__PURE__ */ jsx55(
6424
6746
  "td",
6425
6747
  {
6426
6748
  className: CALENDAR_DAY_EMPTY
@@ -6431,13 +6753,13 @@ function Calendar({
6431
6753
  const date = new Date(year, monthIndex, cell);
6432
6754
  const isSelected = sameDay(selected, date);
6433
6755
  const isToday = sameDay(today, date);
6434
- return /* @__PURE__ */ jsx53(
6756
+ return /* @__PURE__ */ jsx55(
6435
6757
  "td",
6436
6758
  {
6437
6759
  role: "gridcell",
6438
6760
  "aria-selected": isSelected,
6439
6761
  className: CALENDAR_DAY_CELL,
6440
- children: /* @__PURE__ */ jsx53(
6762
+ children: /* @__PURE__ */ jsx55(
6441
6763
  "button",
6442
6764
  {
6443
6765
  type: "button",
@@ -6467,7 +6789,7 @@ function Calendar({
6467
6789
  }
6468
6790
 
6469
6791
  // src/components/sonner.tsx
6470
- import * as React63 from "react";
6792
+ import * as React66 from "react";
6471
6793
 
6472
6794
  // src/generated/sonner.ts
6473
6795
  var TOAST_BASE = "pointer-events-auto flex w-full items-start gap-3 rounded-md border p-4 text-sm shadow-lg";
@@ -6492,7 +6814,7 @@ var TOAST_CONTENT = "flex-1 space-y-1";
6492
6814
  var TOAST_TITLE = "font-medium";
6493
6815
 
6494
6816
  // src/components/sonner.tsx
6495
- import { jsx as jsx54, jsxs as jsxs24 } from "react/jsx-runtime";
6817
+ import { jsx as jsx56, jsxs as jsxs26 } from "react/jsx-runtime";
6496
6818
  var DEFAULT_DURATION = 4e3;
6497
6819
  var SWIPE_THRESHOLD = 45;
6498
6820
  var SWIPE_VELOCITY = 0.11;
@@ -6557,17 +6879,17 @@ function ToastItem({
6557
6879
  reportHeight,
6558
6880
  removeHeight
6559
6881
  }) {
6560
- const ref = React63.useRef(null);
6561
- const [height, setHeight] = React63.useState(0);
6562
- const remainingRef = React63.useRef(t.duration);
6563
- const startedRef = React63.useRef(0);
6564
- const flingRef = React63.useRef(
6882
+ const ref = React66.useRef(null);
6883
+ const [height, setHeight] = React66.useState(0);
6884
+ const remainingRef = React66.useRef(t.duration);
6885
+ const startedRef = React66.useRef(0);
6886
+ const flingRef = React66.useRef(
6565
6887
  void 0
6566
6888
  );
6567
- const dragRef = React63.useRef(
6889
+ const dragRef = React66.useRef(
6568
6890
  null
6569
6891
  );
6570
- React63.useLayoutEffect(() => {
6892
+ React66.useLayoutEffect(() => {
6571
6893
  const el = ref.current;
6572
6894
  if (!el) return;
6573
6895
  el.style.height = "auto";
@@ -6578,8 +6900,12 @@ function ToastItem({
6578
6900
  reportHeight(t.id, h);
6579
6901
  }
6580
6902
  }, [t.id, t.message, t.description, reportHeight]);
6581
- React63.useEffect(() => () => removeHeight(t.id), [t.id, removeHeight]);
6582
- React63.useEffect(() => {
6903
+ React66.useEffect(() => () => removeHeight(t.id), [t.id, removeHeight]);
6904
+ const mountedClosing = React66.useRef(t.state === "closing");
6905
+ React66.useEffect(() => {
6906
+ if (mountedClosing.current) store.remove(t.id);
6907
+ }, [t.id]);
6908
+ React66.useEffect(() => {
6583
6909
  if (t.duration === Infinity || t.state === "closing" || paused) return;
6584
6910
  startedRef.current = Date.now();
6585
6911
  const id = setTimeout(() => store.dismiss(t.id), remainingRef.current);
@@ -6591,7 +6917,7 @@ function ToastItem({
6591
6917
  );
6592
6918
  };
6593
6919
  }, [paused, t.id, t.duration, t.state]);
6594
- React63.useEffect(
6920
+ React66.useEffect(
6595
6921
  () => () => {
6596
6922
  if (flingRef.current) clearTimeout(flingRef.current);
6597
6923
  },
@@ -6650,7 +6976,7 @@ function ToastItem({
6650
6976
  );
6651
6977
  }
6652
6978
  };
6653
- return /* @__PURE__ */ jsxs24(
6979
+ return /* @__PURE__ */ jsxs26(
6654
6980
  "li",
6655
6981
  {
6656
6982
  ref,
@@ -6678,11 +7004,11 @@ function ToastItem({
6678
7004
  toastVariantClasses[t.variant]
6679
7005
  ),
6680
7006
  children: [
6681
- /* @__PURE__ */ jsxs24("div", { className: TOAST_CONTENT, children: [
6682
- /* @__PURE__ */ jsx54("div", { className: TOAST_TITLE, children: t.message }),
6683
- t.description ? /* @__PURE__ */ jsx54("div", { className: "text-muted-foreground text-sm", children: t.description }) : null
7007
+ /* @__PURE__ */ jsxs26("div", { className: TOAST_CONTENT, children: [
7008
+ /* @__PURE__ */ jsx56("div", { className: TOAST_TITLE, children: t.message }),
7009
+ t.description ? /* @__PURE__ */ jsx56("div", { className: "text-muted-foreground text-sm", children: t.description }) : null
6684
7010
  ] }),
6685
- /* @__PURE__ */ jsx54(
7011
+ /* @__PURE__ */ jsx56(
6686
7012
  "button",
6687
7013
  {
6688
7014
  type: "button",
@@ -6690,7 +7016,7 @@ function ToastItem({
6690
7016
  "data-slot": "toast-close",
6691
7017
  onClick: () => store.dismiss(t.id),
6692
7018
  className: TOAST_CLOSE,
6693
- children: /* @__PURE__ */ jsx54(
7019
+ children: /* @__PURE__ */ jsx56(
6694
7020
  "svg",
6695
7021
  {
6696
7022
  xmlns: "http://www.w3.org/2000/svg",
@@ -6703,7 +7029,7 @@ function ToastItem({
6703
7029
  strokeLinecap: "round",
6704
7030
  strokeLinejoin: "round",
6705
7031
  "aria-hidden": "true",
6706
- children: /* @__PURE__ */ jsx54("path", { d: "M18 6 6 18M6 6l12 12" })
7032
+ children: /* @__PURE__ */ jsx56("path", { d: "M18 6 6 18M6 6l12 12" })
6707
7033
  }
6708
7034
  )
6709
7035
  }
@@ -6717,17 +7043,17 @@ function Toaster({
6717
7043
  className,
6718
7044
  ...props
6719
7045
  }) {
6720
- const [toasts, setToasts] = React63.useState([]);
6721
- const [heights, setHeights] = React63.useState(/* @__PURE__ */ new Map());
6722
- const [paused, setPaused] = React63.useState(false);
6723
- React63.useEffect(() => store.subscribe(setToasts), []);
7046
+ const [toasts, setToasts] = React66.useState([]);
7047
+ const [heights, setHeights] = React66.useState(/* @__PURE__ */ new Map());
7048
+ const [paused, setPaused] = React66.useState(false);
7049
+ React66.useEffect(() => store.subscribe(setToasts), []);
6724
7050
  const onEnter = () => setPaused(true);
6725
7051
  const onLeave = (e) => {
6726
7052
  if (!e.currentTarget.contains(e.relatedTarget)) {
6727
7053
  setPaused(false);
6728
7054
  }
6729
7055
  };
6730
- const reportHeight = React63.useCallback((id, h) => {
7056
+ const reportHeight = React66.useCallback((id, h) => {
6731
7057
  setHeights((prev) => {
6732
7058
  if (prev.get(id) === h) return prev;
6733
7059
  const next = new Map(prev);
@@ -6735,7 +7061,7 @@ function Toaster({
6735
7061
  return next;
6736
7062
  });
6737
7063
  }, []);
6738
- const removeHeight = React63.useCallback((id) => {
7064
+ const removeHeight = React66.useCallback((id) => {
6739
7065
  setHeights((prev) => {
6740
7066
  if (!prev.has(id)) return prev;
6741
7067
  const next = new Map(prev);
@@ -6753,7 +7079,7 @@ function Toaster({
6753
7079
  sum += heights.get(t.id) ?? 0;
6754
7080
  return o;
6755
7081
  });
6756
- return /* @__PURE__ */ jsx54(
7082
+ return /* @__PURE__ */ jsx56(
6757
7083
  "ol",
6758
7084
  {
6759
7085
  "data-slot": "toaster",
@@ -6774,7 +7100,7 @@ function Toaster({
6774
7100
  onPointerOut: onLeave,
6775
7101
  onFocus: onEnter,
6776
7102
  onBlur: onLeave,
6777
- children: ordered.map((t, i) => /* @__PURE__ */ jsx54(
7103
+ children: ordered.map((t, i) => /* @__PURE__ */ jsx56(
6778
7104
  ToastItem,
6779
7105
  {
6780
7106
  toast: t,
@@ -6792,7 +7118,7 @@ function Toaster({
6792
7118
  }
6793
7119
 
6794
7120
  // src/components/form.tsx
6795
- import * as React64 from "react";
7121
+ import * as React67 from "react";
6796
7122
 
6797
7123
  // src/generated/form.ts
6798
7124
  var FORM_ITEM = "grid gap-2";
@@ -6800,21 +7126,21 @@ var FORM_DESCRIPTION = "text-muted-foreground text-sm";
6800
7126
  var FORM_MESSAGE = "text-destructive text-sm";
6801
7127
 
6802
7128
  // src/components/form.tsx
6803
- import { jsx as jsx55 } from "react/jsx-runtime";
6804
- var FormItemContext = React64.createContext(null);
7129
+ import { jsx as jsx57 } from "react/jsx-runtime";
7130
+ var FormItemContext = React67.createContext(null);
6805
7131
  function useFormItem() {
6806
- const ctx = React64.useContext(FormItemContext);
7132
+ const ctx = React67.useContext(FormItemContext);
6807
7133
  if (!ctx) {
6808
7134
  throw new Error("Form parts must be used within <FormItem>");
6809
7135
  }
6810
7136
  return ctx;
6811
7137
  }
6812
7138
  function Form({ ...props }) {
6813
- return /* @__PURE__ */ jsx55("form", { "data-slot": "form", ...props });
7139
+ return /* @__PURE__ */ jsx57("form", { "data-slot": "form", ...props });
6814
7140
  }
6815
7141
  function FormItem({ className, ...props }) {
6816
- const id = React64.useId();
6817
- const value = React64.useMemo(
7142
+ const id = React67.useId();
7143
+ const value = React67.useMemo(
6818
7144
  () => ({
6819
7145
  id,
6820
7146
  formItemId: `${id}-form-item`,
@@ -6823,7 +7149,7 @@ function FormItem({ className, ...props }) {
6823
7149
  }),
6824
7150
  [id]
6825
7151
  );
6826
- return /* @__PURE__ */ jsx55(FormItemContext.Provider, { value, children: /* @__PURE__ */ jsx55("div", { "data-slot": "form-item", className: cn(FORM_ITEM, className), ...props }) });
7152
+ return /* @__PURE__ */ jsx57(FormItemContext.Provider, { value, children: /* @__PURE__ */ jsx57("div", { "data-slot": "form-item", className: cn(FORM_ITEM, className), ...props }) });
6827
7153
  }
6828
7154
  function FormLabel({
6829
7155
  className,
@@ -6831,7 +7157,7 @@ function FormLabel({
6831
7157
  ...props
6832
7158
  }) {
6833
7159
  const { formItemId } = useFormItem();
6834
- return /* @__PURE__ */ jsx55(
7160
+ return /* @__PURE__ */ jsx57(
6835
7161
  Label,
6836
7162
  {
6837
7163
  "data-slot": "form-label",
@@ -6847,7 +7173,7 @@ function FormControl({
6847
7173
  ...props
6848
7174
  }) {
6849
7175
  const { formItemId, formDescriptionId, formMessageId } = useFormItem();
6850
- return /* @__PURE__ */ jsx55(
7176
+ return /* @__PURE__ */ jsx57(
6851
7177
  Slot,
6852
7178
  {
6853
7179
  "data-slot": "form-control",
@@ -6860,7 +7186,7 @@ function FormControl({
6860
7186
  }
6861
7187
  function FormDescription({ className, ...props }) {
6862
7188
  const { formDescriptionId } = useFormItem();
6863
- return /* @__PURE__ */ jsx55(
7189
+ return /* @__PURE__ */ jsx57(
6864
7190
  "p",
6865
7191
  {
6866
7192
  "data-slot": "form-description",
@@ -6875,7 +7201,7 @@ function FormMessage({ className, children, ...props }) {
6875
7201
  if (!children) {
6876
7202
  return null;
6877
7203
  }
6878
- return /* @__PURE__ */ jsx55(
7204
+ return /* @__PURE__ */ jsx57(
6879
7205
  "p",
6880
7206
  {
6881
7207
  "data-slot": "form-message",
@@ -6888,7 +7214,7 @@ function FormMessage({ className, children, ...props }) {
6888
7214
  }
6889
7215
 
6890
7216
  // src/components/resizable.tsx
6891
- import * as React65 from "react";
7217
+ import * as React68 from "react";
6892
7218
 
6893
7219
  // src/generated/resizable.ts
6894
7220
  var RESIZABLE_GROUP = "flex h-full w-full data-[panel-group-direction=vertical]:flex-col";
@@ -6897,10 +7223,10 @@ var RESIZABLE_HANDLE = "bg-border focus-visible:ring-ring relative flex w-px ite
6897
7223
  var RESIZABLE_HANDLE_GRIP = "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border";
6898
7224
 
6899
7225
  // src/components/resizable.tsx
6900
- import { jsx as jsx56, jsxs as jsxs25 } from "react/jsx-runtime";
6901
- var ResizableContext = React65.createContext(null);
7226
+ import { jsx as jsx58, jsxs as jsxs27 } from "react/jsx-runtime";
7227
+ var ResizableContext = React68.createContext(null);
6902
7228
  function useResizable() {
6903
- const ctx = React65.useContext(ResizableContext);
7229
+ const ctx = React68.useContext(ResizableContext);
6904
7230
  if (!ctx)
6905
7231
  throw new Error("Resizable parts must be used within a ResizablePanelGroup");
6906
7232
  return ctx;
@@ -6923,9 +7249,9 @@ function ResizablePanelGroup({
6923
7249
  children,
6924
7250
  ...props
6925
7251
  }) {
6926
- const [sizes, setSizes] = React65.useState([]);
6927
- const groupRef = React65.useRef(null);
6928
- const register = React65.useCallback((index, defaultSize) => {
7252
+ const [sizes, setSizes] = React68.useState([]);
7253
+ const groupRef = React68.useRef(null);
7254
+ const register = React68.useCallback((index, defaultSize) => {
6929
7255
  setSizes((prev) => {
6930
7256
  if (prev[index] !== void 0) return prev;
6931
7257
  const next = prev.slice();
@@ -6934,14 +7260,14 @@ function ResizablePanelGroup({
6934
7260
  return next;
6935
7261
  });
6936
7262
  }, []);
6937
- React65.useEffect(() => {
7263
+ React68.useEffect(() => {
6938
7264
  if (sizes.length) onLayout?.(sizes);
6939
7265
  }, [sizes, onLayout]);
6940
- const value = React65.useMemo(
7266
+ const value = React68.useMemo(
6941
7267
  () => ({ sizes, setSizes, register, direction, keyboardStep, groupRef }),
6942
7268
  [sizes, register, direction, keyboardStep]
6943
7269
  );
6944
- return /* @__PURE__ */ jsx56(ResizableContext.Provider, { value, children: /* @__PURE__ */ jsx56(
7270
+ return /* @__PURE__ */ jsx58(ResizableContext.Provider, { value, children: /* @__PURE__ */ jsx58(
6945
7271
  "div",
6946
7272
  {
6947
7273
  ref: groupRef,
@@ -6962,11 +7288,11 @@ function ResizablePanel({
6962
7288
  ...props
6963
7289
  }) {
6964
7290
  const { sizes, register } = useResizable();
6965
- React65.useEffect(() => {
7291
+ React68.useEffect(() => {
6966
7292
  register(index, defaultSize);
6967
7293
  }, [register, index, defaultSize]);
6968
7294
  const basis = sizes[index] ?? defaultSize;
6969
- return /* @__PURE__ */ jsx56(
7295
+ return /* @__PURE__ */ jsx58(
6970
7296
  "div",
6971
7297
  {
6972
7298
  "data-slot": "resizable-panel",
@@ -6985,12 +7311,12 @@ function ResizableHandle({
6985
7311
  ...props
6986
7312
  }) {
6987
7313
  const { setSizes, direction, keyboardStep, groupRef } = useResizable();
6988
- const draggingRef = React65.useRef(false);
6989
- const resize = React65.useCallback(
7314
+ const draggingRef = React68.useRef(false);
7315
+ const resize = React68.useCallback(
6990
7316
  (delta) => setSizes((prev) => redistribute(prev, index, delta)),
6991
7317
  [setSizes, index]
6992
7318
  );
6993
- const onPointerMove = React65.useCallback(
7319
+ const onPointerMove = React68.useCallback(
6994
7320
  (event) => {
6995
7321
  if (!draggingRef.current) return;
6996
7322
  const rect = groupRef.current?.getBoundingClientRect();
@@ -7002,7 +7328,7 @@ function ResizableHandle({
7002
7328
  },
7003
7329
  [direction, resize, groupRef]
7004
7330
  );
7005
- const onPointerUp = React65.useCallback(() => {
7331
+ const onPointerUp = React68.useCallback(() => {
7006
7332
  draggingRef.current = false;
7007
7333
  window.removeEventListener("pointermove", onPointerMove);
7008
7334
  window.removeEventListener("pointerup", onPointerUp);
@@ -7013,7 +7339,7 @@ function ResizableHandle({
7013
7339
  window.addEventListener("pointermove", onPointerMove);
7014
7340
  window.addEventListener("pointerup", onPointerUp);
7015
7341
  };
7016
- React65.useEffect(() => () => onPointerUp(), [onPointerUp]);
7342
+ React68.useEffect(() => () => onPointerUp(), [onPointerUp]);
7017
7343
  const onKeyDown = (event) => {
7018
7344
  let delta;
7019
7345
  switch (event.key) {
@@ -7033,7 +7359,7 @@ function ResizableHandle({
7033
7359
  event.preventDefault();
7034
7360
  resize(delta);
7035
7361
  };
7036
- return /* @__PURE__ */ jsxs25(
7362
+ return /* @__PURE__ */ jsxs27(
7037
7363
  "div",
7038
7364
  {
7039
7365
  "data-slot": "resizable-handle",
@@ -7046,7 +7372,7 @@ function ResizableHandle({
7046
7372
  onKeyDown,
7047
7373
  ...props,
7048
7374
  children: [
7049
- withHandle && /* @__PURE__ */ jsx56("div", { className: RESIZABLE_HANDLE_GRIP, children: /* @__PURE__ */ jsxs25(
7375
+ withHandle && /* @__PURE__ */ jsx58("div", { className: RESIZABLE_HANDLE_GRIP, children: /* @__PURE__ */ jsxs27(
7050
7376
  "svg",
7051
7377
  {
7052
7378
  className: "size-2.5",
@@ -7061,12 +7387,12 @@ function ResizableHandle({
7061
7387
  strokeLinejoin: "round",
7062
7388
  "aria-hidden": "true",
7063
7389
  children: [
7064
- /* @__PURE__ */ jsx56("circle", { cx: "9", cy: "12", r: "1" }),
7065
- /* @__PURE__ */ jsx56("circle", { cx: "9", cy: "5", r: "1" }),
7066
- /* @__PURE__ */ jsx56("circle", { cx: "9", cy: "19", r: "1" }),
7067
- /* @__PURE__ */ jsx56("circle", { cx: "15", cy: "12", r: "1" }),
7068
- /* @__PURE__ */ jsx56("circle", { cx: "15", cy: "5", r: "1" }),
7069
- /* @__PURE__ */ jsx56("circle", { cx: "15", cy: "19", r: "1" })
7390
+ /* @__PURE__ */ jsx58("circle", { cx: "9", cy: "12", r: "1" }),
7391
+ /* @__PURE__ */ jsx58("circle", { cx: "9", cy: "5", r: "1" }),
7392
+ /* @__PURE__ */ jsx58("circle", { cx: "9", cy: "19", r: "1" }),
7393
+ /* @__PURE__ */ jsx58("circle", { cx: "15", cy: "12", r: "1" }),
7394
+ /* @__PURE__ */ jsx58("circle", { cx: "15", cy: "5", r: "1" }),
7395
+ /* @__PURE__ */ jsx58("circle", { cx: "15", cy: "19", r: "1" })
7070
7396
  ]
7071
7397
  }
7072
7398
  ) }),
@@ -7218,6 +7544,9 @@ export {
7218
7544
  HoverCard,
7219
7545
  HoverCardContent,
7220
7546
  HoverCardTrigger,
7547
+ InfoTip,
7548
+ InfoTipContent,
7549
+ InfoTipTrigger,
7221
7550
  Input,
7222
7551
  InputGroup,
7223
7552
  InputGroupAddon,
@@ -7287,6 +7616,7 @@ export {
7287
7616
  ResizablePanelGroup,
7288
7617
  ScrollArea,
7289
7618
  ScrollBar,
7619
+ SectionDescriptor,
7290
7620
  Select,
7291
7621
  SelectContent,
7292
7622
  SelectGroup,
@@ -7359,6 +7689,7 @@ export {
7359
7689
  useDismissableLayer,
7360
7690
  useFloating,
7361
7691
  useFocusScope,
7692
+ useHoverIntent,
7362
7693
  usePresence,
7363
7694
  useRovingFocus,
7364
7695
  useSidebar