@evinvest/uikit 0.12.1 → 0.14.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
@@ -589,6 +589,29 @@ function BreadcrumbEllipsis({
589
589
  // src/components/button.tsx
590
590
  import "react";
591
591
 
592
+ // src/generated/accent.ts
593
+ var accentTextClasses = {
594
+ "trace": "text-accent-trace",
595
+ "debug": "text-accent-debug",
596
+ "info": "text-accent-info",
597
+ "warn": "text-accent-warn",
598
+ "error": "text-accent-error"
599
+ };
600
+ var accentFillClasses = {
601
+ "trace": "bg-accent-trace text-on-accent-trace hover:bg-accent-trace/90",
602
+ "debug": "bg-accent-debug text-background hover:bg-accent-debug/90",
603
+ "info": "bg-accent-info text-on-accent-info hover:bg-accent-info/90",
604
+ "warn": "bg-accent-warn text-background hover:bg-accent-warn/90",
605
+ "error": "bg-accent-error text-on-accent-error hover:bg-accent-error/90"
606
+ };
607
+ var accentOutlineClasses = {
608
+ "trace": "border border-accent-trace/40 text-accent-trace hover:bg-accent-trace/10",
609
+ "debug": "border border-accent-debug/40 text-accent-debug hover:bg-accent-debug/10",
610
+ "info": "border border-accent-info/40 text-accent-info hover:bg-accent-info/10",
611
+ "warn": "border border-accent-warn/40 text-accent-warn hover:bg-accent-warn/10",
612
+ "error": "border border-accent-error/40 text-accent-error hover:bg-accent-error/10"
613
+ };
614
+
592
615
  // src/generated/button.ts
593
616
  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
617
  var buttonVariantClasses = {
@@ -600,16 +623,18 @@ var buttonVariantClasses = {
600
623
  "link": "text-primary underline-offset-4 hover:underline"
601
624
  };
602
625
  var buttonSizeClasses = {
603
- "md": "h-9 px-4 py-[var(--control-py)] has-[>svg]:px-3",
604
626
  "xs": "h-7 gap-1 px-2 text-xs has-[>svg]:px-1.5",
605
627
  "sm": "h-8 gap-1.5 px-3 has-[>svg]:px-2.5",
628
+ "md": "h-9 px-4 py-[var(--control-py)] has-[>svg]:px-3",
606
629
  "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)]"
630
+ "xl": "px-[var(--control-px)] py-[var(--control-py)] text-[length:var(--control-text)]"
631
+ };
632
+ var buttonIconSizeClasses = {
633
+ "xs": "h-7 aspect-square px-0",
634
+ "sm": "h-8 aspect-square px-0",
635
+ "md": "h-9 aspect-square px-0",
636
+ "lg": "h-10 aspect-square px-0",
637
+ "xl": "aspect-square p-[var(--control-py)]"
613
638
  };
614
639
 
615
640
  // src/components/button.tsx
@@ -617,14 +642,27 @@ import { jsx as jsx5 } from "react/jsx-runtime";
617
642
  function buttonVariants({
618
643
  variant = "primary",
619
644
  size = "md",
645
+ icon = false,
646
+ accent,
620
647
  className
621
648
  } = {}) {
622
- return cn(BUTTON_BASE, buttonVariantClasses[variant], buttonSizeClasses[size], className);
649
+ return cn(
650
+ BUTTON_BASE,
651
+ buttonVariantClasses[variant],
652
+ icon ? buttonIconSizeClasses[size] : buttonSizeClasses[size],
653
+ accent === void 0 ? void 0 : accentClass(accent, variant),
654
+ className
655
+ );
656
+ }
657
+ function accentClass(accent, variant) {
658
+ return variant === "outline" ? accentOutlineClasses[accent] : accentFillClasses[accent];
623
659
  }
624
660
  function Button({
625
661
  className,
626
662
  variant = "primary",
627
663
  size = "md",
664
+ icon = false,
665
+ accent,
628
666
  asChild = false,
629
667
  href,
630
668
  ...props
@@ -635,7 +673,7 @@ function Button({
635
673
  {
636
674
  "data-slot": "button",
637
675
  href,
638
- className: cn(buttonVariants({ variant, size }), className),
676
+ className: cn(buttonVariants({ variant, size, icon, accent }), className),
639
677
  ...props
640
678
  }
641
679
  );
@@ -1295,6 +1333,44 @@ function Textarea({ className, ...props }) {
1295
1333
  return /* @__PURE__ */ jsx15("textarea", { "data-slot": "textarea", className: cn(TEXTAREA_BASE, className), ...props });
1296
1334
  }
1297
1335
 
1336
+ // src/components/logo.tsx
1337
+ import "react";
1338
+ import { jsx as jsx16 } from "react/jsx-runtime";
1339
+ var maskStyle = {
1340
+ backgroundColor: "currentColor",
1341
+ maskImage: "var(--brand-mark)",
1342
+ WebkitMaskImage: "var(--brand-mark)",
1343
+ maskRepeat: "no-repeat",
1344
+ WebkitMaskRepeat: "no-repeat",
1345
+ maskPosition: "center",
1346
+ WebkitMaskPosition: "center",
1347
+ maskSize: "contain",
1348
+ WebkitMaskSize: "contain",
1349
+ // the ratio's fallback is what makes a missing mark *visible*: a masked span
1350
+ // has no intrinsic size, so `h-N w-auto` without it is zero-width
1351
+ aspectRatio: "var(--brand-aspect, 1)"
1352
+ };
1353
+ function Logo({ className, withBackground = false }) {
1354
+ const mark = /* @__PURE__ */ jsx16(
1355
+ "span",
1356
+ {
1357
+ "data-slot": "logo",
1358
+ "aria-hidden": true,
1359
+ style: maskStyle,
1360
+ className: cn("inline-block", withBackground ? "w-3/5 h-3/5" : className)
1361
+ }
1362
+ );
1363
+ if (!withBackground) return mark;
1364
+ return /* @__PURE__ */ jsx16(
1365
+ "span",
1366
+ {
1367
+ "data-slot": "logo-background",
1368
+ className: cn("inline-flex items-center justify-center bg-brand", className),
1369
+ children: mark
1370
+ }
1371
+ );
1372
+ }
1373
+
1298
1374
  // src/components/input-group.tsx
1299
1375
  import "react";
1300
1376
 
@@ -1319,12 +1395,12 @@ var INPUT_GROUP_INPUT_CONTROL = "flex-1 rounded-none border-0 bg-transparent sha
1319
1395
  var INPUT_GROUP_TEXTAREA_CONTROL = "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0";
1320
1396
 
1321
1397
  // src/components/input-group.tsx
1322
- import { jsx as jsx16 } from "react/jsx-runtime";
1398
+ import { jsx as jsx17 } from "react/jsx-runtime";
1323
1399
  function InputGroup({
1324
1400
  className,
1325
1401
  ...props
1326
1402
  }) {
1327
- return /* @__PURE__ */ jsx16(
1403
+ return /* @__PURE__ */ jsx17(
1328
1404
  "div",
1329
1405
  {
1330
1406
  "data-slot": "input-group",
@@ -1339,7 +1415,7 @@ function InputGroupAddon({
1339
1415
  align = "inline-start",
1340
1416
  ...props
1341
1417
  }) {
1342
- return /* @__PURE__ */ jsx16(
1418
+ return /* @__PURE__ */ jsx17(
1343
1419
  "div",
1344
1420
  {
1345
1421
  role: "group",
@@ -1365,7 +1441,7 @@ function InputGroupButton({
1365
1441
  size = "xs",
1366
1442
  ...props
1367
1443
  }) {
1368
- return /* @__PURE__ */ jsx16(
1444
+ return /* @__PURE__ */ jsx17(
1369
1445
  Button,
1370
1446
  {
1371
1447
  type,
@@ -1384,7 +1460,7 @@ function InputGroupText({
1384
1460
  className,
1385
1461
  ...props
1386
1462
  }) {
1387
- return /* @__PURE__ */ jsx16(
1463
+ return /* @__PURE__ */ jsx17(
1388
1464
  "span",
1389
1465
  {
1390
1466
  className: cn(INPUT_GROUP_TEXT, className),
@@ -1396,7 +1472,7 @@ function InputGroupInput({
1396
1472
  className,
1397
1473
  ...props
1398
1474
  }) {
1399
- return /* @__PURE__ */ jsx16(
1475
+ return /* @__PURE__ */ jsx17(
1400
1476
  Input,
1401
1477
  {
1402
1478
  "data-slot": "input-group-control",
@@ -1409,7 +1485,7 @@ function InputGroupTextarea({
1409
1485
  className,
1410
1486
  ...props
1411
1487
  }) {
1412
- return /* @__PURE__ */ jsx16(
1488
+ return /* @__PURE__ */ jsx17(
1413
1489
  Textarea,
1414
1490
  {
1415
1491
  "data-slot": "input-group-control",
@@ -1433,13 +1509,13 @@ var separatorOrientations = {
1433
1509
  };
1434
1510
 
1435
1511
  // src/components/separator.tsx
1436
- import { jsx as jsx17 } from "react/jsx-runtime";
1512
+ import { jsx as jsx18 } from "react/jsx-runtime";
1437
1513
  function Separator({
1438
1514
  className,
1439
1515
  orientation = "horizontal",
1440
1516
  ...props
1441
1517
  }) {
1442
- return /* @__PURE__ */ jsx17(
1518
+ return /* @__PURE__ */ jsx18(
1443
1519
  "div",
1444
1520
  {
1445
1521
  role: "separator",
@@ -1482,9 +1558,9 @@ var ITEM_HEADER = "flex basis-full items-center justify-between gap-2";
1482
1558
  var ITEM_FOOTER = "flex basis-full items-center justify-between gap-2";
1483
1559
 
1484
1560
  // src/components/item.tsx
1485
- import { jsx as jsx18 } from "react/jsx-runtime";
1561
+ import { jsx as jsx19 } from "react/jsx-runtime";
1486
1562
  function ItemGroup({ className, ...props }) {
1487
- return /* @__PURE__ */ jsx18(
1563
+ return /* @__PURE__ */ jsx19(
1488
1564
  "div",
1489
1565
  {
1490
1566
  role: "list",
@@ -1498,7 +1574,7 @@ function ItemSeparator({
1498
1574
  className,
1499
1575
  ...props
1500
1576
  }) {
1501
- return /* @__PURE__ */ jsx18(
1577
+ return /* @__PURE__ */ jsx19(
1502
1578
  Separator,
1503
1579
  {
1504
1580
  "data-slot": "item-separator",
@@ -1516,7 +1592,7 @@ function Item({
1516
1592
  ...props
1517
1593
  }) {
1518
1594
  const Comp = asChild ? Slot : "div";
1519
- return /* @__PURE__ */ jsx18(
1595
+ return /* @__PURE__ */ jsx19(
1520
1596
  Comp,
1521
1597
  {
1522
1598
  "data-slot": "item",
@@ -1532,7 +1608,7 @@ function ItemMedia({
1532
1608
  variant = "bare",
1533
1609
  ...props
1534
1610
  }) {
1535
- return /* @__PURE__ */ jsx18(
1611
+ return /* @__PURE__ */ jsx19(
1536
1612
  "div",
1537
1613
  {
1538
1614
  "data-slot": "item-media",
@@ -1546,7 +1622,7 @@ function ItemContent({
1546
1622
  className,
1547
1623
  ...props
1548
1624
  }) {
1549
- return /* @__PURE__ */ jsx18(
1625
+ return /* @__PURE__ */ jsx19(
1550
1626
  "div",
1551
1627
  {
1552
1628
  "data-slot": "item-content",
@@ -1556,7 +1632,7 @@ function ItemContent({
1556
1632
  );
1557
1633
  }
1558
1634
  function ItemTitle({ className, ...props }) {
1559
- return /* @__PURE__ */ jsx18(
1635
+ return /* @__PURE__ */ jsx19(
1560
1636
  "div",
1561
1637
  {
1562
1638
  "data-slot": "item-title",
@@ -1569,7 +1645,7 @@ function ItemDescription({
1569
1645
  className,
1570
1646
  ...props
1571
1647
  }) {
1572
- return /* @__PURE__ */ jsx18(
1648
+ return /* @__PURE__ */ jsx19(
1573
1649
  "p",
1574
1650
  {
1575
1651
  "data-slot": "item-description",
@@ -1582,7 +1658,7 @@ function ItemActions({
1582
1658
  className,
1583
1659
  ...props
1584
1660
  }) {
1585
- return /* @__PURE__ */ jsx18(
1661
+ return /* @__PURE__ */ jsx19(
1586
1662
  "div",
1587
1663
  {
1588
1664
  "data-slot": "item-actions",
@@ -1595,7 +1671,7 @@ function ItemHeader({
1595
1671
  className,
1596
1672
  ...props
1597
1673
  }) {
1598
- return /* @__PURE__ */ jsx18(
1674
+ return /* @__PURE__ */ jsx19(
1599
1675
  "div",
1600
1676
  {
1601
1677
  "data-slot": "item-header",
@@ -1608,7 +1684,7 @@ function ItemFooter({
1608
1684
  className,
1609
1685
  ...props
1610
1686
  }) {
1611
- return /* @__PURE__ */ jsx18(
1687
+ return /* @__PURE__ */ jsx19(
1612
1688
  "div",
1613
1689
  {
1614
1690
  "data-slot": "item-footer",
@@ -1626,9 +1702,9 @@ var KBD_BASE = "bg-muted text-ink-soft pointer-events-none inline-flex h-5 w-fit
1626
1702
  var KBD_GROUP_BASE = "inline-flex items-center gap-1";
1627
1703
 
1628
1704
  // src/components/kbd.tsx
1629
- import { jsx as jsx19 } from "react/jsx-runtime";
1705
+ import { jsx as jsx20 } from "react/jsx-runtime";
1630
1706
  function Kbd({ className, ...props }) {
1631
- return /* @__PURE__ */ jsx19(
1707
+ return /* @__PURE__ */ jsx20(
1632
1708
  "kbd",
1633
1709
  {
1634
1710
  "data-slot": "kbd",
@@ -1638,7 +1714,7 @@ function Kbd({ className, ...props }) {
1638
1714
  );
1639
1715
  }
1640
1716
  function KbdGroup({ className, ...props }) {
1641
- return /* @__PURE__ */ jsx19(
1717
+ return /* @__PURE__ */ jsx20(
1642
1718
  "kbd",
1643
1719
  {
1644
1720
  "data-slot": "kbd-group",
@@ -1650,9 +1726,9 @@ function KbdGroup({ className, ...props }) {
1650
1726
 
1651
1727
  // src/components/pagination.tsx
1652
1728
  import "react";
1653
- import { jsx as jsx20, jsxs as jsxs5 } from "react/jsx-runtime";
1729
+ import { jsx as jsx21, jsxs as jsxs5 } from "react/jsx-runtime";
1654
1730
  function Pagination({ className, ...props }) {
1655
- return /* @__PURE__ */ jsx20(
1731
+ return /* @__PURE__ */ jsx21(
1656
1732
  "nav",
1657
1733
  {
1658
1734
  role: "navigation",
@@ -1667,7 +1743,7 @@ function PaginationContent({
1667
1743
  className,
1668
1744
  ...props
1669
1745
  }) {
1670
- return /* @__PURE__ */ jsx20(
1746
+ return /* @__PURE__ */ jsx21(
1671
1747
  "ul",
1672
1748
  {
1673
1749
  "data-slot": "pagination-content",
@@ -1677,15 +1753,16 @@ function PaginationContent({
1677
1753
  );
1678
1754
  }
1679
1755
  function PaginationItem(props) {
1680
- return /* @__PURE__ */ jsx20("li", { "data-slot": "pagination-item", ...props });
1756
+ return /* @__PURE__ */ jsx21("li", { "data-slot": "pagination-item", ...props });
1681
1757
  }
1682
1758
  function PaginationLink({
1683
1759
  className,
1684
1760
  isActive,
1685
- size = "icon",
1761
+ size = "md",
1762
+ icon = true,
1686
1763
  ...props
1687
1764
  }) {
1688
- return /* @__PURE__ */ jsx20(
1765
+ return /* @__PURE__ */ jsx21(
1689
1766
  "a",
1690
1767
  {
1691
1768
  "aria-current": isActive ? "page" : void 0,
@@ -1694,7 +1771,8 @@ function PaginationLink({
1694
1771
  className: cn(
1695
1772
  buttonVariants({
1696
1773
  variant: isActive ? "outline" : "ghost",
1697
- size
1774
+ size,
1775
+ icon
1698
1776
  }),
1699
1777
  className
1700
1778
  ),
@@ -1702,8 +1780,8 @@ function PaginationLink({
1702
1780
  }
1703
1781
  );
1704
1782
  }
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" }) });
1783
+ 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" }) });
1784
+ 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
1785
  var MoreHorizontal = () => /* @__PURE__ */ jsxs5(
1708
1786
  "svg",
1709
1787
  {
@@ -1713,9 +1791,9 @@ var MoreHorizontal = () => /* @__PURE__ */ jsxs5(
1713
1791
  stroke: "currentColor",
1714
1792
  strokeWidth: 2,
1715
1793
  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" })
1794
+ /* @__PURE__ */ jsx21("circle", { cx: "12", cy: "12", r: "1" }),
1795
+ /* @__PURE__ */ jsx21("circle", { cx: "19", cy: "12", r: "1" }),
1796
+ /* @__PURE__ */ jsx21("circle", { cx: "5", cy: "12", r: "1" })
1719
1797
  ]
1720
1798
  }
1721
1799
  );
@@ -1731,8 +1809,8 @@ function PaginationPrevious({
1731
1809
  className: cn("gap-1 px-2.5 sm:pl-2.5", className),
1732
1810
  ...props,
1733
1811
  children: [
1734
- /* @__PURE__ */ jsx20(ChevronLeft, {}),
1735
- /* @__PURE__ */ jsx20("span", { className: "hidden sm:block", children: "Previous" })
1812
+ /* @__PURE__ */ jsx21(ChevronLeft, {}),
1813
+ /* @__PURE__ */ jsx21("span", { className: "hidden sm:block", children: "Previous" })
1736
1814
  ]
1737
1815
  }
1738
1816
  );
@@ -1749,8 +1827,8 @@ function PaginationNext({
1749
1827
  className: cn("gap-1 px-2.5 sm:pr-2.5", className),
1750
1828
  ...props,
1751
1829
  children: [
1752
- /* @__PURE__ */ jsx20("span", { className: "hidden sm:block", children: "Next" }),
1753
- /* @__PURE__ */ jsx20(ChevronRight, {})
1830
+ /* @__PURE__ */ jsx21("span", { className: "hidden sm:block", children: "Next" }),
1831
+ /* @__PURE__ */ jsx21(ChevronRight, {})
1754
1832
  ]
1755
1833
  }
1756
1834
  );
@@ -1767,8 +1845,8 @@ function PaginationEllipsis({
1767
1845
  className: cn("flex size-9 items-center justify-center", className),
1768
1846
  ...props,
1769
1847
  children: [
1770
- /* @__PURE__ */ jsx20(MoreHorizontal, {}),
1771
- /* @__PURE__ */ jsx20("span", { className: "sr-only", children: "More pages" })
1848
+ /* @__PURE__ */ jsx21(MoreHorizontal, {}),
1849
+ /* @__PURE__ */ jsx21("span", { className: "sr-only", children: "More pages" })
1772
1850
  ]
1773
1851
  }
1774
1852
  );
@@ -1782,9 +1860,9 @@ var PROGRESS_TRACK = "bg-primary/20 relative h-2 w-full overflow-hidden rounded-
1782
1860
  var PROGRESS_INDICATOR = "bg-primary h-full w-full flex-1 transition-all";
1783
1861
 
1784
1862
  // src/components/progress.tsx
1785
- import { jsx as jsx21 } from "react/jsx-runtime";
1863
+ import { jsx as jsx22 } from "react/jsx-runtime";
1786
1864
  function Progress({ className, value = 0, ...props }) {
1787
- return /* @__PURE__ */ jsx21(
1865
+ return /* @__PURE__ */ jsx22(
1788
1866
  "div",
1789
1867
  {
1790
1868
  "data-slot": "progress",
@@ -1794,7 +1872,7 @@ function Progress({ className, value = 0, ...props }) {
1794
1872
  "aria-valuemax": 100,
1795
1873
  className: cn(PROGRESS_TRACK, className),
1796
1874
  ...props,
1797
- children: /* @__PURE__ */ jsx21(
1875
+ children: /* @__PURE__ */ jsx22(
1798
1876
  "div",
1799
1877
  {
1800
1878
  "data-slot": "progress-indicator",
@@ -1813,9 +1891,9 @@ import "react";
1813
1891
  var SKELETON_BASE = "bg-hover animate-pulse rounded-md";
1814
1892
 
1815
1893
  // src/components/skeleton.tsx
1816
- import { jsx as jsx22 } from "react/jsx-runtime";
1894
+ import { jsx as jsx23 } from "react/jsx-runtime";
1817
1895
  function Skeleton({ className, ...props }) {
1818
- return /* @__PURE__ */ jsx22(
1896
+ return /* @__PURE__ */ jsx23(
1819
1897
  "div",
1820
1898
  {
1821
1899
  "data-slot": "skeleton",
@@ -1827,9 +1905,9 @@ function Skeleton({ className, ...props }) {
1827
1905
 
1828
1906
  // src/components/spinner.tsx
1829
1907
  import "react";
1830
- import { jsx as jsx23 } from "react/jsx-runtime";
1908
+ import { jsx as jsx24 } from "react/jsx-runtime";
1831
1909
  function Spinner({ className, ...props }) {
1832
- return /* @__PURE__ */ jsx23(
1910
+ return /* @__PURE__ */ jsx24(
1833
1911
  "svg",
1834
1912
  {
1835
1913
  role: "status",
@@ -1840,50 +1918,20 @@ function Spinner({ className, ...props }) {
1840
1918
  stroke: "currentColor",
1841
1919
  strokeWidth: 2,
1842
1920
  ...props,
1843
- children: /* @__PURE__ */ jsx23("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
1921
+ children: /* @__PURE__ */ jsx24("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })
1844
1922
  }
1845
1923
  );
1846
1924
  }
1847
1925
 
1848
1926
  // src/components/status-screen.tsx
1849
1927
  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
- };
1928
+ import { jsx as jsx25, jsxs as jsxs6 } from "react/jsx-runtime";
1872
1929
  function statusCtaClass(accent, variant) {
1873
1930
  return cn(
1874
- buttonVariants({ variant, size: "lg" }),
1875
- "font-mono text-xs uppercase tracking-widest",
1876
- variant === "outline" ? BTN_OUTLINE[accent] : BTN_FILLED[accent]
1931
+ buttonVariants({ variant, size: "lg", accent }),
1932
+ "font-mono text-xs uppercase tracking-widest"
1877
1933
  );
1878
1934
  }
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
1935
  function ArrowLeftIcon({ className }) {
1888
1936
  return /* @__PURE__ */ jsxs6(
1889
1937
  "svg",
@@ -1897,8 +1945,8 @@ function ArrowLeftIcon({ className }) {
1897
1945
  strokeLinejoin: "round",
1898
1946
  "aria-hidden": true,
1899
1947
  children: [
1900
- /* @__PURE__ */ jsx24("path", { d: "m12 19-7-7 7-7" }),
1901
- /* @__PURE__ */ jsx24("path", { d: "M19 12H5" })
1948
+ /* @__PURE__ */ jsx25("path", { d: "m12 19-7-7 7-7" }),
1949
+ /* @__PURE__ */ jsx25("path", { d: "M19 12H5" })
1902
1950
  ]
1903
1951
  }
1904
1952
  );
@@ -1916,9 +1964,9 @@ function StatusScreen({
1916
1964
  linkComponent
1917
1965
  }) {
1918
1966
  const L = linkComponent ?? "a";
1919
- const accentText = ACCENT_TEXT[accent];
1967
+ const accentText = accentTextClasses[accent];
1920
1968
  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(
1969
+ /* @__PURE__ */ jsx25(
1922
1970
  "div",
1923
1971
  {
1924
1972
  "aria-hidden": true,
@@ -1929,19 +1977,19 @@ function StatusScreen({
1929
1977
  }
1930
1978
  ),
1931
1979
  /* @__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 }),
1980
+ /* @__PURE__ */ jsx25(Logo, { className: cn("mb-7 h-10 w-auto", accentText) }),
1981
+ /* @__PURE__ */ jsx25("p", { className: cn("mb-6 font-mono text-[11px] uppercase tracking-[0.34em]", accentText), children: eyebrow }),
1982
+ /* @__PURE__ */ jsx25("p", { className: cn("font-serif text-[110px] font-medium leading-[0.9] sm:text-[180px]", accentText), children: code }),
1935
1983
  /* @__PURE__ */ jsxs6("h1", { className: "mt-4 font-serif text-3xl font-light leading-tight text-ink sm:text-5xl", children: [
1936
1984
  headlineLead,
1937
- /* @__PURE__ */ jsx24("span", { className: cn("font-serif italic", accentText), children: headlineAccent }),
1985
+ /* @__PURE__ */ jsx25("span", { className: cn("font-serif italic", accentText), children: headlineAccent }),
1938
1986
  headlineTail
1939
1987
  ] }),
1940
- /* @__PURE__ */ jsx24("p", { className: "mx-auto mt-5 max-w-md text-sm leading-relaxed text-ink/60 sm:text-base", children: subtext }),
1988
+ /* @__PURE__ */ jsx25("p", { className: "mx-auto mt-5 max-w-md text-sm leading-relaxed text-ink/60 sm:text-base", children: subtext }),
1941
1989
  /* @__PURE__ */ jsxs6("div", { className: "mt-9 flex flex-col items-center gap-3 sm:flex-row", children: [
1942
1990
  children,
1943
1991
  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,
1992
+ link.leadingArrow ? /* @__PURE__ */ jsx25(ArrowLeftIcon, { className: "mr-2 h-4 w-4" }) : null,
1945
1993
  link.label
1946
1994
  ] }, link.label))
1947
1995
  ] })
@@ -1949,7 +1997,7 @@ function StatusScreen({
1949
1997
  ] });
1950
1998
  }
1951
1999
  function NotFound({ linkComponent = "a", homeHref = "/", contactHref = "/contact" }) {
1952
- return /* @__PURE__ */ jsx24(
2000
+ return /* @__PURE__ */ jsx25(
1953
2001
  StatusScreen,
1954
2002
  {
1955
2003
  accent: "debug",
@@ -1967,7 +2015,7 @@ function NotFound({ linkComponent = "a", homeHref = "/", contactHref = "/contact
1967
2015
  );
1968
2016
  }
1969
2017
  function Forbidden({ linkComponent = "a", homeHref = "/", contactHref = "/contact" }) {
1970
- return /* @__PURE__ */ jsx24(
2018
+ return /* @__PURE__ */ jsx25(
1971
2019
  StatusScreen,
1972
2020
  {
1973
2021
  accent: "warn",
@@ -1985,7 +2033,7 @@ function Forbidden({ linkComponent = "a", homeHref = "/", contactHref = "/contac
1985
2033
  );
1986
2034
  }
1987
2035
  function ServerError({ linkComponent = "a", homeHref = "/", reset }) {
1988
- return /* @__PURE__ */ jsx24(
2036
+ return /* @__PURE__ */ jsx25(
1989
2037
  StatusScreen,
1990
2038
  {
1991
2039
  accent: "error",
@@ -1996,7 +2044,7 @@ function ServerError({ linkComponent = "a", homeHref = "/", reset }) {
1996
2044
  subtext: "Something broke on our end \u2014 not yours. We've been alerted and are restoring service. Please try again in a moment.",
1997
2045
  linkComponent,
1998
2046
  links: [{ label: "Back to home", href: homeHref, variant: "outline", leadingArrow: true }],
1999
- children: /* @__PURE__ */ jsx24(
2047
+ children: /* @__PURE__ */ jsx25(
2000
2048
  "button",
2001
2049
  {
2002
2050
  type: "button",
@@ -2024,14 +2072,14 @@ var TABLE_CELL = "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr
2024
2072
  var TABLE_CAPTION = "text-ink-soft mt-4 text-sm";
2025
2073
 
2026
2074
  // src/components/table.tsx
2027
- import { jsx as jsx25 } from "react/jsx-runtime";
2075
+ import { jsx as jsx26 } from "react/jsx-runtime";
2028
2076
  function Table({ className, ...props }) {
2029
- return /* @__PURE__ */ jsx25(
2077
+ return /* @__PURE__ */ jsx26(
2030
2078
  "div",
2031
2079
  {
2032
2080
  "data-slot": "table-container",
2033
2081
  className: TABLE_CONTAINER,
2034
- children: /* @__PURE__ */ jsx25(
2082
+ children: /* @__PURE__ */ jsx26(
2035
2083
  "table",
2036
2084
  {
2037
2085
  "data-slot": "table",
@@ -2046,7 +2094,7 @@ function TableHeader({
2046
2094
  className,
2047
2095
  ...props
2048
2096
  }) {
2049
- return /* @__PURE__ */ jsx25(
2097
+ return /* @__PURE__ */ jsx26(
2050
2098
  "thead",
2051
2099
  {
2052
2100
  "data-slot": "table-header",
@@ -2059,7 +2107,7 @@ function TableBody({
2059
2107
  className,
2060
2108
  ...props
2061
2109
  }) {
2062
- return /* @__PURE__ */ jsx25(
2110
+ return /* @__PURE__ */ jsx26(
2063
2111
  "tbody",
2064
2112
  {
2065
2113
  "data-slot": "table-body",
@@ -2072,7 +2120,7 @@ function TableFooter({
2072
2120
  className,
2073
2121
  ...props
2074
2122
  }) {
2075
- return /* @__PURE__ */ jsx25(
2123
+ return /* @__PURE__ */ jsx26(
2076
2124
  "tfoot",
2077
2125
  {
2078
2126
  "data-slot": "table-footer",
@@ -2082,7 +2130,7 @@ function TableFooter({
2082
2130
  );
2083
2131
  }
2084
2132
  function TableRow({ className, ...props }) {
2085
- return /* @__PURE__ */ jsx25(
2133
+ return /* @__PURE__ */ jsx26(
2086
2134
  "tr",
2087
2135
  {
2088
2136
  "data-slot": "table-row",
@@ -2092,7 +2140,7 @@ function TableRow({ className, ...props }) {
2092
2140
  );
2093
2141
  }
2094
2142
  function TableHead({ className, ...props }) {
2095
- return /* @__PURE__ */ jsx25(
2143
+ return /* @__PURE__ */ jsx26(
2096
2144
  "th",
2097
2145
  {
2098
2146
  "data-slot": "table-head",
@@ -2102,7 +2150,7 @@ function TableHead({ className, ...props }) {
2102
2150
  );
2103
2151
  }
2104
2152
  function TableCell({ className, ...props }) {
2105
- return /* @__PURE__ */ jsx25(
2153
+ return /* @__PURE__ */ jsx26(
2106
2154
  "td",
2107
2155
  {
2108
2156
  "data-slot": "table-cell",
@@ -2115,7 +2163,7 @@ function TableCaption({
2115
2163
  className,
2116
2164
  ...props
2117
2165
  }) {
2118
- return /* @__PURE__ */ jsx25(
2166
+ return /* @__PURE__ */ jsx26(
2119
2167
  "caption",
2120
2168
  {
2121
2169
  "data-slot": "table-caption",
@@ -2126,7 +2174,7 @@ function TableCaption({
2126
2174
  }
2127
2175
 
2128
2176
  // src/components/accordion.tsx
2129
- import * as React36 from "react";
2177
+ import * as React37 from "react";
2130
2178
 
2131
2179
  // src/generated/accordion.ts
2132
2180
  var ACCORDION_ITEM = "border-b last:border-b-0";
@@ -2136,16 +2184,16 @@ var ACCORDION_CONTENT = "data-[state=closed]:animate-accordion-up data-[state=op
2136
2184
  var ACCORDION_CONTENT_INNER = "pt-0 pb-4";
2137
2185
 
2138
2186
  // src/components/accordion.tsx
2139
- import { jsx as jsx26, jsxs as jsxs7 } from "react/jsx-runtime";
2140
- var AccordionContext = React36.createContext(null);
2187
+ import { jsx as jsx27, jsxs as jsxs7 } from "react/jsx-runtime";
2188
+ var AccordionContext = React37.createContext(null);
2141
2189
  function useAccordion() {
2142
- const ctx = React36.useContext(AccordionContext);
2190
+ const ctx = React37.useContext(AccordionContext);
2143
2191
  if (!ctx) throw new Error("Accordion parts must be used within <Accordion>");
2144
2192
  return ctx;
2145
2193
  }
2146
- var ItemContext = React36.createContext(null);
2194
+ var ItemContext = React37.createContext(null);
2147
2195
  function useItemValue() {
2148
- const value = React36.useContext(ItemContext);
2196
+ const value = React37.useContext(ItemContext);
2149
2197
  if (value === null)
2150
2198
  throw new Error("AccordionTrigger/Content must be used within <AccordionItem>");
2151
2199
  return value;
@@ -2173,7 +2221,7 @@ function Accordion({
2173
2221
  if (open.includes(v)) setOpen(collapsible ? [] : open);
2174
2222
  else setOpen([v]);
2175
2223
  };
2176
- return /* @__PURE__ */ jsx26(AccordionContext.Provider, { value: { isOpen, toggle }, children: /* @__PURE__ */ jsx26("div", { "data-slot": "accordion", ...props, children }) });
2224
+ return /* @__PURE__ */ jsx27(AccordionContext.Provider, { value: { isOpen, toggle }, children: /* @__PURE__ */ jsx27("div", { "data-slot": "accordion", ...props, children }) });
2177
2225
  }
2178
2226
  function AccordionItem({
2179
2227
  className,
@@ -2181,7 +2229,7 @@ function AccordionItem({
2181
2229
  children,
2182
2230
  ...props
2183
2231
  }) {
2184
- return /* @__PURE__ */ jsx26(ItemContext.Provider, { value, children: /* @__PURE__ */ jsx26(
2232
+ return /* @__PURE__ */ jsx27(ItemContext.Provider, { value, children: /* @__PURE__ */ jsx27(
2185
2233
  "div",
2186
2234
  {
2187
2235
  "data-slot": "accordion-item",
@@ -2200,7 +2248,7 @@ function AccordionTrigger({
2200
2248
  const { isOpen, toggle } = useAccordion();
2201
2249
  const value = useItemValue();
2202
2250
  const open = isOpen(value);
2203
- return /* @__PURE__ */ jsx26("h3", { className: ACCORDION_HEADER, "data-slot": "accordion-header", children: /* @__PURE__ */ jsxs7(
2251
+ return /* @__PURE__ */ jsx27("h3", { className: ACCORDION_HEADER, "data-slot": "accordion-header", children: /* @__PURE__ */ jsxs7(
2204
2252
  "button",
2205
2253
  {
2206
2254
  type: "button",
@@ -2215,7 +2263,7 @@ function AccordionTrigger({
2215
2263
  ...props,
2216
2264
  children: [
2217
2265
  children,
2218
- /* @__PURE__ */ jsx26(
2266
+ /* @__PURE__ */ jsx27(
2219
2267
  "svg",
2220
2268
  {
2221
2269
  xmlns: "http://www.w3.org/2000/svg",
@@ -2228,7 +2276,7 @@ function AccordionTrigger({
2228
2276
  strokeLinecap: "round",
2229
2277
  strokeLinejoin: "round",
2230
2278
  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" })
2279
+ children: /* @__PURE__ */ jsx27("path", { d: "m6 9 6 6 6-6" })
2232
2280
  }
2233
2281
  )
2234
2282
  ]
@@ -2243,26 +2291,26 @@ function AccordionContent({
2243
2291
  const { isOpen } = useAccordion();
2244
2292
  const value = useItemValue();
2245
2293
  if (!isOpen(value)) return null;
2246
- return /* @__PURE__ */ jsx26(
2294
+ return /* @__PURE__ */ jsx27(
2247
2295
  "div",
2248
2296
  {
2249
2297
  "data-slot": "accordion-content",
2250
2298
  "data-state": "open",
2251
2299
  className: ACCORDION_CONTENT,
2252
2300
  ...props,
2253
- children: /* @__PURE__ */ jsx26("div", { className: cn(ACCORDION_CONTENT_INNER, className), children })
2301
+ children: /* @__PURE__ */ jsx27("div", { className: cn(ACCORDION_CONTENT_INNER, className), children })
2254
2302
  }
2255
2303
  );
2256
2304
  }
2257
2305
 
2258
2306
  // src/components/collapsible.tsx
2259
- import * as React37 from "react";
2260
- import { jsx as jsx27 } from "react/jsx-runtime";
2261
- var CollapsibleContext = React37.createContext(
2307
+ import * as React38 from "react";
2308
+ import { jsx as jsx28 } from "react/jsx-runtime";
2309
+ var CollapsibleContext = React38.createContext(
2262
2310
  null
2263
2311
  );
2264
2312
  function useCollapsible() {
2265
- const ctx = React37.useContext(CollapsibleContext);
2313
+ const ctx = React38.useContext(CollapsibleContext);
2266
2314
  if (!ctx) throw new Error("Collapsible parts must be used within <Collapsible>");
2267
2315
  return ctx;
2268
2316
  }
@@ -2278,14 +2326,14 @@ function Collapsible({
2278
2326
  defaultValue: defaultOpen,
2279
2327
  ...onOpenChange ? { onChange: onOpenChange } : {}
2280
2328
  });
2281
- return /* @__PURE__ */ jsx27(CollapsibleContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx27("div", { "data-slot": "collapsible", "data-state": isOpen ? "open" : "closed", ...props, children }) });
2329
+ return /* @__PURE__ */ jsx28(CollapsibleContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx28("div", { "data-slot": "collapsible", "data-state": isOpen ? "open" : "closed", ...props, children }) });
2282
2330
  }
2283
2331
  function CollapsibleTrigger({
2284
2332
  onClick,
2285
2333
  ...props
2286
2334
  }) {
2287
2335
  const { open, setOpen } = useCollapsible();
2288
- return /* @__PURE__ */ jsx27(
2336
+ return /* @__PURE__ */ jsx28(
2289
2337
  "button",
2290
2338
  {
2291
2339
  type: "button",
@@ -2306,7 +2354,7 @@ function CollapsibleContent({
2306
2354
  }) {
2307
2355
  const { open } = useCollapsible();
2308
2356
  if (!open) return null;
2309
- return /* @__PURE__ */ jsx27("div", { "data-slot": "collapsible-content", "data-state": "open", ...props, children });
2357
+ return /* @__PURE__ */ jsx28("div", { "data-slot": "collapsible-content", "data-state": "open", ...props, children });
2310
2358
  }
2311
2359
 
2312
2360
  // src/components/band.tsx
@@ -2337,7 +2385,7 @@ var STAT_LABEL = "text-ink-soft";
2337
2385
  var CHECK = "font-semibold text-positive";
2338
2386
 
2339
2387
  // src/components/band.tsx
2340
- import { jsx as jsx28, jsxs as jsxs8 } from "react/jsx-runtime";
2388
+ import { jsx as jsx29, jsxs as jsxs8 } from "react/jsx-runtime";
2341
2389
  function Section({
2342
2390
  polarity = "light",
2343
2391
  surface = "background",
@@ -2345,7 +2393,7 @@ function Section({
2345
2393
  className,
2346
2394
  ...props
2347
2395
  }) {
2348
- return /* @__PURE__ */ jsx28(
2396
+ return /* @__PURE__ */ jsx29(
2349
2397
  "section",
2350
2398
  {
2351
2399
  "data-slot": "section",
@@ -2360,33 +2408,33 @@ function Section({
2360
2408
  );
2361
2409
  }
2362
2410
  function Eyebrow({ className, ...props }) {
2363
- return /* @__PURE__ */ jsx28("p", { "data-slot": "eyebrow", className: cn(EYEBROW, className), ...props });
2411
+ return /* @__PURE__ */ jsx29("p", { "data-slot": "eyebrow", className: cn(EYEBROW, className), ...props });
2364
2412
  }
2365
2413
  function Display({ className, ...props }) {
2366
- return /* @__PURE__ */ jsx28("h2", { "data-slot": "display", className: cn(DISPLAY_BASE, className), ...props });
2414
+ return /* @__PURE__ */ jsx29("h2", { "data-slot": "display", className: cn(DISPLAY_BASE, className), ...props });
2367
2415
  }
2368
2416
  function SectionHead({ eyebrow, title, lede, className, ...props }) {
2369
2417
  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 })
2418
+ /* @__PURE__ */ jsx29(Eyebrow, { children: eyebrow }),
2419
+ /* @__PURE__ */ jsx29(Display, { children: title }),
2420
+ lede && /* @__PURE__ */ jsx29("p", { className: LEDE, children: lede })
2373
2421
  ] });
2374
2422
  }
2375
2423
  function Prose({ className, ...props }) {
2376
- return /* @__PURE__ */ jsx28("p", { "data-slot": "prose", className: cn(PROSE, className), ...props });
2424
+ return /* @__PURE__ */ jsx29("p", { "data-slot": "prose", className: cn(PROSE, className), ...props });
2377
2425
  }
2378
2426
  function Stat({ figure, label, className, ...props }) {
2379
2427
  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 })
2428
+ /* @__PURE__ */ jsx29("span", { className: STAT_FIGURE, children: figure }),
2429
+ /* @__PURE__ */ jsx29("span", { className: STAT_LABEL, children: label })
2382
2430
  ] });
2383
2431
  }
2384
2432
  function Check({ className, ...props }) {
2385
- return /* @__PURE__ */ jsx28("span", { "data-slot": "check", "aria-hidden": true, className: cn(CHECK, className), ...props, children: "\u2713" });
2433
+ return /* @__PURE__ */ jsx29("span", { "data-slot": "check", "aria-hidden": true, className: cn(CHECK, className), ...props, children: "\u2713" });
2386
2434
  }
2387
2435
 
2388
2436
  // src/components/tabs.tsx
2389
- import * as React39 from "react";
2437
+ import * as React40 from "react";
2390
2438
 
2391
2439
  // src/generated/tabs.ts
2392
2440
  var TABS_ROOT = "flex flex-col gap-2";
@@ -2395,10 +2443,10 @@ var TABS_TRIGGER = "data-[state=active]:bg-background focus-visible:border-ring
2395
2443
  var TABS_CONTENT = "flex-1 outline-none";
2396
2444
 
2397
2445
  // src/components/tabs.tsx
2398
- import { jsx as jsx29 } from "react/jsx-runtime";
2399
- var TabsContext = React39.createContext(null);
2446
+ import { jsx as jsx30 } from "react/jsx-runtime";
2447
+ var TabsContext = React40.createContext(null);
2400
2448
  function useTabs() {
2401
- const ctx = React39.useContext(TabsContext);
2449
+ const ctx = React40.useContext(TabsContext);
2402
2450
  if (!ctx) throw new Error("Tabs parts must be used within <Tabs>");
2403
2451
  return ctx;
2404
2452
  }
@@ -2416,7 +2464,7 @@ function Tabs({
2416
2464
  defaultValue,
2417
2465
  ...onValueChange ? { onChange: onValueChange } : {}
2418
2466
  });
2419
- return /* @__PURE__ */ jsx29(TabsContext.Provider, { value: { value: active, setValue, orientation }, children: /* @__PURE__ */ jsx29(
2467
+ return /* @__PURE__ */ jsx30(TabsContext.Provider, { value: { value: active, setValue, orientation }, children: /* @__PURE__ */ jsx30(
2420
2468
  "div",
2421
2469
  {
2422
2470
  "data-slot": "tabs",
@@ -2434,12 +2482,12 @@ function TabsList({
2434
2482
  ...props
2435
2483
  }) {
2436
2484
  const { orientation } = useTabs();
2437
- const items = React39.Children.toArray(children);
2485
+ const items = React40.Children.toArray(children);
2438
2486
  const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } = useRovingFocus({
2439
2487
  count: items.length,
2440
2488
  orientation: orientation === "vertical" ? "vertical" : "horizontal"
2441
2489
  });
2442
- return /* @__PURE__ */ jsx29(
2490
+ return /* @__PURE__ */ jsx30(
2443
2491
  "div",
2444
2492
  {
2445
2493
  role: "tablist",
@@ -2452,7 +2500,7 @@ function TabsList({
2452
2500
  },
2453
2501
  ...props,
2454
2502
  children: items.map(
2455
- (child, index) => React39.isValidElement(child) ? React39.cloneElement(child, {
2503
+ (child, index) => React40.isValidElement(child) ? React40.cloneElement(child, {
2456
2504
  __index: index,
2457
2505
  __isFocusItem: index === activeIndex,
2458
2506
  __onFocusItem: () => setActiveIndex(index)
@@ -2472,7 +2520,7 @@ function TabsTrigger({
2472
2520
  }) {
2473
2521
  const { value: active, setValue } = useTabs();
2474
2522
  const selected = active === value;
2475
- return /* @__PURE__ */ jsx29(
2523
+ return /* @__PURE__ */ jsx30(
2476
2524
  "button",
2477
2525
  {
2478
2526
  type: "button",
@@ -2503,7 +2551,7 @@ function TabsContent({
2503
2551
  }) {
2504
2552
  const { value: active } = useTabs();
2505
2553
  if (active !== value) return null;
2506
- return /* @__PURE__ */ jsx29(
2554
+ return /* @__PURE__ */ jsx30(
2507
2555
  "div",
2508
2556
  {
2509
2557
  role: "tabpanel",
@@ -2534,7 +2582,7 @@ var toggleSizeClasses = {
2534
2582
  };
2535
2583
 
2536
2584
  // src/components/toggle.tsx
2537
- import { jsx as jsx30 } from "react/jsx-runtime";
2585
+ import { jsx as jsx31 } from "react/jsx-runtime";
2538
2586
  function toggleVariants({
2539
2587
  variant = "bare",
2540
2588
  size = "md",
@@ -2557,7 +2605,7 @@ function Toggle({
2557
2605
  defaultValue: defaultPressed,
2558
2606
  ...onPressedChange ? { onChange: onPressedChange } : {}
2559
2607
  });
2560
- return /* @__PURE__ */ jsx30(
2608
+ return /* @__PURE__ */ jsx31(
2561
2609
  "button",
2562
2610
  {
2563
2611
  type: "button",
@@ -2575,9 +2623,9 @@ function Toggle({
2575
2623
  }
2576
2624
 
2577
2625
  // 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({
2626
+ import * as React42 from "react";
2627
+ import { jsx as jsx32 } from "react/jsx-runtime";
2628
+ var ToggleGroupContext = React42.createContext({
2581
2629
  variant: "bare",
2582
2630
  size: "md",
2583
2631
  value: [],
@@ -2604,7 +2652,7 @@ function ToggleGroup({
2604
2652
  defaultValue: toArray(defaultValue),
2605
2653
  onChange: (next) => onValueChange?.(type === "single" ? next[0] ?? "" : next)
2606
2654
  });
2607
- const toggle = React41.useCallback(
2655
+ const toggle = React42.useCallback(
2608
2656
  (itemValue) => {
2609
2657
  if (type === "single") {
2610
2658
  setSelected(selected.includes(itemValue) ? [] : [itemValue]);
@@ -2616,7 +2664,7 @@ function ToggleGroup({
2616
2664
  },
2617
2665
  [type, selected, setSelected]
2618
2666
  );
2619
- return /* @__PURE__ */ jsx31(
2667
+ return /* @__PURE__ */ jsx32(
2620
2668
  "div",
2621
2669
  {
2622
2670
  "data-slot": "toggle-group",
@@ -2627,7 +2675,7 @@ function ToggleGroup({
2627
2675
  className
2628
2676
  ),
2629
2677
  ...props,
2630
- children: /* @__PURE__ */ jsx31(ToggleGroupContext.Provider, { value: { variant, size, value: selected, toggle }, children })
2678
+ children: /* @__PURE__ */ jsx32(ToggleGroupContext.Provider, { value: { variant, size, value: selected, toggle }, children })
2631
2679
  }
2632
2680
  );
2633
2681
  }
@@ -2640,11 +2688,11 @@ function ToggleGroupItem({
2640
2688
  onClick,
2641
2689
  ...props
2642
2690
  }) {
2643
- const context = React41.useContext(ToggleGroupContext);
2691
+ const context = React42.useContext(ToggleGroupContext);
2644
2692
  const resolvedVariant = context.variant || variant || "bare";
2645
2693
  const resolvedSize = context.size || size || "md";
2646
2694
  const on = context.value.includes(value);
2647
- return /* @__PURE__ */ jsx31(
2695
+ return /* @__PURE__ */ jsx32(
2648
2696
  "button",
2649
2697
  {
2650
2698
  type: "button",
@@ -2670,7 +2718,7 @@ function ToggleGroupItem({
2670
2718
 
2671
2719
  // src/components/switch.tsx
2672
2720
  import "react";
2673
- import { jsx as jsx32 } from "react/jsx-runtime";
2721
+ import { jsx as jsx33 } from "react/jsx-runtime";
2674
2722
  function Switch({
2675
2723
  className,
2676
2724
  checked,
@@ -2686,7 +2734,7 @@ function Switch({
2686
2734
  ...onCheckedChange ? { onChange: onCheckedChange } : {}
2687
2735
  });
2688
2736
  const state = on ? "checked" : "unchecked";
2689
- return /* @__PURE__ */ jsx32(
2737
+ return /* @__PURE__ */ jsx33(
2690
2738
  "button",
2691
2739
  {
2692
2740
  type: "button",
@@ -2704,7 +2752,7 @@ function Switch({
2704
2752
  setOn(!on);
2705
2753
  },
2706
2754
  ...props,
2707
- children: /* @__PURE__ */ jsx32(
2755
+ children: /* @__PURE__ */ jsx33(
2708
2756
  "span",
2709
2757
  {
2710
2758
  "data-slot": "switch-thumb",
@@ -2718,7 +2766,7 @@ function Switch({
2718
2766
 
2719
2767
  // src/components/checkbox.tsx
2720
2768
  import "react";
2721
- import { jsx as jsx33 } from "react/jsx-runtime";
2769
+ import { jsx as jsx34 } from "react/jsx-runtime";
2722
2770
  function Checkbox({
2723
2771
  className,
2724
2772
  checked,
@@ -2734,7 +2782,7 @@ function Checkbox({
2734
2782
  ...onCheckedChange ? { onChange: onCheckedChange } : {}
2735
2783
  });
2736
2784
  const state = on ? "checked" : "unchecked";
2737
- return /* @__PURE__ */ jsx33(
2785
+ return /* @__PURE__ */ jsx34(
2738
2786
  "button",
2739
2787
  {
2740
2788
  type: "button",
@@ -2752,12 +2800,12 @@ function Checkbox({
2752
2800
  setOn(!on);
2753
2801
  },
2754
2802
  ...props,
2755
- children: on && /* @__PURE__ */ jsx33(
2803
+ children: on && /* @__PURE__ */ jsx34(
2756
2804
  "span",
2757
2805
  {
2758
2806
  "data-slot": "checkbox-indicator",
2759
2807
  className: "flex items-center justify-center text-current transition-none",
2760
- children: /* @__PURE__ */ jsx33(
2808
+ children: /* @__PURE__ */ jsx34(
2761
2809
  "svg",
2762
2810
  {
2763
2811
  xmlns: "http://www.w3.org/2000/svg",
@@ -2769,7 +2817,7 @@ function Checkbox({
2769
2817
  strokeLinejoin: "round",
2770
2818
  className: "size-3.5",
2771
2819
  "aria-hidden": "true",
2772
- children: /* @__PURE__ */ jsx33("path", { d: "M20 6 9 17l-5-5" })
2820
+ children: /* @__PURE__ */ jsx34("path", { d: "M20 6 9 17l-5-5" })
2773
2821
  }
2774
2822
  )
2775
2823
  }
@@ -2779,15 +2827,15 @@ function Checkbox({
2779
2827
  }
2780
2828
 
2781
2829
  // src/components/radio-group.tsx
2782
- import * as React44 from "react";
2830
+ import * as React45 from "react";
2783
2831
 
2784
2832
  // src/generated/radio-group.ts
2785
2833
  var RADIO_GROUP_ROOT = "grid gap-3";
2786
2834
  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
2835
 
2788
2836
  // src/components/radio-group.tsx
2789
- import { jsx as jsx34 } from "react/jsx-runtime";
2790
- var RadioGroupContext = React44.createContext(
2837
+ import { jsx as jsx35 } from "react/jsx-runtime";
2838
+ var RadioGroupContext = React45.createContext(
2791
2839
  null
2792
2840
  );
2793
2841
  function RadioGroup({
@@ -2804,10 +2852,10 @@ function RadioGroup({
2804
2852
  defaultValue,
2805
2853
  ...onValueChange ? { onChange: onValueChange } : {}
2806
2854
  });
2807
- const itemsRef = React44.useRef([]);
2808
- const [count, setCount] = React44.useState(0);
2855
+ const itemsRef = React45.useRef([]);
2856
+ const [count, setCount] = React45.useState(0);
2809
2857
  const { activeIndex, setActiveIndex, onKeyDown: rovingKeyDown } = useRovingFocus({ count, orientation: "vertical", loop: true });
2810
- const register = React44.useCallback((el) => {
2858
+ const register = React45.useCallback((el) => {
2811
2859
  const list = itemsRef.current;
2812
2860
  let index = list.indexOf(el);
2813
2861
  if (index === -1) {
@@ -2817,11 +2865,11 @@ function RadioGroup({
2817
2865
  }
2818
2866
  return index;
2819
2867
  }, []);
2820
- const ctx = React44.useMemo(
2868
+ const ctx = React45.useMemo(
2821
2869
  () => ({ value: current, setValue: setCurrent, register, activeIndex, setActiveIndex }),
2822
2870
  [current, setCurrent, register, activeIndex, setActiveIndex]
2823
2871
  );
2824
- return /* @__PURE__ */ jsx34(RadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx34(
2872
+ return /* @__PURE__ */ jsx35(RadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx35(
2825
2873
  "div",
2826
2874
  {
2827
2875
  "data-slot": "radio-group",
@@ -2843,14 +2891,14 @@ function RadioGroupItem({
2843
2891
  onClick,
2844
2892
  ...props
2845
2893
  }) {
2846
- const ctx = React44.useContext(RadioGroupContext);
2894
+ const ctx = React45.useContext(RadioGroupContext);
2847
2895
  if (!ctx) throw new Error("RadioGroupItem must be used within a RadioGroup");
2848
- const indexRef = React44.useRef(-1);
2896
+ const indexRef = React45.useRef(-1);
2849
2897
  const checked = ctx.value === value;
2850
- React44.useEffect(() => {
2898
+ React45.useEffect(() => {
2851
2899
  if (checked) ctx.setActiveIndex(indexRef.current);
2852
2900
  }, [checked]);
2853
- return /* @__PURE__ */ jsx34(
2901
+ return /* @__PURE__ */ jsx35(
2854
2902
  "button",
2855
2903
  {
2856
2904
  ref: (el) => {
@@ -2869,18 +2917,18 @@ function RadioGroupItem({
2869
2917
  ctx.setValue(value);
2870
2918
  },
2871
2919
  ...props,
2872
- children: checked ? /* @__PURE__ */ jsx34(
2920
+ children: checked ? /* @__PURE__ */ jsx35(
2873
2921
  "span",
2874
2922
  {
2875
2923
  "data-slot": "radio-group-indicator",
2876
2924
  className: "relative flex items-center justify-center",
2877
- children: /* @__PURE__ */ jsx34(
2925
+ children: /* @__PURE__ */ jsx35(
2878
2926
  "svg",
2879
2927
  {
2880
2928
  className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2",
2881
2929
  viewBox: "0 0 24 24",
2882
2930
  "aria-hidden": "true",
2883
- children: /* @__PURE__ */ jsx34("circle", { cx: "12", cy: "12", r: "10" })
2931
+ children: /* @__PURE__ */ jsx35("circle", { cx: "12", cy: "12", r: "10" })
2884
2932
  }
2885
2933
  )
2886
2934
  }
@@ -2890,7 +2938,7 @@ function RadioGroupItem({
2890
2938
  }
2891
2939
 
2892
2940
  // src/components/slider.tsx
2893
- import * as React45 from "react";
2941
+ import * as React46 from "react";
2894
2942
 
2895
2943
  // src/generated/slider.ts
2896
2944
  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 +2947,7 @@ var SLIDER_RANGE = "bg-primary absolute data-[orientation=horizontal]:h-full dat
2899
2947
  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
2948
 
2901
2949
  // src/components/slider.tsx
2902
- import { jsx as jsx35, jsxs as jsxs9 } from "react/jsx-runtime";
2950
+ import { jsx as jsx36, jsxs as jsxs9 } from "react/jsx-runtime";
2903
2951
  function clampStep(value, min, max, step) {
2904
2952
  const clamped = Math.min(max, Math.max(min, value));
2905
2953
  if (step <= 0) return clamped;
@@ -2926,9 +2974,9 @@ function Slider({
2926
2974
  const current = clampStep(raw, min, max, step);
2927
2975
  const span = Math.max(max - min, Number.EPSILON);
2928
2976
  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(
2977
+ const trackRef = React46.useRef(null);
2978
+ const draggingRef = React46.useRef(false);
2979
+ const valueFromPointer = React46.useCallback(
2932
2980
  (clientX, clientY) => {
2933
2981
  const rect = trackRef.current?.getBoundingClientRect();
2934
2982
  if (!rect) return current;
@@ -2989,14 +3037,14 @@ function Slider({
2989
3037
  onPointerMove,
2990
3038
  onPointerUp,
2991
3039
  children: [
2992
- /* @__PURE__ */ jsx35(
3040
+ /* @__PURE__ */ jsx36(
2993
3041
  "span",
2994
3042
  {
2995
3043
  ref: trackRef,
2996
3044
  "data-slot": "slider-track",
2997
3045
  "data-orientation": orientation,
2998
3046
  className: SLIDER_TRACK,
2999
- children: /* @__PURE__ */ jsx35(
3047
+ children: /* @__PURE__ */ jsx36(
3000
3048
  "span",
3001
3049
  {
3002
3050
  "data-slot": "slider-range",
@@ -3007,7 +3055,7 @@ function Slider({
3007
3055
  )
3008
3056
  }
3009
3057
  ),
3010
- /* @__PURE__ */ jsx35(
3058
+ /* @__PURE__ */ jsx36(
3011
3059
  "span",
3012
3060
  {
3013
3061
  "data-slot": "slider-thumb",
@@ -3042,15 +3090,15 @@ var scrollBarOrientations = {
3042
3090
  };
3043
3091
 
3044
3092
  // src/components/scroll-area.tsx
3045
- import { jsx as jsx36, jsxs as jsxs10 } from "react/jsx-runtime";
3093
+ import { jsx as jsx37, jsxs as jsxs10 } from "react/jsx-runtime";
3046
3094
  function ScrollArea({
3047
3095
  className,
3048
3096
  children,
3049
3097
  ...props
3050
3098
  }) {
3051
3099
  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, {})
3100
+ /* @__PURE__ */ jsx37("div", { "data-slot": "scroll-area-viewport", className: SCROLL_AREA_VIEWPORT, children }),
3101
+ /* @__PURE__ */ jsx37(ScrollBar, {})
3054
3102
  ] });
3055
3103
  }
3056
3104
  function ScrollBar({
@@ -3058,20 +3106,20 @@ function ScrollBar({
3058
3106
  orientation = "vertical",
3059
3107
  ...props
3060
3108
  }) {
3061
- return /* @__PURE__ */ jsx36(
3109
+ return /* @__PURE__ */ jsx37(
3062
3110
  "div",
3063
3111
  {
3064
3112
  "data-slot": "scroll-area-scrollbar",
3065
3113
  "data-orientation": orientation,
3066
3114
  className: cn(SCROLLBAR_BASE, scrollBarOrientations[orientation], className),
3067
3115
  ...props,
3068
- children: /* @__PURE__ */ jsx36("div", { "data-slot": "scroll-area-thumb", className: SCROLL_AREA_THUMB })
3116
+ children: /* @__PURE__ */ jsx37("div", { "data-slot": "scroll-area-thumb", className: SCROLL_AREA_THUMB })
3069
3117
  }
3070
3118
  );
3071
3119
  }
3072
3120
 
3073
3121
  // src/components/sidebar.tsx
3074
- import * as React47 from "react";
3122
+ import * as React48 from "react";
3075
3123
 
3076
3124
  // src/generated/sidebar.ts
3077
3125
  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 +3145,12 @@ var SIDEBAR_MENU = "flex w-full min-w-0 flex-col gap-1";
3097
3145
  var SIDEBAR_MENU_ITEM = "group/menu-item relative";
3098
3146
 
3099
3147
  // src/components/sidebar.tsx
3100
- import { jsx as jsx37, jsxs as jsxs11 } from "react/jsx-runtime";
3148
+ import { jsx as jsx38, jsxs as jsxs11 } from "react/jsx-runtime";
3101
3149
  var SIDEBAR_WIDTH = "16rem";
3102
3150
  var SIDEBAR_WIDTH_ICON = "3rem";
3103
- var SidebarContext = React47.createContext(null);
3151
+ var SidebarContext = React48.createContext(null);
3104
3152
  function useSidebar() {
3105
- const ctx = React47.useContext(SidebarContext);
3153
+ const ctx = React48.useContext(SidebarContext);
3106
3154
  if (!ctx) throw new Error("useSidebar must be used within a SidebarProvider.");
3107
3155
  return ctx;
3108
3156
  }
@@ -3120,16 +3168,16 @@ function SidebarProvider({
3120
3168
  defaultValue: defaultOpen,
3121
3169
  ...onOpenChange ? { onChange: onOpenChange } : {}
3122
3170
  });
3123
- const toggleSidebar = React47.useCallback(
3171
+ const toggleSidebar = React48.useCallback(
3124
3172
  () => setOpen(!open),
3125
3173
  [open, setOpen]
3126
3174
  );
3127
3175
  const state = open ? "expanded" : "collapsed";
3128
- const contextValue = React47.useMemo(
3176
+ const contextValue = React48.useMemo(
3129
3177
  () => ({ state, open, setOpen, toggleSidebar }),
3130
3178
  [state, open, setOpen, toggleSidebar]
3131
3179
  );
3132
- return /* @__PURE__ */ jsx37(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx37(
3180
+ return /* @__PURE__ */ jsx38(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx38(
3133
3181
  "div",
3134
3182
  {
3135
3183
  "data-slot": "sidebar-wrapper",
@@ -3154,7 +3202,7 @@ function Sidebar({
3154
3202
  }) {
3155
3203
  const { state } = useSidebar();
3156
3204
  if (collapsible === "none") {
3157
- return /* @__PURE__ */ jsx37(
3205
+ return /* @__PURE__ */ jsx38(
3158
3206
  "div",
3159
3207
  {
3160
3208
  "data-slot": "sidebar",
@@ -3164,7 +3212,7 @@ function Sidebar({
3164
3212
  }
3165
3213
  );
3166
3214
  }
3167
- return /* @__PURE__ */ jsx37(
3215
+ return /* @__PURE__ */ jsx38(
3168
3216
  "div",
3169
3217
  {
3170
3218
  className: "group peer text-ink hidden md:block",
@@ -3173,7 +3221,7 @@ function Sidebar({
3173
3221
  "data-variant": variant,
3174
3222
  "data-side": side,
3175
3223
  "data-slot": "sidebar",
3176
- children: /* @__PURE__ */ jsx37(
3224
+ children: /* @__PURE__ */ jsx38(
3177
3225
  "div",
3178
3226
  {
3179
3227
  "data-slot": "sidebar-inner",
@@ -3207,7 +3255,7 @@ function SidebarTrigger({
3207
3255
  ...props,
3208
3256
  children: [
3209
3257
  children,
3210
- /* @__PURE__ */ jsx37("span", { className: "sr-only", children: "Toggle Sidebar" })
3258
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Toggle Sidebar" })
3211
3259
  ]
3212
3260
  }
3213
3261
  );
@@ -3217,7 +3265,7 @@ function SidebarRail({
3217
3265
  ...props
3218
3266
  }) {
3219
3267
  const { toggleSidebar } = useSidebar();
3220
- return /* @__PURE__ */ jsx37(
3268
+ return /* @__PURE__ */ jsx38(
3221
3269
  "button",
3222
3270
  {
3223
3271
  type: "button",
@@ -3233,7 +3281,7 @@ function SidebarRail({
3233
3281
  );
3234
3282
  }
3235
3283
  function SidebarInset({ className, ...props }) {
3236
- return /* @__PURE__ */ jsx37(
3284
+ return /* @__PURE__ */ jsx38(
3237
3285
  "main",
3238
3286
  {
3239
3287
  "data-slot": "sidebar-inset",
@@ -3243,7 +3291,7 @@ function SidebarInset({ className, ...props }) {
3243
3291
  );
3244
3292
  }
3245
3293
  function SidebarHeader({ className, ...props }) {
3246
- return /* @__PURE__ */ jsx37(
3294
+ return /* @__PURE__ */ jsx38(
3247
3295
  "div",
3248
3296
  {
3249
3297
  "data-slot": "sidebar-header",
@@ -3254,7 +3302,7 @@ function SidebarHeader({ className, ...props }) {
3254
3302
  );
3255
3303
  }
3256
3304
  function SidebarFooter({ className, ...props }) {
3257
- return /* @__PURE__ */ jsx37(
3305
+ return /* @__PURE__ */ jsx38(
3258
3306
  "div",
3259
3307
  {
3260
3308
  "data-slot": "sidebar-footer",
@@ -3268,7 +3316,7 @@ function SidebarSeparator({
3268
3316
  className,
3269
3317
  ...props
3270
3318
  }) {
3271
- return /* @__PURE__ */ jsx37(
3319
+ return /* @__PURE__ */ jsx38(
3272
3320
  "div",
3273
3321
  {
3274
3322
  "data-slot": "sidebar-separator",
@@ -3280,7 +3328,7 @@ function SidebarSeparator({
3280
3328
  );
3281
3329
  }
3282
3330
  function SidebarContent({ className, ...props }) {
3283
- return /* @__PURE__ */ jsx37(
3331
+ return /* @__PURE__ */ jsx38(
3284
3332
  "div",
3285
3333
  {
3286
3334
  "data-slot": "sidebar-content",
@@ -3291,7 +3339,7 @@ function SidebarContent({ className, ...props }) {
3291
3339
  );
3292
3340
  }
3293
3341
  function SidebarGroup({ className, ...props }) {
3294
- return /* @__PURE__ */ jsx37(
3342
+ return /* @__PURE__ */ jsx38(
3295
3343
  "div",
3296
3344
  {
3297
3345
  "data-slot": "sidebar-group",
@@ -3307,7 +3355,7 @@ function SidebarGroupLabel({
3307
3355
  ...props
3308
3356
  }) {
3309
3357
  const Comp = asChild ? Slot : "div";
3310
- return /* @__PURE__ */ jsx37(
3358
+ return /* @__PURE__ */ jsx38(
3311
3359
  Comp,
3312
3360
  {
3313
3361
  "data-slot": "sidebar-group-label",
@@ -3321,7 +3369,7 @@ function SidebarGroupContent({
3321
3369
  className,
3322
3370
  ...props
3323
3371
  }) {
3324
- return /* @__PURE__ */ jsx37(
3372
+ return /* @__PURE__ */ jsx38(
3325
3373
  "div",
3326
3374
  {
3327
3375
  "data-slot": "sidebar-group-content",
@@ -3332,7 +3380,7 @@ function SidebarGroupContent({
3332
3380
  );
3333
3381
  }
3334
3382
  function SidebarMenu({ className, ...props }) {
3335
- return /* @__PURE__ */ jsx37(
3383
+ return /* @__PURE__ */ jsx38(
3336
3384
  "ul",
3337
3385
  {
3338
3386
  "data-slot": "sidebar-menu",
@@ -3343,7 +3391,7 @@ function SidebarMenu({ className, ...props }) {
3343
3391
  );
3344
3392
  }
3345
3393
  function SidebarMenuItem({ className, ...props }) {
3346
- return /* @__PURE__ */ jsx37(
3394
+ return /* @__PURE__ */ jsx38(
3347
3395
  "li",
3348
3396
  {
3349
3397
  "data-slot": "sidebar-menu-item",
@@ -3362,7 +3410,7 @@ function SidebarMenuButton({
3362
3410
  ...props
3363
3411
  }) {
3364
3412
  const Comp = asChild ? Slot : "button";
3365
- return /* @__PURE__ */ jsx37(
3413
+ return /* @__PURE__ */ jsx38(
3366
3414
  Comp,
3367
3415
  {
3368
3416
  "data-slot": "sidebar-menu-button",
@@ -3381,7 +3429,7 @@ function SidebarMenuButton({
3381
3429
  }
3382
3430
 
3383
3431
  // src/components/carousel.tsx
3384
- import * as React48 from "react";
3432
+ import * as React49 from "react";
3385
3433
 
3386
3434
  // src/generated/carousel.ts
3387
3435
  var CAROUSEL_CONTENT_VIEWPORT = "overflow-hidden";
@@ -3400,10 +3448,10 @@ var CAROUSEL_EDGE_FADE_PREV = "pointer-events-none absolute inset-y-0 left-0 w-2
3400
3448
  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
3449
 
3402
3450
  // 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);
3451
+ import { Fragment as Fragment4, jsx as jsx39, jsxs as jsxs12 } from "react/jsx-runtime";
3452
+ var CarouselContext = React49.createContext(null);
3405
3453
  function useCarousel() {
3406
- const context = React48.useContext(CarouselContext);
3454
+ const context = React49.useContext(CarouselContext);
3407
3455
  if (!context) {
3408
3456
  throw new Error("useCarousel must be used within a <Carousel />");
3409
3457
  }
@@ -3424,13 +3472,13 @@ function Carousel({
3424
3472
  defaultValue: defaultIndex,
3425
3473
  onChange: onIndexChange
3426
3474
  });
3427
- const [count, setCount] = React48.useState(0);
3475
+ const [count, setCount] = React49.useState(0);
3428
3476
  const canScrollPrev = index > 0;
3429
3477
  const canScrollNext = index < count - 1;
3430
- const scrollPrev = React48.useCallback(() => {
3478
+ const scrollPrev = React49.useCallback(() => {
3431
3479
  if (index > 0) setIndex(index - 1);
3432
3480
  }, [index, setIndex]);
3433
- const scrollNext = React48.useCallback(() => {
3481
+ const scrollNext = React49.useCallback(() => {
3434
3482
  if (index < count - 1) setIndex(index + 1);
3435
3483
  }, [index, count, setIndex]);
3436
3484
  const handleKeyDown = (event) => {
@@ -3443,7 +3491,7 @@ function Carousel({
3443
3491
  }
3444
3492
  onKeyDown?.(event);
3445
3493
  };
3446
- return /* @__PURE__ */ jsx38(
3494
+ return /* @__PURE__ */ jsx39(
3447
3495
  CarouselContext.Provider,
3448
3496
  {
3449
3497
  value: {
@@ -3456,7 +3504,7 @@ function Carousel({
3456
3504
  canScrollPrev,
3457
3505
  canScrollNext
3458
3506
  },
3459
- children: /* @__PURE__ */ jsx38(
3507
+ children: /* @__PURE__ */ jsx39(
3460
3508
  "div",
3461
3509
  {
3462
3510
  onKeyDownCapture: handleKeyDown,
@@ -3478,12 +3526,12 @@ function CarouselContent({
3478
3526
  ...props
3479
3527
  }) {
3480
3528
  const { orientation, index, setCount } = useCarousel();
3481
- const childCount = React48.Children.count(children);
3482
- React48.useEffect(() => {
3529
+ const childCount = React49.Children.count(children);
3530
+ React49.useEffect(() => {
3483
3531
  setCount(childCount);
3484
3532
  }, [childCount, setCount]);
3485
3533
  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(
3534
+ return /* @__PURE__ */ jsx39("div", { className: CAROUSEL_CONTENT_VIEWPORT, "data-slot": "carousel-content", children: /* @__PURE__ */ jsx39(
3487
3535
  "div",
3488
3536
  {
3489
3537
  className: cn(
@@ -3502,7 +3550,7 @@ function CarouselItem({
3502
3550
  ...props
3503
3551
  }) {
3504
3552
  const { orientation } = useCarousel();
3505
- return /* @__PURE__ */ jsx38(
3553
+ return /* @__PURE__ */ jsx39(
3506
3554
  "div",
3507
3555
  {
3508
3556
  role: "group",
@@ -3522,7 +3570,7 @@ function CarouselEdgeFade({
3522
3570
  }) {
3523
3571
  const { canScrollPrev, canScrollNext } = useCarousel();
3524
3572
  return /* @__PURE__ */ jsxs12(Fragment4, { children: [
3525
- /* @__PURE__ */ jsx38(
3573
+ /* @__PURE__ */ jsx39(
3526
3574
  "div",
3527
3575
  {
3528
3576
  "aria-hidden": true,
@@ -3533,7 +3581,7 @@ function CarouselEdgeFade({
3533
3581
  )
3534
3582
  }
3535
3583
  ),
3536
- /* @__PURE__ */ jsx38(
3584
+ /* @__PURE__ */ jsx39(
3537
3585
  "div",
3538
3586
  {
3539
3587
  "aria-hidden": true,
@@ -3549,7 +3597,8 @@ function CarouselEdgeFade({
3549
3597
  function CarouselPrevious({
3550
3598
  className,
3551
3599
  variant = "outline",
3552
- size = "icon",
3600
+ size = "md",
3601
+ icon = true,
3553
3602
  ...props
3554
3603
  }) {
3555
3604
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
@@ -3559,6 +3608,7 @@ function CarouselPrevious({
3559
3608
  "data-slot": "carousel-previous",
3560
3609
  variant,
3561
3610
  size,
3611
+ icon,
3562
3612
  className: cn(
3563
3613
  CAROUSEL_NAV,
3564
3614
  orientation === "horizontal" ? CAROUSEL_PREVIOUS_HORIZONTAL : CAROUSEL_PREVIOUS_VERTICAL,
@@ -3568,7 +3618,7 @@ function CarouselPrevious({
3568
3618
  onClick: scrollPrev,
3569
3619
  ...props,
3570
3620
  children: [
3571
- /* @__PURE__ */ jsx38(
3621
+ /* @__PURE__ */ jsx39(
3572
3622
  "svg",
3573
3623
  {
3574
3624
  xmlns: "http://www.w3.org/2000/svg",
@@ -3579,10 +3629,10 @@ function CarouselPrevious({
3579
3629
  strokeLinecap: "round",
3580
3630
  strokeLinejoin: "round",
3581
3631
  "aria-hidden": "true",
3582
- children: /* @__PURE__ */ jsx38("path", { d: "m15 18-6-6 6-6" })
3632
+ children: /* @__PURE__ */ jsx39("path", { d: "m15 18-6-6 6-6" })
3583
3633
  }
3584
3634
  ),
3585
- /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Previous slide" })
3635
+ /* @__PURE__ */ jsx39("span", { className: "sr-only", children: "Previous slide" })
3586
3636
  ]
3587
3637
  }
3588
3638
  );
@@ -3590,7 +3640,8 @@ function CarouselPrevious({
3590
3640
  function CarouselNext({
3591
3641
  className,
3592
3642
  variant = "outline",
3593
- size = "icon",
3643
+ size = "md",
3644
+ icon = true,
3594
3645
  ...props
3595
3646
  }) {
3596
3647
  const { orientation, scrollNext, canScrollNext } = useCarousel();
@@ -3600,6 +3651,7 @@ function CarouselNext({
3600
3651
  "data-slot": "carousel-next",
3601
3652
  variant,
3602
3653
  size,
3654
+ icon,
3603
3655
  className: cn(
3604
3656
  CAROUSEL_NAV,
3605
3657
  orientation === "horizontal" ? CAROUSEL_NEXT_HORIZONTAL : CAROUSEL_NEXT_VERTICAL,
@@ -3609,7 +3661,7 @@ function CarouselNext({
3609
3661
  onClick: scrollNext,
3610
3662
  ...props,
3611
3663
  children: [
3612
- /* @__PURE__ */ jsx38(
3664
+ /* @__PURE__ */ jsx39(
3613
3665
  "svg",
3614
3666
  {
3615
3667
  xmlns: "http://www.w3.org/2000/svg",
@@ -3620,17 +3672,17 @@ function CarouselNext({
3620
3672
  strokeLinecap: "round",
3621
3673
  strokeLinejoin: "round",
3622
3674
  "aria-hidden": "true",
3623
- children: /* @__PURE__ */ jsx38("path", { d: "m9 18 6-6-6-6" })
3675
+ children: /* @__PURE__ */ jsx39("path", { d: "m9 18 6-6-6-6" })
3624
3676
  }
3625
3677
  ),
3626
- /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Next slide" })
3678
+ /* @__PURE__ */ jsx39("span", { className: "sr-only", children: "Next slide" })
3627
3679
  ]
3628
3680
  }
3629
3681
  );
3630
3682
  }
3631
3683
 
3632
3684
  // src/components/input-otp.tsx
3633
- import * as React49 from "react";
3685
+ import * as React50 from "react";
3634
3686
 
3635
3687
  // src/generated/input-otp.ts
3636
3688
  var INPUT_OTP_CONTAINER = "relative flex items-center gap-2 has-disabled:opacity-50";
@@ -3641,10 +3693,10 @@ var INPUT_OTP_SLOT_CARET_WRAPPER = "pointer-events-none absolute inset-0 flex it
3641
3693
  var INPUT_OTP_SLOT_CARET = "animate-caret-blink bg-ink h-4 w-px duration-1000";
3642
3694
 
3643
3695
  // src/components/input-otp.tsx
3644
- import { jsx as jsx39, jsxs as jsxs13 } from "react/jsx-runtime";
3645
- var InputOTPContext = React49.createContext(null);
3696
+ import { jsx as jsx40, jsxs as jsxs13 } from "react/jsx-runtime";
3697
+ var InputOTPContext = React50.createContext(null);
3646
3698
  function useInputOTP() {
3647
- const context = React49.useContext(InputOTPContext);
3699
+ const context = React50.useContext(InputOTPContext);
3648
3700
  if (!context) {
3649
3701
  throw new Error("InputOTP slots must be used within an <InputOTP />");
3650
3702
  }
@@ -3666,16 +3718,16 @@ function InputOTP({
3666
3718
  defaultValue,
3667
3719
  onChange
3668
3720
  });
3669
- const [focused, setFocused] = React49.useState(false);
3721
+ const [focused, setFocused] = React50.useState(false);
3670
3722
  const activeIndex = focused ? Math.min(value.length, maxLength - 1) : -1;
3671
- return /* @__PURE__ */ jsx39(InputOTPContext.Provider, { value: { value, maxLength, activeIndex }, children: /* @__PURE__ */ jsxs13(
3723
+ return /* @__PURE__ */ jsx40(InputOTPContext.Provider, { value: { value, maxLength, activeIndex }, children: /* @__PURE__ */ jsxs13(
3672
3724
  "div",
3673
3725
  {
3674
3726
  "data-slot": "input-otp",
3675
3727
  className: cn(INPUT_OTP_CONTAINER, containerClassName),
3676
3728
  children: [
3677
3729
  children,
3678
- /* @__PURE__ */ jsx39(
3730
+ /* @__PURE__ */ jsx40(
3679
3731
  "input",
3680
3732
  {
3681
3733
  inputMode: "numeric",
@@ -3698,7 +3750,7 @@ function InputOTPGroup({
3698
3750
  className,
3699
3751
  ...props
3700
3752
  }) {
3701
- return /* @__PURE__ */ jsx39(
3753
+ return /* @__PURE__ */ jsx40(
3702
3754
  "div",
3703
3755
  {
3704
3756
  "data-slot": "input-otp-group",
@@ -3721,13 +3773,13 @@ function InputOTPSlot({ index, className, ...props }) {
3721
3773
  ...props,
3722
3774
  children: [
3723
3775
  char,
3724
- hasFakeCaret && /* @__PURE__ */ jsx39("div", { className: INPUT_OTP_SLOT_CARET_WRAPPER, children: /* @__PURE__ */ jsx39("div", { className: INPUT_OTP_SLOT_CARET }) })
3776
+ hasFakeCaret && /* @__PURE__ */ jsx40("div", { className: INPUT_OTP_SLOT_CARET_WRAPPER, children: /* @__PURE__ */ jsx40("div", { className: INPUT_OTP_SLOT_CARET }) })
3725
3777
  ]
3726
3778
  }
3727
3779
  );
3728
3780
  }
3729
3781
  function InputOTPSeparator({ ...props }) {
3730
- return /* @__PURE__ */ jsx39("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx39(
3782
+ return /* @__PURE__ */ jsx40("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx40(
3731
3783
  "svg",
3732
3784
  {
3733
3785
  xmlns: "http://www.w3.org/2000/svg",
@@ -3738,27 +3790,27 @@ function InputOTPSeparator({ ...props }) {
3738
3790
  strokeLinecap: "round",
3739
3791
  strokeLinejoin: "round",
3740
3792
  "aria-hidden": "true",
3741
- children: /* @__PURE__ */ jsx39("path", { d: "M5 12h14" })
3793
+ children: /* @__PURE__ */ jsx40("path", { d: "M5 12h14" })
3742
3794
  }
3743
3795
  ) });
3744
3796
  }
3745
3797
 
3746
3798
  // src/components/tooltip.tsx
3747
- import * as React50 from "react";
3799
+ import * as React51 from "react";
3748
3800
 
3749
3801
  // src/generated/tooltip.ts
3750
3802
  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
3803
 
3752
3804
  // src/components/tooltip.tsx
3753
- import { Fragment as Fragment5, jsx as jsx40 } from "react/jsx-runtime";
3754
- var TooltipContext = React50.createContext(null);
3805
+ import { Fragment as Fragment5, jsx as jsx41 } from "react/jsx-runtime";
3806
+ var TooltipContext = React51.createContext(null);
3755
3807
  function useTooltip() {
3756
- const ctx = React50.useContext(TooltipContext);
3808
+ const ctx = React51.useContext(TooltipContext);
3757
3809
  if (!ctx) throw new Error("Tooltip parts must be used within <Tooltip>");
3758
3810
  return ctx;
3759
3811
  }
3760
3812
  function TooltipProvider({ children }) {
3761
- return /* @__PURE__ */ jsx40(Fragment5, { children });
3813
+ return /* @__PURE__ */ jsx41(Fragment5, { children });
3762
3814
  }
3763
3815
  function Tooltip({ open, defaultOpen = false, onOpenChange, children }) {
3764
3816
  const [isOpen, setOpen] = useControllableState({
@@ -3766,8 +3818,8 @@ function Tooltip({ open, defaultOpen = false, onOpenChange, children }) {
3766
3818
  defaultValue: defaultOpen,
3767
3819
  ...onOpenChange ? { onChange: onOpenChange } : {}
3768
3820
  });
3769
- const anchorRef = React50.useRef(null);
3770
- return /* @__PURE__ */ jsx40(TooltipProvider, { children: /* @__PURE__ */ jsx40(TooltipContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children }) });
3821
+ const anchorRef = React51.useRef(null);
3822
+ return /* @__PURE__ */ jsx41(TooltipProvider, { children: /* @__PURE__ */ jsx41(TooltipContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children }) });
3771
3823
  }
3772
3824
  function TooltipTrigger({
3773
3825
  asChild = false,
@@ -3779,7 +3831,7 @@ function TooltipTrigger({
3779
3831
  }) {
3780
3832
  const { setOpen, anchorRef } = useTooltip();
3781
3833
  const Comp = asChild ? Slot : "button";
3782
- return /* @__PURE__ */ jsx40(
3834
+ return /* @__PURE__ */ jsx41(
3783
3835
  Comp,
3784
3836
  {
3785
3837
  "data-slot": "tooltip-trigger",
@@ -3820,7 +3872,7 @@ function TooltipContent({
3820
3872
  offset: sideOffset
3821
3873
  });
3822
3874
  if (!isPresent) return null;
3823
- return /* @__PURE__ */ jsx40(Portal, { children: /* @__PURE__ */ jsx40(
3875
+ return /* @__PURE__ */ jsx41(Portal, { children: /* @__PURE__ */ jsx41(
3824
3876
  "div",
3825
3877
  {
3826
3878
  "data-slot": "tooltip-content",
@@ -3837,16 +3889,16 @@ function TooltipContent({
3837
3889
  }
3838
3890
 
3839
3891
  // src/components/popover.tsx
3840
- import * as React51 from "react";
3892
+ import * as React52 from "react";
3841
3893
 
3842
3894
  // src/generated/popover.ts
3843
3895
  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
3896
 
3845
3897
  // src/components/popover.tsx
3846
- import { jsx as jsx41 } from "react/jsx-runtime";
3847
- var PopoverContext = React51.createContext(null);
3898
+ import { jsx as jsx42 } from "react/jsx-runtime";
3899
+ var PopoverContext = React52.createContext(null);
3848
3900
  function usePopover() {
3849
- const ctx = React51.useContext(PopoverContext);
3901
+ const ctx = React52.useContext(PopoverContext);
3850
3902
  if (!ctx) throw new Error("Popover parts must be used within <Popover>");
3851
3903
  return ctx;
3852
3904
  }
@@ -3856,13 +3908,13 @@ function Popover({ open, defaultOpen = false, onOpenChange, children }) {
3856
3908
  defaultValue: defaultOpen,
3857
3909
  ...onOpenChange ? { onChange: onOpenChange } : {}
3858
3910
  });
3859
- const anchorRef = React51.useRef(null);
3860
- return /* @__PURE__ */ jsx41(PopoverContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
3911
+ const anchorRef = React52.useRef(null);
3912
+ return /* @__PURE__ */ jsx42(PopoverContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
3861
3913
  }
3862
3914
  function PopoverTrigger({ asChild = false, onClick, ...props }) {
3863
3915
  const { open, setOpen, anchorRef } = usePopover();
3864
3916
  const Comp = asChild ? Slot : "button";
3865
- return /* @__PURE__ */ jsx41(
3917
+ return /* @__PURE__ */ jsx42(
3866
3918
  Comp,
3867
3919
  {
3868
3920
  "data-slot": "popover-trigger",
@@ -3879,7 +3931,7 @@ function PopoverTrigger({ asChild = false, onClick, ...props }) {
3879
3931
  function PopoverAnchor({ asChild = false, ...props }) {
3880
3932
  const { anchorRef } = usePopover();
3881
3933
  const Comp = asChild ? Slot : "div";
3882
- return /* @__PURE__ */ jsx41(
3934
+ return /* @__PURE__ */ jsx42(
3883
3935
  Comp,
3884
3936
  {
3885
3937
  "data-slot": "popover-anchor",
@@ -3911,7 +3963,7 @@ function PopoverContent({
3911
3963
  exclude: [anchorRef]
3912
3964
  });
3913
3965
  if (!isPresent) return null;
3914
- return /* @__PURE__ */ jsx41(Portal, { children: /* @__PURE__ */ jsx41(
3966
+ return /* @__PURE__ */ jsx42(Portal, { children: /* @__PURE__ */ jsx42(
3915
3967
  "div",
3916
3968
  {
3917
3969
  "data-slot": "popover-content",
@@ -3931,11 +3983,11 @@ function PopoverContent({
3931
3983
  }
3932
3984
 
3933
3985
  // 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);
3986
+ import * as React53 from "react";
3987
+ import { jsx as jsx43, jsxs as jsxs14 } from "react/jsx-runtime";
3988
+ var InfoTipContext = React53.createContext(null);
3937
3989
  function useInfoTip() {
3938
- const ctx = React52.useContext(InfoTipContext);
3990
+ const ctx = React53.useContext(InfoTipContext);
3939
3991
  if (!ctx) throw new Error("InfoTip parts must be used within <InfoTip>");
3940
3992
  return ctx;
3941
3993
  }
@@ -3950,9 +4002,9 @@ function InfoTip({
3950
4002
  defaultValue: defaultOpen,
3951
4003
  ...onOpenChange ? { onChange: onOpenChange } : {}
3952
4004
  });
3953
- const anchorRef = React52.useRef(null);
3954
- const contentId = React52.useId();
3955
- return /* @__PURE__ */ jsx42(
4005
+ const anchorRef = React53.useRef(null);
4006
+ const contentId = React53.useId();
4007
+ return /* @__PURE__ */ jsx43(
3956
4008
  InfoTipContext.Provider,
3957
4009
  {
3958
4010
  value: { open: isOpen, setOpen, anchorRef, contentId },
@@ -3973,9 +4025,9 @@ function InfoGlyph2({ className }) {
3973
4025
  "aria-hidden": true,
3974
4026
  className: cn("size-4", className),
3975
4027
  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" })
4028
+ /* @__PURE__ */ jsx43("circle", { cx: "12", cy: "12", r: "10" }),
4029
+ /* @__PURE__ */ jsx43("path", { d: "M12 16v-4" }),
4030
+ /* @__PURE__ */ jsx43("path", { d: "M12 8h.01" })
3979
4031
  ]
3980
4032
  }
3981
4033
  );
@@ -3999,7 +4051,7 @@ function InfoTipTrigger({
3999
4051
  openDelay: hoverDelay
4000
4052
  });
4001
4053
  const Comp = asChild ? Slot : "button";
4002
- return /* @__PURE__ */ jsx42(
4054
+ return /* @__PURE__ */ jsx43(
4003
4055
  Comp,
4004
4056
  {
4005
4057
  "data-slot": "info-tip-trigger",
@@ -4030,7 +4082,7 @@ function InfoTipTrigger({
4030
4082
  hover.onPointerLeave(e);
4031
4083
  },
4032
4084
  ...props,
4033
- children: children ?? /* @__PURE__ */ jsx42(InfoGlyph2, {})
4085
+ children: children ?? /* @__PURE__ */ jsx43(InfoGlyph2, {})
4034
4086
  }
4035
4087
  );
4036
4088
  }
@@ -4057,7 +4109,7 @@ function InfoTipContent({
4057
4109
  exclude: [anchorRef]
4058
4110
  });
4059
4111
  if (!isPresent) return null;
4060
- return /* @__PURE__ */ jsx42(Portal, { children: /* @__PURE__ */ jsx42(
4112
+ return /* @__PURE__ */ jsx43(Portal, { children: /* @__PURE__ */ jsx43(
4061
4113
  "div",
4062
4114
  {
4063
4115
  id: contentId,
@@ -4077,16 +4129,16 @@ function InfoTipContent({
4077
4129
  }
4078
4130
 
4079
4131
  // src/components/hover-card.tsx
4080
- import * as React53 from "react";
4132
+ import * as React54 from "react";
4081
4133
 
4082
4134
  // src/generated/hover-card.ts
4083
4135
  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
4136
 
4085
4137
  // src/components/hover-card.tsx
4086
- import { jsx as jsx43 } from "react/jsx-runtime";
4087
- var HoverCardContext = React53.createContext(null);
4138
+ import { jsx as jsx44 } from "react/jsx-runtime";
4139
+ var HoverCardContext = React54.createContext(null);
4088
4140
  function useHoverCard() {
4089
- const ctx = React53.useContext(HoverCardContext);
4141
+ const ctx = React54.useContext(HoverCardContext);
4090
4142
  if (!ctx) throw new Error("HoverCard parts must be used within <HoverCard>");
4091
4143
  return ctx;
4092
4144
  }
@@ -4096,8 +4148,8 @@ function HoverCard({ open, defaultOpen = false, onOpenChange, children }) {
4096
4148
  defaultValue: defaultOpen,
4097
4149
  ...onOpenChange ? { onChange: onOpenChange } : {}
4098
4150
  });
4099
- const anchorRef = React53.useRef(null);
4100
- return /* @__PURE__ */ jsx43(HoverCardContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
4151
+ const anchorRef = React54.useRef(null);
4152
+ return /* @__PURE__ */ jsx44(HoverCardContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children });
4101
4153
  }
4102
4154
  function HoverCardTrigger({
4103
4155
  asChild = false,
@@ -4107,7 +4159,7 @@ function HoverCardTrigger({
4107
4159
  }) {
4108
4160
  const { setOpen, anchorRef } = useHoverCard();
4109
4161
  const Comp = asChild ? Slot : "a";
4110
- return /* @__PURE__ */ jsx43(
4162
+ return /* @__PURE__ */ jsx44(
4111
4163
  Comp,
4112
4164
  {
4113
4165
  "data-slot": "hover-card-trigger",
@@ -4142,7 +4194,7 @@ function HoverCardContent({
4142
4194
  offset: sideOffset
4143
4195
  });
4144
4196
  if (!isPresent) return null;
4145
- return /* @__PURE__ */ jsx43(Portal, { children: /* @__PURE__ */ jsx43(
4197
+ return /* @__PURE__ */ jsx44(Portal, { children: /* @__PURE__ */ jsx44(
4146
4198
  "div",
4147
4199
  {
4148
4200
  "data-slot": "hover-card-content",
@@ -4159,7 +4211,7 @@ function HoverCardContent({
4159
4211
  }
4160
4212
 
4161
4213
  // src/components/dropdown-menu.tsx
4162
- import * as React54 from "react";
4214
+ import * as React55 from "react";
4163
4215
 
4164
4216
  // src/generated/dropdown-menu.ts
4165
4217
  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 +4225,12 @@ var DROPDOWN_MENU_SEPARATOR = "bg-border -mx-1 my-1 h-px";
4173
4225
  var DROPDOWN_MENU_SHORTCUT = "text-ink-soft ml-auto text-xs tracking-widest";
4174
4226
 
4175
4227
  // src/components/dropdown-menu.tsx
4176
- import { jsx as jsx44, jsxs as jsxs15 } from "react/jsx-runtime";
4177
- var DropdownMenuContext = React54.createContext(
4228
+ import { jsx as jsx45, jsxs as jsxs15 } from "react/jsx-runtime";
4229
+ var DropdownMenuContext = React55.createContext(
4178
4230
  null
4179
4231
  );
4180
4232
  function useDropdownMenu() {
4181
- const ctx = React54.useContext(DropdownMenuContext);
4233
+ const ctx = React55.useContext(DropdownMenuContext);
4182
4234
  if (!ctx) throw new Error("DropdownMenu parts must be used within <DropdownMenu>");
4183
4235
  return ctx;
4184
4236
  }
@@ -4188,16 +4240,16 @@ function DropdownMenu({ open, defaultOpen = false, onOpenChange, children }) {
4188
4240
  defaultValue: defaultOpen,
4189
4241
  ...onOpenChange ? { onChange: onOpenChange } : {}
4190
4242
  });
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 }) });
4243
+ const anchorRef = React55.useRef(null);
4244
+ return /* @__PURE__ */ jsx45(DropdownMenuContext.Provider, { value: { open: isOpen, setOpen, anchorRef }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "dropdown-menu", children }) });
4193
4245
  }
4194
4246
  function DropdownMenuPortal({ children }) {
4195
- return /* @__PURE__ */ jsx44(Portal, { children });
4247
+ return /* @__PURE__ */ jsx45(Portal, { children });
4196
4248
  }
4197
4249
  function DropdownMenuTrigger({ asChild = false, onClick, ...props }) {
4198
4250
  const { open, setOpen, anchorRef } = useDropdownMenu();
4199
4251
  const Comp = asChild ? Slot : "button";
4200
- return /* @__PURE__ */ jsx44(
4252
+ return /* @__PURE__ */ jsx45(
4201
4253
  Comp,
4202
4254
  {
4203
4255
  "data-slot": "dropdown-menu-trigger",
@@ -4233,7 +4285,7 @@ function DropdownMenuContent({
4233
4285
  onDismiss: () => setOpen(false),
4234
4286
  exclude: [anchorRef]
4235
4287
  });
4236
- const contentRef = React54.useRef(null);
4288
+ const contentRef = React55.useRef(null);
4237
4289
  const items = () => Array.from(
4238
4290
  contentRef.current?.querySelectorAll("[role^='menuitem']") ?? []
4239
4291
  ).filter((el) => el.getAttribute("data-disabled") === null);
@@ -4242,13 +4294,13 @@ function DropdownMenuContent({
4242
4294
  orientation: "vertical",
4243
4295
  loop: true
4244
4296
  });
4245
- React54.useEffect(() => {
4297
+ React55.useEffect(() => {
4246
4298
  if (!open) return;
4247
4299
  items()[activeIndex]?.focus();
4248
4300
  }, [open, activeIndex]);
4249
- const close = React54.useCallback(() => setOpen(false), [setOpen]);
4301
+ const close = React55.useCallback(() => setOpen(false), [setOpen]);
4250
4302
  if (!isPresent) return null;
4251
- return /* @__PURE__ */ jsx44(Portal, { children: /* @__PURE__ */ jsx44(DropdownMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx44(
4303
+ return /* @__PURE__ */ jsx45(Portal, { children: /* @__PURE__ */ jsx45(DropdownMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx45(
4252
4304
  "div",
4253
4305
  {
4254
4306
  "data-slot": "dropdown-menu-content",
@@ -4271,10 +4323,10 @@ function DropdownMenuContent({
4271
4323
  }
4272
4324
  ) }) });
4273
4325
  }
4274
- var DropdownMenuCloseContext = React54.createContext(() => {
4326
+ var DropdownMenuCloseContext = React55.createContext(() => {
4275
4327
  });
4276
4328
  function DropdownMenuGroup({ className, ...props }) {
4277
- return /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-group", role: "group", className, ...props });
4329
+ return /* @__PURE__ */ jsx45("div", { "data-slot": "dropdown-menu-group", role: "group", className, ...props });
4278
4330
  }
4279
4331
  function DropdownMenuItem({
4280
4332
  className,
@@ -4285,8 +4337,8 @@ function DropdownMenuItem({
4285
4337
  onKeyDown,
4286
4338
  ...props
4287
4339
  }) {
4288
- const close = React54.useContext(DropdownMenuCloseContext);
4289
- return /* @__PURE__ */ jsx44(
4340
+ const close = React55.useContext(DropdownMenuCloseContext);
4341
+ return /* @__PURE__ */ jsx45(
4290
4342
  "div",
4291
4343
  {
4292
4344
  "data-slot": "dropdown-menu-item",
@@ -4323,7 +4375,7 @@ function DropdownMenuCheckboxItem({
4323
4375
  onClick,
4324
4376
  ...props
4325
4377
  }) {
4326
- const close = React54.useContext(DropdownMenuCloseContext);
4378
+ const close = React55.useContext(DropdownMenuCloseContext);
4327
4379
  return /* @__PURE__ */ jsxs15(
4328
4380
  "div",
4329
4381
  {
@@ -4344,13 +4396,13 @@ function DropdownMenuCheckboxItem({
4344
4396
  },
4345
4397
  ...props,
4346
4398
  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 }),
4399
+ /* @__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
4400
  children
4349
4401
  ]
4350
4402
  }
4351
4403
  );
4352
4404
  }
4353
- var DropdownMenuRadioGroupContext = React54.createContext(null);
4405
+ var DropdownMenuRadioGroupContext = React55.createContext(null);
4354
4406
  function DropdownMenuRadioGroup({
4355
4407
  className,
4356
4408
  value,
@@ -4358,11 +4410,11 @@ function DropdownMenuRadioGroup({
4358
4410
  children,
4359
4411
  ...props
4360
4412
  }) {
4361
- const ctx = React54.useMemo(
4413
+ const ctx = React55.useMemo(
4362
4414
  () => ({ value, setValue: (next) => onValueChange?.(next) }),
4363
4415
  [value, onValueChange]
4364
4416
  );
4365
- return /* @__PURE__ */ jsx44(DropdownMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-radio-group", role: "group", className, ...props, children }) });
4417
+ return /* @__PURE__ */ jsx45(DropdownMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx45("div", { "data-slot": "dropdown-menu-radio-group", role: "group", className, ...props, children }) });
4366
4418
  }
4367
4419
  function DropdownMenuRadioItem({
4368
4420
  className,
@@ -4372,8 +4424,8 @@ function DropdownMenuRadioItem({
4372
4424
  onClick,
4373
4425
  ...props
4374
4426
  }) {
4375
- const close = React54.useContext(DropdownMenuCloseContext);
4376
- const group = React54.useContext(DropdownMenuRadioGroupContext);
4427
+ const close = React55.useContext(DropdownMenuCloseContext);
4428
+ const group = React55.useContext(DropdownMenuRadioGroupContext);
4377
4429
  const checked = group?.value === value;
4378
4430
  return /* @__PURE__ */ jsxs15(
4379
4431
  "div",
@@ -4396,14 +4448,14 @@ function DropdownMenuRadioItem({
4396
4448
  },
4397
4449
  ...props,
4398
4450
  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 }),
4451
+ /* @__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
4452
  children
4401
4453
  ]
4402
4454
  }
4403
4455
  );
4404
4456
  }
4405
4457
  function DropdownMenuLabel({ className, inset, ...props }) {
4406
- return /* @__PURE__ */ jsx44(
4458
+ return /* @__PURE__ */ jsx45(
4407
4459
  "div",
4408
4460
  {
4409
4461
  "data-slot": "dropdown-menu-label",
@@ -4414,7 +4466,7 @@ function DropdownMenuLabel({ className, inset, ...props }) {
4414
4466
  );
4415
4467
  }
4416
4468
  function DropdownMenuSeparator({ className, ...props }) {
4417
- return /* @__PURE__ */ jsx44(
4469
+ return /* @__PURE__ */ jsx45(
4418
4470
  "div",
4419
4471
  {
4420
4472
  "data-slot": "dropdown-menu-separator",
@@ -4425,7 +4477,7 @@ function DropdownMenuSeparator({ className, ...props }) {
4425
4477
  );
4426
4478
  }
4427
4479
  function DropdownMenuShortcut({ className, ...props }) {
4428
- return /* @__PURE__ */ jsx44(
4480
+ return /* @__PURE__ */ jsx45(
4429
4481
  "span",
4430
4482
  {
4431
4483
  "data-slot": "dropdown-menu-shortcut",
@@ -4434,17 +4486,17 @@ function DropdownMenuShortcut({ className, ...props }) {
4434
4486
  }
4435
4487
  );
4436
4488
  }
4437
- var DropdownMenuSubContext = React54.createContext(null);
4489
+ var DropdownMenuSubContext = React55.createContext(null);
4438
4490
  function DropdownMenuSub({ open, defaultOpen = false, onOpenChange, children }) {
4439
4491
  const [isOpen, setOpen] = useControllableState({
4440
4492
  ...open !== void 0 ? { value: open } : {},
4441
4493
  defaultValue: defaultOpen,
4442
4494
  ...onOpenChange ? { onChange: onOpenChange } : {}
4443
4495
  });
4444
- return /* @__PURE__ */ jsx44(DropdownMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx44("div", { "data-slot": "dropdown-menu-sub", children }) });
4496
+ return /* @__PURE__ */ jsx45(DropdownMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "dropdown-menu-sub", children }) });
4445
4497
  }
4446
4498
  function DropdownMenuSubTrigger({ className, inset, children, onClick, ...props }) {
4447
- const ctx = React54.useContext(DropdownMenuSubContext);
4499
+ const ctx = React55.useContext(DropdownMenuSubContext);
4448
4500
  return /* @__PURE__ */ jsxs15(
4449
4501
  "div",
4450
4502
  {
@@ -4466,15 +4518,15 @@ function DropdownMenuSubTrigger({ className, inset, children, onClick, ...props
4466
4518
  ...props,
4467
4519
  children: [
4468
4520
  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" }) })
4521
+ /* @__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
4522
  ]
4471
4523
  }
4472
4524
  );
4473
4525
  }
4474
4526
  function DropdownMenuSubContent({ className, children, ...props }) {
4475
- const ctx = React54.useContext(DropdownMenuSubContext);
4527
+ const ctx = React55.useContext(DropdownMenuSubContext);
4476
4528
  if (!ctx?.open) return null;
4477
- return /* @__PURE__ */ jsx44(
4529
+ return /* @__PURE__ */ jsx45(
4478
4530
  "div",
4479
4531
  {
4480
4532
  "data-slot": "dropdown-menu-sub-content",
@@ -4491,7 +4543,7 @@ function DropdownMenuSubContent({ className, children, ...props }) {
4491
4543
  }
4492
4544
 
4493
4545
  // src/components/context-menu.tsx
4494
- import * as React55 from "react";
4546
+ import * as React56 from "react";
4495
4547
 
4496
4548
  // src/generated/context-menu.ts
4497
4549
  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 +4556,10 @@ var CONTEXT_MENU_SEPARATOR = "bg-border -mx-1 my-1 h-px";
4504
4556
  var CONTEXT_MENU_SHORTCUT = "text-ink-soft ml-auto text-xs tracking-widest";
4505
4557
 
4506
4558
  // src/components/context-menu.tsx
4507
- import { jsx as jsx45, jsxs as jsxs16 } from "react/jsx-runtime";
4508
- var ContextMenuContext = React55.createContext(null);
4559
+ import { jsx as jsx46, jsxs as jsxs16 } from "react/jsx-runtime";
4560
+ var ContextMenuContext = React56.createContext(null);
4509
4561
  function useContextMenu() {
4510
- const ctx = React55.useContext(ContextMenuContext);
4562
+ const ctx = React56.useContext(ContextMenuContext);
4511
4563
  if (!ctx) throw new Error("ContextMenu parts must be used within <ContextMenu>");
4512
4564
  return ctx;
4513
4565
  }
@@ -4517,16 +4569,16 @@ function ContextMenu({ open, defaultOpen = false, onOpenChange, children }) {
4517
4569
  defaultValue: defaultOpen,
4518
4570
  ...onOpenChange ? { onChange: onOpenChange } : {}
4519
4571
  });
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 }) });
4572
+ const [point, setPoint] = React56.useState({ x: 0, y: 0 });
4573
+ return /* @__PURE__ */ jsx46(ContextMenuContext.Provider, { value: { open: isOpen, setOpen, point, setPoint }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "context-menu", children }) });
4522
4574
  }
4523
4575
  function ContextMenuPortal({ children }) {
4524
- return /* @__PURE__ */ jsx45(Portal, { children });
4576
+ return /* @__PURE__ */ jsx46(Portal, { children });
4525
4577
  }
4526
4578
  function ContextMenuTrigger({ asChild = false, onContextMenu, ...props }) {
4527
4579
  const { setOpen, setPoint } = useContextMenu();
4528
4580
  const Comp = asChild ? Slot : "div";
4529
- return /* @__PURE__ */ jsx45(
4581
+ return /* @__PURE__ */ jsx46(
4530
4582
  Comp,
4531
4583
  {
4532
4584
  "data-slot": "context-menu-trigger",
@@ -4541,9 +4593,9 @@ function ContextMenuTrigger({ asChild = false, onContextMenu, ...props }) {
4541
4593
  );
4542
4594
  }
4543
4595
  function ContextMenuGroup({ className, ...props }) {
4544
- return /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-group", role: "group", className, ...props });
4596
+ return /* @__PURE__ */ jsx46("div", { "data-slot": "context-menu-group", role: "group", className, ...props });
4545
4597
  }
4546
- var ContextMenuCloseContext = React55.createContext(() => {
4598
+ var ContextMenuCloseContext = React56.createContext(() => {
4547
4599
  });
4548
4600
  function ContextMenuContent({ className, children, ...props }) {
4549
4601
  const { open, setOpen, point } = useContextMenu();
@@ -4552,7 +4604,7 @@ function ContextMenuContent({ className, children, ...props }) {
4552
4604
  enabled: open,
4553
4605
  onDismiss: () => setOpen(false)
4554
4606
  });
4555
- const contentRef = React55.useRef(null);
4607
+ const contentRef = React56.useRef(null);
4556
4608
  const items = () => Array.from(
4557
4609
  contentRef.current?.querySelectorAll("[role^='menuitem']") ?? []
4558
4610
  ).filter((el) => el.getAttribute("data-disabled") === null);
@@ -4561,13 +4613,13 @@ function ContextMenuContent({ className, children, ...props }) {
4561
4613
  orientation: "vertical",
4562
4614
  loop: true
4563
4615
  });
4564
- React55.useEffect(() => {
4616
+ React56.useEffect(() => {
4565
4617
  if (!open) return;
4566
4618
  items()[activeIndex]?.focus();
4567
4619
  }, [open, activeIndex]);
4568
- const close = React55.useCallback(() => setOpen(false), [setOpen]);
4620
+ const close = React56.useCallback(() => setOpen(false), [setOpen]);
4569
4621
  if (!isPresent) return null;
4570
- return /* @__PURE__ */ jsx45(Portal, { children: /* @__PURE__ */ jsx45(ContextMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx45(
4622
+ return /* @__PURE__ */ jsx46(Portal, { children: /* @__PURE__ */ jsx46(ContextMenuCloseContext.Provider, { value: close, children: /* @__PURE__ */ jsx46(
4571
4623
  "div",
4572
4624
  {
4573
4625
  "data-slot": "context-menu-content",
@@ -4599,8 +4651,8 @@ function ContextMenuItem({
4599
4651
  onKeyDown,
4600
4652
  ...props
4601
4653
  }) {
4602
- const close = React55.useContext(ContextMenuCloseContext);
4603
- return /* @__PURE__ */ jsx45(
4654
+ const close = React56.useContext(ContextMenuCloseContext);
4655
+ return /* @__PURE__ */ jsx46(
4604
4656
  "div",
4605
4657
  {
4606
4658
  "data-slot": "context-menu-item",
@@ -4637,7 +4689,7 @@ function ContextMenuCheckboxItem({
4637
4689
  onClick,
4638
4690
  ...props
4639
4691
  }) {
4640
- const close = React55.useContext(ContextMenuCloseContext);
4692
+ const close = React56.useContext(ContextMenuCloseContext);
4641
4693
  return /* @__PURE__ */ jsxs16(
4642
4694
  "div",
4643
4695
  {
@@ -4658,13 +4710,13 @@ function ContextMenuCheckboxItem({
4658
4710
  },
4659
4711
  ...props,
4660
4712
  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 }),
4713
+ /* @__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
4714
  children
4663
4715
  ]
4664
4716
  }
4665
4717
  );
4666
4718
  }
4667
- var ContextMenuRadioGroupContext = React55.createContext(null);
4719
+ var ContextMenuRadioGroupContext = React56.createContext(null);
4668
4720
  function ContextMenuRadioGroup({
4669
4721
  className,
4670
4722
  value,
@@ -4672,11 +4724,11 @@ function ContextMenuRadioGroup({
4672
4724
  children,
4673
4725
  ...props
4674
4726
  }) {
4675
- const ctx = React55.useMemo(
4727
+ const ctx = React56.useMemo(
4676
4728
  () => ({ value, setValue: (next) => onValueChange?.(next) }),
4677
4729
  [value, onValueChange]
4678
4730
  );
4679
- return /* @__PURE__ */ jsx45(ContextMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-radio-group", role: "group", className, ...props, children }) });
4731
+ return /* @__PURE__ */ jsx46(ContextMenuRadioGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx46("div", { "data-slot": "context-menu-radio-group", role: "group", className, ...props, children }) });
4680
4732
  }
4681
4733
  function ContextMenuRadioItem({
4682
4734
  className,
@@ -4686,8 +4738,8 @@ function ContextMenuRadioItem({
4686
4738
  onClick,
4687
4739
  ...props
4688
4740
  }) {
4689
- const close = React55.useContext(ContextMenuCloseContext);
4690
- const group = React55.useContext(ContextMenuRadioGroupContext);
4741
+ const close = React56.useContext(ContextMenuCloseContext);
4742
+ const group = React56.useContext(ContextMenuRadioGroupContext);
4691
4743
  const checked = group?.value === value;
4692
4744
  return /* @__PURE__ */ jsxs16(
4693
4745
  "div",
@@ -4710,14 +4762,14 @@ function ContextMenuRadioItem({
4710
4762
  },
4711
4763
  ...props,
4712
4764
  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 }),
4765
+ /* @__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
4766
  children
4715
4767
  ]
4716
4768
  }
4717
4769
  );
4718
4770
  }
4719
4771
  function ContextMenuLabel({ className, inset, ...props }) {
4720
- return /* @__PURE__ */ jsx45(
4772
+ return /* @__PURE__ */ jsx46(
4721
4773
  "div",
4722
4774
  {
4723
4775
  "data-slot": "context-menu-label",
@@ -4728,7 +4780,7 @@ function ContextMenuLabel({ className, inset, ...props }) {
4728
4780
  );
4729
4781
  }
4730
4782
  function ContextMenuSeparator({ className, ...props }) {
4731
- return /* @__PURE__ */ jsx45(
4783
+ return /* @__PURE__ */ jsx46(
4732
4784
  "div",
4733
4785
  {
4734
4786
  "data-slot": "context-menu-separator",
@@ -4739,7 +4791,7 @@ function ContextMenuSeparator({ className, ...props }) {
4739
4791
  );
4740
4792
  }
4741
4793
  function ContextMenuShortcut({ className, ...props }) {
4742
- return /* @__PURE__ */ jsx45(
4794
+ return /* @__PURE__ */ jsx46(
4743
4795
  "span",
4744
4796
  {
4745
4797
  "data-slot": "context-menu-shortcut",
@@ -4748,17 +4800,17 @@ function ContextMenuShortcut({ className, ...props }) {
4748
4800
  }
4749
4801
  );
4750
4802
  }
4751
- var ContextMenuSubContext = React55.createContext(null);
4803
+ var ContextMenuSubContext = React56.createContext(null);
4752
4804
  function ContextMenuSub({ open, defaultOpen = false, onOpenChange, children }) {
4753
4805
  const [isOpen, setOpen] = useControllableState({
4754
4806
  ...open !== void 0 ? { value: open } : {},
4755
4807
  defaultValue: defaultOpen,
4756
4808
  ...onOpenChange ? { onChange: onOpenChange } : {}
4757
4809
  });
4758
- return /* @__PURE__ */ jsx45(ContextMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx45("div", { "data-slot": "context-menu-sub", children }) });
4810
+ return /* @__PURE__ */ jsx46(ContextMenuSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "context-menu-sub", children }) });
4759
4811
  }
4760
4812
  function ContextMenuSubTrigger({ className, inset, children, onClick, ...props }) {
4761
- const ctx = React55.useContext(ContextMenuSubContext);
4813
+ const ctx = React56.useContext(ContextMenuSubContext);
4762
4814
  return /* @__PURE__ */ jsxs16(
4763
4815
  "div",
4764
4816
  {
@@ -4780,15 +4832,15 @@ function ContextMenuSubTrigger({ className, inset, children, onClick, ...props }
4780
4832
  ...props,
4781
4833
  children: [
4782
4834
  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" }) })
4835
+ /* @__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
4836
  ]
4785
4837
  }
4786
4838
  );
4787
4839
  }
4788
4840
  function ContextMenuSubContent({ className, children, ...props }) {
4789
- const ctx = React55.useContext(ContextMenuSubContext);
4841
+ const ctx = React56.useContext(ContextMenuSubContext);
4790
4842
  if (!ctx?.open) return null;
4791
- return /* @__PURE__ */ jsx45(
4843
+ return /* @__PURE__ */ jsx46(
4792
4844
  "div",
4793
4845
  {
4794
4846
  "data-slot": "context-menu-sub-content",
@@ -4805,7 +4857,7 @@ function ContextMenuSubContent({ className, children, ...props }) {
4805
4857
  }
4806
4858
 
4807
4859
  // src/components/menubar.tsx
4808
- import * as React56 from "react";
4860
+ import * as React57 from "react";
4809
4861
 
4810
4862
  // src/generated/menubar.ts
4811
4863
  var MENUBAR_ROOT = "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs";
@@ -4822,16 +4874,16 @@ var MENUBAR_SUB_TRIGGER = "focus:bg-hover focus:text-ink data-[state=open]:bg-ho
4822
4874
  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
4875
 
4824
4876
  // src/components/menubar.tsx
4825
- import { jsx as jsx46, jsxs as jsxs17 } from "react/jsx-runtime";
4826
- var MenubarMenuContext = React56.createContext(null);
4877
+ import { jsx as jsx47, jsxs as jsxs17 } from "react/jsx-runtime";
4878
+ var MenubarMenuContext = React57.createContext(null);
4827
4879
  function useMenu() {
4828
- const ctx = React56.useContext(MenubarMenuContext);
4880
+ const ctx = React57.useContext(MenubarMenuContext);
4829
4881
  if (!ctx) throw new Error("Menubar parts must be used within <MenubarMenu>");
4830
4882
  return ctx;
4831
4883
  }
4832
- var MenubarRadioGroupContext = React56.createContext(null);
4884
+ var MenubarRadioGroupContext = React57.createContext(null);
4833
4885
  function Menubar({ className, ...props }) {
4834
- return /* @__PURE__ */ jsx46(
4886
+ return /* @__PURE__ */ jsx47(
4835
4887
  "div",
4836
4888
  {
4837
4889
  "data-slot": "menubar",
@@ -4847,12 +4899,12 @@ function MenubarMenu({ open, defaultOpen = false, onOpenChange, children }) {
4847
4899
  defaultValue: defaultOpen,
4848
4900
  onChange: onOpenChange
4849
4901
  });
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 }) });
4902
+ const triggerRef = React57.useRef(null);
4903
+ return /* @__PURE__ */ jsx47(MenubarMenuContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children: /* @__PURE__ */ jsx47("div", { "data-slot": "menubar-menu", className: "relative", children }) });
4852
4904
  }
4853
4905
  function MenubarTrigger({ className, onClick, ...props }) {
4854
4906
  const { open, setOpen, triggerRef } = useMenu();
4855
- return /* @__PURE__ */ jsx46(
4907
+ return /* @__PURE__ */ jsx47(
4856
4908
  "button",
4857
4909
  {
4858
4910
  ref: triggerRef,
@@ -4888,10 +4940,10 @@ function MenubarContent({
4888
4940
  onDismiss: () => setOpen(false),
4889
4941
  exclude: [triggerRef]
4890
4942
  });
4891
- const items = React56.Children.toArray(children);
4943
+ const items = React57.Children.toArray(children);
4892
4944
  const { onKeyDown } = useRovingFocus({ count: items.length, orientation: "vertical" });
4893
4945
  if (!isPresent) return null;
4894
- return /* @__PURE__ */ jsx46(Portal, { children: /* @__PURE__ */ jsx46(
4946
+ return /* @__PURE__ */ jsx47(Portal, { children: /* @__PURE__ */ jsx47(
4895
4947
  "div",
4896
4948
  {
4897
4949
  ref: mergeRefs(presenceRef, floatingRef, dismissRef),
@@ -4908,7 +4960,7 @@ function MenubarContent({
4908
4960
  ) });
4909
4961
  }
4910
4962
  function MenubarGroup({ className, ...props }) {
4911
- return /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-group", role: "group", className, ...props });
4963
+ return /* @__PURE__ */ jsx47("div", { "data-slot": "menubar-group", role: "group", className, ...props });
4912
4964
  }
4913
4965
  function MenubarItem({
4914
4966
  className,
@@ -4916,7 +4968,7 @@ function MenubarItem({
4916
4968
  variant = "neutral",
4917
4969
  ...props
4918
4970
  }) {
4919
- return /* @__PURE__ */ jsx46(
4971
+ return /* @__PURE__ */ jsx47(
4920
4972
  "div",
4921
4973
  {
4922
4974
  "data-slot": "menubar-item",
@@ -4945,7 +4997,7 @@ function MenubarCheckboxItem({
4945
4997
  className: cn(MENUBAR_CHECKBOX_ITEM, className),
4946
4998
  ...props,
4947
4999
  children: [
4948
- /* @__PURE__ */ jsx46("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx46(
5000
+ /* @__PURE__ */ jsx47("span", { className: MENUBAR_ITEM_INDICATOR, children: checked && /* @__PURE__ */ jsx47(
4949
5001
  "svg",
4950
5002
  {
4951
5003
  className: "size-4",
@@ -4955,7 +5007,7 @@ function MenubarCheckboxItem({
4955
5007
  strokeWidth: "2",
4956
5008
  strokeLinecap: "round",
4957
5009
  strokeLinejoin: "round",
4958
- children: /* @__PURE__ */ jsx46("path", { d: "M20 6 9 17l-5-5" })
5010
+ children: /* @__PURE__ */ jsx47("path", { d: "M20 6 9 17l-5-5" })
4959
5011
  }
4960
5012
  ) }),
4961
5013
  children
@@ -4975,7 +5027,7 @@ function MenubarRadioGroup({
4975
5027
  defaultValue,
4976
5028
  onChange: onValueChange
4977
5029
  });
4978
- return /* @__PURE__ */ jsx46(MenubarRadioGroupContext.Provider, { value: { value: current, onValueChange: setValue }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-radio-group", role: "group", className, children }) });
5030
+ return /* @__PURE__ */ jsx47(MenubarRadioGroupContext.Provider, { value: { value: current, onValueChange: setValue }, children: /* @__PURE__ */ jsx47("div", { "data-slot": "menubar-radio-group", role: "group", className, children }) });
4979
5031
  }
4980
5032
  function MenubarRadioItem({
4981
5033
  className,
@@ -4983,7 +5035,7 @@ function MenubarRadioItem({
4983
5035
  value,
4984
5036
  ...props
4985
5037
  }) {
4986
- const ctx = React56.useContext(MenubarRadioGroupContext);
5038
+ const ctx = React57.useContext(MenubarRadioGroupContext);
4987
5039
  const checked = ctx?.value === value;
4988
5040
  return /* @__PURE__ */ jsxs17(
4989
5041
  "div",
@@ -4996,7 +5048,7 @@ function MenubarRadioItem({
4996
5048
  onClick: () => ctx?.onValueChange(value),
4997
5049
  ...props,
4998
5050
  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" }) }) }),
5051
+ /* @__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
5052
  children
5001
5053
  ]
5002
5054
  }
@@ -5007,7 +5059,7 @@ function MenubarLabel({
5007
5059
  inset,
5008
5060
  ...props
5009
5061
  }) {
5010
- return /* @__PURE__ */ jsx46(
5062
+ return /* @__PURE__ */ jsx47(
5011
5063
  "div",
5012
5064
  {
5013
5065
  "data-slot": "menubar-label",
@@ -5018,7 +5070,7 @@ function MenubarLabel({
5018
5070
  );
5019
5071
  }
5020
5072
  function MenubarSeparator({ className, ...props }) {
5021
- return /* @__PURE__ */ jsx46(
5073
+ return /* @__PURE__ */ jsx47(
5022
5074
  "div",
5023
5075
  {
5024
5076
  "data-slot": "menubar-separator",
@@ -5029,7 +5081,7 @@ function MenubarSeparator({ className, ...props }) {
5029
5081
  );
5030
5082
  }
5031
5083
  function MenubarShortcut({ className, ...props }) {
5032
- return /* @__PURE__ */ jsx46(
5084
+ return /* @__PURE__ */ jsx47(
5033
5085
  "span",
5034
5086
  {
5035
5087
  "data-slot": "menubar-shortcut",
@@ -5038,9 +5090,9 @@ function MenubarShortcut({ className, ...props }) {
5038
5090
  }
5039
5091
  );
5040
5092
  }
5041
- var MenubarSubContext = React56.createContext(null);
5093
+ var MenubarSubContext = React57.createContext(null);
5042
5094
  function useSub() {
5043
- const ctx = React56.useContext(MenubarSubContext);
5095
+ const ctx = React57.useContext(MenubarSubContext);
5044
5096
  if (!ctx) throw new Error("MenubarSub parts must be used within <MenubarSub>");
5045
5097
  return ctx;
5046
5098
  }
@@ -5050,7 +5102,7 @@ function MenubarSub({ open, defaultOpen = false, onOpenChange, children }) {
5050
5102
  defaultValue: defaultOpen,
5051
5103
  onChange: onOpenChange
5052
5104
  });
5053
- return /* @__PURE__ */ jsx46(MenubarSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx46("div", { "data-slot": "menubar-sub", className: "relative", children }) });
5105
+ return /* @__PURE__ */ jsx47(MenubarSubContext.Provider, { value: { open: isOpen, setOpen }, children: /* @__PURE__ */ jsx47("div", { "data-slot": "menubar-sub", className: "relative", children }) });
5054
5106
  }
5055
5107
  function MenubarSubTrigger({
5056
5108
  className,
@@ -5076,7 +5128,7 @@ function MenubarSubTrigger({
5076
5128
  ...props,
5077
5129
  children: [
5078
5130
  children,
5079
- /* @__PURE__ */ jsx46(
5131
+ /* @__PURE__ */ jsx47(
5080
5132
  "svg",
5081
5133
  {
5082
5134
  className: "ml-auto h-4 w-4",
@@ -5086,7 +5138,7 @@ function MenubarSubTrigger({
5086
5138
  strokeWidth: "2",
5087
5139
  strokeLinecap: "round",
5088
5140
  strokeLinejoin: "round",
5089
- children: /* @__PURE__ */ jsx46("path", { d: "m9 18 6-6-6-6" })
5141
+ children: /* @__PURE__ */ jsx47("path", { d: "m9 18 6-6-6-6" })
5090
5142
  }
5091
5143
  )
5092
5144
  ]
@@ -5097,7 +5149,7 @@ function MenubarSubContent({ className, children, ...props }) {
5097
5149
  const { open } = useSub();
5098
5150
  const { isPresent, ref } = usePresence(open);
5099
5151
  if (!isPresent) return null;
5100
- return /* @__PURE__ */ jsx46(
5152
+ return /* @__PURE__ */ jsx47(
5101
5153
  "div",
5102
5154
  {
5103
5155
  ref,
@@ -5112,7 +5164,7 @@ function MenubarSubContent({ className, children, ...props }) {
5112
5164
  }
5113
5165
 
5114
5166
  // src/components/navigation-menu.tsx
5115
- import * as React57 from "react";
5167
+ import * as React58 from "react";
5116
5168
 
5117
5169
  // src/generated/navigation-menu.ts
5118
5170
  var NAVIGATION_MENU = "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center";
@@ -5125,13 +5177,13 @@ var NAVIGATION_MENU_INDICATOR = "data-[state=visible]:animate-in data-[state=hid
5125
5177
  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
5178
 
5127
5179
  // src/components/navigation-menu.tsx
5128
- import { jsx as jsx47, jsxs as jsxs18 } from "react/jsx-runtime";
5180
+ import { jsx as jsx48, jsxs as jsxs18 } from "react/jsx-runtime";
5129
5181
  function navigationMenuTriggerStyle() {
5130
5182
  return NAVIGATION_MENU_TRIGGER_STYLE;
5131
5183
  }
5132
- var NavigationMenuItemContext = React57.createContext(null);
5184
+ var NavigationMenuItemContext = React58.createContext(null);
5133
5185
  function useItem() {
5134
- const ctx = React57.useContext(NavigationMenuItemContext);
5186
+ const ctx = React58.useContext(NavigationMenuItemContext);
5135
5187
  if (!ctx) throw new Error("NavigationMenu parts must be used within <NavigationMenuItem>");
5136
5188
  return ctx;
5137
5189
  }
@@ -5154,13 +5206,13 @@ function NavigationMenu({
5154
5206
  ...props,
5155
5207
  children: [
5156
5208
  children,
5157
- viewport && /* @__PURE__ */ jsx47(NavigationMenuViewport, {})
5209
+ viewport && /* @__PURE__ */ jsx48(NavigationMenuViewport, {})
5158
5210
  ]
5159
5211
  }
5160
5212
  );
5161
5213
  }
5162
5214
  function NavigationMenuList({ className, ...props }) {
5163
- return /* @__PURE__ */ jsx47(
5215
+ return /* @__PURE__ */ jsx48(
5164
5216
  "ul",
5165
5217
  {
5166
5218
  "data-slot": "navigation-menu-list",
@@ -5186,8 +5238,8 @@ function NavigationMenuItem({
5186
5238
  defaultValue: defaultOpen,
5187
5239
  onChange: onOpenChange
5188
5240
  });
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 }) });
5241
+ const triggerRef = React58.useRef(null);
5242
+ 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
5243
  }
5192
5244
  function NavigationMenuTrigger({
5193
5245
  className,
@@ -5212,7 +5264,7 @@ function NavigationMenuTrigger({
5212
5264
  children: [
5213
5265
  children,
5214
5266
  " ",
5215
- /* @__PURE__ */ jsx47(
5267
+ /* @__PURE__ */ jsx48(
5216
5268
  "svg",
5217
5269
  {
5218
5270
  className: "relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
@@ -5223,7 +5275,7 @@ function NavigationMenuTrigger({
5223
5275
  strokeLinecap: "round",
5224
5276
  strokeLinejoin: "round",
5225
5277
  "aria-hidden": "true",
5226
- children: /* @__PURE__ */ jsx47("path", { d: "m6 9 6 6 6-6" })
5278
+ children: /* @__PURE__ */ jsx48("path", { d: "m6 9 6 6 6-6" })
5227
5279
  }
5228
5280
  )
5229
5281
  ]
@@ -5239,7 +5291,7 @@ function NavigationMenuContent({ className, children, ...props }) {
5239
5291
  exclude: [triggerRef]
5240
5292
  });
5241
5293
  if (!isPresent) return null;
5242
- return /* @__PURE__ */ jsx47(
5294
+ return /* @__PURE__ */ jsx48(
5243
5295
  "div",
5244
5296
  {
5245
5297
  ref: mergeRefs(presenceRef, dismissRef),
@@ -5255,7 +5307,7 @@ function NavigationMenuContent({ className, children, ...props }) {
5255
5307
  );
5256
5308
  }
5257
5309
  function NavigationMenuViewport({ className, ...props }) {
5258
- return /* @__PURE__ */ jsx47("div", { className: "absolute top-full left-0 isolate z-50 flex justify-center", children: /* @__PURE__ */ jsx47(
5310
+ return /* @__PURE__ */ jsx48("div", { className: "absolute top-full left-0 isolate z-50 flex justify-center", children: /* @__PURE__ */ jsx48(
5259
5311
  "div",
5260
5312
  {
5261
5313
  "data-slot": "navigation-menu-viewport",
@@ -5273,7 +5325,7 @@ function NavigationMenuLink({
5273
5325
  ...props
5274
5326
  }) {
5275
5327
  const Comp = asChild ? Slot : "a";
5276
- return /* @__PURE__ */ jsx47(
5328
+ return /* @__PURE__ */ jsx48(
5277
5329
  Comp,
5278
5330
  {
5279
5331
  "data-slot": "navigation-menu-link",
@@ -5286,7 +5338,7 @@ function NavigationMenuLink({
5286
5338
  );
5287
5339
  }
5288
5340
  function NavigationMenuIndicator({ className, ...props }) {
5289
- return /* @__PURE__ */ jsx47(
5341
+ return /* @__PURE__ */ jsx48(
5290
5342
  "div",
5291
5343
  {
5292
5344
  "data-slot": "navigation-menu-indicator",
@@ -5295,13 +5347,13 @@ function NavigationMenuIndicator({ className, ...props }) {
5295
5347
  className
5296
5348
  ),
5297
5349
  ...props,
5298
- children: /* @__PURE__ */ jsx47("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
5350
+ children: /* @__PURE__ */ jsx48("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" })
5299
5351
  }
5300
5352
  );
5301
5353
  }
5302
5354
 
5303
5355
  // src/components/dialog.tsx
5304
- import * as React58 from "react";
5356
+ import * as React59 from "react";
5305
5357
 
5306
5358
  // src/generated/dialog.ts
5307
5359
  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 +5365,10 @@ var DIALOG_TITLE = "text-lg leading-none font-semibold";
5313
5365
  var DIALOG_DESCRIPTION = "text-ink-soft text-sm";
5314
5366
 
5315
5367
  // 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);
5368
+ import { Fragment as Fragment6, jsx as jsx49, jsxs as jsxs19 } from "react/jsx-runtime";
5369
+ var DialogContext = React59.createContext(null);
5318
5370
  function useDialog() {
5319
- const ctx = React58.useContext(DialogContext);
5371
+ const ctx = React59.useContext(DialogContext);
5320
5372
  if (!ctx) throw new Error("Dialog parts must be used within <Dialog>");
5321
5373
  return ctx;
5322
5374
  }
@@ -5326,13 +5378,13 @@ function Dialog({ open, defaultOpen = false, onOpenChange, children }) {
5326
5378
  defaultValue: defaultOpen,
5327
5379
  ...onOpenChange ? { onChange: onOpenChange } : {}
5328
5380
  });
5329
- const triggerRef = React58.useRef(null);
5330
- return /* @__PURE__ */ jsx48(DialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5381
+ const triggerRef = React59.useRef(null);
5382
+ return /* @__PURE__ */ jsx49(DialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5331
5383
  }
5332
5384
  function DialogTrigger({ asChild = false, onClick, ...props }) {
5333
5385
  const { open, setOpen, triggerRef } = useDialog();
5334
5386
  const Comp = asChild ? Slot : "button";
5335
- return /* @__PURE__ */ jsx48(
5387
+ return /* @__PURE__ */ jsx49(
5336
5388
  Comp,
5337
5389
  {
5338
5390
  "data-slot": "dialog-trigger",
@@ -5347,11 +5399,11 @@ function DialogTrigger({ asChild = false, onClick, ...props }) {
5347
5399
  );
5348
5400
  }
5349
5401
  function DialogPortal({ children }) {
5350
- return /* @__PURE__ */ jsx48(Fragment6, { children });
5402
+ return /* @__PURE__ */ jsx49(Fragment6, { children });
5351
5403
  }
5352
5404
  function DialogOverlay({ className, ...props }) {
5353
5405
  const { open, setOpen } = useDialog();
5354
- return /* @__PURE__ */ jsx48(
5406
+ return /* @__PURE__ */ jsx49(
5355
5407
  "div",
5356
5408
  {
5357
5409
  "data-slot": "dialog-overlay",
@@ -5362,7 +5414,7 @@ function DialogOverlay({ className, ...props }) {
5362
5414
  }
5363
5415
  );
5364
5416
  }
5365
- var XIcon = (props) => /* @__PURE__ */ jsx48(
5417
+ var XIcon = (props) => /* @__PURE__ */ jsx49(
5366
5418
  "svg",
5367
5419
  {
5368
5420
  xmlns: "http://www.w3.org/2000/svg",
@@ -5375,7 +5427,7 @@ var XIcon = (props) => /* @__PURE__ */ jsx48(
5375
5427
  strokeLinecap: "round",
5376
5428
  strokeLinejoin: "round",
5377
5429
  ...props,
5378
- children: /* @__PURE__ */ jsx48("path", { d: "M18 6 6 18M6 6l12 12" })
5430
+ children: /* @__PURE__ */ jsx49("path", { d: "M18 6 6 18M6 6l12 12" })
5379
5431
  }
5380
5432
  );
5381
5433
  function DialogContent({
@@ -5392,7 +5444,7 @@ function DialogContent({
5392
5444
  onDismiss: () => setOpen(false),
5393
5445
  exclude: [triggerRef]
5394
5446
  });
5395
- React58.useEffect(() => {
5447
+ React59.useEffect(() => {
5396
5448
  if (!open) return;
5397
5449
  const prev = document.body.style.overflow;
5398
5450
  document.body.style.overflow = "hidden";
@@ -5402,7 +5454,7 @@ function DialogContent({
5402
5454
  }, [open]);
5403
5455
  if (!isPresent) return null;
5404
5456
  return /* @__PURE__ */ jsxs19(Portal, { children: [
5405
- /* @__PURE__ */ jsx48(DialogOverlay, {}),
5457
+ /* @__PURE__ */ jsx49(DialogOverlay, {}),
5406
5458
  /* @__PURE__ */ jsxs19(
5407
5459
  "div",
5408
5460
  {
@@ -5423,8 +5475,8 @@ function DialogContent({
5423
5475
  onClick: () => setOpen(false),
5424
5476
  className: DIALOG_CLOSE,
5425
5477
  children: [
5426
- /* @__PURE__ */ jsx48(XIcon, {}),
5427
- /* @__PURE__ */ jsx48("span", { className: "sr-only", children: "Close" })
5478
+ /* @__PURE__ */ jsx49(XIcon, {}),
5479
+ /* @__PURE__ */ jsx49("span", { className: "sr-only", children: "Close" })
5428
5480
  ]
5429
5481
  }
5430
5482
  )
@@ -5436,7 +5488,7 @@ function DialogContent({
5436
5488
  function DialogClose({ asChild = false, onClick, ...props }) {
5437
5489
  const { setOpen } = useDialog();
5438
5490
  const Comp = asChild ? Slot : "button";
5439
- return /* @__PURE__ */ jsx48(
5491
+ return /* @__PURE__ */ jsx49(
5440
5492
  Comp,
5441
5493
  {
5442
5494
  "data-slot": "dialog-close",
@@ -5449,7 +5501,7 @@ function DialogClose({ asChild = false, onClick, ...props }) {
5449
5501
  );
5450
5502
  }
5451
5503
  function DialogHeader({ className, ...props }) {
5452
- return /* @__PURE__ */ jsx48(
5504
+ return /* @__PURE__ */ jsx49(
5453
5505
  "div",
5454
5506
  {
5455
5507
  "data-slot": "dialog-header",
@@ -5459,7 +5511,7 @@ function DialogHeader({ className, ...props }) {
5459
5511
  );
5460
5512
  }
5461
5513
  function DialogFooter({ className, ...props }) {
5462
- return /* @__PURE__ */ jsx48(
5514
+ return /* @__PURE__ */ jsx49(
5463
5515
  "div",
5464
5516
  {
5465
5517
  "data-slot": "dialog-footer",
@@ -5469,7 +5521,7 @@ function DialogFooter({ className, ...props }) {
5469
5521
  );
5470
5522
  }
5471
5523
  function DialogTitle({ className, ...props }) {
5472
- return /* @__PURE__ */ jsx48(
5524
+ return /* @__PURE__ */ jsx49(
5473
5525
  "h2",
5474
5526
  {
5475
5527
  "data-slot": "dialog-title",
@@ -5479,7 +5531,7 @@ function DialogTitle({ className, ...props }) {
5479
5531
  );
5480
5532
  }
5481
5533
  function DialogDescription({ className, ...props }) {
5482
- return /* @__PURE__ */ jsx48(
5534
+ return /* @__PURE__ */ jsx49(
5483
5535
  "p",
5484
5536
  {
5485
5537
  "data-slot": "dialog-description",
@@ -5490,7 +5542,7 @@ function DialogDescription({ className, ...props }) {
5490
5542
  }
5491
5543
 
5492
5544
  // src/components/alert-dialog.tsx
5493
- import * as React59 from "react";
5545
+ import * as React60 from "react";
5494
5546
 
5495
5547
  // src/generated/alert-dialog.ts
5496
5548
  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 +5553,10 @@ var ALERT_DIALOG_TITLE = "text-lg font-semibold";
5501
5553
  var ALERT_DIALOG_DESCRIPTION = "text-ink-soft text-sm";
5502
5554
 
5503
5555
  // src/components/alert-dialog.tsx
5504
- import { jsx as jsx49, jsxs as jsxs20 } from "react/jsx-runtime";
5505
- var AlertDialogContext = React59.createContext(null);
5556
+ import { jsx as jsx50, jsxs as jsxs20 } from "react/jsx-runtime";
5557
+ var AlertDialogContext = React60.createContext(null);
5506
5558
  function useAlertDialog() {
5507
- const ctx = React59.useContext(AlertDialogContext);
5559
+ const ctx = React60.useContext(AlertDialogContext);
5508
5560
  if (!ctx) throw new Error("AlertDialog parts must be used within <AlertDialog>");
5509
5561
  return ctx;
5510
5562
  }
@@ -5514,13 +5566,13 @@ function AlertDialog({ open, defaultOpen = false, onOpenChange, children }) {
5514
5566
  defaultValue: defaultOpen,
5515
5567
  ...onOpenChange ? { onChange: onOpenChange } : {}
5516
5568
  });
5517
- const triggerRef = React59.useRef(null);
5518
- return /* @__PURE__ */ jsx49(AlertDialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5569
+ const triggerRef = React60.useRef(null);
5570
+ return /* @__PURE__ */ jsx50(AlertDialogContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5519
5571
  }
5520
5572
  function AlertDialogTrigger({ asChild = false, onClick, ...props }) {
5521
5573
  const { open, setOpen, triggerRef } = useAlertDialog();
5522
5574
  const Comp = asChild ? Slot : "button";
5523
- return /* @__PURE__ */ jsx49(
5575
+ return /* @__PURE__ */ jsx50(
5524
5576
  Comp,
5525
5577
  {
5526
5578
  "data-slot": "alert-dialog-trigger",
@@ -5536,7 +5588,7 @@ function AlertDialogTrigger({ asChild = false, onClick, ...props }) {
5536
5588
  }
5537
5589
  function AlertDialogOverlay({ className, ...props }) {
5538
5590
  const { open, setOpen } = useAlertDialog();
5539
- return /* @__PURE__ */ jsx49(
5591
+ return /* @__PURE__ */ jsx50(
5540
5592
  "div",
5541
5593
  {
5542
5594
  "data-slot": "alert-dialog-overlay",
@@ -5558,8 +5610,8 @@ function AlertDialogContent({ className, children, ...props }) {
5558
5610
  });
5559
5611
  if (!isPresent) return null;
5560
5612
  return /* @__PURE__ */ jsxs20(Portal, { children: [
5561
- /* @__PURE__ */ jsx49(AlertDialogOverlay, {}),
5562
- /* @__PURE__ */ jsx49(
5613
+ /* @__PURE__ */ jsx50(AlertDialogOverlay, {}),
5614
+ /* @__PURE__ */ jsx50(
5563
5615
  "div",
5564
5616
  {
5565
5617
  "data-slot": "alert-dialog-content",
@@ -5575,7 +5627,7 @@ function AlertDialogContent({ className, children, ...props }) {
5575
5627
  ] });
5576
5628
  }
5577
5629
  function AlertDialogHeader({ className, ...props }) {
5578
- return /* @__PURE__ */ jsx49(
5630
+ return /* @__PURE__ */ jsx50(
5579
5631
  "div",
5580
5632
  {
5581
5633
  "data-slot": "alert-dialog-header",
@@ -5585,7 +5637,7 @@ function AlertDialogHeader({ className, ...props }) {
5585
5637
  );
5586
5638
  }
5587
5639
  function AlertDialogFooter({ className, ...props }) {
5588
- return /* @__PURE__ */ jsx49(
5640
+ return /* @__PURE__ */ jsx50(
5589
5641
  "div",
5590
5642
  {
5591
5643
  "data-slot": "alert-dialog-footer",
@@ -5595,7 +5647,7 @@ function AlertDialogFooter({ className, ...props }) {
5595
5647
  );
5596
5648
  }
5597
5649
  function AlertDialogTitle({ className, ...props }) {
5598
- return /* @__PURE__ */ jsx49(
5650
+ return /* @__PURE__ */ jsx50(
5599
5651
  "h2",
5600
5652
  {
5601
5653
  "data-slot": "alert-dialog-title",
@@ -5605,7 +5657,7 @@ function AlertDialogTitle({ className, ...props }) {
5605
5657
  );
5606
5658
  }
5607
5659
  function AlertDialogDescription({ className, ...props }) {
5608
- return /* @__PURE__ */ jsx49(
5660
+ return /* @__PURE__ */ jsx50(
5609
5661
  "p",
5610
5662
  {
5611
5663
  "data-slot": "alert-dialog-description",
@@ -5616,7 +5668,7 @@ function AlertDialogDescription({ className, ...props }) {
5616
5668
  }
5617
5669
  function AlertDialogAction({ className, onClick, ...props }) {
5618
5670
  const { setOpen } = useAlertDialog();
5619
- return /* @__PURE__ */ jsx49(
5671
+ return /* @__PURE__ */ jsx50(
5620
5672
  "button",
5621
5673
  {
5622
5674
  "data-slot": "alert-dialog-action",
@@ -5631,7 +5683,7 @@ function AlertDialogAction({ className, onClick, ...props }) {
5631
5683
  }
5632
5684
  function AlertDialogCancel({ className, onClick, ...props }) {
5633
5685
  const { setOpen } = useAlertDialog();
5634
- return /* @__PURE__ */ jsx49(
5686
+ return /* @__PURE__ */ jsx50(
5635
5687
  "button",
5636
5688
  {
5637
5689
  "data-slot": "alert-dialog-cancel",
@@ -5646,7 +5698,7 @@ function AlertDialogCancel({ className, onClick, ...props }) {
5646
5698
  }
5647
5699
 
5648
5700
  // src/components/sheet.tsx
5649
- import * as React60 from "react";
5701
+ import * as React61 from "react";
5650
5702
 
5651
5703
  // src/generated/sheet.ts
5652
5704
  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 +5714,10 @@ var SHEET_TITLE = "text-ink font-semibold";
5662
5714
  var SHEET_DESCRIPTION = "text-ink-soft text-sm";
5663
5715
 
5664
5716
  // src/components/sheet.tsx
5665
- import { jsx as jsx50, jsxs as jsxs21 } from "react/jsx-runtime";
5666
- var SheetContext = React60.createContext(null);
5717
+ import { jsx as jsx51, jsxs as jsxs21 } from "react/jsx-runtime";
5718
+ var SheetContext = React61.createContext(null);
5667
5719
  function useSheet() {
5668
- const ctx = React60.useContext(SheetContext);
5720
+ const ctx = React61.useContext(SheetContext);
5669
5721
  if (!ctx) throw new Error("Sheet parts must be used within <Sheet>");
5670
5722
  return ctx;
5671
5723
  }
@@ -5675,13 +5727,13 @@ function Sheet({ open, defaultOpen = false, onOpenChange, children }) {
5675
5727
  defaultValue: defaultOpen,
5676
5728
  ...onOpenChange ? { onChange: onOpenChange } : {}
5677
5729
  });
5678
- const triggerRef = React60.useRef(null);
5679
- return /* @__PURE__ */ jsx50(SheetContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5730
+ const triggerRef = React61.useRef(null);
5731
+ return /* @__PURE__ */ jsx51(SheetContext.Provider, { value: { open: isOpen, setOpen, triggerRef }, children });
5680
5732
  }
5681
5733
  function SheetTrigger({ asChild = false, onClick, ...props }) {
5682
5734
  const { open, setOpen, triggerRef } = useSheet();
5683
5735
  const Comp = asChild ? Slot : "button";
5684
- return /* @__PURE__ */ jsx50(
5736
+ return /* @__PURE__ */ jsx51(
5685
5737
  Comp,
5686
5738
  {
5687
5739
  "data-slot": "sheet-trigger",
@@ -5697,7 +5749,7 @@ function SheetTrigger({ asChild = false, onClick, ...props }) {
5697
5749
  }
5698
5750
  function SheetOverlay({ className, ...props }) {
5699
5751
  const { open, setOpen } = useSheet();
5700
- return /* @__PURE__ */ jsx50(
5752
+ return /* @__PURE__ */ jsx51(
5701
5753
  "div",
5702
5754
  {
5703
5755
  "data-slot": "sheet-overlay",
@@ -5714,7 +5766,7 @@ var sheetSideClasses = {
5714
5766
  top: SHEET_SIDE_TOP,
5715
5767
  bottom: SHEET_SIDE_BOTTOM
5716
5768
  };
5717
- var XIcon2 = (props) => /* @__PURE__ */ jsx50(
5769
+ var XIcon2 = (props) => /* @__PURE__ */ jsx51(
5718
5770
  "svg",
5719
5771
  {
5720
5772
  xmlns: "http://www.w3.org/2000/svg",
@@ -5727,7 +5779,7 @@ var XIcon2 = (props) => /* @__PURE__ */ jsx50(
5727
5779
  strokeLinecap: "round",
5728
5780
  strokeLinejoin: "round",
5729
5781
  ...props,
5730
- children: /* @__PURE__ */ jsx50("path", { d: "M18 6 6 18M6 6l12 12" })
5782
+ children: /* @__PURE__ */ jsx51("path", { d: "M18 6 6 18M6 6l12 12" })
5731
5783
  }
5732
5784
  );
5733
5785
  function SheetContent({ className, children, side = "right", ...props }) {
@@ -5741,7 +5793,7 @@ function SheetContent({ className, children, side = "right", ...props }) {
5741
5793
  });
5742
5794
  if (!isPresent) return null;
5743
5795
  return /* @__PURE__ */ jsxs21(Portal, { children: [
5744
- /* @__PURE__ */ jsx50(SheetOverlay, {}),
5796
+ /* @__PURE__ */ jsx51(SheetOverlay, {}),
5745
5797
  /* @__PURE__ */ jsxs21(
5746
5798
  "div",
5747
5799
  {
@@ -5762,8 +5814,8 @@ function SheetContent({ className, children, side = "right", ...props }) {
5762
5814
  onClick: () => setOpen(false),
5763
5815
  className: SHEET_CLOSE,
5764
5816
  children: [
5765
- /* @__PURE__ */ jsx50(XIcon2, { className: "size-4" }),
5766
- /* @__PURE__ */ jsx50("span", { className: "sr-only", children: "Close" })
5817
+ /* @__PURE__ */ jsx51(XIcon2, { className: "size-4" }),
5818
+ /* @__PURE__ */ jsx51("span", { className: "sr-only", children: "Close" })
5767
5819
  ]
5768
5820
  }
5769
5821
  )
@@ -5775,7 +5827,7 @@ function SheetContent({ className, children, side = "right", ...props }) {
5775
5827
  function SheetClose({ asChild = false, onClick, ...props }) {
5776
5828
  const { setOpen } = useSheet();
5777
5829
  const Comp = asChild ? Slot : "button";
5778
- return /* @__PURE__ */ jsx50(
5830
+ return /* @__PURE__ */ jsx51(
5779
5831
  Comp,
5780
5832
  {
5781
5833
  "data-slot": "sheet-close",
@@ -5788,7 +5840,7 @@ function SheetClose({ asChild = false, onClick, ...props }) {
5788
5840
  );
5789
5841
  }
5790
5842
  function SheetHeader({ className, ...props }) {
5791
- return /* @__PURE__ */ jsx50(
5843
+ return /* @__PURE__ */ jsx51(
5792
5844
  "div",
5793
5845
  {
5794
5846
  "data-slot": "sheet-header",
@@ -5798,7 +5850,7 @@ function SheetHeader({ className, ...props }) {
5798
5850
  );
5799
5851
  }
5800
5852
  function SheetFooter({ className, ...props }) {
5801
- return /* @__PURE__ */ jsx50(
5853
+ return /* @__PURE__ */ jsx51(
5802
5854
  "div",
5803
5855
  {
5804
5856
  "data-slot": "sheet-footer",
@@ -5808,7 +5860,7 @@ function SheetFooter({ className, ...props }) {
5808
5860
  );
5809
5861
  }
5810
5862
  function SheetTitle({ className, ...props }) {
5811
- return /* @__PURE__ */ jsx50(
5863
+ return /* @__PURE__ */ jsx51(
5812
5864
  "h2",
5813
5865
  {
5814
5866
  "data-slot": "sheet-title",
@@ -5818,7 +5870,7 @@ function SheetTitle({ className, ...props }) {
5818
5870
  );
5819
5871
  }
5820
5872
  function SheetDescription({ className, ...props }) {
5821
- return /* @__PURE__ */ jsx50(
5873
+ return /* @__PURE__ */ jsx51(
5822
5874
  "p",
5823
5875
  {
5824
5876
  "data-slot": "sheet-description",
@@ -5829,7 +5881,7 @@ function SheetDescription({ className, ...props }) {
5829
5881
  }
5830
5882
 
5831
5883
  // src/components/drawer.tsx
5832
- import * as React61 from "react";
5884
+ import * as React62 from "react";
5833
5885
 
5834
5886
  // src/generated/drawer.ts
5835
5887
  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 +5899,10 @@ var DRAWER_TITLE = "text-ink font-semibold";
5847
5899
  var DRAWER_DESCRIPTION = "text-ink-soft text-sm";
5848
5900
 
5849
5901
  // src/components/drawer.tsx
5850
- import { jsx as jsx51, jsxs as jsxs22 } from "react/jsx-runtime";
5851
- var DrawerContext = React61.createContext(null);
5902
+ import { jsx as jsx52, jsxs as jsxs22 } from "react/jsx-runtime";
5903
+ var DrawerContext = React62.createContext(null);
5852
5904
  function useDrawer() {
5853
- const ctx = React61.useContext(DrawerContext);
5905
+ const ctx = React62.useContext(DrawerContext);
5854
5906
  if (!ctx) throw new Error("Drawer parts must be used within <Drawer>");
5855
5907
  return ctx;
5856
5908
  }
@@ -5866,12 +5918,12 @@ function Drawer({
5866
5918
  defaultValue: defaultOpen,
5867
5919
  ...onOpenChange ? { onChange: onOpenChange } : {}
5868
5920
  });
5869
- return /* @__PURE__ */ jsx51(DrawerContext.Provider, { value: { open: isOpen, setOpen, direction }, children: /* @__PURE__ */ jsx51("div", { "data-slot": "drawer", children }) });
5921
+ return /* @__PURE__ */ jsx52(DrawerContext.Provider, { value: { open: isOpen, setOpen, direction }, children: /* @__PURE__ */ jsx52("div", { "data-slot": "drawer", children }) });
5870
5922
  }
5871
5923
  function DrawerTrigger({ asChild = false, onClick, ...props }) {
5872
5924
  const { setOpen } = useDrawer();
5873
5925
  const Comp = asChild ? Slot : "button";
5874
- return /* @__PURE__ */ jsx51(
5926
+ return /* @__PURE__ */ jsx52(
5875
5927
  Comp,
5876
5928
  {
5877
5929
  "data-slot": "drawer-trigger",
@@ -5886,7 +5938,7 @@ function DrawerTrigger({ asChild = false, onClick, ...props }) {
5886
5938
  function DrawerClose({ asChild = false, onClick, ...props }) {
5887
5939
  const { setOpen } = useDrawer();
5888
5940
  const Comp = asChild ? Slot : "button";
5889
- return /* @__PURE__ */ jsx51(
5941
+ return /* @__PURE__ */ jsx52(
5890
5942
  Comp,
5891
5943
  {
5892
5944
  "data-slot": "drawer-close",
@@ -5901,7 +5953,7 @@ function DrawerClose({ asChild = false, onClick, ...props }) {
5901
5953
  function DrawerOverlay({ className, ...props }) {
5902
5954
  const { open, setOpen } = useDrawer();
5903
5955
  if (!open) return null;
5904
- return /* @__PURE__ */ jsx51(
5956
+ return /* @__PURE__ */ jsx52(
5905
5957
  "div",
5906
5958
  {
5907
5959
  "data-slot": "drawer-overlay",
@@ -5917,7 +5969,7 @@ function DrawerContent({ className, children, ...props }) {
5917
5969
  const scopeRef = useFocusScope(open);
5918
5970
  if (!open) return null;
5919
5971
  return /* @__PURE__ */ jsxs22(Portal, { children: [
5920
- /* @__PURE__ */ jsx51(
5972
+ /* @__PURE__ */ jsx52(
5921
5973
  "div",
5922
5974
  {
5923
5975
  "data-slot": "drawer-overlay",
@@ -5941,7 +5993,7 @@ function DrawerContent({ className, children, ...props }) {
5941
5993
  className: cn(DRAWER_CONTENT_BASE, drawerDirectionClasses[direction], className),
5942
5994
  ...props,
5943
5995
  children: [
5944
- direction === "bottom" ? /* @__PURE__ */ jsx51(
5996
+ direction === "bottom" ? /* @__PURE__ */ jsx52(
5945
5997
  "div",
5946
5998
  {
5947
5999
  "data-slot": "drawer-handle",
@@ -5955,7 +6007,7 @@ function DrawerContent({ className, children, ...props }) {
5955
6007
  ] });
5956
6008
  }
5957
6009
  function DrawerHeader({ className, ...props }) {
5958
- return /* @__PURE__ */ jsx51(
6010
+ return /* @__PURE__ */ jsx52(
5959
6011
  "div",
5960
6012
  {
5961
6013
  "data-slot": "drawer-header",
@@ -5965,7 +6017,7 @@ function DrawerHeader({ className, ...props }) {
5965
6017
  );
5966
6018
  }
5967
6019
  function DrawerFooter({ className, ...props }) {
5968
- return /* @__PURE__ */ jsx51(
6020
+ return /* @__PURE__ */ jsx52(
5969
6021
  "div",
5970
6022
  {
5971
6023
  "data-slot": "drawer-footer",
@@ -5975,7 +6027,7 @@ function DrawerFooter({ className, ...props }) {
5975
6027
  );
5976
6028
  }
5977
6029
  function DrawerTitle({ className, ...props }) {
5978
- return /* @__PURE__ */ jsx51(
6030
+ return /* @__PURE__ */ jsx52(
5979
6031
  "div",
5980
6032
  {
5981
6033
  "data-slot": "drawer-title",
@@ -5985,7 +6037,7 @@ function DrawerTitle({ className, ...props }) {
5985
6037
  );
5986
6038
  }
5987
6039
  function DrawerDescription({ className, ...props }) {
5988
- return /* @__PURE__ */ jsx51(
6040
+ return /* @__PURE__ */ jsx52(
5989
6041
  "div",
5990
6042
  {
5991
6043
  "data-slot": "drawer-description",
@@ -5996,11 +6048,11 @@ function DrawerDescription({ className, ...props }) {
5996
6048
  }
5997
6049
 
5998
6050
  // 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);
6051
+ import * as React63 from "react";
6052
+ import { jsx as jsx53, jsxs as jsxs23 } from "react/jsx-runtime";
6053
+ var SelectContext = React63.createContext(null);
6002
6054
  function useSelect() {
6003
- const ctx = React62.useContext(SelectContext);
6055
+ const ctx = React63.useContext(SelectContext);
6004
6056
  if (!ctx) throw new Error("Select parts must be used within <Select>");
6005
6057
  return ctx;
6006
6058
  }
@@ -6023,8 +6075,8 @@ function Select({
6023
6075
  defaultValue: defaultOpen,
6024
6076
  ...onOpenChange ? { onChange: onOpenChange } : {}
6025
6077
  });
6026
- const anchorRef = React62.useRef(null);
6027
- return /* @__PURE__ */ jsx52(
6078
+ const anchorRef = React63.useRef(null);
6079
+ return /* @__PURE__ */ jsx53(
6028
6080
  SelectContext.Provider,
6029
6081
  {
6030
6082
  value: { value: currentValue, setValue, open: isOpen, setOpen, anchorRef },
@@ -6061,7 +6113,7 @@ function SelectTrigger({
6061
6113
  ...props,
6062
6114
  children: [
6063
6115
  children,
6064
- /* @__PURE__ */ jsx52(
6116
+ /* @__PURE__ */ jsx53(
6065
6117
  "svg",
6066
6118
  {
6067
6119
  xmlns: "http://www.w3.org/2000/svg",
@@ -6075,7 +6127,7 @@ function SelectTrigger({
6075
6127
  strokeLinejoin: "round",
6076
6128
  className: "size-4 opacity-50",
6077
6129
  "aria-hidden": "true",
6078
- children: /* @__PURE__ */ jsx52("path", { d: "m6 9 6 6 6-6" })
6130
+ children: /* @__PURE__ */ jsx53("path", { d: "m6 9 6 6 6-6" })
6079
6131
  }
6080
6132
  )
6081
6133
  ]
@@ -6085,7 +6137,7 @@ function SelectTrigger({
6085
6137
  function SelectValue({ className, placeholder, ...props }) {
6086
6138
  const { value } = useSelect();
6087
6139
  const isEmpty = value === "";
6088
- return /* @__PURE__ */ jsx52(
6140
+ return /* @__PURE__ */ jsx53(
6089
6141
  "span",
6090
6142
  {
6091
6143
  "data-slot": "select-value",
@@ -6118,13 +6170,13 @@ function SelectContent({
6118
6170
  onDismiss: () => setOpen(false),
6119
6171
  exclude: [anchorRef]
6120
6172
  });
6121
- const items = React62.Children.toArray(children).filter(React62.isValidElement);
6173
+ const items = React63.Children.toArray(children).filter(React63.isValidElement);
6122
6174
  const { activeIndex, setActiveIndex, onKeyDown } = useRovingFocus({
6123
6175
  count: items.length,
6124
6176
  orientation: "vertical"
6125
6177
  });
6126
6178
  if (!isPresent) return null;
6127
- return /* @__PURE__ */ jsx52(Portal, { children: /* @__PURE__ */ jsx52(
6179
+ return /* @__PURE__ */ jsx53(Portal, { children: /* @__PURE__ */ jsx53(
6128
6180
  "div",
6129
6181
  {
6130
6182
  role: "listbox",
@@ -6140,8 +6192,8 @@ function SelectContent({
6140
6192
  className
6141
6193
  ),
6142
6194
  ...props,
6143
- children: /* @__PURE__ */ jsx52("div", { className: "p-1", children: items.map(
6144
- (child, index) => React62.cloneElement(child, {
6195
+ children: /* @__PURE__ */ jsx53("div", { className: "p-1", children: items.map(
6196
+ (child, index) => React63.cloneElement(child, {
6145
6197
  __index: index,
6146
6198
  __active: index === activeIndex,
6147
6199
  __setActive: setActiveIndex
@@ -6186,7 +6238,7 @@ function SelectItem({
6186
6238
  ),
6187
6239
  ...props,
6188
6240
  children: [
6189
- selected ? /* @__PURE__ */ jsx52("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx52(
6241
+ selected ? /* @__PURE__ */ jsx53("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx53(
6190
6242
  "svg",
6191
6243
  {
6192
6244
  xmlns: "http://www.w3.org/2000/svg",
@@ -6200,19 +6252,19 @@ function SelectItem({
6200
6252
  strokeLinejoin: "round",
6201
6253
  className: "size-4",
6202
6254
  "aria-hidden": "true",
6203
- children: /* @__PURE__ */ jsx52("path", { d: "M20 6 9 17l-5-5" })
6255
+ children: /* @__PURE__ */ jsx53("path", { d: "M20 6 9 17l-5-5" })
6204
6256
  }
6205
6257
  ) }) : null,
6206
- /* @__PURE__ */ jsx52("span", { children })
6258
+ /* @__PURE__ */ jsx53("span", { children })
6207
6259
  ]
6208
6260
  }
6209
6261
  );
6210
6262
  }
6211
6263
  function SelectGroup({ className, ...props }) {
6212
- return /* @__PURE__ */ jsx52("div", { role: "group", "data-slot": "select-group", className, ...props });
6264
+ return /* @__PURE__ */ jsx53("div", { role: "group", "data-slot": "select-group", className, ...props });
6213
6265
  }
6214
6266
  function SelectLabel({ className, ...props }) {
6215
- return /* @__PURE__ */ jsx52(
6267
+ return /* @__PURE__ */ jsx53(
6216
6268
  "div",
6217
6269
  {
6218
6270
  "data-slot": "select-label",
@@ -6222,7 +6274,7 @@ function SelectLabel({ className, ...props }) {
6222
6274
  );
6223
6275
  }
6224
6276
  function SelectSeparator({ className, ...props }) {
6225
- return /* @__PURE__ */ jsx52(
6277
+ return /* @__PURE__ */ jsx53(
6226
6278
  "div",
6227
6279
  {
6228
6280
  "data-slot": "select-separator",
@@ -6233,7 +6285,7 @@ function SelectSeparator({ className, ...props }) {
6233
6285
  }
6234
6286
 
6235
6287
  // src/components/command.tsx
6236
- import * as React63 from "react";
6288
+ import * as React64 from "react";
6237
6289
 
6238
6290
  // src/generated/command.ts
6239
6291
  var COMMAND_ROOT = "bg-popover text-ink flex h-full w-full flex-col overflow-hidden rounded-md";
@@ -6250,10 +6302,10 @@ var COMMAND_SEPARATOR = "bg-border -mx-1 h-px";
6250
6302
  var COMMAND_SHORTCUT = "text-ink-soft ml-auto text-xs tracking-widest";
6251
6303
 
6252
6304
  // src/components/command.tsx
6253
- import { jsx as jsx53, jsxs as jsxs24 } from "react/jsx-runtime";
6254
- var CommandContext = React63.createContext(null);
6305
+ import { jsx as jsx54, jsxs as jsxs24 } from "react/jsx-runtime";
6306
+ var CommandContext = React64.createContext(null);
6255
6307
  function useCommand() {
6256
- const ctx = React63.useContext(CommandContext);
6308
+ const ctx = React64.useContext(CommandContext);
6257
6309
  if (!ctx) throw new Error("Command parts must be used within <Command>");
6258
6310
  return ctx;
6259
6311
  }
@@ -6270,10 +6322,10 @@ function Command({
6270
6322
  defaultValue: defaultSearch,
6271
6323
  ...onSearchChange ? { onChange: onSearchChange } : {}
6272
6324
  });
6273
- const [items, setItems] = React63.useState(
6325
+ const [items, setItems] = React64.useState(
6274
6326
  () => /* @__PURE__ */ new Map()
6275
6327
  );
6276
- const registerItem = React63.useCallback((id, value) => {
6328
+ const registerItem = React64.useCallback((id, value) => {
6277
6329
  setItems((prev) => {
6278
6330
  if (prev.get(id) === value) return prev;
6279
6331
  const next = new Map(prev);
@@ -6281,7 +6333,7 @@ function Command({
6281
6333
  return next;
6282
6334
  });
6283
6335
  }, []);
6284
- const unregisterItem = React63.useCallback((id) => {
6336
+ const unregisterItem = React64.useCallback((id) => {
6285
6337
  setItems((prev) => {
6286
6338
  if (!prev.has(id)) return prev;
6287
6339
  const next = new Map(prev);
@@ -6290,15 +6342,15 @@ function Command({
6290
6342
  });
6291
6343
  }, []);
6292
6344
  const query = currentSearch.trim().toLowerCase();
6293
- const matches = React63.useCallback(
6345
+ const matches = React64.useCallback(
6294
6346
  (value) => query === "" || value.toLowerCase().includes(query),
6295
6347
  [query]
6296
6348
  );
6297
- const hasMatches = React63.useMemo(
6349
+ const hasMatches = React64.useMemo(
6298
6350
  () => [...items.values()].some(matches),
6299
6351
  [items, matches]
6300
6352
  );
6301
- return /* @__PURE__ */ jsx53(
6353
+ return /* @__PURE__ */ jsx54(
6302
6354
  CommandContext.Provider,
6303
6355
  {
6304
6356
  value: {
@@ -6310,7 +6362,7 @@ function Command({
6310
6362
  matches,
6311
6363
  hasMatches
6312
6364
  },
6313
- children: /* @__PURE__ */ jsx53(
6365
+ children: /* @__PURE__ */ jsx54(
6314
6366
  "div",
6315
6367
  {
6316
6368
  "data-slot": "command",
@@ -6337,7 +6389,7 @@ function CommandDialog({
6337
6389
  const scopeRef = useFocusScope(isOpen);
6338
6390
  if (!isOpen) return null;
6339
6391
  return /* @__PURE__ */ jsxs24(Portal, { children: [
6340
- /* @__PURE__ */ jsx53(
6392
+ /* @__PURE__ */ jsx54(
6341
6393
  "div",
6342
6394
  {
6343
6395
  "data-slot": "command-overlay",
@@ -6345,7 +6397,7 @@ function CommandDialog({
6345
6397
  onClick: () => setOpen(false)
6346
6398
  }
6347
6399
  ),
6348
- /* @__PURE__ */ jsx53(
6400
+ /* @__PURE__ */ jsx54(
6349
6401
  "div",
6350
6402
  {
6351
6403
  role: "dialog",
@@ -6356,7 +6408,7 @@ function CommandDialog({
6356
6408
  if (e.key === "Escape") setOpen(false);
6357
6409
  },
6358
6410
  className: cn(COMMAND_DIALOG_CONTENT, className),
6359
- children: /* @__PURE__ */ jsx53(Command, { className: COMMAND_DIALOG_COMMAND, children })
6411
+ children: /* @__PURE__ */ jsx54(Command, { className: COMMAND_DIALOG_COMMAND, children })
6360
6412
  }
6361
6413
  )
6362
6414
  ] });
@@ -6382,12 +6434,12 @@ function CommandInput({
6382
6434
  className: "size-4 shrink-0 opacity-50",
6383
6435
  "aria-hidden": "true",
6384
6436
  children: [
6385
- /* @__PURE__ */ jsx53("circle", { cx: "11", cy: "11", r: "8" }),
6386
- /* @__PURE__ */ jsx53("path", { d: "m21 21-4.3-4.3" })
6437
+ /* @__PURE__ */ jsx54("circle", { cx: "11", cy: "11", r: "8" }),
6438
+ /* @__PURE__ */ jsx54("path", { d: "m21 21-4.3-4.3" })
6387
6439
  ]
6388
6440
  }
6389
6441
  ),
6390
- /* @__PURE__ */ jsx53(
6442
+ /* @__PURE__ */ jsx54(
6391
6443
  "input",
6392
6444
  {
6393
6445
  type: "text",
@@ -6402,7 +6454,7 @@ function CommandInput({
6402
6454
  ] });
6403
6455
  }
6404
6456
  function CommandList({ className, ...props }) {
6405
- return /* @__PURE__ */ jsx53(
6457
+ return /* @__PURE__ */ jsx54(
6406
6458
  "div",
6407
6459
  {
6408
6460
  role: "listbox",
@@ -6415,7 +6467,7 @@ function CommandList({ className, ...props }) {
6415
6467
  function CommandEmpty({ className, children, ...props }) {
6416
6468
  const { query, hasMatches } = useCommand();
6417
6469
  if (query === "" || hasMatches) return null;
6418
- return /* @__PURE__ */ jsx53(
6470
+ return /* @__PURE__ */ jsx54(
6419
6471
  "div",
6420
6472
  {
6421
6473
  "data-slot": "command-empty",
@@ -6434,7 +6486,7 @@ function CommandGroup({ className, heading, children, ...props }) {
6434
6486
  className: cn(COMMAND_GROUP, className),
6435
6487
  ...props,
6436
6488
  children: [
6437
- heading ? /* @__PURE__ */ jsx53("div", { "data-slot": "command-group-heading", children: heading }) : null,
6489
+ heading ? /* @__PURE__ */ jsx54("div", { "data-slot": "command-group-heading", children: heading }) : null,
6438
6490
  children
6439
6491
  ]
6440
6492
  }
@@ -6449,13 +6501,13 @@ function CommandItem({
6449
6501
  ...props
6450
6502
  }) {
6451
6503
  const { registerItem, unregisterItem, matches } = useCommand();
6452
- const id = React63.useId();
6453
- React63.useEffect(() => {
6504
+ const id = React64.useId();
6505
+ React64.useEffect(() => {
6454
6506
  registerItem(id, value);
6455
6507
  return () => unregisterItem(id);
6456
6508
  }, [id, value, registerItem, unregisterItem]);
6457
6509
  if (!matches(value)) return null;
6458
- return /* @__PURE__ */ jsx53(
6510
+ return /* @__PURE__ */ jsx54(
6459
6511
  "div",
6460
6512
  {
6461
6513
  role: "option",
@@ -6473,7 +6525,7 @@ function CommandItem({
6473
6525
  );
6474
6526
  }
6475
6527
  function CommandSeparator({ className, ...props }) {
6476
- return /* @__PURE__ */ jsx53(
6528
+ return /* @__PURE__ */ jsx54(
6477
6529
  "div",
6478
6530
  {
6479
6531
  "data-slot": "command-separator",
@@ -6483,7 +6535,7 @@ function CommandSeparator({ className, ...props }) {
6483
6535
  );
6484
6536
  }
6485
6537
  function CommandShortcut({ className, ...props }) {
6486
- return /* @__PURE__ */ jsx53(
6538
+ return /* @__PURE__ */ jsx54(
6487
6539
  "span",
6488
6540
  {
6489
6541
  "data-slot": "command-shortcut",
@@ -6494,7 +6546,7 @@ function CommandShortcut({ className, ...props }) {
6494
6546
  }
6495
6547
 
6496
6548
  // src/components/chart.tsx
6497
- import * as React64 from "react";
6549
+ import * as React65 from "react";
6498
6550
 
6499
6551
  // src/generated/chart.ts
6500
6552
  var CHART_CONTAINER = "flex aspect-video justify-center text-xs [&_.recharts-layer]:outline-hidden [&_.recharts-surface]:outline-hidden [&_svg]:outline-hidden";
@@ -6502,10 +6554,10 @@ var CHART_TOOLTIP = "border-border/50 bg-background grid min-w-[8rem] items-star
6502
6554
  var CHART_LEGEND = "flex items-center justify-center gap-4";
6503
6555
 
6504
6556
  // 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);
6557
+ import { Fragment as Fragment7, jsx as jsx55, jsxs as jsxs25 } from "react/jsx-runtime";
6558
+ var ChartContext = React65.createContext(null);
6507
6559
  function useChart() {
6508
- const context = React64.useContext(ChartContext);
6560
+ const context = React65.useContext(ChartContext);
6509
6561
  if (!context) {
6510
6562
  throw new Error("useChart must be used within a <ChartContainer />");
6511
6563
  }
@@ -6518,9 +6570,9 @@ function ChartContainer({
6518
6570
  config,
6519
6571
  ...props
6520
6572
  }) {
6521
- const uniqueId = React64.useId();
6573
+ const uniqueId = React65.useId();
6522
6574
  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
6523
- return /* @__PURE__ */ jsx54(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs25(
6575
+ return /* @__PURE__ */ jsx55(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs25(
6524
6576
  "div",
6525
6577
  {
6526
6578
  "data-slot": "chart",
@@ -6528,7 +6580,7 @@ function ChartContainer({
6528
6580
  className: cn(CHART_CONTAINER, className),
6529
6581
  ...props,
6530
6582
  children: [
6531
- /* @__PURE__ */ jsx54(ChartStyle, { id: chartId, config }),
6583
+ /* @__PURE__ */ jsx55(ChartStyle, { id: chartId, config }),
6532
6584
  children
6533
6585
  ]
6534
6586
  }
@@ -6539,7 +6591,7 @@ var ChartStyle = ({ id, config }) => {
6539
6591
  if (!colorConfig.length) {
6540
6592
  return null;
6541
6593
  }
6542
- return /* @__PURE__ */ jsx54(
6594
+ return /* @__PURE__ */ jsx55(
6543
6595
  "style",
6544
6596
  {
6545
6597
  dangerouslySetInnerHTML: {
@@ -6550,7 +6602,7 @@ ${colorConfig.map(([key, itemConfig]) => ` --color-${key}: ${itemConfig.color};
6550
6602
  }
6551
6603
  );
6552
6604
  };
6553
- var ChartTooltip = ({ children }) => /* @__PURE__ */ jsx54(Fragment7, { children });
6605
+ var ChartTooltip = ({ children }) => /* @__PURE__ */ jsx55(Fragment7, { children });
6554
6606
  function ChartTooltipContent({
6555
6607
  className,
6556
6608
  items = [],
@@ -6569,15 +6621,15 @@ function ChartTooltipContent({
6569
6621
  "data-slot": "chart-tooltip",
6570
6622
  className: cn(CHART_TOOLTIP, className),
6571
6623
  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(
6624
+ !hideLabel && label ? /* @__PURE__ */ jsx55("div", { className: cn("font-medium", labelClassName), children: label }) : null,
6625
+ /* @__PURE__ */ jsx55("div", { className: "grid gap-1.5", children: items.map((item, index) => /* @__PURE__ */ jsxs25(
6574
6626
  "div",
6575
6627
  {
6576
6628
  className: cn(
6577
6629
  "[&>svg]:text-ink-soft flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 items-center"
6578
6630
  ),
6579
6631
  children: [
6580
- !hideIndicator && /* @__PURE__ */ jsx54(
6632
+ !hideIndicator && /* @__PURE__ */ jsx55(
6581
6633
  "div",
6582
6634
  {
6583
6635
  className: "shrink-0 rounded-[2px] h-2.5 w-2.5",
@@ -6588,8 +6640,8 @@ function ChartTooltipContent({
6588
6640
  }
6589
6641
  ),
6590
6642
  /* @__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 })
6643
+ /* @__PURE__ */ jsx55("span", { className: "text-ink-soft", children: item.label }),
6644
+ item.value !== void 0 && /* @__PURE__ */ jsx55("span", { className: "text-ink font-mono font-medium tabular-nums", children: item.value })
6593
6645
  ] })
6594
6646
  ]
6595
6647
  },
@@ -6599,7 +6651,7 @@ function ChartTooltipContent({
6599
6651
  }
6600
6652
  );
6601
6653
  }
6602
- var ChartLegend = ({ children }) => /* @__PURE__ */ jsx54(Fragment7, { children });
6654
+ var ChartLegend = ({ children }) => /* @__PURE__ */ jsx55(Fragment7, { children });
6603
6655
  function ChartLegendContent({
6604
6656
  className,
6605
6657
  hideIcon = false,
@@ -6613,7 +6665,7 @@ function ChartLegendContent({
6613
6665
  if (!rows.length) {
6614
6666
  return null;
6615
6667
  }
6616
- return /* @__PURE__ */ jsx54(
6668
+ return /* @__PURE__ */ jsx55(
6617
6669
  "div",
6618
6670
  {
6619
6671
  "data-slot": "chart-legend",
@@ -6625,7 +6677,7 @@ function ChartLegendContent({
6625
6677
  "[&>svg]:text-ink-soft flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"
6626
6678
  ),
6627
6679
  children: [
6628
- !hideIcon && /* @__PURE__ */ jsx54(
6680
+ !hideIcon && /* @__PURE__ */ jsx55(
6629
6681
  "div",
6630
6682
  {
6631
6683
  className: "h-2 w-2 shrink-0 rounded-[2px]",
@@ -6642,7 +6694,7 @@ function ChartLegendContent({
6642
6694
  }
6643
6695
 
6644
6696
  // src/components/calendar.tsx
6645
- import * as React65 from "react";
6697
+ import * as React66 from "react";
6646
6698
 
6647
6699
  // src/generated/calendar.ts
6648
6700
  var CALENDAR_ROOT = "bg-background p-3 w-fit";
@@ -6660,7 +6712,7 @@ var CALENDAR_DAY_SELECTED = "bg-primary text-on-primary";
6660
6712
  var CALENDAR_DAY_TODAY = "bg-hover text-ink rounded-md";
6661
6713
 
6662
6714
  // src/components/calendar.tsx
6663
- import { jsx as jsx55, jsxs as jsxs26 } from "react/jsx-runtime";
6715
+ import { jsx as jsx56, jsxs as jsxs26 } from "react/jsx-runtime";
6664
6716
  var MONTHS = [
6665
6717
  "January",
6666
6718
  "February",
@@ -6679,7 +6731,7 @@ var WEEKDAYS = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"];
6679
6731
  var CHEVRON_LEFT = "m15 18-6-6 6-6";
6680
6732
  var CHEVRON_RIGHT = "m9 18 6-6-6-6";
6681
6733
  function Chevron({ d }) {
6682
- return /* @__PURE__ */ jsx55(
6734
+ return /* @__PURE__ */ jsx56(
6683
6735
  "svg",
6684
6736
  {
6685
6737
  className: "size-4",
@@ -6693,7 +6745,7 @@ function Chevron({ d }) {
6693
6745
  strokeLinecap: "round",
6694
6746
  strokeLinejoin: "round",
6695
6747
  "aria-hidden": true,
6696
- children: /* @__PURE__ */ jsx55("path", { d })
6748
+ children: /* @__PURE__ */ jsx56("path", { d })
6697
6749
  }
6698
6750
  );
6699
6751
  }
@@ -6715,7 +6767,7 @@ function Calendar({
6715
6767
  today = /* @__PURE__ */ new Date(),
6716
6768
  className
6717
6769
  }) {
6718
- const [internal, setInternal] = React65.useState(
6770
+ const [internal, setInternal] = React66.useState(
6719
6771
  () => startOfMonth(defaultMonth ?? /* @__PURE__ */ new Date())
6720
6772
  );
6721
6773
  const view = month ? startOfMonth(month) : internal;
@@ -6737,7 +6789,8 @@ function Calendar({
6737
6789
  for (let i = 0; i < cells.length; i += 7) weeks.push(cells.slice(i, i + 7));
6738
6790
  const navClass = buttonVariants({
6739
6791
  variant: "ghost",
6740
- size: "icon",
6792
+ size: "md",
6793
+ icon: true,
6741
6794
  className: CALENDAR_NAV_BUTTON
6742
6795
  });
6743
6796
  return /* @__PURE__ */ jsxs26(
@@ -6748,30 +6801,30 @@ function Calendar({
6748
6801
  className: cn(CALENDAR_ROOT, className),
6749
6802
  children: [
6750
6803
  /* @__PURE__ */ jsxs26("div", { className: CALENDAR_NAV, children: [
6751
- /* @__PURE__ */ jsx55(
6804
+ /* @__PURE__ */ jsx56(
6752
6805
  "button",
6753
6806
  {
6754
6807
  type: "button",
6755
6808
  className: navClass,
6756
6809
  "aria-label": "Previous month",
6757
6810
  onClick: () => go(-1),
6758
- children: /* @__PURE__ */ jsx55(Chevron, { d: CHEVRON_LEFT })
6811
+ children: /* @__PURE__ */ jsx56(Chevron, { d: CHEVRON_LEFT })
6759
6812
  }
6760
6813
  ),
6761
- /* @__PURE__ */ jsx55("div", { className: CALENDAR_CAPTION, children: caption }),
6762
- /* @__PURE__ */ jsx55(
6814
+ /* @__PURE__ */ jsx56("div", { className: CALENDAR_CAPTION, children: caption }),
6815
+ /* @__PURE__ */ jsx56(
6763
6816
  "button",
6764
6817
  {
6765
6818
  type: "button",
6766
6819
  className: navClass,
6767
6820
  "aria-label": "Next month",
6768
6821
  onClick: () => go(1),
6769
- children: /* @__PURE__ */ jsx55(Chevron, { d: CHEVRON_RIGHT })
6822
+ children: /* @__PURE__ */ jsx56(Chevron, { d: CHEVRON_RIGHT })
6770
6823
  }
6771
6824
  )
6772
6825
  ] }),
6773
6826
  /* @__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(
6827
+ /* @__PURE__ */ jsx56("thead", { children: /* @__PURE__ */ jsx56("tr", { className: CALENDAR_WEEKDAY_ROW, children: WEEKDAYS.map((wd) => /* @__PURE__ */ jsx56(
6775
6828
  "th",
6776
6829
  {
6777
6830
  scope: "col",
@@ -6780,9 +6833,9 @@ function Calendar({
6780
6833
  },
6781
6834
  wd
6782
6835
  )) }) }),
6783
- /* @__PURE__ */ jsx55("tbody", { children: weeks.map((week, wi) => /* @__PURE__ */ jsx55("tr", { className: CALENDAR_WEEK, children: week.map((cell, ci) => {
6836
+ /* @__PURE__ */ jsx56("tbody", { children: weeks.map((week, wi) => /* @__PURE__ */ jsx56("tr", { className: CALENDAR_WEEK, children: week.map((cell, ci) => {
6784
6837
  if (cell === null) {
6785
- return /* @__PURE__ */ jsx55(
6838
+ return /* @__PURE__ */ jsx56(
6786
6839
  "td",
6787
6840
  {
6788
6841
  className: CALENDAR_DAY_EMPTY
@@ -6793,13 +6846,13 @@ function Calendar({
6793
6846
  const date = new Date(year, monthIndex, cell);
6794
6847
  const isSelected = sameDay(selected, date);
6795
6848
  const isToday = sameDay(today, date);
6796
- return /* @__PURE__ */ jsx55(
6849
+ return /* @__PURE__ */ jsx56(
6797
6850
  "td",
6798
6851
  {
6799
6852
  role: "gridcell",
6800
6853
  "aria-selected": isSelected,
6801
6854
  className: CALENDAR_DAY_CELL,
6802
- children: /* @__PURE__ */ jsx55(
6855
+ children: /* @__PURE__ */ jsx56(
6803
6856
  "button",
6804
6857
  {
6805
6858
  type: "button",
@@ -6810,7 +6863,8 @@ function Calendar({
6810
6863
  className: cn(
6811
6864
  buttonVariants({
6812
6865
  variant: "ghost",
6813
- size: "icon",
6866
+ size: "md",
6867
+ icon: true,
6814
6868
  className: CALENDAR_DAY
6815
6869
  }),
6816
6870
  isSelected ? CALENDAR_DAY_SELECTED : isToday ? CALENDAR_DAY_TODAY : void 0
@@ -6829,7 +6883,7 @@ function Calendar({
6829
6883
  }
6830
6884
 
6831
6885
  // src/components/sonner.tsx
6832
- import * as React66 from "react";
6886
+ import * as React67 from "react";
6833
6887
 
6834
6888
  // src/generated/sonner.ts
6835
6889
  var TOAST_BASE = "pointer-events-auto flex w-full items-start gap-3 rounded-md border p-4 text-sm shadow-lg";
@@ -6854,7 +6908,7 @@ var TOAST_CONTENT = "flex-1 space-y-1";
6854
6908
  var TOAST_TITLE = "font-medium";
6855
6909
 
6856
6910
  // src/components/sonner.tsx
6857
- import { jsx as jsx56, jsxs as jsxs27 } from "react/jsx-runtime";
6911
+ import { jsx as jsx57, jsxs as jsxs27 } from "react/jsx-runtime";
6858
6912
  var DEFAULT_DURATION = 4e3;
6859
6913
  var SWIPE_THRESHOLD = 45;
6860
6914
  var SWIPE_VELOCITY = 0.11;
@@ -6919,17 +6973,17 @@ function ToastItem({
6919
6973
  reportHeight,
6920
6974
  removeHeight
6921
6975
  }) {
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(
6976
+ const ref = React67.useRef(null);
6977
+ const [height, setHeight] = React67.useState(0);
6978
+ const remainingRef = React67.useRef(t.duration);
6979
+ const startedRef = React67.useRef(0);
6980
+ const flingRef = React67.useRef(
6927
6981
  void 0
6928
6982
  );
6929
- const dragRef = React66.useRef(
6983
+ const dragRef = React67.useRef(
6930
6984
  null
6931
6985
  );
6932
- React66.useLayoutEffect(() => {
6986
+ React67.useLayoutEffect(() => {
6933
6987
  const el = ref.current;
6934
6988
  if (!el) return;
6935
6989
  el.style.height = "auto";
@@ -6940,12 +6994,12 @@ function ToastItem({
6940
6994
  reportHeight(t.id, h);
6941
6995
  }
6942
6996
  }, [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(() => {
6997
+ React67.useEffect(() => () => removeHeight(t.id), [t.id, removeHeight]);
6998
+ const mountedClosing = React67.useRef(t.state === "closing");
6999
+ React67.useEffect(() => {
6946
7000
  if (mountedClosing.current) store.remove(t.id);
6947
7001
  }, [t.id]);
6948
- React66.useEffect(() => {
7002
+ React67.useEffect(() => {
6949
7003
  if (t.duration === Infinity || t.state === "closing" || paused) return;
6950
7004
  startedRef.current = Date.now();
6951
7005
  const id = setTimeout(() => store.dismiss(t.id), remainingRef.current);
@@ -6957,7 +7011,7 @@ function ToastItem({
6957
7011
  );
6958
7012
  };
6959
7013
  }, [paused, t.id, t.duration, t.state]);
6960
- React66.useEffect(
7014
+ React67.useEffect(
6961
7015
  () => () => {
6962
7016
  if (flingRef.current) clearTimeout(flingRef.current);
6963
7017
  },
@@ -7045,10 +7099,10 @@ function ToastItem({
7045
7099
  ),
7046
7100
  children: [
7047
7101
  /* @__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
7102
+ /* @__PURE__ */ jsx57("div", { className: TOAST_TITLE, children: t.message }),
7103
+ t.description ? /* @__PURE__ */ jsx57("div", { className: "text-ink-soft text-sm", children: t.description }) : null
7050
7104
  ] }),
7051
- /* @__PURE__ */ jsx56(
7105
+ /* @__PURE__ */ jsx57(
7052
7106
  "button",
7053
7107
  {
7054
7108
  type: "button",
@@ -7056,7 +7110,7 @@ function ToastItem({
7056
7110
  "data-slot": "toast-close",
7057
7111
  onClick: () => store.dismiss(t.id),
7058
7112
  className: TOAST_CLOSE,
7059
- children: /* @__PURE__ */ jsx56(
7113
+ children: /* @__PURE__ */ jsx57(
7060
7114
  "svg",
7061
7115
  {
7062
7116
  xmlns: "http://www.w3.org/2000/svg",
@@ -7069,7 +7123,7 @@ function ToastItem({
7069
7123
  strokeLinecap: "round",
7070
7124
  strokeLinejoin: "round",
7071
7125
  "aria-hidden": "true",
7072
- children: /* @__PURE__ */ jsx56("path", { d: "M18 6 6 18M6 6l12 12" })
7126
+ children: /* @__PURE__ */ jsx57("path", { d: "M18 6 6 18M6 6l12 12" })
7073
7127
  }
7074
7128
  )
7075
7129
  }
@@ -7083,17 +7137,17 @@ function Toaster({
7083
7137
  className,
7084
7138
  ...props
7085
7139
  }) {
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), []);
7140
+ const [toasts, setToasts] = React67.useState([]);
7141
+ const [heights, setHeights] = React67.useState(/* @__PURE__ */ new Map());
7142
+ const [paused, setPaused] = React67.useState(false);
7143
+ React67.useEffect(() => store.subscribe(setToasts), []);
7090
7144
  const onEnter = () => setPaused(true);
7091
7145
  const onLeave = (e) => {
7092
7146
  if (!e.currentTarget.contains(e.relatedTarget)) {
7093
7147
  setPaused(false);
7094
7148
  }
7095
7149
  };
7096
- const reportHeight = React66.useCallback((id, h) => {
7150
+ const reportHeight = React67.useCallback((id, h) => {
7097
7151
  setHeights((prev) => {
7098
7152
  if (prev.get(id) === h) return prev;
7099
7153
  const next = new Map(prev);
@@ -7101,7 +7155,7 @@ function Toaster({
7101
7155
  return next;
7102
7156
  });
7103
7157
  }, []);
7104
- const removeHeight = React66.useCallback((id) => {
7158
+ const removeHeight = React67.useCallback((id) => {
7105
7159
  setHeights((prev) => {
7106
7160
  if (!prev.has(id)) return prev;
7107
7161
  const next = new Map(prev);
@@ -7119,7 +7173,7 @@ function Toaster({
7119
7173
  sum += heights.get(t.id) ?? 0;
7120
7174
  return o;
7121
7175
  });
7122
- return /* @__PURE__ */ jsx56(
7176
+ return /* @__PURE__ */ jsx57(
7123
7177
  "ol",
7124
7178
  {
7125
7179
  "data-slot": "toaster",
@@ -7140,7 +7194,7 @@ function Toaster({
7140
7194
  onPointerOut: onLeave,
7141
7195
  onFocus: onEnter,
7142
7196
  onBlur: onLeave,
7143
- children: ordered.map((t, i) => /* @__PURE__ */ jsx56(
7197
+ children: ordered.map((t, i) => /* @__PURE__ */ jsx57(
7144
7198
  ToastItem,
7145
7199
  {
7146
7200
  toast: t,
@@ -7158,7 +7212,7 @@ function Toaster({
7158
7212
  }
7159
7213
 
7160
7214
  // src/components/form.tsx
7161
- import * as React67 from "react";
7215
+ import * as React68 from "react";
7162
7216
 
7163
7217
  // src/generated/form.ts
7164
7218
  var FORM_ITEM = "grid gap-2";
@@ -7166,21 +7220,21 @@ var FORM_DESCRIPTION = "text-ink-soft text-sm";
7166
7220
  var FORM_MESSAGE = "text-accent-error text-sm";
7167
7221
 
7168
7222
  // src/components/form.tsx
7169
- import { jsx as jsx57 } from "react/jsx-runtime";
7170
- var FormItemContext = React67.createContext(null);
7223
+ import { jsx as jsx58 } from "react/jsx-runtime";
7224
+ var FormItemContext = React68.createContext(null);
7171
7225
  function useFormItem() {
7172
- const ctx = React67.useContext(FormItemContext);
7226
+ const ctx = React68.useContext(FormItemContext);
7173
7227
  if (!ctx) {
7174
7228
  throw new Error("Form parts must be used within <FormItem>");
7175
7229
  }
7176
7230
  return ctx;
7177
7231
  }
7178
7232
  function Form({ ...props }) {
7179
- return /* @__PURE__ */ jsx57("form", { "data-slot": "form", ...props });
7233
+ return /* @__PURE__ */ jsx58("form", { "data-slot": "form", ...props });
7180
7234
  }
7181
7235
  function FormItem({ className, ...props }) {
7182
- const id = React67.useId();
7183
- const value = React67.useMemo(
7236
+ const id = React68.useId();
7237
+ const value = React68.useMemo(
7184
7238
  () => ({
7185
7239
  id,
7186
7240
  formItemId: `${id}-form-item`,
@@ -7189,7 +7243,7 @@ function FormItem({ className, ...props }) {
7189
7243
  }),
7190
7244
  [id]
7191
7245
  );
7192
- return /* @__PURE__ */ jsx57(FormItemContext.Provider, { value, children: /* @__PURE__ */ jsx57("div", { "data-slot": "form-item", className: cn(FORM_ITEM, className), ...props }) });
7246
+ return /* @__PURE__ */ jsx58(FormItemContext.Provider, { value, children: /* @__PURE__ */ jsx58("div", { "data-slot": "form-item", className: cn(FORM_ITEM, className), ...props }) });
7193
7247
  }
7194
7248
  function FormLabel({
7195
7249
  className,
@@ -7197,7 +7251,7 @@ function FormLabel({
7197
7251
  ...props
7198
7252
  }) {
7199
7253
  const { formItemId } = useFormItem();
7200
- return /* @__PURE__ */ jsx57(
7254
+ return /* @__PURE__ */ jsx58(
7201
7255
  Label,
7202
7256
  {
7203
7257
  "data-slot": "form-label",
@@ -7213,7 +7267,7 @@ function FormControl({
7213
7267
  ...props
7214
7268
  }) {
7215
7269
  const { formItemId, formDescriptionId, formMessageId } = useFormItem();
7216
- return /* @__PURE__ */ jsx57(
7270
+ return /* @__PURE__ */ jsx58(
7217
7271
  Slot,
7218
7272
  {
7219
7273
  "data-slot": "form-control",
@@ -7226,7 +7280,7 @@ function FormControl({
7226
7280
  }
7227
7281
  function FormDescription({ className, ...props }) {
7228
7282
  const { formDescriptionId } = useFormItem();
7229
- return /* @__PURE__ */ jsx57(
7283
+ return /* @__PURE__ */ jsx58(
7230
7284
  "p",
7231
7285
  {
7232
7286
  "data-slot": "form-description",
@@ -7241,7 +7295,7 @@ function FormMessage({ className, children, ...props }) {
7241
7295
  if (!children) {
7242
7296
  return null;
7243
7297
  }
7244
- return /* @__PURE__ */ jsx57(
7298
+ return /* @__PURE__ */ jsx58(
7245
7299
  "p",
7246
7300
  {
7247
7301
  "data-slot": "form-message",
@@ -7254,7 +7308,7 @@ function FormMessage({ className, children, ...props }) {
7254
7308
  }
7255
7309
 
7256
7310
  // src/components/resizable.tsx
7257
- import * as React68 from "react";
7311
+ import * as React69 from "react";
7258
7312
 
7259
7313
  // src/generated/resizable.ts
7260
7314
  var RESIZABLE_GROUP = "flex h-full w-full data-[panel-group-direction=vertical]:flex-col";
@@ -7263,10 +7317,10 @@ var RESIZABLE_HANDLE = "bg-border focus-visible:ring-ring relative flex w-px ite
7263
7317
  var RESIZABLE_HANDLE_GRIP = "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-xs border";
7264
7318
 
7265
7319
  // src/components/resizable.tsx
7266
- import { jsx as jsx58, jsxs as jsxs28 } from "react/jsx-runtime";
7267
- var ResizableContext = React68.createContext(null);
7320
+ import { jsx as jsx59, jsxs as jsxs28 } from "react/jsx-runtime";
7321
+ var ResizableContext = React69.createContext(null);
7268
7322
  function useResizable() {
7269
- const ctx = React68.useContext(ResizableContext);
7323
+ const ctx = React69.useContext(ResizableContext);
7270
7324
  if (!ctx)
7271
7325
  throw new Error("Resizable parts must be used within a ResizablePanelGroup");
7272
7326
  return ctx;
@@ -7289,9 +7343,9 @@ function ResizablePanelGroup({
7289
7343
  children,
7290
7344
  ...props
7291
7345
  }) {
7292
- const [sizes, setSizes] = React68.useState([]);
7293
- const groupRef = React68.useRef(null);
7294
- const register = React68.useCallback((index, defaultSize) => {
7346
+ const [sizes, setSizes] = React69.useState([]);
7347
+ const groupRef = React69.useRef(null);
7348
+ const register = React69.useCallback((index, defaultSize) => {
7295
7349
  setSizes((prev) => {
7296
7350
  if (prev[index] !== void 0) return prev;
7297
7351
  const next = prev.slice();
@@ -7300,14 +7354,14 @@ function ResizablePanelGroup({
7300
7354
  return next;
7301
7355
  });
7302
7356
  }, []);
7303
- React68.useEffect(() => {
7357
+ React69.useEffect(() => {
7304
7358
  if (sizes.length) onLayout?.(sizes);
7305
7359
  }, [sizes, onLayout]);
7306
- const value = React68.useMemo(
7360
+ const value = React69.useMemo(
7307
7361
  () => ({ sizes, setSizes, register, direction, keyboardStep, groupRef }),
7308
7362
  [sizes, register, direction, keyboardStep]
7309
7363
  );
7310
- return /* @__PURE__ */ jsx58(ResizableContext.Provider, { value, children: /* @__PURE__ */ jsx58(
7364
+ return /* @__PURE__ */ jsx59(ResizableContext.Provider, { value, children: /* @__PURE__ */ jsx59(
7311
7365
  "div",
7312
7366
  {
7313
7367
  ref: groupRef,
@@ -7328,11 +7382,11 @@ function ResizablePanel({
7328
7382
  ...props
7329
7383
  }) {
7330
7384
  const { sizes, register } = useResizable();
7331
- React68.useEffect(() => {
7385
+ React69.useEffect(() => {
7332
7386
  register(index, defaultSize);
7333
7387
  }, [register, index, defaultSize]);
7334
7388
  const basis = sizes[index] ?? defaultSize;
7335
- return /* @__PURE__ */ jsx58(
7389
+ return /* @__PURE__ */ jsx59(
7336
7390
  "div",
7337
7391
  {
7338
7392
  "data-slot": "resizable-panel",
@@ -7351,12 +7405,12 @@ function ResizableHandle({
7351
7405
  ...props
7352
7406
  }) {
7353
7407
  const { setSizes, direction, keyboardStep, groupRef } = useResizable();
7354
- const draggingRef = React68.useRef(false);
7355
- const resize = React68.useCallback(
7408
+ const draggingRef = React69.useRef(false);
7409
+ const resize = React69.useCallback(
7356
7410
  (delta) => setSizes((prev) => redistribute(prev, index, delta)),
7357
7411
  [setSizes, index]
7358
7412
  );
7359
- const onPointerMove = React68.useCallback(
7413
+ const onPointerMove = React69.useCallback(
7360
7414
  (event) => {
7361
7415
  if (!draggingRef.current) return;
7362
7416
  const rect = groupRef.current?.getBoundingClientRect();
@@ -7368,7 +7422,7 @@ function ResizableHandle({
7368
7422
  },
7369
7423
  [direction, resize, groupRef]
7370
7424
  );
7371
- const onPointerUp = React68.useCallback(() => {
7425
+ const onPointerUp = React69.useCallback(() => {
7372
7426
  draggingRef.current = false;
7373
7427
  window.removeEventListener("pointermove", onPointerMove);
7374
7428
  window.removeEventListener("pointerup", onPointerUp);
@@ -7379,7 +7433,7 @@ function ResizableHandle({
7379
7433
  window.addEventListener("pointermove", onPointerMove);
7380
7434
  window.addEventListener("pointerup", onPointerUp);
7381
7435
  };
7382
- React68.useEffect(() => () => onPointerUp(), [onPointerUp]);
7436
+ React69.useEffect(() => () => onPointerUp(), [onPointerUp]);
7383
7437
  const onKeyDown = (event) => {
7384
7438
  let delta;
7385
7439
  switch (event.key) {
@@ -7412,7 +7466,7 @@ function ResizableHandle({
7412
7466
  onKeyDown,
7413
7467
  ...props,
7414
7468
  children: [
7415
- withHandle && /* @__PURE__ */ jsx58("div", { className: RESIZABLE_HANDLE_GRIP, children: /* @__PURE__ */ jsxs28(
7469
+ withHandle && /* @__PURE__ */ jsx59("div", { className: RESIZABLE_HANDLE_GRIP, children: /* @__PURE__ */ jsxs28(
7416
7470
  "svg",
7417
7471
  {
7418
7472
  className: "size-2.5",
@@ -7427,12 +7481,12 @@ function ResizableHandle({
7427
7481
  strokeLinejoin: "round",
7428
7482
  "aria-hidden": "true",
7429
7483
  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" })
7484
+ /* @__PURE__ */ jsx59("circle", { cx: "9", cy: "12", r: "1" }),
7485
+ /* @__PURE__ */ jsx59("circle", { cx: "9", cy: "5", r: "1" }),
7486
+ /* @__PURE__ */ jsx59("circle", { cx: "9", cy: "19", r: "1" }),
7487
+ /* @__PURE__ */ jsx59("circle", { cx: "15", cy: "12", r: "1" }),
7488
+ /* @__PURE__ */ jsx59("circle", { cx: "15", cy: "5", r: "1" }),
7489
+ /* @__PURE__ */ jsx59("circle", { cx: "15", cy: "19", r: "1" })
7436
7490
  ]
7437
7491
  }
7438
7492
  ) }),
@@ -7441,6 +7495,210 @@ function ResizableHandle({
7441
7495
  }
7442
7496
  );
7443
7497
  }
7498
+
7499
+ // src/components/terminal.tsx
7500
+ import * as React70 from "react";
7501
+
7502
+ // src/generated/terminal.ts
7503
+ 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]";
7504
+ var terminalAreaClasses = {
7505
+ "ticker": "lg:col-span-3 lg:row-start-1",
7506
+ "chart": "lg:col-start-1 lg:row-start-2",
7507
+ "book": "lg:col-start-2 lg:row-start-2",
7508
+ "form": "lg:col-start-3 lg:row-start-2",
7509
+ "orders": "lg:col-span-3 lg:row-start-3"
7510
+ };
7511
+ var TERMINAL_PANE = "flex min-h-0 min-w-0 flex-col overflow-hidden bg-card";
7512
+ var TERMINAL_PANE_HEADER = "flex h-9 shrink-0 items-center gap-2 border-b border-border px-3 text-xs font-medium text-ink-mid";
7513
+ var TERMINAL_PANE_BODY = "flex min-h-0 flex-1 flex-col overflow-auto";
7514
+ var TERMINAL_CHART = "relative min-h-[18rem] flex-1 overflow-hidden";
7515
+ var TERMINAL_TICKER = "flex min-w-0 items-center gap-6 overflow-x-auto bg-card px-4 py-2 whitespace-nowrap";
7516
+ var TERMINAL_TICKER_STAT = "flex shrink-0 flex-col gap-0.5";
7517
+ var TERMINAL_TICKER_LABEL = "text-[11px] uppercase tracking-wide text-ink-soft";
7518
+ var TERMINAL_TICKER_VALUE = "font-mono text-sm tabular-nums text-ink";
7519
+ var bookSideClasses = {
7520
+ "bid": "text-positive",
7521
+ "ask": "text-accent-error"
7522
+ };
7523
+ var bookDepthClasses = {
7524
+ "bid": "bg-positive/15",
7525
+ "ask": "bg-accent-error/15"
7526
+ };
7527
+ var ORDER_BOOK = "flex min-h-0 flex-1 flex-col font-mono text-xs tabular-nums";
7528
+ var ORDER_BOOK_HEAD = "grid shrink-0 grid-cols-3 gap-2 px-3 py-1.5 text-right text-[11px] text-ink-soft [&>*:first-child]:text-left";
7529
+ var ORDER_BOOK_ROW = "relative isolate grid cursor-pointer grid-cols-3 gap-2 px-3 py-0.5 text-right leading-5 hover:bg-hover";
7530
+ var ORDER_BOOK_PRICE = "text-left";
7531
+ var ORDER_BOOK_DEPTH = "pointer-events-none absolute inset-y-0 right-0 -z-10";
7532
+ var ORDER_BOOK_SPREAD = "flex shrink-0 items-center justify-between gap-2 border-y border-border bg-muted/50 px-3 py-1 text-ink-mid";
7533
+ var TRADES_TAPE_ROW = "grid grid-cols-3 gap-2 px-3 py-0.5 text-right font-mono text-xs leading-5 tabular-nums hover:bg-hover";
7534
+ var ORDER_FORM = "flex flex-col gap-3 p-3 text-sm";
7535
+ var ORDER_FORM_ROW = "flex items-center justify-between gap-2 text-xs";
7536
+ var ORDER_FORM_LABEL = "text-ink-soft";
7537
+ var ORDER_FORM_VALUE = "font-mono tabular-nums text-ink";
7538
+ var ORDER_FORM_SUBMIT_BASE = "inline-flex h-10 w-full shrink-0 cursor-pointer items-center justify-center rounded-[var(--control-radius)] text-sm font-semibold transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50";
7539
+ var orderSideClasses = {
7540
+ "buy": "bg-positive text-on-positive hover:bg-positive/90",
7541
+ "sell": "bg-accent-error text-on-accent-error hover:bg-accent-error/90"
7542
+ };
7543
+ var OPEN_ORDERS_EMPTY = "flex flex-1 items-center justify-center p-6 text-sm text-ink-soft";
7544
+
7545
+ // src/components/terminal.tsx
7546
+ import { jsx as jsx60, jsxs as jsxs29 } from "react/jsx-runtime";
7547
+ function Terminal({ className, ...props }) {
7548
+ return /* @__PURE__ */ jsx60("div", { "data-slot": "terminal", className: cn(TERMINAL_ROOT, className), ...props });
7549
+ }
7550
+ function TerminalPane({ area, className, ...props }) {
7551
+ return /* @__PURE__ */ jsx60(
7552
+ "section",
7553
+ {
7554
+ "data-slot": "terminal-pane",
7555
+ "data-area": area,
7556
+ className: cn(TERMINAL_PANE, terminalAreaClasses[area], className),
7557
+ ...props
7558
+ }
7559
+ );
7560
+ }
7561
+ function TerminalPaneHeader({ className, ...props }) {
7562
+ return /* @__PURE__ */ jsx60(
7563
+ "header",
7564
+ {
7565
+ "data-slot": "terminal-pane-header",
7566
+ className: cn(TERMINAL_PANE_HEADER, className),
7567
+ ...props
7568
+ }
7569
+ );
7570
+ }
7571
+ function TerminalPaneBody({ className, ...props }) {
7572
+ return /* @__PURE__ */ jsx60("div", { "data-slot": "terminal-pane-body", className: cn(TERMINAL_PANE_BODY, className), ...props });
7573
+ }
7574
+ var TerminalChart = React70.forwardRef(function TerminalChart2({ className, ...props }, ref) {
7575
+ return /* @__PURE__ */ jsx60(
7576
+ "div",
7577
+ {
7578
+ ref,
7579
+ "data-slot": "terminal-chart",
7580
+ className: cn(TERMINAL_CHART, className),
7581
+ ...props
7582
+ }
7583
+ );
7584
+ });
7585
+ function TerminalTicker({ className, ...props }) {
7586
+ return /* @__PURE__ */ jsx60(
7587
+ "div",
7588
+ {
7589
+ "data-slot": "terminal-ticker",
7590
+ "data-area": "ticker",
7591
+ className: cn(TERMINAL_TICKER, terminalAreaClasses.ticker, className),
7592
+ ...props
7593
+ }
7594
+ );
7595
+ }
7596
+ function TickerStat({ label, value, className, ...props }) {
7597
+ return /* @__PURE__ */ jsxs29("div", { "data-slot": "ticker-stat", className: TERMINAL_TICKER_STAT, ...props, children: [
7598
+ /* @__PURE__ */ jsx60("span", { className: TERMINAL_TICKER_LABEL, children: label }),
7599
+ /* @__PURE__ */ jsx60("span", { className: cn(TERMINAL_TICKER_VALUE, className), children: value })
7600
+ ] });
7601
+ }
7602
+ function OrderBook({ className, ...props }) {
7603
+ return /* @__PURE__ */ jsx60("div", { "data-slot": "order-book", className: cn(ORDER_BOOK, className), ...props });
7604
+ }
7605
+ function OrderBookHead({ price, size, total, className, ...props }) {
7606
+ return /* @__PURE__ */ jsxs29("div", { "data-slot": "order-book-head", className: cn(ORDER_BOOK_HEAD, className), ...props, children: [
7607
+ /* @__PURE__ */ jsx60("span", { children: price }),
7608
+ /* @__PURE__ */ jsx60("span", { children: size }),
7609
+ /* @__PURE__ */ jsx60("span", { children: total })
7610
+ ] });
7611
+ }
7612
+ function OrderBookRow({
7613
+ side,
7614
+ price,
7615
+ size,
7616
+ total,
7617
+ depth = 0,
7618
+ className,
7619
+ ...props
7620
+ }) {
7621
+ return /* @__PURE__ */ jsxs29(
7622
+ "div",
7623
+ {
7624
+ "data-slot": "order-book-row",
7625
+ "data-side": side,
7626
+ className: cn(ORDER_BOOK_ROW, className),
7627
+ ...props,
7628
+ children: [
7629
+ /* @__PURE__ */ jsx60(
7630
+ "span",
7631
+ {
7632
+ "aria-hidden": "true",
7633
+ className: cn(ORDER_BOOK_DEPTH, bookDepthClasses[side]),
7634
+ style: { width: `${depthPercent(depth)}%` }
7635
+ }
7636
+ ),
7637
+ /* @__PURE__ */ jsx60("span", { className: cn(ORDER_BOOK_PRICE, bookSideClasses[side]), children: price }),
7638
+ /* @__PURE__ */ jsx60("span", { children: size }),
7639
+ /* @__PURE__ */ jsx60("span", { children: total })
7640
+ ]
7641
+ }
7642
+ );
7643
+ }
7644
+ function depthPercent(depth) {
7645
+ if (Number.isNaN(depth)) return 0;
7646
+ return Math.round(Math.min(1, Math.max(0, depth)) * 100);
7647
+ }
7648
+ function OrderBookSpread({ className, ...props }) {
7649
+ return /* @__PURE__ */ jsx60("div", { "data-slot": "order-book-spread", className: cn(ORDER_BOOK_SPREAD, className), ...props });
7650
+ }
7651
+ function TradesTapeRow({ side, price, size, time, className, ...props }) {
7652
+ return /* @__PURE__ */ jsxs29(
7653
+ "div",
7654
+ {
7655
+ "data-slot": "trades-tape-row",
7656
+ "data-side": side,
7657
+ className: cn(TRADES_TAPE_ROW, className),
7658
+ ...props,
7659
+ children: [
7660
+ /* @__PURE__ */ jsx60("span", { className: cn(ORDER_BOOK_PRICE, bookSideClasses[side]), children: price }),
7661
+ /* @__PURE__ */ jsx60("span", { children: size }),
7662
+ /* @__PURE__ */ jsx60("span", { children: time })
7663
+ ]
7664
+ }
7665
+ );
7666
+ }
7667
+ function OrderForm({ className, onSubmit, ...props }) {
7668
+ return /* @__PURE__ */ jsx60(
7669
+ "form",
7670
+ {
7671
+ "data-slot": "order-form",
7672
+ className: cn(ORDER_FORM, className),
7673
+ onSubmit: (e) => {
7674
+ e.preventDefault();
7675
+ onSubmit?.(e);
7676
+ },
7677
+ ...props
7678
+ }
7679
+ );
7680
+ }
7681
+ function OrderFormRow({ label, value, className, ...props }) {
7682
+ return /* @__PURE__ */ jsxs29("div", { "data-slot": "order-form-row", className: cn(ORDER_FORM_ROW, className), ...props, children: [
7683
+ /* @__PURE__ */ jsx60("span", { className: ORDER_FORM_LABEL, children: label }),
7684
+ /* @__PURE__ */ jsx60("span", { className: ORDER_FORM_VALUE, children: value })
7685
+ ] });
7686
+ }
7687
+ function OrderFormSubmit({ side = "buy", className, ...props }) {
7688
+ return /* @__PURE__ */ jsx60(
7689
+ "button",
7690
+ {
7691
+ type: "submit",
7692
+ "data-slot": "order-form-submit",
7693
+ "data-side": side,
7694
+ className: cn(ORDER_FORM_SUBMIT_BASE, orderSideClasses[side], className),
7695
+ ...props
7696
+ }
7697
+ );
7698
+ }
7699
+ function OpenOrdersEmpty({ className, ...props }) {
7700
+ return /* @__PURE__ */ jsx60("div", { "data-slot": "open-orders-empty", className: cn(OPEN_ORDERS_EMPTY, className), ...props });
7701
+ }
7444
7702
  export {
7445
7703
  Accordion,
7446
7704
  AccordionContent,
@@ -7614,6 +7872,7 @@ export {
7614
7872
  Kbd,
7615
7873
  KbdGroup,
7616
7874
  Label,
7875
+ Logo,
7617
7876
  Menubar,
7618
7877
  MenubarCheckboxItem,
7619
7878
  MenubarContent,
@@ -7638,6 +7897,14 @@ export {
7638
7897
  NavigationMenuTrigger,
7639
7898
  NavigationMenuViewport,
7640
7899
  NotFound,
7900
+ OpenOrdersEmpty,
7901
+ OrderBook,
7902
+ OrderBookHead,
7903
+ OrderBookRow,
7904
+ OrderBookSpread,
7905
+ OrderForm,
7906
+ OrderFormRow,
7907
+ OrderFormSubmit,
7641
7908
  Pagination,
7642
7909
  PaginationContent,
7643
7910
  PaginationEllipsis,
@@ -7715,7 +7982,14 @@ export {
7715
7982
  TabsContent,
7716
7983
  TabsList,
7717
7984
  TabsTrigger,
7985
+ Terminal,
7986
+ TerminalChart,
7987
+ TerminalPane,
7988
+ TerminalPaneBody,
7989
+ TerminalPaneHeader,
7990
+ TerminalTicker,
7718
7991
  Textarea,
7992
+ TickerStat,
7719
7993
  Toaster,
7720
7994
  Toggle,
7721
7995
  ToggleGroup,
@@ -7724,6 +7998,7 @@ export {
7724
7998
  TooltipContent,
7725
7999
  TooltipProvider,
7726
8000
  TooltipTrigger,
8001
+ TradesTapeRow,
7727
8002
  buttonVariants,
7728
8003
  cn,
7729
8004
  mergeRefs,