@tenerife.music/ui 1.0.13 → 1.0.15

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
@@ -699,6 +699,68 @@ var CARD_TOKENS = {
699
699
  }
700
700
  };
701
701
 
702
+ // src/tokens/components/artist.ts
703
+ var ARTIST_TOKENS = {
704
+ /**
705
+ * Image container tokens
706
+ * Layout classes for image container wrapper
707
+ */
708
+ image: {
709
+ /**
710
+ * Container layout tokens
711
+ * Positioning and sizing for image container
712
+ */
713
+ container: {
714
+ /**
715
+ * Base container layout
716
+ * Relative positioning, full width, overflow hidden
717
+ * Uses Tailwind layout utilities (allowed per architecture)
718
+ */
719
+ layout: "relative w-full overflow-hidden"
720
+ },
721
+ /**
722
+ * Image sizing tokens
723
+ * Full width and height for images
724
+ */
725
+ sizing: {
726
+ /**
727
+ * Full size image
728
+ * Uses Tailwind sizing utilities (allowed per architecture)
729
+ */
730
+ full: "h-full w-full"
731
+ },
732
+ /**
733
+ * Placeholder container tokens
734
+ * Layout for placeholder icon container when no image is provided
735
+ */
736
+ placeholder: {
737
+ /**
738
+ * Placeholder container layout
739
+ * Flex centering for placeholder icon
740
+ * Uses Tailwind layout utilities (allowed per architecture)
741
+ */
742
+ container: "flex h-full w-full items-center justify-center"
743
+ }
744
+ },
745
+ /**
746
+ * Footer border tokens
747
+ * Border styling for card footer separator
748
+ */
749
+ footer: {
750
+ /**
751
+ * Footer border tokens
752
+ * Top border separator for footer section
753
+ */
754
+ border: {
755
+ /**
756
+ * Footer border top
757
+ * Uses semantic border color token
758
+ */
759
+ top: "border-t border-border"
760
+ }
761
+ }
762
+ };
763
+
702
764
  // src/tokens/spacing.ts
703
765
  var spacing = {
704
766
  // Zero spacing
@@ -961,101 +1023,6 @@ var tailwindSpacingConfig = {
961
1023
 
962
1024
  // src/tokens/components/data.ts
963
1025
  var DATA_TOKENS = {
964
- /**
965
- * Table Component Tokens
966
- */
967
- table: {
968
- /**
969
- * Table row heights by size
970
- * Maps to Tailwind height utilities
971
- */
972
- rowHeight: {
973
- sm: "h-8",
974
- // 32px (2rem) - compact rows
975
- md: "h-10",
976
- // 40px (2.5rem) - default rows
977
- lg: "h-12"
978
- // 48px (3rem) - spacious rows
979
- },
980
- /**
981
- * Table cell and header padding by size
982
- * Maps to semantic spacing tokens
983
- */
984
- padding: {
985
- cell: {
986
- sm: "p-xs",
987
- // 4px (0.25rem) - maps to semanticSpacing.xs
988
- md: "p-sm",
989
- // 8px (0.5rem) - maps to semanticSpacing.sm
990
- lg: "p-md"
991
- // 16px (1rem) - maps to semanticSpacing.md
992
- },
993
- header: {
994
- sm: "px-xs py-sm",
995
- // 4px horizontal, 8px vertical
996
- md: "px-sm py-md",
997
- // 8px horizontal, 16px vertical
998
- lg: "px-md py-lg"
999
- // 16px horizontal, 24px vertical
1000
- }
1001
- },
1002
- /**
1003
- * Gap between table cells (horizontal spacing)
1004
- */
1005
- gap: {
1006
- sm: "gap-xs",
1007
- // 4px (0.25rem) - maps to semanticSpacing.xs
1008
- md: "gap-sm"
1009
- // 8px (0.5rem) - maps to semanticSpacing.sm
1010
- },
1011
- /**
1012
- * Border radius for table
1013
- */
1014
- radius: {
1015
- default: "rounded-md"
1016
- // 6px (0.375rem) - maps to borderRadius.md
1017
- },
1018
- /**
1019
- * Shadow tokens for table
1020
- * Maps to foundation elevation shadow tokens
1021
- */
1022
- shadow: {
1023
- none: "shadow-none",
1024
- // No shadow
1025
- subtle: "shadow-sm"
1026
- // Maps to elevationShadows.sm
1027
- },
1028
- /**
1029
- * Typography tokens for table headers and cells
1030
- * Maps to foundation typography fontSize tokens
1031
- */
1032
- typography: {
1033
- header: {
1034
- fontSize: "text-sm",
1035
- // Maps to fontSize.sm[0]
1036
- fontWeight: "font-semibold"
1037
- // Maps to fontWeight.semibold
1038
- },
1039
- cell: {
1040
- fontSize: "text-sm",
1041
- // Maps to fontSize.sm[0]
1042
- fontWeight: "font-normal"
1043
- // Maps to fontWeight.normal
1044
- }
1045
- },
1046
- /**
1047
- * Color tokens for table states
1048
- * Uses semantic color tokens
1049
- */
1050
- colors: {
1051
- border: "border-border",
1052
- // Border color
1053
- rowHover: "hover:bg-muted/50",
1054
- // Row hover background
1055
- rowSelected: "bg-muted"
1056
- // Selected row background
1057
- }
1058
- },
1059
1026
  /**
1060
1027
  * Skeleton Component Tokens
1061
1028
  */
@@ -1121,97 +1088,6 @@ var DATA_TOKENS = {
1121
1088
  inline: "inline-block"
1122
1089
  // Inline block display
1123
1090
  }
1124
- },
1125
- /**
1126
- * EmptyState Component Tokens
1127
- */
1128
- emptyState: {
1129
- /**
1130
- * Spacing tokens for EmptyState
1131
- * Maps to semantic spacing tokens
1132
- */
1133
- spacing: {
1134
- gap: "gap-md",
1135
- // 16px (1rem) - gap between elements - maps to semanticSpacing.md
1136
- padding: "p-lg"
1137
- // 24px (1.5rem) - container padding - maps to semanticSpacing.lg
1138
- },
1139
- /**
1140
- * Border radius for EmptyState container
1141
- */
1142
- radius: {
1143
- default: "rounded-xl"
1144
- // 12px (0.75rem) - maps to borderRadius.xl
1145
- },
1146
- /**
1147
- * Icon sizes by variant
1148
- * Maps to Tailwind size utilities
1149
- */
1150
- iconSize: {
1151
- sm: "size-8",
1152
- // 32px (2rem)
1153
- md: "size-12",
1154
- // 48px (3rem)
1155
- lg: "size-16"
1156
- // 64px (4rem)
1157
- },
1158
- /**
1159
- * Typography tokens for EmptyState
1160
- * Maps to foundation typography tokens
1161
- */
1162
- typography: {
1163
- title: {
1164
- fontSize: "text-lg",
1165
- // Maps to fontSize.lg[0]
1166
- fontWeight: "font-semibold"
1167
- // Maps to fontWeight.semibold
1168
- },
1169
- description: {
1170
- fontSize: "text-sm",
1171
- // Maps to fontSize.sm[0]
1172
- fontWeight: "font-normal"
1173
- // Maps to fontWeight.normal
1174
- }
1175
- }
1176
- },
1177
- /**
1178
- * DataList Component Tokens
1179
- */
1180
- dataList: {
1181
- /**
1182
- * Spacing tokens for DataList
1183
- * Maps to semantic spacing tokens
1184
- */
1185
- spacing: {
1186
- gap: "gap-md",
1187
- // 16px (1rem) - gap between items - maps to semanticSpacing.md
1188
- padding: "p-md"
1189
- // 16px (1rem) - container padding - maps to semanticSpacing.md
1190
- },
1191
- /**
1192
- * Label width tokens (for desktop horizontal layout)
1193
- * Maps to Tailwind width utilities
1194
- */
1195
- labelWidth: {
1196
- sm: "w-24",
1197
- // 96px (6rem) - small label width
1198
- md: "w-32",
1199
- // 128px (8rem) - default label width
1200
- lg: "w-40"
1201
- // 160px (10rem) - large label width
1202
- },
1203
- /**
1204
- * Row padding tokens
1205
- * Maps to semantic spacing tokens
1206
- */
1207
- rowPadding: {
1208
- sm: "py-xs",
1209
- // 4px (0.25rem) - maps to semanticSpacing.xs
1210
- md: "py-sm",
1211
- // 8px (0.5rem) - maps to semanticSpacing.sm
1212
- lg: "py-md"
1213
- // 16px (1rem) - maps to semanticSpacing.md
1214
- }
1215
1091
  }
1216
1092
  };
1217
1093
 
@@ -1556,7 +1432,7 @@ var DOMAIN_TOKENS = {
1556
1432
  },
1557
1433
  /**
1558
1434
  * Image tokens for card media
1559
- * Defines aspect ratio, radius, and overlay styles
1435
+ * Defines aspect ratio, radius, overlay styles, and placeholder gradients
1560
1436
  */
1561
1437
  image: {
1562
1438
  /**
@@ -1579,6 +1455,40 @@ var DOMAIN_TOKENS = {
1579
1455
  overlay: {
1580
1456
  gradient: "bg-gradient-to-t from-black/60 via-transparent to-transparent"
1581
1457
  // Gradient overlay for image hover states
1458
+ },
1459
+ /**
1460
+ * Placeholder gradient tokens for image placeholders
1461
+ * Used when no image URL is provided
1462
+ */
1463
+ placeholder: {
1464
+ gradient: "bg-gradient-to-br from-muted to-muted/50"
1465
+ // Placeholder gradient background
1466
+ }
1467
+ },
1468
+ /**
1469
+ * Text tokens for card text elements
1470
+ * Defines hover states and line clamping for titles and descriptions
1471
+ */
1472
+ text: {
1473
+ /**
1474
+ * Hover state tokens for text elements
1475
+ * Used for interactive text elements like titles
1476
+ */
1477
+ hover: {
1478
+ primary: "group-hover:text-primary"
1479
+ // Hover state for primary text color
1480
+ },
1481
+ /**
1482
+ * Line clamp tokens for text truncation
1483
+ * Used for limiting text to specific number of lines
1484
+ */
1485
+ lineClamp: {
1486
+ one: "line-clamp-1",
1487
+ // Single line clamp
1488
+ two: "line-clamp-2",
1489
+ // Two line clamp
1490
+ three: "line-clamp-3"
1491
+ // Three line clamp
1582
1492
  }
1583
1493
  },
1584
1494
  /**
@@ -1801,6 +1711,94 @@ var DOMAIN_TOKENS = {
1801
1711
  height: "h-6"
1802
1712
  // References spacing[6] (1.5rem / 24px) via Tailwind
1803
1713
  }
1714
+ },
1715
+ /**
1716
+ * CTA (Call-to-Action) button tokens for domain card components
1717
+ * Provides PromoCard-specific CTA button styling tokens
1718
+ * These tokens are semantically owned by domain card components, not by the Button component
1719
+ * References foundation tokens (spacing, typography, radius, shadows, motion) for consistency
1720
+ */
1721
+ cta: {
1722
+ /**
1723
+ * CTA button styling tokens
1724
+ * Used by PromoCard and other domain card components for CTA button elements
1725
+ */
1726
+ button: {
1727
+ /**
1728
+ * Button heights by size
1729
+ * Maps to Tailwind height utilities: h-8, h-9
1730
+ */
1731
+ height: {
1732
+ sm: "h-8",
1733
+ // 32px (2rem) - compact size
1734
+ md: "h-9"
1735
+ // 36px (2.25rem) - default size
1736
+ },
1737
+ /**
1738
+ * Button padding by size
1739
+ * Horizontal and vertical padding values
1740
+ * References semanticSpacing tokens
1741
+ */
1742
+ padding: {
1743
+ horizontal: {
1744
+ sm: "px-sm",
1745
+ // 8px (0.5rem) - maps to semanticSpacing.sm
1746
+ md: "px-md"
1747
+ // 16px (1rem) - maps to semanticSpacing.md
1748
+ },
1749
+ vertical: {
1750
+ sm: "py-xs"
1751
+ // 4px (0.25rem) - maps to semanticSpacing.xs
1752
+ }
1753
+ },
1754
+ /**
1755
+ * Border radius for CTA buttons
1756
+ * References borderRadius.md (6px / 0.375rem)
1757
+ * Using Tailwind class "rounded-md" which maps to borderRadius.md
1758
+ */
1759
+ radius: "rounded-md",
1760
+ // References borderRadius.md via Tailwind
1761
+ /**
1762
+ * Font sizes by button size
1763
+ * Maps to foundation typography fontSize tokens
1764
+ */
1765
+ fontSize: {
1766
+ sm: "text-xs",
1767
+ // Maps to fontSize.xs[0]
1768
+ md: "text-sm"
1769
+ // Maps to fontSize.sm[0]
1770
+ },
1771
+ /**
1772
+ * Shadow tokens for CTA buttons
1773
+ * Maps to foundation elevation shadow tokens
1774
+ */
1775
+ shadow: {
1776
+ primary: "shadow"
1777
+ // Maps to elevationShadows.xs (primary variant uses shadow)
1778
+ },
1779
+ /**
1780
+ * Color tokens for CTA button variants
1781
+ * Uses semantic color tokens that map to CSS variables
1782
+ */
1783
+ variant: {
1784
+ primary: {
1785
+ background: "bg-primary",
1786
+ // Primary background using CSS var
1787
+ text: "text-primary-foreground",
1788
+ // Primary text using CSS var
1789
+ hover: "hover:bg-primary/90"
1790
+ // Primary hover using CSS var
1791
+ }
1792
+ },
1793
+ /**
1794
+ * Transition tokens for CTA buttons
1795
+ * References MOTION_TOKENS for transitions
1796
+ */
1797
+ transition: {
1798
+ colors: "transition-colors"
1799
+ // Color transition using motion tokens
1800
+ }
1801
+ }
1804
1802
  }
1805
1803
  };
1806
1804
 
@@ -1904,40 +1902,6 @@ var INPUT_TOKENS = {
1904
1902
  text: "text-[hsl(var(--foreground))]"
1905
1903
  // File input text color using CSS var
1906
1904
  },
1907
- /**
1908
- * Select listbox tokens
1909
- * Styling for select dropdown container
1910
- */
1911
- selectListbox: {
1912
- border: "border border-[hsl(var(--border))]",
1913
- // Border color using CSS var
1914
- background: "bg-[hsl(var(--popover))]",
1915
- // Background using CSS var
1916
- text: "text-[hsl(var(--popover-foreground))]",
1917
- // Text color using CSS var
1918
- radius: "rounded-md",
1919
- // Radius token (6px)
1920
- shadow: "shadow-md"
1921
- // Shadow token
1922
- },
1923
- /**
1924
- * Select option tokens
1925
- * Styling for select option items
1926
- */
1927
- selectOption: {
1928
- focus: {
1929
- background: "focus:bg-[hsl(var(--accent))]",
1930
- // Focus background using CSS var
1931
- text: "focus:text-[hsl(var(--accent-foreground))]"
1932
- // Focus text using CSS var
1933
- },
1934
- selected: {
1935
- background: "bg-[hsl(var(--accent))]",
1936
- // Selected background using CSS var
1937
- text: "text-[hsl(var(--accent-foreground))]"
1938
- // Selected text using CSS var
1939
- }
1940
- },
1941
1905
  /**
1942
1906
  * Variant-based tokens
1943
1907
  * Border, background, and text colors for different variants
@@ -2151,35 +2115,217 @@ var INPUT_TOKENS = {
2151
2115
  }
2152
2116
  };
2153
2117
 
2154
- // src/tokens/components/checkbox.ts
2155
- var CHECKBOX_TOKENS = {
2118
+ // src/tokens/components/textarea.ts
2119
+ var TEXTAREA_TOKENS = {
2156
2120
  /**
2157
- * Checkbox sizes by size variant
2158
- * Supports xs, sm, md, lg, xl sizes
2159
- * Checkboxes are typically square and smaller than input fields
2121
+ * Shadow token
2122
+ * Maps to foundation elevation shadow tokens
2160
2123
  */
2161
- size: {
2162
- xs: {
2163
- width: "w-3.5",
2164
- // 14px (0.875rem)
2165
- height: "h-3.5",
2166
- // 14px (0.875rem)
2167
- radius: "rounded-sm",
2168
- // 4px (0.25rem)
2169
- iconSize: "size-2.5"
2170
- // 10px (0.625rem)
2124
+ shadow: "shadow-sm",
2125
+ // Maps to elevationShadows.sm
2126
+ /**
2127
+ * Variant-based tokens
2128
+ * Border, background, and text colors for different variants
2129
+ * All use CSS variable references for theme support
2130
+ */
2131
+ variant: {
2132
+ primary: {
2133
+ border: "border-[hsl(var(--tm-primary))]",
2134
+ // Primary border color
2135
+ background: "bg-[hsl(var(--tm-primary))]",
2136
+ // Primary background
2137
+ text: "text-[hsl(var(--tm-primary-foreground))]",
2138
+ // Primary text color
2139
+ focus: "focus-visible:shadow-[var(--focus-ring-primary)]"
2140
+ // Primary focus ring
2171
2141
  },
2172
- sm: {
2173
- width: "w-4",
2174
- // 16px (1rem)
2175
- height: "h-4",
2176
- // 16px (1rem)
2177
- radius: "rounded-sm",
2178
- // 4px (0.25rem)
2179
- iconSize: "size-3"
2180
- // 12px (0.75rem)
2142
+ secondary: {
2143
+ border: "border-[hsl(var(--tm-secondary))]",
2144
+ // Secondary border color
2145
+ background: "bg-[hsl(var(--tm-secondary))]",
2146
+ // Secondary background
2147
+ text: "text-[hsl(var(--tm-secondary-foreground))]",
2148
+ // Secondary text color
2149
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]"
2150
+ // Default focus ring
2181
2151
  },
2182
- md: {
2152
+ outline: {
2153
+ border: "border-[hsl(var(--input))]",
2154
+ // Input border color
2155
+ background: "bg-transparent",
2156
+ // Transparent background
2157
+ text: "text-[hsl(var(--foreground))]",
2158
+ // Foreground text color
2159
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]"
2160
+ // Default focus ring
2161
+ },
2162
+ ghost: {
2163
+ border: "border-transparent",
2164
+ // Transparent border
2165
+ background: "bg-transparent",
2166
+ // Transparent background
2167
+ text: "text-[hsl(var(--foreground))]",
2168
+ // Foreground text color
2169
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]"
2170
+ // Default focus ring
2171
+ },
2172
+ destructive: {
2173
+ border: "border-[hsl(var(--destructive))]",
2174
+ // Destructive border color
2175
+ background: "bg-[hsl(var(--destructive))]",
2176
+ // Destructive background
2177
+ text: "text-[hsl(var(--destructive-foreground))]",
2178
+ // Destructive text color
2179
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]"
2180
+ // Default focus ring
2181
+ }
2182
+ },
2183
+ /**
2184
+ * State-based tokens
2185
+ * Border, background, and text colors for different states
2186
+ * All use CSS variable references for theme support
2187
+ */
2188
+ state: {
2189
+ border: {
2190
+ default: "border-[hsl(var(--input))]",
2191
+ // Default border color using CSS var
2192
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]",
2193
+ // Focus ring using CSS var
2194
+ error: "border-[hsl(var(--destructive))]",
2195
+ // Error state border using CSS var
2196
+ success: "border-[hsl(var(--semantic-success))]",
2197
+ // Success state border using CSS var
2198
+ disabled: "border-[hsl(var(--input))]"
2199
+ // Disabled state border (same as default)
2200
+ },
2201
+ background: {
2202
+ default: "bg-transparent",
2203
+ // Default background
2204
+ disabled: "bg-transparent"
2205
+ // Disabled background (same as default)
2206
+ },
2207
+ text: {
2208
+ default: "text-[hsl(var(--foreground))]",
2209
+ // Default text color using CSS var
2210
+ placeholder: "placeholder:text-[hsl(var(--muted-foreground))]",
2211
+ // Placeholder text color using CSS var
2212
+ disabled: "disabled:opacity-50"
2213
+ // Disabled text opacity
2214
+ }
2215
+ },
2216
+ /**
2217
+ * Width tokens
2218
+ * Common width utilities
2219
+ */
2220
+ width: {
2221
+ full: "w-full"
2222
+ // Full width (100%)
2223
+ },
2224
+ /**
2225
+ * Message tokens
2226
+ * Spacing, positioning, and styling for helper text and error messages
2227
+ */
2228
+ message: {
2229
+ // 8px (0.5rem) - spacing between control and message
2230
+ position: {
2231
+ bottom: "bottom-sm",
2232
+ // 8px (0.5rem) - bottom position for character counter
2233
+ right: "right-sm"
2234
+ // 8px (0.5rem) - right position for character counter
2235
+ },
2236
+ color: {
2237
+ default: "text-[hsl(var(--muted-foreground))]",
2238
+ // Default message color
2239
+ error: "text-[hsl(var(--destructive))]"}
2240
+ },
2241
+ /**
2242
+ * Size-based token structure
2243
+ * Organized by size for easy access
2244
+ */
2245
+ size: {
2246
+ xs: {
2247
+ padding: {
2248
+ horizontal: "px-xs",
2249
+ vertical: "py-xs"
2250
+ },
2251
+ radius: "rounded-sm",
2252
+ fontSize: "text-xs"},
2253
+ sm: {
2254
+ padding: {
2255
+ horizontal: "px-sm",
2256
+ vertical: "py-xs"
2257
+ },
2258
+ radius: "rounded-md",
2259
+ fontSize: "text-sm"},
2260
+ md: {
2261
+ padding: {
2262
+ horizontal: "px-sm",
2263
+ vertical: "py-xs"
2264
+ },
2265
+ radius: "rounded-md",
2266
+ fontSize: "text-base",
2267
+ fontSizeResponsive: "md:text-sm"},
2268
+ lg: {
2269
+ padding: {
2270
+ horizontal: "px-md",
2271
+ vertical: "py-sm"
2272
+ },
2273
+ radius: "rounded-md",
2274
+ fontSize: "text-base"},
2275
+ xl: {
2276
+ padding: {
2277
+ horizontal: "px-lg",
2278
+ vertical: "py-md"
2279
+ },
2280
+ radius: "rounded-lg",
2281
+ fontSize: "text-lg"}
2282
+ }
2283
+ };
2284
+
2285
+ // src/tokens/components/form.ts
2286
+ var FORM_TOKENS = {
2287
+ /**
2288
+ * Label tokens
2289
+ * Spacing and styling for labels
2290
+ */
2291
+ label: {
2292
+ // 8px (0.5rem) - spacing between label and control
2293
+ /**
2294
+ * Color for required asterisk mark
2295
+ */
2296
+ requiredMark: "text-destructive"
2297
+ // Color for required asterisk
2298
+ }};
2299
+
2300
+ // src/tokens/components/checkbox.ts
2301
+ var CHECKBOX_TOKENS = {
2302
+ /**
2303
+ * Checkbox sizes by size variant
2304
+ * Supports xs, sm, md, lg, xl sizes
2305
+ * Checkboxes are typically square and smaller than input fields
2306
+ */
2307
+ size: {
2308
+ xs: {
2309
+ width: "w-3.5",
2310
+ // 14px (0.875rem)
2311
+ height: "h-3.5",
2312
+ // 14px (0.875rem)
2313
+ radius: "rounded-sm",
2314
+ // 4px (0.25rem)
2315
+ iconSize: "size-2.5"
2316
+ // 10px (0.625rem)
2317
+ },
2318
+ sm: {
2319
+ width: "w-4",
2320
+ // 16px (1rem)
2321
+ height: "h-4",
2322
+ // 16px (1rem)
2323
+ radius: "rounded-sm",
2324
+ // 4px (0.25rem)
2325
+ iconSize: "size-3"
2326
+ // 12px (0.75rem)
2327
+ },
2328
+ md: {
2183
2329
  width: "w-4.5",
2184
2330
  // 18px (1.125rem) - default
2185
2331
  height: "h-4.5",
@@ -4218,6 +4364,14 @@ var DROPDOWN_TOKENS = {
4218
4364
  // 256px
4219
4365
  }
4220
4366
  },
4367
+ /**
4368
+ * Width tokens
4369
+ * Common width utilities
4370
+ */
4371
+ width: {
4372
+ full: "w-full"
4373
+ // Full width (100%)
4374
+ },
4221
4375
  /**
4222
4376
  * Item tokens by size
4223
4377
  * Individual menu item
@@ -5027,64 +5181,352 @@ var MODAL_TOKENS = {
5027
5181
  }
5028
5182
  };
5029
5183
 
5030
- // src/tokens/motion/v2.ts
5031
- var motionV2Durations = {
5032
- fast: "150ms",
5033
- // Quick interactions
5034
- normal: "250ms",
5035
- // Default transitions
5036
- slow: "350ms",
5037
- // Emphasized animations
5038
- reduced: "0ms"
5039
- // For prefers-reduced-motion
5040
- };
5041
- var motionV2Easings = {
5042
- soft: "cubic-bezier(0.22, 1, 0.36, 1)",
5043
- // Gentle, smooth
5044
- standard: "cubic-bezier(0.4, 0, 0.2, 1)",
5045
- // Material Design standard
5046
- emphasized: "cubic-bezier(0.2, 0, 0, 1)"
5047
- // Strong, decisive
5048
- };
5049
- var motionV2Transitions = {
5050
- fast: `${motionV2Durations.fast} ${motionV2Easings.standard}`,
5051
- normal: `${motionV2Durations.normal} ${motionV2Easings.standard}`,
5052
- slow: `${motionV2Durations.slow} ${motionV2Easings.emphasized}`,
5053
- soft: `${motionV2Durations.normal} ${motionV2Easings.soft}`,
5054
- reduced: `${motionV2Durations.reduced} linear`
5055
- };
5056
- var motionV2Fade = {
5057
- in: {
5058
- from: { opacity: 0 },
5059
- to: { opacity: 1 }
5184
+ // src/tokens/components/table.ts
5185
+ var TABLE_TOKENS = {
5186
+ /**
5187
+ * Table cell and header padding by size
5188
+ * Maps to semantic spacing tokens
5189
+ */
5190
+ padding: {
5191
+ cell: {
5192
+ sm: "p-xs",
5193
+ // 4px (0.25rem) - maps to semanticSpacing.xs
5194
+ md: "p-sm",
5195
+ // 8px (0.5rem) - maps to semanticSpacing.sm
5196
+ lg: "p-md"
5197
+ // 16px (1rem) - maps to semanticSpacing.md
5198
+ },
5199
+ header: {
5200
+ sm: "px-xs py-sm",
5201
+ // 4px horizontal, 8px vertical
5202
+ md: "px-sm py-md",
5203
+ // 8px horizontal, 16px vertical
5204
+ lg: "px-md py-lg"
5205
+ // 16px horizontal, 24px vertical
5206
+ }
5060
5207
  },
5061
- out: {
5062
- from: { opacity: 1 },
5063
- to: { opacity: 0 }
5064
- }
5065
- };
5066
- var motionV2Scale = {
5067
- in: {
5068
- from: { transform: "scale(0.95)", opacity: 0 },
5069
- to: { transform: "scale(1)", opacity: 1 }
5208
+ /**
5209
+ * Border radius for table
5210
+ */
5211
+ radius: {
5212
+ default: "rounded-md"
5213
+ // 6px (0.375rem) - maps to borderRadius.md
5070
5214
  },
5071
- out: {
5072
- from: { transform: "scale(1)", opacity: 1 },
5073
- to: { transform: "scale(0.95)", opacity: 0 }
5074
- }
5075
- };
5076
- var motionV2Slide = {
5077
- up: {
5078
- in: {
5079
- from: { transform: "translateY(100%)", opacity: 0 },
5080
- to: { transform: "translateY(0)", opacity: 1 }
5215
+ /**
5216
+ * Shadow tokens for table
5217
+ * Maps to foundation elevation shadow tokens
5218
+ */
5219
+ shadow: {
5220
+ // No shadow
5221
+ subtle: "shadow-sm"
5222
+ // Maps to elevationShadows.sm
5223
+ },
5224
+ /**
5225
+ * Typography tokens for table headers and cells
5226
+ * Maps to foundation typography fontSize tokens
5227
+ */
5228
+ typography: {
5229
+ header: {
5230
+ fontSize: "text-sm",
5231
+ // Maps to fontSize.sm[0]
5232
+ fontWeight: "font-semibold"
5233
+ // Maps to fontWeight.semibold
5081
5234
  },
5082
- out: {
5083
- from: { transform: "translateY(0)", opacity: 1 },
5084
- to: { transform: "translateY(100%)", opacity: 0 }
5235
+ cell: {
5236
+ fontSize: "text-sm",
5237
+ // Maps to fontSize.sm[0]
5238
+ fontWeight: "font-normal"
5239
+ // Maps to fontWeight.normal
5085
5240
  }
5086
5241
  },
5087
- down: {
5242
+ /**
5243
+ * Color tokens for table states
5244
+ * Uses semantic color tokens
5245
+ */
5246
+ colors: {
5247
+ border: "border-border",
5248
+ // Border color
5249
+ rowHover: "hover:bg-muted/50",
5250
+ // Row hover background
5251
+ rowSelected: "bg-muted"
5252
+ // Selected row background
5253
+ },
5254
+ /**
5255
+ * Border tokens for table
5256
+ */
5257
+ border: {
5258
+ bottom: "border-b"
5259
+ // Border bottom for rows and headers
5260
+ },
5261
+ /**
5262
+ * Layout tokens for table container and base styles
5263
+ */
5264
+ layout: {
5265
+ overflow: "overflow-x-auto",
5266
+ // Table container overflow
5267
+ table: "w-full border-collapse"
5268
+ // Table base styles
5269
+ },
5270
+ /**
5271
+ * Sticky header tokens
5272
+ * For sticky header positioning and styling
5273
+ */
5274
+ sticky: {
5275
+ header: "sticky top-0 z-10 bg-background"
5276
+ // Sticky header styles
5277
+ },
5278
+ /**
5279
+ * Expandable row tokens
5280
+ * For expandable content styling
5281
+ */
5282
+ expandable: {
5283
+ padding: "p-md",
5284
+ // Expandable content padding - maps to semanticSpacing.md
5285
+ container: "p-0",
5286
+ // Expandable container padding
5287
+ transition: "overflow-hidden transition-all duration-normal ease-in-out",
5288
+ // Transition styles
5289
+ expanded: "max-h-[100vh] opacity-100",
5290
+ // Expanded state
5291
+ collapsed: "max-h-0 opacity-0",
5292
+ // Collapsed state
5293
+ cursor: "cursor-pointer",
5294
+ // Cursor for expandable rows
5295
+ content: {
5296
+ expanded: "block",
5297
+ // Expanded content display
5298
+ collapsed: "hidden"
5299
+ // Collapsed content display
5300
+ }
5301
+ },
5302
+ /**
5303
+ * Loading state tokens
5304
+ * For loading state cell styling
5305
+ */
5306
+ loading: {
5307
+ cellPadding: "p-sm",
5308
+ // Loading state cell padding - maps to semanticSpacing.sm
5309
+ skeletonWidth: "w-full"
5310
+ // Skeleton width
5311
+ },
5312
+ /**
5313
+ * Empty state tokens
5314
+ * For empty state cell styling
5315
+ */
5316
+ empty: {
5317
+ padding: "p-8"
5318
+ // Empty state padding - maps to semanticSpacing.2xl
5319
+ },
5320
+ /**
5321
+ * Sortable header tokens
5322
+ * For sortable header styling and interactions
5323
+ */
5324
+ sortable: {
5325
+ hover: "hover:bg-muted/50",
5326
+ // Sortable header hover
5327
+ gap: "gap-2",
5328
+ // Sort icon gap - maps to semanticSpacing.sm
5329
+ cursor: "cursor-pointer select-none",
5330
+ // Sortable cursor
5331
+ container: "flex items-center",
5332
+ // Sortable header container
5333
+ icon: {
5334
+ base: "inline-flex size-4 items-center text-muted-foreground transition-transform",
5335
+ // Sort icon base styles
5336
+ rotated: "rotate-180",
5337
+ // Rotated state (descending)
5338
+ inactive: "opacity-30"
5339
+ // Inactive state (no sort)
5340
+ }
5341
+ }
5342
+ };
5343
+
5344
+ // src/tokens/components/data-list.ts
5345
+ var DATA_LIST_TOKENS = {
5346
+ /**
5347
+ * Spacing tokens for DataList
5348
+ * Maps to semantic spacing tokens
5349
+ */
5350
+ spacing: {
5351
+ gap: "gap-md"},
5352
+ /**
5353
+ * Label width tokens (for desktop horizontal layout)
5354
+ * Maps to Tailwind width utilities
5355
+ */
5356
+ labelWidth: {
5357
+ // 96px (6rem) - small label width
5358
+ md: "w-32"},
5359
+ /**
5360
+ * Row padding tokens
5361
+ * Maps to semantic spacing tokens
5362
+ */
5363
+ rowPadding: {
5364
+ sm: "py-xs",
5365
+ // 4px (0.25rem) - maps to semanticSpacing.xs
5366
+ md: "py-sm",
5367
+ // 8px (0.5rem) - maps to semanticSpacing.sm
5368
+ lg: "py-md"
5369
+ // 16px (1rem) - maps to semanticSpacing.md
5370
+ },
5371
+ /**
5372
+ * Item tokens
5373
+ * For individual DataList item styling
5374
+ */
5375
+ item: {
5376
+ /**
5377
+ * Border tokens for items
5378
+ */
5379
+ border: "border-b border-border last:border-0",
5380
+ // Item borders
5381
+ /**
5382
+ * Responsive layout tokens
5383
+ */
5384
+ layout: {
5385
+ mobile: "flex flex-col",
5386
+ // Mobile layout - vertical
5387
+ desktop: "md:flex-row md:items-center"
5388
+ // Desktop layout - horizontal
5389
+ }
5390
+ },
5391
+ /**
5392
+ * Label tokens
5393
+ * For DataList label styling
5394
+ */
5395
+ label: {
5396
+ mobile: "mb-1 font-semibold text-foreground",
5397
+ // Mobile label styles
5398
+ desktop: "md:mb-0"
5399
+ // Desktop label margin override
5400
+ },
5401
+ /**
5402
+ * Value tokens
5403
+ * For DataList value styling
5404
+ */
5405
+ value: {
5406
+ color: "text-muted-foreground",
5407
+ // Value text color
5408
+ flex: "flex-1"
5409
+ // Value flex grow
5410
+ }
5411
+ };
5412
+
5413
+ // src/tokens/components/empty-state.ts
5414
+ var EMPTY_STATE_TOKENS = {
5415
+ /**
5416
+ * Spacing tokens for EmptyState
5417
+ * Maps to semantic spacing tokens
5418
+ */
5419
+ spacing: {
5420
+ // 24px (1.5rem) - container padding - maps to semanticSpacing.lg
5421
+ action: "mt-2"
5422
+ // Action button margin top - maps to semanticSpacing.xs
5423
+ },
5424
+ /**
5425
+ * Icon sizes by variant
5426
+ * Maps to Tailwind size utilities
5427
+ */
5428
+ icon: {
5429
+ size: {
5430
+ sm: "size-8",
5431
+ // 32px (2rem)
5432
+ md: "size-12",
5433
+ // 48px (3rem)
5434
+ lg: "size-16"
5435
+ // 64px (4rem)
5436
+ },
5437
+ container: "flex items-center justify-center text-muted-foreground"
5438
+ // Icon container styles
5439
+ },
5440
+ /**
5441
+ * Typography tokens for EmptyState
5442
+ * Maps to foundation typography tokens
5443
+ */
5444
+ typography: {
5445
+ title: {
5446
+ fontSize: "text-lg",
5447
+ // Maps to fontSize.lg[0]
5448
+ fontWeight: "font-semibold",
5449
+ // Maps to fontWeight.semibold
5450
+ color: "text-foreground"
5451
+ // Title text color
5452
+ },
5453
+ description: {
5454
+ fontSize: "text-sm",
5455
+ // Maps to fontSize.sm[0]
5456
+ fontWeight: "font-normal",
5457
+ // Maps to fontWeight.normal
5458
+ color: "text-muted-foreground",
5459
+ // Description text color
5460
+ maxWidth: "max-w-md"
5461
+ // Maximum width for description
5462
+ }
5463
+ },
5464
+ /**
5465
+ * Alignment tokens
5466
+ * For text alignment in EmptyState
5467
+ */
5468
+ alignment: {
5469
+ center: "text-center"}
5470
+ };
5471
+
5472
+ // src/tokens/motion/v2.ts
5473
+ var motionV2Durations = {
5474
+ fast: "150ms",
5475
+ // Quick interactions
5476
+ normal: "250ms",
5477
+ // Default transitions
5478
+ slow: "350ms",
5479
+ // Emphasized animations
5480
+ reduced: "0ms"
5481
+ // For prefers-reduced-motion
5482
+ };
5483
+ var motionV2Easings = {
5484
+ soft: "cubic-bezier(0.22, 1, 0.36, 1)",
5485
+ // Gentle, smooth
5486
+ standard: "cubic-bezier(0.4, 0, 0.2, 1)",
5487
+ // Material Design standard
5488
+ emphasized: "cubic-bezier(0.2, 0, 0, 1)"
5489
+ // Strong, decisive
5490
+ };
5491
+ var motionV2Transitions = {
5492
+ fast: `${motionV2Durations.fast} ${motionV2Easings.standard}`,
5493
+ normal: `${motionV2Durations.normal} ${motionV2Easings.standard}`,
5494
+ slow: `${motionV2Durations.slow} ${motionV2Easings.emphasized}`,
5495
+ soft: `${motionV2Durations.normal} ${motionV2Easings.soft}`,
5496
+ reduced: `${motionV2Durations.reduced} linear`
5497
+ };
5498
+ var motionV2Fade = {
5499
+ in: {
5500
+ from: { opacity: 0 },
5501
+ to: { opacity: 1 }
5502
+ },
5503
+ out: {
5504
+ from: { opacity: 1 },
5505
+ to: { opacity: 0 }
5506
+ }
5507
+ };
5508
+ var motionV2Scale = {
5509
+ in: {
5510
+ from: { transform: "scale(0.95)", opacity: 0 },
5511
+ to: { transform: "scale(1)", opacity: 1 }
5512
+ },
5513
+ out: {
5514
+ from: { transform: "scale(1)", opacity: 1 },
5515
+ to: { transform: "scale(0.95)", opacity: 0 }
5516
+ }
5517
+ };
5518
+ var motionV2Slide = {
5519
+ up: {
5520
+ in: {
5521
+ from: { transform: "translateY(100%)", opacity: 0 },
5522
+ to: { transform: "translateY(0)", opacity: 1 }
5523
+ },
5524
+ out: {
5525
+ from: { transform: "translateY(0)", opacity: 1 },
5526
+ to: { transform: "translateY(100%)", opacity: 0 }
5527
+ }
5528
+ },
5529
+ down: {
5088
5530
  in: {
5089
5531
  from: { transform: "translateY(-100%)", opacity: 0 },
5090
5532
  to: { transform: "translateY(0)", opacity: 1 }
@@ -6347,6 +6789,13 @@ var UI_COLORS = tailwindThemeColors;
6347
6789
  function cn(...inputs) {
6348
6790
  return twMerge(clsx(inputs));
6349
6791
  }
6792
+ function formatDate(date) {
6793
+ return new Intl.DateTimeFormat("en-US", {
6794
+ month: "long",
6795
+ day: "numeric",
6796
+ year: "numeric"
6797
+ }).format(new Date(date));
6798
+ }
6350
6799
  var buttonVariants = cva(
6351
6800
  `inline-flex items-center justify-center ${BUTTON_TOKENS.gap} whitespace-nowrap ${BUTTON_TOKENS.radius} ${BUTTON_TOKENS.fontSize.md} font-medium ${BUTTON_TOKENS.transition.colors} focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:${BUTTON_TOKENS.iconSize} [&_svg]:shrink-0`,
6352
6801
  {
@@ -8312,31 +8761,31 @@ var Radio = React49.forwardRef(
8312
8761
  );
8313
8762
  Radio.displayName = "Radio";
8314
8763
  var textareaVariants = cva(
8315
- `flex min-h-[80px] ${INPUT_TOKENS.shadow} ${MOTION_TOKENS.transition.colors} disabled:cursor-not-allowed focus-visible:outline-none resize-y`,
8764
+ `flex min-h-[80px] ${TEXTAREA_TOKENS.shadow} ${MOTION_TOKENS.transition.colors} disabled:cursor-not-allowed focus-visible:outline-none resize-y`,
8316
8765
  {
8317
8766
  variants: {
8318
8767
  variant: {
8319
- primary: `${INPUT_TOKENS.variant.primary.border} ${INPUT_TOKENS.variant.primary.background} ${INPUT_TOKENS.variant.primary.text} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.variant.primary.focus}`,
8320
- secondary: `${INPUT_TOKENS.variant.secondary.border} ${INPUT_TOKENS.variant.secondary.background} ${INPUT_TOKENS.variant.secondary.text} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.variant.secondary.focus}`,
8321
- outline: `${INPUT_TOKENS.variant.outline.border} ${INPUT_TOKENS.variant.outline.background} ${INPUT_TOKENS.variant.outline.text} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.variant.outline.focus}`,
8322
- ghost: `${INPUT_TOKENS.variant.ghost.border} ${INPUT_TOKENS.variant.ghost.background} ${INPUT_TOKENS.variant.ghost.text} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.variant.ghost.focus}`,
8323
- destructive: `${INPUT_TOKENS.variant.destructive.border} ${INPUT_TOKENS.variant.destructive.background} ${INPUT_TOKENS.variant.destructive.text} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.variant.destructive.focus}`
8768
+ primary: `${TEXTAREA_TOKENS.variant.primary.border} ${TEXTAREA_TOKENS.variant.primary.background} ${TEXTAREA_TOKENS.variant.primary.text} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.variant.primary.focus}`,
8769
+ secondary: `${TEXTAREA_TOKENS.variant.secondary.border} ${TEXTAREA_TOKENS.variant.secondary.background} ${TEXTAREA_TOKENS.variant.secondary.text} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.variant.secondary.focus}`,
8770
+ outline: `${TEXTAREA_TOKENS.variant.outline.border} ${TEXTAREA_TOKENS.variant.outline.background} ${TEXTAREA_TOKENS.variant.outline.text} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.variant.outline.focus}`,
8771
+ ghost: `${TEXTAREA_TOKENS.variant.ghost.border} ${TEXTAREA_TOKENS.variant.ghost.background} ${TEXTAREA_TOKENS.variant.ghost.text} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.variant.ghost.focus}`,
8772
+ destructive: `${TEXTAREA_TOKENS.variant.destructive.border} ${TEXTAREA_TOKENS.variant.destructive.background} ${TEXTAREA_TOKENS.variant.destructive.text} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.variant.destructive.focus}`
8324
8773
  },
8325
8774
  size: {
8326
- xs: `${INPUT_TOKENS.size.xs.padding.horizontal} ${INPUT_TOKENS.size.xs.padding.vertical} ${INPUT_TOKENS.size.xs.radius} ${INPUT_TOKENS.size.xs.fontSize}`,
8327
- sm: `${INPUT_TOKENS.size.sm.padding.horizontal} ${INPUT_TOKENS.size.sm.padding.vertical} ${INPUT_TOKENS.size.sm.radius} ${INPUT_TOKENS.size.sm.fontSize}`,
8328
- md: `${INPUT_TOKENS.size.md.padding.horizontal} ${INPUT_TOKENS.size.md.padding.vertical} ${INPUT_TOKENS.size.md.radius} ${INPUT_TOKENS.size.md.fontSize} ${INPUT_TOKENS.size.md.fontSizeResponsive}`,
8329
- lg: `${INPUT_TOKENS.size.lg.padding.horizontal} ${INPUT_TOKENS.size.lg.padding.vertical} ${INPUT_TOKENS.size.lg.radius} ${INPUT_TOKENS.size.lg.fontSize}`,
8330
- xl: `${INPUT_TOKENS.size.xl.padding.horizontal} ${INPUT_TOKENS.size.xl.padding.vertical} ${INPUT_TOKENS.size.xl.radius} ${INPUT_TOKENS.size.xl.fontSize}`
8775
+ xs: `${TEXTAREA_TOKENS.size.xs.padding.horizontal} ${TEXTAREA_TOKENS.size.xs.padding.vertical} ${TEXTAREA_TOKENS.size.xs.radius} ${TEXTAREA_TOKENS.size.xs.fontSize}`,
8776
+ sm: `${TEXTAREA_TOKENS.size.sm.padding.horizontal} ${TEXTAREA_TOKENS.size.sm.padding.vertical} ${TEXTAREA_TOKENS.size.sm.radius} ${TEXTAREA_TOKENS.size.sm.fontSize}`,
8777
+ md: `${TEXTAREA_TOKENS.size.md.padding.horizontal} ${TEXTAREA_TOKENS.size.md.padding.vertical} ${TEXTAREA_TOKENS.size.md.radius} ${TEXTAREA_TOKENS.size.md.fontSize} ${TEXTAREA_TOKENS.size.md.fontSizeResponsive}`,
8778
+ lg: `${TEXTAREA_TOKENS.size.lg.padding.horizontal} ${TEXTAREA_TOKENS.size.lg.padding.vertical} ${TEXTAREA_TOKENS.size.lg.radius} ${TEXTAREA_TOKENS.size.lg.fontSize}`,
8779
+ xl: `${TEXTAREA_TOKENS.size.xl.padding.horizontal} ${TEXTAREA_TOKENS.size.xl.padding.vertical} ${TEXTAREA_TOKENS.size.xl.radius} ${TEXTAREA_TOKENS.size.xl.fontSize}`
8331
8780
  },
8332
8781
  state: {
8333
- default: `${INPUT_TOKENS.state.border.default} ${INPUT_TOKENS.state.background.default} ${INPUT_TOKENS.state.text.default} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.state.border.focus}`,
8334
- error: `${INPUT_TOKENS.state.border.error} ${INPUT_TOKENS.state.background.default} ${INPUT_TOKENS.state.text.default} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.state.border.focus}`,
8335
- success: `${INPUT_TOKENS.state.border.success} ${INPUT_TOKENS.state.background.default} ${INPUT_TOKENS.state.text.default} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.state.border.focus}`,
8336
- disabled: `${INPUT_TOKENS.state.border.disabled} ${INPUT_TOKENS.state.background.disabled} ${INPUT_TOKENS.state.text.default} ${INPUT_TOKENS.state.text.placeholder} ${INPUT_TOKENS.state.text.disabled}`
8782
+ default: `${TEXTAREA_TOKENS.state.border.default} ${TEXTAREA_TOKENS.state.background.default} ${TEXTAREA_TOKENS.state.text.default} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.state.border.focus}`,
8783
+ error: `${TEXTAREA_TOKENS.state.border.error} ${TEXTAREA_TOKENS.state.background.default} ${TEXTAREA_TOKENS.state.text.default} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.state.border.focus}`,
8784
+ success: `${TEXTAREA_TOKENS.state.border.success} ${TEXTAREA_TOKENS.state.background.default} ${TEXTAREA_TOKENS.state.text.default} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.state.border.focus}`,
8785
+ disabled: `${TEXTAREA_TOKENS.state.border.disabled} ${TEXTAREA_TOKENS.state.background.disabled} ${TEXTAREA_TOKENS.state.text.default} ${TEXTAREA_TOKENS.state.text.placeholder} ${TEXTAREA_TOKENS.state.text.disabled}`
8337
8786
  },
8338
8787
  fullWidth: {
8339
- true: INPUT_TOKENS.width.full,
8788
+ true: TEXTAREA_TOKENS.width.full,
8340
8789
  false: ""
8341
8790
  }
8342
8791
  },
@@ -8380,7 +8829,7 @@ var Textarea = React49.forwardRef(
8380
8829
  const currentLength = typeof currentValue === "string" ? currentValue.length : 0;
8381
8830
  const shouldShowCounter = showCharacterCount && maxLength !== void 0;
8382
8831
  if (shouldShowCounter) {
8383
- return /* @__PURE__ */ jsxs("div", { className: cn("relative", fullWidth !== false && INPUT_TOKENS.width.full), children: [
8832
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative", fullWidth !== false && TEXTAREA_TOKENS.width.full), children: [
8384
8833
  /* @__PURE__ */ jsx(
8385
8834
  "textarea",
8386
8835
  {
@@ -8400,11 +8849,11 @@ var Textarea = React49.forwardRef(
8400
8849
  {
8401
8850
  className: cn(
8402
8851
  "absolute",
8403
- INPUT_TOKENS.message.position.bottom,
8404
- INPUT_TOKENS.message.position.right,
8852
+ TEXTAREA_TOKENS.message.position.bottom,
8853
+ TEXTAREA_TOKENS.message.position.right,
8405
8854
  TEXT_TOKENS.fontSize.xs,
8406
- INPUT_TOKENS.message.color.default,
8407
- currentLength > maxLength && INPUT_TOKENS.message.color.error
8855
+ TEXTAREA_TOKENS.message.color.default,
8856
+ currentLength > maxLength && TEXTAREA_TOKENS.message.color.error
8408
8857
  ),
8409
8858
  children: [
8410
8859
  currentLength,
@@ -8965,7 +9414,7 @@ var labelVariants = cva(
8965
9414
  var Label2 = React49.forwardRef(
8966
9415
  ({ className, required, children, ...props }, ref) => /* @__PURE__ */ jsxs(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props, children: [
8967
9416
  children,
8968
- required && /* @__PURE__ */ jsx("span", { className: cn(INPUT_TOKENS.label.requiredMark, "ml-xs"), children: "*" })
9417
+ required && /* @__PURE__ */ jsx("span", { className: cn(FORM_TOKENS.label.requiredMark, "ml-xs"), children: "*" })
8969
9418
  ] })
8970
9419
  );
8971
9420
  Label2.displayName = LabelPrimitive.Root.displayName;
@@ -10371,7 +10820,7 @@ var PopoverArrow = React49.forwardRef(
10371
10820
  );
10372
10821
  PopoverArrow.displayName = "PopoverArrow";
10373
10822
 
10374
- // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
10823
+ // node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
10375
10824
  var min = Math.min;
10376
10825
  var max = Math.max;
10377
10826
  var round = Math.round;
@@ -10502,7 +10951,7 @@ function rectToClientRect(rect) {
10502
10951
  };
10503
10952
  }
10504
10953
 
10505
- // node_modules/@floating-ui/core/dist/floating-ui.core.mjs
10954
+ // node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs
10506
10955
  function computeCoordsFromPlacement(_ref, placement, rtl) {
10507
10956
  let {
10508
10957
  reference,
@@ -10947,7 +11396,7 @@ var shift = function(options) {
10947
11396
  };
10948
11397
  };
10949
11398
 
10950
- // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
11399
+ // node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
10951
11400
  function hasWindow() {
10952
11401
  return typeof window !== "undefined";
10953
11402
  }
@@ -11100,7 +11549,7 @@ function getFrameElement(win) {
11100
11549
  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
11101
11550
  }
11102
11551
 
11103
- // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
11552
+ // node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
11104
11553
  function getCssDimensions(element) {
11105
11554
  const css = getComputedStyle2(element);
11106
11555
  let width = parseFloat(css.width) || 0;
@@ -13197,7 +13646,7 @@ var Skeleton = React49.forwardRef(
13197
13646
  Skeleton.displayName = "Skeleton";
13198
13647
  var EmptyStateAction = React49.forwardRef(
13199
13648
  ({ className, children, ...props }, ref) => {
13200
- return /* @__PURE__ */ jsx("div", { ref, className: cn("mt-2", className), ...props, children });
13649
+ return /* @__PURE__ */ jsx("div", { ref, className: cn(EMPTY_STATE_TOKENS.spacing.action, className), ...props, children });
13201
13650
  }
13202
13651
  );
13203
13652
  EmptyStateAction.displayName = "EmptyStateAction";
@@ -13208,9 +13657,10 @@ var EmptyStateDescription = React49.forwardRef(
13208
13657
  {
13209
13658
  ref,
13210
13659
  className: cn(
13211
- DATA_TOKENS.emptyState.typography.description.fontSize,
13212
- DATA_TOKENS.emptyState.typography.description.fontWeight,
13213
- "max-w-md text-muted-foreground",
13660
+ EMPTY_STATE_TOKENS.typography.description.fontSize,
13661
+ EMPTY_STATE_TOKENS.typography.description.fontWeight,
13662
+ EMPTY_STATE_TOKENS.typography.description.color,
13663
+ EMPTY_STATE_TOKENS.typography.description.maxWidth,
13214
13664
  className
13215
13665
  ),
13216
13666
  ...props,
@@ -13222,16 +13672,12 @@ var EmptyStateDescription = React49.forwardRef(
13222
13672
  EmptyStateDescription.displayName = "EmptyStateDescription";
13223
13673
  var EmptyStateIcon = React49.forwardRef(
13224
13674
  ({ children, size: size3 = "md", className, ...props }, ref) => {
13225
- const iconSizeClass = DATA_TOKENS.emptyState.iconSize[size3];
13675
+ const iconSizeClass = EMPTY_STATE_TOKENS.icon.size[size3];
13226
13676
  return /* @__PURE__ */ jsx(
13227
13677
  "div",
13228
13678
  {
13229
13679
  ref,
13230
- className: cn(
13231
- "flex items-center justify-center text-muted-foreground",
13232
- iconSizeClass,
13233
- className
13234
- ),
13680
+ className: cn(EMPTY_STATE_TOKENS.icon.container, iconSizeClass, className),
13235
13681
  ...props,
13236
13682
  children
13237
13683
  }
@@ -13246,9 +13692,9 @@ var EmptyStateTitle = React49.forwardRef(
13246
13692
  {
13247
13693
  ref,
13248
13694
  className: cn(
13249
- DATA_TOKENS.emptyState.typography.title.fontSize,
13250
- DATA_TOKENS.emptyState.typography.title.fontWeight,
13251
- "text-foreground",
13695
+ EMPTY_STATE_TOKENS.typography.title.fontSize,
13696
+ EMPTY_STATE_TOKENS.typography.title.fontWeight,
13697
+ EMPTY_STATE_TOKENS.typography.title.color,
13252
13698
  className
13253
13699
  ),
13254
13700
  ...props,
@@ -13269,7 +13715,7 @@ var EmptyState = React49.forwardRef(
13269
13715
  variant: "flat",
13270
13716
  radius: "xl",
13271
13717
  p: "lg",
13272
- className: cn("text-center", className),
13718
+ className: cn(EMPTY_STATE_TOKENS.alignment.center, className),
13273
13719
  id: emptyStateId,
13274
13720
  ...props,
13275
13721
  children: /* @__PURE__ */ jsx(Stack, { gap: "md", align: "center", justify: "center", children })
@@ -13286,14 +13732,16 @@ var DataListItem = React49.forwardRef(
13286
13732
  ({ padding = "md", className, children, ...props }, ref) => {
13287
13733
  const paddingValue = getBaseValue(padding);
13288
13734
  const paddingKey = paddingValue && ["sm", "md", "lg"].includes(String(paddingValue)) ? String(paddingValue) : "md";
13289
- const paddingClass = DATA_TOKENS.dataList.rowPadding[paddingKey];
13735
+ const paddingClass = DATA_LIST_TOKENS.rowPadding[paddingKey];
13290
13736
  return /* @__PURE__ */ jsx(
13291
13737
  "div",
13292
13738
  {
13293
13739
  ref,
13294
13740
  className: cn(
13295
13741
  paddingClass,
13296
- "flex flex-col border-b border-border last:border-0 md:flex-row md:items-center",
13742
+ DATA_LIST_TOKENS.item.layout.mobile,
13743
+ DATA_LIST_TOKENS.item.layout.desktop,
13744
+ DATA_LIST_TOKENS.item.border,
13297
13745
  className
13298
13746
  ),
13299
13747
  ...props,
@@ -13310,9 +13758,9 @@ var DataListLabel = React49.forwardRef(
13310
13758
  {
13311
13759
  ref,
13312
13760
  className: cn(
13313
- "mb-1 font-semibold text-foreground md:mb-0",
13314
- "md:w-32",
13315
- // Default md width from tokens
13761
+ DATA_LIST_TOKENS.label.mobile,
13762
+ DATA_LIST_TOKENS.label.desktop,
13763
+ DATA_LIST_TOKENS.labelWidth.md,
13316
13764
  className
13317
13765
  ),
13318
13766
  ...props,
@@ -13324,13 +13772,21 @@ var DataListLabel = React49.forwardRef(
13324
13772
  DataListLabel.displayName = "DataListLabel";
13325
13773
  var DataListValue = React49.forwardRef(
13326
13774
  ({ className, children, ...props }, ref) => {
13327
- return /* @__PURE__ */ jsx("dd", { ref, className: cn("flex-1 text-muted-foreground", className), ...props, children });
13775
+ return /* @__PURE__ */ jsx(
13776
+ "dd",
13777
+ {
13778
+ ref,
13779
+ className: cn(DATA_LIST_TOKENS.value.flex, DATA_LIST_TOKENS.value.color, className),
13780
+ ...props,
13781
+ children
13782
+ }
13783
+ );
13328
13784
  }
13329
13785
  );
13330
13786
  DataListValue.displayName = "DataListValue";
13331
13787
  var DataListRoot = React49.forwardRef(
13332
13788
  ({ labelWidth: _labelWidth = "md", className, children, ...props }, ref) => {
13333
- return /* @__PURE__ */ jsx("dl", { ref, className: cn(DATA_TOKENS.dataList.spacing.gap, className), ...props, children });
13789
+ return /* @__PURE__ */ jsx("dl", { ref, className: cn(DATA_LIST_TOKENS.spacing.gap, className), ...props, children });
13334
13790
  }
13335
13791
  );
13336
13792
  DataListRoot.displayName = "DataListRoot";
@@ -13345,9 +13801,9 @@ var TableBody = React49.forwardRef(
13345
13801
  TableBody.displayName = "TableBody";
13346
13802
  var TableCell = React49.forwardRef(
13347
13803
  ({ align = "left", size: size3 = "md", className, ...props }, ref) => {
13348
- const paddingClass = DATA_TOKENS.table.padding.cell[size3];
13349
- const typographyClass = DATA_TOKENS.table.typography.cell.fontSize;
13350
- const fontWeightClass = DATA_TOKENS.table.typography.cell.fontWeight;
13804
+ const paddingClass = TABLE_TOKENS.padding.cell[size3];
13805
+ const typographyClass = TABLE_TOKENS.typography.cell.fontSize;
13806
+ const fontWeightClass = TABLE_TOKENS.typography.cell.fontWeight;
13351
13807
  const alignmentClasses = {
13352
13808
  left: "text-left",
13353
13809
  center: "text-center",
@@ -13373,7 +13829,7 @@ var TableCell = React49.forwardRef(
13373
13829
  TableCell.displayName = "TableCell";
13374
13830
  var TableEmpty = React49.forwardRef(
13375
13831
  ({ colSpan, message = "No data available", className, ...props }, ref) => {
13376
- return /* @__PURE__ */ jsx("tr", { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsx("td", { colSpan, className: "p-8", children: /* @__PURE__ */ jsxs(EmptyState, { children: [
13832
+ return /* @__PURE__ */ jsx("tr", { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsx("td", { colSpan, className: TABLE_TOKENS.empty.padding, children: /* @__PURE__ */ jsxs(EmptyState, { children: [
13377
13833
  /* @__PURE__ */ jsx(EmptyStateIcon, { children: "\u{1F4ED}" }),
13378
13834
  /* @__PURE__ */ jsx(EmptyStateTitle, { children: message })
13379
13835
  ] }) }) });
@@ -13388,13 +13844,22 @@ var TableExpandableContent = React49.forwardRef(
13388
13844
  ref,
13389
13845
  colSpan,
13390
13846
  className: cn(
13391
- "p-0",
13392
- "overflow-hidden transition-all duration-normal ease-in-out",
13393
- expanded ? "max-h-[100vh] opacity-100" : "max-h-0 opacity-0",
13847
+ TABLE_TOKENS.expandable.container,
13848
+ TABLE_TOKENS.expandable.transition,
13849
+ expanded ? TABLE_TOKENS.expandable.expanded : TABLE_TOKENS.expandable.collapsed,
13394
13850
  className
13395
13851
  ),
13396
13852
  ...props,
13397
- children: /* @__PURE__ */ jsx("div", { className: cn("p-md", expanded ? "block" : "hidden"), children })
13853
+ children: /* @__PURE__ */ jsx(
13854
+ "div",
13855
+ {
13856
+ className: cn(
13857
+ TABLE_TOKENS.expandable.padding,
13858
+ expanded ? TABLE_TOKENS.expandable.content.expanded : TABLE_TOKENS.expandable.content.collapsed
13859
+ ),
13860
+ children
13861
+ }
13862
+ )
13398
13863
  }
13399
13864
  );
13400
13865
  }
@@ -13407,9 +13872,9 @@ var TableSortIcon = React49.forwardRef(
13407
13872
  {
13408
13873
  ref,
13409
13874
  className: cn(
13410
- "inline-flex size-4 items-center text-muted-foreground transition-transform",
13411
- direction === "desc" && "rotate-180",
13412
- !direction && "opacity-30",
13875
+ TABLE_TOKENS.sortable.icon.base,
13876
+ direction === "desc" && TABLE_TOKENS.sortable.icon.rotated,
13877
+ !direction && TABLE_TOKENS.sortable.icon.inactive,
13413
13878
  className
13414
13879
  ),
13415
13880
  "aria-hidden": "true",
@@ -13456,9 +13921,9 @@ var TableHead = React49.forwardRef(
13456
13921
  direction: nextDirection
13457
13922
  });
13458
13923
  }, [sortable, columnKey, sortState, setSortState]);
13459
- const paddingClass = DATA_TOKENS.table.padding.header[size3];
13460
- const typographyClass = DATA_TOKENS.table.typography.header.fontSize;
13461
- const fontWeightClass = DATA_TOKENS.table.typography.header.fontWeight;
13924
+ const paddingClass = TABLE_TOKENS.padding.header[size3];
13925
+ const typographyClass = TABLE_TOKENS.typography.header.fontSize;
13926
+ const fontWeightClass = TABLE_TOKENS.typography.header.fontWeight;
13462
13927
  const alignmentClasses = {
13463
13928
  left: "text-left",
13464
13929
  center: "text-center",
@@ -13475,9 +13940,10 @@ var TableHead = React49.forwardRef(
13475
13940
  typographyClass,
13476
13941
  fontWeightClass,
13477
13942
  alignmentClasses[align],
13478
- DATA_TOKENS.table.colors.border,
13479
- "border-b",
13480
- sortable && "cursor-pointer select-none hover:bg-muted/50",
13943
+ TABLE_TOKENS.colors.border,
13944
+ TABLE_TOKENS.border.bottom,
13945
+ sortable && TABLE_TOKENS.sortable.cursor,
13946
+ sortable && TABLE_TOKENS.sortable.hover,
13481
13947
  className
13482
13948
  ),
13483
13949
  onClick: handleSort,
@@ -13489,7 +13955,7 @@ var TableHead = React49.forwardRef(
13489
13955
  })(),
13490
13956
  role: "columnheader",
13491
13957
  ...props,
13492
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
13958
+ children: /* @__PURE__ */ jsxs("div", { className: cn(TABLE_TOKENS.sortable.container, TABLE_TOKENS.sortable.gap), children: [
13493
13959
  children,
13494
13960
  sortable && /* @__PURE__ */ jsx(TableSortIcon, { direction: sortDirection })
13495
13961
  ] })
@@ -13504,7 +13970,7 @@ var TableHeader = React49.forwardRef(
13504
13970
  "thead",
13505
13971
  {
13506
13972
  ref,
13507
- className: cn(sticky && "sticky top-0 z-10 bg-background", className),
13973
+ className: cn(sticky && TABLE_TOKENS.sticky.header, className),
13508
13974
  role: "rowgroup",
13509
13975
  ...props
13510
13976
  }
@@ -13514,7 +13980,7 @@ var TableHeader = React49.forwardRef(
13514
13980
  TableHeader.displayName = "TableHeader";
13515
13981
  var TableLoadingState = React49.forwardRef(
13516
13982
  ({ colSpan, rows = 5, className, ...props }, ref) => {
13517
- return /* @__PURE__ */ jsx(Fragment, { children: Array.from({ length: rows }).map((_, index2) => /* @__PURE__ */ jsx("tr", { ref: index2 === 0 ? ref : void 0, className: cn(className), ...props, children: Array.from({ length: colSpan }).map((_2, cellIndex) => /* @__PURE__ */ jsx("td", { className: "p-sm", children: /* @__PURE__ */ jsx(Skeleton, { variant: "text", className: "w-full" }) }, cellIndex)) }, index2)) });
13983
+ return /* @__PURE__ */ jsx(Fragment, { children: Array.from({ length: rows }).map((_, index2) => /* @__PURE__ */ jsx("tr", { ref: index2 === 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)) }, index2)) });
13518
13984
  }
13519
13985
  );
13520
13986
  TableLoadingState.displayName = "TableLoadingState";
@@ -13532,11 +13998,11 @@ var TableRow = React49.forwardRef(
13532
13998
  {
13533
13999
  ref,
13534
14000
  className: cn(
13535
- DATA_TOKENS.table.colors.border,
13536
- "border-b",
13537
- DATA_TOKENS.table.colors.rowHover,
13538
- selected && DATA_TOKENS.table.colors.rowSelected,
13539
- expandable && "cursor-pointer",
14001
+ TABLE_TOKENS.colors.border,
14002
+ TABLE_TOKENS.border.bottom,
14003
+ TABLE_TOKENS.colors.rowHover,
14004
+ selected && TABLE_TOKENS.colors.rowSelected,
14005
+ expandable && TABLE_TOKENS.expandable.cursor,
13540
14006
  className
13541
14007
  ),
13542
14008
  "aria-expanded": expandable ? expanded : void 0,
@@ -13597,13 +14063,13 @@ function TableRoot({
13597
14063
  }),
13598
14064
  [sortState, expandedRows, toggleRow, expandable, renderExpandableContent]
13599
14065
  );
13600
- return /* @__PURE__ */ jsx(TableContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsx(
14066
+ return /* @__PURE__ */ jsx(TableContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("div", { className: TABLE_TOKENS.layout.overflow, children: /* @__PURE__ */ jsx(
13601
14067
  "table",
13602
14068
  {
13603
14069
  className: cn(
13604
- "w-full border-collapse",
13605
- DATA_TOKENS.table.radius.default,
13606
- DATA_TOKENS.table.shadow.subtle,
14070
+ TABLE_TOKENS.layout.table,
14071
+ TABLE_TOKENS.radius.default,
14072
+ TABLE_TOKENS.shadow.subtle,
13607
14073
  className
13608
14074
  ),
13609
14075
  role: "table",
@@ -15170,8 +15636,8 @@ var artistCardGenresVariants = cva(
15170
15636
  }
15171
15637
  );
15172
15638
  var artistCardFooterBorderVariants = cva(
15173
- // Base classes - border top, spacing
15174
- "border-t border-border",
15639
+ // Base classes - border top from ARTIST_TOKENS, spacing from DOMAIN_TOKENS
15640
+ ARTIST_TOKENS.footer.border.top,
15175
15641
  {
15176
15642
  variants: {
15177
15643
  size: {
@@ -15231,37 +15697,49 @@ var ArtistCard = React49.forwardRef(
15231
15697
  ...props,
15232
15698
  children: [
15233
15699
  featured && popularBadgeText && /* @__PURE__ */ jsx("div", { className: artistCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsx("span", { className: artistCardBadgeSurfaceVariants({ size: size3, variant: "featured" }), children: popularBadgeText }) }),
15234
- showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxs("div", { className: "relative w-full overflow-hidden bg-gradient-to-br from-muted to-muted/50", children: [
15235
- imageUrl ? /* @__PURE__ */ jsx(
15236
- "img",
15237
- {
15238
- src: imageUrl,
15239
- alt: name,
15240
- className: cn("h-full w-full", artistCardImageTransformVariants({ size: size3 }))
15241
- }
15242
- ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
15243
- Icon2,
15244
- {
15245
- name: "info",
15246
- size: "xl",
15247
- color: "muted",
15248
- className: ICON_TOKENS.sizes["4xl"],
15249
- "aria-hidden": "true"
15250
- }
15251
- ) }),
15252
- /* @__PURE__ */ jsx("div", { className: artistCardImageOverlayVariants({ size: size3 }) })
15253
- ] }) }),
15700
+ showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxs(
15701
+ "div",
15702
+ {
15703
+ className: cn(
15704
+ ARTIST_TOKENS.image.container.layout,
15705
+ DOMAIN_TOKENS.image.placeholder.gradient
15706
+ ),
15707
+ children: [
15708
+ imageUrl ? /* @__PURE__ */ jsx(
15709
+ "img",
15710
+ {
15711
+ src: imageUrl,
15712
+ alt: name,
15713
+ className: cn(
15714
+ ARTIST_TOKENS.image.sizing.full,
15715
+ artistCardImageTransformVariants({ size: size3 })
15716
+ )
15717
+ }
15718
+ ) : /* @__PURE__ */ jsx("div", { className: ARTIST_TOKENS.image.placeholder.container, children: /* @__PURE__ */ jsx(
15719
+ Icon2,
15720
+ {
15721
+ name: "info",
15722
+ size: "xl",
15723
+ color: "muted",
15724
+ className: ICON_TOKENS.sizes["4xl"],
15725
+ "aria-hidden": "true"
15726
+ }
15727
+ ) }),
15728
+ /* @__PURE__ */ jsx("div", { className: artistCardImageOverlayVariants({ size: size3 }) })
15729
+ ]
15730
+ }
15731
+ ) }),
15254
15732
  /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size: size3, children: [
15255
15733
  /* @__PURE__ */ jsx(
15256
15734
  Heading,
15257
15735
  {
15258
15736
  level: 3,
15259
15737
  className: cn(
15260
- "line-clamp-2",
15738
+ DOMAIN_TOKENS.text.lineClamp.two,
15261
15739
  TEXT_TOKENS.fontSize.lg,
15262
15740
  TEXT_TOKENS.fontWeight.bold,
15263
15741
  MOTION_TOKENS.transition.colors,
15264
- "group-hover:text-primary",
15742
+ DOMAIN_TOKENS.text.hover.primary,
15265
15743
  size3 === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
15266
15744
  ),
15267
15745
  children: href ? /* @__PURE__ */ jsx(Link, { href, variant: "ghost", children: name }) : name
@@ -15273,7 +15751,7 @@ var ArtistCard = React49.forwardRef(
15273
15751
  size: "sm",
15274
15752
  variant: "muted",
15275
15753
  className: cn(
15276
- "line-clamp-2",
15754
+ DOMAIN_TOKENS.text.lineClamp.two,
15277
15755
  size3 === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
15278
15756
  ),
15279
15757
  children: description
@@ -15335,16 +15813,16 @@ var ArtistCard = React49.forwardRef(
15335
15813
  }
15336
15814
  );
15337
15815
  ArtistCard.displayName = "ArtistCard";
15338
- var eventCardBadgeVariants = cva(
15816
+ var categoryCardBadgeVariants = cva(
15339
15817
  // Base classes - absolute positioning, z-index
15340
15818
  "absolute z-10",
15341
15819
  {
15342
15820
  variants: {
15343
15821
  size: {
15344
15822
  default: DOMAIN_TOKENS.badges.position.default,
15345
- // Default positioning - maps to semanticSpacing.md (12px)
15823
+ // Default positioning - references semanticSpacing.md (16px)
15346
15824
  compact: DOMAIN_TOKENS.badges.position.compact
15347
- // Compact positioning - maps to semanticSpacing.sm (8px)
15825
+ // Compact positioning - references semanticSpacing.sm (8px)
15348
15826
  }
15349
15827
  },
15350
15828
  defaultVariants: {
@@ -15352,9 +15830,10 @@ var eventCardBadgeVariants = cva(
15352
15830
  }
15353
15831
  }
15354
15832
  );
15355
- var eventCardBadgeSurfaceVariants = cva(
15833
+ var categoryCardBadgeSurfaceVariants = cva(
15356
15834
  // Base classes - flex layout, items center, badge styling
15357
- `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`,
15835
+ // Uses DOMAIN_TOKENS for badge-specific styles, TEXT_TOKENS for typography
15836
+ `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}`,
15358
15837
  {
15359
15838
  variants: {
15360
15839
  variant: {
@@ -15367,130 +15846,14 @@ var eventCardBadgeSurfaceVariants = cva(
15367
15846
  }
15368
15847
  }
15369
15848
  );
15370
- var eventCardMetadataVariants = cva(
15371
- // Base classes - flex column, metadata spacing
15372
- `flex flex-col ${DOMAIN_TOKENS.metadata.spacing.vertical}`,
15373
- {
15374
- variants: {
15375
- size: {
15376
- default: "",
15377
- compact: ""
15378
- }
15379
- },
15380
- defaultVariants: {
15381
- size: "default"
15382
- }
15383
- }
15384
- );
15385
- var eventCardMetadataItemVariants = cva(
15386
- // Base classes - flex items center, metadata spacing and text
15387
- `flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.xs}`,
15388
- {
15389
- variants: {
15390
- size: {
15391
- default: "",
15392
- compact: ""
15393
- }
15394
- },
15395
- defaultVariants: {
15396
- size: "default"
15397
- }
15398
- }
15399
- );
15400
- var eventCardMetadataIconVariants = cva(
15401
- // Base classes - icon size and color
15402
- `${ICON_TOKENS.sizes.md} ${ICON_TOKENS.colors.muted}`,
15403
- {
15404
- variants: {
15405
- size: {
15406
- default: "",
15407
- compact: ""
15408
- }
15409
- },
15410
- defaultVariants: {
15411
- size: "default"
15412
- }
15413
- }
15414
- );
15415
- var eventCardFooterVariants = cva(
15416
- // Base classes - border top, spacing
15417
- "border-t border-border",
15418
- {
15419
- variants: {
15420
- size: {
15421
- default: DOMAIN_TOKENS.spacing.footer.paddingTopDefault,
15422
- // Default padding top - references semanticSpacing.sm (8px) via Tailwind
15423
- compact: DOMAIN_TOKENS.spacing.footer.paddingTopCompact
15424
- // Compact padding top - references semanticSpacing.xs (4px) via Tailwind
15425
- }
15426
- },
15427
- defaultVariants: {
15428
- size: "default"
15429
- }
15430
- }
15431
- );
15432
- var eventCardTicketButtonVariants = cva(
15433
- // Base classes - flex layout, badge gradient, motion
15434
- `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} font-semibold transform`,
15435
- {
15436
- variants: {
15437
- size: {
15438
- default: DOMAIN_TOKENS.spacing.button.paddingDefault,
15439
- // Default padding - references semanticSpacing.md (16px) horizontal, xs (4px) vertical via Tailwind
15440
- compact: DOMAIN_TOKENS.spacing.button.paddingCompact
15441
- // Compact padding - references semanticSpacing.sm (8px) horizontal, xs (4px) vertical via Tailwind
15442
- }
15443
- },
15444
- defaultVariants: {
15445
- size: "default"
15446
- }
15447
- }
15448
- );
15449
- var eventCardTicketButtonIconVariants = cva(
15450
- // Base classes - icon size and spacing
15451
- `${ICON_TOKENS.sizes.md} ${DOMAIN_TOKENS.spacing.button.iconMarginLeft}`,
15452
- {
15453
- variants: {
15454
- size: {
15455
- default: "",
15456
- compact: ""
15457
- }
15458
- },
15459
- defaultVariants: {
15460
- size: "default"
15461
- }
15462
- }
15463
- );
15464
- var eventCardPriceVariants = cva(
15465
- // Base classes - price gradient text
15466
- `bg-gradient-to-r from-accent-500 to-primary-600 bg-clip-text text-transparent`,
15467
- {
15468
- variants: {
15469
- size: {
15470
- default: TEXT_TOKENS.fontSize.lg,
15471
- // Default size
15472
- compact: TEXT_TOKENS.fontSize.md
15473
- // Compact size
15474
- }
15475
- },
15476
- defaultVariants: {
15477
- size: "default"
15478
- }
15479
- }
15480
- );
15481
- var EventCard = React49.forwardRef(
15849
+ var CategoryCard = React49.forwardRef(
15482
15850
  ({
15483
15851
  title,
15484
15852
  description,
15485
- date,
15486
- venueName,
15487
- price,
15488
15853
  imageUrl,
15489
15854
  href,
15490
- ticketUrl,
15491
15855
  featured = false,
15492
15856
  showImage = true,
15493
- getTicketsLabel,
15494
15857
  featuredBadgeText,
15495
15858
  size: size3 = "default",
15496
15859
  variant,
@@ -15513,46 +15876,57 @@ var EventCard = React49.forwardRef(
15513
15876
  className: cn("group relative", className),
15514
15877
  ...props,
15515
15878
  children: [
15516
- featured && featuredBadgeText && /* @__PURE__ */ jsx("div", { className: eventCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsx("span", { className: eventCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
15517
- showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxs("div", { className: "relative w-full overflow-hidden bg-gradient-to-br from-surface-elevated1 to-surface-elevated2", children: [
15518
- imageUrl ? /* @__PURE__ */ jsx(
15519
- "img",
15520
- {
15521
- src: imageUrl,
15522
- alt: title,
15523
- className: cn(
15524
- "h-full w-full object-cover",
15525
- DOMAIN_TOKENS.motion.hover.transition,
15526
- DOMAIN_TOKENS.motion.hover.scale
15527
- )
15528
- }
15529
- ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
15530
- Icon2,
15531
- {
15532
- name: "info",
15533
- size: "xl",
15534
- color: "muted",
15535
- className: ICON_TOKENS.sizes["4xl"],
15536
- "aria-hidden": "true"
15537
- }
15538
- ) }),
15539
- /* @__PURE__ */ jsx(
15540
- "div",
15541
- {
15542
- className: cn(
15543
- "absolute inset-0 opacity-0 transition-opacity duration-normal group-hover:opacity-100",
15544
- DOMAIN_TOKENS.image.overlay.gradient
15879
+ featured && featuredBadgeText && /* @__PURE__ */ jsx("div", { className: categoryCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsx("span", { className: categoryCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
15880
+ showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxs(
15881
+ "div",
15882
+ {
15883
+ className: cn(
15884
+ "relative w-full overflow-hidden",
15885
+ DOMAIN_TOKENS.image.placeholder.gradient
15886
+ ),
15887
+ children: [
15888
+ imageUrl ? /* @__PURE__ */ jsx(
15889
+ "img",
15890
+ {
15891
+ src: imageUrl,
15892
+ alt: title,
15893
+ className: cn(
15894
+ "h-full w-full object-cover",
15895
+ DOMAIN_TOKENS.motion.hover.transition,
15896
+ DOMAIN_TOKENS.motion.hover.scale
15897
+ )
15898
+ }
15899
+ ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
15900
+ Icon2,
15901
+ {
15902
+ name: "info",
15903
+ className: cn(ICON_TOKENS.sizes["4xl"], ICON_TOKENS.colors.muted),
15904
+ "aria-hidden": "true"
15905
+ }
15906
+ ) }),
15907
+ /* @__PURE__ */ jsx(
15908
+ "div",
15909
+ {
15910
+ className: cn(
15911
+ "absolute inset-0 opacity-0 group-hover:opacity-100",
15912
+ MOTION_TOKENS.transition.opacity,
15913
+ MOTION_TOKENS.duration.normal,
15914
+ DOMAIN_TOKENS.image.overlay.gradient
15915
+ )
15916
+ }
15545
15917
  )
15546
- }
15547
- )
15548
- ] }) }),
15918
+ ]
15919
+ }
15920
+ ) }),
15549
15921
  /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size: size3, children: [
15550
15922
  /* @__PURE__ */ jsx(
15551
15923
  Heading,
15552
15924
  {
15553
15925
  level: 3,
15554
15926
  className: cn(
15555
- "line-clamp-2 transition-colors group-hover:text-primary",
15927
+ DOMAIN_TOKENS.text.lineClamp.two,
15928
+ MOTION_TOKENS.transition.colors,
15929
+ DOMAIN_TOKENS.text.hover.primary,
15556
15930
  TEXT_TOKENS.fontSize.lg,
15557
15931
  TEXT_TOKENS.fontWeight.bold,
15558
15932
  DOMAIN_TOKENS.spacing.section.titleToSubtitle
@@ -15564,47 +15938,21 @@ var EventCard = React49.forwardRef(
15564
15938
  Text,
15565
15939
  {
15566
15940
  size: "sm",
15567
- muted: true,
15941
+ variant: "muted",
15568
15942
  className: cn(
15569
- "line-clamp-2",
15943
+ DOMAIN_TOKENS.text.lineClamp.two,
15570
15944
  size3 === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
15571
15945
  ),
15572
15946
  children: description
15573
15947
  }
15574
- ),
15575
- /* @__PURE__ */ jsxs("div", { className: eventCardMetadataVariants({ size: size3 }), children: [
15576
- date && /* @__PURE__ */ jsxs("div", { className: eventCardMetadataItemVariants({ size: size3 }), children: [
15577
- /* @__PURE__ */ jsx(IconCalendar, { className: eventCardMetadataIconVariants({ size: size3 }) }),
15578
- /* @__PURE__ */ jsx(Text, { size: "xs", muted: true, children: date })
15579
- ] }),
15580
- venueName && /* @__PURE__ */ jsxs("div", { className: eventCardMetadataItemVariants({ size: size3 }), children: [
15581
- /* @__PURE__ */ jsx(IconLocation, { className: eventCardMetadataIconVariants({ size: size3 }) }),
15582
- /* @__PURE__ */ jsx(Text, { size: "xs", muted: true, className: "line-clamp-1", children: venueName })
15583
- ] })
15584
- ] })
15585
- ] }),
15586
- /* @__PURE__ */ jsx(CardBaseFooterWrapper, { size: size3, children: /* @__PURE__ */ jsxs("div", { className: cn("w-full", eventCardFooterVariants({ size: size3 })), children: [
15587
- ticketUrl && /* @__PURE__ */ jsxs(
15588
- Link,
15589
- {
15590
- href: ticketUrl,
15591
- className: cn("w-full", eventCardTicketButtonVariants({ size: size3 })),
15592
- target: "_blank",
15593
- rel: "noopener noreferrer",
15594
- children: [
15595
- getTicketsLabel,
15596
- /* @__PURE__ */ jsx(IconArrowRight, { className: eventCardTicketButtonIconVariants({ size: size3 }) })
15597
- ]
15598
- }
15599
- ),
15600
- !ticketUrl && price && /* @__PURE__ */ jsx("div", { className: "text-right", children: /* @__PURE__ */ jsx(Text, { size: size3 === "compact" ? "md" : "lg", weight: "bold", children: /* @__PURE__ */ jsx("span", { className: eventCardPriceVariants({ size: size3 }), children: price }) }) })
15601
- ] }) })
15948
+ )
15949
+ ] })
15602
15950
  ]
15603
15951
  }
15604
15952
  ) });
15605
15953
  }
15606
15954
  );
15607
- EventCard.displayName = "EventCard";
15955
+ CategoryCard.displayName = "CategoryCard";
15608
15956
  var promoCardBadgeVariants = cva(
15609
15957
  // Base classes - absolute positioning, z-index
15610
15958
  "absolute z-10",
@@ -15638,14 +15986,14 @@ var promoCardBadgeSurfaceVariants = cva(
15638
15986
  }
15639
15987
  );
15640
15988
  var promoCardCtaButtonVariants = cva(
15641
- // Base classes - flex layout, button tokens, motion
15642
- `inline-flex items-center justify-center ${BUTTON_TOKENS.radius} ${BUTTON_TOKENS.variant.primary.background} ${BUTTON_TOKENS.variant.primary.text} ${BUTTON_TOKENS.shadow.primary} ${BUTTON_TOKENS.variant.primary.hover} ${BUTTON_TOKENS.transition.colors} font-semibold`,
15989
+ // Base classes - flex layout, CTA button tokens, motion
15990
+ `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`,
15643
15991
  {
15644
15992
  variants: {
15645
15993
  size: {
15646
- default: `${BUTTON_TOKENS.height.md} ${BUTTON_TOKENS.padding.horizontal.md} ${BUTTON_TOKENS.padding.vertical.sm} ${BUTTON_TOKENS.fontSize.md}`,
15994
+ 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}`,
15647
15995
  // Default size - uses md height and padding
15648
- compact: `${BUTTON_TOKENS.height.sm} ${BUTTON_TOKENS.padding.horizontal.sm} ${BUTTON_TOKENS.padding.vertical.sm} ${BUTTON_TOKENS.fontSize.sm}`
15996
+ 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}`
15649
15997
  // Compact size - uses sm height and padding
15650
15998
  }
15651
15999
  },
@@ -15777,6 +16125,22 @@ var PromoCard = React49.forwardRef(
15777
16125
  }
15778
16126
  );
15779
16127
  PromoCard.displayName = "PromoCard";
16128
+ var ticketCardVariants = cva("group relative", {
16129
+ variants: {
16130
+ size: {
16131
+ default: "",
16132
+ compact: ""
16133
+ },
16134
+ variant: {
16135
+ default: "",
16136
+ featured: ""
16137
+ }
16138
+ },
16139
+ defaultVariants: {
16140
+ size: "default",
16141
+ variant: "default"
16142
+ }
16143
+ });
15780
16144
  var ticketCardBadgeVariants = cva(
15781
16145
  // Base classes - absolute positioning, z-index
15782
16146
  "absolute z-10",
@@ -15784,7 +16148,7 @@ var ticketCardBadgeVariants = cva(
15784
16148
  variants: {
15785
16149
  size: {
15786
16150
  default: DOMAIN_TOKENS.badges.position.default,
15787
- // Default positioning - maps to semanticSpacing.md (12px)
16151
+ // Default positioning - maps to semanticSpacing.md (16px)
15788
16152
  compact: DOMAIN_TOKENS.badges.position.compact
15789
16153
  // Compact positioning - maps to semanticSpacing.sm (8px)
15790
16154
  }
@@ -15796,7 +16160,7 @@ var ticketCardBadgeVariants = cva(
15796
16160
  );
15797
16161
  var ticketCardBadgeSurfaceVariants = cva(
15798
16162
  // Base classes - flex layout, items center, badge styling
15799
- `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`,
16163
+ `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}`,
15800
16164
  {
15801
16165
  variants: {
15802
16166
  variant: {
@@ -15813,6 +16177,45 @@ var ticketCardBadgeSurfaceVariants = cva(
15813
16177
  }
15814
16178
  }
15815
16179
  );
16180
+ var ticketCardTitleVariants = cva(
16181
+ `${TEXT_TOKENS.fontSize.lg} ${TEXT_TOKENS.fontWeight.bold} ${MOTION_TOKENS.transition.colors} ${DOMAIN_TOKENS.text.hover.primary} ${DOMAIN_TOKENS.text.lineClamp.two}`,
16182
+ {
16183
+ variants: {
16184
+ size: {
16185
+ default: DOMAIN_TOKENS.spacing.section.subtitleToMetadata,
16186
+ compact: DOMAIN_TOKENS.spacing.section.titleToSubtitle
16187
+ }
16188
+ },
16189
+ defaultVariants: {
16190
+ size: "default"
16191
+ }
16192
+ }
16193
+ );
16194
+ var ticketCardDateVariants = cva(
16195
+ `${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.sm} ${MOTION_TOKENS.transition.colors}`,
16196
+ {
16197
+ variants: {
16198
+ size: {
16199
+ default: DOMAIN_TOKENS.spacing.section.titleToSubtitle,
16200
+ compact: `${DOMAIN_TOKENS.spacing.section.titleToSubtitle} ${TEXT_TOKENS.fontSize.xs}`
16201
+ }
16202
+ },
16203
+ defaultVariants: {
16204
+ size: "default"
16205
+ }
16206
+ }
16207
+ );
16208
+ var ticketCardDescriptionVariants = cva(`${DOMAIN_TOKENS.text.lineClamp.two}`, {
16209
+ variants: {
16210
+ size: {
16211
+ default: DOMAIN_TOKENS.spacing.section.subtitleToMetadata,
16212
+ compact: DOMAIN_TOKENS.spacing.section.titleToSubtitle
16213
+ }
16214
+ },
16215
+ defaultVariants: {
16216
+ size: "default"
16217
+ }
16218
+ });
15816
16219
  var ticketCardPriceCapacityContainerVariants = cva(
15817
16220
  // Base classes - flex layout, price/capacity spacing
15818
16221
  `flex items-center ${DOMAIN_TOKENS.priceCapacity.spacing}`,
@@ -15830,7 +16233,7 @@ var ticketCardPriceCapacityContainerVariants = cva(
15830
16233
  );
15831
16234
  var ticketCardPriceVariants = cva(
15832
16235
  // Base classes - price text color
15833
- `${DOMAIN_TOKENS.priceCapacity.text.primary} font-bold`,
16236
+ `${DOMAIN_TOKENS.priceCapacity.text.primary} ${TEXT_TOKENS.fontWeight.bold}`,
15834
16237
  {
15835
16238
  variants: {
15836
16239
  size: {
@@ -15864,7 +16267,7 @@ var ticketCardCapacityVariants = cva(
15864
16267
  );
15865
16268
  var ticketCardAvailabilityVariants = cva(
15866
16269
  // Base classes - availability indicator styling
15867
- `inline-flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${TEXT_TOKENS.fontSize.xs} font-medium`,
16270
+ `inline-flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${TEXT_TOKENS.fontSize.xs} ${TEXT_TOKENS.fontWeight.medium}`,
15868
16271
  {
15869
16272
  variants: {
15870
16273
  availability: {
@@ -15897,7 +16300,7 @@ var ticketCardFooterVariants = cva(
15897
16300
  );
15898
16301
  var ticketCardPurchaseButtonVariants = cva(
15899
16302
  // Base classes - flex layout, badge gradient, motion
15900
- `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} font-semibold transform`,
16303
+ `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`,
15901
16304
  {
15902
16305
  variants: {
15903
16306
  size: {
@@ -15932,9 +16335,38 @@ var ticketCardPurchaseButtonIconVariants = cva(
15932
16335
  }
15933
16336
  }
15934
16337
  );
16338
+ var ticketCardImageOverlayVariants = cva(
16339
+ `absolute inset-0 ${DOMAIN_TOKENS.image.overlay.gradient} opacity-0 ${MOTION_TOKENS.transition.opacity} ${MOTION_TOKENS.duration.normal} group-hover:opacity-100`,
16340
+ {
16341
+ variants: {
16342
+ size: {
16343
+ default: "",
16344
+ compact: ""
16345
+ }
16346
+ },
16347
+ defaultVariants: {
16348
+ size: "default"
16349
+ }
16350
+ }
16351
+ );
16352
+ var ticketCardImageTransformVariants = cva(
16353
+ `object-cover ${MOTION_TOKENS.transition.transform} ${MOTION_TOKENS.duration.slow} ${DOMAIN_TOKENS.motion.hover.scale}`,
16354
+ {
16355
+ variants: {
16356
+ size: {
16357
+ default: "",
16358
+ compact: ""
16359
+ }
16360
+ },
16361
+ defaultVariants: {
16362
+ size: "default"
16363
+ }
16364
+ }
16365
+ );
15935
16366
  var TicketCard = React49.forwardRef(
15936
16367
  ({
15937
16368
  title,
16369
+ date,
15938
16370
  description,
15939
16371
  price,
15940
16372
  capacity,
@@ -15981,57 +16413,368 @@ var TicketCard = React49.forwardRef(
15981
16413
  }
15982
16414
  };
15983
16415
  const availabilityLabel = getAvailabilityLabel();
16416
+ const formattedDate = date ? formatDate(date) : null;
16417
+ const dateTimeValue = (() => {
16418
+ if (!date) return null;
16419
+ if (typeof date === "string") {
16420
+ return new Date(date).toISOString();
16421
+ }
16422
+ if (date instanceof Date) {
16423
+ return date.toISOString();
16424
+ }
16425
+ return new Date(date).toISOString();
16426
+ })();
15984
16427
  return /* @__PURE__ */ jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxs(
15985
16428
  CardBase,
15986
16429
  {
15987
16430
  ref,
15988
16431
  size: size3,
15989
16432
  variant: cardVariant,
15990
- className: cn("group relative", className),
16433
+ className: cn(ticketCardVariants({ size: size3, variant: cardVariant }), className),
15991
16434
  ...props,
15992
16435
  children: [
15993
16436
  featured && featuredBadgeText && /* @__PURE__ */ jsx("div", { className: ticketCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
15994
16437
  vipBadgeText && /* @__PURE__ */ jsx("div", { className: cn(ticketCardBadgeVariants({ size: size3 }), getVipBadgePosition()), children: /* @__PURE__ */ jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "vip" }), children: vipBadgeText }) }),
15995
16438
  discountBadgeText && /* @__PURE__ */ jsx("div", { className: cn(ticketCardBadgeVariants({ size: size3 }), getDiscountBadgePosition()), children: /* @__PURE__ */ jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "discount" }), children: discountBadgeText }) }),
15996
- showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxs("div", { className: "relative w-full overflow-hidden bg-gradient-to-br from-surface-elevated1 to-surface-elevated2", children: [
15997
- imageUrl ? /* @__PURE__ */ jsx(
15998
- "img",
15999
- {
16000
- src: imageUrl,
16001
- alt: title,
16002
- className: cn(
16003
- "h-full w-full object-cover",
16004
- DOMAIN_TOKENS.motion.hover.transition,
16005
- DOMAIN_TOKENS.motion.hover.scale
16006
- )
16007
- }
16008
- ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
16009
- Icon2,
16010
- {
16011
- name: "info",
16012
- size: "xl",
16013
- color: "muted",
16014
- className: ICON_TOKENS.sizes["4xl"],
16015
- "aria-hidden": "true"
16016
- }
16017
- ) }),
16018
- /* @__PURE__ */ jsx(
16019
- "div",
16439
+ showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxs(
16440
+ "div",
16441
+ {
16442
+ className: cn(
16443
+ "relative w-full overflow-hidden",
16444
+ DOMAIN_TOKENS.image.placeholder.gradient
16445
+ ),
16446
+ children: [
16447
+ imageUrl ? /* @__PURE__ */ jsx(
16448
+ "img",
16449
+ {
16450
+ src: imageUrl,
16451
+ alt: title,
16452
+ className: cn("h-full w-full", ticketCardImageTransformVariants({ size: size3 }))
16453
+ }
16454
+ ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
16455
+ Icon2,
16456
+ {
16457
+ name: "info",
16458
+ size: "xl",
16459
+ color: "muted",
16460
+ className: ICON_TOKENS.sizes["4xl"],
16461
+ "aria-hidden": "true"
16462
+ }
16463
+ ) }),
16464
+ /* @__PURE__ */ jsx("div", { className: ticketCardImageOverlayVariants({ size: size3 }) })
16465
+ ]
16466
+ }
16467
+ ) }),
16468
+ /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size: size3, children: [
16469
+ /* @__PURE__ */ jsx(Heading, { level: 3, className: ticketCardTitleVariants({ size: size3 }), children: href ? /* @__PURE__ */ jsx(Link, { href, variant: "ghost", children: title }) : title }),
16470
+ formattedDate && dateTimeValue && /* @__PURE__ */ jsx("time", { dateTime: dateTimeValue, className: ticketCardDateVariants({ size: size3 }), children: formattedDate }),
16471
+ description && /* @__PURE__ */ jsx(Text, { size: "sm", variant: "muted", className: ticketCardDescriptionVariants({ size: size3 }), children: description }),
16472
+ (price || capacity) && /* @__PURE__ */ jsxs("div", { className: ticketCardPriceCapacityContainerVariants({ size: size3 }), children: [
16473
+ price && /* @__PURE__ */ jsx(
16474
+ Text,
16475
+ {
16476
+ size: size3 === "compact" ? "md" : "lg",
16477
+ weight: "bold",
16478
+ className: ticketCardPriceVariants({ size: size3 }),
16479
+ children: price
16480
+ }
16481
+ ),
16482
+ capacity && /* @__PURE__ */ jsx(
16483
+ Text,
16484
+ {
16485
+ size: size3 === "compact" ? "xs" : "sm",
16486
+ variant: "muted",
16487
+ className: ticketCardCapacityVariants({ size: size3 }),
16488
+ children: capacity
16489
+ }
16490
+ )
16491
+ ] }),
16492
+ availabilityLabel && /* @__PURE__ */ jsx("div", { className: ticketCardAvailabilityVariants({ availability }), children: /* @__PURE__ */ jsx(Text, { size: "xs", variant: availability === "sold_out" ? "muted" : "primary", children: availabilityLabel }) })
16493
+ ] }),
16494
+ /* @__PURE__ */ jsx(CardBaseFooterWrapper, { size: size3, children: /* @__PURE__ */ jsxs("div", { className: cn("w-full", ticketCardFooterVariants({ size: size3 })), children: [
16495
+ purchaseUrl && !isPurchaseDisabled && /* @__PURE__ */ jsxs(
16496
+ Link,
16020
16497
  {
16498
+ href: purchaseUrl,
16021
16499
  className: cn(
16022
- "absolute inset-0 opacity-0 transition-opacity duration-normal group-hover:opacity-100",
16023
- DOMAIN_TOKENS.image.overlay.gradient
16024
- )
16500
+ "w-full",
16501
+ ticketCardPurchaseButtonVariants({ size: size3, disabled: false })
16502
+ ),
16503
+ target: "_blank",
16504
+ rel: "noopener noreferrer",
16505
+ children: [
16506
+ purchaseLabel,
16507
+ /* @__PURE__ */ jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size: size3 }) })
16508
+ ]
16509
+ }
16510
+ ),
16511
+ (!purchaseUrl || isPurchaseDisabled) && /* @__PURE__ */ jsxs(
16512
+ "div",
16513
+ {
16514
+ className: cn(
16515
+ "w-full",
16516
+ ticketCardPurchaseButtonVariants({ size: size3, disabled: isPurchaseDisabled })
16517
+ ),
16518
+ children: [
16519
+ purchaseLabel,
16520
+ /* @__PURE__ */ jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size: size3 }) })
16521
+ ]
16025
16522
  }
16026
16523
  )
16027
- ] }) }),
16524
+ ] }) })
16525
+ ]
16526
+ }
16527
+ ) });
16528
+ }
16529
+ );
16530
+ TicketCard.displayName = "TicketCard";
16531
+ var eventCardVariants = cva(
16532
+ // Base classes - surface, border, radius, shadow, motion from tokens
16533
+ `${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`,
16534
+ {
16535
+ variants: {
16536
+ size: {
16537
+ default: `${CARD_TOKENS.size.md.padding} ${DOMAIN_TOKENS.layout.gap.default}`,
16538
+ compact: `${CARD_TOKENS.size.sm.padding} ${DOMAIN_TOKENS.layout.gap.compact}`
16539
+ },
16540
+ layout: {
16541
+ vertical: "flex flex-col"
16542
+ },
16543
+ variant: {
16544
+ default: "",
16545
+ featured: `${DOMAIN_TOKENS.badges.surface.featured}`
16546
+ }
16547
+ },
16548
+ defaultVariants: {
16549
+ size: "default",
16550
+ layout: "vertical",
16551
+ variant: "default"
16552
+ }
16553
+ }
16554
+ );
16555
+ var eventCardBadgeVariants = cva(
16556
+ // Base classes - absolute positioning, z-index
16557
+ "absolute z-10",
16558
+ {
16559
+ variants: {
16560
+ size: {
16561
+ default: DOMAIN_TOKENS.badges.position.default,
16562
+ compact: DOMAIN_TOKENS.badges.position.compact
16563
+ }
16564
+ },
16565
+ defaultVariants: {
16566
+ size: "default"
16567
+ }
16568
+ }
16569
+ );
16570
+ var eventCardBadgeSurfaceVariants = cva(
16571
+ // Base classes - flex layout, items center, badge styling from tokens
16572
+ `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}`,
16573
+ {
16574
+ variants: {
16575
+ variant: {
16576
+ default: DOMAIN_TOKENS.badges.surface.default,
16577
+ featured: DOMAIN_TOKENS.badges.surface.featured
16578
+ }
16579
+ },
16580
+ defaultVariants: {
16581
+ variant: "featured"
16582
+ }
16583
+ }
16584
+ );
16585
+ var eventCardMetadataVariants = cva(
16586
+ // Base classes - flex column, metadata spacing from tokens
16587
+ `flex flex-col ${DOMAIN_TOKENS.metadata.spacing.vertical}`,
16588
+ {
16589
+ variants: {
16590
+ size: {
16591
+ default: "",
16592
+ compact: ""
16593
+ }
16594
+ },
16595
+ defaultVariants: {
16596
+ size: "default"
16597
+ }
16598
+ }
16599
+ );
16600
+ var eventCardMetadataItemVariants = cva(
16601
+ // Base classes - flex items center, metadata spacing and text from tokens
16602
+ `flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.xs}`,
16603
+ {
16604
+ variants: {
16605
+ size: {
16606
+ default: "",
16607
+ compact: ""
16608
+ }
16609
+ },
16610
+ defaultVariants: {
16611
+ size: "default"
16612
+ }
16613
+ }
16614
+ );
16615
+ var eventCardMetadataIconVariants = cva(
16616
+ // Base classes - icon size and color from tokens
16617
+ `${DOMAIN_TOKENS.metadata.icon.sizeSm} ${DOMAIN_TOKENS.metadata.icon.default}`,
16618
+ {
16619
+ variants: {
16620
+ size: {
16621
+ default: "",
16622
+ compact: ""
16623
+ }
16624
+ },
16625
+ defaultVariants: {
16626
+ size: "default"
16627
+ }
16628
+ }
16629
+ );
16630
+ var eventCardFooterVariants = cva(
16631
+ // Base classes - border top, spacing from tokens
16632
+ "border-t border-border",
16633
+ {
16634
+ variants: {
16635
+ size: {
16636
+ default: DOMAIN_TOKENS.spacing.footer.paddingTopDefault,
16637
+ compact: DOMAIN_TOKENS.spacing.footer.paddingTopCompact
16638
+ }
16639
+ },
16640
+ defaultVariants: {
16641
+ size: "default"
16642
+ }
16643
+ }
16644
+ );
16645
+ var eventCardTicketButtonVariants = cva(
16646
+ // Base classes - flex layout, badge gradient, motion from tokens
16647
+ `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`,
16648
+ {
16649
+ variants: {
16650
+ size: {
16651
+ default: DOMAIN_TOKENS.spacing.button.paddingDefault,
16652
+ compact: DOMAIN_TOKENS.spacing.button.paddingCompact
16653
+ }
16654
+ },
16655
+ defaultVariants: {
16656
+ size: "default"
16657
+ }
16658
+ }
16659
+ );
16660
+ var eventCardTicketButtonIconVariants = cva(
16661
+ // Base classes - icon size and spacing from tokens
16662
+ `${DOMAIN_TOKENS.metadata.icon.sizeSm} ${DOMAIN_TOKENS.spacing.button.iconMarginLeft}`,
16663
+ {
16664
+ variants: {
16665
+ size: {
16666
+ default: "",
16667
+ compact: ""
16668
+ }
16669
+ },
16670
+ defaultVariants: {
16671
+ size: "default"
16672
+ }
16673
+ }
16674
+ );
16675
+ var eventCardPriceVariants = cva(
16676
+ // Base classes - price gradient text from tokens
16677
+ `bg-gradient-to-r from-accent-500 to-primary-600 bg-clip-text text-transparent`,
16678
+ {
16679
+ variants: {
16680
+ size: {
16681
+ default: TEXT_TOKENS.fontSize.lg,
16682
+ compact: TEXT_TOKENS.fontSize.md
16683
+ }
16684
+ },
16685
+ defaultVariants: {
16686
+ size: "default"
16687
+ }
16688
+ }
16689
+ );
16690
+ var EventCard = React49.forwardRef(
16691
+ ({
16692
+ title,
16693
+ description,
16694
+ date,
16695
+ venueName,
16696
+ price,
16697
+ imageUrl,
16698
+ href,
16699
+ ticketUrl,
16700
+ featured = false,
16701
+ showImage = true,
16702
+ getTicketsLabel,
16703
+ featuredBadgeText,
16704
+ size: size3 = "default",
16705
+ layout = "vertical",
16706
+ variant,
16707
+ className,
16708
+ animation,
16709
+ ...props
16710
+ }, ref) => {
16711
+ const animationProps = resolveComponentAnimations({
16712
+ animation: animation?.animation || "fadeInUp",
16713
+ hoverAnimation: animation?.hoverAnimation || "hoverLift",
16714
+ animationProps: animation?.animationProps
16715
+ });
16716
+ const cardVariant = variant || (featured ? "featured" : "default");
16717
+ return /* @__PURE__ */ jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxs(
16718
+ CardBase,
16719
+ {
16720
+ ref,
16721
+ size: size3,
16722
+ variant: cardVariant,
16723
+ className: cn(
16724
+ eventCardVariants({ size: size3, layout, variant: cardVariant }),
16725
+ "group relative",
16726
+ className
16727
+ ),
16728
+ ...props,
16729
+ children: [
16730
+ featured && featuredBadgeText && /* @__PURE__ */ jsx("div", { className: eventCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsx("span", { className: eventCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
16731
+ showImage && /* @__PURE__ */ jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxs(
16732
+ "div",
16733
+ {
16734
+ className: cn("relative w-full overflow-hidden", DOMAIN_TOKENS.surface.bg.default),
16735
+ children: [
16736
+ imageUrl ? /* @__PURE__ */ jsx(
16737
+ "img",
16738
+ {
16739
+ src: imageUrl,
16740
+ alt: title,
16741
+ className: cn(
16742
+ "h-full w-full object-cover",
16743
+ DOMAIN_TOKENS.motion.hover.transition,
16744
+ DOMAIN_TOKENS.motion.hover.scale
16745
+ )
16746
+ }
16747
+ ) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx(
16748
+ Icon2,
16749
+ {
16750
+ name: "info",
16751
+ size: "xl",
16752
+ color: "muted",
16753
+ className: ICON_TOKENS.sizes["4xl"],
16754
+ "aria-hidden": "true"
16755
+ }
16756
+ ) }),
16757
+ /* @__PURE__ */ jsx(
16758
+ "div",
16759
+ {
16760
+ className: cn(
16761
+ "absolute inset-0 opacity-0 group-hover:opacity-100",
16762
+ DOMAIN_TOKENS.motion.hover.transition,
16763
+ DOMAIN_TOKENS.image.overlay.gradient
16764
+ )
16765
+ }
16766
+ )
16767
+ ]
16768
+ }
16769
+ ) }),
16028
16770
  /* @__PURE__ */ jsxs(CardBaseContentWrapper, { size: size3, children: [
16029
16771
  /* @__PURE__ */ jsx(
16030
16772
  Heading,
16031
16773
  {
16032
16774
  level: 3,
16033
16775
  className: cn(
16034
- "line-clamp-2 transition-colors group-hover:text-primary",
16776
+ "line-clamp-2 group-hover:text-primary",
16777
+ DOMAIN_TOKENS.motion.hover.transition,
16035
16778
  TEXT_TOKENS.fontSize.lg,
16036
16779
  TEXT_TOKENS.fontWeight.bold,
16037
16780
  DOMAIN_TOKENS.spacing.section.titleToSubtitle
@@ -16043,7 +16786,7 @@ var TicketCard = React49.forwardRef(
16043
16786
  Text,
16044
16787
  {
16045
16788
  size: "sm",
16046
- variant: "muted",
16789
+ muted: true,
16047
16790
  className: cn(
16048
16791
  "line-clamp-2",
16049
16792
  size3 === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
@@ -16051,48 +16794,56 @@ var TicketCard = React49.forwardRef(
16051
16794
  children: description
16052
16795
  }
16053
16796
  ),
16054
- (price || capacity) && /* @__PURE__ */ jsxs("div", { className: ticketCardPriceCapacityContainerVariants({ size: size3 }), children: [
16055
- price && /* @__PURE__ */ jsx(Text, { size: size3 === "compact" ? "md" : "lg", weight: "bold", children: /* @__PURE__ */ jsx("span", { className: ticketCardPriceVariants({ size: size3 }), children: price }) }),
16056
- capacity && /* @__PURE__ */ jsx(Text, { size: size3 === "compact" ? "xs" : "sm", children: /* @__PURE__ */ jsx("span", { className: ticketCardCapacityVariants({ size: size3 }), children: capacity }) })
16057
- ] }),
16058
- availabilityLabel && /* @__PURE__ */ jsx("div", { className: ticketCardAvailabilityVariants({ availability }), children: /* @__PURE__ */ jsx(Text, { size: "xs", variant: availability === "sold_out" ? "muted" : "primary", children: availabilityLabel }) })
16797
+ /* @__PURE__ */ jsxs("div", { className: eventCardMetadataVariants({ size: size3 }), children: [
16798
+ date && /* @__PURE__ */ jsxs("div", { className: eventCardMetadataItemVariants({ size: size3 }), role: "text", children: [
16799
+ /* @__PURE__ */ jsx(
16800
+ IconCalendar,
16801
+ {
16802
+ className: eventCardMetadataIconVariants({ size: size3 }),
16803
+ "aria-hidden": true
16804
+ }
16805
+ ),
16806
+ /* @__PURE__ */ jsx(Text, { size: "xs", muted: true, children: /* @__PURE__ */ jsx("time", { dateTime: date, children: date }) })
16807
+ ] }),
16808
+ venueName && /* @__PURE__ */ jsxs("div", { className: eventCardMetadataItemVariants({ size: size3 }), role: "text", children: [
16809
+ /* @__PURE__ */ jsx(
16810
+ IconLocation,
16811
+ {
16812
+ className: eventCardMetadataIconVariants({ size: size3 }),
16813
+ "aria-hidden": true
16814
+ }
16815
+ ),
16816
+ /* @__PURE__ */ jsx(Text, { size: "xs", muted: true, className: "line-clamp-1", children: /* @__PURE__ */ jsx("address", { children: venueName }) })
16817
+ ] })
16818
+ ] })
16059
16819
  ] }),
16060
- /* @__PURE__ */ jsx(CardBaseFooterWrapper, { size: size3, children: /* @__PURE__ */ jsxs("div", { className: cn("w-full", ticketCardFooterVariants({ size: size3 })), children: [
16061
- purchaseUrl && !isPurchaseDisabled && /* @__PURE__ */ jsxs(
16820
+ /* @__PURE__ */ jsx(CardBaseFooterWrapper, { size: size3, children: /* @__PURE__ */ jsxs("div", { className: cn("w-full", eventCardFooterVariants({ size: size3 })), children: [
16821
+ ticketUrl && /* @__PURE__ */ jsxs(
16062
16822
  Link,
16063
16823
  {
16064
- href: purchaseUrl,
16065
- className: cn(
16066
- "w-full",
16067
- ticketCardPurchaseButtonVariants({ size: size3, disabled: false })
16068
- ),
16824
+ href: ticketUrl,
16825
+ className: cn("w-full", eventCardTicketButtonVariants({ size: size3 })),
16069
16826
  target: "_blank",
16070
16827
  rel: "noopener noreferrer",
16071
16828
  children: [
16072
- purchaseLabel,
16073
- /* @__PURE__ */ jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size: size3 }) })
16829
+ getTicketsLabel,
16830
+ /* @__PURE__ */ jsx(
16831
+ IconArrowRight,
16832
+ {
16833
+ className: eventCardTicketButtonIconVariants({ size: size3 }),
16834
+ "aria-hidden": true
16835
+ }
16836
+ )
16074
16837
  ]
16075
16838
  }
16076
16839
  ),
16077
- (!purchaseUrl || isPurchaseDisabled) && /* @__PURE__ */ jsxs(
16078
- "div",
16079
- {
16080
- className: cn(
16081
- "w-full",
16082
- ticketCardPurchaseButtonVariants({ size: size3, disabled: isPurchaseDisabled })
16083
- ),
16084
- children: [
16085
- purchaseLabel,
16086
- /* @__PURE__ */ jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size: size3 }) })
16087
- ]
16088
- }
16089
- )
16840
+ !ticketUrl && price && /* @__PURE__ */ jsx("div", { className: "text-right", children: /* @__PURE__ */ jsx(Text, { size: size3 === "compact" ? "md" : "lg", weight: "bold", children: /* @__PURE__ */ jsx("span", { className: eventCardPriceVariants({ size: size3 }), children: price }) }) })
16090
16841
  ] }) })
16091
16842
  ]
16092
16843
  }
16093
16844
  ) });
16094
16845
  }
16095
16846
  );
16096
- TicketCard.displayName = "TicketCard";
16847
+ EventCard.displayName = "EventCard";
16097
16848
 
16098
- export { ALERT_TOKENS, Alert, ArtistCard, BUTTON_TOKENS, Backdrop, Body, Box, Breadcrumbs, Button, CARD_TOKENS, CHECKBOX_TOKENS, Caption, Card, CardBody, CardFooter, CardHeader, Checkbox, Code, Column, Container, Surface2 as ContainerSurface, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DATA_TOKENS, DOMAIN_TOKENS, DROPDOWN_TOKENS, DataListRoot as DataList, DataListItem, DataListLabel, DataListRoot, DataListValue, Dialog, DialogBody, DialogDescription, DialogFooter, DialogHeader, DialogRoot, DialogTitle, Display, DropdownMenuCheckItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRoot, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, 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, Lead, 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, PopoverArrow, PopoverContent, PopoverRoot, PopoverTrigger, Portal3 as Portal, 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, UI_COLORS, accentColoredShadows, accentColors, alertVariants, allCSSVariables, allCSSVariablesCSS, animations, baseColors, bodyVariants, borderRadius, buttonVariants, captionVariants, chartColors, checkboxVariants, codeVariants, colorCSSVariables, componentRadius, componentShadowMapping, surfaceVariants2 as containerSurfaceVariants, cssVariableColorTokens, displayVariants, durations, easings, elevationShadows, focusRings, fontFamily, fontSize, fontSizeWithMd, fontWeight, generateCSSVariablesCSS, glowEffects, headingVariants, iconVariants, inputVariants, keyframes, labelVariants, layoutSpacing, leadVariants, letterSpacing, lineHeight, motionCSSVariables, motionV2CSSVariables, motionV2Combined, motionV2Durations, motionV2Easings, motionV2Fade, motionV2Scale, motionV2Slide, motionV2TailwindConfig, motionV2Transitions, popoverContentVariants, 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 };
16849
+ export { ALERT_TOKENS, Alert, ArtistCard, BUTTON_TOKENS, Backdrop, Body, Box, Breadcrumbs, Button, CARD_TOKENS, CHECKBOX_TOKENS, Caption, Card, CardBody, CardFooter, CardHeader, CategoryCard, Checkbox, Code, Column, Container, Surface2 as ContainerSurface, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DATA_TOKENS, DOMAIN_TOKENS, DROPDOWN_TOKENS, DataListRoot as DataList, DataListItem, DataListLabel, DataListRoot, DataListValue, Dialog, DialogBody, DialogDescription, DialogFooter, DialogHeader, DialogRoot, DialogTitle, Display, DropdownMenuCheckItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuRoot, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, 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, Lead, 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, PopoverArrow, PopoverContent, PopoverRoot, PopoverTrigger, Portal3 as Portal, 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, UI_COLORS, accentColoredShadows, accentColors, alertVariants, allCSSVariables, allCSSVariablesCSS, animations, baseColors, bodyVariants, borderRadius, buttonVariants, captionVariants, chartColors, checkboxVariants, codeVariants, colorCSSVariables, componentRadius, componentShadowMapping, surfaceVariants2 as containerSurfaceVariants, cssVariableColorTokens, displayVariants, durations, easings, elevationShadows, focusRings, fontFamily, fontSize, fontSizeWithMd, fontWeight, generateCSSVariablesCSS, glowEffects, headingVariants, iconVariants, inputVariants, keyframes, labelVariants, layoutSpacing, leadVariants, letterSpacing, lineHeight, motionCSSVariables, motionV2CSSVariables, motionV2Combined, motionV2Durations, motionV2Easings, motionV2Fade, motionV2Scale, motionV2Slide, motionV2TailwindConfig, motionV2Transitions, popoverContentVariants, 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 };