@tenerife.music/ui 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Slot } from '@radix-ui/react-slot';
2
- import * as React48 from 'react';
2
+ import * as React49 from 'react';
3
3
  import { useState, useRef, useEffect, useCallback } from 'react';
4
4
  import { cva } from 'class-variance-authority';
5
5
  import { clsx } from 'clsx';
@@ -612,6 +612,162 @@ var MOTION_TOKENS = {
612
612
  }
613
613
  };
614
614
 
615
+ // src/FOUNDATION/tokens/components/badge.ts
616
+ var BADGE_TOKENS = {
617
+ /**
618
+ * Layout tokens
619
+ * Base layout utilities for badge component
620
+ */
621
+ layout: "inline-flex items-center",
622
+ // Base layout for badge container
623
+ /**
624
+ * Badge padding
625
+ * Uses semantic spacing tokens
626
+ */
627
+ padding: {
628
+ horizontal: "px-xs",
629
+ // 4px (0.25rem) - maps to semanticSpacing.xs
630
+ vertical: "py-xs"
631
+ // 4px (0.25rem) - maps to semanticSpacing.xs
632
+ },
633
+ /**
634
+ * Border radius for badges
635
+ * Uses fully rounded (pill shape) - maps to borderRadius.full
636
+ *
637
+ * @rule References borderRadius.full (9999px) from Radius Authority
638
+ * @see docs/architecture/RADIUS_AUTHORITY_CONTRACT.md
639
+ */
640
+ radius: "rounded-full",
641
+ // References borderRadius.full (9999px) - Radius Authority compliant
642
+ /**
643
+ * Font size for badges
644
+ * References foundation typography fontSize tokens from Typography Authority
645
+ *
646
+ * @rule All fontSize values reference Typography Authority tokens
647
+ * @see docs/architecture/TYPOGRAPHY_AUTHORITY_CONTRACT.md
648
+ */
649
+ fontSize: "text-xs",
650
+ // References fontSize.xs[0] from Typography Authority (~12px)
651
+ /**
652
+ * Font weight for badges
653
+ */
654
+ fontWeight: "font-semibold",
655
+ // Semibold weight (600)
656
+ /**
657
+ * Border token
658
+ * Base border style
659
+ */
660
+ border: "border",
661
+ // Base border
662
+ /**
663
+ * Underline offset for link variant
664
+ * Uses spacing token (xs = 4px) which matches underline-offset-4
665
+ */
666
+ underlineOffset: "underline-offset-4",
667
+ // 4px (0.25rem) - matches semanticSpacing.xs
668
+ /**
669
+ * Transition tokens
670
+ * References Motion Authority tokens for consistent motion behavior
671
+ *
672
+ * @rule Uses MOTION_TOKENS.transitionPreset.colors from Motion Authority
673
+ * @rule Motion transitions MUST use canonical motion tokens only
674
+ * @see docs/architecture/MOTION_AUTHORITY_CONTRACT.md
675
+ */
676
+ transition: {
677
+ colors: MOTION_TOKENS.transitionPreset.colors
678
+ // "transition-colors duration-normal ease-out" - Motion Authority compliant
679
+ },
680
+ /**
681
+ * Focus state tokens
682
+ * Focus ring for keyboard navigation
683
+ *
684
+ * @rule Focus MUST use focus-visible: prefix (keyboard navigation only)
685
+ * @rule Focus MUST be blocked when disabled={true}
686
+ */
687
+ focus: {
688
+ ring: "focus-visible:ring-2 focus-visible:ring-ring",
689
+ // Focus ring using semantic ring color
690
+ outline: "focus-visible:outline-none",
691
+ // Remove default outline (replaced by ring)
692
+ offset: "focus-visible:ring-offset-2"
693
+ // Ring offset
694
+ },
695
+ /**
696
+ * Color tokens for badge variants
697
+ * Uses semantic color tokens that map to CSS variables
698
+ */
699
+ variant: {
700
+ primary: {
701
+ border: "border-transparent",
702
+ // Transparent border
703
+ background: "bg-primary",
704
+ // Primary background using CSS var
705
+ text: "text-primary-foreground",
706
+ // Primary text using CSS var
707
+ hover: "hover:bg-primary/80"
708
+ // Primary hover background
709
+ },
710
+ secondary: {
711
+ border: "border-transparent",
712
+ // Transparent border
713
+ background: "bg-secondary",
714
+ // Secondary background using CSS var
715
+ text: "text-secondary-foreground",
716
+ // Secondary text using CSS var
717
+ hover: "hover:bg-secondary/80"
718
+ // Secondary hover background
719
+ },
720
+ accent: {
721
+ border: "border-transparent",
722
+ // Transparent border
723
+ background: "bg-accent",
724
+ // Accent background using CSS var
725
+ text: "text-accent-foreground",
726
+ // Accent text using CSS var
727
+ hover: "hover:bg-accent/80"
728
+ // Accent hover background
729
+ },
730
+ outline: {
731
+ border: "border-border",
732
+ // No background
733
+ text: "text-foreground"
734
+ // Foreground text using CSS var
735
+ },
736
+ ghost: {
737
+ border: "border-transparent",
738
+ // Transparent border
739
+ background: "bg-transparent",
740
+ // Transparent background
741
+ text: "text-foreground",
742
+ // Foreground text using CSS var
743
+ hover: "hover:bg-accent/10"
744
+ // Ghost hover background
745
+ },
746
+ link: {
747
+ border: "border-transparent",
748
+ // Transparent border
749
+ background: "bg-transparent",
750
+ // Transparent background
751
+ text: "text-primary",
752
+ // Primary text using CSS var
753
+ hover: "hover:text-primary/80",
754
+ // Primary hover text
755
+ underline: "hover:underline"
756
+ // Underline on hover
757
+ },
758
+ destructive: {
759
+ border: "border-transparent",
760
+ // Transparent border
761
+ background: "bg-destructive",
762
+ // Destructive background using CSS var
763
+ text: "text-destructive-foreground",
764
+ // Destructive text using CSS var
765
+ hover: "hover:bg-destructive/80"
766
+ // Destructive hover background
767
+ }
768
+ }
769
+ };
770
+
615
771
  // src/FOUNDATION/tokens/components/button.ts
616
772
  var BUTTON_TOKENS = {
617
773
  /**
@@ -1035,68 +1191,6 @@ var CARD_TOKENS = {
1035
1191
  }
1036
1192
  };
1037
1193
 
1038
- // src/FOUNDATION/tokens/components/artist.ts
1039
- var ARTIST_TOKENS = {
1040
- /**
1041
- * Image container tokens
1042
- * Layout classes for image container wrapper
1043
- */
1044
- image: {
1045
- /**
1046
- * Container layout tokens
1047
- * Positioning and sizing for image container
1048
- */
1049
- container: {
1050
- /**
1051
- * Base container layout
1052
- * Relative positioning, full width, overflow hidden
1053
- * Uses Tailwind layout utilities (allowed per architecture)
1054
- */
1055
- layout: "relative w-full overflow-hidden"
1056
- },
1057
- /**
1058
- * Image sizing tokens
1059
- * Full width and height for images
1060
- */
1061
- sizing: {
1062
- /**
1063
- * Full size image
1064
- * Uses Tailwind sizing utilities (allowed per architecture)
1065
- */
1066
- full: "h-full w-full"
1067
- },
1068
- /**
1069
- * Placeholder container tokens
1070
- * Layout for placeholder icon container when no image is provided
1071
- */
1072
- placeholder: {
1073
- /**
1074
- * Placeholder container layout
1075
- * Flex centering for placeholder icon
1076
- * Uses Tailwind layout utilities (allowed per architecture)
1077
- */
1078
- container: "flex h-full w-full items-center justify-center"
1079
- }
1080
- },
1081
- /**
1082
- * Footer border tokens
1083
- * Border styling for card footer separator
1084
- */
1085
- footer: {
1086
- /**
1087
- * Footer border tokens
1088
- * Top border separator for footer section
1089
- */
1090
- border: {
1091
- /**
1092
- * Footer border top
1093
- * Uses semantic border color token
1094
- */
1095
- top: "border-t border-border"
1096
- }
1097
- }
1098
- };
1099
-
1100
1194
  // src/FOUNDATION/tokens/spacing.ts
1101
1195
  var spacing = {
1102
1196
  // Zero spacing
@@ -1483,609 +1577,87 @@ var ICON_TOKENS = {
1483
1577
  }
1484
1578
  };
1485
1579
 
1486
- // src/FOUNDATION/tokens/components/domain.ts
1487
- var DOMAIN_TOKENS = {
1580
+ // src/FOUNDATION/tokens/components/input.ts
1581
+ var INPUT_TOKENS = {
1488
1582
  /**
1489
- * Surface tokens for card containers
1490
- * Defines background, border, radius, and shadow for card surfaces
1583
+ * Input heights by size
1584
+ * Supports xs, sm, md, lg, xl sizes
1491
1585
  */
1492
- surface: {
1493
- /**
1494
- * Background colors
1495
- * Maps to semantic color tokens
1496
- */
1497
- bg: {
1498
- default: "bg-card",
1499
- // Default card background - maps to semantic color tokens
1500
- hover: "hover:bg-card/95"
1501
- // Hover state background with 95% opacity
1502
- },
1503
- /**
1504
- * Border styles
1505
- * Maps to semantic border tokens
1506
- */
1507
- border: {
1508
- default: "border border-border",
1509
- // Default border - maps to semantic border tokens
1510
- hover: "hover:border-primary/20"
1511
- // Hover state border with primary color at 20% opacity
1512
- },
1513
- /**
1514
- * Border radius
1515
- * References borderRadius.xl (0.75rem / 12px)
1516
- * Using Tailwind class "rounded-xl" which maps to borderRadius.xl
1517
- */
1518
- radius: {
1519
- default: "rounded-xl"
1520
- // References borderRadius.xl (0.75rem / 12px) via Tailwind
1521
- },
1522
- /**
1523
- * Shadow (elevation) tokens
1524
- * References elevationShadows.md
1525
- * Using Tailwind class "shadow-md" which maps to elevationShadows.md
1526
- */
1527
- shadow: {
1528
- default: "shadow-md"
1529
- // References elevationShadows.md via Tailwind
1530
- },
1531
- /**
1532
- * Elevation change on hover
1533
- * References elevationShadows.xl
1534
- * Using Tailwind class "hover:shadow-xl" which maps to elevationShadows.xl
1535
- */
1536
- elevation: {
1537
- hover: "hover:shadow-xl"
1538
- // References elevationShadows.xl via Tailwind
1539
- }
1586
+ height: {
1587
+ xs: "h-7",
1588
+ // 28px (1.75rem)
1589
+ sm: "h-8",
1590
+ // 32px (2rem)
1591
+ md: "h-9",
1592
+ // 36px (2.25rem) - default
1593
+ lg: "h-10",
1594
+ // 40px (2.5rem)
1595
+ xl: "h-11"
1596
+ // 44px (2.75rem)
1540
1597
  },
1541
1598
  /**
1542
- * Spacing tokens for card component spacing
1543
- * References semanticSpacing tokens
1544
- * Note: Tailwind classes are used for component className application
1599
+ * Input padding by size
1600
+ * Horizontal and vertical padding values
1545
1601
  */
1546
- spacing: {
1547
- /**
1548
- * Section spacing - vertical spacing between card sections
1549
- */
1550
- section: {
1551
- titleToSubtitle: "mb-xs",
1552
- // Spacing between title and subtitle/description - references semanticSpacing.xs (4px) via Tailwind
1553
- subtitleToMetadata: "mb-sm"
1554
- // Spacing between description and metadata - references semanticSpacing.sm (8px) via Tailwind
1555
- },
1556
- /**
1557
- * Badge spacing offsets
1558
- */
1559
- badges: {
1560
- offsetX: semanticSpacing.md,
1561
- // Horizontal offset for badges (16px)
1562
- offsetY: semanticSpacing.md
1563
- // Vertical offset for badges (16px)
1564
- },
1565
- /**
1566
- * Image spacing
1567
- */
1568
- image: {
1569
- bottomMargin: semanticSpacing.none
1570
- // Margin below image (0px)
1571
- },
1572
- /**
1573
- * Card vertical gap
1574
- */
1575
- card: {
1576
- verticalGap: semanticSpacing.md
1577
- // Vertical gap in card content (16px)
1578
- },
1579
- /**
1580
- * Metadata item gap
1581
- */
1582
- metadata: {
1583
- itemGap: semanticSpacing.xs
1584
- // Gap between metadata items (4px)
1585
- },
1586
- /**
1587
- * Footer spacing
1588
- */
1589
- footer: {
1590
- paddingTopDefault: "pt-sm",
1591
- // Footer padding top default - references semanticSpacing.sm (8px) via Tailwind
1592
- paddingTopCompact: "pt-xs"
1593
- // Footer padding top compact - references semanticSpacing.xs (4px) via Tailwind
1602
+ padding: {
1603
+ horizontal: {
1604
+ xs: "px-xs",
1605
+ // 4px (0.25rem)
1606
+ sm: "px-sm",
1607
+ // 8px (0.5rem)
1608
+ md: "px-sm",
1609
+ // 8px (0.5rem) - default
1610
+ lg: "px-md",
1611
+ // 16px (1rem)
1612
+ xl: "px-lg"
1613
+ // 24px (1.5rem)
1594
1614
  },
1595
- /**
1596
- * Button spacing
1597
- */
1598
- button: {
1599
- paddingDefault: "px-md py-xs",
1600
- // Button padding default - references semanticSpacing.md (16px) horizontal, xs (4px) vertical via Tailwind
1601
- paddingCompact: "px-sm py-xs",
1602
- // Button padding compact - references semanticSpacing.sm (8px) horizontal, xs (4px) vertical via Tailwind
1603
- iconMarginLeft: "ml-xs"
1604
- // Icon margin left - references semanticSpacing.xs (4px) via Tailwind
1615
+ vertical: {
1616
+ xs: "py-xs",
1617
+ // 4px (0.25rem)
1618
+ sm: "py-xs",
1619
+ // 4px (0.25rem)
1620
+ md: "py-xs",
1621
+ // 4px (0.25rem) - default
1622
+ lg: "py-sm",
1623
+ // 8px (0.5rem)
1624
+ xl: "py-md"
1625
+ // 16px (1rem)
1605
1626
  }
1606
1627
  },
1607
1628
  /**
1608
- * Layout tokens for card spacing and gaps
1609
- * References semanticSpacing tokens
1610
- * Note: Tailwind utilities are used for component className application
1629
+ * Border radius by size
1611
1630
  */
1612
- layout: {
1613
- /**
1614
- * Padding tokens
1615
- * References semanticSpacing (md = 16px, sm = 8px)
1616
- * Note: "p-md" and "p-sm" are Tailwind utilities that apply semanticSpacing values
1617
- */
1618
- padding: {
1619
- default: "p-md",
1620
- // Default padding - references semanticSpacing.md (16px)
1621
- compact: "p-sm"
1622
- // Compact variant padding - references semanticSpacing.sm (8px)
1623
- },
1624
- /**
1625
- * Gap tokens for spacing between card elements
1626
- * References semanticSpacing (md = 16px, xs = 4px)
1627
- * Note: "gap-md" and "gap-xs" are Tailwind utilities that apply semanticSpacing values
1628
- */
1629
- gap: {
1630
- default: "gap-md",
1631
- // Default gap - references semanticSpacing.md (16px)
1632
- compact: "gap-xs"
1633
- // Compact variant gap - references semanticSpacing.xs (4px)
1634
- }
1631
+ radius: {
1632
+ xs: "rounded-sm",
1633
+ // 4px (0.25rem)
1634
+ sm: "rounded-md",
1635
+ // 6px (0.375rem)
1636
+ md: "rounded-md",
1637
+ // 6px (0.375rem) - default
1638
+ lg: "rounded-md",
1639
+ // 6px (0.375rem)
1640
+ xl: "rounded-lg"
1641
+ // 8px (0.5rem)
1635
1642
  },
1636
1643
  /**
1637
- * Image tokens for card media
1638
- * Defines aspect ratio, radius, overlay styles, and placeholder gradients
1644
+ * Font sizes by size variant
1645
+ * Maps to foundation typography fontSize tokens
1639
1646
  */
1640
- image: {
1641
- /**
1642
- * Aspect ratio for card images
1643
- * Standard 16:9 aspect ratio for card images
1644
- */
1645
- aspectRatio: "aspect-video",
1646
- // 16:9 aspect ratio - standard for card images
1647
- /**
1648
- * Border radius for images
1649
- * References borderRadius.xl (0.75rem / 12px) for top corners only
1650
- * Using Tailwind class "rounded-t-xl" which maps to borderRadius.xl
1651
- */
1652
- radius: "rounded-t-xl",
1653
- // References borderRadius.xl (0.75rem / 12px) via Tailwind
1654
- /**
1655
- * Overlay gradient tokens for image overlays
1656
- * Used for hover states and text readability
1657
- */
1658
- overlay: {
1659
- gradient: "bg-gradient-to-t from-black/60 via-transparent to-transparent"
1660
- // Gradient overlay for image hover states
1661
- },
1662
- /**
1663
- * Placeholder gradient tokens for image placeholders
1664
- * Used when no image URL is provided
1665
- */
1666
- placeholder: {
1667
- gradient: "bg-gradient-to-br from-muted to-muted/50"
1668
- // Placeholder gradient background
1669
- }
1647
+ fontSize: {
1648
+ xs: "text-xs",
1649
+ // Maps to fontSize.xs[0]
1650
+ sm: "text-sm",
1651
+ // Maps to fontSize.sm[0]
1652
+ md: "text-base",
1653
+ // Maps to fontSize.base[0] - default
1654
+ lg: "text-base",
1655
+ // Maps to fontSize.base[0]
1656
+ xl: "text-lg"
1657
+ // Maps to fontSize.lg[0]
1670
1658
  },
1671
1659
  /**
1672
- * Text tokens for card text elements
1673
- * Defines hover states and line clamping for titles and descriptions
1674
- */
1675
- text: {
1676
- /**
1677
- * Hover state tokens for text elements
1678
- * Used for interactive text elements like titles
1679
- */
1680
- hover: {
1681
- primary: "group-hover:text-primary"
1682
- // Hover state for primary text color
1683
- },
1684
- /**
1685
- * Line clamp tokens for text truncation
1686
- * Used for limiting text to specific number of lines
1687
- */
1688
- lineClamp: {
1689
- one: "line-clamp-1",
1690
- // Single line clamp
1691
- two: "line-clamp-2",
1692
- // Two line clamp
1693
- three: "line-clamp-3"
1694
- // Three line clamp
1695
- }
1696
- },
1697
- /**
1698
- * Metadata tokens for card information displays
1699
- * Used for date/time, location, and other metadata patterns
1700
- * Maps to TEXT_TOKENS, ICON_TOKENS, and semanticSpacing
1701
- */
1702
- metadata: {
1703
- /**
1704
- * Text color tokens
1705
- * Maps to semantic text color tokens
1706
- */
1707
- text: {
1708
- primary: "text-foreground",
1709
- // Primary metadata text - maps to semantic text color
1710
- secondary: "text-muted-foreground"
1711
- // Secondary metadata text - maps to semantic muted text color
1712
- },
1713
- /**
1714
- * Icon tokens
1715
- * Maps to ICON_TOKENS for sizes and colors
1716
- */
1717
- icon: {
1718
- default: "text-muted-foreground",
1719
- // Default icon color - maps to ICON_TOKENS.colors.muted
1720
- sizeSm: ICON_TOKENS.sizes.md
1721
- // Small icon size - references ICON_TOKENS.sizes.md (16px)
1722
- },
1723
- /**
1724
- * Spacing tokens for metadata layouts
1725
- * References semanticSpacing (xs = 4px, sm = 8px)
1726
- * Using Tailwind classes which map to semanticSpacing values
1727
- */
1728
- spacing: {
1729
- vertical: "gap-xs",
1730
- // References semanticSpacing.xs (4px) via Tailwind
1731
- horizontal: "gap-sm"
1732
- // References semanticSpacing.sm (8px) via Tailwind
1733
- }
1734
- },
1735
- /**
1736
- * Badge tokens for featured/popular badges
1737
- * References semanticSpacing, borderRadius, and elevationShadows
1738
- */
1739
- badges: {
1740
- /**
1741
- * Badge size tokens (padding)
1742
- * References semanticSpacing for padding values
1743
- * Using Tailwind classes which map to semanticSpacing values
1744
- */
1745
- size: {
1746
- sm: "px-xs py-xs",
1747
- // References semanticSpacing.xs (4px) for both horizontal and vertical via Tailwind
1748
- md: "px-sm py-xs"
1749
- // References semanticSpacing.sm (8px) horizontal, semanticSpacing.xs (4px) vertical via Tailwind
1750
- },
1751
- /**
1752
- * Badge positioning tokens
1753
- * References semanticSpacing for absolute positioning
1754
- * Using Tailwind classes which map to semanticSpacing values
1755
- */
1756
- position: {
1757
- default: "right-md top-md",
1758
- // References semanticSpacing.md (16px) for both right and top via Tailwind
1759
- compact: "right-sm top-sm"
1760
- // References semanticSpacing.sm (8px) for both right and top via Tailwind
1761
- },
1762
- /**
1763
- * Additional vertical positioning tokens for multi-badge scenarios
1764
- * References semanticSpacing for top positioning
1765
- * Using Tailwind classes which map to semanticSpacing values
1766
- */
1767
- positionY: {
1768
- xl: "top-xl",
1769
- // References semanticSpacing.xl (32px) via Tailwind
1770
- "2xl": "top-2xl",
1771
- // References semanticSpacing["2xl"] (48px) via Tailwind
1772
- "3xl": "top-3xl"
1773
- // References semanticSpacing["3xl"] (64px) via Tailwind
1774
- },
1775
- /**
1776
- * Badge surface (background) tokens
1777
- * Maps to semantic color tokens
1778
- */
1779
- surface: {
1780
- default: "bg-primary",
1781
- // Default badge background - maps to semantic primary color
1782
- featured: "bg-gradient-to-r from-accent-500 to-primary-600"
1783
- // Featured badge gradient
1784
- },
1785
- /**
1786
- * Badge text color
1787
- * White for contrast on colored backgrounds
1788
- */
1789
- text: {
1790
- color: "text-white"
1791
- // Badge text color - white for contrast on colored backgrounds
1792
- },
1793
- /**
1794
- * Badge border radius
1795
- * References borderRadius.full (pill shape)
1796
- * Using Tailwind class "rounded-full" which maps to borderRadius.full
1797
- */
1798
- radius: "rounded-full",
1799
- // References borderRadius.full via Tailwind
1800
- /**
1801
- * Badge shadow
1802
- * References elevationShadows.lg
1803
- * Using Tailwind class "shadow-lg" which maps to elevationShadows.lg
1804
- */
1805
- shadow: "shadow-lg"
1806
- // References elevationShadows.lg via Tailwind
1807
- },
1808
- /**
1809
- * Price/Capacity tokens for displaying price and capacity information
1810
- * Maps to semantic text color tokens and semanticSpacing
1811
- */
1812
- priceCapacity: {
1813
- /**
1814
- * Text color tokens
1815
- * Maps to semantic text color tokens
1816
- */
1817
- text: {
1818
- primary: "text-foreground",
1819
- // Primary price/capacity text - maps to semantic text color
1820
- secondary: "text-muted-foreground"
1821
- // Secondary price/capacity text - maps to semantic muted text color
1822
- },
1823
- /**
1824
- * Spacing between price and capacity elements
1825
- * References semanticSpacing.sm (8px)
1826
- * Using Tailwind class "gap-sm" which maps to semanticSpacing.sm
1827
- */
1828
- spacing: "gap-sm"
1829
- // References semanticSpacing.sm (8px) via Tailwind
1830
- },
1831
- /**
1832
- * Motion tokens for hover and interaction states
1833
- * References MOTION_TOKENS for transitions and animations
1834
- */
1835
- motion: {
1836
- /**
1837
- * Hover state tokens
1838
- * References MOTION_TOKENS and elevationShadows
1839
- */
1840
- hover: {
1841
- transition: MOTION_TOKENS.transitionPreset.normal,
1842
- // References MOTION_TOKENS.transitionPreset.normal
1843
- scale: "hover:scale-110",
1844
- // Hover scale transform (110% scale) - domain-specific value
1845
- elevation: "hover:shadow-xl"
1846
- // References elevationShadows.xl via Tailwind
1847
- }
1848
- },
1849
- /**
1850
- * Skeleton tokens for loading states
1851
- * References DATA_TOKENS.skeleton for skeleton patterns and semanticSpacing for dimensions
1852
- */
1853
- skeleton: {
1854
- /**
1855
- * Base skeleton wrapper tokens
1856
- * Default styling for skeleton wrapper components
1857
- */
1858
- base: {
1859
- /**
1860
- * Default border radius for skeleton wrapper
1861
- * References DATA_TOKENS.skeleton.radius.text
1862
- */
1863
- radius: DATA_TOKENS.skeleton.radius.text,
1864
- /**
1865
- * Default animation for skeleton wrapper
1866
- * References DATA_TOKENS.skeleton.animation.pulse
1867
- */
1868
- animation: DATA_TOKENS.skeleton.animation.pulse,
1869
- /**
1870
- * Default background for skeleton wrapper
1871
- * References DATA_TOKENS.skeleton.background.default
1872
- */
1873
- background: DATA_TOKENS.skeleton.background.default
1874
- },
1875
- /**
1876
- * Image skeleton height
1877
- * Domain-specific: card images need 192px (spacing[48] = 12rem)
1878
- * Note: DATA_TOKENS.skeleton.height.card is 128px, but card images need 192px
1879
- * Using Tailwind class "h-48" which maps to spacing[48] (12rem / 192px)
1880
- */
1881
- image: {
1882
- height: "h-48"
1883
- // References spacing[48] (12rem / 192px) via Tailwind
1884
- },
1885
- /**
1886
- * Content gap for skeleton elements
1887
- * References semanticSpacing.md (16px)
1888
- * Using Tailwind class "gap-md" which maps to semanticSpacing.md
1889
- */
1890
- content: {
1891
- gap: "gap-md",
1892
- // References semanticSpacing.md (16px) via Tailwind
1893
- /**
1894
- * Content width tokens for skeleton elements
1895
- * References DATA_TOKENS where available, uses Tailwind fraction classes for domain-specific values
1896
- */
1897
- width: {
1898
- full: DATA_TOKENS.skeleton.width.full,
1899
- // References DATA_TOKENS.skeleton.width.full
1900
- threeQuarters: "w-3/4",
1901
- // Three quarters width (75%) - domain-specific, using Tailwind fraction
1902
- half: "w-1/2"
1903
- // Half width (50%) - domain-specific, using Tailwind fraction
1904
- }
1905
- },
1906
- /**
1907
- * Badge skeleton dimensions
1908
- * Domain-specific values for badge skeleton sizing
1909
- * References spacing values via Tailwind classes
1910
- */
1911
- badge: {
1912
- width: "w-20",
1913
- // References spacing[20] (5rem / 80px) via Tailwind
1914
- height: "h-6"
1915
- // References spacing[6] (1.5rem / 24px) via Tailwind
1916
- }
1917
- },
1918
- /**
1919
- * CTA (Call-to-Action) button tokens for domain card components
1920
- * Provides PromoCard-specific CTA button styling tokens
1921
- * These tokens are semantically owned by domain card components, not by the Button component
1922
- * References foundation tokens (spacing, typography, radius, shadows, motion) for consistency
1923
- */
1924
- cta: {
1925
- /**
1926
- * CTA button styling tokens
1927
- * Used by PromoCard and other domain card components for CTA button elements
1928
- */
1929
- button: {
1930
- /**
1931
- * Button heights by size
1932
- * Maps to Tailwind height utilities: h-8, h-9
1933
- */
1934
- height: {
1935
- sm: "h-8",
1936
- // 32px (2rem) - compact size
1937
- md: "h-9"
1938
- // 36px (2.25rem) - default size
1939
- },
1940
- /**
1941
- * Button padding by size
1942
- * Horizontal and vertical padding values
1943
- * References semanticSpacing tokens
1944
- */
1945
- padding: {
1946
- horizontal: {
1947
- sm: "px-sm",
1948
- // 8px (0.5rem) - maps to semanticSpacing.sm
1949
- md: "px-md"
1950
- // 16px (1rem) - maps to semanticSpacing.md
1951
- },
1952
- vertical: {
1953
- sm: "py-xs"
1954
- // 4px (0.25rem) - maps to semanticSpacing.xs
1955
- }
1956
- },
1957
- /**
1958
- * Border radius for CTA buttons
1959
- * References borderRadius.md (6px / 0.375rem)
1960
- * Using Tailwind class "rounded-md" which maps to borderRadius.md
1961
- */
1962
- radius: "rounded-md",
1963
- // References borderRadius.md via Tailwind
1964
- /**
1965
- * Font sizes by button size
1966
- * Maps to foundation typography fontSize tokens
1967
- */
1968
- fontSize: {
1969
- sm: "text-xs",
1970
- // Maps to fontSize.xs[0]
1971
- md: "text-sm"
1972
- // Maps to fontSize.sm[0]
1973
- },
1974
- /**
1975
- * Shadow tokens for CTA buttons
1976
- * Maps to foundation elevation shadow tokens
1977
- */
1978
- shadow: {
1979
- primary: "shadow"
1980
- // Maps to elevationShadows.xs (primary variant uses shadow)
1981
- },
1982
- /**
1983
- * Color tokens for CTA button variants
1984
- * Uses semantic color tokens that map to CSS variables
1985
- */
1986
- variant: {
1987
- primary: {
1988
- background: "bg-primary",
1989
- // Primary background using CSS var
1990
- text: "text-primary-foreground",
1991
- // Primary text using CSS var
1992
- hover: "hover:bg-primary/90"
1993
- // Primary hover using CSS var
1994
- }
1995
- },
1996
- /**
1997
- * Transition tokens for CTA buttons
1998
- * References MOTION_TOKENS for transitions
1999
- */
2000
- transition: {
2001
- colors: "transition-colors"
2002
- // Color transition using motion tokens
2003
- }
2004
- }
2005
- }
2006
- };
2007
-
2008
- // src/FOUNDATION/tokens/components/input.ts
2009
- var INPUT_TOKENS = {
2010
- /**
2011
- * Input heights by size
2012
- * Supports xs, sm, md, lg, xl sizes
2013
- */
2014
- height: {
2015
- xs: "h-7",
2016
- // 28px (1.75rem)
2017
- sm: "h-8",
2018
- // 32px (2rem)
2019
- md: "h-9",
2020
- // 36px (2.25rem) - default
2021
- lg: "h-10",
2022
- // 40px (2.5rem)
2023
- xl: "h-11"
2024
- // 44px (2.75rem)
2025
- },
2026
- /**
2027
- * Input padding by size
2028
- * Horizontal and vertical padding values
2029
- */
2030
- padding: {
2031
- horizontal: {
2032
- xs: "px-xs",
2033
- // 4px (0.25rem)
2034
- sm: "px-sm",
2035
- // 8px (0.5rem)
2036
- md: "px-sm",
2037
- // 8px (0.5rem) - default
2038
- lg: "px-md",
2039
- // 16px (1rem)
2040
- xl: "px-lg"
2041
- // 24px (1.5rem)
2042
- },
2043
- vertical: {
2044
- xs: "py-xs",
2045
- // 4px (0.25rem)
2046
- sm: "py-xs",
2047
- // 4px (0.25rem)
2048
- md: "py-xs",
2049
- // 4px (0.25rem) - default
2050
- lg: "py-sm",
2051
- // 8px (0.5rem)
2052
- xl: "py-md"
2053
- // 16px (1rem)
2054
- }
2055
- },
2056
- /**
2057
- * Border radius by size
2058
- */
2059
- radius: {
2060
- xs: "rounded-sm",
2061
- // 4px (0.25rem)
2062
- sm: "rounded-md",
2063
- // 6px (0.375rem)
2064
- md: "rounded-md",
2065
- // 6px (0.375rem) - default
2066
- lg: "rounded-md",
2067
- // 6px (0.375rem)
2068
- xl: "rounded-lg"
2069
- // 8px (0.5rem)
2070
- },
2071
- /**
2072
- * Font sizes by size variant
2073
- * Maps to foundation typography fontSize tokens
2074
- */
2075
- fontSize: {
2076
- xs: "text-xs",
2077
- // Maps to fontSize.xs[0]
2078
- sm: "text-sm",
2079
- // Maps to fontSize.sm[0]
2080
- md: "text-base",
2081
- // Maps to fontSize.base[0] - default
2082
- lg: "text-base",
2083
- // Maps to fontSize.base[0]
2084
- xl: "text-lg"
2085
- // Maps to fontSize.lg[0]
2086
- },
2087
- /**
2088
- * Responsive font size (md breakpoint)
1660
+ * Responsive font size (md breakpoint)
2089
1661
  */
2090
1662
  fontSizeResponsive: {
2091
1663
  md: "md:text-sm"
@@ -5502,41 +5074,246 @@ var EMPTY_STATE_TOKENS = {
5502
5074
  center: "text-center"}
5503
5075
  };
5504
5076
 
5505
- // src/FOUNDATION/tokens/motion/v2.ts
5506
- var motionV2Durations = {
5507
- fast: "150ms",
5508
- // Quick interactions
5509
- normal: "250ms",
5510
- // Default transitions
5511
- slow: "350ms",
5512
- // Emphasized animations
5513
- reduced: "0ms"
5514
- // For prefers-reduced-motion
5515
- };
5516
- var motionV2Easings = {
5517
- soft: "cubic-bezier(0.22, 1, 0.36, 1)",
5518
- // Gentle, smooth
5519
- standard: "cubic-bezier(0.4, 0, 0.2, 1)",
5520
- // Material Design standard
5521
- emphasized: "cubic-bezier(0.2, 0, 0, 1)"
5522
- // Strong, decisive
5523
- };
5524
- var motionV2Transitions = {
5525
- fast: `${motionV2Durations.fast} ${motionV2Easings.standard}`,
5526
- normal: `${motionV2Durations.normal} ${motionV2Easings.standard}`,
5527
- slow: `${motionV2Durations.slow} ${motionV2Easings.emphasized}`,
5528
- soft: `${motionV2Durations.normal} ${motionV2Easings.soft}`,
5529
- reduced: `${motionV2Durations.reduced} linear`
5530
- };
5531
- var motionV2Fade = {
5532
- in: {
5533
- from: { opacity: 0 },
5534
- to: { opacity: 1 }
5077
+ // src/FOUNDATION/tokens/components/link.ts
5078
+ var LINK_TOKENS = {
5079
+ /**
5080
+ * Link heights by size
5081
+ * Maps to Tailwind height utilities
5082
+ */
5083
+ height: {
5084
+ xs: "h-7",
5085
+ // 28px (1.75rem)
5086
+ sm: "h-8",
5087
+ // 32px (2rem)
5088
+ md: "h-9",
5089
+ // 36px (2.25rem)
5090
+ lg: "h-10",
5091
+ // 40px (2.5rem)
5092
+ xl: "h-11"
5093
+ // 44px (2.75rem)
5535
5094
  },
5536
- out: {
5537
- from: { opacity: 1 },
5538
- to: { opacity: 0 }
5539
- }
5095
+ /**
5096
+ * Link padding by size
5097
+ * Horizontal and vertical padding values
5098
+ */
5099
+ padding: {
5100
+ horizontal: {
5101
+ xs: "px-xs",
5102
+ // 4px (0.25rem) - maps to semanticSpacing.xs
5103
+ sm: "px-sm",
5104
+ // 8px (0.5rem) - maps to semanticSpacing.sm
5105
+ md: "px-md",
5106
+ // 16px (1rem) - maps to semanticSpacing.md
5107
+ lg: "px-lg",
5108
+ // 24px (1.5rem) - maps to semanticSpacing.lg
5109
+ xl: "px-xl"
5110
+ // 32px (2rem) - maps to semanticSpacing.xl
5111
+ },
5112
+ vertical: {
5113
+ xs: "py-xs",
5114
+ // 4px (0.25rem) - maps to semanticSpacing.xs
5115
+ sm: "py-sm",
5116
+ // 8px (0.5rem) - maps to semanticSpacing.sm
5117
+ md: "py-md"
5118
+ // 16px (1rem) - maps to semanticSpacing.md
5119
+ }
5120
+ },
5121
+ /**
5122
+ * Layout tokens
5123
+ * Base layout utilities for link component
5124
+ */
5125
+ layout: "inline-flex items-center justify-center whitespace-nowrap",
5126
+ // Base layout for link container
5127
+ /**
5128
+ * Font weight token
5129
+ * References foundation typography fontWeight tokens from Typography Authority
5130
+ *
5131
+ * @rule References fontWeight.medium (500) from Typography Authority
5132
+ * @see docs/architecture/TYPOGRAPHY_AUTHORITY_CONTRACT.md
5133
+ */
5134
+ fontWeight: "font-medium",
5135
+ // References fontWeight.medium (500) - Typography Authority compliant
5136
+ /**
5137
+ * Icon wrapper layout
5138
+ * Layout utilities for icon containers
5139
+ */
5140
+ iconWrapper: "inline-flex items-center",
5141
+ // Layout for left/right icon wrappers
5142
+ /**
5143
+ * Font sizes by link size
5144
+ * References foundation typography fontSize tokens from Typography Authority
5145
+ *
5146
+ * @rule All fontSize values reference Typography Authority tokens
5147
+ * @see docs/architecture/TYPOGRAPHY_AUTHORITY_CONTRACT.md
5148
+ */
5149
+ fontSize: {
5150
+ xs: "text-xs",
5151
+ // References fontSize.xs[0] from Typography Authority (~12px)
5152
+ sm: "text-xs",
5153
+ // References fontSize.xs[0] from Typography Authority (~12px)
5154
+ md: "text-sm",
5155
+ // References fontSize.sm[0] from Typography Authority (~14px)
5156
+ lg: "text-sm",
5157
+ // References fontSize.sm[0] from Typography Authority (~14px)
5158
+ xl: "text-base"
5159
+ // References fontSize.base[0] from Typography Authority (~16px)
5160
+ },
5161
+ /**
5162
+ * Border radius for outline and ghost variants
5163
+ * References componentRadius from Radius Authority
5164
+ *
5165
+ * @rule References borderRadius.md (6px / 0.375rem) from Radius Authority
5166
+ * @see docs/architecture/RADIUS_AUTHORITY_CONTRACT.md
5167
+ */
5168
+ radius: "rounded-md",
5169
+ // References borderRadius.md (6px / 0.375rem) - Radius Authority compliant
5170
+ /**
5171
+ * Underline offset for text decoration
5172
+ * Uses spacing token (xs = 4px) which matches underline-offset-4
5173
+ */
5174
+ underlineOffset: "underline-offset-4",
5175
+ // 4px (0.25rem) - matches semanticSpacing.xs
5176
+ /**
5177
+ * Transition tokens
5178
+ * References Motion Authority tokens for consistent motion behavior
5179
+ *
5180
+ * @rule Uses MOTION_TOKENS.transitionPreset.colors from Motion Authority
5181
+ * @rule Motion transitions MUST use canonical motion tokens only
5182
+ * @see docs/architecture/MOTION_AUTHORITY_CONTRACT.md
5183
+ */
5184
+ transition: {
5185
+ colors: MOTION_TOKENS.transitionPreset.colors
5186
+ // "transition-colors duration-normal ease-out" - Motion Authority compliant
5187
+ },
5188
+ /**
5189
+ * Focus state tokens
5190
+ * Focus ring for keyboard navigation
5191
+ *
5192
+ * @rule Focus MUST use focus-visible: prefix (keyboard navigation only)
5193
+ * @rule Focus MUST be blocked when disabled={true}
5194
+ */
5195
+ focus: {
5196
+ ring: "focus-visible:ring-2 focus-visible:ring-ring",
5197
+ // Focus ring using semantic ring color
5198
+ outline: "focus-visible:outline-none",
5199
+ // Remove default outline (replaced by ring)
5200
+ offset: "focus-visible:ring-offset-2"
5201
+ // Ring offset
5202
+ },
5203
+ /**
5204
+ * Disabled state tokens
5205
+ */
5206
+ state: {
5207
+ disabled: {
5208
+ pointerEvents: "disabled:pointer-events-none",
5209
+ // Disable pointer events
5210
+ opacity: "disabled:opacity-50"
5211
+ // Disabled opacity
5212
+ }
5213
+ },
5214
+ /**
5215
+ * Color tokens for link variants
5216
+ * Uses semantic color tokens that map to CSS variables
5217
+ */
5218
+ variant: {
5219
+ primary: {
5220
+ text: "text-primary",
5221
+ // Primary text using CSS var
5222
+ hover: "hover:text-primary/80",
5223
+ // Primary hover text
5224
+ underline: "hover:underline"
5225
+ // Underline on hover
5226
+ },
5227
+ secondary: {
5228
+ text: "text-secondary-foreground",
5229
+ // Secondary text using CSS var
5230
+ hover: "hover:underline"
5231
+ // Underline on hover
5232
+ },
5233
+ accent: {
5234
+ text: "text-accent-foreground",
5235
+ // Accent text using CSS var
5236
+ hover: "hover:text-accent-foreground/80",
5237
+ // Accent hover text
5238
+ underline: "hover:underline"
5239
+ // Underline on hover
5240
+ },
5241
+ outline: {
5242
+ border: "border border-input",
5243
+ // Input border using CSS var
5244
+ background: "bg-background",
5245
+ // Background using CSS var
5246
+ text: "text-foreground",
5247
+ // Foreground text using CSS var
5248
+ hover: {
5249
+ background: "hover:bg-accent",
5250
+ // Hover background
5251
+ text: "hover:text-accent-foreground"
5252
+ // Hover text
5253
+ }
5254
+ },
5255
+ ghost: {
5256
+ text: "text-foreground",
5257
+ // Foreground text using CSS var
5258
+ hover: {
5259
+ background: "hover:bg-accent",
5260
+ // Hover background
5261
+ text: "hover:text-accent-foreground"
5262
+ // Hover text
5263
+ }
5264
+ },
5265
+ link: {
5266
+ text: "text-primary",
5267
+ // Primary text using CSS var
5268
+ hover: "hover:underline"
5269
+ // Underline on hover
5270
+ },
5271
+ destructive: {
5272
+ text: "text-destructive",
5273
+ // Destructive text using CSS var
5274
+ hover: "hover:text-destructive/80",
5275
+ // Destructive hover text
5276
+ underline: "hover:underline"
5277
+ // Underline on hover
5278
+ }
5279
+ }
5280
+ };
5281
+
5282
+ // src/FOUNDATION/tokens/motion/v2.ts
5283
+ var motionV2Durations = {
5284
+ fast: "150ms",
5285
+ // Quick interactions
5286
+ normal: "250ms",
5287
+ // Default transitions
5288
+ slow: "350ms",
5289
+ // Emphasized animations
5290
+ reduced: "0ms"
5291
+ // For prefers-reduced-motion
5292
+ };
5293
+ var motionV2Easings = {
5294
+ soft: "cubic-bezier(0.22, 1, 0.36, 1)",
5295
+ // Gentle, smooth
5296
+ standard: "cubic-bezier(0.4, 0, 0.2, 1)",
5297
+ // Material Design standard
5298
+ emphasized: "cubic-bezier(0.2, 0, 0, 1)"
5299
+ // Strong, decisive
5300
+ };
5301
+ var motionV2Transitions = {
5302
+ fast: `${motionV2Durations.fast} ${motionV2Easings.standard}`,
5303
+ normal: `${motionV2Durations.normal} ${motionV2Easings.standard}`,
5304
+ slow: `${motionV2Durations.slow} ${motionV2Easings.emphasized}`,
5305
+ soft: `${motionV2Durations.normal} ${motionV2Easings.soft}`,
5306
+ reduced: `${motionV2Durations.reduced} linear`
5307
+ };
5308
+ var motionV2Fade = {
5309
+ in: {
5310
+ from: { opacity: 0 },
5311
+ to: { opacity: 1 }
5312
+ },
5313
+ out: {
5314
+ from: { opacity: 1 },
5315
+ to: { opacity: 0 }
5316
+ }
5540
5317
  };
5541
5318
  var motionV2Scale = {
5542
5319
  in: {
@@ -6899,13 +6676,6 @@ function tokenCVA(config) {
6899
6676
  function cn(...inputs) {
6900
6677
  return twMerge(clsx(inputs));
6901
6678
  }
6902
- function formatDate(date) {
6903
- return new Intl.DateTimeFormat("en-US", {
6904
- month: "long",
6905
- day: "numeric",
6906
- year: "numeric"
6907
- }).format(new Date(date));
6908
- }
6909
6679
  var buttonVariants = tokenCVA({
6910
6680
  base: `inline-flex items-center justify-center whitespace-nowrap ${BUTTON_TOKENS.radius} font-medium ${BUTTON_TOKENS.transition.colors} ${BUTTON_TOKENS.state.focus.outline} ${BUTTON_TOKENS.state.focus.ring} ${BUTTON_TOKENS.state.disabled.cursor} ${BUTTON_TOKENS.state.disabled.pointerEvents} [&_svg]:pointer-events-none [&_svg]:shrink-0`,
6911
6681
  variants: {
@@ -6929,7 +6699,7 @@ var buttonVariants = tokenCVA({
6929
6699
  size: "md"
6930
6700
  }
6931
6701
  });
6932
- var Button = React48.forwardRef(
6702
+ var Button = React49.forwardRef(
6933
6703
  ({ className, variant, size, asChild = false, leftIcon, rightIcon, children, ...props }, ref) => {
6934
6704
  const Comp = asChild ? Slot : "button";
6935
6705
  const finalClassName = cn(buttonVariants({ variant, size, className }));
@@ -7035,7 +6805,7 @@ var textVariants = cva("text-foreground", {
7035
6805
  muted: false
7036
6806
  }
7037
6807
  });
7038
- var Text = React48.forwardRef(
6808
+ var Text = React49.forwardRef(
7039
6809
  ({ className, size, weight, muted, variant, ...props }, ref) => {
7040
6810
  const isMuted = muted !== void 0 ? muted : variant === "muted";
7041
6811
  return /* @__PURE__ */ jsx(
@@ -7069,7 +6839,7 @@ var alertVariants = cva(`${ALERT_TOKENS.radius} border ${ALERT_TOKENS.padding}`,
7069
6839
  variant: "default"
7070
6840
  }
7071
6841
  });
7072
- var Alert = React48.forwardRef(
6842
+ var Alert = React49.forwardRef(
7073
6843
  ({ className, variant, ...props }, ref) => {
7074
6844
  return /* @__PURE__ */ jsx(
7075
6845
  "div",
@@ -7083,6 +6853,81 @@ var Alert = React48.forwardRef(
7083
6853
  }
7084
6854
  );
7085
6855
  Alert.displayName = "Alert";
6856
+ var LINK_VARIANTS = [
6857
+ "primary",
6858
+ "secondary",
6859
+ "accent",
6860
+ "outline",
6861
+ "ghost",
6862
+ "link",
6863
+ "destructive"
6864
+ ];
6865
+ var LINK_SIZES = ["xs", "sm", "md", "lg", "xl"];
6866
+ var linkVariants = tokenCVA({
6867
+ base: `${LINK_TOKENS.layout} ${LINK_TOKENS.fontWeight} ${LINK_TOKENS.transition.colors} ${LINK_TOKENS.focus.outline} ${LINK_TOKENS.focus.ring} ${LINK_TOKENS.focus.offset} ${LINK_TOKENS.state.disabled.pointerEvents} ${LINK_TOKENS.state.disabled.opacity}`,
6868
+ variants: {
6869
+ variant: {
6870
+ primary: `${LINK_TOKENS.variant.primary.text} ${LINK_TOKENS.variant.primary.hover} ${LINK_TOKENS.underlineOffset} ${LINK_TOKENS.variant.primary.underline}`,
6871
+ secondary: `${LINK_TOKENS.variant.secondary.text} ${LINK_TOKENS.underlineOffset} ${LINK_TOKENS.variant.secondary.hover}`,
6872
+ accent: `${LINK_TOKENS.variant.accent.text} ${LINK_TOKENS.variant.accent.hover} ${LINK_TOKENS.underlineOffset} ${LINK_TOKENS.variant.accent.underline}`,
6873
+ outline: `${LINK_TOKENS.variant.outline.border} ${LINK_TOKENS.variant.outline.background} ${LINK_TOKENS.variant.outline.text} ${LINK_TOKENS.radius} ${LINK_TOKENS.variant.outline.hover.background} ${LINK_TOKENS.variant.outline.hover.text}`,
6874
+ ghost: `${LINK_TOKENS.variant.ghost.text} ${LINK_TOKENS.variant.ghost.hover.background} ${LINK_TOKENS.variant.ghost.hover.text} ${LINK_TOKENS.radius}`,
6875
+ link: `${LINK_TOKENS.variant.link.text} ${LINK_TOKENS.underlineOffset} ${LINK_TOKENS.variant.link.hover}`,
6876
+ destructive: `${LINK_TOKENS.variant.destructive.text} ${LINK_TOKENS.variant.destructive.hover} ${LINK_TOKENS.underlineOffset} ${LINK_TOKENS.variant.destructive.underline}`
6877
+ },
6878
+ size: {
6879
+ xs: `${LINK_TOKENS.height.xs} ${LINK_TOKENS.fontSize.xs} ${LINK_TOKENS.padding.horizontal.xs} ${LINK_TOKENS.padding.vertical.xs}`,
6880
+ sm: `${LINK_TOKENS.height.sm} ${LINK_TOKENS.fontSize.sm} ${LINK_TOKENS.padding.horizontal.sm} ${LINK_TOKENS.padding.vertical.xs}`,
6881
+ md: `${LINK_TOKENS.height.md} ${LINK_TOKENS.fontSize.md} ${LINK_TOKENS.padding.horizontal.md} ${LINK_TOKENS.padding.vertical.sm}`,
6882
+ lg: `${LINK_TOKENS.height.lg} ${LINK_TOKENS.fontSize.lg} ${LINK_TOKENS.padding.horizontal.lg} ${LINK_TOKENS.padding.vertical.sm}`,
6883
+ xl: `${LINK_TOKENS.height.xl} ${LINK_TOKENS.fontSize.xl} ${LINK_TOKENS.padding.horizontal.xl} ${LINK_TOKENS.padding.vertical.md}`
6884
+ }
6885
+ },
6886
+ defaultVariants: {
6887
+ variant: "link",
6888
+ size: "md"
6889
+ }
6890
+ });
6891
+ var Link = React49.forwardRef(
6892
+ ({ className, variant, size, asChild = false, leftIcon, rightIcon, children, ...props }, ref) => {
6893
+ const Comp = asChild ? Slot : "a";
6894
+ return /* @__PURE__ */ jsxs(Comp, { className: cn(linkVariants({ variant, size, className })), ref, ...props, children: [
6895
+ leftIcon && /* @__PURE__ */ jsx("span", { className: LINK_TOKENS.iconWrapper, children: leftIcon }),
6896
+ children,
6897
+ rightIcon && /* @__PURE__ */ jsx("span", { className: LINK_TOKENS.iconWrapper, children: rightIcon })
6898
+ ] });
6899
+ }
6900
+ );
6901
+ Link.displayName = "Link";
6902
+ var BADGE_VARIANTS = [
6903
+ "primary",
6904
+ "secondary",
6905
+ "accent",
6906
+ "outline",
6907
+ "ghost",
6908
+ "link",
6909
+ "destructive"
6910
+ ];
6911
+ var badgeVariants = tokenCVA({
6912
+ base: `${BADGE_TOKENS.layout} ${BADGE_TOKENS.radius} ${BADGE_TOKENS.border} ${BADGE_TOKENS.padding.horizontal} ${BADGE_TOKENS.padding.vertical} ${BADGE_TOKENS.fontSize} ${BADGE_TOKENS.fontWeight} ${BADGE_TOKENS.transition.colors} ${BADGE_TOKENS.focus.outline} ${BADGE_TOKENS.focus.ring} ${BADGE_TOKENS.focus.offset}`,
6913
+ variants: {
6914
+ variant: {
6915
+ primary: `${BADGE_TOKENS.variant.primary.border} ${BADGE_TOKENS.variant.primary.background} ${BADGE_TOKENS.variant.primary.text} ${BADGE_TOKENS.variant.primary.hover}`,
6916
+ secondary: `${BADGE_TOKENS.variant.secondary.border} ${BADGE_TOKENS.variant.secondary.background} ${BADGE_TOKENS.variant.secondary.text} ${BADGE_TOKENS.variant.secondary.hover}`,
6917
+ accent: `${BADGE_TOKENS.variant.accent.border} ${BADGE_TOKENS.variant.accent.background} ${BADGE_TOKENS.variant.accent.text} ${BADGE_TOKENS.variant.accent.hover}`,
6918
+ outline: `${BADGE_TOKENS.variant.outline.border} ${BADGE_TOKENS.variant.outline.text}`,
6919
+ ghost: `${BADGE_TOKENS.variant.ghost.border} ${BADGE_TOKENS.variant.ghost.background} ${BADGE_TOKENS.variant.ghost.text} ${BADGE_TOKENS.variant.ghost.hover}`,
6920
+ link: `${BADGE_TOKENS.variant.link.border} ${BADGE_TOKENS.variant.link.background} ${BADGE_TOKENS.variant.link.text} ${BADGE_TOKENS.variant.link.hover} ${BADGE_TOKENS.underlineOffset} ${BADGE_TOKENS.variant.link.underline}`,
6921
+ destructive: `${BADGE_TOKENS.variant.destructive.border} ${BADGE_TOKENS.variant.destructive.background} ${BADGE_TOKENS.variant.destructive.text} ${BADGE_TOKENS.variant.destructive.hover}`
6922
+ }
6923
+ },
6924
+ defaultVariants: {
6925
+ variant: "primary"
6926
+ }
6927
+ });
6928
+ function Badge({ className, variant, ...props }) {
6929
+ return /* @__PURE__ */ jsx("div", { className: cn(badgeVariants({ variant }), className), ...props });
6930
+ }
7086
6931
  var levelConfig = {
7087
6932
  1: [
7088
6933
  TEXT_TOKENS.fontSize["5xl"],
@@ -7169,7 +7014,7 @@ var headingVariants = cva("font-display text-foreground", {
7169
7014
  muted: false
7170
7015
  }
7171
7016
  });
7172
- var Heading = React48.forwardRef(
7017
+ var Heading = React49.forwardRef(
7173
7018
  ({ className, level = 1, weight, muted, as, children, ...props }, ref) => {
7174
7019
  const Component = as || `h${level}`;
7175
7020
  return /* @__PURE__ */ jsx(
@@ -7368,7 +7213,7 @@ var SelectRoot = ({ children, ...props }) => {
7368
7213
  return /* @__PURE__ */ jsx(SelectPrimitive.Root, { ...props, children });
7369
7214
  };
7370
7215
  SelectRoot.displayName = SelectPrimitive.Root.displayName;
7371
- var SelectTrigger = React48.forwardRef(
7216
+ var SelectTrigger = React49.forwardRef(
7372
7217
  ({ className, size, variant, width, ...props }, ref) => {
7373
7218
  const baseSize = getBaseValue(size) ?? "md";
7374
7219
  const baseVariant = variant ?? "outline";
@@ -7395,13 +7240,13 @@ var SelectTrigger = React48.forwardRef(
7395
7240
  }
7396
7241
  );
7397
7242
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
7398
- var SelectValue = React48.forwardRef(
7243
+ var SelectValue = React49.forwardRef(
7399
7244
  ({ className, ...props }, ref) => {
7400
7245
  return /* @__PURE__ */ jsx(SelectPrimitive.Value, { ref, className: cn("truncate", className), ...props });
7401
7246
  }
7402
7247
  );
7403
7248
  SelectValue.displayName = SelectPrimitive.Value.displayName;
7404
- var SelectIcon = React48.forwardRef(
7249
+ var SelectIcon = React49.forwardRef(
7405
7250
  ({ className, ...props }, ref) => {
7406
7251
  return /* @__PURE__ */ jsx(SelectPrimitive.Icon, { ref, asChild: true, ...props, children: /* @__PURE__ */ jsx(
7407
7252
  ChevronDown,
@@ -7421,14 +7266,14 @@ var SelectIcon = React48.forwardRef(
7421
7266
  }
7422
7267
  );
7423
7268
  SelectIcon.displayName = SelectPrimitive.Icon.displayName;
7424
- var SelectContent = React48.forwardRef(
7269
+ var SelectContent = React49.forwardRef(
7425
7270
  ({ className, size, sideOffset, alignOffset, position = "popper", ...props }, ref) => {
7426
7271
  const baseSize = getBaseValue(size) ?? "md";
7427
- const sideOffsetPx = React48.useMemo(() => {
7272
+ const sideOffsetPx = React49.useMemo(() => {
7428
7273
  const baseOffset = getBaseValue(sideOffset);
7429
7274
  return baseOffset ? getSpacingPx(baseOffset) : getSpacingPx("xs");
7430
7275
  }, [sideOffset]);
7431
- const alignOffsetPx = React48.useMemo(() => {
7276
+ const alignOffsetPx = React49.useMemo(() => {
7432
7277
  const baseOffset = getBaseValue(alignOffset);
7433
7278
  return baseOffset ? getSpacingPx(baseOffset) : void 0;
7434
7279
  }, [alignOffset]);
@@ -7453,7 +7298,7 @@ var SelectContent = React48.forwardRef(
7453
7298
  }
7454
7299
  );
7455
7300
  SelectContent.displayName = SelectPrimitive.Content.displayName;
7456
- var SelectViewport = React48.forwardRef(
7301
+ var SelectViewport = React49.forwardRef(
7457
7302
  ({ className, ...props }, ref) => {
7458
7303
  return /* @__PURE__ */ jsx(
7459
7304
  SelectPrimitive.Viewport,
@@ -7470,7 +7315,7 @@ var SelectViewport = React48.forwardRef(
7470
7315
  }
7471
7316
  );
7472
7317
  SelectViewport.displayName = SelectPrimitive.Viewport.displayName;
7473
- var SelectItem = React48.forwardRef(
7318
+ var SelectItem = React49.forwardRef(
7474
7319
  ({ className, size, children, ...props }, ref) => {
7475
7320
  const baseSize = getBaseValue(size) ?? "md";
7476
7321
  return /* @__PURE__ */ jsxs(
@@ -7502,19 +7347,19 @@ var SelectItem = React48.forwardRef(
7502
7347
  }
7503
7348
  );
7504
7349
  SelectItem.displayName = SelectPrimitive.Item.displayName;
7505
- var SelectItemText = React48.forwardRef(
7350
+ var SelectItemText = React49.forwardRef(
7506
7351
  ({ className, ...props }, ref) => {
7507
7352
  return /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { ref, className, ...props });
7508
7353
  }
7509
7354
  );
7510
7355
  SelectItemText.displayName = SelectPrimitive.ItemText.displayName;
7511
- var SelectItemIndicator = React48.forwardRef(
7356
+ var SelectItemIndicator = React49.forwardRef(
7512
7357
  ({ className, ...props }, ref) => {
7513
7358
  return /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { ref, className, ...props, children: /* @__PURE__ */ jsx(Check, { className: cn(SELECT_TOKENS.item.indicator.size) }) });
7514
7359
  }
7515
7360
  );
7516
7361
  SelectItemIndicator.displayName = SelectPrimitive.ItemIndicator.displayName;
7517
- var SelectSeparator = React48.forwardRef(
7362
+ var SelectSeparator = React49.forwardRef(
7518
7363
  ({ className, size, ...props }, ref) => {
7519
7364
  const baseSize = getBaseValue(size) ?? "md";
7520
7365
  const marginHorizontal = baseSize === "xs" || baseSize === "sm" || baseSize === "md" ? SELECT_TOKENS.separator.margin.horizontal.md : SELECT_TOKENS.separator.margin.horizontal.lg;
@@ -7536,13 +7381,13 @@ var SelectSeparator = React48.forwardRef(
7536
7381
  }
7537
7382
  );
7538
7383
  SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
7539
- var SelectGroup = React48.forwardRef(
7384
+ var SelectGroup = React49.forwardRef(
7540
7385
  ({ className, ...props }, ref) => {
7541
7386
  return /* @__PURE__ */ jsx(SelectPrimitive.Group, { ref, className, ...props });
7542
7387
  }
7543
7388
  );
7544
7389
  SelectGroup.displayName = SelectPrimitive.Group.displayName;
7545
- var SelectLabel = React48.forwardRef(
7390
+ var SelectLabel = React49.forwardRef(
7546
7391
  ({ className, size, ...props }, ref) => {
7547
7392
  const baseSize = getBaseValue(size) ?? "md";
7548
7393
  const paddingHorizontal = SELECT_TOKENS.label.padding.horizontal[baseSize];
@@ -7614,14 +7459,14 @@ var ModalRoot = ({ children, ...props }) => {
7614
7459
  return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...props, children });
7615
7460
  };
7616
7461
  ModalRoot.displayName = DialogPrimitive.Root.displayName;
7617
- var ModalTrigger = React48.forwardRef(
7462
+ var ModalTrigger = React49.forwardRef(
7618
7463
  ({ className, ...props }, ref) => {
7619
7464
  return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ref, className, ...props });
7620
7465
  }
7621
7466
  );
7622
7467
  ModalTrigger.displayName = DialogPrimitive.Trigger.displayName;
7623
7468
  DialogPrimitive.Portal.displayName;
7624
- var ModalOverlay = React48.forwardRef(
7469
+ var ModalOverlay = React49.forwardRef(
7625
7470
  ({ className, ...props }, ref) => {
7626
7471
  return /* @__PURE__ */ jsx(
7627
7472
  DialogPrimitive.Overlay,
@@ -7634,7 +7479,7 @@ var ModalOverlay = React48.forwardRef(
7634
7479
  }
7635
7480
  );
7636
7481
  ModalOverlay.displayName = DialogPrimitive.Overlay.displayName;
7637
- var ModalContent = React48.forwardRef(
7482
+ var ModalContent = React49.forwardRef(
7638
7483
  ({ className, size = "md", width, height, padding, radius, surface, children, ...props }, ref) => {
7639
7484
  const baseSize = getBaseValue(size) ?? "md";
7640
7485
  const baseWidth = width ? getBaseValue(width) : void 0;
@@ -7672,7 +7517,7 @@ var ModalContent = React48.forwardRef(
7672
7517
  }
7673
7518
  );
7674
7519
  ModalContent.displayName = DialogPrimitive.Content.displayName;
7675
- var ModalHeader = React48.forwardRef(
7520
+ var ModalHeader = React49.forwardRef(
7676
7521
  ({ className, gap, ...props }, ref) => {
7677
7522
  const baseGap = gap ? getBaseValue(gap) : "md";
7678
7523
  const gapClass = getSpacingClass("gap", baseGap) ?? MODAL_TOKENS.header.gap.md;
@@ -7687,7 +7532,7 @@ var ModalHeader = React48.forwardRef(
7687
7532
  }
7688
7533
  );
7689
7534
  ModalHeader.displayName = "ModalHeader";
7690
- var ModalTitle = React48.forwardRef(
7535
+ var ModalTitle = React49.forwardRef(
7691
7536
  ({ className, ...props }, ref) => {
7692
7537
  return /* @__PURE__ */ jsx(
7693
7538
  DialogPrimitive.Title,
@@ -7706,7 +7551,7 @@ var ModalTitle = React48.forwardRef(
7706
7551
  }
7707
7552
  );
7708
7553
  ModalTitle.displayName = DialogPrimitive.Title.displayName;
7709
- var ModalDescription = React48.forwardRef(
7554
+ var ModalDescription = React49.forwardRef(
7710
7555
  ({ className, ...props }, ref) => {
7711
7556
  return /* @__PURE__ */ jsx(
7712
7557
  DialogPrimitive.Description,
@@ -7723,7 +7568,7 @@ var ModalDescription = React48.forwardRef(
7723
7568
  }
7724
7569
  );
7725
7570
  ModalDescription.displayName = DialogPrimitive.Description.displayName;
7726
- var ModalFooter = React48.forwardRef(
7571
+ var ModalFooter = React49.forwardRef(
7727
7572
  ({ className, gap, align = "right", ...props }, ref) => {
7728
7573
  const baseGap = gap ? getBaseValue(gap) : "md";
7729
7574
  const gapClass = getSpacingClass("gap", baseGap) ?? MODAL_TOKENS.footer.gap.md;
@@ -7745,7 +7590,7 @@ var ModalFooter = React48.forwardRef(
7745
7590
  }
7746
7591
  );
7747
7592
  ModalFooter.displayName = "ModalFooter";
7748
- var ModalClose = React48.forwardRef(
7593
+ var ModalClose = React49.forwardRef(
7749
7594
  ({ className, ...props }, ref) => {
7750
7595
  return /* @__PURE__ */ jsxs(
7751
7596
  DialogPrimitive.Close,
@@ -8158,7 +8003,7 @@ var checkboxVariants = cva(
8158
8003
  }
8159
8004
  }
8160
8005
  );
8161
- var Checkbox = React48.forwardRef(
8006
+ var Checkbox = React49.forwardRef(
8162
8007
  ({
8163
8008
  className,
8164
8009
  variant,
@@ -8177,23 +8022,23 @@ var Checkbox = React48.forwardRef(
8177
8022
  onKeyDown,
8178
8023
  ...props
8179
8024
  }, ref) => {
8180
- const [uncontrolledChecked, setUncontrolledChecked] = React48.useState(false);
8025
+ const [uncontrolledChecked, setUncontrolledChecked] = React49.useState(false);
8181
8026
  const isControlled = controlledChecked !== void 0;
8182
8027
  const checked = isControlled ? controlledChecked : uncontrolledChecked;
8183
8028
  const isDisabled = disabled || state === "disabled";
8184
8029
  const isError = state === "error";
8185
- const effectiveState = React48.useMemo(() => {
8030
+ const effectiveState = React49.useMemo(() => {
8186
8031
  if (isDisabled) return "disabled";
8187
8032
  if (isError) return "error";
8188
8033
  if (indeterminate) return "indeterminate";
8189
8034
  if (checked) return "checked";
8190
8035
  return "default";
8191
8036
  }, [isDisabled, isError, indeterminate, checked]);
8192
- const ariaChecked = React48.useMemo(() => {
8037
+ const ariaChecked = React49.useMemo(() => {
8193
8038
  if (indeterminate) return "mixed";
8194
8039
  return checked ? "true" : "false";
8195
8040
  }, [indeterminate, checked]);
8196
- const handleClick = React48.useCallback(
8041
+ const handleClick = React49.useCallback(
8197
8042
  (event) => {
8198
8043
  if (isDisabled) {
8199
8044
  event.preventDefault();
@@ -8207,7 +8052,7 @@ var Checkbox = React48.forwardRef(
8207
8052
  },
8208
8053
  [isDisabled, isControlled, checked, onCheckedChange, onClick]
8209
8054
  );
8210
- const handleKeyDown = React48.useCallback(
8055
+ const handleKeyDown = React49.useCallback(
8211
8056
  (event) => {
8212
8057
  if (isDisabled) return;
8213
8058
  if (event.key === " " || event.key === "Spacebar") {
@@ -8293,7 +8138,7 @@ function shadowToClass(value) {
8293
8138
  if (!value || value === "none") return void 0;
8294
8139
  return `shadow-${value}`;
8295
8140
  }
8296
- var Box = React48.forwardRef(
8141
+ var Box = React49.forwardRef(
8297
8142
  ({
8298
8143
  as: Component = "div",
8299
8144
  p,
@@ -8394,7 +8239,7 @@ function justifyToClass(value) {
8394
8239
  if (value === "evenly") return "justify-evenly";
8395
8240
  return void 0;
8396
8241
  }
8397
- var Stack = React48.forwardRef(
8242
+ var Stack = React49.forwardRef(
8398
8243
  ({ direction = "vertical", spacing: spacing2, gap, align, justify, className, style, ...props }, ref) => {
8399
8244
  const gapValue = spacing2 ?? gap;
8400
8245
  const gapBaseValue = getBaseValue(gapValue);
@@ -8454,7 +8299,7 @@ function getMaxWidthValue(value) {
8454
8299
  }
8455
8300
  return getSpacingCSSVar(stringValue);
8456
8301
  }
8457
- var Container = React48.forwardRef(
8302
+ var Container = React49.forwardRef(
8458
8303
  ({ maxWidth, padding, center = true, className, style, ...props }, ref) => {
8459
8304
  const maxWidthValue = maxWidth ? getBaseValue(maxWidth) : void 0;
8460
8305
  const paddingValue = getBaseValue(
@@ -8569,7 +8414,7 @@ function shrinkToClass(value) {
8569
8414
  if (value === true || value === 1) return "shrink";
8570
8415
  return void 0;
8571
8416
  }
8572
- var Flex = React48.forwardRef(
8417
+ var Flex = React49.forwardRef(
8573
8418
  ({ direction, wrap, grow, shrink, basis, align, justify, gap, className, style, ...props }, ref) => {
8574
8419
  const directionValue = getFlexBaseValue(
8575
8420
  direction
@@ -8672,7 +8517,7 @@ function justifyToClass3(value) {
8672
8517
  if (value === "evenly") return "justify-evenly";
8673
8518
  return void 0;
8674
8519
  }
8675
- var Grid = React48.forwardRef(
8520
+ var Grid = React49.forwardRef(
8676
8521
  ({
8677
8522
  cols,
8678
8523
  sm,
@@ -8774,7 +8619,7 @@ var Grid = React48.forwardRef(
8774
8619
  }
8775
8620
  );
8776
8621
  Grid.displayName = "Grid";
8777
- var Row = React48.forwardRef((props, ref) => {
8622
+ var Row = React49.forwardRef((props, ref) => {
8778
8623
  return /* @__PURE__ */ jsx(Stack, { ref, direction: "horizontal", ...props });
8779
8624
  });
8780
8625
  Row.displayName = "Row";
@@ -8792,7 +8637,7 @@ var surfaceVariants = cva("", {
8792
8637
  variant: "flat"
8793
8638
  }
8794
8639
  });
8795
- var Surface = React48.forwardRef(
8640
+ var Surface = React49.forwardRef(
8796
8641
  ({ variant = "flat", p, radius, className, ...props }, ref) => {
8797
8642
  const variantPadding = SURFACE_TOKENS.variant[variant].padding;
8798
8643
  const defaultPadding = variantPadding.replace("p-", "");
@@ -8813,7 +8658,7 @@ var Surface = React48.forwardRef(
8813
8658
  }
8814
8659
  );
8815
8660
  Surface.displayName = "Surface";
8816
- var Card = React48.forwardRef(
8661
+ var Card = React49.forwardRef(
8817
8662
  ({ size = "md", radius, shadow, p, className, ...props }, ref) => {
8818
8663
  const sizeTokens = CARD_TOKENS.size[size];
8819
8664
  const radiusValue = radius ?? sizeTokens.radius.replace("rounded-", "");
@@ -8835,7 +8680,7 @@ var Card = React48.forwardRef(
8835
8680
  }
8836
8681
  );
8837
8682
  Card.displayName = "Card";
8838
- var CardHeader = React48.forwardRef(
8683
+ var CardHeader = React49.forwardRef(
8839
8684
  ({ size = "md", p, className, ...props }, ref) => {
8840
8685
  const sizeTokens = CARD_TOKENS.size[size];
8841
8686
  const paddingValue = p ?? sizeTokens.padding.replace("p-", "");
@@ -8844,7 +8689,7 @@ var CardHeader = React48.forwardRef(
8844
8689
  }
8845
8690
  );
8846
8691
  CardHeader.displayName = "CardHeader";
8847
- var CardBody = React48.forwardRef(
8692
+ var CardBody = React49.forwardRef(
8848
8693
  ({ size = "md", p, className, ...props }, ref) => {
8849
8694
  const sizeTokens = CARD_TOKENS.size[size];
8850
8695
  const paddingValue = p ?? sizeTokens.padding.replace("p-", "");
@@ -8852,7 +8697,7 @@ var CardBody = React48.forwardRef(
8852
8697
  }
8853
8698
  );
8854
8699
  CardBody.displayName = "CardBody";
8855
- var CardFooter = React48.forwardRef(
8700
+ var CardFooter = React49.forwardRef(
8856
8701
  ({ size = "md", p, className, ...props }, ref) => {
8857
8702
  const sizeTokens = CARD_TOKENS.size[size];
8858
8703
  const paddingValue = p ?? sizeTokens.padding.replace("p-", "");
@@ -8863,7 +8708,7 @@ CardFooter.displayName = "CardFooter";
8863
8708
  Card.Header = CardHeader;
8864
8709
  Card.Body = CardBody;
8865
8710
  Card.Footer = CardFooter;
8866
- var Section = React48.forwardRef(
8711
+ var Section = React49.forwardRef(
8867
8712
  ({ padding = "md", gap, className, as, ...props }, ref) => {
8868
8713
  return /* @__PURE__ */ jsx(
8869
8714
  Stack,
@@ -8882,38 +8727,38 @@ Section.displayName = "Section";
8882
8727
  var labelVariants = cva(
8883
8728
  `${TEXT_TOKENS.fontSize.sm} ${TEXT_TOKENS.fontWeight.medium} ${TEXT_TOKENS.lineHeight.none} peer-disabled:cursor-not-allowed peer-disabled:opacity-70`
8884
8729
  );
8885
- var Label2 = React48.forwardRef(
8730
+ var Label2 = React49.forwardRef(
8886
8731
  ({ className, required, children, ...props }, ref) => /* @__PURE__ */ jsxs(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props, children: [
8887
8732
  children,
8888
8733
  required && /* @__PURE__ */ jsx("span", { className: cn(FORM_TOKENS.label.requiredMark, "ml-xs"), children: "*" })
8889
8734
  ] })
8890
8735
  );
8891
8736
  Label2.displayName = LabelPrimitive.Root.displayName;
8892
- var Field = React48.forwardRef(
8737
+ var Field = React49.forwardRef(
8893
8738
  ({ className, children, ...props }, ref) => {
8894
8739
  return /* @__PURE__ */ jsx(Stack, { ref, gap: "sm", className: cn(className), ...props, children });
8895
8740
  }
8896
8741
  );
8897
8742
  Field.displayName = "Field";
8898
- var FieldLabel = React48.forwardRef(
8743
+ var FieldLabel = React49.forwardRef(
8899
8744
  ({ className, ...props }, ref) => {
8900
8745
  return /* @__PURE__ */ jsx(Label2, { ref, className, ...props });
8901
8746
  }
8902
8747
  );
8903
8748
  FieldLabel.displayName = "FieldLabel";
8904
- var FieldControl = React48.forwardRef(
8749
+ var FieldControl = React49.forwardRef(
8905
8750
  ({ className, children, ...props }, ref) => {
8906
8751
  return /* @__PURE__ */ jsx("div", { ref, className: cn(className), ...props, children });
8907
8752
  }
8908
8753
  );
8909
8754
  FieldControl.displayName = "FieldControl";
8910
- var FieldDescription = React48.forwardRef(
8755
+ var FieldDescription = React49.forwardRef(
8911
8756
  ({ className, ...props }, ref) => {
8912
8757
  return /* @__PURE__ */ jsx(Text, { ref, size: "sm", muted: true, className: cn(className), ...props });
8913
8758
  }
8914
8759
  );
8915
8760
  FieldDescription.displayName = "FieldDescription";
8916
- var FieldError = React48.forwardRef(
8761
+ var FieldError = React49.forwardRef(
8917
8762
  ({ className, ...props }, ref) => {
8918
8763
  return /* @__PURE__ */ jsx(Text, { ref, size: "sm", className: cn("text-destructive", className), ...props });
8919
8764
  }
@@ -8961,7 +8806,7 @@ var inputVariants = cva(
8961
8806
  }
8962
8807
  }
8963
8808
  );
8964
- var Input = React48.forwardRef(
8809
+ var Input = React49.forwardRef(
8965
8810
  ({
8966
8811
  className,
8967
8812
  type = "text",
@@ -8979,8 +8824,8 @@ var Input = React48.forwardRef(
8979
8824
  const isError = state === "error" || ariaInvalid === true;
8980
8825
  const isDisabled = disabled || state === "disabled";
8981
8826
  const ariaInvalidValue = isError ? true : ariaInvalid;
8982
- const inputId = React48.useId();
8983
- const [describedById] = React48.useState(() => {
8827
+ const inputId = React49.useId();
8828
+ const [describedById] = React49.useState(() => {
8984
8829
  if (ariaDescribedBy) return ariaDescribedBy;
8985
8830
  if (state === "error" || state === "success") {
8986
8831
  return `input-${inputId}-message`;
@@ -9083,8 +8928,8 @@ var radioVariants = cva(
9083
8928
  }
9084
8929
  }
9085
8930
  );
9086
- var RadioGroupContext = React48.createContext(void 0);
9087
- var RadioGroup = React48.forwardRef(
8931
+ var RadioGroupContext = React49.createContext(void 0);
8932
+ var RadioGroup = React49.forwardRef(
9088
8933
  ({
9089
8934
  value: controlledValue,
9090
8935
  defaultValue,
@@ -9096,17 +8941,17 @@ var RadioGroup = React48.forwardRef(
9096
8941
  children,
9097
8942
  ...props
9098
8943
  }, ref) => {
9099
- const [internalValue, setInternalValue] = React48.useState(defaultValue || "");
8944
+ const [internalValue, setInternalValue] = React49.useState(defaultValue || "");
9100
8945
  const isControlled = controlledValue !== void 0;
9101
8946
  const value = isControlled ? controlledValue : internalValue;
9102
- const name = React48.useMemo(() => {
8947
+ const name = React49.useMemo(() => {
9103
8948
  if (propName) return propName;
9104
8949
  if (typeof document !== "undefined") {
9105
8950
  return `radio-group-${Math.random().toString(36).substr(2, 9)}`;
9106
8951
  }
9107
8952
  return "radio-group";
9108
8953
  }, [propName]);
9109
- const handleValueChange = React48.useCallback(
8954
+ const handleValueChange = React49.useCallback(
9110
8955
  (newValue) => {
9111
8956
  if (!isControlled) {
9112
8957
  setInternalValue(newValue);
@@ -9115,7 +8960,7 @@ var RadioGroup = React48.forwardRef(
9115
8960
  },
9116
8961
  [isControlled, onValueChange]
9117
8962
  );
9118
- const contextValue = React48.useMemo(
8963
+ const contextValue = React49.useMemo(
9119
8964
  () => ({
9120
8965
  value,
9121
8966
  onValueChange: handleValueChange,
@@ -9142,7 +8987,7 @@ var RadioGroup = React48.forwardRef(
9142
8987
  }
9143
8988
  );
9144
8989
  RadioGroup.displayName = "RadioGroup";
9145
- var Radio = React48.forwardRef(
8990
+ var Radio = React49.forwardRef(
9146
8991
  ({
9147
8992
  className,
9148
8993
  variant,
@@ -9160,11 +9005,11 @@ var Radio = React48.forwardRef(
9160
9005
  onKeyDown,
9161
9006
  ...props
9162
9007
  }, ref) => {
9163
- const radioGroupContext = React48.useContext(RadioGroupContext);
9008
+ const radioGroupContext = React49.useContext(RadioGroupContext);
9164
9009
  const isControlled = controlledChecked !== void 0;
9165
9010
  const isGroupControlled = radioGroupContext !== void 0;
9166
9011
  const checkedInGroup = isGroupControlled && value !== void 0 && radioGroupContext ? radioGroupContext.value === value : false;
9167
- const [uncontrolledChecked, setUncontrolledChecked] = React48.useState(false);
9012
+ const [uncontrolledChecked, setUncontrolledChecked] = React49.useState(false);
9168
9013
  const finalChecked = (() => {
9169
9014
  if (isControlled) return controlledChecked;
9170
9015
  if (isGroupControlled) return checkedInGroup;
@@ -9173,19 +9018,19 @@ var Radio = React48.forwardRef(
9173
9018
  const effectiveSize = size || radioGroupContext?.size || "md";
9174
9019
  const isDisabled = disabled || state === "disabled";
9175
9020
  const isError = state === "error";
9176
- const effectiveState = React48.useMemo(() => {
9021
+ const effectiveState = React49.useMemo(() => {
9177
9022
  if (isDisabled) return "disabled";
9178
9023
  if (isError) return "error";
9179
9024
  if (finalChecked) return "checked";
9180
9025
  return "default";
9181
9026
  }, [isDisabled, isError, finalChecked]);
9182
- const tabIndex = React48.useMemo(() => {
9027
+ const tabIndex = React49.useMemo(() => {
9183
9028
  if (isGroupControlled) {
9184
9029
  return finalChecked ? 0 : -1;
9185
9030
  }
9186
9031
  return 0;
9187
9032
  }, [isGroupControlled, finalChecked]);
9188
- const handleClick = React48.useCallback(
9033
+ const handleClick = React49.useCallback(
9189
9034
  (event) => {
9190
9035
  if (isDisabled) {
9191
9036
  event.preventDefault();
@@ -9209,7 +9054,7 @@ var Radio = React48.forwardRef(
9209
9054
  onClick
9210
9055
  ]
9211
9056
  );
9212
- const handleKeyDown = React48.useCallback(
9057
+ const handleKeyDown = React49.useCallback(
9213
9058
  (event) => {
9214
9059
  if (isDisabled) return;
9215
9060
  if (event.key === " " || event.key === "Spacebar") {
@@ -9364,7 +9209,7 @@ var textareaVariants = cva(
9364
9209
  }
9365
9210
  }
9366
9211
  );
9367
- var Textarea = React48.forwardRef(
9212
+ var Textarea = React49.forwardRef(
9368
9213
  ({
9369
9214
  className,
9370
9215
  variant,
@@ -9383,8 +9228,8 @@ var Textarea = React48.forwardRef(
9383
9228
  const isError = state === "error" || ariaInvalid === true;
9384
9229
  const isDisabled = disabled || state === "disabled";
9385
9230
  const ariaInvalidValue = isError ? true : ariaInvalid;
9386
- const generatedId = React48.useId();
9387
- const [describedById] = React48.useState(() => {
9231
+ const generatedId = React49.useId();
9232
+ const [describedById] = React49.useState(() => {
9388
9233
  if (ariaDescribedBy) return ariaDescribedBy;
9389
9234
  if (state === "error" || state === "success") {
9390
9235
  return `textarea-${generatedId}-message`;
@@ -9448,16 +9293,6 @@ var Textarea = React48.forwardRef(
9448
9293
  }
9449
9294
  );
9450
9295
  Textarea.displayName = "Textarea";
9451
- var Progress = ({ value, max = 100, className }) => {
9452
- const percentage = Math.min(100, Math.max(0, value / max * 100));
9453
- return /* @__PURE__ */ jsx("div", { className: cn("h-2 w-full rounded-full bg-secondary", className), children: /* @__PURE__ */ jsx(
9454
- "div",
9455
- {
9456
- className: "h-2 rounded-full bg-primary transition-[width] duration-normal",
9457
- style: { width: `${percentage}%` }
9458
- }
9459
- ) });
9460
- };
9461
9296
  var skeletonVariants = cva(
9462
9297
  `${DATA_TOKENS.skeleton.background.default} ${DATA_TOKENS.skeleton.animation.pulse}`,
9463
9298
  {
@@ -9475,7 +9310,7 @@ var skeletonVariants = cva(
9475
9310
  }
9476
9311
  }
9477
9312
  );
9478
- var Skeleton = React48.forwardRef(
9313
+ var Skeleton = React49.forwardRef(
9479
9314
  ({ className, variant, "aria-hidden": ariaHidden = true, ...props }, ref) => {
9480
9315
  return /* @__PURE__ */ jsx(
9481
9316
  "div",
@@ -9489,10 +9324,10 @@ var Skeleton = React48.forwardRef(
9489
9324
  }
9490
9325
  );
9491
9326
  Skeleton.displayName = "Skeleton";
9492
- var Portal3 = React48.forwardRef(
9327
+ var Portal3 = React49.forwardRef(
9493
9328
  ({ children, container, className, style }, ref) => {
9494
- const [mounted, setMounted] = React48.useState(false);
9495
- React48.useEffect(() => {
9329
+ const [mounted, setMounted] = React49.useState(false);
9330
+ React49.useEffect(() => {
9496
9331
  setMounted(true);
9497
9332
  }, []);
9498
9333
  if (!mounted || typeof window === "undefined") {
@@ -9521,7 +9356,7 @@ var backdropVariants = cva("fixed inset-0 z-40 transition-opacity", {
9521
9356
  variant: "default"
9522
9357
  }
9523
9358
  });
9524
- var Backdrop = React48.forwardRef(
9359
+ var Backdrop = React49.forwardRef(
9525
9360
  ({ variant = "default", isVisible = true, onClick, className, ...props }, ref) => {
9526
9361
  return /* @__PURE__ */ jsx(
9527
9362
  "div",
@@ -9541,14 +9376,14 @@ var Backdrop = React48.forwardRef(
9541
9376
  );
9542
9377
  Backdrop.displayName = "Backdrop";
9543
9378
  var DialogRoot = ({ titleId, descriptionId, children, ...props }) => {
9544
- const titleIdRef = React48.useId();
9545
- const descriptionIdRef = React48.useId();
9379
+ const titleIdRef = React49.useId();
9380
+ const descriptionIdRef = React49.useId();
9546
9381
  const finalTitleId = titleId || titleIdRef;
9547
9382
  const finalDescriptionId = descriptionId || descriptionIdRef;
9548
9383
  return /* @__PURE__ */ jsx(Modal.Root, { ...props, children: /* @__PURE__ */ jsxs(Modal.Content, { children: [
9549
- React48.Children.map(children, (child) => {
9550
- if (React48.isValidElement(child)) {
9551
- return React48.cloneElement(child, {
9384
+ React49.Children.map(children, (child) => {
9385
+ if (React49.isValidElement(child)) {
9386
+ return React49.cloneElement(child, {
9552
9387
  titleId: finalTitleId,
9553
9388
  descriptionId: finalDescriptionId
9554
9389
  });
@@ -9559,7 +9394,7 @@ var DialogRoot = ({ titleId, descriptionId, children, ...props }) => {
9559
9394
  ] }) });
9560
9395
  };
9561
9396
  DialogRoot.displayName = "DialogRoot";
9562
- var DialogHeader = React48.forwardRef(
9397
+ var DialogHeader = React49.forwardRef(
9563
9398
  ({ className, ...props }, ref) => {
9564
9399
  return /* @__PURE__ */ jsx(
9565
9400
  "div",
@@ -9577,7 +9412,7 @@ var DialogHeader = React48.forwardRef(
9577
9412
  }
9578
9413
  );
9579
9414
  DialogHeader.displayName = "DialogHeader";
9580
- var DialogTitle = React48.forwardRef(
9415
+ var DialogTitle = React49.forwardRef(
9581
9416
  ({ titleId, className, children, ...props }, ref) => {
9582
9417
  return /* @__PURE__ */ jsx(
9583
9418
  Heading,
@@ -9595,7 +9430,7 @@ var DialogTitle = React48.forwardRef(
9595
9430
  }
9596
9431
  );
9597
9432
  DialogTitle.displayName = "DialogTitle";
9598
- var DialogDescription = React48.forwardRef(
9433
+ var DialogDescription = React49.forwardRef(
9599
9434
  ({ descriptionId, className, children, ...props }, ref) => {
9600
9435
  return /* @__PURE__ */ jsx(
9601
9436
  "p",
@@ -9610,7 +9445,7 @@ var DialogDescription = React48.forwardRef(
9610
9445
  }
9611
9446
  );
9612
9447
  DialogDescription.displayName = "DialogDescription";
9613
- var DialogBody = React48.forwardRef(
9448
+ var DialogBody = React49.forwardRef(
9614
9449
  ({ className, ...props }, ref) => {
9615
9450
  return /* @__PURE__ */ jsx(
9616
9451
  "div",
@@ -9623,7 +9458,7 @@ var DialogBody = React48.forwardRef(
9623
9458
  }
9624
9459
  );
9625
9460
  DialogBody.displayName = "DialogBody";
9626
- var DialogFooter = React48.forwardRef(
9461
+ var DialogFooter = React49.forwardRef(
9627
9462
  ({ className, ...props }, ref) => {
9628
9463
  return /* @__PURE__ */ jsx(
9629
9464
  Row,
@@ -9663,7 +9498,7 @@ var toastVariants = cva(
9663
9498
  }
9664
9499
  }
9665
9500
  );
9666
- var ToastRoot = React48.forwardRef(
9501
+ var ToastRoot = React49.forwardRef(
9667
9502
  ({ toast, variant, className, ...props }, ref) => {
9668
9503
  const toastVariant = variant || toast.variant || "default";
9669
9504
  const durationMs = toast.duration ? getDelayMs(toast.duration, 5e3) : 5e3;
@@ -9731,7 +9566,7 @@ var ToastRoot = React48.forwardRef(
9731
9566
  }
9732
9567
  );
9733
9568
  ToastRoot.displayName = ToastPrimitives.Root.displayName;
9734
- var ToastTitle = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9569
+ var ToastTitle = React49.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9735
9570
  ToastPrimitives.Title,
9736
9571
  {
9737
9572
  ref,
@@ -9740,7 +9575,7 @@ var ToastTitle = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE
9740
9575
  }
9741
9576
  ));
9742
9577
  ToastTitle.displayName = ToastPrimitives.Title.displayName;
9743
- var ToastDescription = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9578
+ var ToastDescription = React49.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9744
9579
  ToastPrimitives.Description,
9745
9580
  {
9746
9581
  ref,
@@ -9749,7 +9584,7 @@ var ToastDescription = React48.forwardRef(({ className, ...props }, ref) => /* @
9749
9584
  }
9750
9585
  ));
9751
9586
  ToastDescription.displayName = ToastPrimitives.Description.displayName;
9752
- var ToastAction = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9587
+ var ToastAction = React49.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9753
9588
  ToastPrimitives.Action,
9754
9589
  {
9755
9590
  ref,
@@ -9764,7 +9599,7 @@ var ToastAction = React48.forwardRef(({ className, ...props }, ref) => /* @__PUR
9764
9599
  }
9765
9600
  ));
9766
9601
  ToastAction.displayName = ToastPrimitives.Action.displayName;
9767
- var ToastClose = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9602
+ var ToastClose = React49.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
9768
9603
  ToastPrimitives.Close,
9769
9604
  {
9770
9605
  ref,
@@ -9797,7 +9632,7 @@ var positionClasses = {
9797
9632
  "bottom-center": `fixed ${TOAST_TOKENS.position.spacing.bottom} inset-x-0 z-[100] flex flex-col-reverse items-center ${TOAST_TOKENS.spacing.gap}`,
9798
9633
  "bottom-right": `fixed ${TOAST_TOKENS.position.spacing.bottom} ${TOAST_TOKENS.position.spacing.right} z-[100] flex flex-col-reverse ${TOAST_TOKENS.spacing.gap}`
9799
9634
  };
9800
- var ToastViewport = React48.forwardRef(
9635
+ var ToastViewport = React49.forwardRef(
9801
9636
  ({ position = "top-right", className, ...props }, ref) => {
9802
9637
  return /* @__PURE__ */ jsx(
9803
9638
  ToastPrimitives.Viewport,
@@ -9814,16 +9649,16 @@ var ToastViewport = React48.forwardRef(
9814
9649
  }
9815
9650
  );
9816
9651
  ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
9817
- var ToastContext = React48.createContext(void 0);
9652
+ var ToastContext = React49.createContext(void 0);
9818
9653
  function ToastProvider({
9819
9654
  children,
9820
9655
  position = "top-right",
9821
9656
  swipeDirection = "right",
9822
9657
  duration = 5e3
9823
9658
  }) {
9824
- const [toasts, setToasts] = React48.useState([]);
9825
- const [openStates, setOpenStates] = React48.useState({});
9826
- const toast = React48.useCallback((options) => {
9659
+ const [toasts, setToasts] = React49.useState([]);
9660
+ const [openStates, setOpenStates] = React49.useState({});
9661
+ const toast = React49.useCallback((options) => {
9827
9662
  const id = Math.random().toString(36).substr(2, 9);
9828
9663
  const newToast = {
9829
9664
  id,
@@ -9834,7 +9669,7 @@ function ToastProvider({
9834
9669
  setOpenStates((prev) => ({ ...prev, [id]: true }));
9835
9670
  return id;
9836
9671
  }, []);
9837
- const dismiss = React48.useCallback((id) => {
9672
+ const dismiss = React49.useCallback((id) => {
9838
9673
  setOpenStates((prev) => ({ ...prev, [id]: false }));
9839
9674
  setTimeout(() => {
9840
9675
  setToasts((prev) => prev.filter((t) => t.id !== id));
@@ -9845,7 +9680,7 @@ function ToastProvider({
9845
9680
  });
9846
9681
  }, 300);
9847
9682
  }, []);
9848
- const dismissAll = React48.useCallback(() => {
9683
+ const dismissAll = React49.useCallback(() => {
9849
9684
  setOpenStates((prev) => {
9850
9685
  const next = { ...prev };
9851
9686
  Object.keys(next).forEach((id) => {
@@ -9858,7 +9693,7 @@ function ToastProvider({
9858
9693
  setOpenStates({});
9859
9694
  }, 300);
9860
9695
  }, []);
9861
- const contextValue = React48.useMemo(
9696
+ const contextValue = React49.useMemo(
9862
9697
  () => ({
9863
9698
  toast,
9864
9699
  dismiss,
@@ -9889,7 +9724,7 @@ function ToastProvider({
9889
9724
  ] }) });
9890
9725
  }
9891
9726
  function useToast() {
9892
- const context = React48.useContext(ToastContext);
9727
+ const context = React49.useContext(ToastContext);
9893
9728
  if (context === void 0) {
9894
9729
  throw new Error("useToast must be used within a ToastProvider");
9895
9730
  }
@@ -9902,7 +9737,7 @@ function notifyListeners() {
9902
9737
  }
9903
9738
  function useGlobalToast() {
9904
9739
  const [toasts, setToasts] = useState(globalToasts);
9905
- React48.useEffect(() => {
9740
+ React49.useEffect(() => {
9906
9741
  const listener = () => {
9907
9742
  setToasts([...globalToasts]);
9908
9743
  };
@@ -9985,8 +9820,8 @@ function useFocusLock({
9985
9820
  returnFocusRef,
9986
9821
  additionalFocusableElements = []
9987
9822
  }) {
9988
- const previousActiveElementRef = React48.useRef(null);
9989
- React48.useEffect(() => {
9823
+ const previousActiveElementRef = React49.useRef(null);
9824
+ React49.useEffect(() => {
9990
9825
  if (!enabled || !containerRef.current) {
9991
9826
  return;
9992
9827
  }
@@ -10233,9 +10068,9 @@ var CONTEXT_MENU_TOKENS = {
10233
10068
  indicator: {
10234
10069
  size: "size-4"}
10235
10070
  };
10236
- var ContextMenuSizeContext = React48.createContext(void 0);
10071
+ var ContextMenuSizeContext = React49.createContext(void 0);
10237
10072
  function useContextMenuSize(providedSize) {
10238
- const contextSize = React48.useContext(ContextMenuSizeContext);
10073
+ const contextSize = React49.useContext(ContextMenuSizeContext);
10239
10074
  const baseSize = providedSize ? getBaseValue(providedSize) : void 0;
10240
10075
  return baseSize ?? contextSize ?? "md";
10241
10076
  }
@@ -10302,11 +10137,11 @@ var ContextMenuRoot = ({ children, ...props }) => {
10302
10137
  return /* @__PURE__ */ jsx(ContextMenuPrimitive.Root, { ...props, children });
10303
10138
  };
10304
10139
  ContextMenuRoot.displayName = ContextMenuPrimitive.Root.displayName;
10305
- var ContextMenuTrigger = React48.forwardRef(({ className, ...props }, ref) => {
10140
+ var ContextMenuTrigger = React49.forwardRef(({ className, ...props }, ref) => {
10306
10141
  return /* @__PURE__ */ jsx(ContextMenuPrimitive.Trigger, { ref, className: cn(className), ...props });
10307
10142
  });
10308
10143
  ContextMenuTrigger.displayName = ContextMenuPrimitive.Trigger.displayName;
10309
- var ContextMenuContent = React48.forwardRef(({ className, size = "md", width, padding, radius, surface, ...props }, ref) => {
10144
+ var ContextMenuContent = React49.forwardRef(({ className, size = "md", width, padding, radius, surface, ...props }, ref) => {
10310
10145
  const baseSize = getBaseValue(size) ?? "md";
10311
10146
  const baseWidth = width ? getBaseValue(width) : void 0;
10312
10147
  const basePadding = padding ? getBaseValue(padding) : void 0;
@@ -10335,7 +10170,7 @@ var ContextMenuContent = React48.forwardRef(({ className, size = "md", width, pa
10335
10170
  ) }) });
10336
10171
  });
10337
10172
  ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
10338
- var ContextMenuItem = React48.forwardRef(({ className, size, tone = "neutral", gap, inset, ...props }, ref) => {
10173
+ var ContextMenuItem = React49.forwardRef(({ className, size, tone = "neutral", gap, inset, ...props }, ref) => {
10339
10174
  const baseSize = useContextMenuSize(size);
10340
10175
  const baseGap = gap ? getBaseValue(gap) : void 0;
10341
10176
  const gapClass = getSpacingClass2("gap", baseGap);
@@ -10357,7 +10192,7 @@ var ContextMenuItem = React48.forwardRef(({ className, size, tone = "neutral", g
10357
10192
  );
10358
10193
  });
10359
10194
  ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
10360
- var ContextMenuCheckboxItem = React48.forwardRef(({ className, size, tone = "neutral", gap, children, ...props }, ref) => {
10195
+ var ContextMenuCheckboxItem = React49.forwardRef(({ className, size, tone = "neutral", gap, children, ...props }, ref) => {
10361
10196
  const baseSize = useContextMenuSize(size);
10362
10197
  const baseGap = gap ? getBaseValue(gap) : void 0;
10363
10198
  const gapClass = getSpacingClass2("gap", baseGap);
@@ -10382,11 +10217,11 @@ var ContextMenuCheckboxItem = React48.forwardRef(({ className, size, tone = "neu
10382
10217
  );
10383
10218
  });
10384
10219
  ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
10385
- var ContextMenuRadioGroup = React48.forwardRef(({ className, ...props }, ref) => {
10220
+ var ContextMenuRadioGroup = React49.forwardRef(({ className, ...props }, ref) => {
10386
10221
  return /* @__PURE__ */ jsx(ContextMenuPrimitive.RadioGroup, { ref, className: cn(className), ...props });
10387
10222
  });
10388
10223
  ContextMenuRadioGroup.displayName = ContextMenuPrimitive.RadioGroup.displayName;
10389
- var ContextMenuRadioItem = React48.forwardRef(({ className, size, tone = "neutral", gap, children, ...props }, ref) => {
10224
+ var ContextMenuRadioItem = React49.forwardRef(({ className, size, tone = "neutral", gap, children, ...props }, ref) => {
10390
10225
  const baseSize = useContextMenuSize(size);
10391
10226
  const baseGap = gap ? getBaseValue(gap) : void 0;
10392
10227
  const gapClass = getSpacingClass2("gap", baseGap);
@@ -10411,7 +10246,7 @@ var ContextMenuRadioItem = React48.forwardRef(({ className, size, tone = "neutra
10411
10246
  );
10412
10247
  });
10413
10248
  ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
10414
- var ContextMenuSeparator = React48.forwardRef(({ className, ...props }, ref) => {
10249
+ var ContextMenuSeparator = React49.forwardRef(({ className, ...props }, ref) => {
10415
10250
  return /* @__PURE__ */ jsx(
10416
10251
  ContextMenuPrimitive.Separator,
10417
10252
  {
@@ -10425,7 +10260,7 @@ var ContextMenuSeparator = React48.forwardRef(({ className, ...props }, ref) =>
10425
10260
  );
10426
10261
  });
10427
10262
  ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
10428
- var ContextMenuLabel = React48.forwardRef(({ className, padding, ...props }, ref) => {
10263
+ var ContextMenuLabel = React49.forwardRef(({ className, padding, ...props }, ref) => {
10429
10264
  const basePadding = padding ? getBaseValue(padding) : void 0;
10430
10265
  const paddingClass = getSpacingClass2("p", basePadding);
10431
10266
  return /* @__PURE__ */ jsx(
@@ -10447,7 +10282,7 @@ var ContextMenuSub = ({ children, ...props }) => {
10447
10282
  return /* @__PURE__ */ jsx(ContextMenuPrimitive.Sub, { ...props, children });
10448
10283
  };
10449
10284
  ContextMenuSub.displayName = ContextMenuPrimitive.Sub.displayName;
10450
- var ContextMenuSubTrigger = React48.forwardRef(({ className, size, tone = "neutral", gap, children, ...props }, ref) => {
10285
+ var ContextMenuSubTrigger = React49.forwardRef(({ className, size, tone = "neutral", gap, children, ...props }, ref) => {
10451
10286
  const baseSize = useContextMenuSize(size);
10452
10287
  const baseGap = gap ? getBaseValue(gap) : void 0;
10453
10288
  const gapClass = getSpacingClass2("gap", baseGap);
@@ -10472,8 +10307,8 @@ var ContextMenuSubTrigger = React48.forwardRef(({ className, size, tone = "neutr
10472
10307
  );
10473
10308
  });
10474
10309
  ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
10475
- var ContextMenuSubContent = React48.forwardRef(({ className, size, width, padding, radius, surface, ...props }, ref) => {
10476
- const contextSize = React48.useContext(ContextMenuSizeContext);
10310
+ var ContextMenuSubContent = React49.forwardRef(({ className, size, width, padding, radius, surface, ...props }, ref) => {
10311
+ const contextSize = React49.useContext(ContextMenuSizeContext);
10477
10312
  const baseSize = size ? getBaseValue(size) : contextSize ?? "md";
10478
10313
  const baseWidth = width ? getBaseValue(width) : void 0;
10479
10314
  const basePadding = padding ? getBaseValue(padding) : void 0;
@@ -10516,18 +10351,18 @@ var ContextMenu = {
10516
10351
  SubTrigger: ContextMenuSubTrigger,
10517
10352
  SubContent: ContextMenuSubContent
10518
10353
  };
10519
- var NotificationContext = React48.createContext(void 0);
10354
+ var NotificationContext = React49.createContext(void 0);
10520
10355
  function NotificationCenterProvider({
10521
10356
  children,
10522
10357
  maxHistory = 100,
10523
10358
  persistent = true
10524
10359
  }) {
10525
- const [notifications, setNotifications] = React48.useState([]);
10526
- const [history, setHistory] = React48.useState([]);
10527
- const remove = React48.useCallback((id) => {
10360
+ const [notifications, setNotifications] = React49.useState([]);
10361
+ const [history, setHistory] = React49.useState([]);
10362
+ const remove = React49.useCallback((id) => {
10528
10363
  setNotifications((prev) => prev.filter((n) => n.id !== id));
10529
10364
  }, []);
10530
- const push = React48.useCallback(
10365
+ const push = React49.useCallback(
10531
10366
  (options) => {
10532
10367
  const id = Math.random().toString(36).substr(2, 9);
10533
10368
  const timestamp = Date.now();
@@ -10572,13 +10407,13 @@ function NotificationCenterProvider({
10572
10407
  },
10573
10408
  [maxHistory, persistent]
10574
10409
  );
10575
- const clearAll = React48.useCallback(() => {
10410
+ const clearAll = React49.useCallback(() => {
10576
10411
  setNotifications([]);
10577
10412
  }, []);
10578
- const clearChannel = React48.useCallback((channel) => {
10413
+ const clearChannel = React49.useCallback((channel) => {
10579
10414
  setNotifications((prev) => prev.filter((n) => n.channel !== channel));
10580
10415
  }, []);
10581
- const groupBy = React48.useCallback(
10416
+ const groupBy = React49.useCallback(
10582
10417
  (fn) => {
10583
10418
  return notifications.reduce(
10584
10419
  (acc, notification) => {
@@ -10594,30 +10429,30 @@ function NotificationCenterProvider({
10594
10429
  },
10595
10430
  [notifications]
10596
10431
  );
10597
- const getHistory = React48.useCallback(() => {
10432
+ const getHistory = React49.useCallback(() => {
10598
10433
  return history;
10599
10434
  }, [history]);
10600
- const getByChannel = React48.useCallback(
10435
+ const getByChannel = React49.useCallback(
10601
10436
  (channel) => {
10602
10437
  return notifications.filter((n) => n.channel === channel);
10603
10438
  },
10604
10439
  [notifications]
10605
10440
  );
10606
- const getAll = React48.useCallback(() => {
10441
+ const getAll = React49.useCallback(() => {
10607
10442
  return notifications;
10608
10443
  }, [notifications]);
10609
- const markAsRead = React48.useCallback((id) => {
10444
+ const markAsRead = React49.useCallback((id) => {
10610
10445
  setNotifications((prev) => prev.map((n) => n.id === id ? { ...n, read: true } : n));
10611
10446
  setHistory((prev) => prev.map((n) => n.id === id ? { ...n, read: true } : n));
10612
10447
  }, []);
10613
- const markAllAsRead = React48.useCallback(() => {
10448
+ const markAllAsRead = React49.useCallback(() => {
10614
10449
  setNotifications((prev) => prev.map((n) => ({ ...n, read: true })));
10615
10450
  setHistory((prev) => prev.map((n) => ({ ...n, read: true })));
10616
10451
  }, []);
10617
- const getUnreadCount = React48.useCallback(() => {
10452
+ const getUnreadCount = React49.useCallback(() => {
10618
10453
  return notifications.filter((n) => !n.read).length;
10619
10454
  }, [notifications]);
10620
- const contextValue = React48.useMemo(
10455
+ const contextValue = React49.useMemo(
10621
10456
  () => ({
10622
10457
  push,
10623
10458
  remove,
@@ -10648,7 +10483,7 @@ function NotificationCenterProvider({
10648
10483
  return /* @__PURE__ */ jsx(NotificationContext.Provider, { value: contextValue, children });
10649
10484
  }
10650
10485
  function useNotificationCenterContext() {
10651
- const context = React48.useContext(NotificationContext);
10486
+ const context = React49.useContext(NotificationContext);
10652
10487
  if (context === void 0) {
10653
10488
  throw new Error(
10654
10489
  "useNotificationCenterContext must be used within a NotificationCenterProvider"
@@ -10656,7 +10491,7 @@ function useNotificationCenterContext() {
10656
10491
  }
10657
10492
  return context;
10658
10493
  }
10659
- var NotificationCenterDismissAll = React48.forwardRef(({ confirm = false, confirmMessage = "Clear all notifications?", className, ...props }, ref) => {
10494
+ var NotificationCenterDismissAll = React49.forwardRef(({ confirm = false, confirmMessage = "Clear all notifications?", className, ...props }, ref) => {
10660
10495
  const { clearAll, getAll } = useNotificationCenterContext();
10661
10496
  const notifications = getAll();
10662
10497
  const handleClick = () => {
@@ -10687,7 +10522,7 @@ var NotificationCenterDismissAll = React48.forwardRef(({ confirm = false, confir
10687
10522
  );
10688
10523
  });
10689
10524
  NotificationCenterDismissAll.displayName = "NotificationCenter.DismissAll";
10690
- var NotificationCenterGroupHeader = React48.forwardRef(
10525
+ var NotificationCenterGroupHeader = React49.forwardRef(
10691
10526
  ({ label, collapsed = false, onToggleCollapse, collapsible = false, className, ...props }, ref) => {
10692
10527
  return /* @__PURE__ */ jsxs(
10693
10528
  "div",
@@ -10750,7 +10585,7 @@ function formatRelativeTime(timestamp) {
10750
10585
  if (days < 7) return `${days}d ago`;
10751
10586
  return new Date(timestamp).toLocaleDateString();
10752
10587
  }
10753
- var NotificationCenterItem = React48.forwardRef(
10588
+ var NotificationCenterItem = React49.forwardRef(
10754
10589
  ({ notification, onDismiss, onClick, expandable: _expandable = false, className, ...props }, ref) => {
10755
10590
  const variant = notification.variant || "default";
10756
10591
  const Icon3 = getNotificationIcon(variant);
@@ -10825,7 +10660,7 @@ var NotificationCenterItem = React48.forwardRef(
10825
10660
  }
10826
10661
  );
10827
10662
  NotificationCenterItem.displayName = "NotificationCenter.Item";
10828
- var NotificationCenterList = React48.forwardRef(({ children, className, "aria-label": ariaLabel, ...props }, ref) => {
10663
+ var NotificationCenterList = React49.forwardRef(({ children, className, "aria-label": ariaLabel, ...props }, ref) => {
10829
10664
  return /* @__PURE__ */ jsx(
10830
10665
  Stack,
10831
10666
  {
@@ -10982,11 +10817,11 @@ function groupByDate(notification) {
10982
10817
  if (days < 30) return "This Month";
10983
10818
  return "Older";
10984
10819
  }
10985
- var NotificationCenterPanel = React48.forwardRef(
10820
+ var NotificationCenterPanel = React49.forwardRef(
10986
10821
  ({ isOpen, onClose, groupBy = groupByDate, width = "md", autoCollapse = true, returnFocusRef }, ref) => {
10987
- const panelRef = React48.useRef(null);
10822
+ const panelRef = React49.useRef(null);
10988
10823
  const { getAll, markAsRead } = useNotificationCenterContext();
10989
- const [collapsedGroups, setCollapsedGroups] = React48.useState(/* @__PURE__ */ new Set());
10824
+ const [collapsedGroups, setCollapsedGroups] = React49.useState(/* @__PURE__ */ new Set());
10990
10825
  const { handlers: swipeHandlers } = useSwipe({
10991
10826
  directions: ["right"],
10992
10827
  threshold: 100,
@@ -10996,7 +10831,7 @@ var NotificationCenterPanel = React48.forwardRef(
10996
10831
  enabled: isOpen
10997
10832
  });
10998
10833
  const notifications = getAll();
10999
- const grouped = React48.useMemo(() => {
10834
+ const grouped = React49.useMemo(() => {
11000
10835
  return groupBy ? notifications.reduce(
11001
10836
  (acc, notification) => {
11002
10837
  const key = groupBy(notification);
@@ -11009,7 +10844,7 @@ var NotificationCenterPanel = React48.forwardRef(
11009
10844
  {}
11010
10845
  ) : { default: notifications };
11011
10846
  }, [notifications, groupBy]);
11012
- React48.useEffect(() => {
10847
+ React49.useEffect(() => {
11013
10848
  if (autoCollapse && isOpen) {
11014
10849
  const groups = Object.keys(grouped);
11015
10850
  const olderGroups = groups.filter((g) => g !== "Today" && g !== "Yesterday");
@@ -11021,7 +10856,7 @@ var NotificationCenterPanel = React48.forwardRef(
11021
10856
  enabled: isOpen,
11022
10857
  returnFocusRef
11023
10858
  });
11024
- React48.useEffect(() => {
10859
+ React49.useEffect(() => {
11025
10860
  if (!isOpen) return;
11026
10861
  function handleKeyDown(event) {
11027
10862
  if (event.key === "Escape") {
@@ -11033,7 +10868,7 @@ var NotificationCenterPanel = React48.forwardRef(
11033
10868
  document.removeEventListener("keydown", handleKeyDown);
11034
10869
  };
11035
10870
  }, [isOpen, onClose]);
11036
- React48.useEffect(() => {
10871
+ React49.useEffect(() => {
11037
10872
  if (isOpen) {
11038
10873
  notifications.forEach((n) => {
11039
10874
  if (!n.read) {
@@ -11042,7 +10877,7 @@ var NotificationCenterPanel = React48.forwardRef(
11042
10877
  });
11043
10878
  }
11044
10879
  }, [isOpen, notifications, markAsRead]);
11045
- React48.useEffect(() => {
10880
+ React49.useEffect(() => {
11046
10881
  if (isOpen && typeof window !== "undefined") {
11047
10882
  document.body.style.overflow = "hidden";
11048
10883
  return () => {
@@ -11157,7 +10992,7 @@ var NotificationCenterPanel = React48.forwardRef(
11157
10992
  }
11158
10993
  );
11159
10994
  NotificationCenterPanel.displayName = "NotificationCenter.Panel";
11160
- var NotificationCenterTrigger = React48.forwardRef(({ onClick, showBadge = true, className, ...props }, ref) => {
10995
+ var NotificationCenterTrigger = React49.forwardRef(({ onClick, showBadge = true, className, ...props }, ref) => {
11161
10996
  const { getUnreadCount } = useNotificationCenterContext();
11162
10997
  const unreadCount = getUnreadCount();
11163
10998
  return /* @__PURE__ */ jsxs(
@@ -11189,7 +11024,7 @@ var NotificationCenterTrigger = React48.forwardRef(({ onClick, showBadge = true,
11189
11024
  NotificationCenterTrigger.displayName = "NotificationCenter.Trigger";
11190
11025
  function useNotificationCenter() {
11191
11026
  const context = useNotificationCenterContext();
11192
- const success = React48.useCallback(
11027
+ const success = React49.useCallback(
11193
11028
  (message, options) => {
11194
11029
  return context.push({
11195
11030
  ...options,
@@ -11200,7 +11035,7 @@ function useNotificationCenter() {
11200
11035
  },
11201
11036
  [context]
11202
11037
  );
11203
- const error = React48.useCallback(
11038
+ const error = React49.useCallback(
11204
11039
  (message, options) => {
11205
11040
  return context.push({
11206
11041
  ...options,
@@ -11211,7 +11046,7 @@ function useNotificationCenter() {
11211
11046
  },
11212
11047
  [context]
11213
11048
  );
11214
- const info = React48.useCallback(
11049
+ const info = React49.useCallback(
11215
11050
  (message, options) => {
11216
11051
  return context.push({
11217
11052
  ...options,
@@ -11222,7 +11057,7 @@ function useNotificationCenter() {
11222
11057
  },
11223
11058
  [context]
11224
11059
  );
11225
- const warning = React48.useCallback(
11060
+ const warning = React49.useCallback(
11226
11061
  (message, options) => {
11227
11062
  return context.push({
11228
11063
  ...options,
@@ -11233,7 +11068,7 @@ function useNotificationCenter() {
11233
11068
  },
11234
11069
  [context]
11235
11070
  );
11236
- const system = React48.useCallback(
11071
+ const system = React49.useCallback(
11237
11072
  (message, options) => {
11238
11073
  return context.push({
11239
11074
  ...options,
@@ -11244,7 +11079,7 @@ function useNotificationCenter() {
11244
11079
  },
11245
11080
  [context]
11246
11081
  );
11247
- const log = React48.useCallback(
11082
+ const log = React49.useCallback(
11248
11083
  (message, options) => {
11249
11084
  return context.push({
11250
11085
  ...options,
@@ -11255,7 +11090,7 @@ function useNotificationCenter() {
11255
11090
  },
11256
11091
  [context]
11257
11092
  );
11258
- return React48.useMemo(
11093
+ return React49.useMemo(
11259
11094
  () => ({
11260
11095
  success,
11261
11096
  error,
@@ -11310,12 +11145,12 @@ var popoverContentVariants = cva(
11310
11145
  }
11311
11146
  }
11312
11147
  );
11313
- var PopoverContent = React48.forwardRef(({ className, variant, size, align = "center", sideOffset, alignOffset, ...props }, ref) => {
11314
- const sideOffsetPx = React48.useMemo(() => {
11148
+ var PopoverContent = React49.forwardRef(({ className, variant, size, align = "center", sideOffset, alignOffset, ...props }, ref) => {
11149
+ const sideOffsetPx = React49.useMemo(() => {
11315
11150
  const baseOffset = getBaseValue(sideOffset);
11316
11151
  return baseOffset ? getSpacingPx(baseOffset) : 4;
11317
11152
  }, [sideOffset]);
11318
- const alignOffsetPx = React48.useMemo(() => {
11153
+ const alignOffsetPx = React49.useMemo(() => {
11319
11154
  const baseOffset = getBaseValue(alignOffset);
11320
11155
  return baseOffset ? getSpacingPx(baseOffset) : void 0;
11321
11156
  }, [alignOffset]);
@@ -11333,9 +11168,9 @@ var PopoverContent = React48.forwardRef(({ className, variant, size, align = "ce
11333
11168
  ) });
11334
11169
  });
11335
11170
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
11336
- var HoverCardContext = React48.createContext(null);
11171
+ var HoverCardContext = React49.createContext(null);
11337
11172
  function useHoverCardContext() {
11338
- const context = React48.useContext(HoverCardContext);
11173
+ const context = React49.useContext(HoverCardContext);
11339
11174
  if (!context) {
11340
11175
  throw new Error("HoverCard components must be used within HoverCardRoot");
11341
11176
  }
@@ -11350,20 +11185,20 @@ function HoverCardRoot({
11350
11185
  modal = false,
11351
11186
  ...props
11352
11187
  }) {
11353
- const [uncontrolledOpen, setUncontrolledOpen] = React48.useState(defaultOpen);
11354
- const openTimeoutRef = React48.useRef(null);
11355
- const closeTimeoutRef = React48.useRef(null);
11356
- const openDelayMs = React48.useMemo(() => {
11188
+ const [uncontrolledOpen, setUncontrolledOpen] = React49.useState(defaultOpen);
11189
+ const openTimeoutRef = React49.useRef(null);
11190
+ const closeTimeoutRef = React49.useRef(null);
11191
+ const openDelayMs = React49.useMemo(() => {
11357
11192
  const baseDelay = getBaseValue(openDelay);
11358
11193
  return baseDelay ? getDurationMs(baseDelay) : 0;
11359
11194
  }, [openDelay]);
11360
- const closeDelayMs = React48.useMemo(() => {
11195
+ const closeDelayMs = React49.useMemo(() => {
11361
11196
  const baseDelay = getBaseValue(closeDelay);
11362
11197
  return baseDelay ? getDurationMs(baseDelay) : 300;
11363
11198
  }, [closeDelay]);
11364
11199
  const isControlled = controlledOpen !== void 0;
11365
11200
  const open = isControlled ? controlledOpen : uncontrolledOpen;
11366
- const handleOpenChange = React48.useCallback(
11201
+ const handleOpenChange = React49.useCallback(
11367
11202
  (newOpen) => {
11368
11203
  if (openTimeoutRef.current) {
11369
11204
  clearTimeout(openTimeoutRef.current);
@@ -11403,7 +11238,7 @@ function HoverCardRoot({
11403
11238
  },
11404
11239
  [openDelayMs, closeDelayMs, isControlled, controlledOnOpenChange]
11405
11240
  );
11406
- React48.useEffect(() => {
11241
+ React49.useEffect(() => {
11407
11242
  return () => {
11408
11243
  if (openTimeoutRef.current) {
11409
11244
  clearTimeout(openTimeoutRef.current);
@@ -11413,7 +11248,7 @@ function HoverCardRoot({
11413
11248
  }
11414
11249
  };
11415
11250
  }, []);
11416
- const contextValue = React48.useMemo(
11251
+ const contextValue = React49.useMemo(
11417
11252
  () => ({
11418
11253
  onOpenChange: handleOpenChange
11419
11254
  }),
@@ -11422,17 +11257,17 @@ function HoverCardRoot({
11422
11257
  return /* @__PURE__ */ jsx(HoverCardContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(Popover, { open, onOpenChange: handleOpenChange, defaultOpen, modal, children: props.children }) });
11423
11258
  }
11424
11259
  HoverCardRoot.displayName = "HoverCardRoot";
11425
- var HoverCardContent = React48.forwardRef(
11260
+ var HoverCardContent = React49.forwardRef(
11426
11261
  ({ onMouseEnter, onMouseLeave, ...props }, ref) => {
11427
11262
  const { onOpenChange } = useHoverCardContext();
11428
- const handleMouseEnter = React48.useCallback(
11263
+ const handleMouseEnter = React49.useCallback(
11429
11264
  (event) => {
11430
11265
  onOpenChange(true);
11431
11266
  onMouseEnter?.(event);
11432
11267
  },
11433
11268
  [onOpenChange, onMouseEnter]
11434
11269
  );
11435
- const handleMouseLeave = React48.useCallback(
11270
+ const handleMouseLeave = React49.useCallback(
11436
11271
  (event) => {
11437
11272
  onOpenChange(false);
11438
11273
  onMouseLeave?.(event);
@@ -11452,31 +11287,31 @@ var HoverCardContent = React48.forwardRef(
11452
11287
  }
11453
11288
  );
11454
11289
  HoverCardContent.displayName = "HoverCardContent";
11455
- var HoverCardTrigger = React48.forwardRef(
11290
+ var HoverCardTrigger = React49.forwardRef(
11456
11291
  ({ onMouseEnter, onMouseLeave, onFocus, onBlur, asChild = false, ...props }, ref) => {
11457
11292
  const { onOpenChange } = useHoverCardContext();
11458
- const handleMouseEnter = React48.useCallback(
11293
+ const handleMouseEnter = React49.useCallback(
11459
11294
  (event) => {
11460
11295
  onOpenChange(true);
11461
11296
  onMouseEnter?.(event);
11462
11297
  },
11463
11298
  [onOpenChange, onMouseEnter]
11464
11299
  );
11465
- const handleMouseLeave = React48.useCallback(
11300
+ const handleMouseLeave = React49.useCallback(
11466
11301
  (event) => {
11467
11302
  onOpenChange(false);
11468
11303
  onMouseLeave?.(event);
11469
11304
  },
11470
11305
  [onOpenChange, onMouseLeave]
11471
11306
  );
11472
- const handleFocus = React48.useCallback(
11307
+ const handleFocus = React49.useCallback(
11473
11308
  (event) => {
11474
11309
  onOpenChange(true);
11475
11310
  onFocus?.(event);
11476
11311
  },
11477
11312
  [onOpenChange, onFocus]
11478
11313
  );
11479
- const handleBlur = React48.useCallback(
11314
+ const handleBlur = React49.useCallback(
11480
11315
  (event) => {
11481
11316
  onOpenChange(false);
11482
11317
  onBlur?.(event);
@@ -11500,7 +11335,7 @@ var HoverCardTrigger = React48.forwardRef(
11500
11335
  }
11501
11336
  );
11502
11337
  HoverCardTrigger.displayName = "HoverCardTrigger";
11503
- var DataListItem = React48.forwardRef(
11338
+ var DataListItem = React49.forwardRef(
11504
11339
  ({ padding = "md", className, children, ...props }, ref) => {
11505
11340
  const paddingValue = getBaseValue(padding);
11506
11341
  const paddingKey = paddingValue && ["sm", "md", "lg"].includes(String(paddingValue)) ? String(paddingValue) : "md";
@@ -11523,7 +11358,7 @@ var DataListItem = React48.forwardRef(
11523
11358
  }
11524
11359
  );
11525
11360
  DataListItem.displayName = "DataListItem";
11526
- var DataListLabel = React48.forwardRef(
11361
+ var DataListLabel = React49.forwardRef(
11527
11362
  ({ className, children, ...props }, ref) => {
11528
11363
  return /* @__PURE__ */ jsx(
11529
11364
  "dt",
@@ -11542,7 +11377,7 @@ var DataListLabel = React48.forwardRef(
11542
11377
  }
11543
11378
  );
11544
11379
  DataListLabel.displayName = "DataListLabel";
11545
- var DataListValue = React48.forwardRef(
11380
+ var DataListValue = React49.forwardRef(
11546
11381
  ({ className, children, ...props }, ref) => {
11547
11382
  return /* @__PURE__ */ jsx(
11548
11383
  "dd",
@@ -11556,7 +11391,7 @@ var DataListValue = React48.forwardRef(
11556
11391
  }
11557
11392
  );
11558
11393
  DataListValue.displayName = "DataListValue";
11559
- var DataListRoot = React48.forwardRef(
11394
+ var DataListRoot = React49.forwardRef(
11560
11395
  ({ labelWidth: _labelWidth = "md", className, children, ...props }, ref) => {
11561
11396
  return /* @__PURE__ */ jsx("dl", { ref, className: cn(DATA_LIST_TOKENS.spacing.gap, className), ...props, children });
11562
11397
  }
@@ -11691,7 +11526,7 @@ var TabsRoot = ({ children, ...props }) => {
11691
11526
  return /* @__PURE__ */ jsx(TabsPrimitive.Root, { ...props, children });
11692
11527
  };
11693
11528
  TabsRoot.displayName = TabsPrimitive.Root.displayName;
11694
- var TabsList = React48.forwardRef(
11529
+ var TabsList = React49.forwardRef(
11695
11530
  ({ className, size, variant, ...props }, ref) => {
11696
11531
  const baseSize = getBaseValue(size) ?? "md";
11697
11532
  const baseVariant = variant ?? "underline";
@@ -11712,7 +11547,7 @@ var TabsList = React48.forwardRef(
11712
11547
  }
11713
11548
  );
11714
11549
  TabsList.displayName = TabsPrimitive.List.displayName;
11715
- var TabsTrigger = React48.forwardRef(
11550
+ var TabsTrigger = React49.forwardRef(
11716
11551
  ({ className, size, variant, tone, leadingIcon, trailingIcon, icon, children, ...props }, ref) => {
11717
11552
  const baseSize = getBaseValue(size) ?? "md";
11718
11553
  const baseVariant = variant ?? "underline";
@@ -11761,7 +11596,7 @@ var TabsTrigger = React48.forwardRef(
11761
11596
  }
11762
11597
  );
11763
11598
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
11764
- var TabsContent = React48.forwardRef(
11599
+ var TabsContent = React49.forwardRef(
11765
11600
  ({ className, size, ...props }, ref) => {
11766
11601
  const baseSize = getBaseValue(size) ?? "md";
11767
11602
  return /* @__PURE__ */ jsx(
@@ -11826,17 +11661,17 @@ var segmentedControlItemVariants = cva(
11826
11661
  }
11827
11662
  }
11828
11663
  );
11829
- var SegmentedControlContext = React48.createContext(
11664
+ var SegmentedControlContext = React49.createContext(
11830
11665
  void 0
11831
11666
  );
11832
11667
  function useSegmentedControlContext() {
11833
- const context = React48.useContext(SegmentedControlContext);
11668
+ const context = React49.useContext(SegmentedControlContext);
11834
11669
  if (!context) {
11835
11670
  throw new Error("SegmentedControl components must be used within SegmentedControl.Root");
11836
11671
  }
11837
11672
  return context;
11838
11673
  }
11839
- var SegmentedControlRoot = React48.forwardRef(
11674
+ var SegmentedControlRoot = React49.forwardRef(
11840
11675
  ({
11841
11676
  value: controlledValue,
11842
11677
  defaultValue,
@@ -11848,17 +11683,17 @@ var SegmentedControlRoot = React48.forwardRef(
11848
11683
  children,
11849
11684
  ...props
11850
11685
  }, ref) => {
11851
- const [internalValue, setInternalValue] = React48.useState(defaultValue || "");
11686
+ const [internalValue, setInternalValue] = React49.useState(defaultValue || "");
11852
11687
  const isControlled = controlledValue !== void 0;
11853
11688
  const value = isControlled ? controlledValue : internalValue;
11854
- const name = React48.useMemo(() => {
11689
+ const name = React49.useMemo(() => {
11855
11690
  if (propName) return propName;
11856
11691
  if (typeof document !== "undefined") {
11857
11692
  return `segmented-control-${Math.random().toString(36).substr(2, 9)}`;
11858
11693
  }
11859
11694
  return "segmented-control";
11860
11695
  }, [propName]);
11861
- const handleValueChange = React48.useCallback(
11696
+ const handleValueChange = React49.useCallback(
11862
11697
  (newValue) => {
11863
11698
  if (!isControlled) {
11864
11699
  setInternalValue(newValue);
@@ -11867,7 +11702,7 @@ var SegmentedControlRoot = React48.forwardRef(
11867
11702
  },
11868
11703
  [isControlled, onValueChange]
11869
11704
  );
11870
- const contextValue = React48.useMemo(
11705
+ const contextValue = React49.useMemo(
11871
11706
  () => ({
11872
11707
  value,
11873
11708
  onValueChange: handleValueChange,
@@ -11891,15 +11726,15 @@ var SegmentedControlRoot = React48.forwardRef(
11891
11726
  }
11892
11727
  );
11893
11728
  SegmentedControlRoot.displayName = "SegmentedControl.Root";
11894
- var SegmentedControlItem = React48.forwardRef(
11729
+ var SegmentedControlItem = React49.forwardRef(
11895
11730
  ({ className, value, disabled, size, children, ...props }, ref) => {
11896
11731
  const context = useSegmentedControlContext();
11897
11732
  const isSelected = context.value === value;
11898
11733
  const effectiveSize = size || context.size || "md";
11899
- const itemRef = React48.useRef(null);
11900
- React48.useImperativeHandle(ref, () => itemRef.current);
11734
+ const itemRef = React49.useRef(null);
11735
+ React49.useImperativeHandle(ref, () => itemRef.current);
11901
11736
  const tabIndex = isSelected ? 0 : -1;
11902
- const handleKeyDown = React48.useCallback(
11737
+ const handleKeyDown = React49.useCallback(
11903
11738
  (event) => {
11904
11739
  if (disabled) return;
11905
11740
  const items = Array.from(
@@ -11983,7 +11818,7 @@ var SegmentedControl = Object.assign(SegmentedControlRoot, {
11983
11818
  Root: SegmentedControlRoot,
11984
11819
  Item: SegmentedControlItem
11985
11820
  });
11986
- var BreadcrumbsRoot = React48.forwardRef(
11821
+ var BreadcrumbsRoot = React49.forwardRef(
11987
11822
  ({ items, separator, ariaLabel = "Breadcrumb", className, children, ...props }, ref) => {
11988
11823
  const lastIndex = items.length - 1;
11989
11824
  const defaultSeparator = /* @__PURE__ */ jsx(
@@ -12044,13 +11879,13 @@ var BreadcrumbsRoot = React48.forwardRef(
12044
11879
  }
12045
11880
  );
12046
11881
  BreadcrumbsRoot.displayName = "Breadcrumbs.Root";
12047
- var BreadcrumbsItem = React48.forwardRef(
11882
+ var BreadcrumbsItem = React49.forwardRef(
12048
11883
  ({ className, children, ...props }, ref) => {
12049
11884
  return /* @__PURE__ */ jsx("li", { ref, className: cn("flex items-center", className), ...props, children });
12050
11885
  }
12051
11886
  );
12052
11887
  BreadcrumbsItem.displayName = "Breadcrumbs.Item";
12053
- var BreadcrumbsSeparator = React48.forwardRef(
11888
+ var BreadcrumbsSeparator = React49.forwardRef(
12054
11889
  ({ className, children, ...props }, ref) => {
12055
11890
  return /* @__PURE__ */ jsx(
12056
11891
  "span",
@@ -12099,7 +11934,7 @@ function getVisiblePages(currentPage, totalPages, delta = 2) {
12099
11934
  }
12100
11935
  return rangeWithDots;
12101
11936
  }
12102
- var PaginationRoot = React48.forwardRef(
11937
+ var PaginationRoot = React49.forwardRef(
12103
11938
  ({
12104
11939
  currentPage,
12105
11940
  totalPages,
@@ -12112,7 +11947,7 @@ var PaginationRoot = React48.forwardRef(
12112
11947
  }, ref) => {
12113
11948
  const safeTotalPages = Math.max(1, totalPages);
12114
11949
  const safeCurrentPage = Math.min(Math.max(1, currentPage), safeTotalPages);
12115
- const handlePageChange = React48.useCallback(
11950
+ const handlePageChange = React49.useCallback(
12116
11951
  (page) => {
12117
11952
  const clamped = Math.min(Math.max(page, 1), safeTotalPages);
12118
11953
  if (clamped !== safeCurrentPage) {
@@ -12121,7 +11956,7 @@ var PaginationRoot = React48.forwardRef(
12121
11956
  },
12122
11957
  [safeCurrentPage, safeTotalPages, onPageChange]
12123
11958
  );
12124
- const visiblePages = React48.useMemo(
11959
+ const visiblePages = React49.useMemo(
12125
11960
  () => getVisiblePages(safeCurrentPage, safeTotalPages, delta),
12126
11961
  [safeCurrentPage, safeTotalPages, delta]
12127
11962
  );
@@ -12140,7 +11975,7 @@ var PaginationRoot = React48.forwardRef(
12140
11975
  onClick: () => handlePageChange(safeCurrentPage - 1)
12141
11976
  }
12142
11977
  ),
12143
- visiblePages.map((page, index) => /* @__PURE__ */ jsx(React48.Fragment, { children: page === "..." ? /* @__PURE__ */ jsx(PaginationEllipsis, {}) : /* @__PURE__ */ jsx(
11978
+ visiblePages.map((page, index) => /* @__PURE__ */ jsx(React49.Fragment, { children: page === "..." ? /* @__PURE__ */ jsx(PaginationEllipsis, {}) : /* @__PURE__ */ jsx(
12144
11979
  PaginationItem,
12145
11980
  {
12146
11981
  page,
@@ -12162,7 +11997,7 @@ var PaginationRoot = React48.forwardRef(
12162
11997
  }
12163
11998
  );
12164
11999
  PaginationRoot.displayName = "Pagination.Root";
12165
- var PaginationItem = React48.forwardRef(
12000
+ var PaginationItem = React49.forwardRef(
12166
12001
  ({ className, page, isCurrent, disabled, onClick, ...props }, ref) => {
12167
12002
  if (page === "...") {
12168
12003
  return null;
@@ -12198,7 +12033,7 @@ var PaginationItem = React48.forwardRef(
12198
12033
  }
12199
12034
  );
12200
12035
  PaginationItem.displayName = "Pagination.Item";
12201
- var PaginationPrev = React48.forwardRef(
12036
+ var PaginationPrev = React49.forwardRef(
12202
12037
  ({ className, disabled, onClick, ...props }, ref) => {
12203
12038
  return /* @__PURE__ */ jsxs(
12204
12039
  "button",
@@ -12232,7 +12067,7 @@ var PaginationPrev = React48.forwardRef(
12232
12067
  }
12233
12068
  );
12234
12069
  PaginationPrev.displayName = "Pagination.Prev";
12235
- var PaginationNext = React48.forwardRef(
12070
+ var PaginationNext = React49.forwardRef(
12236
12071
  ({ className, disabled, onClick, ...props }, ref) => {
12237
12072
  return /* @__PURE__ */ jsxs(
12238
12073
  "button",
@@ -12266,7 +12101,7 @@ var PaginationNext = React48.forwardRef(
12266
12101
  }
12267
12102
  );
12268
12103
  PaginationNext.displayName = "Pagination.Next";
12269
- var PaginationEllipsis = React48.forwardRef(
12104
+ var PaginationEllipsis = React49.forwardRef(
12270
12105
  ({ className, ...props }, ref) => {
12271
12106
  return /* @__PURE__ */ jsx(
12272
12107
  "span",
@@ -12294,7 +12129,7 @@ var Pagination = Object.assign(PaginationRoot, {
12294
12129
  Next: PaginationNext,
12295
12130
  Ellipsis: PaginationEllipsis
12296
12131
  });
12297
- var StepperRoot = React48.forwardRef(
12132
+ var StepperRoot = React49.forwardRef(
12298
12133
  ({
12299
12134
  steps,
12300
12135
  activeStep,
@@ -12340,7 +12175,7 @@ var StepperRoot = React48.forwardRef(
12340
12175
  }
12341
12176
  );
12342
12177
  StepperRoot.displayName = "Stepper.Root";
12343
- var StepperItem = React48.forwardRef(
12178
+ var StepperItem = React49.forwardRef(
12344
12179
  ({
12345
12180
  className,
12346
12181
  step,
@@ -12381,7 +12216,7 @@ var StepperItem = React48.forwardRef(
12381
12216
  }
12382
12217
  );
12383
12218
  StepperItem.displayName = "Stepper.Item";
12384
- var StepperIndicator = React48.forwardRef(
12219
+ var StepperIndicator = React49.forwardRef(
12385
12220
  ({ className, index, isActive, isCompleted, disabled, icon, showNumber = true, ...props }, ref) => {
12386
12221
  const baseClasses = cn(
12387
12222
  NAVIGATION_TOKENS.sizes.sm.height,
@@ -12442,7 +12277,7 @@ var StepperIndicator = React48.forwardRef(
12442
12277
  }
12443
12278
  );
12444
12279
  StepperIndicator.displayName = "Stepper.Indicator";
12445
- var StepperLabel = React48.forwardRef(
12280
+ var StepperLabel = React49.forwardRef(
12446
12281
  ({ className, label, description, isActive, ...props }, ref) => {
12447
12282
  return /* @__PURE__ */ jsxs(
12448
12283
  "div",
@@ -12479,7 +12314,7 @@ var StepperLabel = React48.forwardRef(
12479
12314
  }
12480
12315
  );
12481
12316
  StepperLabel.displayName = "Stepper.Label";
12482
- var StepperContent = React48.forwardRef(
12317
+ var StepperContent = React49.forwardRef(
12483
12318
  ({ className, isActive, children, ...props }, ref) => {
12484
12319
  if (!isActive) {
12485
12320
  return null;
@@ -12503,13 +12338,13 @@ var Stepper = Object.assign(StepperRoot, {
12503
12338
  Label: StepperLabel,
12504
12339
  Content: StepperContent
12505
12340
  });
12506
- var EmptyStateAction = React48.forwardRef(
12341
+ var EmptyStateAction = React49.forwardRef(
12507
12342
  ({ className, children, ...props }, ref) => {
12508
12343
  return /* @__PURE__ */ jsx("div", { ref, className: cn(EMPTY_STATE_TOKENS.spacing.action, className), ...props, children });
12509
12344
  }
12510
12345
  );
12511
12346
  EmptyStateAction.displayName = "EmptyStateAction";
12512
- var EmptyStateDescription = React48.forwardRef(
12347
+ var EmptyStateDescription = React49.forwardRef(
12513
12348
  ({ className, children, ...props }, ref) => {
12514
12349
  return /* @__PURE__ */ jsx(
12515
12350
  "p",
@@ -12529,7 +12364,7 @@ var EmptyStateDescription = React48.forwardRef(
12529
12364
  }
12530
12365
  );
12531
12366
  EmptyStateDescription.displayName = "EmptyStateDescription";
12532
- var EmptyStateIcon = React48.forwardRef(
12367
+ var EmptyStateIcon = React49.forwardRef(
12533
12368
  ({ children, size = "md", className, ...props }, ref) => {
12534
12369
  const iconSizeClass = EMPTY_STATE_TOKENS.icon.size[size];
12535
12370
  return /* @__PURE__ */ jsx(
@@ -12544,7 +12379,7 @@ var EmptyStateIcon = React48.forwardRef(
12544
12379
  }
12545
12380
  );
12546
12381
  EmptyStateIcon.displayName = "EmptyStateIcon";
12547
- var EmptyStateTitle = React48.forwardRef(
12382
+ var EmptyStateTitle = React49.forwardRef(
12548
12383
  ({ className, children, ...props }, ref) => {
12549
12384
  return /* @__PURE__ */ jsx(
12550
12385
  "h3",
@@ -12563,9 +12398,9 @@ var EmptyStateTitle = React48.forwardRef(
12563
12398
  }
12564
12399
  );
12565
12400
  EmptyStateTitle.displayName = "EmptyStateTitle";
12566
- var EmptyState = React48.forwardRef(
12401
+ var EmptyState = React49.forwardRef(
12567
12402
  ({ id, className, children, ...props }, ref) => {
12568
- const generatedId = React48.useId();
12403
+ const generatedId = React49.useId();
12569
12404
  const emptyStateId = id || `empty-state-${generatedId}`;
12570
12405
  return /* @__PURE__ */ jsx(
12571
12406
  Surface,
@@ -12587,13 +12422,13 @@ EmptyState.Icon = EmptyStateIcon;
12587
12422
  EmptyState.Title = EmptyStateTitle;
12588
12423
  EmptyState.Description = EmptyStateDescription;
12589
12424
  EmptyState.Action = EmptyStateAction;
12590
- var TableBody = React48.forwardRef(
12425
+ var TableBody = React49.forwardRef(
12591
12426
  ({ className, ...props }, ref) => {
12592
12427
  return /* @__PURE__ */ jsx("tbody", { ref, className: cn(className), role: "rowgroup", ...props });
12593
12428
  }
12594
12429
  );
12595
12430
  TableBody.displayName = "TableBody";
12596
- var TableCell = React48.forwardRef(
12431
+ var TableCell = React49.forwardRef(
12597
12432
  ({ align = "left", size = "md", className, ...props }, ref) => {
12598
12433
  const paddingClass = TABLE_TOKENS.padding.cell[size];
12599
12434
  const typographyClass = TABLE_TOKENS.typography.cell.fontSize;
@@ -12621,7 +12456,7 @@ var TableCell = React48.forwardRef(
12621
12456
  }
12622
12457
  );
12623
12458
  TableCell.displayName = "TableCell";
12624
- var TableEmpty = React48.forwardRef(
12459
+ var TableEmpty = React49.forwardRef(
12625
12460
  ({ colSpan, message = "No data available", className, ...props }, ref) => {
12626
12461
  return /* @__PURE__ */ jsx("tr", { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsx("td", { colSpan, className: TABLE_TOKENS.empty.padding, children: /* @__PURE__ */ jsxs(EmptyState, { children: [
12627
12462
  /* @__PURE__ */ jsx(EmptyStateIcon, { children: "\u{1F4ED}" }),
@@ -12630,7 +12465,7 @@ var TableEmpty = React48.forwardRef(
12630
12465
  }
12631
12466
  );
12632
12467
  TableEmpty.displayName = "TableEmpty";
12633
- var TableExpandableContent = React48.forwardRef(
12468
+ var TableExpandableContent = React49.forwardRef(
12634
12469
  ({ colSpan, expanded, children, className, ...props }, ref) => {
12635
12470
  return /* @__PURE__ */ jsx(
12636
12471
  "td",
@@ -12659,7 +12494,7 @@ var TableExpandableContent = React48.forwardRef(
12659
12494
  }
12660
12495
  );
12661
12496
  TableExpandableContent.displayName = "TableExpandableContent";
12662
- var TableSortIcon = React48.forwardRef(
12497
+ var TableSortIcon = React49.forwardRef(
12663
12498
  ({ direction, className, ...props }, ref) => {
12664
12499
  return /* @__PURE__ */ jsx(
12665
12500
  "span",
@@ -12696,10 +12531,10 @@ var TableSortIcon = React48.forwardRef(
12696
12531
  }
12697
12532
  );
12698
12533
  TableSortIcon.displayName = "TableSortIcon";
12699
- var TableHead = React48.forwardRef(
12534
+ var TableHead = React49.forwardRef(
12700
12535
  ({ align = "left", sortable = false, columnKey, size = "md", className, children, ...props }, ref) => {
12701
12536
  const { sortState, setSortState } = useTableContext();
12702
- const handleSort = React48.useCallback(() => {
12537
+ const handleSort = React49.useCallback(() => {
12703
12538
  if (!sortable || !columnKey) return;
12704
12539
  const currentDirection = sortState.column === columnKey ? sortState.direction : null;
12705
12540
  let nextDirection = null;
@@ -12758,7 +12593,7 @@ var TableHead = React48.forwardRef(
12758
12593
  }
12759
12594
  );
12760
12595
  TableHead.displayName = "TableHead";
12761
- var TableHeader = React48.forwardRef(
12596
+ var TableHeader = React49.forwardRef(
12762
12597
  ({ sticky = false, className, ...props }, ref) => {
12763
12598
  return /* @__PURE__ */ jsx(
12764
12599
  "thead",
@@ -12772,13 +12607,13 @@ var TableHeader = React48.forwardRef(
12772
12607
  }
12773
12608
  );
12774
12609
  TableHeader.displayName = "TableHeader";
12775
- var TableLoadingState = React48.forwardRef(
12610
+ var TableLoadingState = React49.forwardRef(
12776
12611
  ({ colSpan, rows = 5, className, ...props }, ref) => {
12777
12612
  return /* @__PURE__ */ jsx(Fragment, { children: Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsx("tr", { ref: index === 0 ? ref : void 0, className: cn(className), ...props, children: Array.from({ length: colSpan }).map((_2, cellIndex) => /* @__PURE__ */ jsx("td", { className: TABLE_TOKENS.loading.cellPadding, children: /* @__PURE__ */ jsx(Skeleton, { variant: "text", className: TABLE_TOKENS.loading.skeletonWidth }) }, cellIndex)) }, index)) });
12778
12613
  }
12779
12614
  );
12780
12615
  TableLoadingState.displayName = "TableLoadingState";
12781
- var TableRow = React48.forwardRef(
12616
+ var TableRow = React49.forwardRef(
12782
12617
  ({
12783
12618
  selected = false,
12784
12619
  expandable = false,
@@ -12807,9 +12642,9 @@ var TableRow = React48.forwardRef(
12807
12642
  }
12808
12643
  );
12809
12644
  TableRow.displayName = "TableRow";
12810
- var TableContext = React48.createContext(null);
12645
+ var TableContext = React49.createContext(null);
12811
12646
  function useTableContext() {
12812
- const context = React48.useContext(TableContext);
12647
+ const context = React49.useContext(TableContext);
12813
12648
  if (!context) {
12814
12649
  throw new Error("Table components must be used within Table.Root");
12815
12650
  }
@@ -12830,12 +12665,12 @@ function TableRoot({
12830
12665
  children,
12831
12666
  ...props
12832
12667
  }) {
12833
- const [sortState, setSortState] = React48.useState({
12668
+ const [sortState, setSortState] = React49.useState({
12834
12669
  column: null,
12835
12670
  direction: null
12836
12671
  });
12837
- const [expandedRows, setExpandedRows] = React48.useState(/* @__PURE__ */ new Set());
12838
- const toggleRow = React48.useCallback((key) => {
12672
+ const [expandedRows, setExpandedRows] = React49.useState(/* @__PURE__ */ new Set());
12673
+ const toggleRow = React49.useCallback((key) => {
12839
12674
  setExpandedRows((prev) => {
12840
12675
  const next = new Set(prev);
12841
12676
  if (next.has(key)) {
@@ -12846,7 +12681,7 @@ function TableRoot({
12846
12681
  return next;
12847
12682
  });
12848
12683
  }, []);
12849
- const contextValue = React48.useMemo(
12684
+ const contextValue = React49.useMemo(
12850
12685
  () => ({
12851
12686
  sortState,
12852
12687
  setSortState,
@@ -12910,7 +12745,7 @@ var iconVariants = cva("shrink-0", {
12910
12745
  stroke: "normal"
12911
12746
  }
12912
12747
  });
12913
- var Icon2 = React48.forwardRef(
12748
+ var Icon2 = React49.forwardRef(
12914
12749
  ({ name, size, color, stroke, className, asChild = false, ...props }, ref) => {
12915
12750
  const IconComponent = ICONS_MAP[name] || ICONS_MAP.error;
12916
12751
  if (!IconComponent) {
@@ -12940,1766 +12775,4 @@ var Icon2 = React48.forwardRef(
12940
12775
  );
12941
12776
  Icon2.displayName = "Icon";
12942
12777
 
12943
- // src/COMPOSITION/motion/animation/tas.ts
12944
- function shouldReduceMotion(override) {
12945
- if (override === true) return true;
12946
- if (override === false) return false;
12947
- if (typeof window === "undefined") return false;
12948
- try {
12949
- const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
12950
- return mediaQuery.matches;
12951
- } catch {
12952
- return false;
12953
- }
12954
- }
12955
-
12956
- // src/COMPOSITION/motion/animation/presets.ts
12957
- var fadePresets = {
12958
- /**
12959
- * Fade in animation
12960
- */
12961
- fadeIn: (config) => {
12962
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
12963
- return {
12964
- className: reduceMotion ? "" : "tm-motion-fade-in"
12965
- };
12966
- },
12967
- /**
12968
- * Fade out animation
12969
- */
12970
- fadeOut: (config) => {
12971
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
12972
- return {
12973
- className: reduceMotion ? "" : "tm-motion-fade-out"
12974
- };
12975
- },
12976
- /**
12977
- * Fade in from top
12978
- */
12979
- fadeInUp: (config) => {
12980
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
12981
- return {
12982
- className: reduceMotion ? "" : "tm-motion-fade-slide-up"
12983
- };
12984
- },
12985
- /**
12986
- * Fade in from bottom
12987
- */
12988
- fadeInDown: (config) => {
12989
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
12990
- return {
12991
- className: reduceMotion ? "" : "tm-motion-fade-slide-down"
12992
- };
12993
- },
12994
- /**
12995
- * Fade in from left
12996
- */
12997
- fadeInLeft: (config) => {
12998
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
12999
- return {
13000
- className: reduceMotion ? "" : "tm-motion-fade-slide-left"
13001
- };
13002
- },
13003
- /**
13004
- * Fade in from right
13005
- */
13006
- fadeInRight: (config) => {
13007
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13008
- return {
13009
- className: reduceMotion ? "" : "tm-motion-fade-slide-right"
13010
- };
13011
- }
13012
- };
13013
- var slidePresets = {
13014
- /**
13015
- * Slide in from bottom
13016
- */
13017
- slideInUp: (config) => {
13018
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13019
- return {
13020
- className: reduceMotion ? "" : "tm-motion-slide-up"
13021
- };
13022
- },
13023
- /**
13024
- * Slide in from top
13025
- */
13026
- slideInDown: (config) => {
13027
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13028
- return {
13029
- className: reduceMotion ? "" : "tm-motion-slide-down"
13030
- };
13031
- },
13032
- /**
13033
- * Slide in from left
13034
- */
13035
- slideInLeft: (config) => {
13036
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13037
- return {
13038
- className: reduceMotion ? "" : "tm-motion-slide-left"
13039
- };
13040
- },
13041
- /**
13042
- * Slide in from right
13043
- */
13044
- slideInRight: (config) => {
13045
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13046
- return {
13047
- className: reduceMotion ? "" : "tm-motion-slide-right"
13048
- };
13049
- },
13050
- /**
13051
- * Slide out to top
13052
- */
13053
- slideOutUp: (config) => {
13054
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13055
- return {
13056
- className: reduceMotion ? "" : "tm-motion-fade-slide-up-out"
13057
- };
13058
- },
13059
- /**
13060
- * Slide out to bottom
13061
- */
13062
- slideOutDown: (config) => {
13063
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13064
- return {
13065
- className: reduceMotion ? "" : "tm-motion-fade-slide-down-out"
13066
- };
13067
- },
13068
- /**
13069
- * Slide out to left
13070
- */
13071
- slideOutLeft: (config) => {
13072
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13073
- return {
13074
- className: reduceMotion ? "" : "tm-motion-fade-slide-left-out"
13075
- };
13076
- },
13077
- /**
13078
- * Slide out to right
13079
- */
13080
- slideOutRight: (config) => {
13081
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13082
- return {
13083
- className: reduceMotion ? "" : "tm-motion-fade-slide-right-out"
13084
- };
13085
- }
13086
- };
13087
- var scalePresets = {
13088
- /**
13089
- * Scale in animation
13090
- */
13091
- scaleIn: (config) => {
13092
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13093
- return {
13094
- className: reduceMotion ? "" : "tm-motion-scale-in"
13095
- };
13096
- },
13097
- /**
13098
- * Scale out animation
13099
- */
13100
- scaleOut: (config) => {
13101
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13102
- return {
13103
- className: reduceMotion ? "" : "tm-motion-scale-out"
13104
- };
13105
- },
13106
- /**
13107
- * Scale up on hover
13108
- */
13109
- scaleUp: (config) => {
13110
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13111
- return {
13112
- className: reduceMotion ? "" : "tm-motion-hover-scale"
13113
- };
13114
- },
13115
- /**
13116
- * Scale down on tap
13117
- */
13118
- scaleDown: (config) => {
13119
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13120
- return {
13121
- className: reduceMotion ? "" : "tm-motion-tap-scale"
13122
- };
13123
- }
13124
- };
13125
- var hoverPresets = {
13126
- /**
13127
- * Lift up on hover (combines scale and y translation)
13128
- */
13129
- hoverLift: (config) => {
13130
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13131
- return {
13132
- className: reduceMotion ? "" : "tm-motion-hover-lift"
13133
- };
13134
- },
13135
- /**
13136
- * Scale up on hover
13137
- */
13138
- hoverScale: (config) => {
13139
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13140
- return {
13141
- className: reduceMotion ? "" : "tm-motion-hover-scale"
13142
- };
13143
- },
13144
- /**
13145
- * Scale down on tap
13146
- */
13147
- tapScale: (config) => {
13148
- const reduceMotion = shouldReduceMotion(config?.reducedMotion);
13149
- return {
13150
- className: reduceMotion ? "" : "tm-motion-tap-scale"
13151
- };
13152
- }
13153
- };
13154
-
13155
- // src/COMPOSITION/motion/animation/utils.ts
13156
- function resolveAnimationPreset(preset) {
13157
- if (!preset) return void 0;
13158
- if (typeof preset === "string") ; else {
13159
- const baseValue = getBaseValue(preset);
13160
- if (baseValue && typeof baseValue === "string") {
13161
- return resolveAnimationPreset(baseValue);
13162
- }
13163
- return void 0;
13164
- }
13165
- switch (preset) {
13166
- case "fadeIn":
13167
- return fadePresets.fadeIn();
13168
- case "fadeInUp":
13169
- return fadePresets.fadeInUp();
13170
- case "fadeInDown":
13171
- return fadePresets.fadeInDown();
13172
- case "fadeInLeft":
13173
- return fadePresets.fadeInLeft();
13174
- case "fadeInRight":
13175
- return fadePresets.fadeInRight();
13176
- case "slideInUp":
13177
- return slidePresets.slideInUp();
13178
- case "slideInDown":
13179
- return slidePresets.slideInDown();
13180
- case "slideInLeft":
13181
- return slidePresets.slideInLeft();
13182
- case "slideInRight":
13183
- return slidePresets.slideInRight();
13184
- case "scaleIn":
13185
- return scalePresets.scaleIn();
13186
- default:
13187
- return void 0;
13188
- }
13189
- }
13190
- function resolveHoverAnimationPreset(preset) {
13191
- if (!preset) return void 0;
13192
- if (typeof preset === "object") {
13193
- return preset;
13194
- }
13195
- switch (preset) {
13196
- case "hoverLift":
13197
- return hoverPresets.hoverLift();
13198
- case "hoverScale":
13199
- return hoverPresets.hoverScale();
13200
- case "tapScale":
13201
- return hoverPresets.tapScale();
13202
- default:
13203
- return void 0;
13204
- }
13205
- }
13206
- function resolveComponentAnimations(config) {
13207
- if (!config) return {};
13208
- const animation = resolveAnimationPreset(config.animation);
13209
- const hoverAnimation = resolveHoverAnimationPreset(config.hoverAnimation);
13210
- const customProps = config.animationProps || {};
13211
- return {
13212
- ...animation,
13213
- ...hoverAnimation,
13214
- ...customProps
13215
- };
13216
- }
13217
- var cardBaseVariants = cva(
13218
- // Base classes - surface, border, radius, shadow, motion
13219
- `${DOMAIN_TOKENS.surface.bg.default} ${DOMAIN_TOKENS.surface.border.default} ${DOMAIN_TOKENS.surface.radius.default} ${DOMAIN_TOKENS.surface.shadow.default} ${DOMAIN_TOKENS.surface.bg.hover} ${DOMAIN_TOKENS.surface.border.hover} ${DOMAIN_TOKENS.surface.elevation.hover} ${DOMAIN_TOKENS.motion.hover.transition} overflow-hidden`,
13220
- {
13221
- variants: {
13222
- size: {
13223
- default: `${DOMAIN_TOKENS.layout.padding.default} ${DOMAIN_TOKENS.layout.gap.default}`,
13224
- compact: `${DOMAIN_TOKENS.layout.padding.compact} ${DOMAIN_TOKENS.layout.gap.compact}`
13225
- },
13226
- variant: {
13227
- default: "",
13228
- featured: `${DOMAIN_TOKENS.badges.surface.featured}`
13229
- }
13230
- },
13231
- defaultVariants: {
13232
- size: "default",
13233
- variant: "default"
13234
- }
13235
- }
13236
- );
13237
- var cardBaseImageVariants = cva(
13238
- // Base classes - aspect ratio, radius, overflow
13239
- `${DOMAIN_TOKENS.image.aspectRatio} ${DOMAIN_TOKENS.image.radius} overflow-hidden`,
13240
- {
13241
- variants: {
13242
- size: {
13243
- default: "",
13244
- compact: ""
13245
- }
13246
- },
13247
- defaultVariants: {
13248
- size: "default"
13249
- }
13250
- }
13251
- );
13252
- var cardBaseContentVariants = cva(
13253
- // Base classes - flex column layout
13254
- "flex flex-col",
13255
- {
13256
- variants: {
13257
- size: {
13258
- default: "",
13259
- compact: ""
13260
- }
13261
- },
13262
- defaultVariants: {
13263
- size: "default"
13264
- }
13265
- }
13266
- );
13267
- var cardBaseFooterVariants = cva(
13268
- // Base classes - flex layout
13269
- "flex",
13270
- {
13271
- variants: {
13272
- size: {
13273
- default: "",
13274
- compact: ""
13275
- }
13276
- },
13277
- defaultVariants: {
13278
- size: "default"
13279
- }
13280
- }
13281
- );
13282
- var CardBase = React48.forwardRef(
13283
- ({ size = "default", variant = "default", className, children, ...props }, ref) => {
13284
- return /* @__PURE__ */ jsx("div", { ref, className: cn(cardBaseVariants({ size, variant }), className), ...props, children });
13285
- }
13286
- );
13287
- CardBase.displayName = "CardBase";
13288
- var CardBaseImageWrapper = React48.forwardRef(
13289
- ({ size = "default", className, children, ...props }, ref) => {
13290
- return /* @__PURE__ */ jsx("div", { ref, className: cn(cardBaseImageVariants({ size }), className), ...props, children });
13291
- }
13292
- );
13293
- CardBaseImageWrapper.displayName = "CardBaseImageWrapper";
13294
- var CardBaseContentWrapper = React48.forwardRef(
13295
- ({ size = "default", className, children, ...props }, ref) => {
13296
- return /* @__PURE__ */ jsx(
13297
- Stack,
13298
- {
13299
- ref,
13300
- direction: "vertical",
13301
- className: cn(cardBaseContentVariants({ size }), className),
13302
- ...props,
13303
- children
13304
- }
13305
- );
13306
- }
13307
- );
13308
- CardBaseContentWrapper.displayName = "CardBaseContentWrapper";
13309
- var CardBaseFooterWrapper = React48.forwardRef(
13310
- ({ size = "default", className, children, ...props }, ref) => {
13311
- return /* @__PURE__ */ jsx("div", { ref, className: cn(cardBaseFooterVariants({ size }), className), ...props, children });
13312
- }
13313
- );
13314
- CardBaseFooterWrapper.displayName = "CardBaseFooterWrapper";
13315
- var linkVariants = cva(
13316
- "inline-flex items-center justify-center whitespace-nowrap text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
13317
- {
13318
- variants: {
13319
- variant: {
13320
- primary: "text-primary hover:text-primary/80 underline-offset-4 hover:underline",
13321
- secondary: "text-secondary-foreground underline-offset-4 hover:underline",
13322
- accent: "text-accent-foreground hover:text-accent-foreground/80 underline-offset-4 hover:underline",
13323
- outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground rounded-md px-md py-sm",
13324
- ghost: "text-foreground hover:text-accent-foreground hover:bg-accent rounded-md px-sm py-sm",
13325
- link: "text-primary underline-offset-4 hover:underline",
13326
- destructive: "text-destructive hover:text-destructive/80 underline-offset-4 hover:underline"
13327
- },
13328
- size: {
13329
- xs: "h-7 text-xs px-xs py-xs",
13330
- sm: "h-8 text-xs px-sm py-xs",
13331
- md: "h-9 text-sm px-md py-sm",
13332
- lg: "h-10 text-sm px-lg py-sm",
13333
- xl: "h-11 text-base px-xl py-md"
13334
- }
13335
- },
13336
- defaultVariants: {
13337
- variant: "link",
13338
- size: "md"
13339
- }
13340
- }
13341
- );
13342
- var Link = React48.forwardRef(
13343
- ({ className, variant, size, asChild = false, leftIcon, rightIcon, children, ...props }, ref) => {
13344
- const Comp = asChild ? Slot : "a";
13345
- return /* @__PURE__ */ jsxs(Comp, { className: cn(linkVariants({ variant, size, className })), ref, ...props, children: [
13346
- leftIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: leftIcon }),
13347
- children,
13348
- rightIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: rightIcon })
13349
- ] });
13350
- }
13351
- );
13352
- Link.displayName = "Link";
13353
- var eventCardVariants = cva(
13354
- // Base classes - surface, border, radius, shadow, motion from tokens
13355
- `${DOMAIN_TOKENS.surface.bg.default} ${DOMAIN_TOKENS.surface.border.default} ${DOMAIN_TOKENS.surface.radius.default} ${DOMAIN_TOKENS.surface.shadow.default} ${DOMAIN_TOKENS.surface.bg.hover} ${DOMAIN_TOKENS.surface.border.hover} ${DOMAIN_TOKENS.surface.elevation.hover} ${DOMAIN_TOKENS.motion.hover.transition} overflow-hidden`,
13356
- {
13357
- variants: {
13358
- size: {
13359
- default: `${CARD_TOKENS.size.md.padding} ${DOMAIN_TOKENS.layout.gap.default}`,
13360
- compact: `${CARD_TOKENS.size.sm.padding} ${DOMAIN_TOKENS.layout.gap.compact}`
13361
- },
13362
- layout: {
13363
- vertical: "flex flex-col"
13364
- },
13365
- variant: {
13366
- default: "",
13367
- featured: `${DOMAIN_TOKENS.badges.surface.featured}`
13368
- }
13369
- },
13370
- defaultVariants: {
13371
- size: "default",
13372
- layout: "vertical",
13373
- variant: "default"
13374
- }
13375
- }
13376
- );
13377
- var eventCardBadgeVariants = cva(
13378
- // Base classes - absolute positioning, z-index
13379
- "absolute z-10",
13380
- {
13381
- variants: {
13382
- size: {
13383
- default: DOMAIN_TOKENS.badges.position.default,
13384
- compact: DOMAIN_TOKENS.badges.position.compact
13385
- }
13386
- },
13387
- defaultVariants: {
13388
- size: "default"
13389
- }
13390
- }
13391
- );
13392
- var eventCardBadgeSurfaceVariants = cva(
13393
- // Base classes - flex layout, items center, badge styling from tokens
13394
- `inline-flex items-center ${DOMAIN_TOKENS.badges.radius} ${DOMAIN_TOKENS.badges.shadow} ${DOMAIN_TOKENS.badges.size.sm} ${DOMAIN_TOKENS.badges.text.color} ${TEXT_TOKENS.fontSize.xs} ${TEXT_TOKENS.fontWeight.semibold}`,
13395
- {
13396
- variants: {
13397
- variant: {
13398
- default: DOMAIN_TOKENS.badges.surface.default,
13399
- featured: DOMAIN_TOKENS.badges.surface.featured
13400
- }
13401
- },
13402
- defaultVariants: {
13403
- variant: "featured"
13404
- }
13405
- }
13406
- );
13407
- var eventCardMetadataVariants = cva(
13408
- // Base classes - flex column, metadata spacing from tokens
13409
- `flex flex-col ${DOMAIN_TOKENS.metadata.spacing.vertical}`,
13410
- {
13411
- variants: {
13412
- size: {
13413
- default: "",
13414
- compact: ""
13415
- }
13416
- },
13417
- defaultVariants: {
13418
- size: "default"
13419
- }
13420
- }
13421
- );
13422
- var eventCardMetadataItemVariants = cva(
13423
- // Base classes - flex items center, metadata spacing and text from tokens
13424
- `flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.xs}`,
13425
- {
13426
- variants: {
13427
- size: {
13428
- default: "",
13429
- compact: ""
13430
- }
13431
- },
13432
- defaultVariants: {
13433
- size: "default"
13434
- }
13435
- }
13436
- );
13437
- var eventCardMetadataIconVariants = cva(
13438
- // Base classes - icon size and color from tokens
13439
- `${DOMAIN_TOKENS.metadata.icon.sizeSm} ${DOMAIN_TOKENS.metadata.icon.default}`,
13440
- {
13441
- variants: {
13442
- size: {
13443
- default: "",
13444
- compact: ""
13445
- }
13446
- },
13447
- defaultVariants: {
13448
- size: "default"
13449
- }
13450
- }
13451
- );
13452
- var eventCardFooterVariants = cva(
13453
- // Base classes - border top, spacing from tokens
13454
- "border-t border-border",
13455
- {
13456
- variants: {
13457
- size: {
13458
- default: DOMAIN_TOKENS.spacing.footer.paddingTopDefault,
13459
- compact: DOMAIN_TOKENS.spacing.footer.paddingTopCompact
13460
- }
13461
- },
13462
- defaultVariants: {
13463
- size: "default"
13464
- }
13465
- }
13466
- );
13467
- var eventCardTicketButtonVariants = cva(
13468
- // Base classes - flex layout, badge gradient, motion from tokens
13469
- `inline-flex items-center justify-center ${DOMAIN_TOKENS.badges.surface.featured} ${DOMAIN_TOKENS.badges.text.color} ${DOMAIN_TOKENS.badges.shadow} ${DOMAIN_TOKENS.motion.hover.transition} ${TEXT_TOKENS.fontWeight.semibold} transform`,
13470
- {
13471
- variants: {
13472
- size: {
13473
- default: DOMAIN_TOKENS.spacing.button.paddingDefault,
13474
- compact: DOMAIN_TOKENS.spacing.button.paddingCompact
13475
- }
13476
- },
13477
- defaultVariants: {
13478
- size: "default"
13479
- }
13480
- }
13481
- );
13482
- var eventCardTicketButtonIconVariants = cva(
13483
- // Base classes - icon size and spacing from tokens
13484
- `${DOMAIN_TOKENS.metadata.icon.sizeSm} ${DOMAIN_TOKENS.spacing.button.iconMarginLeft}`,
13485
- {
13486
- variants: {
13487
- size: {
13488
- default: "",
13489
- compact: ""
13490
- }
13491
- },
13492
- defaultVariants: {
13493
- size: "default"
13494
- }
13495
- }
13496
- );
13497
- var eventCardPriceVariants = cva(
13498
- // Base classes - price gradient text from tokens
13499
- `bg-gradient-to-r from-accent-500 to-primary-600 bg-clip-text text-transparent`,
13500
- {
13501
- variants: {
13502
- size: {
13503
- default: TEXT_TOKENS.fontSize.lg,
13504
- compact: TEXT_TOKENS.fontSize.md
13505
- }
13506
- },
13507
- defaultVariants: {
13508
- size: "default"
13509
- }
13510
- }
13511
- );
13512
- var EventCard = React48.forwardRef(
13513
- ({
13514
- title,
13515
- description,
13516
- date,
13517
- venueName,
13518
- price,
13519
- imageUrl,
13520
- href,
13521
- ticketUrl,
13522
- featured = false,
13523
- showImage = true,
13524
- getTicketsLabel,
13525
- featuredBadgeText,
13526
- size = "default",
13527
- layout = "vertical",
13528
- variant,
13529
- className,
13530
- animation,
13531
- ...props
13532
- }, ref) => {
13533
- const animationProps = resolveComponentAnimations({
13534
- animation: animation?.animation || "fadeInUp",
13535
- hoverAnimation: animation?.hoverAnimation || "hoverLift",
13536
- animationProps: animation?.animationProps
13537
- });
13538
- const cardVariant = variant || (featured ? "featured" : "default");
13539
- return /* @__PURE__ */ jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxs(
13540
- CardBase,
13541
- {
13542
- ref,
13543
- size,
13544
- variant: cardVariant,
13545
- className: cn(
13546
- eventCardVariants({ size, layout, variant: cardVariant }),
13547
- "group relative",
13548
- className
13549
- ),
13550
- ...props,
13551
- children: [
13552
- featured && featuredBadgeText && /* @__PURE__ */ jsx("div", { className: eventCardBadgeVariants({ size }), children: /* @__PURE__ */ jsx("span", { className: eventCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
13553
- showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size, children: /* @__PURE__ */ jsxs(
13554
- "div",
13555
- {
13556
- className: cn("relative w-full overflow-hidden", DOMAIN_TOKENS.surface.bg.default),
13557
- children: [
13558
- imageUrl ? /* @__PURE__ */ jsx(
13559
- "img",
13560
- {
13561
- src: imageUrl,
13562
- alt: title,
13563
- className: cn(
13564
- "h-full w-full object-cover",
13565
- DOMAIN_TOKENS.motion.hover.transition,
13566
- DOMAIN_TOKENS.motion.hover.scale
13567
- )
13568
- }
13569
- ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
13570
- Icon2,
13571
- {
13572
- name: "info",
13573
- size: "xl",
13574
- color: "muted",
13575
- className: ICON_TOKENS.sizes["4xl"],
13576
- "aria-hidden": "true"
13577
- }
13578
- ) }),
13579
- /* @__PURE__ */ jsx(
13580
- "div",
13581
- {
13582
- className: cn(
13583
- "absolute inset-0 opacity-0 group-hover:opacity-100",
13584
- DOMAIN_TOKENS.motion.hover.transition,
13585
- DOMAIN_TOKENS.image.overlay.gradient
13586
- )
13587
- }
13588
- )
13589
- ]
13590
- }
13591
- ) }),
13592
- /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size, children: [
13593
- /* @__PURE__ */ jsx(
13594
- Heading,
13595
- {
13596
- level: 3,
13597
- className: cn(
13598
- "line-clamp-2 group-hover:text-primary",
13599
- DOMAIN_TOKENS.motion.hover.transition,
13600
- TEXT_TOKENS.fontSize.lg,
13601
- TEXT_TOKENS.fontWeight.bold,
13602
- DOMAIN_TOKENS.spacing.section.titleToSubtitle
13603
- ),
13604
- children: href ? /* @__PURE__ */ jsx(Link, { href, variant: "ghost", children: title }) : title
13605
- }
13606
- ),
13607
- description && /* @__PURE__ */ jsx(
13608
- Text,
13609
- {
13610
- size: "sm",
13611
- muted: true,
13612
- className: cn(
13613
- "line-clamp-2",
13614
- size === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
13615
- ),
13616
- children: description
13617
- }
13618
- ),
13619
- /* @__PURE__ */ jsxs("div", { className: eventCardMetadataVariants({ size }), children: [
13620
- date && /* @__PURE__ */ jsxs("div", { className: eventCardMetadataItemVariants({ size }), role: "text", children: [
13621
- /* @__PURE__ */ jsx(
13622
- IconCalendar,
13623
- {
13624
- className: eventCardMetadataIconVariants({ size }),
13625
- "aria-hidden": true
13626
- }
13627
- ),
13628
- /* @__PURE__ */ jsx(Text, { size: "xs", muted: true, children: /* @__PURE__ */ jsx("time", { dateTime: date, children: date }) })
13629
- ] }),
13630
- venueName && /* @__PURE__ */ jsxs("div", { className: eventCardMetadataItemVariants({ size }), role: "text", children: [
13631
- /* @__PURE__ */ jsx(
13632
- IconLocation,
13633
- {
13634
- className: eventCardMetadataIconVariants({ size }),
13635
- "aria-hidden": true
13636
- }
13637
- ),
13638
- /* @__PURE__ */ jsx(Text, { size: "xs", muted: true, className: "line-clamp-1", children: /* @__PURE__ */ jsx("address", { children: venueName }) })
13639
- ] })
13640
- ] })
13641
- ] }),
13642
- /* @__PURE__ */ jsx(CardBaseFooterWrapper, { size, children: /* @__PURE__ */ jsxs("div", { className: cn("w-full", eventCardFooterVariants({ size })), children: [
13643
- ticketUrl && /* @__PURE__ */ jsxs(
13644
- Link,
13645
- {
13646
- href: ticketUrl,
13647
- className: cn("w-full", eventCardTicketButtonVariants({ size })),
13648
- target: "_blank",
13649
- rel: "noopener noreferrer",
13650
- children: [
13651
- getTicketsLabel,
13652
- /* @__PURE__ */ jsx(
13653
- IconArrowRight,
13654
- {
13655
- className: eventCardTicketButtonIconVariants({ size }),
13656
- "aria-hidden": true
13657
- }
13658
- )
13659
- ]
13660
- }
13661
- ),
13662
- !ticketUrl && price && /* @__PURE__ */ jsx("div", { className: "text-right", children: /* @__PURE__ */ jsx(Text, { size: size === "compact" ? "md" : "lg", weight: "bold", children: /* @__PURE__ */ jsx("span", { className: eventCardPriceVariants({ size }), children: price }) }) })
13663
- ] }) })
13664
- ]
13665
- }
13666
- ) });
13667
- }
13668
- );
13669
- EventCard.displayName = "EventCard";
13670
- var artistCardVariants = cva("group relative", {
13671
- variants: {
13672
- size: {
13673
- default: "",
13674
- compact: ""
13675
- },
13676
- variant: {
13677
- default: "",
13678
- featured: ""
13679
- }
13680
- },
13681
- defaultVariants: {
13682
- size: "default",
13683
- variant: "default"
13684
- }
13685
- });
13686
- var artistCardBadgeVariants = cva(
13687
- // Base classes - absolute positioning, z-index
13688
- "absolute z-10",
13689
- {
13690
- variants: {
13691
- size: {
13692
- default: DOMAIN_TOKENS.badges.position.default,
13693
- // Default positioning - maps to semanticSpacing.md (12px)
13694
- compact: DOMAIN_TOKENS.badges.position.compact
13695
- // Compact positioning - maps to semanticSpacing.sm (8px)
13696
- }
13697
- },
13698
- defaultVariants: {
13699
- size: "default"
13700
- }
13701
- }
13702
- );
13703
- var artistCardBadgeSurfaceVariants = cva(
13704
- // Base classes - flex layout, items center, badge styling
13705
- `inline-flex items-center ${DOMAIN_TOKENS.badges.radius} ${DOMAIN_TOKENS.badges.shadow} ${DOMAIN_TOKENS.badges.text.color} ${TEXT_TOKENS.fontSize.xs} ${TEXT_TOKENS.fontWeight.semibold}`,
13706
- {
13707
- variants: {
13708
- size: {
13709
- default: DOMAIN_TOKENS.badges.size.md,
13710
- compact: DOMAIN_TOKENS.badges.size.sm
13711
- },
13712
- variant: {
13713
- default: DOMAIN_TOKENS.badges.surface.default,
13714
- featured: DOMAIN_TOKENS.badges.surface.featured
13715
- }
13716
- },
13717
- defaultVariants: {
13718
- size: "default",
13719
- variant: "featured"
13720
- }
13721
- }
13722
- );
13723
- var artistCardImageOverlayVariants = cva(
13724
- `absolute inset-0 ${DOMAIN_TOKENS.image.overlay.gradient} opacity-0 ${MOTION_TOKENS.transition.opacity} ${MOTION_TOKENS.duration.normal} group-hover:opacity-100`,
13725
- {
13726
- variants: {
13727
- size: {
13728
- default: "",
13729
- compact: ""
13730
- }
13731
- },
13732
- defaultVariants: {
13733
- size: "default"
13734
- }
13735
- }
13736
- );
13737
- var artistCardImageTransformVariants = cva(
13738
- `object-cover ${MOTION_TOKENS.transition.transform} ${MOTION_TOKENS.duration.slow} ${DOMAIN_TOKENS.motion.hover.scale}`,
13739
- {
13740
- variants: {
13741
- size: {
13742
- default: "",
13743
- compact: ""
13744
- }
13745
- },
13746
- defaultVariants: {
13747
- size: "default"
13748
- }
13749
- }
13750
- );
13751
- var artistCardMetadataVariants = cva(
13752
- // Base classes - flex column, metadata spacing
13753
- `flex flex-col ${DOMAIN_TOKENS.metadata.spacing.vertical}`,
13754
- {
13755
- variants: {
13756
- size: {
13757
- default: "",
13758
- compact: ""
13759
- }
13760
- },
13761
- defaultVariants: {
13762
- size: "default"
13763
- }
13764
- }
13765
- );
13766
- var artistCardMetadataItemVariants = cva(
13767
- // Base classes - flex items center, metadata spacing and text
13768
- `flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.xs}`,
13769
- {
13770
- variants: {
13771
- size: {
13772
- default: "",
13773
- compact: ""
13774
- }
13775
- },
13776
- defaultVariants: {
13777
- size: "default"
13778
- }
13779
- }
13780
- );
13781
- var artistCardMetadataIconVariants = cva(
13782
- // Base classes - icon size and color
13783
- `${ICON_TOKENS.sizes.md} ${ICON_TOKENS.colors.muted}`,
13784
- {
13785
- variants: {
13786
- size: {
13787
- default: "",
13788
- compact: ""
13789
- }
13790
- },
13791
- defaultVariants: {
13792
- size: "default"
13793
- }
13794
- }
13795
- );
13796
- var artistCardGenresVariants = cva(
13797
- // Base classes - genres text styling
13798
- `${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.xs}`,
13799
- {
13800
- variants: {
13801
- size: {
13802
- default: "",
13803
- compact: ""
13804
- }
13805
- },
13806
- defaultVariants: {
13807
- size: "default"
13808
- }
13809
- }
13810
- );
13811
- var artistCardFooterBorderVariants = cva(
13812
- // Base classes - border top from ARTIST_TOKENS, spacing from DOMAIN_TOKENS
13813
- ARTIST_TOKENS.footer.border.top,
13814
- {
13815
- variants: {
13816
- size: {
13817
- default: DOMAIN_TOKENS.spacing.footer.paddingTopDefault,
13818
- // Default padding top - references semanticSpacing.sm (8px) via Tailwind
13819
- compact: DOMAIN_TOKENS.spacing.footer.paddingTopCompact
13820
- // Compact padding top - references semanticSpacing.xs (4px) via Tailwind
13821
- }
13822
- },
13823
- defaultVariants: {
13824
- size: "default"
13825
- }
13826
- }
13827
- );
13828
- var ArtistCard = React48.forwardRef(
13829
- ({
13830
- name,
13831
- description,
13832
- genres,
13833
- followers,
13834
- plays,
13835
- imageUrl,
13836
- href,
13837
- featured = false,
13838
- showImage = true,
13839
- popularBadgeText,
13840
- followersLabel,
13841
- playsLabel,
13842
- size = "default",
13843
- variant,
13844
- className,
13845
- animation,
13846
- ...props
13847
- }, ref) => {
13848
- if (!name || name.trim() === "") {
13849
- throw new Error('ArtistCard: "name" prop is required and cannot be empty');
13850
- }
13851
- if (!followersLabel || followersLabel.trim() === "") {
13852
- throw new Error('ArtistCard: "followersLabel" prop is required and cannot be empty');
13853
- }
13854
- if (!playsLabel || playsLabel.trim() === "") {
13855
- throw new Error('ArtistCard: "playsLabel" prop is required and cannot be empty');
13856
- }
13857
- const animationProps = resolveComponentAnimations({
13858
- animation: animation?.animation || "fadeInUp",
13859
- hoverAnimation: animation?.hoverAnimation || "hoverLift",
13860
- animationProps: animation?.animationProps
13861
- });
13862
- const cardVariant = variant || (featured ? "featured" : "default");
13863
- return /* @__PURE__ */ jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxs(
13864
- CardBase,
13865
- {
13866
- ref,
13867
- size,
13868
- variant: cardVariant,
13869
- className: cn(artistCardVariants({ size, variant }), className),
13870
- ...props,
13871
- children: [
13872
- featured && popularBadgeText && /* @__PURE__ */ jsx("div", { className: artistCardBadgeVariants({ size }), children: /* @__PURE__ */ jsx("span", { className: artistCardBadgeSurfaceVariants({ size, variant: "featured" }), children: popularBadgeText }) }),
13873
- showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size, children: /* @__PURE__ */ jsxs(
13874
- "div",
13875
- {
13876
- className: cn(
13877
- ARTIST_TOKENS.image.container.layout,
13878
- DOMAIN_TOKENS.image.placeholder.gradient
13879
- ),
13880
- children: [
13881
- imageUrl ? /* @__PURE__ */ jsx(
13882
- "img",
13883
- {
13884
- src: imageUrl,
13885
- alt: name,
13886
- className: cn(
13887
- ARTIST_TOKENS.image.sizing.full,
13888
- artistCardImageTransformVariants({ size })
13889
- )
13890
- }
13891
- ) : /* @__PURE__ */ jsx("div", { className: ARTIST_TOKENS.image.placeholder.container, children: /* @__PURE__ */ jsx(
13892
- Icon2,
13893
- {
13894
- name: "info",
13895
- size: "xl",
13896
- color: "muted",
13897
- className: ICON_TOKENS.sizes["4xl"],
13898
- "aria-hidden": "true"
13899
- }
13900
- ) }),
13901
- /* @__PURE__ */ jsx("div", { className: artistCardImageOverlayVariants({ size }) })
13902
- ]
13903
- }
13904
- ) }),
13905
- /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size, children: [
13906
- /* @__PURE__ */ jsx(
13907
- Heading,
13908
- {
13909
- level: 3,
13910
- className: cn(
13911
- DOMAIN_TOKENS.text.lineClamp.two,
13912
- TEXT_TOKENS.fontSize.lg,
13913
- TEXT_TOKENS.fontWeight.bold,
13914
- MOTION_TOKENS.transition.colors,
13915
- DOMAIN_TOKENS.text.hover.primary,
13916
- size === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
13917
- ),
13918
- children: href ? /* @__PURE__ */ jsx(Link, { href, variant: "ghost", children: name }) : name
13919
- }
13920
- ),
13921
- description && /* @__PURE__ */ jsx(
13922
- Text,
13923
- {
13924
- size: "sm",
13925
- variant: "muted",
13926
- className: cn(
13927
- DOMAIN_TOKENS.text.lineClamp.two,
13928
- size === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
13929
- ),
13930
- children: description
13931
- }
13932
- ),
13933
- genres && /* @__PURE__ */ jsx(
13934
- Text,
13935
- {
13936
- size: "xs",
13937
- variant: "muted",
13938
- className: cn(
13939
- artistCardGenresVariants({ size }),
13940
- size === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
13941
- ),
13942
- children: genres
13943
- }
13944
- ),
13945
- (followers !== void 0 || plays !== void 0) && /* @__PURE__ */ jsxs("div", { className: artistCardMetadataVariants({ size }), children: [
13946
- followers !== void 0 && /* @__PURE__ */ jsxs("div", { className: artistCardMetadataItemVariants({ size }), children: [
13947
- /* @__PURE__ */ jsx(
13948
- Icon2,
13949
- {
13950
- name: "info",
13951
- size: "sm",
13952
- color: "muted",
13953
- className: artistCardMetadataIconVariants({ size }),
13954
- "aria-hidden": "true"
13955
- }
13956
- ),
13957
- /* @__PURE__ */ jsxs(Text, { size: "xs", variant: "muted", children: [
13958
- followers.toLocaleString(),
13959
- " ",
13960
- followersLabel
13961
- ] })
13962
- ] }),
13963
- plays !== void 0 && /* @__PURE__ */ jsxs("div", { className: artistCardMetadataItemVariants({ size }), children: [
13964
- /* @__PURE__ */ jsx(
13965
- Icon2,
13966
- {
13967
- name: "info",
13968
- size: "sm",
13969
- color: "muted",
13970
- className: artistCardMetadataIconVariants({ size }),
13971
- "aria-hidden": "true"
13972
- }
13973
- ),
13974
- /* @__PURE__ */ jsxs(Text, { size: "xs", variant: "muted", children: [
13975
- plays.toLocaleString(),
13976
- " ",
13977
- playsLabel
13978
- ] })
13979
- ] })
13980
- ] })
13981
- ] }),
13982
- (followers !== void 0 || plays !== void 0) && /* @__PURE__ */ jsx(CardBaseFooterWrapper, { size, children: /* @__PURE__ */ jsx("div", { className: artistCardFooterBorderVariants({ size }) }) })
13983
- ]
13984
- }
13985
- ) });
13986
- }
13987
- );
13988
- ArtistCard.displayName = "ArtistCard";
13989
- var categoryCardBadgeVariants = cva(
13990
- // Base classes - absolute positioning, z-index
13991
- "absolute z-10",
13992
- {
13993
- variants: {
13994
- size: {
13995
- default: DOMAIN_TOKENS.badges.position.default,
13996
- // Default positioning - references semanticSpacing.md (16px)
13997
- compact: DOMAIN_TOKENS.badges.position.compact
13998
- // Compact positioning - references semanticSpacing.sm (8px)
13999
- }
14000
- },
14001
- defaultVariants: {
14002
- size: "default"
14003
- }
14004
- }
14005
- );
14006
- var categoryCardBadgeSurfaceVariants = cva(
14007
- // Base classes - flex layout, items center, badge styling
14008
- // Uses DOMAIN_TOKENS for badge-specific styles, TEXT_TOKENS for typography
14009
- `inline-flex items-center ${DOMAIN_TOKENS.badges.radius} ${DOMAIN_TOKENS.badges.shadow} ${DOMAIN_TOKENS.badges.size.sm} ${DOMAIN_TOKENS.badges.text.color} ${TEXT_TOKENS.fontSize.xs} ${TEXT_TOKENS.fontWeight.semibold}`,
14010
- {
14011
- variants: {
14012
- variant: {
14013
- default: DOMAIN_TOKENS.badges.surface.default,
14014
- featured: DOMAIN_TOKENS.badges.surface.featured
14015
- }
14016
- },
14017
- defaultVariants: {
14018
- variant: "featured"
14019
- }
14020
- }
14021
- );
14022
- var CategoryCard = React48.forwardRef(
14023
- ({
14024
- title,
14025
- description,
14026
- imageUrl,
14027
- href,
14028
- featured = false,
14029
- showImage = true,
14030
- featuredBadgeText,
14031
- size = "default",
14032
- variant,
14033
- className,
14034
- animation,
14035
- ...props
14036
- }, ref) => {
14037
- const animationProps = resolveComponentAnimations({
14038
- animation: animation?.animation || "fadeInUp",
14039
- hoverAnimation: animation?.hoverAnimation || "hoverLift",
14040
- animationProps: animation?.animationProps
14041
- });
14042
- const cardVariant = variant || (featured ? "featured" : "default");
14043
- return /* @__PURE__ */ jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxs(
14044
- CardBase,
14045
- {
14046
- ref,
14047
- size,
14048
- variant: cardVariant,
14049
- className: cn("group relative", className),
14050
- ...props,
14051
- children: [
14052
- featured && featuredBadgeText && /* @__PURE__ */ jsx("div", { className: categoryCardBadgeVariants({ size }), children: /* @__PURE__ */ jsx("span", { className: categoryCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
14053
- showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size, children: /* @__PURE__ */ jsxs(
14054
- "div",
14055
- {
14056
- className: cn(
14057
- "relative w-full overflow-hidden",
14058
- DOMAIN_TOKENS.image.placeholder.gradient
14059
- ),
14060
- children: [
14061
- imageUrl ? /* @__PURE__ */ jsx(
14062
- "img",
14063
- {
14064
- src: imageUrl,
14065
- alt: title,
14066
- className: cn(
14067
- "h-full w-full object-cover",
14068
- DOMAIN_TOKENS.motion.hover.transition,
14069
- DOMAIN_TOKENS.motion.hover.scale
14070
- )
14071
- }
14072
- ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
14073
- Icon2,
14074
- {
14075
- name: "info",
14076
- className: cn(ICON_TOKENS.sizes["4xl"], ICON_TOKENS.colors.muted),
14077
- "aria-hidden": "true"
14078
- }
14079
- ) }),
14080
- /* @__PURE__ */ jsx(
14081
- "div",
14082
- {
14083
- className: cn(
14084
- "absolute inset-0 opacity-0 group-hover:opacity-100",
14085
- MOTION_TOKENS.transition.opacity,
14086
- MOTION_TOKENS.duration.normal,
14087
- DOMAIN_TOKENS.image.overlay.gradient
14088
- )
14089
- }
14090
- )
14091
- ]
14092
- }
14093
- ) }),
14094
- /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size, children: [
14095
- /* @__PURE__ */ jsx(
14096
- Heading,
14097
- {
14098
- level: 3,
14099
- className: cn(
14100
- DOMAIN_TOKENS.text.lineClamp.two,
14101
- MOTION_TOKENS.transition.colors,
14102
- DOMAIN_TOKENS.text.hover.primary,
14103
- TEXT_TOKENS.fontSize.lg,
14104
- TEXT_TOKENS.fontWeight.bold,
14105
- DOMAIN_TOKENS.spacing.section.titleToSubtitle
14106
- ),
14107
- children: href ? /* @__PURE__ */ jsx(Link, { href, variant: "ghost", children: title }) : title
14108
- }
14109
- ),
14110
- description && /* @__PURE__ */ jsx(
14111
- Text,
14112
- {
14113
- size: "sm",
14114
- variant: "muted",
14115
- className: cn(
14116
- DOMAIN_TOKENS.text.lineClamp.two,
14117
- size === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
14118
- ),
14119
- children: description
14120
- }
14121
- )
14122
- ] })
14123
- ]
14124
- }
14125
- ) });
14126
- }
14127
- );
14128
- CategoryCard.displayName = "CategoryCard";
14129
- var promoCardBadgeVariants = cva(
14130
- // Base classes - absolute positioning, z-index
14131
- "absolute z-10",
14132
- {
14133
- variants: {
14134
- size: {
14135
- default: DOMAIN_TOKENS.badges.position.default,
14136
- // Default positioning - maps to semanticSpacing.md (12px)
14137
- compact: DOMAIN_TOKENS.badges.position.compact
14138
- // Compact positioning - maps to semanticSpacing.sm (8px)
14139
- }
14140
- },
14141
- defaultVariants: {
14142
- size: "default"
14143
- }
14144
- }
14145
- );
14146
- var promoCardBadgeSurfaceVariants = cva(
14147
- // Base classes - flex layout, items center, badge styling
14148
- `inline-flex items-center ${DOMAIN_TOKENS.badges.radius} ${DOMAIN_TOKENS.badges.shadow} ${DOMAIN_TOKENS.badges.size.sm} ${DOMAIN_TOKENS.badges.text.color} ${TEXT_TOKENS.fontSize.xs} font-semibold`,
14149
- {
14150
- variants: {
14151
- variant: {
14152
- default: DOMAIN_TOKENS.badges.surface.default,
14153
- featured: DOMAIN_TOKENS.badges.surface.featured
14154
- }
14155
- },
14156
- defaultVariants: {
14157
- variant: "featured"
14158
- }
14159
- }
14160
- );
14161
- var promoCardCtaButtonVariants = cva(
14162
- // Base classes - flex layout, CTA button tokens, motion
14163
- `inline-flex items-center justify-center ${DOMAIN_TOKENS.cta.button.radius} ${DOMAIN_TOKENS.cta.button.variant.primary.background} ${DOMAIN_TOKENS.cta.button.variant.primary.text} ${DOMAIN_TOKENS.cta.button.shadow.primary} ${DOMAIN_TOKENS.cta.button.variant.primary.hover} ${DOMAIN_TOKENS.cta.button.transition.colors} font-semibold`,
14164
- {
14165
- variants: {
14166
- size: {
14167
- default: `${DOMAIN_TOKENS.cta.button.height.md} ${DOMAIN_TOKENS.cta.button.padding.horizontal.md} ${DOMAIN_TOKENS.cta.button.padding.vertical.sm} ${DOMAIN_TOKENS.cta.button.fontSize.md}`,
14168
- // Default size - uses md height and padding
14169
- compact: `${DOMAIN_TOKENS.cta.button.height.sm} ${DOMAIN_TOKENS.cta.button.padding.horizontal.sm} ${DOMAIN_TOKENS.cta.button.padding.vertical.sm} ${DOMAIN_TOKENS.cta.button.fontSize.sm}`
14170
- // Compact size - uses sm height and padding
14171
- }
14172
- },
14173
- defaultVariants: {
14174
- size: "default"
14175
- }
14176
- }
14177
- );
14178
- var promoCardCtaButtonIconVariants = cva(
14179
- // Base classes - icon size and spacing
14180
- `${ICON_TOKENS.sizes.md} ${DOMAIN_TOKENS.spacing.button.iconMarginLeft}`,
14181
- {
14182
- variants: {
14183
- size: {
14184
- default: "",
14185
- compact: ""
14186
- }
14187
- },
14188
- defaultVariants: {
14189
- size: "default"
14190
- }
14191
- }
14192
- );
14193
- var PromoCard = React48.forwardRef(
14194
- ({
14195
- title,
14196
- description,
14197
- imageUrl,
14198
- href,
14199
- ctaUrl,
14200
- ctaLabel,
14201
- featured = false,
14202
- showImage = true,
14203
- featuredBadgeText,
14204
- size = "default",
14205
- variant,
14206
- className,
14207
- animation,
14208
- ...props
14209
- }, ref) => {
14210
- const animationProps = resolveComponentAnimations({
14211
- animation: animation?.animation || "fadeInUp",
14212
- hoverAnimation: animation?.hoverAnimation || "hoverLift",
14213
- animationProps: animation?.animationProps
14214
- });
14215
- const cardVariant = variant || (featured ? "featured" : "default");
14216
- return /* @__PURE__ */ jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxs(
14217
- CardBase,
14218
- {
14219
- ref,
14220
- size,
14221
- variant: cardVariant,
14222
- className: cn("group relative", className),
14223
- ...props,
14224
- children: [
14225
- featured && featuredBadgeText && /* @__PURE__ */ jsx("div", { className: promoCardBadgeVariants({ size }), children: /* @__PURE__ */ jsx("span", { className: promoCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
14226
- showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size, children: /* @__PURE__ */ jsxs("div", { className: "relative w-full overflow-hidden bg-gradient-to-br from-surface-elevated1 to-surface-elevated2", children: [
14227
- imageUrl ? /* @__PURE__ */ jsx(
14228
- "img",
14229
- {
14230
- src: imageUrl,
14231
- alt: title,
14232
- className: cn(
14233
- "h-full w-full object-cover",
14234
- DOMAIN_TOKENS.motion.hover.transition,
14235
- DOMAIN_TOKENS.motion.hover.scale
14236
- )
14237
- }
14238
- ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
14239
- Icon2,
14240
- {
14241
- name: "info",
14242
- size: "xl",
14243
- color: "muted",
14244
- className: ICON_TOKENS.sizes["4xl"],
14245
- "aria-hidden": "true"
14246
- }
14247
- ) }),
14248
- /* @__PURE__ */ jsx(
14249
- "div",
14250
- {
14251
- className: cn(
14252
- "absolute inset-0 opacity-0 transition-opacity duration-normal group-hover:opacity-100",
14253
- DOMAIN_TOKENS.image.overlay.gradient
14254
- )
14255
- }
14256
- )
14257
- ] }) }),
14258
- /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size, children: [
14259
- /* @__PURE__ */ jsx(
14260
- Heading,
14261
- {
14262
- level: 3,
14263
- className: cn(
14264
- "line-clamp-2 transition-colors group-hover:text-primary",
14265
- TEXT_TOKENS.fontSize.lg,
14266
- TEXT_TOKENS.fontWeight.bold,
14267
- DOMAIN_TOKENS.spacing.section.titleToSubtitle
14268
- ),
14269
- children: href ? /* @__PURE__ */ jsx(Link, { href, variant: "ghost", children: title }) : title
14270
- }
14271
- ),
14272
- description && /* @__PURE__ */ jsx(
14273
- Text,
14274
- {
14275
- size: "sm",
14276
- variant: "muted",
14277
- className: cn(
14278
- "line-clamp-2",
14279
- size === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
14280
- ),
14281
- children: description
14282
- }
14283
- )
14284
- ] }),
14285
- /* @__PURE__ */ jsx(CardBaseFooterWrapper, { size, children: /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
14286
- ctaUrl && /* @__PURE__ */ jsxs(Link, { href: ctaUrl, className: cn("w-full", promoCardCtaButtonVariants({ size })), children: [
14287
- ctaLabel,
14288
- /* @__PURE__ */ jsx(IconArrowRight, { className: promoCardCtaButtonIconVariants({ size }) })
14289
- ] }),
14290
- !ctaUrl && /* @__PURE__ */ jsxs("div", { className: cn("w-full", promoCardCtaButtonVariants({ size })), children: [
14291
- ctaLabel,
14292
- /* @__PURE__ */ jsx(IconArrowRight, { className: promoCardCtaButtonIconVariants({ size }) })
14293
- ] })
14294
- ] }) })
14295
- ]
14296
- }
14297
- ) });
14298
- }
14299
- );
14300
- PromoCard.displayName = "PromoCard";
14301
- var ticketCardVariants = cva("group relative", {
14302
- variants: {
14303
- size: {
14304
- default: "",
14305
- compact: ""
14306
- },
14307
- variant: {
14308
- default: "",
14309
- featured: ""
14310
- }
14311
- },
14312
- defaultVariants: {
14313
- size: "default",
14314
- variant: "default"
14315
- }
14316
- });
14317
- var ticketCardBadgeVariants = cva(
14318
- // Base classes - absolute positioning, z-index
14319
- "absolute z-10",
14320
- {
14321
- variants: {
14322
- size: {
14323
- default: DOMAIN_TOKENS.badges.position.default,
14324
- // Default positioning - maps to semanticSpacing.md (16px)
14325
- compact: DOMAIN_TOKENS.badges.position.compact
14326
- // Compact positioning - maps to semanticSpacing.sm (8px)
14327
- }
14328
- },
14329
- defaultVariants: {
14330
- size: "default"
14331
- }
14332
- }
14333
- );
14334
- var ticketCardBadgeSurfaceVariants = cva(
14335
- // Base classes - flex layout, items center, badge styling
14336
- `inline-flex items-center ${DOMAIN_TOKENS.badges.radius} ${DOMAIN_TOKENS.badges.shadow} ${DOMAIN_TOKENS.badges.size.sm} ${DOMAIN_TOKENS.badges.text.color} ${TEXT_TOKENS.fontSize.xs} ${TEXT_TOKENS.fontWeight.semibold}`,
14337
- {
14338
- variants: {
14339
- variant: {
14340
- default: DOMAIN_TOKENS.badges.surface.default,
14341
- featured: DOMAIN_TOKENS.badges.surface.featured,
14342
- vip: DOMAIN_TOKENS.badges.surface.featured,
14343
- // VIP uses featured gradient
14344
- discount: DOMAIN_TOKENS.badges.surface.default
14345
- // Discount badge - using default badge surface
14346
- }
14347
- },
14348
- defaultVariants: {
14349
- variant: "default"
14350
- }
14351
- }
14352
- );
14353
- var ticketCardTitleVariants = cva(
14354
- `${TEXT_TOKENS.fontSize.lg} ${TEXT_TOKENS.fontWeight.bold} ${MOTION_TOKENS.transition.colors} ${DOMAIN_TOKENS.text.hover.primary} ${DOMAIN_TOKENS.text.lineClamp.two}`,
14355
- {
14356
- variants: {
14357
- size: {
14358
- default: DOMAIN_TOKENS.spacing.section.subtitleToMetadata,
14359
- compact: DOMAIN_TOKENS.spacing.section.titleToSubtitle
14360
- }
14361
- },
14362
- defaultVariants: {
14363
- size: "default"
14364
- }
14365
- }
14366
- );
14367
- var ticketCardDateVariants = cva(
14368
- `${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.sm} ${MOTION_TOKENS.transition.colors}`,
14369
- {
14370
- variants: {
14371
- size: {
14372
- default: DOMAIN_TOKENS.spacing.section.titleToSubtitle,
14373
- compact: `${DOMAIN_TOKENS.spacing.section.titleToSubtitle} ${TEXT_TOKENS.fontSize.xs}`
14374
- }
14375
- },
14376
- defaultVariants: {
14377
- size: "default"
14378
- }
14379
- }
14380
- );
14381
- var ticketCardDescriptionVariants = cva(`${DOMAIN_TOKENS.text.lineClamp.two}`, {
14382
- variants: {
14383
- size: {
14384
- default: DOMAIN_TOKENS.spacing.section.subtitleToMetadata,
14385
- compact: DOMAIN_TOKENS.spacing.section.titleToSubtitle
14386
- }
14387
- },
14388
- defaultVariants: {
14389
- size: "default"
14390
- }
14391
- });
14392
- var ticketCardPriceCapacityContainerVariants = cva(
14393
- // Base classes - flex layout, price/capacity spacing
14394
- `flex items-center ${DOMAIN_TOKENS.priceCapacity.spacing}`,
14395
- {
14396
- variants: {
14397
- size: {
14398
- default: "",
14399
- compact: ""
14400
- }
14401
- },
14402
- defaultVariants: {
14403
- size: "default"
14404
- }
14405
- }
14406
- );
14407
- var ticketCardPriceVariants = cva(
14408
- // Base classes - price text color
14409
- `${DOMAIN_TOKENS.priceCapacity.text.primary} ${TEXT_TOKENS.fontWeight.bold}`,
14410
- {
14411
- variants: {
14412
- size: {
14413
- default: TEXT_TOKENS.fontSize.lg,
14414
- // Default size
14415
- compact: TEXT_TOKENS.fontSize.md
14416
- // Compact size
14417
- }
14418
- },
14419
- defaultVariants: {
14420
- size: "default"
14421
- }
14422
- }
14423
- );
14424
- var ticketCardCapacityVariants = cva(
14425
- // Base classes - capacity text color
14426
- `${DOMAIN_TOKENS.priceCapacity.text.secondary}`,
14427
- {
14428
- variants: {
14429
- size: {
14430
- default: TEXT_TOKENS.fontSize.sm,
14431
- // Default size
14432
- compact: TEXT_TOKENS.fontSize.xs
14433
- // Compact size
14434
- }
14435
- },
14436
- defaultVariants: {
14437
- size: "default"
14438
- }
14439
- }
14440
- );
14441
- var ticketCardAvailabilityVariants = cva(
14442
- // Base classes - availability indicator styling
14443
- `inline-flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${TEXT_TOKENS.fontSize.xs} ${TEXT_TOKENS.fontWeight.medium}`,
14444
- {
14445
- variants: {
14446
- availability: {
14447
- available: `${DOMAIN_TOKENS.metadata.text.primary}`,
14448
- sold_out: `${DOMAIN_TOKENS.metadata.text.secondary} opacity-60`,
14449
- available_soon: `${DOMAIN_TOKENS.metadata.text.secondary}`
14450
- }
14451
- },
14452
- defaultVariants: {
14453
- availability: "available"
14454
- }
14455
- }
14456
- );
14457
- var ticketCardFooterVariants = cva(
14458
- // Base classes - border top, spacing
14459
- "border-t border-border",
14460
- {
14461
- variants: {
14462
- size: {
14463
- default: DOMAIN_TOKENS.spacing.footer.paddingTopDefault,
14464
- // Default padding top - references semanticSpacing.sm (8px) via Tailwind
14465
- compact: DOMAIN_TOKENS.spacing.footer.paddingTopCompact
14466
- // Compact padding top - references semanticSpacing.xs (4px) via Tailwind
14467
- }
14468
- },
14469
- defaultVariants: {
14470
- size: "default"
14471
- }
14472
- }
14473
- );
14474
- var ticketCardPurchaseButtonVariants = cva(
14475
- // Base classes - flex layout, badge gradient, motion
14476
- `inline-flex items-center justify-center ${DOMAIN_TOKENS.badges.surface.featured} ${DOMAIN_TOKENS.badges.text.color} ${DOMAIN_TOKENS.badges.shadow} ${DOMAIN_TOKENS.motion.hover.transition} ${TEXT_TOKENS.fontWeight.semibold} transform`,
14477
- {
14478
- variants: {
14479
- size: {
14480
- default: DOMAIN_TOKENS.spacing.button.paddingDefault,
14481
- // Default padding - references semanticSpacing.md (16px) horizontal, xs (4px) vertical via Tailwind
14482
- compact: DOMAIN_TOKENS.spacing.button.paddingCompact
14483
- // Compact padding - references semanticSpacing.sm (8px) horizontal, xs (4px) vertical via Tailwind
14484
- },
14485
- disabled: {
14486
- true: "opacity-50 cursor-not-allowed",
14487
- false: "hover:scale-105 hover:from-accent-600 hover:to-primary-700"
14488
- }
14489
- },
14490
- defaultVariants: {
14491
- size: "default",
14492
- disabled: false
14493
- }
14494
- }
14495
- );
14496
- var ticketCardPurchaseButtonIconVariants = cva(
14497
- // Base classes - icon size and spacing
14498
- `${ICON_TOKENS.sizes.md} ${DOMAIN_TOKENS.spacing.button.iconMarginLeft}`,
14499
- {
14500
- variants: {
14501
- size: {
14502
- default: "",
14503
- compact: ""
14504
- }
14505
- },
14506
- defaultVariants: {
14507
- size: "default"
14508
- }
14509
- }
14510
- );
14511
- var ticketCardImageOverlayVariants = cva(
14512
- `absolute inset-0 ${DOMAIN_TOKENS.image.overlay.gradient} opacity-0 ${MOTION_TOKENS.transition.opacity} ${MOTION_TOKENS.duration.normal} group-hover:opacity-100`,
14513
- {
14514
- variants: {
14515
- size: {
14516
- default: "",
14517
- compact: ""
14518
- }
14519
- },
14520
- defaultVariants: {
14521
- size: "default"
14522
- }
14523
- }
14524
- );
14525
- var ticketCardImageTransformVariants = cva(
14526
- `object-cover ${MOTION_TOKENS.transition.transform} ${MOTION_TOKENS.duration.slow} ${DOMAIN_TOKENS.motion.hover.scale}`,
14527
- {
14528
- variants: {
14529
- size: {
14530
- default: "",
14531
- compact: ""
14532
- }
14533
- },
14534
- defaultVariants: {
14535
- size: "default"
14536
- }
14537
- }
14538
- );
14539
- var TicketCard = React48.forwardRef(
14540
- ({
14541
- title,
14542
- date,
14543
- description,
14544
- price,
14545
- capacity,
14546
- availability = "available",
14547
- imageUrl,
14548
- href,
14549
- purchaseUrl,
14550
- purchaseLabel,
14551
- vipBadgeText,
14552
- discountBadgeText,
14553
- featured = false,
14554
- featuredBadgeText,
14555
- showImage = true,
14556
- size = "default",
14557
- variant,
14558
- className,
14559
- animation,
14560
- ...props
14561
- }, ref) => {
14562
- const animationProps = resolveComponentAnimations({
14563
- animation: animation?.animation || "fadeInUp",
14564
- hoverAnimation: animation?.hoverAnimation || "hoverLift",
14565
- animationProps: animation?.animationProps
14566
- });
14567
- const cardVariant = variant || (featured ? "featured" : "default");
14568
- const isPurchaseDisabled = availability === "sold_out" || availability === "available_soon";
14569
- const getVipBadgePosition = () => {
14570
- if (!featured || !featuredBadgeText) return "";
14571
- return size === "compact" ? `${DOMAIN_TOKENS.badges.position.compact} ${DOMAIN_TOKENS.badges.positionY.xl}` : `${DOMAIN_TOKENS.badges.position.default} ${DOMAIN_TOKENS.badges.positionY["2xl"]}`;
14572
- };
14573
- const getDiscountBadgePosition = () => {
14574
- if (!(featured && featuredBadgeText) && !vipBadgeText) return "";
14575
- return size === "compact" ? `${DOMAIN_TOKENS.badges.position.compact} ${DOMAIN_TOKENS.badges.positionY["2xl"]}` : `${DOMAIN_TOKENS.badges.position.default} ${DOMAIN_TOKENS.badges.positionY["3xl"]}`;
14576
- };
14577
- const getAvailabilityLabel = () => {
14578
- switch (availability) {
14579
- case "sold_out":
14580
- return "Sold Out";
14581
- case "available_soon":
14582
- return "Available Soon";
14583
- case "available":
14584
- default:
14585
- return null;
14586
- }
14587
- };
14588
- const availabilityLabel = getAvailabilityLabel();
14589
- const formattedDate = date ? formatDate(date) : null;
14590
- const dateTimeValue = (() => {
14591
- if (!date) return null;
14592
- if (typeof date === "string") {
14593
- return new Date(date).toISOString();
14594
- }
14595
- if (date instanceof Date) {
14596
- return date.toISOString();
14597
- }
14598
- return new Date(date).toISOString();
14599
- })();
14600
- return /* @__PURE__ */ jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxs(
14601
- CardBase,
14602
- {
14603
- ref,
14604
- size,
14605
- variant: cardVariant,
14606
- className: cn(ticketCardVariants({ size, variant: cardVariant }), className),
14607
- ...props,
14608
- children: [
14609
- featured && featuredBadgeText && /* @__PURE__ */ jsx("div", { className: ticketCardBadgeVariants({ size }), children: /* @__PURE__ */ jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
14610
- vipBadgeText && /* @__PURE__ */ jsx("div", { className: cn(ticketCardBadgeVariants({ size }), getVipBadgePosition()), children: /* @__PURE__ */ jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "vip" }), children: vipBadgeText }) }),
14611
- discountBadgeText && /* @__PURE__ */ jsx("div", { className: cn(ticketCardBadgeVariants({ size }), getDiscountBadgePosition()), children: /* @__PURE__ */ jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "discount" }), children: discountBadgeText }) }),
14612
- showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size, children: /* @__PURE__ */ jsxs(
14613
- "div",
14614
- {
14615
- className: cn(
14616
- "relative w-full overflow-hidden",
14617
- DOMAIN_TOKENS.image.placeholder.gradient
14618
- ),
14619
- children: [
14620
- imageUrl ? /* @__PURE__ */ jsx(
14621
- "img",
14622
- {
14623
- src: imageUrl,
14624
- alt: title,
14625
- className: cn("h-full w-full", ticketCardImageTransformVariants({ size }))
14626
- }
14627
- ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
14628
- Icon2,
14629
- {
14630
- name: "info",
14631
- size: "xl",
14632
- color: "muted",
14633
- className: ICON_TOKENS.sizes["4xl"],
14634
- "aria-hidden": "true"
14635
- }
14636
- ) }),
14637
- /* @__PURE__ */ jsx("div", { className: ticketCardImageOverlayVariants({ size }) })
14638
- ]
14639
- }
14640
- ) }),
14641
- /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size, children: [
14642
- /* @__PURE__ */ jsx(Heading, { level: 3, className: ticketCardTitleVariants({ size }), children: href ? /* @__PURE__ */ jsx(Link, { href, variant: "ghost", children: title }) : title }),
14643
- formattedDate && dateTimeValue && /* @__PURE__ */ jsx("time", { dateTime: dateTimeValue, className: ticketCardDateVariants({ size }), children: formattedDate }),
14644
- description && /* @__PURE__ */ jsx(Text, { size: "sm", variant: "muted", className: ticketCardDescriptionVariants({ size }), children: description }),
14645
- (price || capacity) && /* @__PURE__ */ jsxs("div", { className: ticketCardPriceCapacityContainerVariants({ size }), children: [
14646
- price && /* @__PURE__ */ jsx(
14647
- Text,
14648
- {
14649
- size: size === "compact" ? "md" : "lg",
14650
- weight: "bold",
14651
- className: ticketCardPriceVariants({ size }),
14652
- children: price
14653
- }
14654
- ),
14655
- capacity && /* @__PURE__ */ jsx(
14656
- Text,
14657
- {
14658
- size: size === "compact" ? "xs" : "sm",
14659
- variant: "muted",
14660
- className: ticketCardCapacityVariants({ size }),
14661
- children: capacity
14662
- }
14663
- )
14664
- ] }),
14665
- availabilityLabel && /* @__PURE__ */ jsx("div", { className: ticketCardAvailabilityVariants({ availability }), children: /* @__PURE__ */ jsx(Text, { size: "xs", variant: availability === "sold_out" ? "muted" : "primary", children: availabilityLabel }) })
14666
- ] }),
14667
- /* @__PURE__ */ jsx(CardBaseFooterWrapper, { size, children: /* @__PURE__ */ jsxs("div", { className: cn("w-full", ticketCardFooterVariants({ size })), children: [
14668
- purchaseUrl && !isPurchaseDisabled && /* @__PURE__ */ jsxs(
14669
- Link,
14670
- {
14671
- href: purchaseUrl,
14672
- className: cn(
14673
- "w-full",
14674
- ticketCardPurchaseButtonVariants({ size, disabled: false })
14675
- ),
14676
- target: "_blank",
14677
- rel: "noopener noreferrer",
14678
- children: [
14679
- purchaseLabel,
14680
- /* @__PURE__ */ jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size }) })
14681
- ]
14682
- }
14683
- ),
14684
- (!purchaseUrl || isPurchaseDisabled) && /* @__PURE__ */ jsxs(
14685
- "div",
14686
- {
14687
- className: cn(
14688
- "w-full",
14689
- ticketCardPurchaseButtonVariants({ size, disabled: isPurchaseDisabled })
14690
- ),
14691
- children: [
14692
- purchaseLabel,
14693
- /* @__PURE__ */ jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size }) })
14694
- ]
14695
- }
14696
- )
14697
- ] }) })
14698
- ]
14699
- }
14700
- ) });
14701
- }
14702
- );
14703
- TicketCard.displayName = "TicketCard";
14704
-
14705
- export { ALERT_TOKENS, Alert, ArtistCard, BUTTON_TOKENS, Backdrop, Box, Breadcrumbs, Button, CARD_TOKENS, CHECKBOX_TOKENS, Card, CardBody, CardFooter, CardHeader, CategoryCard, Checkbox, Column, Container, Surface as ContainerSurface, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DATA_TOKENS, DOMAIN_TOKENS, DataListRoot as DataList, DataListItem, DataListLabel, DataListRoot, DataListValue, Dialog, DialogBody, DialogDescription, DialogFooter, DialogHeader, DialogRoot, DialogTitle, EmptyState, EmptyStateAction, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, EventCard, FieldRoot as Field, Flex, Grid, Heading, HoverCardContent, HoverCardRoot, HoverCardTrigger, ICONS_MAP, ICON_TOKENS, INPUT_TOKENS, Icon2 as Icon, IconArrowRight, IconCalendar, IconCheck, IconChevronDown, IconChevronRight, IconClose, IconError, IconInfo, IconLocation, IconMenu, IconSearch, IconSuccess, IconWarning, Input, Label2 as Label, MENU_TOKENS, MOTION_TOKENS, Modal, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalOverlay, ModalRoot, ModalTitle, ModalTrigger, NAVIGATION_TOKENS, NOTIFICATION_TOKENS, NotificationCenter, NotificationCenterDismissAll, NotificationCenterGroupHeader, NotificationCenterItem, NotificationCenterList, NotificationCenterPanel, NotificationCenterProvider, NotificationCenterTrigger, OVERLAY_TOKENS, POPOVER_TOKENS, Pagination, Portal3 as Portal, Progress, PromoCard, RADIO_TOKENS, Radio, RadioGroup, Row, SECTION_TOKENS, SURFACE_TOKENS, SWITCH_TOKENS, Section, SegmentedControl, Select, SelectContent, SelectGroup, SelectIcon, SelectItem, SelectItemIndicator, SelectItemText, SelectLabel, SelectRoot, SelectSeparator, SelectTrigger, SelectValue, SelectViewport, Skeleton, Stack, Stepper, Surface, TEXT_TOKENS, TOAST_TOKENS, TOOLTIP_TOKENS, TableRoot as Table, TableBody, TableCell, TableEmpty, TableExpandableContent, TableHead, TableHeader, TableLoadingState, TableRoot, TableRow, TableSortIcon, Tabs, Text, Textarea, TicketCard, Toast, ToastProvider, ToastViewport, Toaster, UI_COLORS, accentColoredShadows, accentColors, alertVariants, allCSSVariables, allCSSVariablesCSS, animations, baseColors, borderRadius, buttonVariants, chartColors, checkboxVariants, colorCSSVariables, componentRadius, componentShadowMapping, surfaceVariants as containerSurfaceVariants, cssVariableColorTokens, durations, easings, elevationShadows, focusRings, fontFamily, fontSize, fontSizeWithMd, fontWeight, generateCSSVariablesCSS, glowEffects, headingVariants, iconVariants, inputVariants, keyframes, labelVariants, layoutSpacing, letterSpacing, lineHeight, motionCSSVariables, motionV2CSSVariables, motionV2Combined, motionV2Durations, motionV2Easings, motionV2Fade, motionV2Scale, motionV2Slide, motionV2TailwindConfig, motionV2Transitions, primaryColoredShadows, primaryColors, radioVariants, radiusCSSVariables, reducedMotion, secondaryColors, segmentedControlItemVariants, segmentedControlRootVariants, semanticColors, semanticSpacing, shadowBase, shadowCSSVariables, shadowOpacity, skeletonVariants, spacing, spacingCSSVariables, springs, surfaceColors, surfaceVariants, tailwindMotionConfig, tailwindRadiusConfig, tailwindShadowConfig, tailwindSpacingConfig, tailwindThemeColors, tailwindTypographyConfig, textColors, textStyles, textVariants, textareaVariants, tokenSystemSummary, transitions, typographyCSSVariables, useNotificationCenter, useNotificationCenterContext, useTableContext, useToast };
12778
+ export { ALERT_TOKENS, Alert, BADGE_VARIANTS, BUTTON_TOKENS, Backdrop, Badge, Box, Breadcrumbs, Button, CARD_TOKENS, CHECKBOX_TOKENS, Card, CardBody, CardFooter, CardHeader, Checkbox, Column, Container, Surface as ContainerSurface, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DATA_TOKENS, DataListRoot as DataList, DataListItem, DataListLabel, DataListRoot, DataListValue, Dialog, DialogBody, DialogDescription, DialogFooter, DialogHeader, DialogRoot, DialogTitle, EmptyState, EmptyStateAction, EmptyStateDescription, EmptyStateIcon, EmptyStateTitle, FieldRoot as Field, Flex, Grid, Heading, HoverCardContent, HoverCardRoot, HoverCardTrigger, ICONS_MAP, ICON_TOKENS, INPUT_TOKENS, Icon2 as Icon, IconArrowRight, IconCalendar, IconCheck, IconChevronDown, IconChevronRight, IconClose, IconError, IconInfo, IconLocation, IconMenu, IconSearch, IconSuccess, IconWarning, Input, LINK_SIZES, LINK_VARIANTS, Label2 as Label, Link, MENU_TOKENS, MOTION_TOKENS, Modal, ModalClose, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalOverlay, ModalRoot, ModalTitle, ModalTrigger, NAVIGATION_TOKENS, NOTIFICATION_TOKENS, NotificationCenter, NotificationCenterDismissAll, NotificationCenterGroupHeader, NotificationCenterItem, NotificationCenterList, NotificationCenterPanel, NotificationCenterProvider, NotificationCenterTrigger, OVERLAY_TOKENS, POPOVER_TOKENS, Pagination, Portal3 as Portal, RADIO_TOKENS, Radio, RadioGroup, Row, SECTION_TOKENS, SURFACE_TOKENS, SWITCH_TOKENS, Section, SegmentedControl, Select, SelectContent, SelectGroup, SelectIcon, SelectItem, SelectItemIndicator, SelectItemText, SelectLabel, SelectRoot, SelectSeparator, SelectTrigger, SelectValue, SelectViewport, Skeleton, Stack, Stepper, Surface, TEXT_TOKENS, TOAST_TOKENS, TOOLTIP_TOKENS, TableRoot as Table, TableBody, TableCell, TableEmpty, TableExpandableContent, TableHead, TableHeader, TableLoadingState, TableRoot, TableRow, TableSortIcon, Tabs, Text, Textarea, Toast, ToastProvider, ToastViewport, Toaster, UI_COLORS, accentColoredShadows, accentColors, alertVariants, allCSSVariables, allCSSVariablesCSS, animations, badgeVariants, baseColors, borderRadius, buttonVariants, chartColors, checkboxVariants, colorCSSVariables, componentRadius, componentShadowMapping, surfaceVariants as containerSurfaceVariants, cssVariableColorTokens, durations, easings, elevationShadows, focusRings, fontFamily, fontSize, fontSizeWithMd, fontWeight, generateCSSVariablesCSS, glowEffects, headingVariants, iconVariants, inputVariants, keyframes, labelVariants, layoutSpacing, letterSpacing, lineHeight, linkVariants, motionCSSVariables, motionV2CSSVariables, motionV2Combined, motionV2Durations, motionV2Easings, motionV2Fade, motionV2Scale, motionV2Slide, motionV2TailwindConfig, motionV2Transitions, primaryColoredShadows, primaryColors, radioVariants, radiusCSSVariables, reducedMotion, secondaryColors, segmentedControlItemVariants, segmentedControlRootVariants, semanticColors, semanticSpacing, shadowBase, shadowCSSVariables, shadowOpacity, skeletonVariants, spacing, spacingCSSVariables, springs, surfaceColors, surfaceVariants, tailwindMotionConfig, tailwindRadiusConfig, tailwindShadowConfig, tailwindSpacingConfig, tailwindThemeColors, tailwindTypographyConfig, textColors, textStyles, textVariants, textareaVariants, tokenSystemSummary, transitions, typographyCSSVariables, useNotificationCenter, useNotificationCenterContext, useTableContext, useToast };