@evinvest/uikit 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -334,7 +334,9 @@ import "react";
334
334
  var ALERT_BASE = "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current";
335
335
  var alertVariants = {
336
336
  "neutral": "bg-card text-ink",
337
- "destructive": "text-accent-error bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-accent-error/90"
337
+ "destructive": "text-accent-error bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-accent-error/90",
338
+ "success": "text-positive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-positive/90",
339
+ "info": "text-accent-info bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-accent-info/90"
338
340
  };
339
341
  var ALERT_TITLE = "col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight";
340
342
  var ALERT_DESCRIPTION = "text-ink-soft col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed";
@@ -589,6 +591,29 @@ function BreadcrumbEllipsis({
589
591
  // src/components/button.tsx
590
592
  import "react";
591
593
 
594
+ // src/generated/accent.ts
595
+ var accentTextClasses = {
596
+ "trace": "text-accent-trace",
597
+ "debug": "text-accent-debug",
598
+ "info": "text-accent-info",
599
+ "warn": "text-accent-warn",
600
+ "error": "text-accent-error"
601
+ };
602
+ var accentFillClasses = {
603
+ "trace": "bg-accent-trace text-on-accent-trace hover:bg-accent-trace/90",
604
+ "debug": "bg-accent-debug text-background hover:bg-accent-debug/90",
605
+ "info": "bg-accent-info text-on-accent-info hover:bg-accent-info/90",
606
+ "warn": "bg-accent-warn text-background hover:bg-accent-warn/90",
607
+ "error": "bg-accent-error text-on-accent-error hover:bg-accent-error/90"
608
+ };
609
+ var accentOutlineClasses = {
610
+ "trace": "border border-accent-trace/40 text-accent-trace hover:bg-accent-trace/10",
611
+ "debug": "border border-accent-debug/40 text-accent-debug hover:bg-accent-debug/10",
612
+ "info": "border border-accent-info/40 text-accent-info hover:bg-accent-info/10",
613
+ "warn": "border border-accent-warn/40 text-accent-warn hover:bg-accent-warn/10",
614
+ "error": "border border-accent-error/40 text-accent-error hover:bg-accent-error/10"
615
+ };
616
+
592
617
  // src/generated/button.ts
593
618
  var BUTTON_BASE = "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-[var(--control-radius)] text-sm font-medium transition-all cursor-pointer disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-accent-error/20 aria-invalid:border-accent-error";
594
619
  var buttonVariantClasses = {
@@ -600,16 +625,18 @@ var buttonVariantClasses = {
600
625
  "link": "text-primary underline-offset-4 hover:underline"
601
626
  };
602
627
  var buttonSizeClasses = {
603
- "md": "h-9 px-4 py-[var(--control-py)] has-[>svg]:px-3",
604
628
  "xs": "h-7 gap-1 px-2 text-xs has-[>svg]:px-1.5",
605
629
  "sm": "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
630
+ "md": "h-9 px-4 py-[var(--control-py)] has-[>svg]:px-3",
606
631
  "lg": "h-10 px-6 has-[>svg]:px-4",
607
- "xl": "px-[var(--control-px)] py-[var(--control-py)] text-[length:var(--control-text)]",
608
- "icon": "h-9 aspect-square px-0",
609
- "icon-xs": "h-7 aspect-square px-0",
610
- "icon-sm": "h-8 aspect-square px-0",
611
- "icon-lg": "h-10 aspect-square px-0",
612
- "icon-xl": "aspect-square p-[var(--control-py)]"
632
+ "xl": "px-[var(--control-px)] py-[var(--control-py)] text-[length:var(--control-text)]"
633
+ };
634
+ var buttonIconSizeClasses = {
635
+ "xs": "h-7 aspect-square px-0",
636
+ "sm": "h-8 aspect-square px-0",
637
+ "md": "h-9 aspect-square px-0",
638
+ "lg": "h-10 aspect-square px-0",
639
+ "xl": "aspect-square p-[var(--control-py)]"
613
640
  };
614
641
 
615
642
  // src/components/button.tsx
@@ -617,14 +644,27 @@ import { jsx as jsx5 } from "react/jsx-runtime";
617
644
  function buttonVariants({
618
645
  variant = "primary",
619
646
  size = "md",
647
+ icon = false,
648
+ accent,
620
649
  className
621
650
  } = {}) {
622
- return cn(BUTTON_BASE, buttonVariantClasses[variant], buttonSizeClasses[size], className);
651
+ return cn(
652
+ BUTTON_BASE,
653
+ buttonVariantClasses[variant],
654
+ icon ? buttonIconSizeClasses[size] : buttonSizeClasses[size],
655
+ accent === void 0 ? void 0 : accentClass(accent, variant),
656
+ className
657
+ );
658
+ }
659
+ function accentClass(accent, variant) {
660
+ return variant === "outline" ? accentOutlineClasses[accent] : accentFillClasses[accent];
623
661
  }
624
662
  function Button({
625
663
  className,
626
664
  variant = "primary",
627
665
  size = "md",
666
+ icon = false,
667
+ accent,
628
668
  asChild = false,
629
669
  href,
630
670
  ...props
@@ -635,7 +675,7 @@ function Button({
635
675
  {
636
676
  "data-slot": "button",
637
677
  href,
638
- className: cn(buttonVariants({ variant, size }), className),
678
+ className: cn(buttonVariants({ variant, size, icon, accent }), className),
639
679
  ...props
640
680
  }
641
681
  );
@@ -1264,24 +1304,27 @@ function Footer({
1264
1304
  }
1265
1305
 
1266
1306
  // src/components/input.tsx
1267
- import "react";
1307
+ import * as React24 from "react";
1268
1308
 
1269
1309
  // src/generated/input.ts
1270
1310
  var INPUT_BASE = "file:text-ink placeholder:text-ink-soft selection:bg-primary selection:text-on-primary border-input h-9 w-full min-w-0 rounded-[var(--control-radius)] 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-accent-error/20 aria-invalid:border-accent-error";
1271
1311
 
1272
1312
  // src/components/input.tsx
1273
1313
  import { jsx as jsx14 } from "react/jsx-runtime";
1274
- function Input({ className, type, ...props }) {
1275
- return /* @__PURE__ */ jsx14(
1276
- "input",
1277
- {
1278
- type,
1279
- "data-slot": "input",
1280
- className: cn(INPUT_BASE, className),
1281
- ...props
1282
- }
1283
- );
1284
- }
1314
+ var Input = React24.forwardRef(
1315
+ function Input2({ className, type, ...props }, ref) {
1316
+ return /* @__PURE__ */ jsx14(
1317
+ "input",
1318
+ {
1319
+ ref,
1320
+ type,
1321
+ "data-slot": "input",
1322
+ className: cn(INPUT_BASE, className),
1323
+ ...props
1324
+ }
1325
+ );
1326
+ }
1327
+ );
1285
1328
 
1286
1329
  // src/components/textarea.tsx
1287
1330
  import "react";
@@ -1295,6 +1338,44 @@ function Textarea({ className, ...props }) {
1295
1338
  return /* @__PURE__ */ jsx15("textarea", { "data-slot": "textarea", className: cn(TEXTAREA_BASE, className), ...props });
1296
1339
  }
1297
1340
 
1341
+ // src/components/logo.tsx
1342
+ import "react";
1343
+ import { jsx as jsx16 } from "react/jsx-runtime";
1344
+ var maskStyle = {
1345
+ backgroundColor: "currentColor",
1346
+ maskImage: "var(--brand-mark)",
1347
+ WebkitMaskImage: "var(--brand-mark)",
1348
+ maskRepeat: "no-repeat",
1349
+ WebkitMaskRepeat: "no-repeat",
1350
+ maskPosition: "center",
1351
+ WebkitMaskPosition: "center",
1352
+ maskSize: "contain",
1353
+ WebkitMaskSize: "contain",
1354
+ // the ratio's fallback is what makes a missing mark *visible*: a masked span
1355
+ // has no intrinsic size, so `h-N w-auto` without it is zero-width
1356
+ aspectRatio: "var(--brand-aspect, 1)"
1357
+ };
1358
+ function Logo({ className, withBackground = false }) {
1359
+ const mark = /* @__PURE__ */ jsx16(
1360
+ "span",
1361
+ {
1362
+ "data-slot": "logo",
1363
+ "aria-hidden": true,
1364
+ style: maskStyle,
1365
+ className: cn("inline-block", withBackground ? "w-3/5 h-3/5" : className)
1366
+ }
1367
+ );
1368
+ if (!withBackground) return mark;
1369
+ return /* @__PURE__ */ jsx16(
1370
+ "span",
1371
+ {
1372
+ "data-slot": "logo-background",
1373
+ className: cn("inline-flex items-center justify-center bg-brand", className),
1374
+ children: mark
1375
+ }
1376
+ );
1377
+ }
1378
+
1298
1379
  // src/components/input-group.tsx
1299
1380
  import "react";
1300
1381
 
@@ -1319,12 +1400,12 @@ var INPUT_GROUP_INPUT_CONTROL = "flex-1 rounded-none border-0 bg-transparent sha
1319
1400
  var INPUT_GROUP_TEXTAREA_CONTROL = "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0";
1320
1401
 
1321
1402
  // src/components/input-group.tsx
1322
- import { jsx as jsx16 } from "react/jsx-runtime";
1403
+ import { jsx as jsx17 } from "react/jsx-runtime";
1323
1404
  function InputGroup({
1324
1405
  className,
1325
1406
  ...props
1326
1407
  }) {
1327
- return /* @__PURE__ */ jsx16(
1408
+ return /* @__PURE__ */ jsx17(
1328
1409
  "div",
1329
1410
  {
1330
1411
  "data-slot": "input-group",
@@ -1339,7 +1420,7 @@ function InputGroupAddon({
1339
1420
  align = "inline-start",
1340
1421
  ...props
1341
1422
  }) {
1342
- return /* @__PURE__ */ jsx16(
1423
+ return /* @__PURE__ */ jsx17(
1343
1424
  "div",
1344
1425
  {
1345
1426
  role: "group",
@@ -1365,7 +1446,7 @@ function InputGroupButton({
1365
1446
  size = "xs",
1366
1447
  ...props
1367
1448
  }) {
1368
- return /* @__PURE__ */ jsx16(
1449
+ return /* @__PURE__ */ jsx17(
1369
1450
  Button,
1370
1451
  {
1371
1452
  type,
@@ -1384,7 +1465,7 @@ function InputGroupText({
1384
1465
  className,
1385
1466
  ...props
1386
1467
  }) {
1387
- return /* @__PURE__ */ jsx16(
1468
+ return /* @__PURE__ */ jsx17(
1388
1469
  "span",
1389
1470
  {
1390
1471
  className: cn(INPUT_GROUP_TEXT, className),
@@ -1396,7 +1477,7 @@ function InputGroupInput({
1396
1477
  className,
1397
1478
  ...props
1398
1479
  }) {
1399
- return /* @__PURE__ */ jsx16(
1480
+ return /* @__PURE__ */ jsx17(
1400
1481
  Input,
1401
1482
  {
1402
1483
  "data-slot": "input-group-control",
@@ -1409,7 +1490,7 @@ function InputGroupTextarea({
1409
1490
  className,
1410
1491
  ...props
1411
1492
  }) {
1412
- return /* @__PURE__ */ jsx16(
1493
+ return /* @__PURE__ */ jsx17(
1413
1494
  Textarea,
1414
1495
  {
1415
1496
  "data-slot": "input-group-control",
@@ -1433,13 +1514,13 @@ var separatorOrientations = {
1433
1514
  };
1434
1515
 
1435
1516
  // src/components/separator.tsx
1436
- import { jsx as jsx17 } from "react/jsx-runtime";
1517
+ import { jsx as jsx18 } from "react/jsx-runtime";
1437
1518
  function Separator({
1438
1519
  className,
1439
1520
  orientation = "horizontal",
1440
1521
  ...props
1441
1522
  }) {
1442
- return /* @__PURE__ */ jsx17(
1523
+ return /* @__PURE__ */ jsx18(
1443
1524
  "div",
1444
1525
  {
1445
1526
  role: "separator",
@@ -1482,9 +1563,9 @@ var ITEM_HEADER = "flex basis-full items-center justify-between gap-2";
1482
1563
  var ITEM_FOOTER = "flex basis-full items-center justify-between gap-2";
1483
1564
 
1484
1565
  // src/components/item.tsx
1485
- import { jsx as jsx18 } from "react/jsx-runtime";
1566
+ import { jsx as jsx19 } from "react/jsx-runtime";
1486
1567
  function ItemGroup({ className, ...props }) {
1487
- return /* @__PURE__ */ jsx18(
1568
+ return /* @__PURE__ */ jsx19(
1488
1569
  "div",
1489
1570
  {
1490
1571
  role: "list",
@@ -1498,7 +1579,7 @@ function ItemSeparator({
1498
1579
  className,
1499
1580
  ...props
1500
1581
  }) {
1501
- return /* @__PURE__ */ jsx18(
1582
+ return /* @__PURE__ */ jsx19(
1502
1583
  Separator,
1503
1584
  {
1504
1585
  "data-slot": "item-separator",
@@ -1516,7 +1597,7 @@ function Item({
1516
1597
  ...props
1517
1598
  }) {
1518
1599
  const Comp = asChild ? Slot : "div";
1519
- return /* @__PURE__ */ jsx18(
1600
+ return /* @__PURE__ */ jsx19(
1520
1601
  Comp,
1521
1602
  {
1522
1603
  "data-slot": "item",
@@ -1532,7 +1613,7 @@ function ItemMedia({
1532
1613
  variant = "bare",
1533
1614
  ...props
1534
1615
  }) {
1535
- return /* @__PURE__ */ jsx18(
1616
+ return /* @__PURE__ */ jsx19(
1536
1617
  "div",
1537
1618
  {
1538
1619
  "data-slot": "item-media",
@@ -1546,7 +1627,7 @@ function ItemContent({
1546
1627
  className,
1547
1628
  ...props
1548
1629
  }) {
1549
- return /* @__PURE__ */ jsx18(
1630
+ return /* @__PURE__ */ jsx19(
1550
1631
  "div",
1551
1632
  {
1552
1633
  "data-slot": "item-content",
@@ -1556,7 +1637,7 @@ function ItemContent({
1556
1637
  );
1557
1638
  }
1558
1639
  function ItemTitle({ className, ...props }) {
1559
- return /* @__PURE__ */ jsx18(
1640
+ return /* @__PURE__ */ jsx19(
1560
1641
  "div",
1561
1642
  {
1562
1643
  "data-slot": "item-title",
@@ -1569,7 +1650,7 @@ function ItemDescription({
1569
1650
  className,
1570
1651
  ...props
1571
1652
  }) {
1572
- return /* @__PURE__ */ jsx18(
1653
+ return /* @__PURE__ */ jsx19(
1573
1654
  "p",
1574
1655
  {
1575
1656
  "data-slot": "item-description",
@@ -1582,7 +1663,7 @@ function ItemActions({
1582
1663
  className,
1583
1664
  ...props
1584
1665
  }) {
1585
- return /* @__PURE__ */ jsx18(
1666
+ return /* @__PURE__ */ jsx19(
1586
1667
  "div",
1587
1668
  {
1588
1669
  "data-slot": "item-actions",
@@ -1595,7 +1676,7 @@ function ItemHeader({
1595
1676
  className,
1596
1677
  ...props
1597
1678
  }) {
1598
- return /* @__PURE__ */ jsx18(
1679
+ return /* @__PURE__ */ jsx19(
1599
1680
  "div",
1600
1681
  {
1601
1682
  "data-slot": "item-header",
@@ -1608,7 +1689,7 @@ function ItemFooter({
1608
1689
  className,
1609
1690
  ...props
1610
1691
  }) {
1611
- return /* @__PURE__ */ jsx18(
1692
+ return /* @__PURE__ */ jsx19(
1612
1693
  "div",
1613
1694
  {
1614
1695
  "data-slot": "item-footer",
@@ -1626,9 +1707,9 @@ var KBD_BASE = "bg-muted text-ink-soft pointer-events-none inline-flex h-5 w-fit
1626
1707
  var KBD_GROUP_BASE = "inline-flex items-center gap-1";
1627
1708
 
1628
1709
  // src/components/kbd.tsx
1629
- import { jsx as jsx19 } from "react/jsx-runtime";
1710
+ import { jsx as jsx20 } from "react/jsx-runtime";
1630
1711
  function Kbd({ className, ...props }) {
1631
- return /* @__PURE__ */ jsx19(
1712
+ return /* @__PURE__ */ jsx20(
1632
1713
  "kbd",
1633
1714
  {
1634
1715
  "data-slot": "kbd",
@@ -1638,7 +1719,7 @@ function Kbd({ className, ...props }) {
1638
1719
  );
1639
1720
  }
1640
1721
  function KbdGroup({ className, ...props }) {
1641
- return /* @__PURE__ */ jsx19(
1722
+ return /* @__PURE__ */ jsx20(
1642
1723
  "kbd",
1643
1724
  {
1644
1725
  "data-slot": "kbd-group",
@@ -1650,9 +1731,9 @@ function KbdGroup({ className, ...props }) {
1650
1731
 
1651
1732
  // src/components/pagination.tsx
1652
1733
  import "react";
1653
- import { jsx as jsx20, jsxs as jsxs5 } from "react/jsx-runtime";
1734
+ import { jsx as jsx21, jsxs as jsxs5 } from "react/jsx-runtime";
1654
1735
  function Pagination({ className, ...props }) {
1655
- return /* @__PURE__ */ jsx20(
1736
+ return /* @__PURE__ */ jsx21(
1656
1737
  "nav",
1657
1738
  {
1658
1739
  role: "navigation",
@@ -1667,7 +1748,7 @@ function PaginationContent({
1667
1748
  className,
1668
1749
  ...props
1669
1750
  }) {
1670
- return /* @__PURE__ */ jsx20(
1751
+ return /* @__PURE__ */ jsx21(
1671
1752
  "ul",
1672
1753
  {
1673
1754
  "data-slot": "pagination-content",
@@ -1677,15 +1758,16 @@ function PaginationContent({
1677
1758
  );
1678
1759
  }
1679
1760
  function PaginationItem(props) {
1680
- return /* @__PURE__ */ jsx20("li", { "data-slot": "pagination-item", ...props });
1761
+ return /* @__PURE__ */ jsx21("li", { "data-slot": "pagination-item", ...props });
1681
1762
  }
1682
1763
  function PaginationLink({
1683
1764
  className,
1684
1765
  isActive,
1685
- size = "icon",
1766
+ size = "md",
1767
+ icon = true,
1686
1768
  ...props
1687
1769
  }) {
1688
- return /* @__PURE__ */ jsx20(
1770
+ return /* @__PURE__ */ jsx21(
1689
1771
  "a",
1690
1772
  {
1691
1773
  "aria-current": isActive ? "page" : void 0,
@@ -1694,7 +1776,8 @@ function PaginationLink({
1694
1776
  className: cn(
1695
1777
  buttonVariants({
1696
1778
  variant: isActive ? "outline" : "ghost",
1697
- size
1779
+ size,
1780
+ icon
1698
1781
  }),
1699
1782
  className
1700
1783
  ),
@@ -1702,8 +1785,8 @@ function PaginationLink({
1702
1785
  }
1703
1786
  );
1704
1787
  }
1705
- 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" }) });
1706
- 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" }) });
1788
+ 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" }) });
1789
+ 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" }) });
1707
1790
  var MoreHorizontal = () => /* @__PURE__ */ jsxs5(
1708
1791
  "svg",
1709
1792
  {
@@ -1713,9 +1796,9 @@ var MoreHorizontal = () => /* @__PURE__ */ jsxs5(
1713
1796
  stroke: "currentColor",
1714
1797
  strokeWidth: 2,
1715
1798
  children: [
1716
- /* @__PURE__ */ jsx20("circle", { cx: "12", cy: "12", r: "1" }),
1717
- /* @__PURE__ */ jsx20("circle", { cx: "19", cy: "12", r: "1" }),
1718
- /* @__PURE__ */ jsx20("circle", { cx: "5", cy: "12", r: "1" })
1799
+ /* @__PURE__ */ jsx21("circle", { cx: "12", cy: "12", r: "1" }),
1800
+ /* @__PURE__ */ jsx21("circle", { cx: "19", cy: "12", r: "1" }),
1801
+ /* @__PURE__ */ jsx21("circle", { cx: "5", cy: "12", r: "1" })
1719
1802
  ]
1720
1803
  }
1721
1804
  );
@@ -1731,8 +1814,8 @@ function PaginationPrevious({
1731
1814
  className: cn("gap-1 px-2.5 sm:pl-2.5", className),
1732
1815
  ...props,
1733
1816
  children: [
1734
- /* @__PURE__ */ jsx20(ChevronLeft, {}),
1735
- /* @__PURE__ */ jsx20("span", { className: "hidden sm:block", children: "Previous" })
1817
+ /* @__PURE__ */ jsx21(ChevronLeft, {}),
1818
+ /* @__PURE__ */ jsx21("span", { className: "hidden sm:block", children: "Previous" })
1736
1819
  ]
1737
1820
  }
1738
1821
  );
@@ -1749,8 +1832,8 @@ function PaginationNext({
1749
1832
  className: cn("gap-1 px-2.5 sm:pr-2.5", className),
1750
1833
  ...props,
1751
1834
  children: [
1752
- /* @__PURE__ */ jsx20("span", { className: "hidden sm:block", children: "Next" }),
1753
- /* @__PURE__ */ jsx20(ChevronRight, {})
1835
+ /* @__PURE__ */ jsx21("span", { className: "hidden sm:block", children: "Next" }),
1836
+ /* @__PURE__ */ jsx21(ChevronRight, {})
1754
1837
  ]
1755
1838
  }
1756
1839
  );
@@ -1767,8 +1850,8 @@ function PaginationEllipsis({
1767
1850
  className: cn("flex size-9 items-center justify-center", className),
1768
1851
  ...props,
1769
1852
  children: [
1770
- /* @__PURE__ */ jsx20(MoreHorizontal, {}),
1771
- /* @__PURE__ */ jsx20("span", { className: "sr-only", children: "More pages" })
1853
+ /* @__PURE__ */ jsx21(MoreHorizontal, {}),
1854
+ /* @__PURE__ */ jsx21("span", { className: "sr-only", children: "More pages" })
1772
1855
  ]
1773
1856
  }
1774
1857
  );
@@ -1782,9 +1865,9 @@ var PROGRESS_TRACK = "bg-primary/20 relative h-2 w-full overflow-hidden rounded-
1782
1865
  var PROGRESS_INDICATOR = "bg-primary h-full w-full flex-1 transition-all";
1783
1866
 
1784
1867
  // src/components/progress.tsx
1785
- import { jsx as jsx21 } from "react/jsx-runtime";
1868
+ import { jsx as jsx22 } from "react/jsx-runtime";
1786
1869
  function Progress({ className, value = 0, ...props }) {
1787
- return /* @__PURE__ */ jsx21(
1870
+ return /* @__PURE__ */ jsx22(
1788
1871
  "div",
1789
1872
  {
1790
1873
  "data-slot": "progress",
@@ -1794,7 +1877,7 @@ function Progress({ className, value = 0, ...props }) {
1794
1877
  "aria-valuemax": 100,
1795
1878
  className: cn(PROGRESS_TRACK, className),
1796
1879
  ...props,
1797
- children: /* @__PURE__ */ jsx21(
1880
+ children: /* @__PURE__ */ jsx22(
1798
1881
  "div",
1799
1882
  {
1800
1883
  "data-slot": "progress-indicator",
@@ -1813,9 +1896,9 @@ import "react";
1813
1896
  var SKELETON_BASE = "bg-hover animate-pulse rounded-md";
1814
1897
 
1815
1898
  // src/components/skeleton.tsx
1816
- import { jsx as jsx22 } from "react/jsx-runtime";
1899
+ import { jsx as jsx23 } from "react/jsx-runtime";
1817
1900
  function Skeleton({ className, ...props }) {
1818
- return /* @__PURE__ */ jsx22(
1901
+ return /* @__PURE__ */ jsx23(
1819
1902
  "div",
1820
1903
  {
1821
1904
  "data-slot": "skeleton",
@@ -1827,9 +1910,9 @@ function Skeleton({ className, ...props }) {
1827
1910
 
1828
1911
  // src/components/spinner.tsx
1829
1912
  import "react";
1830
- import { jsx as jsx23 } from "react/jsx-runtime";
1913
+ import { jsx as jsx24 } from "react/jsx-runtime";
1831
1914
  function Spinner({ className, ...props }) {
1832
- return /* @__PURE__ */ jsx23(
1915
+ return /* @__PURE__ */ jsx24(
1833
1916
  "svg",
1834
1917
  {
1835
1918
  role: "status",
@@ -1840,50 +1923,20 @@ function Spinner({ className, ...props }) {
1840
1923
  stroke: "currentColor",
1841
1924
  strokeWidth: 2,
1842
1925
  ...props,
1843
- children: /* @__PURE__ */ jsx23("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
1926
+ children: /* @__PURE__ */ jsx24("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
1844
1927
  }
1845
1928
  );
1846
1929
  }
1847
1930
 
1848
1931
  // src/components/status-screen.tsx
1849
1932
  import "react";
1850
- import { jsx as jsx24, jsxs as jsxs6 } from "react/jsx-runtime";
1851
- var ACCENT_TEXT = {
1852
- trace: "text-accent-trace",
1853
- debug: "text-accent-debug",
1854
- info: "text-accent-info",
1855
- warn: "text-accent-warn",
1856
- error: "text-accent-error"
1857
- };
1858
- var BTN_FILLED = {
1859
- trace: "bg-accent-trace text-on-accent-trace hover:bg-accent-trace/90",
1860
- debug: "bg-accent-debug text-background hover:bg-accent-debug/90",
1861
- info: "bg-accent-info text-on-accent-info hover:bg-accent-info/90",
1862
- warn: "bg-accent-warn text-background hover:bg-accent-warn/90",
1863
- error: "bg-accent-error text-on-accent-error hover:bg-accent-error/90"
1864
- };
1865
- var BTN_OUTLINE = {
1866
- trace: "border border-accent-trace/40 text-accent-trace hover:bg-accent-trace/10",
1867
- debug: "border border-accent-debug/40 text-accent-debug hover:bg-accent-debug/10",
1868
- info: "border border-accent-info/40 text-accent-info hover:bg-accent-info/10",
1869
- warn: "border border-accent-warn/40 text-accent-warn hover:bg-accent-warn/10",
1870
- error: "border border-accent-error/40 text-accent-error hover:bg-accent-error/10"
1871
- };
1933
+ import { jsx as jsx25, jsxs as jsxs6 } from "react/jsx-runtime";
1872
1934
  function statusCtaClass(accent, variant) {
1873
1935
  return cn(
1874
- buttonVariants({ variant, size: "lg" }),
1875
- "font-mono text-xs uppercase tracking-widest",
1876
- variant === "outline" ? BTN_OUTLINE[accent] : BTN_FILLED[accent]
1936
+ buttonVariants({ variant, size: "lg", accent }),
1937
+ "font-mono text-xs uppercase tracking-widest"
1877
1938
  );
1878
1939
  }
1879
- function LogoMark({ className }) {
1880
- return /* @__PURE__ */ jsx24("svg", { viewBox: "0 0 140 48", className, "aria-hidden": true, children: /* @__PURE__ */ jsxs6("g", { fill: "currentColor", children: [
1881
- /* @__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" }),
1882
- /* @__PURE__ */ jsx24("path", { d: "M77.2277 40.5804L85.9478 41.4099L85.8299 0.304321L73.1033 7.17499V26.3654L77.2277 28.2608V40.5804Z" }),
1883
- /* @__PURE__ */ jsx24("path", { d: "M87.126 0.304321L99.9705 7.29343V42.5943L94.3141 41.8835V9.54417L87.126 5.75347V0.304321Z" }),
1884
- /* @__PURE__ */ jsx24("path", { d: "M103.034 42.9496L139.682 46.0296L110.104 39.7513V26.8393L103.034 23.0486V42.9496Z" })
1885
- ] }) });
1886
- }
1887
1940
  function ArrowLeftIcon({ className }) {
1888
1941
  return /* @__PURE__ */ jsxs6(
1889
1942
  "svg",
@@ -1897,8 +1950,8 @@ function ArrowLeftIcon({ className }) {
1897
1950
  strokeLinejoin: "round",
1898
1951
  "aria-hidden": true,
1899
1952
  children: [
1900
- /* @__PURE__ */ jsx24("path", { d: "m12 19-7-7 7-7" }),
1901
- /* @__PURE__ */ jsx24("path", { d: "M19 12H5" })
1953
+ /* @__PURE__ */ jsx25("path", { d: "m12 19-7-7 7-7" }),
1954
+ /* @__PURE__ */ jsx25("path", { d: "M19 12H5" })
1902
1955
  ]
1903
1956
  }
1904
1957
  );
@@ -1916,9 +1969,9 @@ function StatusScreen({
1916
1969
  linkComponent
1917
1970
  }) {
1918
1971
  const L = linkComponent ?? "a";
1919
- const accentText = ACCENT_TEXT[accent];
1972
+ const accentText = accentTextClasses[accent];
1920
1973
  return /* @__PURE__ */ jsxs6("section", { className: "relative flex min-h-screen flex-col items-center justify-center overflow-hidden bg-background px-6 py-32 text-center", children: [
1921
- /* @__PURE__ */ jsx24(
1974
+ /* @__PURE__ */ jsx25(
1922
1975
  "div",
1923
1976
  {
1924
1977
  "aria-hidden": true,
@@ -1929,19 +1982,19 @@ function StatusScreen({
1929
1982
  }
1930
1983
  ),
1931
1984
  /* @__PURE__ */ jsxs6("div", { className: "relative z-10 flex w-full max-w-2xl flex-col items-center", children: [
1932
- /* @__PURE__ */ jsx24(LogoMark, { className: cn("mb-7 h-10 w-auto", accentText) }),
1933
- /* @__PURE__ */ jsx24("p", { className: cn("mb-6 font-mono text-[11px] uppercase tracking-[0.34em]", accentText), children: eyebrow }),
1934
- /* @__PURE__ */ jsx24("p", { className: cn("font-serif text-[110px] font-medium leading-[0.9] sm:text-[180px]", accentText), children: code }),
1985
+ /* @__PURE__ */ jsx25(Logo, { className: cn("mb-7 h-10 w-auto", accentText) }),
1986
+ /* @__PURE__ */ jsx25("p", { className: cn("mb-6 font-mono text-[11px] uppercase tracking-[0.34em]", accentText), children: eyebrow }),
1987
+ /* @__PURE__ */ jsx25("p", { className: cn("font-serif text-[110px] font-medium leading-[0.9] sm:text-[180px]", accentText), children: code }),
1935
1988
  /* @__PURE__ */ jsxs6("h1", { className: "mt-4 font-serif text-3xl font-light leading-tight text-ink sm:text-5xl", children: [
1936
1989
  headlineLead,
1937
- /* @__PURE__ */ jsx24("span", { className: cn("font-serif italic", accentText), children: headlineAccent }),
1990
+ /* @__PURE__ */ jsx25("span", { className: cn("font-serif italic", accentText), children: headlineAccent }),
1938
1991
  headlineTail
1939
1992
  ] }),
1940
- /* @__PURE__ */ jsx24("p", { className: "mx-auto mt-5 max-w-md text-sm leading-relaxed text-ink/60 sm:text-base", children: subtext }),
1993
+ /* @__PURE__ */ jsx25("p", { className: "mx-auto mt-5 max-w-md text-sm leading-relaxed text-ink/60 sm:text-base", children: subtext }),
1941
1994
  /* @__PURE__ */ jsxs6("div", { className: "mt-9 flex flex-col items-center gap-3 sm:flex-row", children: [
1942
1995
  children,
1943
1996
  links?.map((link) => /* @__PURE__ */ jsxs6(L, { href: link.href, className: statusCtaClass(accent, link.variant ?? "primary"), children: [
1944
- link.leadingArrow ? /* @__PURE__ */ jsx24(ArrowLeftIcon, { className: "mr-2 h-4 w-4" }) : null,
1997
+ link.leadingArrow ? /* @__PURE__ */ jsx25(ArrowLeftIcon, { className: "mr-2 h-4 w-4" }) : null,
1945
1998
  link.label
1946
1999
  ] }, link.label))
1947
2000
  ] })
@@ -1949,7 +2002,7 @@ function StatusScreen({
1949
2002
  ] });
1950
2003
  }
1951
2004
  function NotFound({ linkComponent = "a", homeHref = "/", contactHref = "/contact" }) {
1952
- return /* @__PURE__ */ jsx24(
2005
+ return /* @__PURE__ */ jsx25(
1953
2006
  StatusScreen,
1954
2007
  {
1955
2008
  accent: "debug",
@@ -1967,7 +2020,7 @@ function NotFound({ linkComponent = "a", homeHref = "/", contactHref = "/contact
1967
2020
  );
1968
2021
  }
1969
2022
  function Forbidden({ linkComponent = "a", homeHref = "/", contactHref = "/contact" }) {
1970
- return /* @__PURE__ */ jsx24(
2023
+ return /* @__PURE__ */ jsx25(
1971
2024
  StatusScreen,
1972
2025
  {
1973
2026
  accent: "warn",
@@ -1985,7 +2038,7 @@ function Forbidden({ linkComponent = "a", homeHref = "/", contactHref = "/contac
1985
2038
  );
1986
2039
  }
1987
2040
  function ServerError({ linkComponent = "a", homeHref = "/", reset }) {
1988
- return /* @__PURE__ */ jsx24(
2041
+ return /* @__PURE__ */ jsx25(
1989
2042
  StatusScreen,
1990
2043
  {
1991
2044
  accent: "error",
@@ -1996,7 +2049,7 @@ function ServerError({ linkComponent = "a", homeHref = "/", reset }) {
1996
2049
  subtext: "Something broke on our end \u2014 not yours. We've been alerted and are restoring service. Please try again in a moment.",
1997
2050
  linkComponent,
1998
2051
  links: [{ label: "Back to home", href: homeHref, variant: "outline", leadingArrow: true }],
1999
- children: /* @__PURE__ */ jsx24(
2052
+ children: /* @__PURE__ */ jsx25(
2000
2053
  "button",
2001
2054
  {
2002
2055
  type: "button",
@@ -2024,14 +2077,14 @@ var TABLE_CELL = "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr
2024
2077
  var TABLE_CAPTION = "text-ink-soft mt-4 text-sm";
2025
2078
 
2026
2079
  // src/components/table.tsx
2027
- import { jsx as jsx25 } from "react/jsx-runtime";
2080
+ import { jsx as jsx26 } from "react/jsx-runtime";
2028
2081
  function Table({ className, ...props }) {
2029
- return /* @__PURE__ */ jsx25(
2082
+ return /* @__PURE__ */ jsx26(
2030
2083
  "div",
2031
2084
  {
2032
2085
  "data-slot": "table-container",
2033
2086
  className: TABLE_CONTAINER,
2034
- children: /* @__PURE__ */ jsx25(
2087
+ children: /* @__PURE__ */ jsx26(
2035
2088
  "table",
2036
2089
  {
2037
2090
  "data-slot": "table",
@@ -2046,7 +2099,7 @@ function TableHeader({
2046
2099
  className,
2047
2100
  ...props
2048
2101
  }) {
2049
- return /* @__PURE__ */ jsx25(
2102
+ return /* @__PURE__ */ jsx26(
2050
2103
  "thead",
2051
2104
  {
2052
2105
  "data-slot": "table-header",
@@ -2059,7 +2112,7 @@ function TableBody({
2059
2112
  className,
2060
2113
  ...props
2061
2114
  }) {
2062
- return /* @__PURE__ */ jsx25(
2115
+ return /* @__PURE__ */ jsx26(
2063
2116
  "tbody",
2064
2117
  {
2065
2118
  "data-slot": "table-body",
@@ -2072,7 +2125,7 @@ function TableFooter({
2072
2125
  className,
2073
2126
  ...props
2074
2127
  }) {
2075
- return /* @__PURE__ */ jsx25(
2128
+ return /* @__PURE__ */ jsx26(
2076
2129
  "tfoot",
2077
2130
  {
2078
2131
  "data-slot": "table-footer",
@@ -2082,7 +2135,7 @@ function TableFooter({
2082
2135
  );
2083
2136
  }
2084
2137
  function TableRow({ className, ...props }) {
2085
- return /* @__PURE__ */ jsx25(
2138
+ return /* @__PURE__ */ jsx26(
2086
2139
  "tr",
2087
2140
  {
2088
2141
  "data-slot": "table-row",
@@ -2092,7 +2145,7 @@ function TableRow({ className, ...props }) {
2092
2145
  );
2093
2146
  }
2094
2147
  function TableHead({ className, ...props }) {
2095
- return /* @__PURE__ */ jsx25(
2148
+ return /* @__PURE__ */ jsx26(
2096
2149
  "th",
2097
2150
  {
2098
2151
  "data-slot": "table-head",
@@ -2102,7 +2155,7 @@ function TableHead({ className, ...props }) {
2102
2155
  );
2103
2156
  }
2104
2157
  function TableCell({ className, ...props }) {
2105
- return /* @__PURE__ */ jsx25(
2158
+ return /* @__PURE__ */ jsx26(
2106
2159
  "td",
2107
2160
  {
2108
2161
  "data-slot": "table-cell",
@@ -2115,7 +2168,7 @@ function TableCaption({
2115
2168
  className,
2116
2169
  ...props
2117
2170
  }) {
2118
- return /* @__PURE__ */ jsx25(
2171
+ return /* @__PURE__ */ jsx26(
2119
2172
  "caption",
2120
2173
  {
2121
2174
  "data-slot": "table-caption",
@@ -2126,7 +2179,7 @@ function TableCaption({
2126
2179
  }
2127
2180
 
2128
2181
  // src/components/accordion.tsx
2129
- import * as React36 from "react";
2182
+ import * as React37 from "react";
2130
2183
 
2131
2184
  // src/generated/accordion.ts
2132
2185
  var ACCORDION_ITEM = "border-b last:border-b-0";
@@ -2136,16 +2189,16 @@ var ACCORDION_CONTENT = "data-[state=closed]:animate-accordion-up data-[state=op
2136
2189
  var ACCORDION_CONTENT_INNER = "pt-0 pb-4";
2137
2190
 
2138
2191
  // src/components/accordion.tsx
2139
- import { jsx as jsx26, jsxs as jsxs7 } from "react/jsx-runtime";
2140
- var AccordionContext = React36.createContext(null);
2192
+ import { jsx as jsx27, jsxs as jsxs7 } from "react/jsx-runtime";
2193
+ var AccordionContext = React37.createContext(null);
2141
2194
  function useAccordion() {
2142
- const ctx = React36.useContext(AccordionContext);
2195
+ const ctx = React37.useContext(AccordionContext);
2143
2196
  if (!ctx) throw new Error("Accordion parts must be used within <Accordion>");
2144
2197
  return ctx;
2145
2198
  }
2146
- var ItemContext = React36.createContext(null);
2199
+ var ItemContext = React37.createContext(null);
2147
2200
  function useItemValue() {
2148
- const value = React36.useContext(ItemContext);
2201
+ const value = React37.useContext(ItemContext);
2149
2202
  if (value === null)
2150
2203
  throw new Error("AccordionTrigger/Content must be used within <AccordionItem>");
2151
2204
  return value;
@@ -2173,7 +2226,7 @@ function Accordion({
2173
2226
  if (open.includes(v)) setOpen(collapsible ? [] : open);
2174
2227
  else setOpen([v]);
2175
2228
  };
2176
- return /* @__PURE__ */ jsx26(AccordionContext.Provider, { value: { isOpen, toggle }, children: /* @__PURE__ */ jsx26("div", { "data-slot": "accordion", ...props, children }) });
2229
+ return /* @__PURE__ */ jsx27(AccordionContext.Provider, { value: { isOpen, toggle }, children: /* @__PURE__ */ jsx27("div", { "data-slot": "accordion", ...props, children }) });
2177
2230
  }
2178
2231
  function AccordionItem({
2179
2232
  className,
@@ -2181,7 +2234,7 @@ function AccordionItem({
2181
2234
  children,
2182
2235
  ...props
2183
2236
  }) {
2184
- return /* @__PURE__ */ jsx26(ItemContext.Provider, { value, children: /* @__PURE__ */ jsx26(
2237
+ return /* @__PURE__ */ jsx27(ItemContext.Provider, { value, children: /* @__PURE__ */ jsx27(
2185
2238
  "div",
2186
2239
  {
2187
2240
  "data-slot": "accordion-item",
@@ -2200,7 +2253,7 @@ function AccordionTrigger({
2200
2253
  const { isOpen, toggle } = useAccordion();
2201
2254
  const value = useItemValue();
2202
2255
  const open = isOpen(value);
2203
- return /* @__PURE__ */ jsx26("h3", { className: ACCORDION_HEADER, "data-slot": "accordion-header", children: /* @__PURE__ */ jsxs7(
2256
+ return /* @__PURE__ */ jsx27("h3", { className: ACCORDION_HEADER, "data-slot": "accordion-header", children: /* @__PURE__ */ jsxs7(
2204
2257
  "button",
2205
2258
  {
2206
2259
  type: "button",
@@ -2215,7 +2268,7 @@ function AccordionTrigger({
2215
2268
  ...props,
2216
2269
  children: [
2217
2270
  children,
2218
- /* @__PURE__ */ jsx26(
2271
+ /* @__PURE__ */ jsx27(
2219
2272
  "svg",
2220
2273
  {
2221
2274
  xmlns: "http://www.w3.org/2000/svg",
@@ -2228,7 +2281,7 @@ function AccordionTrigger({
2228
2281
  strokeLinecap: "round",
2229
2282
  strokeLinejoin: "round",
2230
2283
  className: "text-ink-soft pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200",
2231
- children: /* @__PURE__ */ jsx26("path", { d: "m6 9 6 6 6-6" })
2284
+ children: /* @__PURE__ */ jsx27("path", { d: "m6 9 6 6 6-6" })
2232
2285
  }
2233
2286
  )
2234
2287
  ]
@@ -2243,26 +2296,26 @@ function AccordionContent({
2243
2296
  const { isOpen } = useAccordion();
2244
2297
  const value = useItemValue();
2245
2298
  if (!isOpen(value)) return null;
2246
- return /* @__PURE__ */ jsx26(
2299
+ return /* @__PURE__ */ jsx27(
2247
2300
  "div",
2248
2301
  {
2249
2302
  "data-slot": "accordion-content",
2250
2303
  "data-state": "open",
2251
2304
  className: ACCORDION_CONTENT,
2252
2305
  ...props,
2253
- children: /* @__PURE__ */ jsx26("div", { className: cn(ACCORDION_CONTENT_INNER, className), children })
2306
+ children: /* @__PURE__ */ jsx27("div", { className: cn(ACCORDION_CONTENT_INNER, className), children })
2254
2307
  }
2255
2308
  );
2256
2309
  }
2257
2310
 
2258
2311
  // src/components/collapsible.tsx
2259
- import * as React37 from "react";
2260
- import { jsx as jsx27 } from "react/jsx-runtime";
2261
- var CollapsibleContext = React37.createContext(
2312
+ import * as React38 from "react";
2313
+ import { jsx as jsx28 } from "react/jsx-runtime";
2314
+ var CollapsibleContext = React38.createContext(
2262
2315
  null
2263
2316
  );
2264
2317
  function useCollapsible() {
2265
- const ctx = React37.useContext(CollapsibleContext);
2318
+ const ctx = React38.useContext(CollapsibleContext);
2266
2319
  if (!ctx) throw new Error("Collapsible parts must be used within <Collapsible>");
2267
2320
  return ctx;
2268
2321
  }
@@ -2278,14 +2331,14 @@ function Collapsible({
2278
2331
  defaultValue: defaultOpen,
2279
2332
  ...onOpenChange ? { onChange: onOpenChange } : {}
2280
2333
  });
2281
- return /* @__PURE__ */ jsx27(CollapsibleContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx27("div", { "data-slot": "collapsible", "data-state": isOpen ? "open" : "closed", ...props, children }) });
2334
+ return /* @__PURE__ */ jsx28(CollapsibleContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx28("div", { "data-slot": "collapsible", "data-state": isOpen ? "open" : "closed", ...props, children }) });
2282
2335
  }
2283
2336
  function CollapsibleTrigger({
2284
2337
  onClick,
2285
2338
  ...props
2286
2339
  }) {
2287
2340
  const { open, setOpen } = useCollapsible();
2288
- return /* @__PURE__ */ jsx27(
2341
+ return /* @__PURE__ */ jsx28(
2289
2342
  "button",
2290
2343
  {
2291
2344
  type: "button",
@@ -2306,7 +2359,7 @@ function CollapsibleContent({
2306
2359
  }) {
2307
2360
  const { open } = useCollapsible();
2308
2361
  if (!open) return null;
2309
- return /* @__PURE__ */ jsx27("div", { "data-slot": "collapsible-content", "data-state": "open", ...props, children });
2362
+ return /* @__PURE__ */ jsx28("div", { "data-slot": "collapsible-content", "data-state": "open", ...props, children });
2310
2363
  }
2311
2364
 
2312
2365
  // src/components/band.tsx
@@ -2337,7 +2390,7 @@ var STAT_LABEL = "text-ink-soft";
2337
2390
  var CHECK = "font-semibold text-positive";
2338
2391
 
2339
2392
  // src/components/band.tsx
2340
- import { jsx as jsx28, jsxs as jsxs8 } from "react/jsx-runtime";
2393
+ import { jsx as jsx29, jsxs as jsxs8 } from "react/jsx-runtime";
2341
2394
  function Section({
2342
2395
  polarity = "light",
2343
2396
  surface = "background",
@@ -2345,7 +2398,7 @@ function Section({
2345
2398
  className,
2346
2399
  ...props
2347
2400
  }) {
2348
- return /* @__PURE__ */ jsx28(
2401
+ return /* @__PURE__ */ jsx29(
2349
2402
  "section",
2350
2403
  {
2351
2404
  "data-slot": "section",
@@ -2360,33 +2413,33 @@ function Section({
2360
2413
  );
2361
2414
  }
2362
2415
  function Eyebrow({ className, ...props }) {
2363
- return /* @__PURE__ */ jsx28("p", { "data-slot": "eyebrow", className: cn(EYEBROW, className), ...props });
2416
+ return /* @__PURE__ */ jsx29("p", { "data-slot": "eyebrow", className: cn(EYEBROW, className), ...props });
2364
2417
  }
2365
2418
  function Display({ className, ...props }) {
2366
- return /* @__PURE__ */ jsx28("h2", { "data-slot": "display", className: cn(DISPLAY_BASE, className), ...props });
2419
+ return /* @__PURE__ */ jsx29("h2", { "data-slot": "display", className: cn(DISPLAY_BASE, className), ...props });
2367
2420
  }
2368
2421
  function SectionHead({ eyebrow, title, lede, className, ...props }) {
2369
2422
  return /* @__PURE__ */ jsxs8("div", { "data-slot": "section-head", className: cn(SECTION_HEAD, className), ...props, children: [
2370
- /* @__PURE__ */ jsx28(Eyebrow, { children: eyebrow }),
2371
- /* @__PURE__ */ jsx28(Display, { children: title }),
2372
- lede && /* @__PURE__ */ jsx28("p", { className: LEDE, children: lede })
2423
+ /* @__PURE__ */ jsx29(Eyebrow, { children: eyebrow }),
2424
+ /* @__PURE__ */ jsx29(Display, { children: title }),
2425
+ lede && /* @__PURE__ */ jsx29("p", { className: LEDE, children: lede })
2373
2426
  ] });
2374
2427
  }
2375
2428
  function Prose({ className, ...props }) {
2376
- return /* @__PURE__ */ jsx28("p", { "data-slot": "prose", className: cn(PROSE, className), ...props });
2429
+ return /* @__PURE__ */ jsx29("p", { "data-slot": "prose", className: cn(PROSE, className), ...props });
2377
2430
  }
2378
2431
  function Stat({ figure, label, className, ...props }) {
2379
2432
  return /* @__PURE__ */ jsxs8("span", { "data-slot": "stat", className: cn(STAT, className), ...props, children: [
2380
- /* @__PURE__ */ jsx28("span", { className: STAT_FIGURE, children: figure }),
2381
- /* @__PURE__ */ jsx28("span", { className: STAT_LABEL, children: label })
2433
+ /* @__PURE__ */ jsx29("span", { className: STAT_FIGURE, children: figure }),
2434
+ /* @__PURE__ */ jsx29("span", { className: STAT_LABEL, children: label })
2382
2435
  ] });
2383
2436
  }
2384
2437
  function Check({ className, ...props }) {
2385
- return /* @__PURE__ */ jsx28("span", { "data-slot": "check", "aria-hidden": true, className: cn(CHECK, className), ...props, children: "\u2713" });
2438
+ return /* @__PURE__ */ jsx29("span", { "data-slot": "check", "aria-hidden": true, className: cn(CHECK, className), ...props, children: "\u2713" });
2386
2439
  }
2387
2440
 
2388
2441
  // src/components/tabs.tsx
2389
- import * as React39 from "react";
2442
+ import * as React40 from "react";
2390
2443
 
2391
2444
  // src/generated/tabs.ts
2392
2445
  var TABS_ROOT = "flex flex-col gap-2";
@@ -2395,10 +2448,10 @@ var TABS_TRIGGER = "data-[state=active]:bg-background focus-visible:border-ring
2395
2448
  var TABS_CONTENT = "flex-1 outline-none";
2396
2449
 
2397
2450
  // src/components/tabs.tsx
2398
- import { jsx as jsx29 } from "react/jsx-runtime";
2399
- var TabsContext = React39.createContext(null);
2451
+ import { jsx as jsx30 } from "react/jsx-runtime";
2452
+ var TabsContext = React40.createContext(null);
2400
2453
  function useTabs() {
2401
- const ctx = React39.useContext(TabsContext);
2454
+ const ctx = React40.useContext(TabsContext);
2402
2455
  if (!ctx) throw new Error("Tabs parts must be used within <Tabs>");
2403
2456
  return ctx;
2404
2457
  }
@@ -2416,7 +2469,7 @@ function Tabs({
2416
2469
  defaultValue,
2417
2470
  ...onValueChange ? { onChange: onValueChange } : {}
2418
2471
  });
2419
- return /* @__PURE__ */ jsx29(TabsContext.Provider, { value: { value: active, setValue, orientation }, children: /* @__PURE__ */ jsx29(
2472
+ return /* @__PURE__ */ jsx30(TabsContext.Provider, { value: { value: active, setValue, orientation }, children: /* @__PURE__ */ jsx30(
2420
2473
  "div",
2421
2474
  {
2422
2475
  "data-slot": "tabs",
@@ -2434,12 +2487,12 @@ function TabsList({
2434
2487
  ...props
2435
2488
  }) {
2436
2489
  const { orientation } = useTabs();
2437
- const items = React39.Children.toArray(children);
2490
+ const items = React40.Children.toArray(children);
2438
2491
  const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } = useRovingFocus({
2439
2492
  count: items.length,
2440
2493
  orientation: orientation === "vertical" ? "vertical" : "horizontal"
2441
2494
  });
2442
- return /* @__PURE__ */ jsx29(
2495
+ return /* @__PURE__ */ jsx30(
2443
2496
  "div",
2444
2497
  {
2445
2498
  role: "tablist",
@@ -2452,7 +2505,7 @@ function TabsList({
2452
2505
  },
2453
2506
  ...props,
2454
2507
  children: items.map(
2455
- (child, index) => React39.isValidElement(child) ? React39.cloneElement(child, {
2508
+ (child, index) => React40.isValidElement(child) ? React40.cloneElement(child, {
2456
2509
  __index: index,
2457
2510
  __isFocusItem: index === activeIndex,
2458
2511
  __onFocusItem: () => setActiveIndex(index)
@@ -2472,7 +2525,7 @@ function TabsTrigger({
2472
2525
  }) {
2473
2526
  const { value: active, setValue } = useTabs();
2474
2527
  const selected = active === value;
2475
- return /* @__PURE__ */ jsx29(
2528
+ return /* @__PURE__ */ jsx30(
2476
2529
  "button",
2477
2530
  {
2478
2531
  type: "button",
@@ -2503,7 +2556,7 @@ function TabsContent({
2503
2556
  }) {
2504
2557
  const { value: active } = useTabs();
2505
2558
  if (active !== value) return null;
2506
- return /* @__PURE__ */ jsx29(
2559
+ return /* @__PURE__ */ jsx30(
2507
2560
  "div",
2508
2561
  {
2509
2562
  role: "tabpanel",
@@ -2534,7 +2587,7 @@ var toggleSizeClasses = {
2534
2587
  };
2535
2588
 
2536
2589
  // src/components/toggle.tsx
2537
- import { jsx as jsx30 } from "react/jsx-runtime";
2590
+ import { jsx as jsx31 } from "react/jsx-runtime";
2538
2591
  function toggleVariants({
2539
2592
  variant = "bare",
2540
2593
  size = "md",
@@ -2557,7 +2610,7 @@ function Toggle({
2557
2610
  defaultValue: defaultPressed,
2558
2611
  ...onPressedChange ? { onChange: onPressedChange } : {}
2559
2612
  });
2560
- return /* @__PURE__ */ jsx30(
2613
+ return /* @__PURE__ */ jsx31(
2561
2614
  "button",
2562
2615
  {
2563
2616
  type: "button",
@@ -2575,9 +2628,9 @@ function Toggle({
2575
2628
  }
2576
2629
 
2577
2630
  // src/components/toggle-group.tsx
2578
- import * as React41 from "react";
2579
- import { jsx as jsx31 } from "react/jsx-runtime";
2580
- var ToggleGroupContext = React41.createContext({
2631
+ import * as React42 from "react";
2632
+ import { jsx as jsx32 } from "react/jsx-runtime";
2633
+ var ToggleGroupContext = React42.createContext({
2581
2634
  variant: "bare",
2582
2635
  size: "md",
2583
2636
  value: [],
@@ -2604,7 +2657,7 @@ function ToggleGroup({
2604
2657
  defaultValue: toArray(defaultValue),
2605
2658
  onChange: (next) => onValueChange?.(type === "single" ? next[0] ?? "" : next)
2606
2659
  });
2607
- const toggle = React41.useCallback(
2660
+ const toggle = React42.useCallback(
2608
2661
  (itemValue) => {
2609
2662
  if (type === "single") {
2610
2663
  setSelected(selected.includes(itemValue) ? [] : [itemValue]);
@@ -2616,7 +2669,7 @@ function ToggleGroup({
2616
2669
  },
2617
2670
  [type, selected, setSelected]
2618
2671
  );
2619
- return /* @__PURE__ */ jsx31(
2672
+ return /* @__PURE__ */ jsx32(
2620
2673
  "div",
2621
2674
  {
2622
2675
  "data-slot": "toggle-group",
@@ -2627,7 +2680,7 @@ function ToggleGroup({
2627
2680
  className
2628
2681
  ),
2629
2682
  ...props,
2630
- children: /* @__PURE__ */ jsx31(ToggleGroupContext.Provider, { value: { variant, size, value: selected, toggle }, children })
2683
+ children: /* @__PURE__ */ jsx32(ToggleGroupContext.Provider, { value: { variant, size, value: selected, toggle }, children })
2631
2684
  }
2632
2685
  );
2633
2686
  }
@@ -2640,11 +2693,11 @@ function ToggleGroupItem({
2640
2693
  onClick,
2641
2694
  ...props
2642
2695
  }) {
2643
- const context = React41.useContext(ToggleGroupContext);
2696
+ const context = React42.useContext(ToggleGroupContext);
2644
2697
  const resolvedVariant = context.variant || variant || "bare";
2645
2698
  const resolvedSize = context.size || size || "md";
2646
2699
  const on = context.value.includes(value);
2647
- return /* @__PURE__ */ jsx31(
2700
+ return /* @__PURE__ */ jsx32(
2648
2701
  "button",
2649
2702
  {
2650
2703
  type: "button",
@@ -2670,7 +2723,7 @@ function ToggleGroupItem({
2670
2723
 
2671
2724
  // src/components/switch.tsx
2672
2725
  import "react";
2673
- import { jsx as jsx32 } from "react/jsx-runtime";
2726
+ import { jsx as jsx33 } from "react/jsx-runtime";
2674
2727
  function Switch({
2675
2728
  className,
2676
2729
  checked,
@@ -2686,7 +2739,7 @@ function Switch({
2686
2739
  ...onCheckedChange ? { onChange: onCheckedChange } : {}
2687
2740
  });
2688
2741
  const state = on ? "checked" : "unchecked";
2689
- return /* @__PURE__ */ jsx32(
2742
+ return /* @__PURE__ */ jsx33(
2690
2743
  "button",
2691
2744
  {
2692
2745
  type: "button",
@@ -2704,7 +2757,7 @@ function Switch({
2704
2757
  setOn(!on);
2705
2758
  },
2706
2759
  ...props,
2707
- children: /* @__PURE__ */ jsx32(
2760
+ children: /* @__PURE__ */ jsx33(
2708
2761
  "span",
2709
2762
  {
2710
2763
  "data-slot": "switch-thumb",
@@ -2718,7 +2771,7 @@ function Switch({
2718
2771
 
2719
2772
  // src/components/checkbox.tsx
2720
2773
  import "react";
2721
- import { jsx as jsx33 } from "react/jsx-runtime";
2774
+ import { jsx as jsx34 } from "react/jsx-runtime";
2722
2775
  function Checkbox({
2723
2776
  className,
2724
2777
  checked,
@@ -2734,7 +2787,7 @@ function Checkbox({
2734
2787
  ...onCheckedChange ? { onChange: onCheckedChange } : {}
2735
2788
  });
2736
2789
  const state = on ? "checked" : "unchecked";
2737
- return /* @__PURE__ */ jsx33(
2790
+ return /* @__PURE__ */ jsx34(
2738
2791
  "button",
2739
2792
  {
2740
2793
  type: "button",
@@ -2752,12 +2805,12 @@ function Checkbox({
2752
2805
  setOn(!on);
2753
2806
  },
2754
2807
  ...props,
2755
- children: on && /* @__PURE__ */ jsx33(
2808
+ children: on && /* @__PURE__ */ jsx34(
2756
2809
  "span",
2757
2810
  {
2758
2811
  "data-slot": "checkbox-indicator",
2759
2812
  className: "flex items-center justify-center text-current transition-none",
2760
- children: /* @__PURE__ */ jsx33(
2813
+ children: /* @__PURE__ */ jsx34(
2761
2814
  "svg",
2762
2815
  {
2763
2816
  xmlns: "http://www.w3.org/2000/svg",
@@ -2769,7 +2822,7 @@ function Checkbox({
2769
2822
  strokeLinejoin: "round",
2770
2823
  className: "size-3.5",
2771
2824
  "aria-hidden": "true",
2772
- children: /* @__PURE__ */ jsx33("path", { d: "M20 6 9 17l-5-5" })
2825
+ children: /* @__PURE__ */ jsx34("path", { d: "M20 6 9 17l-5-5" })
2773
2826
  }
2774
2827
  )
2775
2828
  }
@@ -2779,15 +2832,15 @@ function Checkbox({
2779
2832
  }
2780
2833
 
2781
2834
  // src/components/radio-group.tsx
2782
- import * as React44 from "react";
2835
+ import * as React45 from "react";
2783
2836
 
2784
2837
  // src/generated/radio-group.ts
2785
2838
  var RADIO_GROUP_ROOT = "grid gap-3";
2786
2839
  var RADIO_GROUP_ITEM = "border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-accent-error/20 aria-invalid:border-accent-error 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";
2787
2840
 
2788
2841
  // src/components/radio-group.tsx
2789
- import { jsx as jsx34 } from "react/jsx-runtime";
2790
- var RadioGroupContext = React44.createContext(
2842
+ import { jsx as jsx35 } from "react/jsx-runtime";
2843
+ var RadioGroupContext = React45.createContext(
2791
2844
  null
2792
2845
  );
2793
2846
  function RadioGroup({
@@ -2804,10 +2857,10 @@ function RadioGroup({
2804
2857
  defaultValue,
2805
2858
  ...onValueChange ? { onChange: onValueChange } : {}
2806
2859
  });
2807
- const itemsRef = React44.useRef([]);
2808
- const [count, setCount] = React44.useState(0);
2860
+ const itemsRef = React45.useRef([]);
2861
+ const [count, setCount] = React45.useState(0);
2809
2862
  const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } = useRovingFocus({ count, orientation: "vertical", loop: true });
2810
- const register = React44.useCallback((el) => {
2863
+ const register = React45.useCallback((el) => {
2811
2864
  const list = itemsRef.current;
2812
2865
  let index = list.indexOf(el);
2813
2866
  if (index === -1) {
@@ -2817,11 +2870,11 @@ function RadioGroup({
2817
2870
  }
2818
2871
  return index;
2819
2872
  }, []);
2820
- const ctx = React44.useMemo(
2873
+ const ctx = React45.useMemo(
2821
2874
  () => ({ value: current, setValue: setCurrent, register, activeIndex, setActiveIndex }),
2822
2875
  [current, setCurrent, register, activeIndex, setActiveIndex]
2823
2876
  );
2824
- return /* @__PURE__ */ jsx34(RadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx34(
2877
+ return /* @__PURE__ */ jsx35(RadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx35(
2825
2878
  "div",
2826
2879
  {
2827
2880
  "data-slot": "radio-group",
@@ -2843,14 +2896,14 @@ function RadioGroupItem({
2843
2896
  onClick,
2844
2897
  ...props
2845
2898
  }) {
2846
- const ctx = React44.useContext(RadioGroupContext);
2899
+ const ctx = React45.useContext(RadioGroupContext);
2847
2900
  if (!ctx) throw new Error("RadioGroupItem must be used within a RadioGroup");
2848
- const indexRef = React44.useRef(-1);
2901
+ const indexRef = React45.useRef(-1);
2849
2902
  const checked = ctx.value === value;
2850
- React44.useEffect(() => {
2903
+ React45.useEffect(() => {
2851
2904
  if (checked) ctx.setActiveIndex(indexRef.current);
2852
2905
  }, [checked]);
2853
- return /* @__PURE__ */ jsx34(
2906
+ return /* @__PURE__ */ jsx35(
2854
2907
  "button",
2855
2908
  {
2856
2909
  ref: (el) => {
@@ -2869,18 +2922,18 @@ function RadioGroupItem({
2869
2922
  ctx.setValue(value);
2870
2923
  },
2871
2924
  ...props,
2872
- children: checked ? /* @__PURE__ */ jsx34(
2925
+ children: checked ? /* @__PURE__ */ jsx35(
2873
2926
  "span",
2874
2927
  {
2875
2928
  "data-slot": "radio-group-indicator",
2876
2929
  className: "relative flex items-center justify-center",
2877
- children: /* @__PURE__ */ jsx34(
2930
+ children: /* @__PURE__ */ jsx35(
2878
2931
  "svg",
2879
2932
  {
2880
2933
  className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2",
2881
2934
  viewBox: "0 0 24 24",
2882
2935
  "aria-hidden": "true",
2883
- children: /* @__PURE__ */ jsx34("circle", { cx: "12", cy: "12", r: "10" })
2936
+ children: /* @__PURE__ */ jsx35("circle", { cx: "12", cy: "12", r: "10" })
2884
2937
  }
2885
2938
  )
2886
2939
  }
@@ -2890,7 +2943,7 @@ function RadioGroupItem({
2890
2943
  }
2891
2944
 
2892
2945
  // src/components/slider.tsx
2893
- import * as React45 from "react";
2946
+ import * as React46 from "react";
2894
2947
 
2895
2948
  // src/generated/slider.ts
2896
2949
  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";
@@ -2899,7 +2952,7 @@ var SLIDER_RANGE = "bg-primary absolute data-[orientation=horizontal]:h-full dat
2899
2952
  var SLIDER_THUMB = "border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-ink shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50";
2900
2953
 
2901
2954
  // src/components/slider.tsx
2902
- import { jsx as jsx35, jsxs as jsxs9 } from "react/jsx-runtime";
2955
+ import { jsx as jsx36, jsxs as jsxs9 } from "react/jsx-runtime";
2903
2956
  function clampStep(value, min, max, step) {
2904
2957
  const clamped = Math.min(max, Math.max(min, value));
2905
2958
  if (step <= 0) return clamped;
@@ -2926,9 +2979,9 @@ function Slider({
2926
2979
  const current = clampStep(raw, min, max, step);
2927
2980
  const span = Math.max(max - min, Number.EPSILON);
2928
2981
  const percent = Math.min(100, Math.max(0, (current - min) / span * 100));
2929
- const trackRef = React45.useRef(null);
2930
- const draggingRef = React45.useRef(false);
2931
- const valueFromPointer = React45.useCallback(
2982
+ const trackRef = React46.useRef(null);
2983
+ const draggingRef = React46.useRef(false);
2984
+ const valueFromPointer = React46.useCallback(
2932
2985
  (clientX, clientY) => {
2933
2986
  const rect = trackRef.current?.getBoundingClientRect();
2934
2987
  if (!rect) return current;
@@ -2989,14 +3042,14 @@ function Slider({
2989
3042
  onPointerMove,
2990
3043
  onPointerUp,
2991
3044
  children: [
2992
- /* @__PURE__ */ jsx35(
3045
+ /* @__PURE__ */ jsx36(
2993
3046
  "span",
2994
3047
  {
2995
3048
  ref: trackRef,
2996
3049
  "data-slot": "slider-track",
2997
3050
  "data-orientation": orientation,
2998
3051
  className: SLIDER_TRACK,
2999
- children: /* @__PURE__ */ jsx35(
3052
+ children: /* @__PURE__ */ jsx36(
3000
3053
  "span",
3001
3054
  {
3002
3055
  "data-slot": "slider-range",
@@ -3007,7 +3060,7 @@ function Slider({
3007
3060
  )
3008
3061
  }
3009
3062
  ),
3010
- /* @__PURE__ */ jsx35(
3063
+ /* @__PURE__ */ jsx36(
3011
3064
  "span",
3012
3065
  {
3013
3066
  "data-slot": "slider-thumb",
@@ -3042,15 +3095,15 @@ var scrollBarOrientations = {
3042
3095
  };
3043
3096
 
3044
3097
  // src/components/scroll-area.tsx
3045
- import { jsx as jsx36, jsxs as jsxs10 } from "react/jsx-runtime";
3098
+ import { jsx as jsx37, jsxs as jsxs10 } from "react/jsx-runtime";
3046
3099
  function ScrollArea({
3047
3100
  className,
3048
3101
  children,
3049
3102
  ...props
3050
3103
  }) {
3051
3104
  return /* @__PURE__ */ jsxs10("div", { "data-slot": "scroll-area", className: cn("relative", className), ...props, children: [
3052
- /* @__PURE__ */ jsx36("div", { "data-slot": "scroll-area-viewport", className: SCROLL_AREA_VIEWPORT, children }),
3053
- /* @__PURE__ */ jsx36(ScrollBar, {})
3105
+ /* @__PURE__ */ jsx37("div", { "data-slot": "scroll-area-viewport", className: SCROLL_AREA_VIEWPORT, children }),
3106
+ /* @__PURE__ */ jsx37(ScrollBar, {})
3054
3107
  ] });
3055
3108
  }
3056
3109
  function ScrollBar({
@@ -3058,20 +3111,20 @@ function ScrollBar({
3058
3111
  orientation = "vertical",
3059
3112
  ...props
3060
3113
  }) {
3061
- return /* @__PURE__ */ jsx36(
3114
+ return /* @__PURE__ */ jsx37(
3062
3115
  "div",
3063
3116
  {
3064
3117
  "data-slot": "scroll-area-scrollbar",
3065
3118
  "data-orientation": orientation,
3066
3119
  className: cn(SCROLLBAR_BASE, scrollBarOrientations[orientation], className),
3067
3120
  ...props,
3068
- children: /* @__PURE__ */ jsx36("div", { "data-slot": "scroll-area-thumb", className: SCROLL_AREA_THUMB })
3121
+ children: /* @__PURE__ */ jsx37("div", { "data-slot": "scroll-area-thumb", className: SCROLL_AREA_THUMB })
3069
3122
  }
3070
3123
  );
3071
3124
  }
3072
3125
 
3073
3126
  // src/components/sidebar.tsx
3074
- import * as React47 from "react";
3127
+ import * as React48 from "react";
3075
3128
 
3076
3129
  // src/generated/sidebar.ts
3077
3130
  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-ring transition-[width,height,padding] hover:bg-hover hover:text-ink focus-visible:ring-2 active:bg-hover active:text-ink 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-hover data-[active=true]:font-medium data-[active=true]:text-ink data-[state=open]:hover:bg-hover data-[state=open]:hover:text-ink group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0";
@@ -3097,12 +3150,12 @@ var SIDEBAR_MENU = "flex w-full min-w-0 flex-col gap-1";
3097
3150
  var SIDEBAR_MENU_ITEM = "group/menu-item relative";
3098
3151
 
3099
3152
  // src/components/sidebar.tsx
3100
- import { jsx as jsx37, jsxs as jsxs11 } from "react/jsx-runtime";
3153
+ import { jsx as jsx38, jsxs as jsxs11 } from "react/jsx-runtime";
3101
3154
  var SIDEBAR_WIDTH = "16rem";
3102
3155
  var SIDEBAR_WIDTH_ICON = "3rem";
3103
- var SidebarContext = React47.createContext(null);
3156
+ var SidebarContext = React48.createContext(null);
3104
3157
  function useSidebar() {
3105
- const ctx = React47.useContext(SidebarContext);
3158
+ const ctx = React48.useContext(SidebarContext);
3106
3159
  if (!ctx) throw new Error("useSidebar must be used within a SidebarProvider.");
3107
3160
  return ctx;
3108
3161
  }
@@ -3120,16 +3173,16 @@ function SidebarProvider({
3120
3173
  defaultValue: defaultOpen,
3121
3174
  ...onOpenChange ? { onChange: onOpenChange } : {}
3122
3175
  });
3123
- const toggleSidebar = React47.useCallback(
3176
+ const toggleSidebar = React48.useCallback(
3124
3177
  () => setOpen(!open),
3125
3178
  [open, setOpen]
3126
3179
  );
3127
3180
  const state = open ? "expanded" : "collapsed";
3128
- const contextValue = React47.useMemo(
3181
+ const contextValue = React48.useMemo(
3129
3182
  () => ({ state, open, setOpen, toggleSidebar }),
3130
3183
  [state, open, setOpen, toggleSidebar]
3131
3184
  );
3132
- return /* @__PURE__ */ jsx37(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx37(
3185
+ return /* @__PURE__ */ jsx38(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx38(
3133
3186
  "div",
3134
3187
  {
3135
3188
  "data-slot": "sidebar-wrapper",
@@ -3154,7 +3207,7 @@ function Sidebar({
3154
3207
  }) {
3155
3208
  const { state } = useSidebar();
3156
3209
  if (collapsible === "none") {
3157
- return /* @__PURE__ */ jsx37(
3210
+ return /* @__PURE__ */ jsx38(
3158
3211
  "div",
3159
3212
  {
3160
3213
  "data-slot": "sidebar",
@@ -3164,7 +3217,7 @@ function Sidebar({
3164
3217
  }
3165
3218
  );
3166
3219
  }
3167
- return /* @__PURE__ */ jsx37(
3220
+ return /* @__PURE__ */ jsx38(
3168
3221
  "div",
3169
3222
  {
3170
3223
  className: "group peer text-ink hidden md:block",
@@ -3173,7 +3226,7 @@ function Sidebar({
3173
3226
  "data-variant": variant,
3174
3227
  "data-side": side,
3175
3228
  "data-slot": "sidebar",
3176
- children: /* @__PURE__ */ jsx37(
3229
+ children: /* @__PURE__ */ jsx38(
3177
3230
  "div",
3178
3231
  {
3179
3232
  "data-slot": "sidebar-inner",
@@ -3207,7 +3260,7 @@ function SidebarTrigger({
3207
3260
  ...props,
3208
3261
  children: [
3209
3262
  children,
3210
- /* @__PURE__ */ jsx37("span", { className: "sr-only", children: "Toggle Sidebar" })
3263
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Toggle Sidebar" })
3211
3264
  ]
3212
3265
  }
3213
3266
  );
@@ -3217,7 +3270,7 @@ function SidebarRail({
3217
3270
  ...props
3218
3271
  }) {
3219
3272
  const { toggleSidebar } = useSidebar();
3220
- return /* @__PURE__ */ jsx37(
3273
+ return /* @__PURE__ */ jsx38(
3221
3274
  "button",
3222
3275
  {
3223
3276
  type: "button",
@@ -3233,7 +3286,7 @@ function SidebarRail({
3233
3286
  );
3234
3287
  }
3235
3288
  function SidebarInset({ className, ...props }) {
3236
- return /* @__PURE__ */ jsx37(
3289
+ return /* @__PURE__ */ jsx38(
3237
3290
  "main",
3238
3291
  {
3239
3292
  "data-slot": "sidebar-inset",
@@ -3243,7 +3296,7 @@ function SidebarInset({ className, ...props }) {
3243
3296
  );
3244
3297
  }
3245
3298
  function SidebarHeader({ className, ...props }) {
3246
- return /* @__PURE__ */ jsx37(
3299
+ return /* @__PURE__ */ jsx38(
3247
3300
  "div",
3248
3301
  {
3249
3302
  "data-slot": "sidebar-header",
@@ -3254,7 +3307,7 @@ function SidebarHeader({ className, ...props }) {
3254
3307
  );
3255
3308
  }
3256
3309
  function SidebarFooter({ className, ...props }) {
3257
- return /* @__PURE__ */ jsx37(
3310
+ return /* @__PURE__ */ jsx38(
3258
3311
  "div",
3259
3312
  {
3260
3313
  "data-slot": "sidebar-footer",
@@ -3268,7 +3321,7 @@ function SidebarSeparator({
3268
3321
  className,
3269
3322
  ...props
3270
3323
  }) {
3271
- return /* @__PURE__ */ jsx37(
3324
+ return /* @__PURE__ */ jsx38(
3272
3325
  "div",
3273
3326
  {
3274
3327
  "data-slot": "sidebar-separator",
@@ -3280,7 +3333,7 @@ function SidebarSeparator({
3280
3333
  );
3281
3334
  }
3282
3335
  function SidebarContent({ className, ...props }) {
3283
- return /* @__PURE__ */ jsx37(
3336
+ return /* @__PURE__ */ jsx38(
3284
3337
  "div",
3285
3338
  {
3286
3339
  "data-slot": "sidebar-content",
@@ -3291,7 +3344,7 @@ function SidebarContent({ className, ...props }) {
3291
3344
  );
3292
3345
  }
3293
3346
  function SidebarGroup({ className, ...props }) {
3294
- return /* @__PURE__ */ jsx37(
3347
+ return /* @__PURE__ */ jsx38(
3295
3348
  "div",
3296
3349
  {
3297
3350
  "data-slot": "sidebar-group",
@@ -3307,7 +3360,7 @@ function SidebarGroupLabel({
3307
3360
  ...props
3308
3361
  }) {
3309
3362
  const Comp = asChild ? Slot : "div";
3310
- return /* @__PURE__ */ jsx37(
3363
+ return /* @__PURE__ */ jsx38(
3311
3364
  Comp,
3312
3365
  {
3313
3366
  "data-slot": "sidebar-group-label",
@@ -3321,7 +3374,7 @@ function SidebarGroupContent({
3321
3374
  className,
3322
3375
  ...props
3323
3376
  }) {
3324
- return /* @__PURE__ */ jsx37(
3377
+ return /* @__PURE__ */ jsx38(
3325
3378
  "div",
3326
3379
  {
3327
3380
  "data-slot": "sidebar-group-content",
@@ -3332,7 +3385,7 @@ function SidebarGroupContent({
3332
3385
  );
3333
3386
  }
3334
3387
  function SidebarMenu({ className, ...props }) {
3335
- return /* @__PURE__ */ jsx37(
3388
+ return /* @__PURE__ */ jsx38(
3336
3389
  "ul",
3337
3390
  {
3338
3391
  "data-slot": "sidebar-menu",
@@ -3343,7 +3396,7 @@ function SidebarMenu({ className, ...props }) {
3343
3396
  );
3344
3397
  }
3345
3398
  function SidebarMenuItem({ className, ...props }) {
3346
- return /* @__PURE__ */ jsx37(
3399
+ return /* @__PURE__ */ jsx38(
3347
3400
  "li",
3348
3401
  {
3349
3402
  "data-slot": "sidebar-menu-item",
@@ -3362,7 +3415,7 @@ function SidebarMenuButton({
3362
3415
  ...props
3363
3416
  }) {
3364
3417
  const Comp = asChild ? Slot : "button";
3365
- return /* @__PURE__ */ jsx37(
3418
+ return /* @__PURE__ */ jsx38(
3366
3419
  Comp,
3367
3420
  {
3368
3421
  "data-slot": "sidebar-menu-button",
@@ -3381,7 +3434,7 @@ function SidebarMenuButton({
3381
3434
  }
3382
3435
 
3383
3436
  // src/components/carousel.tsx
3384
- import * as React48 from "react";
3437
+ import * as React49 from "react";
3385
3438
 
3386
3439
  // src/generated/carousel.ts
3387
3440
  var CAROUSEL_CONTENT_VIEWPORT = "overflow-hidden";
@@ -3400,10 +3453,10 @@ var CAROUSEL_EDGE_FADE_PREV = "pointer-events-none absolute inset-y-0 left-0 w-2
3400
3453
  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";
3401
3454
 
3402
3455
  // src/components/carousel.tsx
3403
- import { Fragment as Fragment4, jsx as jsx38, jsxs as jsxs12 } from "react/jsx-runtime";
3404
- var CarouselContext = React48.createContext(null);
3456
+ import { Fragment as Fragment4, jsx as jsx39, jsxs as jsxs12 } from "react/jsx-runtime";
3457
+ var CarouselContext = React49.createContext(null);
3405
3458
  function useCarousel() {
3406
- const context = React48.useContext(CarouselContext);
3459
+ const context = React49.useContext(CarouselContext);
3407
3460
  if (!context) {
3408
3461
  throw new Error("useCarousel must be used within a <Carousel />");
3409
3462
  }
@@ -3424,13 +3477,13 @@ function Carousel({
3424
3477
  defaultValue: defaultIndex,
3425
3478
  onChange: onIndexChange
3426
3479
  });
3427
- const [count, setCount] = React48.useState(0);
3480
+ const [count, setCount] = React49.useState(0);
3428
3481
  const canScrollPrev = index > 0;
3429
3482
  const canScrollNext = index < count - 1;
3430
- const scrollPrev = React48.useCallback(() => {
3483
+ const scrollPrev = React49.useCallback(() => {
3431
3484
  if (index > 0) setIndex(index - 1);
3432
3485
  }, [index, setIndex]);
3433
- const scrollNext = React48.useCallback(() => {
3486
+ const scrollNext = React49.useCallback(() => {
3434
3487
  if (index < count - 1) setIndex(index + 1);
3435
3488
  }, [index, count, setIndex]);
3436
3489
  const handleKeyDown = (event) => {
@@ -3443,7 +3496,7 @@ function Carousel({
3443
3496
  }
3444
3497
  onKeyDown?.(event);
3445
3498
  };
3446
- return /* @__PURE__ */ jsx38(
3499
+ return /* @__PURE__ */ jsx39(
3447
3500
  CarouselContext.Provider,
3448
3501
  {
3449
3502
  value: {
@@ -3456,7 +3509,7 @@ function Carousel({
3456
3509
  canScrollPrev,
3457
3510
  canScrollNext
3458
3511
  },
3459
- children: /* @__PURE__ */ jsx38(
3512
+ children: /* @__PURE__ */ jsx39(
3460
3513
  "div",
3461
3514
  {
3462
3515
  onKeyDownCapture: handleKeyDown,
@@ -3478,12 +3531,12 @@ function CarouselContent({
3478
3531
  ...props
3479
3532
  }) {
3480
3533
  const { orientation, index, setCount } = useCarousel();
3481
- const childCount = React48.Children.count(children);
3482
- React48.useEffect(() => {
3534
+ const childCount = React49.Children.count(children);
3535
+ React49.useEffect(() => {
3483
3536
  setCount(childCount);
3484
3537
  }, [childCount, setCount]);
3485
3538
  const transform = orientation === "horizontal" ? `translate3d(-${index * 100}%, 0, 0)` : `translate3d(0, -${index * 100}%, 0)`;
3486
- return /* @__PURE__ */ jsx38("div", { className: CAROUSEL_CONTENT_VIEWPORT, "data-slot": "carousel-content", children: /* @__PURE__ */ jsx38(
3539
+ return /* @__PURE__ */ jsx39("div", { className: CAROUSEL_CONTENT_VIEWPORT, "data-slot": "carousel-content", children: /* @__PURE__ */ jsx39(
3487
3540
  "div",
3488
3541
  {
3489
3542
  className: cn(
@@ -3502,7 +3555,7 @@ function CarouselItem({
3502
3555
  ...props
3503
3556
  }) {
3504
3557
  const { orientation } = useCarousel();
3505
- return /* @__PURE__ */ jsx38(
3558
+ return /* @__PURE__ */ jsx39(
3506
3559
  "div",
3507
3560
  {
3508
3561
  role: "group",
@@ -3522,7 +3575,7 @@ function CarouselEdgeFade({
3522
3575
  }) {
3523
3576
  const { canScrollPrev, canScrollNext } = useCarousel();
3524
3577
  return /* @__PURE__ */ jsxs12(Fragment4, { children: [
3525
- /* @__PURE__ */ jsx38(
3578
+ /* @__PURE__ */ jsx39(
3526
3579
  "div",
3527
3580
  {
3528
3581
  "aria-hidden": true,
@@ -3533,7 +3586,7 @@ function CarouselEdgeFade({
3533
3586
  )
3534
3587
  }
3535
3588
  ),
3536
- /* @__PURE__ */ jsx38(
3589
+ /* @__PURE__ */ jsx39(
3537
3590
  "div",
3538
3591
  {
3539
3592
  "aria-hidden": true,
@@ -3549,7 +3602,8 @@ function CarouselEdgeFade({
3549
3602
  function CarouselPrevious({
3550
3603
  className,
3551
3604
  variant = "outline",
3552
- size = "icon",
3605
+ size = "md",
3606
+ icon = true,
3553
3607
  ...props
3554
3608
  }) {
3555
3609
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
@@ -3559,6 +3613,7 @@ function CarouselPrevious({
3559
3613
  "data-slot": "carousel-previous",
3560
3614
  variant,
3561
3615
  size,
3616
+ icon,
3562
3617
  className: cn(
3563
3618
  CAROUSEL_NAV,
3564
3619
  orientation === "horizontal" ? CAROUSEL_PREVIOUS_HORIZONTAL : CAROUSEL_PREVIOUS_VERTICAL,
@@ -3568,7 +3623,7 @@ function CarouselPrevious({
3568
3623
  onClick: scrollPrev,
3569
3624
  ...props,
3570
3625
  children: [
3571
- /* @__PURE__ */ jsx38(
3626
+ /* @__PURE__ */ jsx39(
3572
3627
  "svg",
3573
3628
  {
3574
3629
  xmlns: "http://www.w3.org/2000/svg",
@@ -3579,10 +3634,10 @@ function CarouselPrevious({
3579
3634
  strokeLinecap: "round",
3580
3635
  strokeLinejoin: "round",
3581
3636
  "aria-hidden": "true",
3582
- children: /* @__PURE__ */ jsx38("path", { d: "m15 18-6-6 6-6" })
3637
+ children: /* @__PURE__ */ jsx39("path", { d: "m15 18-6-6 6-6" })
3583
3638
  }
3584
3639
  ),
3585
- /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Previous slide" })
3640
+ /* @__PURE__ */ jsx39("span", { className: "sr-only", children: "Previous slide" })
3586
3641
  ]
3587
3642
  }
3588
3643
  );
@@ -3590,7 +3645,8 @@ function CarouselPrevious({
3590
3645
  function CarouselNext({
3591
3646
  className,
3592
3647
  variant = "outline",
3593
- size = "icon",
3648
+ size = "md",
3649
+ icon = true,
3594
3650
  ...props
3595
3651
  }) {
3596
3652
  const { orientation, scrollNext, canScrollNext } = useCarousel();
@@ -3600,6 +3656,7 @@ function CarouselNext({
3600
3656
  "data-slot": "carousel-next",
3601
3657
  variant,
3602
3658
  size,
3659
+ icon,
3603
3660
  className: cn(
3604
3661
  CAROUSEL_NAV,
3605
3662
  orientation === "horizontal" ? CAROUSEL_NEXT_HORIZONTAL : CAROUSEL_NEXT_VERTICAL,
@@ -3609,7 +3666,7 @@ function CarouselNext({
3609
3666
  onClick: scrollNext,
3610
3667
  ...props,
3611
3668
  children: [
3612
- /* @__PURE__ */ jsx38(
3669
+ /* @__PURE__ */ jsx39(
3613
3670
  "svg",
3614
3671
  {
3615
3672
  xmlns: "http://www.w3.org/2000/svg",
@@ -3620,17 +3677,17 @@ function CarouselNext({
3620
3677
  strokeLinecap: "round",
3621
3678
  strokeLinejoin: "round",
3622
3679
  "aria-hidden": "true",
3623
- children: /* @__PURE__ */ jsx38("path", { d: "m9 18 6-6-6-6" })
3680
+ children: /* @__PURE__ */ jsx39("path", { d: "m9 18 6-6-6-6" })
3624
3681
  }
3625
3682
  ),
3626
- /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Next slide" })
3683
+ /* @__PURE__ */ jsx39("span", { className: "sr-only", children: "Next slide" })
3627
3684
  ]
3628
3685
  }
3629
3686
  );
3630
3687
  }
3631
3688
 
3632
3689
  // src/components/input-otp.tsx
3633
- import * as React49 from "react";
3690
+ import * as React50 from "react";
3634
3691
 
3635
3692
  // src/generated/input-otp.ts
3636
3693
  var INPUT_OTP_CONTAINER = "relative flex items-center gap-2 has-disabled:opacity-50";
@@ -3641,10 +3698,10 @@ var INPUT_OTP_SLOT_CARET_WRAPPER = "pointer-events-none absolute inset-0 flex it
3641
3698
  var INPUT_OTP_SLOT_CARET = "animate-caret-blink bg-ink h-4 w-px duration-1000";
3642
3699
 
3643
3700
  // src/components/input-otp.tsx
3644
- import { jsx as jsx39, jsxs as jsxs13 } from "react/jsx-runtime";
3645
- var InputOTPContext = React49.createContext(null);
3701
+ import { jsx as jsx40, jsxs as jsxs13 } from "react/jsx-runtime";
3702
+ var InputOTPContext = React50.createContext(null);
3646
3703
  function useInputOTP() {
3647
- const context = React49.useContext(InputOTPContext);
3704
+ const context = React50.useContext(InputOTPContext);
3648
3705
  if (!context) {
3649
3706
  throw new Error("InputOTP slots must be used within an <InputOTP />");
3650
3707
  }
@@ -3666,16 +3723,16 @@ function InputOTP({
3666
3723
  defaultValue,
3667
3724
  onChange
3668
3725
  });
3669
- const [focused, setFocused] = React49.useState(false);
3726
+ const [focused, setFocused] = React50.useState(false);
3670
3727
  const activeIndex = focused ? Math.min(value.length, maxLength - 1) : -1;
3671
- return /* @__PURE__ */ jsx39(InputOTPContext.Provider, { value: { value, maxLength, activeIndex }, children: /* @__PURE__ */ jsxs13(
3728
+ return /* @__PURE__ */ jsx40(InputOTPContext.Provider, { value: { value, maxLength, activeIndex }, children: /* @__PURE__ */ jsxs13(
3672
3729
  "div",
3673
3730
  {
3674
3731
  "data-slot": "input-otp",
3675
3732
  className: cn(INPUT_OTP_CONTAINER, containerClassName),
3676
3733
  children: [
3677
3734
  children,
3678
- /* @__PURE__ */ jsx39(
3735
+ /* @__PURE__ */ jsx40(
3679
3736
  "input",
3680
3737
  {
3681
3738
  inputMode: "numeric",
@@ -3698,7 +3755,7 @@ function InputOTPGroup({
3698
3755
  className,
3699
3756
  ...props
3700
3757
  }) {
3701
- return /* @__PURE__ */ jsx39(
3758
+ return /* @__PURE__ */ jsx40(
3702
3759
  "div",
3703
3760
  {
3704
3761
  "data-slot": "input-otp-group",
@@ -3721,13 +3778,13 @@ function InputOTPSlot({ index, className, ...props }) {
3721
3778
  ...props,
3722
3779
  children: [
3723
3780
  char,
3724
- hasFakeCaret && /* @__PURE__ */ jsx39("div", { className: INPUT_OTP_SLOT_CARET_WRAPPER, children: /* @__PURE__ */ jsx39("div", { className: INPUT_OTP_SLOT_CARET }) })
3781
+ hasFakeCaret && /* @__PURE__ */ jsx40("div", { className: INPUT_OTP_SLOT_CARET_WRAPPER, children: /* @__PURE__ */ jsx40("div", { className: INPUT_OTP_SLOT_CARET }) })
3725
3782
  ]
3726
3783
  }
3727
3784
  );
3728
3785
  }
3729
3786
  function InputOTPSeparator({ ...props }) {
3730
- return /* @__PURE__ */ jsx39("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx39(
3787
+ return /* @__PURE__ */ jsx40("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx40(
3731
3788
  "svg",
3732
3789
  {
3733
3790
  xmlns: "http://www.w3.org/2000/svg",
@@ -3738,27 +3795,27 @@ function InputOTPSeparator({ ...props }) {
3738
3795
  strokeLinecap: "round",
3739
3796
  strokeLinejoin: "round",
3740
3797
  "aria-hidden": "true",
3741
- children: /* @__PURE__ */ jsx39("path", { d: "M5 12h14" })
3798
+ children: /* @__PURE__ */ jsx40("path", { d: "M5 12h14" })
3742
3799
  }
3743
3800
  ) });
3744
3801
  }
3745
3802
 
3746
3803
  // src/components/tooltip.tsx
3747
- import * as React50 from "react";
3804
+ import * as React51 from "react";
3748
3805
 
3749
3806
  // src/generated/tooltip.ts
3750
3807
  var TOOLTIP_CONTENT = "bg-ink 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";
3751
3808
 
3752
3809
  // src/components/tooltip.tsx
3753
- import { Fragment as Fragment5, jsx as jsx40 } from "react/jsx-runtime";
3754
- var TooltipContext = React50.createContext(null);
3810
+ import { Fragment as Fragment5, jsx as jsx41 } from "react/jsx-runtime";
3811
+ var TooltipContext = React51.createContext(null);
3755
3812
  function useTooltip() {
3756
- const ctx = React50.useContext(TooltipContext);
3813
+ const ctx = React51.useContext(TooltipContext);
3757
3814
  if (!ctx) throw new Error("Tooltip parts must be used within <Tooltip>");
3758
3815
  return ctx;
3759
3816
  }
3760
3817
  function TooltipProvider({ children }) {
3761
- return /* @__PURE__ */ jsx40(Fragment5, { children });
3818
+ return /* @__PURE__ */ jsx41(Fragment5, { children });
3762
3819
  }
3763
3820
  function Tooltip({ open, defaultOpen = false, onOpenChange, children }) {
3764
3821
  const [isOpen, setOpen] = useControllableState({
@@ -3766,8 +3823,8 @@ function Tooltip({ open, defaultOpen = false, onOpenChange, children }) {
3766
3823
  defaultValue: defaultOpen,
3767
3824
  ...onOpenChange ? { onChange: onOpenChange } : {}
3768
3825
  });
3769
- const anchorRef = React50.useRef(null);
3770
- return /* @__PURE__ */ jsx40(TooltipProvider, { children: /* @__PURE__ */ jsx40(TooltipContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children }) });
3826
+ const anchorRef = React51.useRef(null);
3827
+ return /* @__PURE__ */ jsx41(TooltipProvider, { children: /* @__PURE__ */ jsx41(TooltipContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children }) });
3771
3828
  }
3772
3829
  function TooltipTrigger({
3773
3830
  asChild = false,
@@ -3779,7 +3836,7 @@ function TooltipTrigger({
3779
3836
  }) {
3780
3837
  const { setOpen, anchorRef } = useTooltip();
3781
3838
  const Comp = asChild ? Slot : "button";
3782
- return /* @__PURE__ */ jsx40(
3839
+ return /* @__PURE__ */ jsx41(
3783
3840
  Comp,
3784
3841
  {
3785
3842
  "data-slot": "tooltip-trigger",
@@ -3820,7 +3877,7 @@ function TooltipContent({
3820
3877
  offset: sideOffset
3821
3878
  });
3822
3879
  if (!isPresent) return null;
3823
- return /* @__PURE__ */ jsx40(Portal, { children: /* @__PURE__ */ jsx40(
3880
+ return /* @__PURE__ */ jsx41(Portal, { children: /* @__PURE__ */ jsx41(
3824
3881
  "div",
3825
3882
  {
3826
3883
  "data-slot": "tooltip-content",
@@ -3837,16 +3894,16 @@ function TooltipContent({
3837
3894
  }
3838
3895
 
3839
3896
  // src/components/popover.tsx
3840
- import * as React51 from "react";
3897
+ import * as React52 from "react";
3841
3898
 
3842
3899
  // src/generated/popover.ts
3843
3900
  var POPOVER_CONTENT = "bg-popover text-ink 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";
3844
3901
 
3845
3902
  // src/components/popover.tsx
3846
- import { jsx as jsx41 } from "react/jsx-runtime";
3847
- var PopoverContext = React51.createContext(null);
3903
+ import { jsx as jsx42 } from "react/jsx-runtime";
3904
+ var PopoverContext = React52.createContext(null);
3848
3905
  function usePopover() {
3849
- const ctx = React51.useContext(PopoverContext);
3906
+ const ctx = React52.useContext(PopoverContext);
3850
3907
  if (!ctx) throw new Error("Popover parts must be used within <Popover>");
3851
3908
  return ctx;
3852
3909
  }
@@ -3856,13 +3913,13 @@ function Popover({ open, defaultOpen = false, onOpenChange, children }) {
3856
3913
  defaultValue: defaultOpen,
3857
3914
  ...onOpenChange ? { onChange: onOpenChange } : {}
3858
3915
  });
3859
- const anchorRef = React51.useRef(null);
3860
- return /* @__PURE__ */ jsx41(PopoverContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
3916
+ const anchorRef = React52.useRef(null);
3917
+ return /* @__PURE__ */ jsx42(PopoverContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
3861
3918
  }
3862
3919
  function PopoverTrigger({ asChild = false, onClick, ...props }) {
3863
3920
  const { open, setOpen, anchorRef } = usePopover();
3864
3921
  const Comp = asChild ? Slot : "button";
3865
- return /* @__PURE__ */ jsx41(
3922
+ return /* @__PURE__ */ jsx42(
3866
3923
  Comp,
3867
3924
  {
3868
3925
  "data-slot": "popover-trigger",
@@ -3879,7 +3936,7 @@ function PopoverTrigger({ asChild = false, onClick, ...props }) {
3879
3936
  function PopoverAnchor({ asChild = false, ...props }) {
3880
3937
  const { anchorRef } = usePopover();
3881
3938
  const Comp = asChild ? Slot : "div";
3882
- return /* @__PURE__ */ jsx41(
3939
+ return /* @__PURE__ */ jsx42(
3883
3940
  Comp,
3884
3941
  {
3885
3942
  "data-slot": "popover-anchor",
@@ -3911,7 +3968,7 @@ function PopoverContent({
3911
3968
  exclude: [anchorRef]
3912
3969
  });
3913
3970
  if (!isPresent) return null;
3914
- return /* @__PURE__ */ jsx41(Portal, { children: /* @__PURE__ */ jsx41(
3971
+ return /* @__PURE__ */ jsx42(Portal, { children: /* @__PURE__ */ jsx42(
3915
3972
  "div",
3916
3973
  {
3917
3974
  "data-slot": "popover-content",
@@ -3931,11 +3988,11 @@ function PopoverContent({
3931
3988
  }
3932
3989
 
3933
3990
  // src/components/info-tip.tsx
3934
- import * as React52 from "react";
3935
- import { jsx as jsx42, jsxs as jsxs14 } from "react/jsx-runtime";
3936
- var InfoTipContext = React52.createContext(null);
3991
+ import * as React53 from "react";
3992
+ import { jsx as jsx43, jsxs as jsxs14 } from "react/jsx-runtime";
3993
+ var InfoTipContext = React53.createContext(null);
3937
3994
  function useInfoTip() {
3938
- const ctx = React52.useContext(InfoTipContext);
3995
+ const ctx = React53.useContext(InfoTipContext);
3939
3996
  if (!ctx) throw new Error("InfoTip parts must be used within <InfoTip>");
3940
3997
  return ctx;
3941
3998
  }
@@ -3950,9 +4007,9 @@ function InfoTip({
3950
4007
  defaultValue: defaultOpen,
3951
4008
  ...onOpenChange ? { onChange: onOpenChange } : {}
3952
4009
  });
3953
- const anchorRef = React52.useRef(null);
3954
- const contentId = React52.useId();
3955
- return /* @__PURE__ */ jsx42(
4010
+ const anchorRef = React53.useRef(null);
4011
+ const contentId = React53.useId();
4012
+ return /* @__PURE__ */ jsx43(
3956
4013
  InfoTipContext.Provider,
3957
4014
  {
3958
4015
  value: { open: isOpen, setOpen, anchorRef, contentId },
@@ -3973,9 +4030,9 @@ function InfoGlyph2({ className }) {
3973
4030
  "aria-hidden": true,
3974
4031
  className: cn("size-4", className),
3975
4032
  children: [
3976
- /* @__PURE__ */ jsx42("circle", { cx: "12", cy: "12", r: "10" }),
3977
- /* @__PURE__ */ jsx42("path", { d: "M12 16v-4" }),
3978
- /* @__PURE__ */ jsx42("path", { d: "M12 8h.01" })
4033
+ /* @__PURE__ */ jsx43("circle", { cx: "12", cy: "12", r: "10" }),
4034
+ /* @__PURE__ */ jsx43("path", { d: "M12 16v-4" }),
4035
+ /* @__PURE__ */ jsx43("path", { d: "M12 8h.01" })
3979
4036
  ]
3980
4037
  }
3981
4038
  );
@@ -3999,7 +4056,7 @@ function InfoTipTrigger({
3999
4056
  openDelay: hoverDelay
4000
4057
  });
4001
4058
  const Comp = asChild ? Slot : "button";
4002
- return /* @__PURE__ */ jsx42(
4059
+ return /* @__PURE__ */ jsx43(
4003
4060
  Comp,
4004
4061
  {
4005
4062
  "data-slot": "info-tip-trigger",
@@ -4030,7 +4087,7 @@ function InfoTipTrigger({
4030
4087
  hover.onPointerLeave(e);
4031
4088
  },
4032
4089
  ...props,
4033
- children: children ?? /* @__PURE__ */ jsx42(InfoGlyph2, {})
4090
+ children: children ?? /* @__PURE__ */ jsx43(InfoGlyph2, {})
4034
4091
  }
4035
4092
  );
4036
4093
  }
@@ -4057,7 +4114,7 @@ function InfoTipContent({
4057
4114
  exclude: [anchorRef]
4058
4115
  });
4059
4116
  if (!isPresent) return null;
4060
- return /* @__PURE__ */ jsx42(Portal, { children: /* @__PURE__ */ jsx42(
4117
+ return /* @__PURE__ */ jsx43(Portal, { children: /* @__PURE__ */ jsx43(
4061
4118
  "div",
4062
4119
  {
4063
4120
  id: contentId,
@@ -4077,16 +4134,16 @@ function InfoTipContent({
4077
4134
  }
4078
4135
 
4079
4136
  // src/components/hover-card.tsx
4080
- import * as React53 from "react";
4137
+ import * as React54 from "react";
4081
4138
 
4082
4139
  // src/generated/hover-card.ts
4083
4140
  var HOVER_CARD_CONTENT = "bg-popover text-ink 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";
4084
4141
 
4085
4142
  // src/components/hover-card.tsx
4086
- import { jsx as jsx43 } from "react/jsx-runtime";
4087
- var HoverCardContext = React53.createContext(null);
4143
+ import { jsx as jsx44 } from "react/jsx-runtime";
4144
+ var HoverCardContext = React54.createContext(null);
4088
4145
  function useHoverCard() {
4089
- const ctx = React53.useContext(HoverCardContext);
4146
+ const ctx = React54.useContext(HoverCardContext);
4090
4147
  if (!ctx) throw new Error("HoverCard parts must be used within <HoverCard>");
4091
4148
  return ctx;
4092
4149
  }
@@ -4096,8 +4153,8 @@ function HoverCard({ open, defaultOpen = false, onOpenChange, children }) {
4096
4153
  defaultValue: defaultOpen,
4097
4154
  ...onOpenChange ? { onChange: onOpenChange } : {}
4098
4155
  });
4099
- const anchorRef = React53.useRef(null);
4100
- return /* @__PURE__ */ jsx43(HoverCardContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
4156
+ const anchorRef = React54.useRef(null);
4157
+ return /* @__PURE__ */ jsx44(HoverCardContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
4101
4158
  }
4102
4159
  function HoverCardTrigger({
4103
4160
  asChild = false,
@@ -4107,7 +4164,7 @@ function HoverCardTrigger({
4107
4164
  }) {
4108
4165
  const { setOpen, anchorRef } = useHoverCard();
4109
4166
  const Comp = asChild ? Slot : "a";
4110
- return /* @__PURE__ */ jsx43(
4167
+ return /* @__PURE__ */ jsx44(
4111
4168
  Comp,
4112
4169
  {
4113
4170
  "data-slot": "hover-card-trigger",
@@ -4142,7 +4199,7 @@ function HoverCardContent({
4142
4199
  offset: sideOffset
4143
4200
  });
4144
4201
  if (!isPresent) return null;
4145
- return /* @__PURE__ */ jsx43(Portal, { children: /* @__PURE__ */ jsx43(
4202
+ return /* @__PURE__ */ jsx44(Portal, { children: /* @__PURE__ */ jsx44(
4146
4203
  "div",
4147
4204
  {
4148
4205
  "data-slot": "hover-card-content",
@@ -4159,7 +4216,7 @@ function HoverCardContent({
4159
4216
  }
4160
4217
 
4161
4218
  // src/components/dropdown-menu.tsx
4162
- import * as React54 from "react";
4219
+ import * as React55 from "react";
4163
4220
 
4164
4221
  // src/generated/dropdown-menu.ts
4165
4222
  var DROPDOWN_MENU_CONTENT = "bg-popover text-ink 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";
@@ -4173,12 +4230,12 @@ var DROPDOWN_MENU_SEPARATOR = "bg-border -mx-1 my-1 h-px";
4173
4230
  var DROPDOWN_MENU_SHORTCUT = "text-ink-soft ml-auto text-xs tracking-widest";
4174
4231
 
4175
4232
  // src/components/dropdown-menu.tsx
4176
- import { jsx as jsx44, jsxs as jsxs15 } from "react/jsx-runtime";
4177
- var DropdownMenuContext = React54.createContext(
4233
+ import { jsx as jsx45, jsxs as jsxs15 } from "react/jsx-runtime";
4234
+ var DropdownMenuContext = React55.createContext(
4178
4235
  null
4179
4236
  );
4180
4237
  function useDropdownMenu() {
4181
- const ctx = React54.useContext(DropdownMenuContext);
4238
+ const ctx = React55.useContext(DropdownMenuContext);
4182
4239
  if (!ctx) throw new Error("DropdownMenu parts must be used within <DropdownMenu>");
4183
4240
  return ctx;
4184
4241
  }
@@ -4188,16 +4245,16 @@ function DropdownMenu({ open, defaultOpen = false, onOpenChange, children }) {
4188
4245
  defaultValue: defaultOpen,
4189
4246
  ...onOpenChange ? { onChange: onOpenChange } : {}
4190
4247
  });
4191
- const anchorRef = React54.useRef(null);
4192
- return /* @__PURE__ */ jsx44(DropdownMenuContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children: /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu", children }) });
4248
+ const anchorRef = React55.useRef(null);
4249
+ return /* @__PURE__ */ jsx45(DropdownMenuContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "dropdown-menu", children }) });
4193
4250
  }
4194
4251
  function DropdownMenuPortal({ children }) {
4195
- return /* @__PURE__ */ jsx44(Portal, { children });
4252
+ return /* @__PURE__ */ jsx45(Portal, { children });
4196
4253
  }
4197
4254
  function DropdownMenuTrigger({ asChild = false, onClick, ...props }) {
4198
4255
  const { open, setOpen, anchorRef } = useDropdownMenu();
4199
4256
  const Comp = asChild ? Slot : "button";
4200
- return /* @__PURE__ */ jsx44(
4257
+ return /* @__PURE__ */ jsx45(
4201
4258
  Comp,
4202
4259
  {
4203
4260
  "data-slot": "dropdown-menu-trigger",
@@ -4233,7 +4290,7 @@ function DropdownMenuContent({
4233
4290
  onDismiss: () => setOpen(false),
4234
4291
  exclude: [anchorRef]
4235
4292
  });
4236
- const contentRef = React54.useRef(null);
4293
+ const contentRef = React55.useRef(null);
4237
4294
  const items = () => Array.from(
4238
4295
  contentRef.current?.querySelectorAll("[role^='menuitem']") ?? []
4239
4296
  ).filter((el) => el.getAttribute("data-disabled") === null);
@@ -4242,13 +4299,13 @@ function DropdownMenuContent({
4242
4299
  orientation: "vertical",
4243
4300
  loop: true
4244
4301
  });
4245
- React54.useEffect(() => {
4302
+ React55.useEffect(() => {
4246
4303
  if (!open) return;
4247
4304
  items()[activeIndex]?.focus();
4248
4305
  }, [open, activeIndex]);
4249
- const close = React54.useCallback(() => setOpen(false), [setOpen]);
4306
+ const close = React55.useCallback(() => setOpen(false), [setOpen]);
4250
4307
  if (!isPresent) return null;
4251
- return /* @__PURE__ */ jsx44(Portal, { children: /* @__PURE__ */ jsx44(DropdownMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx44(
4308
+ return /* @__PURE__ */ jsx45(Portal, { children: /* @__PURE__ */ jsx45(DropdownMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx45(
4252
4309
  "div",
4253
4310
  {
4254
4311
  "data-slot": "dropdown-menu-content",
@@ -4271,10 +4328,10 @@ function DropdownMenuContent({
4271
4328
  }
4272
4329
  ) }) });
4273
4330
  }
4274
- var DropdownMenuCloseContext = React54.createContext(() => {
4331
+ var DropdownMenuCloseContext = React55.createContext(() => {
4275
4332
  });
4276
4333
  function DropdownMenuGroup({ className, ...props }) {
4277
- return /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-group", role: "group", className, ...props });
4334
+ return /* @__PURE__ */ jsx45("div", { "data-slot": "dropdown-menu-group", role: "group", className, ...props });
4278
4335
  }
4279
4336
  function DropdownMenuItem({
4280
4337
  className,
@@ -4285,8 +4342,8 @@ function DropdownMenuItem({
4285
4342
  onKeyDown,
4286
4343
  ...props
4287
4344
  }) {
4288
- const close = React54.useContext(DropdownMenuCloseContext);
4289
- return /* @__PURE__ */ jsx44(
4345
+ const close = React55.useContext(DropdownMenuCloseContext);
4346
+ return /* @__PURE__ */ jsx45(
4290
4347
  "div",
4291
4348
  {
4292
4349
  "data-slot": "dropdown-menu-item",
@@ -4323,7 +4380,7 @@ function DropdownMenuCheckboxItem({
4323
4380
  onClick,
4324
4381
  ...props
4325
4382
  }) {
4326
- const close = React54.useContext(DropdownMenuCloseContext);
4383
+ const close = React55.useContext(DropdownMenuCloseContext);
4327
4384
  return /* @__PURE__ */ jsxs15(
4328
4385
  "div",
4329
4386
  {
@@ -4344,13 +4401,13 @@ function DropdownMenuCheckboxItem({
4344
4401
  },
4345
4402
  ...props,
4346
4403
  children: [
4347
- /* @__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 }),
4404
+ /* @__PURE__ */ jsx45("span", { className: DROPDOWN_MENU_ITEM_INDICATOR, 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 }),
4348
4405
  children
4349
4406
  ]
4350
4407
  }
4351
4408
  );
4352
4409
  }
4353
- var DropdownMenuRadioGroupContext = React54.createContext(null);
4410
+ var DropdownMenuRadioGroupContext = React55.createContext(null);
4354
4411
  function DropdownMenuRadioGroup({
4355
4412
  className,
4356
4413
  value,
@@ -4358,11 +4415,11 @@ function DropdownMenuRadioGroup({
4358
4415
  children,
4359
4416
  ...props
4360
4417
  }) {
4361
- const ctx = React54.useMemo(
4418
+ const ctx = React55.useMemo(
4362
4419
  () => ({ value, setValue: (next) => onValueChange?.(next) }),
4363
4420
  [value, onValueChange]
4364
4421
  );
4365
- return /* @__PURE__ */ jsx44(DropdownMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-radio-group", role: "group", className, ...props, children }) });
4422
+ return /* @__PURE__ */ jsx45(DropdownMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx45("div", { "data-slot": "dropdown-menu-radio-group", role: "group", className, ...props, children }) });
4366
4423
  }
4367
4424
  function DropdownMenuRadioItem({
4368
4425
  className,
@@ -4372,8 +4429,8 @@ function DropdownMenuRadioItem({
4372
4429
  onClick,
4373
4430
  ...props
4374
4431
  }) {
4375
- const close = React54.useContext(DropdownMenuCloseContext);
4376
- const group = React54.useContext(DropdownMenuRadioGroupContext);
4432
+ const close = React55.useContext(DropdownMenuCloseContext);
4433
+ const group = React55.useContext(DropdownMenuRadioGroupContext);
4377
4434
  const checked = group?.value === value;
4378
4435
  return /* @__PURE__ */ jsxs15(
4379
4436
  "div",
@@ -4396,14 +4453,14 @@ function DropdownMenuRadioItem({
4396
4453
  },
4397
4454
  ...props,
4398
4455
  children: [
4399
- /* @__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 }),
4456
+ /* @__PURE__ */ jsx45("span", { className: DROPDOWN_MENU_ITEM_INDICATOR, 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 }),
4400
4457
  children
4401
4458
  ]
4402
4459
  }
4403
4460
  );
4404
4461
  }
4405
4462
  function DropdownMenuLabel({ className, inset, ...props }) {
4406
- return /* @__PURE__ */ jsx44(
4463
+ return /* @__PURE__ */ jsx45(
4407
4464
  "div",
4408
4465
  {
4409
4466
  "data-slot": "dropdown-menu-label",
@@ -4414,7 +4471,7 @@ function DropdownMenuLabel({ className, inset, ...props }) {
4414
4471
  );
4415
4472
  }
4416
4473
  function DropdownMenuSeparator({ className, ...props }) {
4417
- return /* @__PURE__ */ jsx44(
4474
+ return /* @__PURE__ */ jsx45(
4418
4475
  "div",
4419
4476
  {
4420
4477
  "data-slot": "dropdown-menu-separator",
@@ -4425,7 +4482,7 @@ function DropdownMenuSeparator({ className, ...props }) {
4425
4482
  );
4426
4483
  }
4427
4484
  function DropdownMenuShortcut({ className, ...props }) {
4428
- return /* @__PURE__ */ jsx44(
4485
+ return /* @__PURE__ */ jsx45(
4429
4486
  "span",
4430
4487
  {
4431
4488
  "data-slot": "dropdown-menu-shortcut",
@@ -4434,17 +4491,17 @@ function DropdownMenuShortcut({ className, ...props }) {
4434
4491
  }
4435
4492
  );
4436
4493
  }
4437
- var DropdownMenuSubContext = React54.createContext(null);
4494
+ var DropdownMenuSubContext = React55.createContext(null);
4438
4495
  function DropdownMenuSub({ open, defaultOpen = false, onOpenChange, children }) {
4439
4496
  const [isOpen, setOpen] = useControllableState({
4440
4497
  ...open !== void 0 ? { value: open } : {},
4441
4498
  defaultValue: defaultOpen,
4442
4499
  ...onOpenChange ? { onChange: onOpenChange } : {}
4443
4500
  });
4444
- return /* @__PURE__ */ jsx44(DropdownMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-sub", children }) });
4501
+ return /* @__PURE__ */ jsx45(DropdownMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "dropdown-menu-sub", children }) });
4445
4502
  }
4446
4503
  function DropdownMenuSubTrigger({ className, inset, children, onClick, ...props }) {
4447
- const ctx = React54.useContext(DropdownMenuSubContext);
4504
+ const ctx = React55.useContext(DropdownMenuSubContext);
4448
4505
  return /* @__PURE__ */ jsxs15(
4449
4506
  "div",
4450
4507
  {
@@ -4466,15 +4523,15 @@ function DropdownMenuSubTrigger({ className, inset, children, onClick, ...props
4466
4523
  ...props,
4467
4524
  children: [
4468
4525
  children,
4469
- /* @__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" }) })
4526
+ /* @__PURE__ */ jsx45("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__ */ jsx45("path", { d: "m9 18 6-6-6-6" }) })
4470
4527
  ]
4471
4528
  }
4472
4529
  );
4473
4530
  }
4474
4531
  function DropdownMenuSubContent({ className, children, ...props }) {
4475
- const ctx = React54.useContext(DropdownMenuSubContext);
4532
+ const ctx = React55.useContext(DropdownMenuSubContext);
4476
4533
  if (!ctx?.open) return null;
4477
- return /* @__PURE__ */ jsx44(
4534
+ return /* @__PURE__ */ jsx45(
4478
4535
  "div",
4479
4536
  {
4480
4537
  "data-slot": "dropdown-menu-sub-content",
@@ -4491,7 +4548,7 @@ function DropdownMenuSubContent({ className, children, ...props }) {
4491
4548
  }
4492
4549
 
4493
4550
  // src/components/context-menu.tsx
4494
- import * as React55 from "react";
4551
+ import * as React56 from "react";
4495
4552
 
4496
4553
  // src/generated/context-menu.ts
4497
4554
  var CONTEXT_MENU_CONTENT = "bg-popover text-ink 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";
@@ -4504,10 +4561,10 @@ var CONTEXT_MENU_SEPARATOR = "bg-border -mx-1 my-1 h-px";
4504
4561
  var CONTEXT_MENU_SHORTCUT = "text-ink-soft ml-auto text-xs tracking-widest";
4505
4562
 
4506
4563
  // src/components/context-menu.tsx
4507
- import { jsx as jsx45, jsxs as jsxs16 } from "react/jsx-runtime";
4508
- var ContextMenuContext = React55.createContext(null);
4564
+ import { jsx as jsx46, jsxs as jsxs16 } from "react/jsx-runtime";
4565
+ var ContextMenuContext = React56.createContext(null);
4509
4566
  function useContextMenu() {
4510
- const ctx = React55.useContext(ContextMenuContext);
4567
+ const ctx = React56.useContext(ContextMenuContext);
4511
4568
  if (!ctx) throw new Error("ContextMenu parts must be used within <ContextMenu>");
4512
4569
  return ctx;
4513
4570
  }
@@ -4517,16 +4574,16 @@ function ContextMenu({ open, defaultOpen = false, onOpenChange, children }) {
4517
4574
  defaultValue: defaultOpen,
4518
4575
  ...onOpenChange ? { onChange: onOpenChange } : {}
4519
4576
  });
4520
- const [point, setPoint] = React55.useState({ x: 0, y: 0 });
4521
- return /* @__PURE__ */ jsx45(ContextMenuContext.Provider, { value: { open: isOpen, setOpen, point, setPoint }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu", children }) });
4577
+ const [point, setPoint] = React56.useState({ x: 0, y: 0 });
4578
+ return /* @__PURE__ */ jsx46(ContextMenuContext.Provider, { value: { open: isOpen, setOpen, point, setPoint }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "context-menu", children }) });
4522
4579
  }
4523
4580
  function ContextMenuPortal({ children }) {
4524
- return /* @__PURE__ */ jsx45(Portal, { children });
4581
+ return /* @__PURE__ */ jsx46(Portal, { children });
4525
4582
  }
4526
4583
  function ContextMenuTrigger({ asChild = false, onContextMenu, ...props }) {
4527
4584
  const { setOpen, setPoint } = useContextMenu();
4528
4585
  const Comp = asChild ? Slot : "div";
4529
- return /* @__PURE__ */ jsx45(
4586
+ return /* @__PURE__ */ jsx46(
4530
4587
  Comp,
4531
4588
  {
4532
4589
  "data-slot": "context-menu-trigger",
@@ -4541,9 +4598,9 @@ function ContextMenuTrigger({ asChild = false, onContextMenu, ...props }) {
4541
4598
  );
4542
4599
  }
4543
4600
  function ContextMenuGroup({ className, ...props }) {
4544
- return /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-group", role: "group", className, ...props });
4601
+ return /* @__PURE__ */ jsx46("div", { "data-slot": "context-menu-group", role: "group", className, ...props });
4545
4602
  }
4546
- var ContextMenuCloseContext = React55.createContext(() => {
4603
+ var ContextMenuCloseContext = React56.createContext(() => {
4547
4604
  });
4548
4605
  function ContextMenuContent({ className, children, ...props }) {
4549
4606
  const { open, setOpen, point } = useContextMenu();
@@ -4552,7 +4609,7 @@ function ContextMenuContent({ className, children, ...props }) {
4552
4609
  enabled: open,
4553
4610
  onDismiss: () => setOpen(false)
4554
4611
  });
4555
- const contentRef = React55.useRef(null);
4612
+ const contentRef = React56.useRef(null);
4556
4613
  const items = () => Array.from(
4557
4614
  contentRef.current?.querySelectorAll("[role^='menuitem']") ?? []
4558
4615
  ).filter((el) => el.getAttribute("data-disabled") === null);
@@ -4561,13 +4618,13 @@ function ContextMenuContent({ className, children, ...props }) {
4561
4618
  orientation: "vertical",
4562
4619
  loop: true
4563
4620
  });
4564
- React55.useEffect(() => {
4621
+ React56.useEffect(() => {
4565
4622
  if (!open) return;
4566
4623
  items()[activeIndex]?.focus();
4567
4624
  }, [open, activeIndex]);
4568
- const close = React55.useCallback(() => setOpen(false), [setOpen]);
4625
+ const close = React56.useCallback(() => setOpen(false), [setOpen]);
4569
4626
  if (!isPresent) return null;
4570
- return /* @__PURE__ */ jsx45(Portal, { children: /* @__PURE__ */ jsx45(ContextMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx45(
4627
+ return /* @__PURE__ */ jsx46(Portal, { children: /* @__PURE__ */ jsx46(ContextMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx46(
4571
4628
  "div",
4572
4629
  {
4573
4630
  "data-slot": "context-menu-content",
@@ -4599,8 +4656,8 @@ function ContextMenuItem({
4599
4656
  onKeyDown,
4600
4657
  ...props
4601
4658
  }) {
4602
- const close = React55.useContext(ContextMenuCloseContext);
4603
- return /* @__PURE__ */ jsx45(
4659
+ const close = React56.useContext(ContextMenuCloseContext);
4660
+ return /* @__PURE__ */ jsx46(
4604
4661
  "div",
4605
4662
  {
4606
4663
  "data-slot": "context-menu-item",
@@ -4637,7 +4694,7 @@ function ContextMenuCheckboxItem({
4637
4694
  onClick,
4638
4695
  ...props
4639
4696
  }) {
4640
- const close = React55.useContext(ContextMenuCloseContext);
4697
+ const close = React56.useContext(ContextMenuCloseContext);
4641
4698
  return /* @__PURE__ */ jsxs16(
4642
4699
  "div",
4643
4700
  {
@@ -4658,13 +4715,13 @@ function ContextMenuCheckboxItem({
4658
4715
  },
4659
4716
  ...props,
4660
4717
  children: [
4661
- /* @__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 }),
4718
+ /* @__PURE__ */ jsx46("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: checked ? /* @__PURE__ */ jsx46("svg", { className: "size-4", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx46("path", { d: "M20 6 9 17l-5-5" }) }) : null }),
4662
4719
  children
4663
4720
  ]
4664
4721
  }
4665
4722
  );
4666
4723
  }
4667
- var ContextMenuRadioGroupContext = React55.createContext(null);
4724
+ var ContextMenuRadioGroupContext = React56.createContext(null);
4668
4725
  function ContextMenuRadioGroup({
4669
4726
  className,
4670
4727
  value,
@@ -4672,11 +4729,11 @@ function ContextMenuRadioGroup({
4672
4729
  children,
4673
4730
  ...props
4674
4731
  }) {
4675
- const ctx = React55.useMemo(
4732
+ const ctx = React56.useMemo(
4676
4733
  () => ({ value, setValue: (next) => onValueChange?.(next) }),
4677
4734
  [value, onValueChange]
4678
4735
  );
4679
- return /* @__PURE__ */ jsx45(ContextMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-radio-group", role: "group", className, ...props, children }) });
4736
+ return /* @__PURE__ */ jsx46(ContextMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx46("div", { "data-slot": "context-menu-radio-group", role: "group", className, ...props, children }) });
4680
4737
  }
4681
4738
  function ContextMenuRadioItem({
4682
4739
  className,
@@ -4686,8 +4743,8 @@ function ContextMenuRadioItem({
4686
4743
  onClick,
4687
4744
  ...props
4688
4745
  }) {
4689
- const close = React55.useContext(ContextMenuCloseContext);
4690
- const group = React55.useContext(ContextMenuRadioGroupContext);
4746
+ const close = React56.useContext(ContextMenuCloseContext);
4747
+ const group = React56.useContext(ContextMenuRadioGroupContext);
4691
4748
  const checked = group?.value === value;
4692
4749
  return /* @__PURE__ */ jsxs16(
4693
4750
  "div",
@@ -4710,14 +4767,14 @@ function ContextMenuRadioItem({
4710
4767
  },
4711
4768
  ...props,
4712
4769
  children: [
4713
- /* @__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 }),
4770
+ /* @__PURE__ */ jsx46("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: checked ? /* @__PURE__ */ jsx46("svg", { className: "size-2 fill-current", viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx46("circle", { cx: "12", cy: "12", r: "10" }) }) : null }),
4714
4771
  children
4715
4772
  ]
4716
4773
  }
4717
4774
  );
4718
4775
  }
4719
4776
  function ContextMenuLabel({ className, inset, ...props }) {
4720
- return /* @__PURE__ */ jsx45(
4777
+ return /* @__PURE__ */ jsx46(
4721
4778
  "div",
4722
4779
  {
4723
4780
  "data-slot": "context-menu-label",
@@ -4728,7 +4785,7 @@ function ContextMenuLabel({ className, inset, ...props }) {
4728
4785
  );
4729
4786
  }
4730
4787
  function ContextMenuSeparator({ className, ...props }) {
4731
- return /* @__PURE__ */ jsx45(
4788
+ return /* @__PURE__ */ jsx46(
4732
4789
  "div",
4733
4790
  {
4734
4791
  "data-slot": "context-menu-separator",
@@ -4739,7 +4796,7 @@ function ContextMenuSeparator({ className, ...props }) {
4739
4796
  );
4740
4797
  }
4741
4798
  function ContextMenuShortcut({ className, ...props }) {
4742
- return /* @__PURE__ */ jsx45(
4799
+ return /* @__PURE__ */ jsx46(
4743
4800
  "span",
4744
4801
  {
4745
4802
  "data-slot": "context-menu-shortcut",
@@ -4748,17 +4805,17 @@ function ContextMenuShortcut({ className, ...props }) {
4748
4805
  }
4749
4806
  );
4750
4807
  }
4751
- var ContextMenuSubContext = React55.createContext(null);
4808
+ var ContextMenuSubContext = React56.createContext(null);
4752
4809
  function ContextMenuSub({ open, defaultOpen = false, onOpenChange, children }) {
4753
4810
  const [isOpen, setOpen] = useControllableState({
4754
4811
  ...open !== void 0 ? { value: open } : {},
4755
4812
  defaultValue: defaultOpen,
4756
4813
  ...onOpenChange ? { onChange: onOpenChange } : {}
4757
4814
  });
4758
- return /* @__PURE__ */ jsx45(ContextMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-sub", children }) });
4815
+ return /* @__PURE__ */ jsx46(ContextMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "context-menu-sub", children }) });
4759
4816
  }
4760
4817
  function ContextMenuSubTrigger({ className, inset, children, onClick, ...props }) {
4761
- const ctx = React55.useContext(ContextMenuSubContext);
4818
+ const ctx = React56.useContext(ContextMenuSubContext);
4762
4819
  return /* @__PURE__ */ jsxs16(
4763
4820
  "div",
4764
4821
  {
@@ -4780,15 +4837,15 @@ function ContextMenuSubTrigger({ className, inset, children, onClick, ...props }
4780
4837
  ...props,
4781
4838
  children: [
4782
4839
  children,
4783
- /* @__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" }) })
4840
+ /* @__PURE__ */ jsx46("svg", { className: "ml-auto", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx46("path", { d: "m9 18 6-6-6-6" }) })
4784
4841
  ]
4785
4842
  }
4786
4843
  );
4787
4844
  }
4788
4845
  function ContextMenuSubContent({ className, children, ...props }) {
4789
- const ctx = React55.useContext(ContextMenuSubContext);
4846
+ const ctx = React56.useContext(ContextMenuSubContext);
4790
4847
  if (!ctx?.open) return null;
4791
- return /* @__PURE__ */ jsx45(
4848
+ return /* @__PURE__ */ jsx46(
4792
4849
  "div",
4793
4850
  {
4794
4851
  "data-slot": "context-menu-sub-content",
@@ -4805,7 +4862,7 @@ function ContextMenuSubContent({ className, children, ...props }) {
4805
4862
  }
4806
4863
 
4807
4864
  // src/components/menubar.tsx
4808
- import * as React56 from "react";
4865
+ import * as React57 from "react";
4809
4866
 
4810
4867
  // src/generated/menubar.ts
4811
4868
  var MENUBAR_ROOT = "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs";
@@ -4822,16 +4879,16 @@ var MENUBAR_SUB_TRIGGER = "focus:bg-hover focus:text-ink data-[state=open]:bg-ho
4822
4879
  var MENUBAR_SUB_CONTENT = "bg-popover text-ink 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";
4823
4880
 
4824
4881
  // src/components/menubar.tsx
4825
- import { jsx as jsx46, jsxs as jsxs17 } from "react/jsx-runtime";
4826
- var MenubarMenuContext = React56.createContext(null);
4882
+ import { jsx as jsx47, jsxs as jsxs17 } from "react/jsx-runtime";
4883
+ var MenubarMenuContext = React57.createContext(null);
4827
4884
  function useMenu() {
4828
- const ctx = React56.useContext(MenubarMenuContext);
4885
+ const ctx = React57.useContext(MenubarMenuContext);
4829
4886
  if (!ctx) throw new Error("Menubar parts must be used within <MenubarMenu>");
4830
4887
  return ctx;
4831
4888
  }
4832
- var MenubarRadioGroupContext = React56.createContext(null);
4889
+ var MenubarRadioGroupContext = React57.createContext(null);
4833
4890
  function Menubar({ className, ...props }) {
4834
- return /* @__PURE__ */ jsx46(
4891
+ return /* @__PURE__ */ jsx47(
4835
4892
  "div",
4836
4893
  {
4837
4894
  "data-slot": "menubar",
@@ -4847,12 +4904,12 @@ function MenubarMenu({ open, defaultOpen = false, onOpenChange, children }) {
4847
4904
  defaultValue: defaultOpen,
4848
4905
  onChange: onOpenChange
4849
4906
  });
4850
- const triggerRef = React56.useRef(null);
4851
- return /* @__PURE__ */ jsx46(MenubarMenuContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-menu", className: "relative", children }) });
4907
+ const triggerRef = React57.useRef(null);
4908
+ return /* @__PURE__ */ jsx47(MenubarMenuContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children: /* @__PURE__ */ jsx47("div", { "data-slot": "menubar-menu", className: "relative", children }) });
4852
4909
  }
4853
4910
  function MenubarTrigger({ className, onClick, ...props }) {
4854
4911
  const { open, setOpen, triggerRef } = useMenu();
4855
- return /* @__PURE__ */ jsx46(
4912
+ return /* @__PURE__ */ jsx47(
4856
4913
  "button",
4857
4914
  {
4858
4915
  ref: triggerRef,
@@ -4888,10 +4945,10 @@ function MenubarContent({
4888
4945
  onDismiss: () => setOpen(false),
4889
4946
  exclude: [triggerRef]
4890
4947
  });
4891
- const items = React56.Children.toArray(children);
4948
+ const items = React57.Children.toArray(children);
4892
4949
  const { onKeyDown } = useRovingFocus({ count: items.length, orientation: "vertical" });
4893
4950
  if (!isPresent) return null;
4894
- return /* @__PURE__ */ jsx46(Portal, { children: /* @__PURE__ */ jsx46(
4951
+ return /* @__PURE__ */ jsx47(Portal, { children: /* @__PURE__ */ jsx47(
4895
4952
  "div",
4896
4953
  {
4897
4954
  ref: mergeRefs(presenceRef, floatingRef, dismissRef),
@@ -4908,7 +4965,7 @@ function MenubarContent({
4908
4965
  ) });
4909
4966
  }
4910
4967
  function MenubarGroup({ className, ...props }) {
4911
- return /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-group", role: "group", className, ...props });
4968
+ return /* @__PURE__ */ jsx47("div", { "data-slot": "menubar-group", role: "group", className, ...props });
4912
4969
  }
4913
4970
  function MenubarItem({
4914
4971
  className,
@@ -4916,7 +4973,7 @@ function MenubarItem({
4916
4973
  variant = "neutral",
4917
4974
  ...props
4918
4975
  }) {
4919
- return /* @__PURE__ */ jsx46(
4976
+ return /* @__PURE__ */ jsx47(
4920
4977
  "div",
4921
4978
  {
4922
4979
  "data-slot": "menubar-item",
@@ -4945,7 +5002,7 @@ function MenubarCheckboxItem({
4945
5002
  className: cn(MENUBAR_CHECKBOX_ITEM, className),
4946
5003
  ...props,
4947
5004
  children: [
4948
- /* @__PURE__ */ jsx46("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx46(
5005
+ /* @__PURE__ */ jsx47("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx47(
4949
5006
  "svg",
4950
5007
  {
4951
5008
  className: "size-4",
@@ -4955,7 +5012,7 @@ function MenubarCheckboxItem({
4955
5012
  strokeWidth: "2",
4956
5013
  strokeLinecap: "round",
4957
5014
  strokeLinejoin: "round",
4958
- children: /* @__PURE__ */ jsx46("path", { d: "M20 6 9 17l-5-5" })
5015
+ children: /* @__PURE__ */ jsx47("path", { d: "M20 6 9 17l-5-5" })
4959
5016
  }
4960
5017
  ) }),
4961
5018
  children
@@ -4975,7 +5032,7 @@ function MenubarRadioGroup({
4975
5032
  defaultValue,
4976
5033
  onChange: onValueChange
4977
5034
  });
4978
- return /* @__PURE__ */ jsx46(MenubarRadioGroupContext.Provider, { value: { value: current, onValueChange: setValue }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-radio-group", role: "group", className, children }) });
5035
+ return /* @__PURE__ */ jsx47(MenubarRadioGroupContext.Provider, { value: { value: current, onValueChange: setValue }, children: /* @__PURE__ */ jsx47("div", { "data-slot": "menubar-radio-group", role: "group", className, children }) });
4979
5036
  }
4980
5037
  function MenubarRadioItem({
4981
5038
  className,
@@ -4983,7 +5040,7 @@ function MenubarRadioItem({
4983
5040
  value,
4984
5041
  ...props
4985
5042
  }) {
4986
- const ctx = React56.useContext(MenubarRadioGroupContext);
5043
+ const ctx = React57.useContext(MenubarRadioGroupContext);
4987
5044
  const checked = ctx?.value === value;
4988
5045
  return /* @__PURE__ */ jsxs17(
4989
5046
  "div",
@@ -4996,7 +5053,7 @@ function MenubarRadioItem({
4996
5053
  onClick: () => ctx?.onValueChange(value),
4997
5054
  ...props,
4998
5055
  children: [
4999
- /* @__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" }) }) }),
5056
+ /* @__PURE__ */ jsx47("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx47("svg", { className: "size-2 fill-current", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx47("circle", { cx: "12", cy: "12", r: "10" }) }) }),
5000
5057
  children
5001
5058
  ]
5002
5059
  }
@@ -5007,7 +5064,7 @@ function MenubarLabel({
5007
5064
  inset,
5008
5065
  ...props
5009
5066
  }) {
5010
- return /* @__PURE__ */ jsx46(
5067
+ return /* @__PURE__ */ jsx47(
5011
5068
  "div",
5012
5069
  {
5013
5070
  "data-slot": "menubar-label",
@@ -5018,7 +5075,7 @@ function MenubarLabel({
5018
5075
  );
5019
5076
  }
5020
5077
  function MenubarSeparator({ className, ...props }) {
5021
- return /* @__PURE__ */ jsx46(
5078
+ return /* @__PURE__ */ jsx47(
5022
5079
  "div",
5023
5080
  {
5024
5081
  "data-slot": "menubar-separator",
@@ -5029,7 +5086,7 @@ function MenubarSeparator({ className, ...props }) {
5029
5086
  );
5030
5087
  }
5031
5088
  function MenubarShortcut({ className, ...props }) {
5032
- return /* @__PURE__ */ jsx46(
5089
+ return /* @__PURE__ */ jsx47(
5033
5090
  "span",
5034
5091
  {
5035
5092
  "data-slot": "menubar-shortcut",
@@ -5038,9 +5095,9 @@ function MenubarShortcut({ className, ...props }) {
5038
5095
  }
5039
5096
  );
5040
5097
  }
5041
- var MenubarSubContext = React56.createContext(null);
5098
+ var MenubarSubContext = React57.createContext(null);
5042
5099
  function useSub() {
5043
- const ctx = React56.useContext(MenubarSubContext);
5100
+ const ctx = React57.useContext(MenubarSubContext);
5044
5101
  if (!ctx) throw new Error("MenubarSub parts must be used within <MenubarSub>");
5045
5102
  return ctx;
5046
5103
  }
@@ -5050,7 +5107,7 @@ function MenubarSub({ open, defaultOpen = false, onOpenChange, children }) {
5050
5107
  defaultValue: defaultOpen,
5051
5108
  onChange: onOpenChange
5052
5109
  });
5053
- return /* @__PURE__ */ jsx46(MenubarSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-sub", className: "relative", children }) });
5110
+ return /* @__PURE__ */ jsx47(MenubarSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx47("div", { "data-slot": "menubar-sub", className: "relative", children }) });
5054
5111
  }
5055
5112
  function MenubarSubTrigger({
5056
5113
  className,
@@ -5076,7 +5133,7 @@ function MenubarSubTrigger({
5076
5133
  ...props,
5077
5134
  children: [
5078
5135
  children,
5079
- /* @__PURE__ */ jsx46(
5136
+ /* @__PURE__ */ jsx47(
5080
5137
  "svg",
5081
5138
  {
5082
5139
  className: "ml-auto h-4 w-4",
@@ -5086,7 +5143,7 @@ function MenubarSubTrigger({
5086
5143
  strokeWidth: "2",
5087
5144
  strokeLinecap: "round",
5088
5145
  strokeLinejoin: "round",
5089
- children: /* @__PURE__ */ jsx46("path", { d: "m9 18 6-6-6-6" })
5146
+ children: /* @__PURE__ */ jsx47("path", { d: "m9 18 6-6-6-6" })
5090
5147
  }
5091
5148
  )
5092
5149
  ]
@@ -5097,7 +5154,7 @@ function MenubarSubContent({ className, children, ...props }) {
5097
5154
  const { open } = useSub();
5098
5155
  const { isPresent, ref } = usePresence(open);
5099
5156
  if (!isPresent) return null;
5100
- return /* @__PURE__ */ jsx46(
5157
+ return /* @__PURE__ */ jsx47(
5101
5158
  "div",
5102
5159
  {
5103
5160
  ref,
@@ -5112,7 +5169,7 @@ function MenubarSubContent({ className, children, ...props }) {
5112
5169
  }
5113
5170
 
5114
5171
  // src/components/navigation-menu.tsx
5115
- import * as React57 from "react";
5172
+ import * as React58 from "react";
5116
5173
 
5117
5174
  // src/generated/navigation-menu.ts
5118
5175
  var NAVIGATION_MENU = "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center";
@@ -5125,13 +5182,13 @@ var NAVIGATION_MENU_INDICATOR = "data-[state=visible]:animate-in data-[state=hid
5125
5182
  var NAVIGATION_MENU_VIEWPORT = "origin-top-center bg-popover text-ink 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)]";
5126
5183
 
5127
5184
  // src/components/navigation-menu.tsx
5128
- import { jsx as jsx47, jsxs as jsxs18 } from "react/jsx-runtime";
5185
+ import { jsx as jsx48, jsxs as jsxs18 } from "react/jsx-runtime";
5129
5186
  function navigationMenuTriggerStyle() {
5130
5187
  return NAVIGATION_MENU_TRIGGER_STYLE;
5131
5188
  }
5132
- var NavigationMenuItemContext = React57.createContext(null);
5189
+ var NavigationMenuItemContext = React58.createContext(null);
5133
5190
  function useItem() {
5134
- const ctx = React57.useContext(NavigationMenuItemContext);
5191
+ const ctx = React58.useContext(NavigationMenuItemContext);
5135
5192
  if (!ctx) throw new Error("NavigationMenu parts must be used within <NavigationMenuItem>");
5136
5193
  return ctx;
5137
5194
  }
@@ -5154,13 +5211,13 @@ function NavigationMenu({
5154
5211
  ...props,
5155
5212
  children: [
5156
5213
  children,
5157
- viewport && /* @__PURE__ */ jsx47(NavigationMenuViewport, {})
5214
+ viewport && /* @__PURE__ */ jsx48(NavigationMenuViewport, {})
5158
5215
  ]
5159
5216
  }
5160
5217
  );
5161
5218
  }
5162
5219
  function NavigationMenuList({ className, ...props }) {
5163
- return /* @__PURE__ */ jsx47(
5220
+ return /* @__PURE__ */ jsx48(
5164
5221
  "ul",
5165
5222
  {
5166
5223
  "data-slot": "navigation-menu-list",
@@ -5186,8 +5243,8 @@ function NavigationMenuItem({
5186
5243
  defaultValue: defaultOpen,
5187
5244
  onChange: onOpenChange
5188
5245
  });
5189
- const triggerRef = React57.useRef(null);
5190
- 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 }) });
5246
+ const triggerRef = React58.useRef(null);
5247
+ return /* @__PURE__ */ jsx48(NavigationMenuItemContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children: /* @__PURE__ */ jsx48("li", { "data-slot": "navigation-menu-item", className: cn(NAVIGATION_MENU_ITEM, className), ...props, children }) });
5191
5248
  }
5192
5249
  function NavigationMenuTrigger({
5193
5250
  className,
@@ -5212,7 +5269,7 @@ function NavigationMenuTrigger({
5212
5269
  children: [
5213
5270
  children,
5214
5271
  " ",
5215
- /* @__PURE__ */ jsx47(
5272
+ /* @__PURE__ */ jsx48(
5216
5273
  "svg",
5217
5274
  {
5218
5275
  className: "relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
@@ -5223,7 +5280,7 @@ function NavigationMenuTrigger({
5223
5280
  strokeLinecap: "round",
5224
5281
  strokeLinejoin: "round",
5225
5282
  "aria-hidden": "true",
5226
- children: /* @__PURE__ */ jsx47("path", { d: "m6 9 6 6 6-6" })
5283
+ children: /* @__PURE__ */ jsx48("path", { d: "m6 9 6 6 6-6" })
5227
5284
  }
5228
5285
  )
5229
5286
  ]
@@ -5239,7 +5296,7 @@ function NavigationMenuContent({ className, children, ...props }) {
5239
5296
  exclude: [triggerRef]
5240
5297
  });
5241
5298
  if (!isPresent) return null;
5242
- return /* @__PURE__ */ jsx47(
5299
+ return /* @__PURE__ */ jsx48(
5243
5300
  "div",
5244
5301
  {
5245
5302
  ref: mergeRefs(presenceRef, dismissRef),
@@ -5255,7 +5312,7 @@ function NavigationMenuContent({ className, children, ...props }) {
5255
5312
  );
5256
5313
  }
5257
5314
  function NavigationMenuViewport({ className, ...props }) {
5258
- return /* @__PURE__ */ jsx47("div", { className: "absolute top-full left-0 isolate z-50 flex justify-center", children: /* @__PURE__ */ jsx47(
5315
+ return /* @__PURE__ */ jsx48("div", { className: "absolute top-full left-0 isolate z-50 flex justify-center", children: /* @__PURE__ */ jsx48(
5259
5316
  "div",
5260
5317
  {
5261
5318
  "data-slot": "navigation-menu-viewport",
@@ -5273,7 +5330,7 @@ function NavigationMenuLink({
5273
5330
  ...props
5274
5331
  }) {
5275
5332
  const Comp = asChild ? Slot : "a";
5276
- return /* @__PURE__ */ jsx47(
5333
+ return /* @__PURE__ */ jsx48(
5277
5334
  Comp,
5278
5335
  {
5279
5336
  "data-slot": "navigation-menu-link",
@@ -5286,7 +5343,7 @@ function NavigationMenuLink({
5286
5343
  );
5287
5344
  }
5288
5345
  function NavigationMenuIndicator({ className, ...props }) {
5289
- return /* @__PURE__ */ jsx47(
5346
+ return /* @__PURE__ */ jsx48(
5290
5347
  "div",
5291
5348
  {
5292
5349
  "data-slot": "navigation-menu-indicator",
@@ -5295,13 +5352,13 @@ function NavigationMenuIndicator({ className, ...props }) {
5295
5352
  className
5296
5353
  ),
5297
5354
  ...props,
5298
- children: /* @__PURE__ */ jsx47("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
5355
+ children: /* @__PURE__ */ jsx48("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
5299
5356
  }
5300
5357
  );
5301
5358
  }
5302
5359
 
5303
5360
  // src/components/dialog.tsx
5304
- import * as React58 from "react";
5361
+ import * as React59 from "react";
5305
5362
 
5306
5363
  // src/generated/dialog.ts
5307
5364
  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";
@@ -5313,10 +5370,10 @@ var DIALOG_TITLE = "text-lg leading-none font-semibold";
5313
5370
  var DIALOG_DESCRIPTION = "text-ink-soft text-sm";
5314
5371
 
5315
5372
  // src/components/dialog.tsx
5316
- import { Fragment as Fragment6, jsx as jsx48, jsxs as jsxs19 } from "react/jsx-runtime";
5317
- var DialogContext = React58.createContext(null);
5373
+ import { Fragment as Fragment6, jsx as jsx49, jsxs as jsxs19 } from "react/jsx-runtime";
5374
+ var DialogContext = React59.createContext(null);
5318
5375
  function useDialog() {
5319
- const ctx = React58.useContext(DialogContext);
5376
+ const ctx = React59.useContext(DialogContext);
5320
5377
  if (!ctx) throw new Error("Dialog parts must be used within <Dialog>");
5321
5378
  return ctx;
5322
5379
  }
@@ -5326,13 +5383,13 @@ function Dialog({ open, defaultOpen = false, onOpenChange, children }) {
5326
5383
  defaultValue: defaultOpen,
5327
5384
  ...onOpenChange ? { onChange: onOpenChange } : {}
5328
5385
  });
5329
- const triggerRef = React58.useRef(null);
5330
- return /* @__PURE__ */ jsx48(DialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5386
+ const triggerRef = React59.useRef(null);
5387
+ return /* @__PURE__ */ jsx49(DialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5331
5388
  }
5332
5389
  function DialogTrigger({ asChild = false, onClick, ...props }) {
5333
5390
  const { open, setOpen, triggerRef } = useDialog();
5334
5391
  const Comp = asChild ? Slot : "button";
5335
- return /* @__PURE__ */ jsx48(
5392
+ return /* @__PURE__ */ jsx49(
5336
5393
  Comp,
5337
5394
  {
5338
5395
  "data-slot": "dialog-trigger",
@@ -5347,11 +5404,11 @@ function DialogTrigger({ asChild = false, onClick, ...props }) {
5347
5404
  );
5348
5405
  }
5349
5406
  function DialogPortal({ children }) {
5350
- return /* @__PURE__ */ jsx48(Fragment6, { children });
5407
+ return /* @__PURE__ */ jsx49(Fragment6, { children });
5351
5408
  }
5352
5409
  function DialogOverlay({ className, ...props }) {
5353
5410
  const { open, setOpen } = useDialog();
5354
- return /* @__PURE__ */ jsx48(
5411
+ return /* @__PURE__ */ jsx49(
5355
5412
  "div",
5356
5413
  {
5357
5414
  "data-slot": "dialog-overlay",
@@ -5362,7 +5419,7 @@ function DialogOverlay({ className, ...props }) {
5362
5419
  }
5363
5420
  );
5364
5421
  }
5365
- var XIcon = (props) => /* @__PURE__ */ jsx48(
5422
+ var XIcon = (props) => /* @__PURE__ */ jsx49(
5366
5423
  "svg",
5367
5424
  {
5368
5425
  xmlns: "http://www.w3.org/2000/svg",
@@ -5375,7 +5432,7 @@ var XIcon = (props) => /* @__PURE__ */ jsx48(
5375
5432
  strokeLinecap: "round",
5376
5433
  strokeLinejoin: "round",
5377
5434
  ...props,
5378
- children: /* @__PURE__ */ jsx48("path", { d: "M18 6 6 18M6 6l12 12" })
5435
+ children: /* @__PURE__ */ jsx49("path", { d: "M18 6 6 18M6 6l12 12" })
5379
5436
  }
5380
5437
  );
5381
5438
  function DialogContent({
@@ -5392,7 +5449,7 @@ function DialogContent({
5392
5449
  onDismiss: () => setOpen(false),
5393
5450
  exclude: [triggerRef]
5394
5451
  });
5395
- React58.useEffect(() => {
5452
+ React59.useEffect(() => {
5396
5453
  if (!open) return;
5397
5454
  const prev = document.body.style.overflow;
5398
5455
  document.body.style.overflow = "hidden";
@@ -5402,7 +5459,7 @@ function DialogContent({
5402
5459
  }, [open]);
5403
5460
  if (!isPresent) return null;
5404
5461
  return /* @__PURE__ */ jsxs19(Portal, { children: [
5405
- /* @__PURE__ */ jsx48(DialogOverlay, {}),
5462
+ /* @__PURE__ */ jsx49(DialogOverlay, {}),
5406
5463
  /* @__PURE__ */ jsxs19(
5407
5464
  "div",
5408
5465
  {
@@ -5423,8 +5480,8 @@ function DialogContent({
5423
5480
  onClick: () => setOpen(false),
5424
5481
  className: DIALOG_CLOSE,
5425
5482
  children: [
5426
- /* @__PURE__ */ jsx48(XIcon, {}),
5427
- /* @__PURE__ */ jsx48("span", { className: "sr-only", children: "Close" })
5483
+ /* @__PURE__ */ jsx49(XIcon, {}),
5484
+ /* @__PURE__ */ jsx49("span", { className: "sr-only", children: "Close" })
5428
5485
  ]
5429
5486
  }
5430
5487
  )
@@ -5436,7 +5493,7 @@ function DialogContent({
5436
5493
  function DialogClose({ asChild = false, onClick, ...props }) {
5437
5494
  const { setOpen } = useDialog();
5438
5495
  const Comp = asChild ? Slot : "button";
5439
- return /* @__PURE__ */ jsx48(
5496
+ return /* @__PURE__ */ jsx49(
5440
5497
  Comp,
5441
5498
  {
5442
5499
  "data-slot": "dialog-close",
@@ -5449,7 +5506,7 @@ function DialogClose({ asChild = false, onClick, ...props }) {
5449
5506
  );
5450
5507
  }
5451
5508
  function DialogHeader({ className, ...props }) {
5452
- return /* @__PURE__ */ jsx48(
5509
+ return /* @__PURE__ */ jsx49(
5453
5510
  "div",
5454
5511
  {
5455
5512
  "data-slot": "dialog-header",
@@ -5459,7 +5516,7 @@ function DialogHeader({ className, ...props }) {
5459
5516
  );
5460
5517
  }
5461
5518
  function DialogFooter({ className, ...props }) {
5462
- return /* @__PURE__ */ jsx48(
5519
+ return /* @__PURE__ */ jsx49(
5463
5520
  "div",
5464
5521
  {
5465
5522
  "data-slot": "dialog-footer",
@@ -5469,7 +5526,7 @@ function DialogFooter({ className, ...props }) {
5469
5526
  );
5470
5527
  }
5471
5528
  function DialogTitle({ className, ...props }) {
5472
- return /* @__PURE__ */ jsx48(
5529
+ return /* @__PURE__ */ jsx49(
5473
5530
  "h2",
5474
5531
  {
5475
5532
  "data-slot": "dialog-title",
@@ -5479,7 +5536,7 @@ function DialogTitle({ className, ...props }) {
5479
5536
  );
5480
5537
  }
5481
5538
  function DialogDescription({ className, ...props }) {
5482
- return /* @__PURE__ */ jsx48(
5539
+ return /* @__PURE__ */ jsx49(
5483
5540
  "p",
5484
5541
  {
5485
5542
  "data-slot": "dialog-description",
@@ -5490,7 +5547,7 @@ function DialogDescription({ className, ...props }) {
5490
5547
  }
5491
5548
 
5492
5549
  // src/components/alert-dialog.tsx
5493
- import * as React59 from "react";
5550
+ import * as React60 from "react";
5494
5551
 
5495
5552
  // src/generated/alert-dialog.ts
5496
5553
  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";
@@ -5501,10 +5558,10 @@ var ALERT_DIALOG_TITLE = "text-lg font-semibold";
5501
5558
  var ALERT_DIALOG_DESCRIPTION = "text-ink-soft text-sm";
5502
5559
 
5503
5560
  // src/components/alert-dialog.tsx
5504
- import { jsx as jsx49, jsxs as jsxs20 } from "react/jsx-runtime";
5505
- var AlertDialogContext = React59.createContext(null);
5561
+ import { jsx as jsx50, jsxs as jsxs20 } from "react/jsx-runtime";
5562
+ var AlertDialogContext = React60.createContext(null);
5506
5563
  function useAlertDialog() {
5507
- const ctx = React59.useContext(AlertDialogContext);
5564
+ const ctx = React60.useContext(AlertDialogContext);
5508
5565
  if (!ctx) throw new Error("AlertDialog parts must be used within <AlertDialog>");
5509
5566
  return ctx;
5510
5567
  }
@@ -5514,13 +5571,13 @@ function AlertDialog({ open, defaultOpen = false, onOpenChange, children }) {
5514
5571
  defaultValue: defaultOpen,
5515
5572
  ...onOpenChange ? { onChange: onOpenChange } : {}
5516
5573
  });
5517
- const triggerRef = React59.useRef(null);
5518
- return /* @__PURE__ */ jsx49(AlertDialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5574
+ const triggerRef = React60.useRef(null);
5575
+ return /* @__PURE__ */ jsx50(AlertDialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5519
5576
  }
5520
5577
  function AlertDialogTrigger({ asChild = false, onClick, ...props }) {
5521
5578
  const { open, setOpen, triggerRef } = useAlertDialog();
5522
5579
  const Comp = asChild ? Slot : "button";
5523
- return /* @__PURE__ */ jsx49(
5580
+ return /* @__PURE__ */ jsx50(
5524
5581
  Comp,
5525
5582
  {
5526
5583
  "data-slot": "alert-dialog-trigger",
@@ -5536,7 +5593,7 @@ function AlertDialogTrigger({ asChild = false, onClick, ...props }) {
5536
5593
  }
5537
5594
  function AlertDialogOverlay({ className, ...props }) {
5538
5595
  const { open, setOpen } = useAlertDialog();
5539
- return /* @__PURE__ */ jsx49(
5596
+ return /* @__PURE__ */ jsx50(
5540
5597
  "div",
5541
5598
  {
5542
5599
  "data-slot": "alert-dialog-overlay",
@@ -5558,8 +5615,8 @@ function AlertDialogContent({ className, children, ...props }) {
5558
5615
  });
5559
5616
  if (!isPresent) return null;
5560
5617
  return /* @__PURE__ */ jsxs20(Portal, { children: [
5561
- /* @__PURE__ */ jsx49(AlertDialogOverlay, {}),
5562
- /* @__PURE__ */ jsx49(
5618
+ /* @__PURE__ */ jsx50(AlertDialogOverlay, {}),
5619
+ /* @__PURE__ */ jsx50(
5563
5620
  "div",
5564
5621
  {
5565
5622
  "data-slot": "alert-dialog-content",
@@ -5575,7 +5632,7 @@ function AlertDialogContent({ className, children, ...props }) {
5575
5632
  ] });
5576
5633
  }
5577
5634
  function AlertDialogHeader({ className, ...props }) {
5578
- return /* @__PURE__ */ jsx49(
5635
+ return /* @__PURE__ */ jsx50(
5579
5636
  "div",
5580
5637
  {
5581
5638
  "data-slot": "alert-dialog-header",
@@ -5585,7 +5642,7 @@ function AlertDialogHeader({ className, ...props }) {
5585
5642
  );
5586
5643
  }
5587
5644
  function AlertDialogFooter({ className, ...props }) {
5588
- return /* @__PURE__ */ jsx49(
5645
+ return /* @__PURE__ */ jsx50(
5589
5646
  "div",
5590
5647
  {
5591
5648
  "data-slot": "alert-dialog-footer",
@@ -5595,7 +5652,7 @@ function AlertDialogFooter({ className, ...props }) {
5595
5652
  );
5596
5653
  }
5597
5654
  function AlertDialogTitle({ className, ...props }) {
5598
- return /* @__PURE__ */ jsx49(
5655
+ return /* @__PURE__ */ jsx50(
5599
5656
  "h2",
5600
5657
  {
5601
5658
  "data-slot": "alert-dialog-title",
@@ -5605,7 +5662,7 @@ function AlertDialogTitle({ className, ...props }) {
5605
5662
  );
5606
5663
  }
5607
5664
  function AlertDialogDescription({ className, ...props }) {
5608
- return /* @__PURE__ */ jsx49(
5665
+ return /* @__PURE__ */ jsx50(
5609
5666
  "p",
5610
5667
  {
5611
5668
  "data-slot": "alert-dialog-description",
@@ -5616,7 +5673,7 @@ function AlertDialogDescription({ className, ...props }) {
5616
5673
  }
5617
5674
  function AlertDialogAction({ className, onClick, ...props }) {
5618
5675
  const { setOpen } = useAlertDialog();
5619
- return /* @__PURE__ */ jsx49(
5676
+ return /* @__PURE__ */ jsx50(
5620
5677
  "button",
5621
5678
  {
5622
5679
  "data-slot": "alert-dialog-action",
@@ -5631,7 +5688,7 @@ function AlertDialogAction({ className, onClick, ...props }) {
5631
5688
  }
5632
5689
  function AlertDialogCancel({ className, onClick, ...props }) {
5633
5690
  const { setOpen } = useAlertDialog();
5634
- return /* @__PURE__ */ jsx49(
5691
+ return /* @__PURE__ */ jsx50(
5635
5692
  "button",
5636
5693
  {
5637
5694
  "data-slot": "alert-dialog-cancel",
@@ -5646,7 +5703,7 @@ function AlertDialogCancel({ className, onClick, ...props }) {
5646
5703
  }
5647
5704
 
5648
5705
  // src/components/sheet.tsx
5649
- import * as React60 from "react";
5706
+ import * as React61 from "react";
5650
5707
 
5651
5708
  // src/generated/sheet.ts
5652
5709
  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";
@@ -5662,10 +5719,10 @@ var SHEET_TITLE = "text-ink font-semibold";
5662
5719
  var SHEET_DESCRIPTION = "text-ink-soft text-sm";
5663
5720
 
5664
5721
  // src/components/sheet.tsx
5665
- import { jsx as jsx50, jsxs as jsxs21 } from "react/jsx-runtime";
5666
- var SheetContext = React60.createContext(null);
5722
+ import { jsx as jsx51, jsxs as jsxs21 } from "react/jsx-runtime";
5723
+ var SheetContext = React61.createContext(null);
5667
5724
  function useSheet() {
5668
- const ctx = React60.useContext(SheetContext);
5725
+ const ctx = React61.useContext(SheetContext);
5669
5726
  if (!ctx) throw new Error("Sheet parts must be used within <Sheet>");
5670
5727
  return ctx;
5671
5728
  }
@@ -5675,13 +5732,13 @@ function Sheet({ open, defaultOpen = false, onOpenChange, children }) {
5675
5732
  defaultValue: defaultOpen,
5676
5733
  ...onOpenChange ? { onChange: onOpenChange } : {}
5677
5734
  });
5678
- const triggerRef = React60.useRef(null);
5679
- return /* @__PURE__ */ jsx50(SheetContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5735
+ const triggerRef = React61.useRef(null);
5736
+ return /* @__PURE__ */ jsx51(SheetContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5680
5737
  }
5681
5738
  function SheetTrigger({ asChild = false, onClick, ...props }) {
5682
5739
  const { open, setOpen, triggerRef } = useSheet();
5683
5740
  const Comp = asChild ? Slot : "button";
5684
- return /* @__PURE__ */ jsx50(
5741
+ return /* @__PURE__ */ jsx51(
5685
5742
  Comp,
5686
5743
  {
5687
5744
  "data-slot": "sheet-trigger",
@@ -5697,7 +5754,7 @@ function SheetTrigger({ asChild = false, onClick, ...props }) {
5697
5754
  }
5698
5755
  function SheetOverlay({ className, ...props }) {
5699
5756
  const { open, setOpen } = useSheet();
5700
- return /* @__PURE__ */ jsx50(
5757
+ return /* @__PURE__ */ jsx51(
5701
5758
  "div",
5702
5759
  {
5703
5760
  "data-slot": "sheet-overlay",
@@ -5714,7 +5771,7 @@ var sheetSideClasses = {
5714
5771
  top: SHEET_SIDE_TOP,
5715
5772
  bottom: SHEET_SIDE_BOTTOM
5716
5773
  };
5717
- var XIcon2 = (props) => /* @__PURE__ */ jsx50(
5774
+ var XIcon2 = (props) => /* @__PURE__ */ jsx51(
5718
5775
  "svg",
5719
5776
  {
5720
5777
  xmlns: "http://www.w3.org/2000/svg",
@@ -5727,7 +5784,7 @@ var XIcon2 = (props) => /* @__PURE__ */ jsx50(
5727
5784
  strokeLinecap: "round",
5728
5785
  strokeLinejoin: "round",
5729
5786
  ...props,
5730
- children: /* @__PURE__ */ jsx50("path", { d: "M18 6 6 18M6 6l12 12" })
5787
+ children: /* @__PURE__ */ jsx51("path", { d: "M18 6 6 18M6 6l12 12" })
5731
5788
  }
5732
5789
  );
5733
5790
  function SheetContent({ className, children, side = "right", ...props }) {
@@ -5741,7 +5798,7 @@ function SheetContent({ className, children, side = "right", ...props }) {
5741
5798
  });
5742
5799
  if (!isPresent) return null;
5743
5800
  return /* @__PURE__ */ jsxs21(Portal, { children: [
5744
- /* @__PURE__ */ jsx50(SheetOverlay, {}),
5801
+ /* @__PURE__ */ jsx51(SheetOverlay, {}),
5745
5802
  /* @__PURE__ */ jsxs21(
5746
5803
  "div",
5747
5804
  {
@@ -5762,8 +5819,8 @@ function SheetContent({ className, children, side = "right", ...props }) {
5762
5819
  onClick: () => setOpen(false),
5763
5820
  className: SHEET_CLOSE,
5764
5821
  children: [
5765
- /* @__PURE__ */ jsx50(XIcon2, { className: "size-4" }),
5766
- /* @__PURE__ */ jsx50("span", { className: "sr-only", children: "Close" })
5822
+ /* @__PURE__ */ jsx51(XIcon2, { className: "size-4" }),
5823
+ /* @__PURE__ */ jsx51("span", { className: "sr-only", children: "Close" })
5767
5824
  ]
5768
5825
  }
5769
5826
  )
@@ -5775,7 +5832,7 @@ function SheetContent({ className, children, side = "right", ...props }) {
5775
5832
  function SheetClose({ asChild = false, onClick, ...props }) {
5776
5833
  const { setOpen } = useSheet();
5777
5834
  const Comp = asChild ? Slot : "button";
5778
- return /* @__PURE__ */ jsx50(
5835
+ return /* @__PURE__ */ jsx51(
5779
5836
  Comp,
5780
5837
  {
5781
5838
  "data-slot": "sheet-close",
@@ -5788,7 +5845,7 @@ function SheetClose({ asChild = false, onClick, ...props }) {
5788
5845
  );
5789
5846
  }
5790
5847
  function SheetHeader({ className, ...props }) {
5791
- return /* @__PURE__ */ jsx50(
5848
+ return /* @__PURE__ */ jsx51(
5792
5849
  "div",
5793
5850
  {
5794
5851
  "data-slot": "sheet-header",
@@ -5798,7 +5855,7 @@ function SheetHeader({ className, ...props }) {
5798
5855
  );
5799
5856
  }
5800
5857
  function SheetFooter({ className, ...props }) {
5801
- return /* @__PURE__ */ jsx50(
5858
+ return /* @__PURE__ */ jsx51(
5802
5859
  "div",
5803
5860
  {
5804
5861
  "data-slot": "sheet-footer",
@@ -5808,7 +5865,7 @@ function SheetFooter({ className, ...props }) {
5808
5865
  );
5809
5866
  }
5810
5867
  function SheetTitle({ className, ...props }) {
5811
- return /* @__PURE__ */ jsx50(
5868
+ return /* @__PURE__ */ jsx51(
5812
5869
  "h2",
5813
5870
  {
5814
5871
  "data-slot": "sheet-title",
@@ -5818,7 +5875,7 @@ function SheetTitle({ className, ...props }) {
5818
5875
  );
5819
5876
  }
5820
5877
  function SheetDescription({ className, ...props }) {
5821
- return /* @__PURE__ */ jsx50(
5878
+ return /* @__PURE__ */ jsx51(
5822
5879
  "p",
5823
5880
  {
5824
5881
  "data-slot": "sheet-description",
@@ -5829,7 +5886,7 @@ function SheetDescription({ className, ...props }) {
5829
5886
  }
5830
5887
 
5831
5888
  // src/components/drawer.tsx
5832
- import * as React61 from "react";
5889
+ import * as React62 from "react";
5833
5890
 
5834
5891
  // src/generated/drawer.ts
5835
5892
  var DRAWER_CONTENT_BASE = "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex h-auto border transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500";
@@ -5847,10 +5904,10 @@ var DRAWER_TITLE = "text-ink font-semibold";
5847
5904
  var DRAWER_DESCRIPTION = "text-ink-soft text-sm";
5848
5905
 
5849
5906
  // src/components/drawer.tsx
5850
- import { jsx as jsx51, jsxs as jsxs22 } from "react/jsx-runtime";
5851
- var DrawerContext = React61.createContext(null);
5907
+ import { jsx as jsx52, jsxs as jsxs22 } from "react/jsx-runtime";
5908
+ var DrawerContext = React62.createContext(null);
5852
5909
  function useDrawer() {
5853
- const ctx = React61.useContext(DrawerContext);
5910
+ const ctx = React62.useContext(DrawerContext);
5854
5911
  if (!ctx) throw new Error("Drawer parts must be used within <Drawer>");
5855
5912
  return ctx;
5856
5913
  }
@@ -5866,12 +5923,12 @@ function Drawer({
5866
5923
  defaultValue: defaultOpen,
5867
5924
  ...onOpenChange ? { onChange: onOpenChange } : {}
5868
5925
  });
5869
- return /* @__PURE__ */ jsx51(DrawerContext.Provider, { value: { open: isOpen, setOpen, direction }, children: /* @__PURE__ */ jsx51("div", { "data-slot": "drawer", children }) });
5926
+ return /* @__PURE__ */ jsx52(DrawerContext.Provider, { value: { open: isOpen, setOpen, direction }, children: /* @__PURE__ */ jsx52("div", { "data-slot": "drawer", children }) });
5870
5927
  }
5871
5928
  function DrawerTrigger({ asChild = false, onClick, ...props }) {
5872
5929
  const { setOpen } = useDrawer();
5873
5930
  const Comp = asChild ? Slot : "button";
5874
- return /* @__PURE__ */ jsx51(
5931
+ return /* @__PURE__ */ jsx52(
5875
5932
  Comp,
5876
5933
  {
5877
5934
  "data-slot": "drawer-trigger",
@@ -5886,7 +5943,7 @@ function DrawerTrigger({ asChild = false, onClick, ...props }) {
5886
5943
  function DrawerClose({ asChild = false, onClick, ...props }) {
5887
5944
  const { setOpen } = useDrawer();
5888
5945
  const Comp = asChild ? Slot : "button";
5889
- return /* @__PURE__ */ jsx51(
5946
+ return /* @__PURE__ */ jsx52(
5890
5947
  Comp,
5891
5948
  {
5892
5949
  "data-slot": "drawer-close",
@@ -5901,7 +5958,7 @@ function DrawerClose({ asChild = false, onClick, ...props }) {
5901
5958
  function DrawerOverlay({ className, ...props }) {
5902
5959
  const { open, setOpen } = useDrawer();
5903
5960
  if (!open) return null;
5904
- return /* @__PURE__ */ jsx51(
5961
+ return /* @__PURE__ */ jsx52(
5905
5962
  "div",
5906
5963
  {
5907
5964
  "data-slot": "drawer-overlay",
@@ -5917,7 +5974,7 @@ function DrawerContent({ className, children, ...props }) {
5917
5974
  const scopeRef = useFocusScope(open);
5918
5975
  if (!open) return null;
5919
5976
  return /* @__PURE__ */ jsxs22(Portal, { children: [
5920
- /* @__PURE__ */ jsx51(
5977
+ /* @__PURE__ */ jsx52(
5921
5978
  "div",
5922
5979
  {
5923
5980
  "data-slot": "drawer-overlay",
@@ -5941,7 +5998,7 @@ function DrawerContent({ className, children, ...props }) {
5941
5998
  className: cn(DRAWER_CONTENT_BASE, drawerDirectionClasses[direction], className),
5942
5999
  ...props,
5943
6000
  children: [
5944
- direction === "bottom" ? /* @__PURE__ */ jsx51(
6001
+ direction === "bottom" ? /* @__PURE__ */ jsx52(
5945
6002
  "div",
5946
6003
  {
5947
6004
  "data-slot": "drawer-handle",
@@ -5955,7 +6012,7 @@ function DrawerContent({ className, children, ...props }) {
5955
6012
  ] });
5956
6013
  }
5957
6014
  function DrawerHeader({ className, ...props }) {
5958
- return /* @__PURE__ */ jsx51(
6015
+ return /* @__PURE__ */ jsx52(
5959
6016
  "div",
5960
6017
  {
5961
6018
  "data-slot": "drawer-header",
@@ -5965,7 +6022,7 @@ function DrawerHeader({ className, ...props }) {
5965
6022
  );
5966
6023
  }
5967
6024
  function DrawerFooter({ className, ...props }) {
5968
- return /* @__PURE__ */ jsx51(
6025
+ return /* @__PURE__ */ jsx52(
5969
6026
  "div",
5970
6027
  {
5971
6028
  "data-slot": "drawer-footer",
@@ -5975,7 +6032,7 @@ function DrawerFooter({ className, ...props }) {
5975
6032
  );
5976
6033
  }
5977
6034
  function DrawerTitle({ className, ...props }) {
5978
- return /* @__PURE__ */ jsx51(
6035
+ return /* @__PURE__ */ jsx52(
5979
6036
  "div",
5980
6037
  {
5981
6038
  "data-slot": "drawer-title",
@@ -5985,7 +6042,7 @@ function DrawerTitle({ className, ...props }) {
5985
6042
  );
5986
6043
  }
5987
6044
  function DrawerDescription({ className, ...props }) {
5988
- return /* @__PURE__ */ jsx51(
6045
+ return /* @__PURE__ */ jsx52(
5989
6046
  "div",
5990
6047
  {
5991
6048
  "data-slot": "drawer-description",
@@ -5996,11 +6053,11 @@ function DrawerDescription({ className, ...props }) {
5996
6053
  }
5997
6054
 
5998
6055
  // src/components/select.tsx
5999
- import * as React62 from "react";
6000
- import { jsx as jsx52, jsxs as jsxs23 } from "react/jsx-runtime";
6001
- var SelectContext = React62.createContext(null);
6056
+ import * as React63 from "react";
6057
+ import { jsx as jsx53, jsxs as jsxs23 } from "react/jsx-runtime";
6058
+ var SelectContext = React63.createContext(null);
6002
6059
  function useSelect() {
6003
- const ctx = React62.useContext(SelectContext);
6060
+ const ctx = React63.useContext(SelectContext);
6004
6061
  if (!ctx) throw new Error("Select parts must be used within <Select>");
6005
6062
  return ctx;
6006
6063
  }
@@ -6023,8 +6080,8 @@ function Select({
6023
6080
  defaultValue: defaultOpen,
6024
6081
  ...onOpenChange ? { onChange: onOpenChange } : {}
6025
6082
  });
6026
- const anchorRef = React62.useRef(null);
6027
- return /* @__PURE__ */ jsx52(
6083
+ const anchorRef = React63.useRef(null);
6084
+ return /* @__PURE__ */ jsx53(
6028
6085
  SelectContext.Provider,
6029
6086
  {
6030
6087
  value: { value: currentValue, setValue, open: isOpen, setOpen, anchorRef },
@@ -6061,7 +6118,7 @@ function SelectTrigger({
6061
6118
  ...props,
6062
6119
  children: [
6063
6120
  children,
6064
- /* @__PURE__ */ jsx52(
6121
+ /* @__PURE__ */ jsx53(
6065
6122
  "svg",
6066
6123
  {
6067
6124
  xmlns: "http://www.w3.org/2000/svg",
@@ -6075,7 +6132,7 @@ function SelectTrigger({
6075
6132
  strokeLinejoin: "round",
6076
6133
  className: "size-4 opacity-50",
6077
6134
  "aria-hidden": "true",
6078
- children: /* @__PURE__ */ jsx52("path", { d: "m6 9 6 6 6-6" })
6135
+ children: /* @__PURE__ */ jsx53("path", { d: "m6 9 6 6 6-6" })
6079
6136
  }
6080
6137
  )
6081
6138
  ]
@@ -6085,7 +6142,7 @@ function SelectTrigger({
6085
6142
  function SelectValue({ className, placeholder, ...props }) {
6086
6143
  const { value } = useSelect();
6087
6144
  const isEmpty = value === "";
6088
- return /* @__PURE__ */ jsx52(
6145
+ return /* @__PURE__ */ jsx53(
6089
6146
  "span",
6090
6147
  {
6091
6148
  "data-slot": "select-value",
@@ -6118,13 +6175,13 @@ function SelectContent({
6118
6175
  onDismiss: () => setOpen(false),
6119
6176
  exclude: [anchorRef]
6120
6177
  });
6121
- const items = React62.Children.toArray(children).filter(React62.isValidElement);
6178
+ const items = React63.Children.toArray(children).filter(React63.isValidElement);
6122
6179
  const { activeIndex, setActiveIndex, onKeyDown } = useRovingFocus({
6123
6180
  count: items.length,
6124
6181
  orientation: "vertical"
6125
6182
  });
6126
6183
  if (!isPresent) return null;
6127
- return /* @__PURE__ */ jsx52(Portal, { children: /* @__PURE__ */ jsx52(
6184
+ return /* @__PURE__ */ jsx53(Portal, { children: /* @__PURE__ */ jsx53(
6128
6185
  "div",
6129
6186
  {
6130
6187
  role: "listbox",
@@ -6140,8 +6197,8 @@ function SelectContent({
6140
6197
  className
6141
6198
  ),
6142
6199
  ...props,
6143
- children: /* @__PURE__ */ jsx52("div", { className: "p-1", children: items.map(
6144
- (child, index) => React62.cloneElement(child, {
6200
+ children: /* @__PURE__ */ jsx53("div", { className: "p-1", children: items.map(
6201
+ (child, index) => React63.cloneElement(child, {
6145
6202
  __index: index,
6146
6203
  __active: index === activeIndex,
6147
6204
  __setActive: setActiveIndex
@@ -6186,7 +6243,7 @@ function SelectItem({
6186
6243
  ),
6187
6244
  ...props,
6188
6245
  children: [
6189
- selected ? /* @__PURE__ */ jsx52("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx52(
6246
+ selected ? /* @__PURE__ */ jsx53("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx53(
6190
6247
  "svg",
6191
6248
  {
6192
6249
  xmlns: "http://www.w3.org/2000/svg",
@@ -6200,19 +6257,19 @@ function SelectItem({
6200
6257
  strokeLinejoin: "round",
6201
6258
  className: "size-4",
6202
6259
  "aria-hidden": "true",
6203
- children: /* @__PURE__ */ jsx52("path", { d: "M20 6 9 17l-5-5" })
6260
+ children: /* @__PURE__ */ jsx53("path", { d: "M20 6 9 17l-5-5" })
6204
6261
  }
6205
6262
  ) }) : null,
6206
- /* @__PURE__ */ jsx52("span", { children })
6263
+ /* @__PURE__ */ jsx53("span", { children })
6207
6264
  ]
6208
6265
  }
6209
6266
  );
6210
6267
  }
6211
6268
  function SelectGroup({ className, ...props }) {
6212
- return /* @__PURE__ */ jsx52("div", { role: "group", "data-slot": "select-group", className, ...props });
6269
+ return /* @__PURE__ */ jsx53("div", { role: "group", "data-slot": "select-group", className, ...props });
6213
6270
  }
6214
6271
  function SelectLabel({ className, ...props }) {
6215
- return /* @__PURE__ */ jsx52(
6272
+ return /* @__PURE__ */ jsx53(
6216
6273
  "div",
6217
6274
  {
6218
6275
  "data-slot": "select-label",
@@ -6222,7 +6279,7 @@ function SelectLabel({ className, ...props }) {
6222
6279
  );
6223
6280
  }
6224
6281
  function SelectSeparator({ className, ...props }) {
6225
- return /* @__PURE__ */ jsx52(
6282
+ return /* @__PURE__ */ jsx53(
6226
6283
  "div",
6227
6284
  {
6228
6285
  "data-slot": "select-separator",
@@ -6233,7 +6290,7 @@ function SelectSeparator({ className, ...props }) {
6233
6290
  }
6234
6291
 
6235
6292
  // src/components/command.tsx
6236
- import * as React63 from "react";
6293
+ import * as React64 from "react";
6237
6294
 
6238
6295
  // src/generated/command.ts
6239
6296
  var COMMAND_ROOT = "bg-popover text-ink flex h-full w-full flex-col overflow-hidden rounded-md";
@@ -6250,10 +6307,10 @@ var COMMAND_SEPARATOR = "bg-border -mx-1 h-px";
6250
6307
  var COMMAND_SHORTCUT = "text-ink-soft ml-auto text-xs tracking-widest";
6251
6308
 
6252
6309
  // src/components/command.tsx
6253
- import { jsx as jsx53, jsxs as jsxs24 } from "react/jsx-runtime";
6254
- var CommandContext = React63.createContext(null);
6310
+ import { jsx as jsx54, jsxs as jsxs24 } from "react/jsx-runtime";
6311
+ var CommandContext = React64.createContext(null);
6255
6312
  function useCommand() {
6256
- const ctx = React63.useContext(CommandContext);
6313
+ const ctx = React64.useContext(CommandContext);
6257
6314
  if (!ctx) throw new Error("Command parts must be used within <Command>");
6258
6315
  return ctx;
6259
6316
  }
@@ -6270,10 +6327,10 @@ function Command({
6270
6327
  defaultValue: defaultSearch,
6271
6328
  ...onSearchChange ? { onChange: onSearchChange } : {}
6272
6329
  });
6273
- const [items, setItems] = React63.useState(
6330
+ const [items, setItems] = React64.useState(
6274
6331
  () => /* @__PURE__ */ new Map()
6275
6332
  );
6276
- const registerItem = React63.useCallback((id, value) => {
6333
+ const registerItem = React64.useCallback((id, value) => {
6277
6334
  setItems((prev) => {
6278
6335
  if (prev.get(id) === value) return prev;
6279
6336
  const next = new Map(prev);
@@ -6281,7 +6338,7 @@ function Command({
6281
6338
  return next;
6282
6339
  });
6283
6340
  }, []);
6284
- const unregisterItem = React63.useCallback((id) => {
6341
+ const unregisterItem = React64.useCallback((id) => {
6285
6342
  setItems((prev) => {
6286
6343
  if (!prev.has(id)) return prev;
6287
6344
  const next = new Map(prev);
@@ -6290,15 +6347,15 @@ function Command({
6290
6347
  });
6291
6348
  }, []);
6292
6349
  const query = currentSearch.trim().toLowerCase();
6293
- const matches = React63.useCallback(
6350
+ const matches = React64.useCallback(
6294
6351
  (value) => query === "" || value.toLowerCase().includes(query),
6295
6352
  [query]
6296
6353
  );
6297
- const hasMatches = React63.useMemo(
6354
+ const hasMatches = React64.useMemo(
6298
6355
  () => [...items.values()].some(matches),
6299
6356
  [items, matches]
6300
6357
  );
6301
- return /* @__PURE__ */ jsx53(
6358
+ return /* @__PURE__ */ jsx54(
6302
6359
  CommandContext.Provider,
6303
6360
  {
6304
6361
  value: {
@@ -6310,7 +6367,7 @@ function Command({
6310
6367
  matches,
6311
6368
  hasMatches
6312
6369
  },
6313
- children: /* @__PURE__ */ jsx53(
6370
+ children: /* @__PURE__ */ jsx54(
6314
6371
  "div",
6315
6372
  {
6316
6373
  "data-slot": "command",
@@ -6337,7 +6394,7 @@ function CommandDialog({
6337
6394
  const scopeRef = useFocusScope(isOpen);
6338
6395
  if (!isOpen) return null;
6339
6396
  return /* @__PURE__ */ jsxs24(Portal, { children: [
6340
- /* @__PURE__ */ jsx53(
6397
+ /* @__PURE__ */ jsx54(
6341
6398
  "div",
6342
6399
  {
6343
6400
  "data-slot": "command-overlay",
@@ -6345,7 +6402,7 @@ function CommandDialog({
6345
6402
  onClick: () => setOpen(false)
6346
6403
  }
6347
6404
  ),
6348
- /* @__PURE__ */ jsx53(
6405
+ /* @__PURE__ */ jsx54(
6349
6406
  "div",
6350
6407
  {
6351
6408
  role: "dialog",
@@ -6356,7 +6413,7 @@ function CommandDialog({
6356
6413
  if (e.key === "Escape") setOpen(false);
6357
6414
  },
6358
6415
  className: cn(COMMAND_DIALOG_CONTENT, className),
6359
- children: /* @__PURE__ */ jsx53(Command, { className: COMMAND_DIALOG_COMMAND, children })
6416
+ children: /* @__PURE__ */ jsx54(Command, { className: COMMAND_DIALOG_COMMAND, children })
6360
6417
  }
6361
6418
  )
6362
6419
  ] });
@@ -6382,12 +6439,12 @@ function CommandInput({
6382
6439
  className: "size-4 shrink-0 opacity-50",
6383
6440
  "aria-hidden": "true",
6384
6441
  children: [
6385
- /* @__PURE__ */ jsx53("circle", { cx: "11", cy: "11", r: "8" }),
6386
- /* @__PURE__ */ jsx53("path", { d: "m21 21-4.3-4.3" })
6442
+ /* @__PURE__ */ jsx54("circle", { cx: "11", cy: "11", r: "8" }),
6443
+ /* @__PURE__ */ jsx54("path", { d: "m21 21-4.3-4.3" })
6387
6444
  ]
6388
6445
  }
6389
6446
  ),
6390
- /* @__PURE__ */ jsx53(
6447
+ /* @__PURE__ */ jsx54(
6391
6448
  "input",
6392
6449
  {
6393
6450
  type: "text",
@@ -6402,7 +6459,7 @@ function CommandInput({
6402
6459
  ] });
6403
6460
  }
6404
6461
  function CommandList({ className, ...props }) {
6405
- return /* @__PURE__ */ jsx53(
6462
+ return /* @__PURE__ */ jsx54(
6406
6463
  "div",
6407
6464
  {
6408
6465
  role: "listbox",
@@ -6415,7 +6472,7 @@ function CommandList({ className, ...props }) {
6415
6472
  function CommandEmpty({ className, children, ...props }) {
6416
6473
  const { query, hasMatches } = useCommand();
6417
6474
  if (query === "" || hasMatches) return null;
6418
- return /* @__PURE__ */ jsx53(
6475
+ return /* @__PURE__ */ jsx54(
6419
6476
  "div",
6420
6477
  {
6421
6478
  "data-slot": "command-empty",
@@ -6434,7 +6491,7 @@ function CommandGroup({ className, heading, children, ...props }) {
6434
6491
  className: cn(COMMAND_GROUP, className),
6435
6492
  ...props,
6436
6493
  children: [
6437
- heading ? /* @__PURE__ */ jsx53("div", { "data-slot": "command-group-heading", children: heading }) : null,
6494
+ heading ? /* @__PURE__ */ jsx54("div", { "data-slot": "command-group-heading", children: heading }) : null,
6438
6495
  children
6439
6496
  ]
6440
6497
  }
@@ -6449,13 +6506,13 @@ function CommandItem({
6449
6506
  ...props
6450
6507
  }) {
6451
6508
  const { registerItem, unregisterItem, matches } = useCommand();
6452
- const id = React63.useId();
6453
- React63.useEffect(() => {
6509
+ const id = React64.useId();
6510
+ React64.useEffect(() => {
6454
6511
  registerItem(id, value);
6455
6512
  return () => unregisterItem(id);
6456
6513
  }, [id, value, registerItem, unregisterItem]);
6457
6514
  if (!matches(value)) return null;
6458
- return /* @__PURE__ */ jsx53(
6515
+ return /* @__PURE__ */ jsx54(
6459
6516
  "div",
6460
6517
  {
6461
6518
  role: "option",
@@ -6473,7 +6530,7 @@ function CommandItem({
6473
6530
  );
6474
6531
  }
6475
6532
  function CommandSeparator({ className, ...props }) {
6476
- return /* @__PURE__ */ jsx53(
6533
+ return /* @__PURE__ */ jsx54(
6477
6534
  "div",
6478
6535
  {
6479
6536
  "data-slot": "command-separator",
@@ -6483,7 +6540,7 @@ function CommandSeparator({ className, ...props }) {
6483
6540
  );
6484
6541
  }
6485
6542
  function CommandShortcut({ className, ...props }) {
6486
- return /* @__PURE__ */ jsx53(
6543
+ return /* @__PURE__ */ jsx54(
6487
6544
  "span",
6488
6545
  {
6489
6546
  "data-slot": "command-shortcut",
@@ -6494,7 +6551,7 @@ function CommandShortcut({ className, ...props }) {
6494
6551
  }
6495
6552
 
6496
6553
  // src/components/chart.tsx
6497
- import * as React64 from "react";
6554
+ import * as React65 from "react";
6498
6555
 
6499
6556
  // src/generated/chart.ts
6500
6557
  var CHART_CONTAINER = "flex aspect-video justify-center text-xs [&_.recharts-layer]:outline-hidden [&_.recharts-surface]:outline-hidden [&_svg]:outline-hidden";
@@ -6502,10 +6559,10 @@ var CHART_TOOLTIP = "border-border/50 bg-background grid min-w-[8rem] items-star
6502
6559
  var CHART_LEGEND = "flex items-center justify-center gap-4";
6503
6560
 
6504
6561
  // src/components/chart.tsx
6505
- import { Fragment as Fragment7, jsx as jsx54, jsxs as jsxs25 } from "react/jsx-runtime";
6506
- var ChartContext = React64.createContext(null);
6562
+ import { Fragment as Fragment7, jsx as jsx55, jsxs as jsxs25 } from "react/jsx-runtime";
6563
+ var ChartContext = React65.createContext(null);
6507
6564
  function useChart() {
6508
- const context = React64.useContext(ChartContext);
6565
+ const context = React65.useContext(ChartContext);
6509
6566
  if (!context) {
6510
6567
  throw new Error("useChart must be used within a <ChartContainer />");
6511
6568
  }
@@ -6518,9 +6575,9 @@ function ChartContainer({
6518
6575
  config,
6519
6576
  ...props
6520
6577
  }) {
6521
- const uniqueId = React64.useId();
6578
+ const uniqueId = React65.useId();
6522
6579
  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
6523
- return /* @__PURE__ */ jsx54(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs25(
6580
+ return /* @__PURE__ */ jsx55(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs25(
6524
6581
  "div",
6525
6582
  {
6526
6583
  "data-slot": "chart",
@@ -6528,7 +6585,7 @@ function ChartContainer({
6528
6585
  className: cn(CHART_CONTAINER, className),
6529
6586
  ...props,
6530
6587
  children: [
6531
- /* @__PURE__ */ jsx54(ChartStyle, { id: chartId, config }),
6588
+ /* @__PURE__ */ jsx55(ChartStyle, { id: chartId, config }),
6532
6589
  children
6533
6590
  ]
6534
6591
  }
@@ -6539,7 +6596,7 @@ var ChartStyle = ({ id, config }) => {
6539
6596
  if (!colorConfig.length) {
6540
6597
  return null;
6541
6598
  }
6542
- return /* @__PURE__ */ jsx54(
6599
+ return /* @__PURE__ */ jsx55(
6543
6600
  "style",
6544
6601
  {
6545
6602
  dangerouslySetInnerHTML: {
@@ -6550,7 +6607,7 @@ ${colorConfig.map(([key, itemConfig]) => ` --color-${key}: ${itemConfig.color};
6550
6607
  }
6551
6608
  );
6552
6609
  };
6553
- var ChartTooltip = ({ children }) => /* @__PURE__ */ jsx54(Fragment7, { children });
6610
+ var ChartTooltip = ({ children }) => /* @__PURE__ */ jsx55(Fragment7, { children });
6554
6611
  function ChartTooltipContent({
6555
6612
  className,
6556
6613
  items = [],
@@ -6569,15 +6626,15 @@ function ChartTooltipContent({
6569
6626
  "data-slot": "chart-tooltip",
6570
6627
  className: cn(CHART_TOOLTIP, className),
6571
6628
  children: [
6572
- !hideLabel && label ? /* @__PURE__ */ jsx54("div", { className: cn("font-medium", labelClassName), children: label }) : null,
6573
- /* @__PURE__ */ jsx54("div", { className: "grid gap-1.5", children: items.map((item, index) => /* @__PURE__ */ jsxs25(
6629
+ !hideLabel && label ? /* @__PURE__ */ jsx55("div", { className: cn("font-medium", labelClassName), children: label }) : null,
6630
+ /* @__PURE__ */ jsx55("div", { className: "grid gap-1.5", children: items.map((item, index) => /* @__PURE__ */ jsxs25(
6574
6631
  "div",
6575
6632
  {
6576
6633
  className: cn(
6577
6634
  "[&>svg]:text-ink-soft flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 items-center"
6578
6635
  ),
6579
6636
  children: [
6580
- !hideIndicator && /* @__PURE__ */ jsx54(
6637
+ !hideIndicator && /* @__PURE__ */ jsx55(
6581
6638
  "div",
6582
6639
  {
6583
6640
  className: "shrink-0 rounded-[2px] h-2.5 w-2.5",
@@ -6588,8 +6645,8 @@ function ChartTooltipContent({
6588
6645
  }
6589
6646
  ),
6590
6647
  /* @__PURE__ */ jsxs25("div", { className: "flex flex-1 justify-between leading-none items-center", children: [
6591
- /* @__PURE__ */ jsx54("span", { className: "text-ink-soft", children: item.label }),
6592
- item.value !== void 0 && /* @__PURE__ */ jsx54("span", { className: "text-ink font-mono font-medium tabular-nums", children: item.value })
6648
+ /* @__PURE__ */ jsx55("span", { className: "text-ink-soft", children: item.label }),
6649
+ item.value !== void 0 && /* @__PURE__ */ jsx55("span", { className: "text-ink font-mono font-medium tabular-nums", children: item.value })
6593
6650
  ] })
6594
6651
  ]
6595
6652
  },
@@ -6599,7 +6656,7 @@ function ChartTooltipContent({
6599
6656
  }
6600
6657
  );
6601
6658
  }
6602
- var ChartLegend = ({ children }) => /* @__PURE__ */ jsx54(Fragment7, { children });
6659
+ var ChartLegend = ({ children }) => /* @__PURE__ */ jsx55(Fragment7, { children });
6603
6660
  function ChartLegendContent({
6604
6661
  className,
6605
6662
  hideIcon = false,
@@ -6613,7 +6670,7 @@ function ChartLegendContent({
6613
6670
  if (!rows.length) {
6614
6671
  return null;
6615
6672
  }
6616
- return /* @__PURE__ */ jsx54(
6673
+ return /* @__PURE__ */ jsx55(
6617
6674
  "div",
6618
6675
  {
6619
6676
  "data-slot": "chart-legend",
@@ -6625,7 +6682,7 @@ function ChartLegendContent({
6625
6682
  "[&>svg]:text-ink-soft flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"
6626
6683
  ),
6627
6684
  children: [
6628
- !hideIcon && /* @__PURE__ */ jsx54(
6685
+ !hideIcon && /* @__PURE__ */ jsx55(
6629
6686
  "div",
6630
6687
  {
6631
6688
  className: "h-2 w-2 shrink-0 rounded-[2px]",
@@ -6642,7 +6699,7 @@ function ChartLegendContent({
6642
6699
  }
6643
6700
 
6644
6701
  // src/components/calendar.tsx
6645
- import * as React65 from "react";
6702
+ import * as React66 from "react";
6646
6703
 
6647
6704
  // src/generated/calendar.ts
6648
6705
  var CALENDAR_ROOT = "bg-background p-3 w-fit";
@@ -6660,7 +6717,7 @@ var CALENDAR_DAY_SELECTED = "bg-primary text-on-primary";
6660
6717
  var CALENDAR_DAY_TODAY = "bg-hover text-ink rounded-md";
6661
6718
 
6662
6719
  // src/components/calendar.tsx
6663
- import { jsx as jsx55, jsxs as jsxs26 } from "react/jsx-runtime";
6720
+ import { jsx as jsx56, jsxs as jsxs26 } from "react/jsx-runtime";
6664
6721
  var MONTHS = [
6665
6722
  "January",
6666
6723
  "February",
@@ -6679,7 +6736,7 @@ var WEEKDAYS = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"];
6679
6736
  var CHEVRON_LEFT = "m15 18-6-6 6-6";
6680
6737
  var CHEVRON_RIGHT = "m9 18 6-6-6-6";
6681
6738
  function Chevron({ d }) {
6682
- return /* @__PURE__ */ jsx55(
6739
+ return /* @__PURE__ */ jsx56(
6683
6740
  "svg",
6684
6741
  {
6685
6742
  className: "size-4",
@@ -6693,7 +6750,7 @@ function Chevron({ d }) {
6693
6750
  strokeLinecap: "round",
6694
6751
  strokeLinejoin: "round",
6695
6752
  "aria-hidden": true,
6696
- children: /* @__PURE__ */ jsx55("path", { d })
6753
+ children: /* @__PURE__ */ jsx56("path", { d })
6697
6754
  }
6698
6755
  );
6699
6756
  }
@@ -6706,6 +6763,21 @@ function mondayIndex(d) {
6706
6763
  function sameDay(a, b) {
6707
6764
  return !!a && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
6708
6765
  }
6766
+ function startOfDay(d) {
6767
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate());
6768
+ }
6769
+ function outOfRange(day, min, max) {
6770
+ const t = day.getTime();
6771
+ return !!min && t < startOfDay(min).getTime() || !!max && t > startOfDay(max).getTime();
6772
+ }
6773
+ var MONDAY = new Date(2024, 0, 1);
6774
+ function localisedWeekdays(locale) {
6775
+ const fmt = new Intl.DateTimeFormat(locale, { weekday: "short" });
6776
+ return Array.from(
6777
+ { length: 7 },
6778
+ (_, i) => fmt.format(new Date(MONDAY.getFullYear(), MONDAY.getMonth(), MONDAY.getDate() + i))
6779
+ );
6780
+ }
6709
6781
  function Calendar({
6710
6782
  selected,
6711
6783
  onSelect,
@@ -6713,9 +6785,15 @@ function Calendar({
6713
6785
  defaultMonth,
6714
6786
  onMonthChange,
6715
6787
  today = /* @__PURE__ */ new Date(),
6788
+ min,
6789
+ max,
6790
+ disabled = false,
6791
+ previousMonthLabel = "Previous month",
6792
+ nextMonthLabel = "Next month",
6793
+ locale,
6716
6794
  className
6717
6795
  }) {
6718
- const [internal, setInternal] = React65.useState(
6796
+ const [internal, setInternal] = React66.useState(
6719
6797
  () => startOfMonth(defaultMonth ?? /* @__PURE__ */ new Date())
6720
6798
  );
6721
6799
  const view = month ? startOfMonth(month) : internal;
@@ -6726,7 +6804,8 @@ function Calendar({
6726
6804
  };
6727
6805
  const year = view.getFullYear();
6728
6806
  const monthIndex = view.getMonth();
6729
- const caption = `${MONTHS[monthIndex]} ${year}`;
6807
+ const caption = locale ? new Intl.DateTimeFormat(locale, { month: "long", year: "numeric" }).format(view) : `${MONTHS[monthIndex]} ${year}`;
6808
+ const weekdays = locale ? localisedWeekdays(locale) : WEEKDAYS;
6730
6809
  const lead = mondayIndex(view);
6731
6810
  const total = new Date(year, monthIndex + 1, 0).getDate();
6732
6811
  const cells = [];
@@ -6737,7 +6816,8 @@ function Calendar({
6737
6816
  for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));
6738
6817
  const navClass = buttonVariants({
6739
6818
  variant: "ghost",
6740
- size: "icon",
6819
+ size: "md",
6820
+ icon: true,
6741
6821
  className: CALENDAR_NAV_BUTTON
6742
6822
  });
6743
6823
  return /* @__PURE__ */ jsxs26(
@@ -6748,41 +6828,43 @@ function Calendar({
6748
6828
  className: cn(CALENDAR_ROOT, className),
6749
6829
  children: [
6750
6830
  /* @__PURE__ */ jsxs26("div", { className: CALENDAR_NAV, children: [
6751
- /* @__PURE__ */ jsx55(
6831
+ /* @__PURE__ */ jsx56(
6752
6832
  "button",
6753
6833
  {
6754
6834
  type: "button",
6755
6835
  className: navClass,
6756
- "aria-label": "Previous month",
6836
+ "aria-label": previousMonthLabel,
6837
+ disabled,
6757
6838
  onClick: () => go(-1),
6758
- children: /* @__PURE__ */ jsx55(Chevron, { d: CHEVRON_LEFT })
6839
+ children: /* @__PURE__ */ jsx56(Chevron, { d: CHEVRON_LEFT })
6759
6840
  }
6760
6841
  ),
6761
- /* @__PURE__ */ jsx55("div", { className: CALENDAR_CAPTION, children: caption }),
6762
- /* @__PURE__ */ jsx55(
6842
+ /* @__PURE__ */ jsx56("div", { "data-slot": "calendar-caption", className: CALENDAR_CAPTION, children: caption }),
6843
+ /* @__PURE__ */ jsx56(
6763
6844
  "button",
6764
6845
  {
6765
6846
  type: "button",
6766
6847
  className: navClass,
6767
- "aria-label": "Next month",
6848
+ "aria-label": nextMonthLabel,
6849
+ disabled,
6768
6850
  onClick: () => go(1),
6769
- children: /* @__PURE__ */ jsx55(Chevron, { d: CHEVRON_RIGHT })
6851
+ children: /* @__PURE__ */ jsx56(Chevron, { d: CHEVRON_RIGHT })
6770
6852
  }
6771
6853
  )
6772
6854
  ] }),
6773
6855
  /* @__PURE__ */ jsxs26("table", { className: CALENDAR_GRID, role: "grid", children: [
6774
- /* @__PURE__ */ jsx55("thead", { children: /* @__PURE__ */ jsx55("tr", { className: CALENDAR_WEEKDAY_ROW, children: WEEKDAYS.map((wd) => /* @__PURE__ */ jsx55(
6856
+ /* @__PURE__ */ jsx56("thead", { children: /* @__PURE__ */ jsx56("tr", { className: CALENDAR_WEEKDAY_ROW, children: weekdays.map((wd, i) => /* @__PURE__ */ jsx56(
6775
6857
  "th",
6776
6858
  {
6777
6859
  scope: "col",
6778
6860
  className: CALENDAR_WEEKDAY,
6779
6861
  children: wd
6780
6862
  },
6781
- wd
6863
+ i
6782
6864
  )) }) }),
6783
- /* @__PURE__ */ jsx55("tbody", { children: weeks.map((week, wi) => /* @__PURE__ */ jsx55("tr", { className: CALENDAR_WEEK, children: week.map((cell, ci) => {
6865
+ /* @__PURE__ */ jsx56("tbody", { children: weeks.map((week, wi) => /* @__PURE__ */ jsx56("tr", { className: CALENDAR_WEEK, children: week.map((cell, ci) => {
6784
6866
  if (cell === null) {
6785
- return /* @__PURE__ */ jsx55(
6867
+ return /* @__PURE__ */ jsx56(
6786
6868
  "td",
6787
6869
  {
6788
6870
  className: CALENDAR_DAY_EMPTY
@@ -6793,24 +6875,29 @@ function Calendar({
6793
6875
  const date = new Date(year, monthIndex, cell);
6794
6876
  const isSelected = sameDay(selected, date);
6795
6877
  const isToday = sameDay(today, date);
6796
- return /* @__PURE__ */ jsx55(
6878
+ const isDisabled = disabled || outOfRange(date, min, max);
6879
+ return /* @__PURE__ */ jsx56(
6797
6880
  "td",
6798
6881
  {
6799
6882
  role: "gridcell",
6800
6883
  "aria-selected": isSelected,
6801
6884
  className: CALENDAR_DAY_CELL,
6802
- children: /* @__PURE__ */ jsx55(
6885
+ children: /* @__PURE__ */ jsx56(
6803
6886
  "button",
6804
6887
  {
6805
6888
  type: "button",
6806
6889
  "data-slot": "calendar-day",
6807
6890
  "data-selected": isSelected,
6808
6891
  "data-today": isToday,
6809
- onClick: () => onSelect?.(date),
6892
+ ...isDisabled ? { "data-disabled": "true", disabled: true } : {},
6893
+ onClick: () => {
6894
+ if (!isDisabled) onSelect?.(date);
6895
+ },
6810
6896
  className: cn(
6811
6897
  buttonVariants({
6812
6898
  variant: "ghost",
6813
- size: "icon",
6899
+ size: "md",
6900
+ icon: true,
6814
6901
  className: CALENDAR_DAY
6815
6902
  }),
6816
6903
  isSelected ? CALENDAR_DAY_SELECTED : isToday ? CALENDAR_DAY_TODAY : void 0
@@ -6828,8 +6915,261 @@ function Calendar({
6828
6915
  );
6829
6916
  }
6830
6917
 
6918
+ // src/components/date-time-picker.tsx
6919
+ import * as React67 from "react";
6920
+
6921
+ // src/generated/date-time-picker.ts
6922
+ var DATE_TIME_PICKER_TRIGGER = "w-full justify-start gap-2 text-left font-normal data-[placeholder]:text-ink-soft [&>svg]:text-ink-soft";
6923
+ var DATE_TIME_PICKER_CONTENT = "w-auto p-0";
6924
+ var DATE_TIME_PICKER_TIME = "flex items-center gap-2 border-t border-border px-3 py-2";
6925
+ var DATE_TIME_PICKER_TIME_INPUT = "w-14 text-center tabular-nums";
6926
+ var DATE_TIME_PICKER_TIME_SEPARATOR = "text-ink-soft select-none";
6927
+ var DATE_TIME_PICKER_CLEAR = "ml-auto";
6928
+
6929
+ // src/components/date-time-picker.tsx
6930
+ import { jsx as jsx57, jsxs as jsxs27 } from "react/jsx-runtime";
6931
+ var CALENDAR_ICON = [
6932
+ "M8 2v4",
6933
+ "M16 2v4",
6934
+ "M3 10h18",
6935
+ "M5 4h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z"
6936
+ ];
6937
+ function CalendarIcon() {
6938
+ return /* @__PURE__ */ jsx57(
6939
+ "svg",
6940
+ {
6941
+ className: "size-4",
6942
+ xmlns: "http://www.w3.org/2000/svg",
6943
+ width: "24",
6944
+ height: "24",
6945
+ viewBox: "0 0 24 24",
6946
+ fill: "none",
6947
+ stroke: "currentColor",
6948
+ strokeWidth: "2",
6949
+ strokeLinecap: "round",
6950
+ strokeLinejoin: "round",
6951
+ "aria-hidden": true,
6952
+ children: CALENDAR_ICON.map((d) => /* @__PURE__ */ jsx57("path", { d }, d))
6953
+ }
6954
+ );
6955
+ }
6956
+ var pad = (n) => String(n).padStart(2, "0");
6957
+ function atMinute(d) {
6958
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());
6959
+ }
6960
+ function clampMoment(d, min, max) {
6961
+ const lo = min && atMinute(min);
6962
+ const hi = max && atMinute(max);
6963
+ if (lo && d.getTime() < lo.getTime()) return lo;
6964
+ if (hi && d.getTime() > hi.getTime()) return hi;
6965
+ return d;
6966
+ }
6967
+ function parseField(raw, max) {
6968
+ const digits = raw.replace(/\D/g, "").slice(-2);
6969
+ if (digits === "") return null;
6970
+ return Math.min(Number(digits), max);
6971
+ }
6972
+ var selectAll = (e) => e.currentTarget.select();
6973
+ function isoLabel(d) {
6974
+ return `${d.getFullYear().toString().padStart(4, "0")}-${pad(d.getMonth() + 1)}-${pad(
6975
+ d.getDate()
6976
+ )} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
6977
+ }
6978
+ function DateTimePicker({
6979
+ value: valueProp,
6980
+ defaultValue = null,
6981
+ onChange,
6982
+ min,
6983
+ max,
6984
+ locale,
6985
+ format,
6986
+ placeholder = "",
6987
+ labels = {},
6988
+ disabled = false,
6989
+ name,
6990
+ today = /* @__PURE__ */ new Date(),
6991
+ open,
6992
+ defaultOpen = false,
6993
+ onOpenChange,
6994
+ align = "start",
6995
+ className,
6996
+ id,
6997
+ ...rest
6998
+ }) {
6999
+ const [value, setValue] = useControllableState({
7000
+ ...valueProp !== void 0 ? { value: valueProp } : {},
7001
+ defaultValue,
7002
+ ...onChange ? { onChange } : {}
7003
+ });
7004
+ const [isOpen, setOpen] = useControllableState({
7005
+ ...open !== void 0 ? { value: open } : {},
7006
+ defaultValue: defaultOpen,
7007
+ ...onOpenChange ? { onChange: onOpenChange } : {}
7008
+ });
7009
+ const rootRef = React67.useRef(null);
7010
+ const hoursRef = React67.useRef(null);
7011
+ React67.useEffect(() => {
7012
+ if (!isOpen) return;
7013
+ hoursRef.current?.focus();
7014
+ return () => {
7015
+ const active = document.activeElement;
7016
+ const content = hoursRef.current?.closest("[data-slot=date-time-picker-content]");
7017
+ const lost = !active || active === document.body || !!content?.contains(active);
7018
+ if (lost) {
7019
+ rootRef.current?.querySelector("[data-slot=date-time-picker-trigger]")?.focus();
7020
+ }
7021
+ };
7022
+ }, [isOpen]);
7023
+ const emit = (next) => setValue(clampMoment(atMinute(next), min, max));
7024
+ const base = () => value ? new Date(value.getTime()) : new Date(today.getFullYear(), today.getMonth(), today.getDate());
7025
+ const onSelect = (day) => emit(
7026
+ new Date(
7027
+ day.getFullYear(),
7028
+ day.getMonth(),
7029
+ day.getDate(),
7030
+ value?.getHours() ?? 0,
7031
+ value?.getMinutes() ?? 0
7032
+ )
7033
+ );
7034
+ const onHours = (e) => {
7035
+ const hour = parseField(e.target.value, 23);
7036
+ if (hour === null) return;
7037
+ const next = base();
7038
+ next.setHours(hour);
7039
+ emit(next);
7040
+ };
7041
+ const onMinutes = (e) => {
7042
+ const minute = parseField(e.target.value, 59);
7043
+ if (minute === null) return;
7044
+ const next = base();
7045
+ next.setMinutes(minute);
7046
+ emit(next);
7047
+ };
7048
+ const onClear = () => {
7049
+ setValue(null);
7050
+ setOpen(false);
7051
+ };
7052
+ const onContentBlur = (e) => {
7053
+ const next = e.relatedTarget;
7054
+ if (!(next instanceof Node)) return;
7055
+ if (e.currentTarget.contains(next) || rootRef.current?.contains(next)) return;
7056
+ setOpen(false);
7057
+ };
7058
+ const label = value ? format ? format(value) : locale ? (
7059
+ // The fields are 24-hour, so the label is too — even where the locale
7060
+ // would default to 12-hour ("2:05 PM" over a "14" hours field).
7061
+ new Intl.DateTimeFormat(locale, {
7062
+ dateStyle: "medium",
7063
+ timeStyle: "short",
7064
+ hourCycle: "h23"
7065
+ }).format(value)
7066
+ ) : isoLabel(value) : placeholder;
7067
+ return /* @__PURE__ */ jsx57("div", { "data-slot": "date-time-picker", ref: rootRef, children: /* @__PURE__ */ jsxs27(Popover, { open: isOpen, onOpenChange: setOpen, children: [
7068
+ /* @__PURE__ */ jsxs27(
7069
+ PopoverTrigger,
7070
+ {
7071
+ type: "button",
7072
+ "data-slot": "date-time-picker-trigger",
7073
+ "data-placeholder": value ? void 0 : "true",
7074
+ "aria-haspopup": "dialog",
7075
+ className: cn(
7076
+ buttonVariants({ variant: "outline", size: "md" }),
7077
+ DATE_TIME_PICKER_TRIGGER,
7078
+ className
7079
+ ),
7080
+ disabled,
7081
+ ...id !== void 0 ? { id } : {},
7082
+ ...rest,
7083
+ children: [
7084
+ /* @__PURE__ */ jsx57(CalendarIcon, {}),
7085
+ /* @__PURE__ */ jsx57("span", { children: label })
7086
+ ]
7087
+ }
7088
+ ),
7089
+ name !== void 0 && /* @__PURE__ */ jsx57(
7090
+ "input",
7091
+ {
7092
+ type: "hidden",
7093
+ name,
7094
+ value: value ? String(Math.floor(value.getTime() / 1e3)) : ""
7095
+ }
7096
+ ),
7097
+ /* @__PURE__ */ jsxs27(
7098
+ PopoverContent,
7099
+ {
7100
+ "data-slot": "date-time-picker-content",
7101
+ role: "dialog",
7102
+ "aria-label": labels.dialog ?? "Choose date and time",
7103
+ align,
7104
+ onBlur: onContentBlur,
7105
+ className: DATE_TIME_PICKER_CONTENT,
7106
+ children: [
7107
+ /* @__PURE__ */ jsx57(
7108
+ Calendar,
7109
+ {
7110
+ ...value ? { selected: value } : {},
7111
+ onSelect,
7112
+ defaultMonth: value ?? min ?? today,
7113
+ today,
7114
+ disabled,
7115
+ ...min ? { min } : {},
7116
+ ...max ? { max } : {},
7117
+ ...locale !== void 0 ? { locale } : {},
7118
+ ...labels.previousMonth !== void 0 ? { previousMonthLabel: labels.previousMonth } : {},
7119
+ ...labels.nextMonth !== void 0 ? { nextMonthLabel: labels.nextMonth } : {}
7120
+ }
7121
+ ),
7122
+ /* @__PURE__ */ jsxs27("div", { className: DATE_TIME_PICKER_TIME, "data-slot": "date-time-picker-time", children: [
7123
+ /* @__PURE__ */ jsx57(
7124
+ Input,
7125
+ {
7126
+ type: "text",
7127
+ inputMode: "numeric",
7128
+ onFocus: selectAll,
7129
+ className: DATE_TIME_PICKER_TIME_INPUT,
7130
+ ref: hoursRef,
7131
+ "data-slot": "date-time-picker-hours",
7132
+ "aria-label": labels.hours ?? "Hours",
7133
+ value: pad(value?.getHours() ?? 0),
7134
+ disabled,
7135
+ onChange: onHours
7136
+ }
7137
+ ),
7138
+ /* @__PURE__ */ jsx57("span", { className: DATE_TIME_PICKER_TIME_SEPARATOR, "aria-hidden": true, children: ":" }),
7139
+ /* @__PURE__ */ jsx57(
7140
+ Input,
7141
+ {
7142
+ type: "text",
7143
+ inputMode: "numeric",
7144
+ onFocus: selectAll,
7145
+ className: DATE_TIME_PICKER_TIME_INPUT,
7146
+ "data-slot": "date-time-picker-minutes",
7147
+ "aria-label": labels.minutes ?? "Minutes",
7148
+ value: pad(value?.getMinutes() ?? 0),
7149
+ disabled,
7150
+ onChange: onMinutes
7151
+ }
7152
+ ),
7153
+ /* @__PURE__ */ jsx57(
7154
+ "button",
7155
+ {
7156
+ type: "button",
7157
+ className: buttonVariants({ variant: "ghost", size: "sm", className: DATE_TIME_PICKER_CLEAR }),
7158
+ "data-slot": "date-time-picker-clear",
7159
+ disabled,
7160
+ onClick: onClear,
7161
+ children: labels.clear ?? "Clear"
7162
+ }
7163
+ )
7164
+ ] })
7165
+ ]
7166
+ }
7167
+ )
7168
+ ] }) });
7169
+ }
7170
+
6831
7171
  // src/components/sonner.tsx
6832
- import * as React66 from "react";
7172
+ import * as React68 from "react";
6833
7173
 
6834
7174
  // src/generated/sonner.ts
6835
7175
  var TOAST_BASE = "pointer-events-auto flex w-full items-start gap-3 rounded-md border p-4 text-sm shadow-lg";
@@ -6854,7 +7194,7 @@ var TOAST_CONTENT = "flex-1 space-y-1";
6854
7194
  var TOAST_TITLE = "font-medium";
6855
7195
 
6856
7196
  // src/components/sonner.tsx
6857
- import { jsx as jsx56, jsxs as jsxs27 } from "react/jsx-runtime";
7197
+ import { jsx as jsx58, jsxs as jsxs28 } from "react/jsx-runtime";
6858
7198
  var DEFAULT_DURATION = 4e3;
6859
7199
  var SWIPE_THRESHOLD = 45;
6860
7200
  var SWIPE_VELOCITY = 0.11;
@@ -6919,17 +7259,17 @@ function ToastItem({
6919
7259
  reportHeight,
6920
7260
  removeHeight
6921
7261
  }) {
6922
- const ref = React66.useRef(null);
6923
- const [height, setHeight] = React66.useState(0);
6924
- const remainingRef = React66.useRef(t.duration);
6925
- const startedRef = React66.useRef(0);
6926
- const flingRef = React66.useRef(
7262
+ const ref = React68.useRef(null);
7263
+ const [height, setHeight] = React68.useState(0);
7264
+ const remainingRef = React68.useRef(t.duration);
7265
+ const startedRef = React68.useRef(0);
7266
+ const flingRef = React68.useRef(
6927
7267
  void 0
6928
7268
  );
6929
- const dragRef = React66.useRef(
7269
+ const dragRef = React68.useRef(
6930
7270
  null
6931
7271
  );
6932
- React66.useLayoutEffect(() => {
7272
+ React68.useLayoutEffect(() => {
6933
7273
  const el = ref.current;
6934
7274
  if (!el) return;
6935
7275
  el.style.height = "auto";
@@ -6940,12 +7280,12 @@ function ToastItem({
6940
7280
  reportHeight(t.id, h);
6941
7281
  }
6942
7282
  }, [t.id, t.message, t.description, reportHeight]);
6943
- React66.useEffect(() => () => removeHeight(t.id), [t.id, removeHeight]);
6944
- const mountedClosing = React66.useRef(t.state === "closing");
6945
- React66.useEffect(() => {
7283
+ React68.useEffect(() => () => removeHeight(t.id), [t.id, removeHeight]);
7284
+ const mountedClosing = React68.useRef(t.state === "closing");
7285
+ React68.useEffect(() => {
6946
7286
  if (mountedClosing.current) store.remove(t.id);
6947
7287
  }, [t.id]);
6948
- React66.useEffect(() => {
7288
+ React68.useEffect(() => {
6949
7289
  if (t.duration === Infinity || t.state === "closing" || paused) return;
6950
7290
  startedRef.current = Date.now();
6951
7291
  const id = setTimeout(() => store.dismiss(t.id), remainingRef.current);
@@ -6957,7 +7297,7 @@ function ToastItem({
6957
7297
  );
6958
7298
  };
6959
7299
  }, [paused, t.id, t.duration, t.state]);
6960
- React66.useEffect(
7300
+ React68.useEffect(
6961
7301
  () => () => {
6962
7302
  if (flingRef.current) clearTimeout(flingRef.current);
6963
7303
  },
@@ -7016,7 +7356,7 @@ function ToastItem({
7016
7356
  );
7017
7357
  }
7018
7358
  };
7019
- return /* @__PURE__ */ jsxs27(
7359
+ return /* @__PURE__ */ jsxs28(
7020
7360
  "li",
7021
7361
  {
7022
7362
  ref,
@@ -7044,11 +7384,11 @@ function ToastItem({
7044
7384
  toastVariantClasses[t.variant]
7045
7385
  ),
7046
7386
  children: [
7047
- /* @__PURE__ */ jsxs27("div", { className: TOAST_CONTENT, children: [
7048
- /* @__PURE__ */ jsx56("div", { className: TOAST_TITLE, children: t.message }),
7049
- t.description ? /* @__PURE__ */ jsx56("div", { className: "text-ink-soft text-sm", children: t.description }) : null
7387
+ /* @__PURE__ */ jsxs28("div", { className: TOAST_CONTENT, children: [
7388
+ /* @__PURE__ */ jsx58("div", { className: TOAST_TITLE, children: t.message }),
7389
+ t.description ? /* @__PURE__ */ jsx58("div", { className: "text-ink-soft text-sm", children: t.description }) : null
7050
7390
  ] }),
7051
- /* @__PURE__ */ jsx56(
7391
+ /* @__PURE__ */ jsx58(
7052
7392
  "button",
7053
7393
  {
7054
7394
  type: "button",
@@ -7056,7 +7396,7 @@ function ToastItem({
7056
7396
  "data-slot": "toast-close",
7057
7397
  onClick: () => store.dismiss(t.id),
7058
7398
  className: TOAST_CLOSE,
7059
- children: /* @__PURE__ */ jsx56(
7399
+ children: /* @__PURE__ */ jsx58(
7060
7400
  "svg",
7061
7401
  {
7062
7402
  xmlns: "http://www.w3.org/2000/svg",
@@ -7069,7 +7409,7 @@ function ToastItem({
7069
7409
  strokeLinecap: "round",
7070
7410
  strokeLinejoin: "round",
7071
7411
  "aria-hidden": "true",
7072
- children: /* @__PURE__ */ jsx56("path", { d: "M18 6 6 18M6 6l12 12" })
7412
+ children: /* @__PURE__ */ jsx58("path", { d: "M18 6 6 18M6 6l12 12" })
7073
7413
  }
7074
7414
  )
7075
7415
  }
@@ -7083,17 +7423,17 @@ function Toaster({
7083
7423
  className,
7084
7424
  ...props
7085
7425
  }) {
7086
- const [toasts, setToasts] = React66.useState([]);
7087
- const [heights, setHeights] = React66.useState(/* @__PURE__ */ new Map());
7088
- const [paused, setPaused] = React66.useState(false);
7089
- React66.useEffect(() => store.subscribe(setToasts), []);
7426
+ const [toasts, setToasts] = React68.useState([]);
7427
+ const [heights, setHeights] = React68.useState(/* @__PURE__ */ new Map());
7428
+ const [paused, setPaused] = React68.useState(false);
7429
+ React68.useEffect(() => store.subscribe(setToasts), []);
7090
7430
  const onEnter = () => setPaused(true);
7091
7431
  const onLeave = (e) => {
7092
7432
  if (!e.currentTarget.contains(e.relatedTarget)) {
7093
7433
  setPaused(false);
7094
7434
  }
7095
7435
  };
7096
- const reportHeight = React66.useCallback((id, h) => {
7436
+ const reportHeight = React68.useCallback((id, h) => {
7097
7437
  setHeights((prev) => {
7098
7438
  if (prev.get(id) === h) return prev;
7099
7439
  const next = new Map(prev);
@@ -7101,7 +7441,7 @@ function Toaster({
7101
7441
  return next;
7102
7442
  });
7103
7443
  }, []);
7104
- const removeHeight = React66.useCallback((id) => {
7444
+ const removeHeight = React68.useCallback((id) => {
7105
7445
  setHeights((prev) => {
7106
7446
  if (!prev.has(id)) return prev;
7107
7447
  const next = new Map(prev);
@@ -7119,7 +7459,7 @@ function Toaster({
7119
7459
  sum += heights.get(t.id) ?? 0;
7120
7460
  return o;
7121
7461
  });
7122
- return /* @__PURE__ */ jsx56(
7462
+ return /* @__PURE__ */ jsx58(
7123
7463
  "ol",
7124
7464
  {
7125
7465
  "data-slot": "toaster",
@@ -7140,7 +7480,7 @@ function Toaster({
7140
7480
  onPointerOut: onLeave,
7141
7481
  onFocus: onEnter,
7142
7482
  onBlur: onLeave,
7143
- children: ordered.map((t, i) => /* @__PURE__ */ jsx56(
7483
+ children: ordered.map((t, i) => /* @__PURE__ */ jsx58(
7144
7484
  ToastItem,
7145
7485
  {
7146
7486
  toast: t,
@@ -7158,7 +7498,7 @@ function Toaster({
7158
7498
  }
7159
7499
 
7160
7500
  // src/components/form.tsx
7161
- import * as React67 from "react";
7501
+ import * as React69 from "react";
7162
7502
 
7163
7503
  // src/generated/form.ts
7164
7504
  var FORM_ITEM = "grid gap-2";
@@ -7166,21 +7506,21 @@ var FORM_DESCRIPTION = "text-ink-soft text-sm";
7166
7506
  var FORM_MESSAGE = "text-accent-error text-sm";
7167
7507
 
7168
7508
  // src/components/form.tsx
7169
- import { jsx as jsx57 } from "react/jsx-runtime";
7170
- var FormItemContext = React67.createContext(null);
7509
+ import { jsx as jsx59 } from "react/jsx-runtime";
7510
+ var FormItemContext = React69.createContext(null);
7171
7511
  function useFormItem() {
7172
- const ctx = React67.useContext(FormItemContext);
7512
+ const ctx = React69.useContext(FormItemContext);
7173
7513
  if (!ctx) {
7174
7514
  throw new Error("Form parts must be used within <FormItem>");
7175
7515
  }
7176
7516
  return ctx;
7177
7517
  }
7178
7518
  function Form({ ...props }) {
7179
- return /* @__PURE__ */ jsx57("form", { "data-slot": "form", ...props });
7519
+ return /* @__PURE__ */ jsx59("form", { "data-slot": "form", ...props });
7180
7520
  }
7181
7521
  function FormItem({ className, ...props }) {
7182
- const id = React67.useId();
7183
- const value = React67.useMemo(
7522
+ const id = React69.useId();
7523
+ const value = React69.useMemo(
7184
7524
  () => ({
7185
7525
  id,
7186
7526
  formItemId: `${id}-form-item`,
@@ -7189,7 +7529,7 @@ function FormItem({ className, ...props }) {
7189
7529
  }),
7190
7530
  [id]
7191
7531
  );
7192
- return /* @__PURE__ */ jsx57(FormItemContext.Provider, { value, children: /* @__PURE__ */ jsx57("div", { "data-slot": "form-item", className: cn(FORM_ITEM, className), ...props }) });
7532
+ return /* @__PURE__ */ jsx59(FormItemContext.Provider, { value, children: /* @__PURE__ */ jsx59("div", { "data-slot": "form-item", className: cn(FORM_ITEM, className), ...props }) });
7193
7533
  }
7194
7534
  function FormLabel({
7195
7535
  className,
@@ -7197,7 +7537,7 @@ function FormLabel({
7197
7537
  ...props
7198
7538
  }) {
7199
7539
  const { formItemId } = useFormItem();
7200
- return /* @__PURE__ */ jsx57(
7540
+ return /* @__PURE__ */ jsx59(
7201
7541
  Label,
7202
7542
  {
7203
7543
  "data-slot": "form-label",
@@ -7213,7 +7553,7 @@ function FormControl({
7213
7553
  ...props
7214
7554
  }) {
7215
7555
  const { formItemId, formDescriptionId, formMessageId } = useFormItem();
7216
- return /* @__PURE__ */ jsx57(
7556
+ return /* @__PURE__ */ jsx59(
7217
7557
  Slot,
7218
7558
  {
7219
7559
  "data-slot": "form-control",
@@ -7226,7 +7566,7 @@ function FormControl({
7226
7566
  }
7227
7567
  function FormDescription({ className, ...props }) {
7228
7568
  const { formDescriptionId } = useFormItem();
7229
- return /* @__PURE__ */ jsx57(
7569
+ return /* @__PURE__ */ jsx59(
7230
7570
  "p",
7231
7571
  {
7232
7572
  "data-slot": "form-description",
@@ -7241,7 +7581,7 @@ function FormMessage({ className, children, ...props }) {
7241
7581
  if (!children) {
7242
7582
  return null;
7243
7583
  }
7244
- return /* @__PURE__ */ jsx57(
7584
+ return /* @__PURE__ */ jsx59(
7245
7585
  "p",
7246
7586
  {
7247
7587
  "data-slot": "form-message",
@@ -7254,7 +7594,7 @@ function FormMessage({ className, children, ...props }) {
7254
7594
  }
7255
7595
 
7256
7596
  // src/components/resizable.tsx
7257
- import * as React68 from "react";
7597
+ import * as React70 from "react";
7258
7598
 
7259
7599
  // src/generated/resizable.ts
7260
7600
  var RESIZABLE_GROUP = "flex h-full w-full data-[panel-group-direction=vertical]:flex-col";
@@ -7263,10 +7603,10 @@ var RESIZABLE_HANDLE = "bg-border focus-visible:ring-ring relative flex w-px ite
7263
7603
  var RESIZABLE_HANDLE_GRIP = "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border";
7264
7604
 
7265
7605
  // src/components/resizable.tsx
7266
- import { jsx as jsx58, jsxs as jsxs28 } from "react/jsx-runtime";
7267
- var ResizableContext = React68.createContext(null);
7606
+ import { jsx as jsx60, jsxs as jsxs29 } from "react/jsx-runtime";
7607
+ var ResizableContext = React70.createContext(null);
7268
7608
  function useResizable() {
7269
- const ctx = React68.useContext(ResizableContext);
7609
+ const ctx = React70.useContext(ResizableContext);
7270
7610
  if (!ctx)
7271
7611
  throw new Error("Resizable parts must be used within a ResizablePanelGroup");
7272
7612
  return ctx;
@@ -7289,9 +7629,9 @@ function ResizablePanelGroup({
7289
7629
  children,
7290
7630
  ...props
7291
7631
  }) {
7292
- const [sizes, setSizes] = React68.useState([]);
7293
- const groupRef = React68.useRef(null);
7294
- const register = React68.useCallback((index, defaultSize) => {
7632
+ const [sizes, setSizes] = React70.useState([]);
7633
+ const groupRef = React70.useRef(null);
7634
+ const register = React70.useCallback((index, defaultSize) => {
7295
7635
  setSizes((prev) => {
7296
7636
  if (prev[index] !== void 0) return prev;
7297
7637
  const next = prev.slice();
@@ -7300,14 +7640,14 @@ function ResizablePanelGroup({
7300
7640
  return next;
7301
7641
  });
7302
7642
  }, []);
7303
- React68.useEffect(() => {
7643
+ React70.useEffect(() => {
7304
7644
  if (sizes.length) onLayout?.(sizes);
7305
7645
  }, [sizes, onLayout]);
7306
- const value = React68.useMemo(
7646
+ const value = React70.useMemo(
7307
7647
  () => ({ sizes, setSizes, register, direction, keyboardStep, groupRef }),
7308
7648
  [sizes, register, direction, keyboardStep]
7309
7649
  );
7310
- return /* @__PURE__ */ jsx58(ResizableContext.Provider, { value, children: /* @__PURE__ */ jsx58(
7650
+ return /* @__PURE__ */ jsx60(ResizableContext.Provider, { value, children: /* @__PURE__ */ jsx60(
7311
7651
  "div",
7312
7652
  {
7313
7653
  ref: groupRef,
@@ -7328,11 +7668,11 @@ function ResizablePanel({
7328
7668
  ...props
7329
7669
  }) {
7330
7670
  const { sizes, register } = useResizable();
7331
- React68.useEffect(() => {
7671
+ React70.useEffect(() => {
7332
7672
  register(index, defaultSize);
7333
7673
  }, [register, index, defaultSize]);
7334
7674
  const basis = sizes[index] ?? defaultSize;
7335
- return /* @__PURE__ */ jsx58(
7675
+ return /* @__PURE__ */ jsx60(
7336
7676
  "div",
7337
7677
  {
7338
7678
  "data-slot": "resizable-panel",
@@ -7351,12 +7691,12 @@ function ResizableHandle({
7351
7691
  ...props
7352
7692
  }) {
7353
7693
  const { setSizes, direction, keyboardStep, groupRef } = useResizable();
7354
- const draggingRef = React68.useRef(false);
7355
- const resize = React68.useCallback(
7694
+ const draggingRef = React70.useRef(false);
7695
+ const resize = React70.useCallback(
7356
7696
  (delta) => setSizes((prev) => redistribute(prev, index, delta)),
7357
7697
  [setSizes, index]
7358
7698
  );
7359
- const onPointerMove = React68.useCallback(
7699
+ const onPointerMove = React70.useCallback(
7360
7700
  (event) => {
7361
7701
  if (!draggingRef.current) return;
7362
7702
  const rect = groupRef.current?.getBoundingClientRect();
@@ -7368,7 +7708,7 @@ function ResizableHandle({
7368
7708
  },
7369
7709
  [direction, resize, groupRef]
7370
7710
  );
7371
- const onPointerUp = React68.useCallback(() => {
7711
+ const onPointerUp = React70.useCallback(() => {
7372
7712
  draggingRef.current = false;
7373
7713
  window.removeEventListener("pointermove", onPointerMove);
7374
7714
  window.removeEventListener("pointerup", onPointerUp);
@@ -7379,7 +7719,7 @@ function ResizableHandle({
7379
7719
  window.addEventListener("pointermove", onPointerMove);
7380
7720
  window.addEventListener("pointerup", onPointerUp);
7381
7721
  };
7382
- React68.useEffect(() => () => onPointerUp(), [onPointerUp]);
7722
+ React70.useEffect(() => () => onPointerUp(), [onPointerUp]);
7383
7723
  const onKeyDown = (event) => {
7384
7724
  let delta;
7385
7725
  switch (event.key) {
@@ -7399,7 +7739,7 @@ function ResizableHandle({
7399
7739
  event.preventDefault();
7400
7740
  resize(delta);
7401
7741
  };
7402
- return /* @__PURE__ */ jsxs28(
7742
+ return /* @__PURE__ */ jsxs29(
7403
7743
  "div",
7404
7744
  {
7405
7745
  "data-slot": "resizable-handle",
@@ -7412,7 +7752,7 @@ function ResizableHandle({
7412
7752
  onKeyDown,
7413
7753
  ...props,
7414
7754
  children: [
7415
- withHandle && /* @__PURE__ */ jsx58("div", { className: RESIZABLE_HANDLE_GRIP, children: /* @__PURE__ */ jsxs28(
7755
+ withHandle && /* @__PURE__ */ jsx60("div", { className: RESIZABLE_HANDLE_GRIP, children: /* @__PURE__ */ jsxs29(
7416
7756
  "svg",
7417
7757
  {
7418
7758
  className: "size-2.5",
@@ -7427,12 +7767,12 @@ function ResizableHandle({
7427
7767
  strokeLinejoin: "round",
7428
7768
  "aria-hidden": "true",
7429
7769
  children: [
7430
- /* @__PURE__ */ jsx58("circle", { cx: "9", cy: "12", r: "1" }),
7431
- /* @__PURE__ */ jsx58("circle", { cx: "9", cy: "5", r: "1" }),
7432
- /* @__PURE__ */ jsx58("circle", { cx: "9", cy: "19", r: "1" }),
7433
- /* @__PURE__ */ jsx58("circle", { cx: "15", cy: "12", r: "1" }),
7434
- /* @__PURE__ */ jsx58("circle", { cx: "15", cy: "5", r: "1" }),
7435
- /* @__PURE__ */ jsx58("circle", { cx: "15", cy: "19", r: "1" })
7770
+ /* @__PURE__ */ jsx60("circle", { cx: "9", cy: "12", r: "1" }),
7771
+ /* @__PURE__ */ jsx60("circle", { cx: "9", cy: "5", r: "1" }),
7772
+ /* @__PURE__ */ jsx60("circle", { cx: "9", cy: "19", r: "1" }),
7773
+ /* @__PURE__ */ jsx60("circle", { cx: "15", cy: "12", r: "1" }),
7774
+ /* @__PURE__ */ jsx60("circle", { cx: "15", cy: "5", r: "1" }),
7775
+ /* @__PURE__ */ jsx60("circle", { cx: "15", cy: "19", r: "1" })
7436
7776
  ]
7437
7777
  }
7438
7778
  ) }),
@@ -7443,7 +7783,7 @@ function ResizableHandle({
7443
7783
  }
7444
7784
 
7445
7785
  // src/components/terminal.tsx
7446
- import * as React69 from "react";
7786
+ import * as React71 from "react";
7447
7787
 
7448
7788
  // src/generated/terminal.ts
7449
7789
  var TERMINAL_ROOT = "grid w-full grid-cols-1 gap-px bg-border text-ink text-sm lg:h-[calc(100dvh-var(--ev-shell-offset,0px))] lg:grid-cols-[minmax(0,1fr)_18rem_20rem] lg:grid-rows-[auto_minmax(0,1fr)_14rem]";
@@ -7489,12 +7829,12 @@ var orderSideClasses = {
7489
7829
  var OPEN_ORDERS_EMPTY = "flex flex-1 items-center justify-center p-6 text-sm text-ink-soft";
7490
7830
 
7491
7831
  // src/components/terminal.tsx
7492
- import { jsx as jsx59, jsxs as jsxs29 } from "react/jsx-runtime";
7832
+ import { jsx as jsx61, jsxs as jsxs30 } from "react/jsx-runtime";
7493
7833
  function Terminal({ className, ...props }) {
7494
- return /* @__PURE__ */ jsx59("div", { "data-slot": "terminal", className: cn(TERMINAL_ROOT, className), ...props });
7834
+ return /* @__PURE__ */ jsx61("div", { "data-slot": "terminal", className: cn(TERMINAL_ROOT, className), ...props });
7495
7835
  }
7496
7836
  function TerminalPane({ area, className, ...props }) {
7497
- return /* @__PURE__ */ jsx59(
7837
+ return /* @__PURE__ */ jsx61(
7498
7838
  "section",
7499
7839
  {
7500
7840
  "data-slot": "terminal-pane",
@@ -7505,7 +7845,7 @@ function TerminalPane({ area, className, ...props }) {
7505
7845
  );
7506
7846
  }
7507
7847
  function TerminalPaneHeader({ className, ...props }) {
7508
- return /* @__PURE__ */ jsx59(
7848
+ return /* @__PURE__ */ jsx61(
7509
7849
  "header",
7510
7850
  {
7511
7851
  "data-slot": "terminal-pane-header",
@@ -7515,10 +7855,10 @@ function TerminalPaneHeader({ className, ...props }) {
7515
7855
  );
7516
7856
  }
7517
7857
  function TerminalPaneBody({ className, ...props }) {
7518
- return /* @__PURE__ */ jsx59("div", { "data-slot": "terminal-pane-body", className: cn(TERMINAL_PANE_BODY, className), ...props });
7858
+ return /* @__PURE__ */ jsx61("div", { "data-slot": "terminal-pane-body", className: cn(TERMINAL_PANE_BODY, className), ...props });
7519
7859
  }
7520
- var TerminalChart = React69.forwardRef(function TerminalChart2({ className, ...props }, ref) {
7521
- return /* @__PURE__ */ jsx59(
7860
+ var TerminalChart = React71.forwardRef(function TerminalChart2({ className, ...props }, ref) {
7861
+ return /* @__PURE__ */ jsx61(
7522
7862
  "div",
7523
7863
  {
7524
7864
  ref,
@@ -7529,7 +7869,7 @@ var TerminalChart = React69.forwardRef(function TerminalChart2({ className, ...p
7529
7869
  );
7530
7870
  });
7531
7871
  function TerminalTicker({ className, ...props }) {
7532
- return /* @__PURE__ */ jsx59(
7872
+ return /* @__PURE__ */ jsx61(
7533
7873
  "div",
7534
7874
  {
7535
7875
  "data-slot": "terminal-ticker",
@@ -7540,19 +7880,19 @@ function TerminalTicker({ className, ...props }) {
7540
7880
  );
7541
7881
  }
7542
7882
  function TickerStat({ label, value, className, ...props }) {
7543
- return /* @__PURE__ */ jsxs29("div", { "data-slot": "ticker-stat", className: TERMINAL_TICKER_STAT, ...props, children: [
7544
- /* @__PURE__ */ jsx59("span", { className: TERMINAL_TICKER_LABEL, children: label }),
7545
- /* @__PURE__ */ jsx59("span", { className: cn(TERMINAL_TICKER_VALUE, className), children: value })
7883
+ return /* @__PURE__ */ jsxs30("div", { "data-slot": "ticker-stat", className: TERMINAL_TICKER_STAT, ...props, children: [
7884
+ /* @__PURE__ */ jsx61("span", { className: TERMINAL_TICKER_LABEL, children: label }),
7885
+ /* @__PURE__ */ jsx61("span", { className: cn(TERMINAL_TICKER_VALUE, className), children: value })
7546
7886
  ] });
7547
7887
  }
7548
7888
  function OrderBook({ className, ...props }) {
7549
- return /* @__PURE__ */ jsx59("div", { "data-slot": "order-book", className: cn(ORDER_BOOK, className), ...props });
7889
+ return /* @__PURE__ */ jsx61("div", { "data-slot": "order-book", className: cn(ORDER_BOOK, className), ...props });
7550
7890
  }
7551
7891
  function OrderBookHead({ price, size, total, className, ...props }) {
7552
- return /* @__PURE__ */ jsxs29("div", { "data-slot": "order-book-head", className: cn(ORDER_BOOK_HEAD, className), ...props, children: [
7553
- /* @__PURE__ */ jsx59("span", { children: price }),
7554
- /* @__PURE__ */ jsx59("span", { children: size }),
7555
- /* @__PURE__ */ jsx59("span", { children: total })
7892
+ return /* @__PURE__ */ jsxs30("div", { "data-slot": "order-book-head", className: cn(ORDER_BOOK_HEAD, className), ...props, children: [
7893
+ /* @__PURE__ */ jsx61("span", { children: price }),
7894
+ /* @__PURE__ */ jsx61("span", { children: size }),
7895
+ /* @__PURE__ */ jsx61("span", { children: total })
7556
7896
  ] });
7557
7897
  }
7558
7898
  function OrderBookRow({
@@ -7564,7 +7904,7 @@ function OrderBookRow({
7564
7904
  className,
7565
7905
  ...props
7566
7906
  }) {
7567
- return /* @__PURE__ */ jsxs29(
7907
+ return /* @__PURE__ */ jsxs30(
7568
7908
  "div",
7569
7909
  {
7570
7910
  "data-slot": "order-book-row",
@@ -7572,7 +7912,7 @@ function OrderBookRow({
7572
7912
  className: cn(ORDER_BOOK_ROW, className),
7573
7913
  ...props,
7574
7914
  children: [
7575
- /* @__PURE__ */ jsx59(
7915
+ /* @__PURE__ */ jsx61(
7576
7916
  "span",
7577
7917
  {
7578
7918
  "aria-hidden": "true",
@@ -7580,9 +7920,9 @@ function OrderBookRow({
7580
7920
  style: { width: `${depthPercent(depth)}%` }
7581
7921
  }
7582
7922
  ),
7583
- /* @__PURE__ */ jsx59("span", { className: cn(ORDER_BOOK_PRICE, bookSideClasses[side]), children: price }),
7584
- /* @__PURE__ */ jsx59("span", { children: size }),
7585
- /* @__PURE__ */ jsx59("span", { children: total })
7923
+ /* @__PURE__ */ jsx61("span", { className: cn(ORDER_BOOK_PRICE, bookSideClasses[side]), children: price }),
7924
+ /* @__PURE__ */ jsx61("span", { children: size }),
7925
+ /* @__PURE__ */ jsx61("span", { children: total })
7586
7926
  ]
7587
7927
  }
7588
7928
  );
@@ -7592,10 +7932,10 @@ function depthPercent(depth) {
7592
7932
  return Math.round(Math.min(1, Math.max(0, depth)) * 100);
7593
7933
  }
7594
7934
  function OrderBookSpread({ className, ...props }) {
7595
- return /* @__PURE__ */ jsx59("div", { "data-slot": "order-book-spread", className: cn(ORDER_BOOK_SPREAD, className), ...props });
7935
+ return /* @__PURE__ */ jsx61("div", { "data-slot": "order-book-spread", className: cn(ORDER_BOOK_SPREAD, className), ...props });
7596
7936
  }
7597
7937
  function TradesTapeRow({ side, price, size, time, className, ...props }) {
7598
- return /* @__PURE__ */ jsxs29(
7938
+ return /* @__PURE__ */ jsxs30(
7599
7939
  "div",
7600
7940
  {
7601
7941
  "data-slot": "trades-tape-row",
@@ -7603,15 +7943,15 @@ function TradesTapeRow({ side, price, size, time, className, ...props }) {
7603
7943
  className: cn(TRADES_TAPE_ROW, className),
7604
7944
  ...props,
7605
7945
  children: [
7606
- /* @__PURE__ */ jsx59("span", { className: cn(ORDER_BOOK_PRICE, bookSideClasses[side]), children: price }),
7607
- /* @__PURE__ */ jsx59("span", { children: size }),
7608
- /* @__PURE__ */ jsx59("span", { children: time })
7946
+ /* @__PURE__ */ jsx61("span", { className: cn(ORDER_BOOK_PRICE, bookSideClasses[side]), children: price }),
7947
+ /* @__PURE__ */ jsx61("span", { children: size }),
7948
+ /* @__PURE__ */ jsx61("span", { children: time })
7609
7949
  ]
7610
7950
  }
7611
7951
  );
7612
7952
  }
7613
7953
  function OrderForm({ className, onSubmit, ...props }) {
7614
- return /* @__PURE__ */ jsx59(
7954
+ return /* @__PURE__ */ jsx61(
7615
7955
  "form",
7616
7956
  {
7617
7957
  "data-slot": "order-form",
@@ -7625,13 +7965,13 @@ function OrderForm({ className, onSubmit, ...props }) {
7625
7965
  );
7626
7966
  }
7627
7967
  function OrderFormRow({ label, value, className, ...props }) {
7628
- return /* @__PURE__ */ jsxs29("div", { "data-slot": "order-form-row", className: cn(ORDER_FORM_ROW, className), ...props, children: [
7629
- /* @__PURE__ */ jsx59("span", { className: ORDER_FORM_LABEL, children: label }),
7630
- /* @__PURE__ */ jsx59("span", { className: ORDER_FORM_VALUE, children: value })
7968
+ return /* @__PURE__ */ jsxs30("div", { "data-slot": "order-form-row", className: cn(ORDER_FORM_ROW, className), ...props, children: [
7969
+ /* @__PURE__ */ jsx61("span", { className: ORDER_FORM_LABEL, children: label }),
7970
+ /* @__PURE__ */ jsx61("span", { className: ORDER_FORM_VALUE, children: value })
7631
7971
  ] });
7632
7972
  }
7633
7973
  function OrderFormSubmit({ side = "buy", className, ...props }) {
7634
- return /* @__PURE__ */ jsx59(
7974
+ return /* @__PURE__ */ jsx61(
7635
7975
  "button",
7636
7976
  {
7637
7977
  type: "submit",
@@ -7643,7 +7983,7 @@ function OrderFormSubmit({ side = "buy", className, ...props }) {
7643
7983
  );
7644
7984
  }
7645
7985
  function OpenOrdersEmpty({ className, ...props }) {
7646
- return /* @__PURE__ */ jsx59("div", { "data-slot": "open-orders-empty", className: cn(OPEN_ORDERS_EMPTY, className), ...props });
7986
+ return /* @__PURE__ */ jsx61("div", { "data-slot": "open-orders-empty", className: cn(OPEN_ORDERS_EMPTY, className), ...props });
7647
7987
  }
7648
7988
  export {
7649
7989
  Accordion,
@@ -7728,6 +8068,7 @@ export {
7728
8068
  ContextMenuSubContent,
7729
8069
  ContextMenuSubTrigger,
7730
8070
  ContextMenuTrigger,
8071
+ DateTimePicker,
7731
8072
  Dialog,
7732
8073
  DialogClose,
7733
8074
  DialogContent,
@@ -7818,6 +8159,7 @@ export {
7818
8159
  Kbd,
7819
8160
  KbdGroup,
7820
8161
  Label,
8162
+ Logo,
7821
8163
  Menubar,
7822
8164
  MenubarCheckboxItem,
7823
8165
  MenubarContent,