@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.cjs CHANGED
@@ -726,6 +726,68 @@ var CARD_TOKENS = {
726
726
  }
727
727
  };
728
728
 
729
+ // src/tokens/components/artist.ts
730
+ var ARTIST_TOKENS = {
731
+ /**
732
+ * Image container tokens
733
+ * Layout classes for image container wrapper
734
+ */
735
+ image: {
736
+ /**
737
+ * Container layout tokens
738
+ * Positioning and sizing for image container
739
+ */
740
+ container: {
741
+ /**
742
+ * Base container layout
743
+ * Relative positioning, full width, overflow hidden
744
+ * Uses Tailwind layout utilities (allowed per architecture)
745
+ */
746
+ layout: "relative w-full overflow-hidden"
747
+ },
748
+ /**
749
+ * Image sizing tokens
750
+ * Full width and height for images
751
+ */
752
+ sizing: {
753
+ /**
754
+ * Full size image
755
+ * Uses Tailwind sizing utilities (allowed per architecture)
756
+ */
757
+ full: "h-full w-full"
758
+ },
759
+ /**
760
+ * Placeholder container tokens
761
+ * Layout for placeholder icon container when no image is provided
762
+ */
763
+ placeholder: {
764
+ /**
765
+ * Placeholder container layout
766
+ * Flex centering for placeholder icon
767
+ * Uses Tailwind layout utilities (allowed per architecture)
768
+ */
769
+ container: "flex h-full w-full items-center justify-center"
770
+ }
771
+ },
772
+ /**
773
+ * Footer border tokens
774
+ * Border styling for card footer separator
775
+ */
776
+ footer: {
777
+ /**
778
+ * Footer border tokens
779
+ * Top border separator for footer section
780
+ */
781
+ border: {
782
+ /**
783
+ * Footer border top
784
+ * Uses semantic border color token
785
+ */
786
+ top: "border-t border-border"
787
+ }
788
+ }
789
+ };
790
+
729
791
  // src/tokens/spacing.ts
730
792
  var spacing = {
731
793
  // Zero spacing
@@ -988,101 +1050,6 @@ var tailwindSpacingConfig = {
988
1050
 
989
1051
  // src/tokens/components/data.ts
990
1052
  var DATA_TOKENS = {
991
- /**
992
- * Table Component Tokens
993
- */
994
- table: {
995
- /**
996
- * Table row heights by size
997
- * Maps to Tailwind height utilities
998
- */
999
- rowHeight: {
1000
- sm: "h-8",
1001
- // 32px (2rem) - compact rows
1002
- md: "h-10",
1003
- // 40px (2.5rem) - default rows
1004
- lg: "h-12"
1005
- // 48px (3rem) - spacious rows
1006
- },
1007
- /**
1008
- * Table cell and header padding by size
1009
- * Maps to semantic spacing tokens
1010
- */
1011
- padding: {
1012
- cell: {
1013
- sm: "p-xs",
1014
- // 4px (0.25rem) - maps to semanticSpacing.xs
1015
- md: "p-sm",
1016
- // 8px (0.5rem) - maps to semanticSpacing.sm
1017
- lg: "p-md"
1018
- // 16px (1rem) - maps to semanticSpacing.md
1019
- },
1020
- header: {
1021
- sm: "px-xs py-sm",
1022
- // 4px horizontal, 8px vertical
1023
- md: "px-sm py-md",
1024
- // 8px horizontal, 16px vertical
1025
- lg: "px-md py-lg"
1026
- // 16px horizontal, 24px vertical
1027
- }
1028
- },
1029
- /**
1030
- * Gap between table cells (horizontal spacing)
1031
- */
1032
- gap: {
1033
- sm: "gap-xs",
1034
- // 4px (0.25rem) - maps to semanticSpacing.xs
1035
- md: "gap-sm"
1036
- // 8px (0.5rem) - maps to semanticSpacing.sm
1037
- },
1038
- /**
1039
- * Border radius for table
1040
- */
1041
- radius: {
1042
- default: "rounded-md"
1043
- // 6px (0.375rem) - maps to borderRadius.md
1044
- },
1045
- /**
1046
- * Shadow tokens for table
1047
- * Maps to foundation elevation shadow tokens
1048
- */
1049
- shadow: {
1050
- none: "shadow-none",
1051
- // No shadow
1052
- subtle: "shadow-sm"
1053
- // Maps to elevationShadows.sm
1054
- },
1055
- /**
1056
- * Typography tokens for table headers and cells
1057
- * Maps to foundation typography fontSize tokens
1058
- */
1059
- typography: {
1060
- header: {
1061
- fontSize: "text-sm",
1062
- // Maps to fontSize.sm[0]
1063
- fontWeight: "font-semibold"
1064
- // Maps to fontWeight.semibold
1065
- },
1066
- cell: {
1067
- fontSize: "text-sm",
1068
- // Maps to fontSize.sm[0]
1069
- fontWeight: "font-normal"
1070
- // Maps to fontWeight.normal
1071
- }
1072
- },
1073
- /**
1074
- * Color tokens for table states
1075
- * Uses semantic color tokens
1076
- */
1077
- colors: {
1078
- border: "border-border",
1079
- // Border color
1080
- rowHover: "hover:bg-muted/50",
1081
- // Row hover background
1082
- rowSelected: "bg-muted"
1083
- // Selected row background
1084
- }
1085
- },
1086
1053
  /**
1087
1054
  * Skeleton Component Tokens
1088
1055
  */
@@ -1148,97 +1115,6 @@ var DATA_TOKENS = {
1148
1115
  inline: "inline-block"
1149
1116
  // Inline block display
1150
1117
  }
1151
- },
1152
- /**
1153
- * EmptyState Component Tokens
1154
- */
1155
- emptyState: {
1156
- /**
1157
- * Spacing tokens for EmptyState
1158
- * Maps to semantic spacing tokens
1159
- */
1160
- spacing: {
1161
- gap: "gap-md",
1162
- // 16px (1rem) - gap between elements - maps to semanticSpacing.md
1163
- padding: "p-lg"
1164
- // 24px (1.5rem) - container padding - maps to semanticSpacing.lg
1165
- },
1166
- /**
1167
- * Border radius for EmptyState container
1168
- */
1169
- radius: {
1170
- default: "rounded-xl"
1171
- // 12px (0.75rem) - maps to borderRadius.xl
1172
- },
1173
- /**
1174
- * Icon sizes by variant
1175
- * Maps to Tailwind size utilities
1176
- */
1177
- iconSize: {
1178
- sm: "size-8",
1179
- // 32px (2rem)
1180
- md: "size-12",
1181
- // 48px (3rem)
1182
- lg: "size-16"
1183
- // 64px (4rem)
1184
- },
1185
- /**
1186
- * Typography tokens for EmptyState
1187
- * Maps to foundation typography tokens
1188
- */
1189
- typography: {
1190
- title: {
1191
- fontSize: "text-lg",
1192
- // Maps to fontSize.lg[0]
1193
- fontWeight: "font-semibold"
1194
- // Maps to fontWeight.semibold
1195
- },
1196
- description: {
1197
- fontSize: "text-sm",
1198
- // Maps to fontSize.sm[0]
1199
- fontWeight: "font-normal"
1200
- // Maps to fontWeight.normal
1201
- }
1202
- }
1203
- },
1204
- /**
1205
- * DataList Component Tokens
1206
- */
1207
- dataList: {
1208
- /**
1209
- * Spacing tokens for DataList
1210
- * Maps to semantic spacing tokens
1211
- */
1212
- spacing: {
1213
- gap: "gap-md",
1214
- // 16px (1rem) - gap between items - maps to semanticSpacing.md
1215
- padding: "p-md"
1216
- // 16px (1rem) - container padding - maps to semanticSpacing.md
1217
- },
1218
- /**
1219
- * Label width tokens (for desktop horizontal layout)
1220
- * Maps to Tailwind width utilities
1221
- */
1222
- labelWidth: {
1223
- sm: "w-24",
1224
- // 96px (6rem) - small label width
1225
- md: "w-32",
1226
- // 128px (8rem) - default label width
1227
- lg: "w-40"
1228
- // 160px (10rem) - large label width
1229
- },
1230
- /**
1231
- * Row padding tokens
1232
- * Maps to semantic spacing tokens
1233
- */
1234
- rowPadding: {
1235
- sm: "py-xs",
1236
- // 4px (0.25rem) - maps to semanticSpacing.xs
1237
- md: "py-sm",
1238
- // 8px (0.5rem) - maps to semanticSpacing.sm
1239
- lg: "py-md"
1240
- // 16px (1rem) - maps to semanticSpacing.md
1241
- }
1242
1118
  }
1243
1119
  };
1244
1120
 
@@ -1583,7 +1459,7 @@ var DOMAIN_TOKENS = {
1583
1459
  },
1584
1460
  /**
1585
1461
  * Image tokens for card media
1586
- * Defines aspect ratio, radius, and overlay styles
1462
+ * Defines aspect ratio, radius, overlay styles, and placeholder gradients
1587
1463
  */
1588
1464
  image: {
1589
1465
  /**
@@ -1606,6 +1482,40 @@ var DOMAIN_TOKENS = {
1606
1482
  overlay: {
1607
1483
  gradient: "bg-gradient-to-t from-black/60 via-transparent to-transparent"
1608
1484
  // Gradient overlay for image hover states
1485
+ },
1486
+ /**
1487
+ * Placeholder gradient tokens for image placeholders
1488
+ * Used when no image URL is provided
1489
+ */
1490
+ placeholder: {
1491
+ gradient: "bg-gradient-to-br from-muted to-muted/50"
1492
+ // Placeholder gradient background
1493
+ }
1494
+ },
1495
+ /**
1496
+ * Text tokens for card text elements
1497
+ * Defines hover states and line clamping for titles and descriptions
1498
+ */
1499
+ text: {
1500
+ /**
1501
+ * Hover state tokens for text elements
1502
+ * Used for interactive text elements like titles
1503
+ */
1504
+ hover: {
1505
+ primary: "group-hover:text-primary"
1506
+ // Hover state for primary text color
1507
+ },
1508
+ /**
1509
+ * Line clamp tokens for text truncation
1510
+ * Used for limiting text to specific number of lines
1511
+ */
1512
+ lineClamp: {
1513
+ one: "line-clamp-1",
1514
+ // Single line clamp
1515
+ two: "line-clamp-2",
1516
+ // Two line clamp
1517
+ three: "line-clamp-3"
1518
+ // Three line clamp
1609
1519
  }
1610
1520
  },
1611
1521
  /**
@@ -1828,6 +1738,94 @@ var DOMAIN_TOKENS = {
1828
1738
  height: "h-6"
1829
1739
  // References spacing[6] (1.5rem / 24px) via Tailwind
1830
1740
  }
1741
+ },
1742
+ /**
1743
+ * CTA (Call-to-Action) button tokens for domain card components
1744
+ * Provides PromoCard-specific CTA button styling tokens
1745
+ * These tokens are semantically owned by domain card components, not by the Button component
1746
+ * References foundation tokens (spacing, typography, radius, shadows, motion) for consistency
1747
+ */
1748
+ cta: {
1749
+ /**
1750
+ * CTA button styling tokens
1751
+ * Used by PromoCard and other domain card components for CTA button elements
1752
+ */
1753
+ button: {
1754
+ /**
1755
+ * Button heights by size
1756
+ * Maps to Tailwind height utilities: h-8, h-9
1757
+ */
1758
+ height: {
1759
+ sm: "h-8",
1760
+ // 32px (2rem) - compact size
1761
+ md: "h-9"
1762
+ // 36px (2.25rem) - default size
1763
+ },
1764
+ /**
1765
+ * Button padding by size
1766
+ * Horizontal and vertical padding values
1767
+ * References semanticSpacing tokens
1768
+ */
1769
+ padding: {
1770
+ horizontal: {
1771
+ sm: "px-sm",
1772
+ // 8px (0.5rem) - maps to semanticSpacing.sm
1773
+ md: "px-md"
1774
+ // 16px (1rem) - maps to semanticSpacing.md
1775
+ },
1776
+ vertical: {
1777
+ sm: "py-xs"
1778
+ // 4px (0.25rem) - maps to semanticSpacing.xs
1779
+ }
1780
+ },
1781
+ /**
1782
+ * Border radius for CTA buttons
1783
+ * References borderRadius.md (6px / 0.375rem)
1784
+ * Using Tailwind class "rounded-md" which maps to borderRadius.md
1785
+ */
1786
+ radius: "rounded-md",
1787
+ // References borderRadius.md via Tailwind
1788
+ /**
1789
+ * Font sizes by button size
1790
+ * Maps to foundation typography fontSize tokens
1791
+ */
1792
+ fontSize: {
1793
+ sm: "text-xs",
1794
+ // Maps to fontSize.xs[0]
1795
+ md: "text-sm"
1796
+ // Maps to fontSize.sm[0]
1797
+ },
1798
+ /**
1799
+ * Shadow tokens for CTA buttons
1800
+ * Maps to foundation elevation shadow tokens
1801
+ */
1802
+ shadow: {
1803
+ primary: "shadow"
1804
+ // Maps to elevationShadows.xs (primary variant uses shadow)
1805
+ },
1806
+ /**
1807
+ * Color tokens for CTA button variants
1808
+ * Uses semantic color tokens that map to CSS variables
1809
+ */
1810
+ variant: {
1811
+ primary: {
1812
+ background: "bg-primary",
1813
+ // Primary background using CSS var
1814
+ text: "text-primary-foreground",
1815
+ // Primary text using CSS var
1816
+ hover: "hover:bg-primary/90"
1817
+ // Primary hover using CSS var
1818
+ }
1819
+ },
1820
+ /**
1821
+ * Transition tokens for CTA buttons
1822
+ * References MOTION_TOKENS for transitions
1823
+ */
1824
+ transition: {
1825
+ colors: "transition-colors"
1826
+ // Color transition using motion tokens
1827
+ }
1828
+ }
1831
1829
  }
1832
1830
  };
1833
1831
 
@@ -1931,40 +1929,6 @@ var INPUT_TOKENS = {
1931
1929
  text: "text-[hsl(var(--foreground))]"
1932
1930
  // File input text color using CSS var
1933
1931
  },
1934
- /**
1935
- * Select listbox tokens
1936
- * Styling for select dropdown container
1937
- */
1938
- selectListbox: {
1939
- border: "border border-[hsl(var(--border))]",
1940
- // Border color using CSS var
1941
- background: "bg-[hsl(var(--popover))]",
1942
- // Background using CSS var
1943
- text: "text-[hsl(var(--popover-foreground))]",
1944
- // Text color using CSS var
1945
- radius: "rounded-md",
1946
- // Radius token (6px)
1947
- shadow: "shadow-md"
1948
- // Shadow token
1949
- },
1950
- /**
1951
- * Select option tokens
1952
- * Styling for select option items
1953
- */
1954
- selectOption: {
1955
- focus: {
1956
- background: "focus:bg-[hsl(var(--accent))]",
1957
- // Focus background using CSS var
1958
- text: "focus:text-[hsl(var(--accent-foreground))]"
1959
- // Focus text using CSS var
1960
- },
1961
- selected: {
1962
- background: "bg-[hsl(var(--accent))]",
1963
- // Selected background using CSS var
1964
- text: "text-[hsl(var(--accent-foreground))]"
1965
- // Selected text using CSS var
1966
- }
1967
- },
1968
1932
  /**
1969
1933
  * Variant-based tokens
1970
1934
  * Border, background, and text colors for different variants
@@ -2178,35 +2142,217 @@ var INPUT_TOKENS = {
2178
2142
  }
2179
2143
  };
2180
2144
 
2181
- // src/tokens/components/checkbox.ts
2182
- var CHECKBOX_TOKENS = {
2145
+ // src/tokens/components/textarea.ts
2146
+ var TEXTAREA_TOKENS = {
2183
2147
  /**
2184
- * Checkbox sizes by size variant
2185
- * Supports xs, sm, md, lg, xl sizes
2186
- * Checkboxes are typically square and smaller than input fields
2148
+ * Shadow token
2149
+ * Maps to foundation elevation shadow tokens
2187
2150
  */
2188
- size: {
2189
- xs: {
2190
- width: "w-3.5",
2191
- // 14px (0.875rem)
2192
- height: "h-3.5",
2193
- // 14px (0.875rem)
2194
- radius: "rounded-sm",
2195
- // 4px (0.25rem)
2196
- iconSize: "size-2.5"
2197
- // 10px (0.625rem)
2151
+ shadow: "shadow-sm",
2152
+ // Maps to elevationShadows.sm
2153
+ /**
2154
+ * Variant-based tokens
2155
+ * Border, background, and text colors for different variants
2156
+ * All use CSS variable references for theme support
2157
+ */
2158
+ variant: {
2159
+ primary: {
2160
+ border: "border-[hsl(var(--tm-primary))]",
2161
+ // Primary border color
2162
+ background: "bg-[hsl(var(--tm-primary))]",
2163
+ // Primary background
2164
+ text: "text-[hsl(var(--tm-primary-foreground))]",
2165
+ // Primary text color
2166
+ focus: "focus-visible:shadow-[var(--focus-ring-primary)]"
2167
+ // Primary focus ring
2198
2168
  },
2199
- sm: {
2200
- width: "w-4",
2201
- // 16px (1rem)
2202
- height: "h-4",
2203
- // 16px (1rem)
2204
- radius: "rounded-sm",
2205
- // 4px (0.25rem)
2206
- iconSize: "size-3"
2207
- // 12px (0.75rem)
2169
+ secondary: {
2170
+ border: "border-[hsl(var(--tm-secondary))]",
2171
+ // Secondary border color
2172
+ background: "bg-[hsl(var(--tm-secondary))]",
2173
+ // Secondary background
2174
+ text: "text-[hsl(var(--tm-secondary-foreground))]",
2175
+ // Secondary text color
2176
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]"
2177
+ // Default focus ring
2208
2178
  },
2209
- md: {
2179
+ outline: {
2180
+ border: "border-[hsl(var(--input))]",
2181
+ // Input border color
2182
+ background: "bg-transparent",
2183
+ // Transparent background
2184
+ text: "text-[hsl(var(--foreground))]",
2185
+ // Foreground text color
2186
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]"
2187
+ // Default focus ring
2188
+ },
2189
+ ghost: {
2190
+ border: "border-transparent",
2191
+ // Transparent border
2192
+ background: "bg-transparent",
2193
+ // Transparent background
2194
+ text: "text-[hsl(var(--foreground))]",
2195
+ // Foreground text color
2196
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]"
2197
+ // Default focus ring
2198
+ },
2199
+ destructive: {
2200
+ border: "border-[hsl(var(--destructive))]",
2201
+ // Destructive border color
2202
+ background: "bg-[hsl(var(--destructive))]",
2203
+ // Destructive background
2204
+ text: "text-[hsl(var(--destructive-foreground))]",
2205
+ // Destructive text color
2206
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]"
2207
+ // Default focus ring
2208
+ }
2209
+ },
2210
+ /**
2211
+ * State-based tokens
2212
+ * Border, background, and text colors for different states
2213
+ * All use CSS variable references for theme support
2214
+ */
2215
+ state: {
2216
+ border: {
2217
+ default: "border-[hsl(var(--input))]",
2218
+ // Default border color using CSS var
2219
+ focus: "focus-visible:shadow-[var(--focus-ring-default)]",
2220
+ // Focus ring using CSS var
2221
+ error: "border-[hsl(var(--destructive))]",
2222
+ // Error state border using CSS var
2223
+ success: "border-[hsl(var(--semantic-success))]",
2224
+ // Success state border using CSS var
2225
+ disabled: "border-[hsl(var(--input))]"
2226
+ // Disabled state border (same as default)
2227
+ },
2228
+ background: {
2229
+ default: "bg-transparent",
2230
+ // Default background
2231
+ disabled: "bg-transparent"
2232
+ // Disabled background (same as default)
2233
+ },
2234
+ text: {
2235
+ default: "text-[hsl(var(--foreground))]",
2236
+ // Default text color using CSS var
2237
+ placeholder: "placeholder:text-[hsl(var(--muted-foreground))]",
2238
+ // Placeholder text color using CSS var
2239
+ disabled: "disabled:opacity-50"
2240
+ // Disabled text opacity
2241
+ }
2242
+ },
2243
+ /**
2244
+ * Width tokens
2245
+ * Common width utilities
2246
+ */
2247
+ width: {
2248
+ full: "w-full"
2249
+ // Full width (100%)
2250
+ },
2251
+ /**
2252
+ * Message tokens
2253
+ * Spacing, positioning, and styling for helper text and error messages
2254
+ */
2255
+ message: {
2256
+ // 8px (0.5rem) - spacing between control and message
2257
+ position: {
2258
+ bottom: "bottom-sm",
2259
+ // 8px (0.5rem) - bottom position for character counter
2260
+ right: "right-sm"
2261
+ // 8px (0.5rem) - right position for character counter
2262
+ },
2263
+ color: {
2264
+ default: "text-[hsl(var(--muted-foreground))]",
2265
+ // Default message color
2266
+ error: "text-[hsl(var(--destructive))]"}
2267
+ },
2268
+ /**
2269
+ * Size-based token structure
2270
+ * Organized by size for easy access
2271
+ */
2272
+ size: {
2273
+ xs: {
2274
+ padding: {
2275
+ horizontal: "px-xs",
2276
+ vertical: "py-xs"
2277
+ },
2278
+ radius: "rounded-sm",
2279
+ fontSize: "text-xs"},
2280
+ sm: {
2281
+ padding: {
2282
+ horizontal: "px-sm",
2283
+ vertical: "py-xs"
2284
+ },
2285
+ radius: "rounded-md",
2286
+ fontSize: "text-sm"},
2287
+ md: {
2288
+ padding: {
2289
+ horizontal: "px-sm",
2290
+ vertical: "py-xs"
2291
+ },
2292
+ radius: "rounded-md",
2293
+ fontSize: "text-base",
2294
+ fontSizeResponsive: "md:text-sm"},
2295
+ lg: {
2296
+ padding: {
2297
+ horizontal: "px-md",
2298
+ vertical: "py-sm"
2299
+ },
2300
+ radius: "rounded-md",
2301
+ fontSize: "text-base"},
2302
+ xl: {
2303
+ padding: {
2304
+ horizontal: "px-lg",
2305
+ vertical: "py-md"
2306
+ },
2307
+ radius: "rounded-lg",
2308
+ fontSize: "text-lg"}
2309
+ }
2310
+ };
2311
+
2312
+ // src/tokens/components/form.ts
2313
+ var FORM_TOKENS = {
2314
+ /**
2315
+ * Label tokens
2316
+ * Spacing and styling for labels
2317
+ */
2318
+ label: {
2319
+ // 8px (0.5rem) - spacing between label and control
2320
+ /**
2321
+ * Color for required asterisk mark
2322
+ */
2323
+ requiredMark: "text-destructive"
2324
+ // Color for required asterisk
2325
+ }};
2326
+
2327
+ // src/tokens/components/checkbox.ts
2328
+ var CHECKBOX_TOKENS = {
2329
+ /**
2330
+ * Checkbox sizes by size variant
2331
+ * Supports xs, sm, md, lg, xl sizes
2332
+ * Checkboxes are typically square and smaller than input fields
2333
+ */
2334
+ size: {
2335
+ xs: {
2336
+ width: "w-3.5",
2337
+ // 14px (0.875rem)
2338
+ height: "h-3.5",
2339
+ // 14px (0.875rem)
2340
+ radius: "rounded-sm",
2341
+ // 4px (0.25rem)
2342
+ iconSize: "size-2.5"
2343
+ // 10px (0.625rem)
2344
+ },
2345
+ sm: {
2346
+ width: "w-4",
2347
+ // 16px (1rem)
2348
+ height: "h-4",
2349
+ // 16px (1rem)
2350
+ radius: "rounded-sm",
2351
+ // 4px (0.25rem)
2352
+ iconSize: "size-3"
2353
+ // 12px (0.75rem)
2354
+ },
2355
+ md: {
2210
2356
  width: "w-4.5",
2211
2357
  // 18px (1.125rem) - default
2212
2358
  height: "h-4.5",
@@ -4245,6 +4391,14 @@ var DROPDOWN_TOKENS = {
4245
4391
  // 256px
4246
4392
  }
4247
4393
  },
4394
+ /**
4395
+ * Width tokens
4396
+ * Common width utilities
4397
+ */
4398
+ width: {
4399
+ full: "w-full"
4400
+ // Full width (100%)
4401
+ },
4248
4402
  /**
4249
4403
  * Item tokens by size
4250
4404
  * Individual menu item
@@ -5054,64 +5208,352 @@ var MODAL_TOKENS = {
5054
5208
  }
5055
5209
  };
5056
5210
 
5057
- // src/tokens/motion/v2.ts
5058
- var motionV2Durations = {
5059
- fast: "150ms",
5060
- // Quick interactions
5061
- normal: "250ms",
5062
- // Default transitions
5063
- slow: "350ms",
5064
- // Emphasized animations
5065
- reduced: "0ms"
5066
- // For prefers-reduced-motion
5067
- };
5068
- var motionV2Easings = {
5069
- soft: "cubic-bezier(0.22, 1, 0.36, 1)",
5070
- // Gentle, smooth
5071
- standard: "cubic-bezier(0.4, 0, 0.2, 1)",
5072
- // Material Design standard
5073
- emphasized: "cubic-bezier(0.2, 0, 0, 1)"
5074
- // Strong, decisive
5075
- };
5076
- var motionV2Transitions = {
5077
- fast: `${motionV2Durations.fast} ${motionV2Easings.standard}`,
5078
- normal: `${motionV2Durations.normal} ${motionV2Easings.standard}`,
5079
- slow: `${motionV2Durations.slow} ${motionV2Easings.emphasized}`,
5080
- soft: `${motionV2Durations.normal} ${motionV2Easings.soft}`,
5081
- reduced: `${motionV2Durations.reduced} linear`
5082
- };
5083
- var motionV2Fade = {
5084
- in: {
5085
- from: { opacity: 0 },
5086
- to: { opacity: 1 }
5211
+ // src/tokens/components/table.ts
5212
+ var TABLE_TOKENS = {
5213
+ /**
5214
+ * Table cell and header padding by size
5215
+ * Maps to semantic spacing tokens
5216
+ */
5217
+ padding: {
5218
+ cell: {
5219
+ sm: "p-xs",
5220
+ // 4px (0.25rem) - maps to semanticSpacing.xs
5221
+ md: "p-sm",
5222
+ // 8px (0.5rem) - maps to semanticSpacing.sm
5223
+ lg: "p-md"
5224
+ // 16px (1rem) - maps to semanticSpacing.md
5225
+ },
5226
+ header: {
5227
+ sm: "px-xs py-sm",
5228
+ // 4px horizontal, 8px vertical
5229
+ md: "px-sm py-md",
5230
+ // 8px horizontal, 16px vertical
5231
+ lg: "px-md py-lg"
5232
+ // 16px horizontal, 24px vertical
5233
+ }
5087
5234
  },
5088
- out: {
5089
- from: { opacity: 1 },
5090
- to: { opacity: 0 }
5091
- }
5092
- };
5093
- var motionV2Scale = {
5094
- in: {
5095
- from: { transform: "scale(0.95)", opacity: 0 },
5096
- to: { transform: "scale(1)", opacity: 1 }
5235
+ /**
5236
+ * Border radius for table
5237
+ */
5238
+ radius: {
5239
+ default: "rounded-md"
5240
+ // 6px (0.375rem) - maps to borderRadius.md
5097
5241
  },
5098
- out: {
5099
- from: { transform: "scale(1)", opacity: 1 },
5100
- to: { transform: "scale(0.95)", opacity: 0 }
5101
- }
5102
- };
5103
- var motionV2Slide = {
5104
- up: {
5105
- in: {
5106
- from: { transform: "translateY(100%)", opacity: 0 },
5107
- to: { transform: "translateY(0)", opacity: 1 }
5242
+ /**
5243
+ * Shadow tokens for table
5244
+ * Maps to foundation elevation shadow tokens
5245
+ */
5246
+ shadow: {
5247
+ // No shadow
5248
+ subtle: "shadow-sm"
5249
+ // Maps to elevationShadows.sm
5250
+ },
5251
+ /**
5252
+ * Typography tokens for table headers and cells
5253
+ * Maps to foundation typography fontSize tokens
5254
+ */
5255
+ typography: {
5256
+ header: {
5257
+ fontSize: "text-sm",
5258
+ // Maps to fontSize.sm[0]
5259
+ fontWeight: "font-semibold"
5260
+ // Maps to fontWeight.semibold
5108
5261
  },
5109
- out: {
5110
- from: { transform: "translateY(0)", opacity: 1 },
5111
- to: { transform: "translateY(100%)", opacity: 0 }
5262
+ cell: {
5263
+ fontSize: "text-sm",
5264
+ // Maps to fontSize.sm[0]
5265
+ fontWeight: "font-normal"
5266
+ // Maps to fontWeight.normal
5112
5267
  }
5113
5268
  },
5114
- down: {
5269
+ /**
5270
+ * Color tokens for table states
5271
+ * Uses semantic color tokens
5272
+ */
5273
+ colors: {
5274
+ border: "border-border",
5275
+ // Border color
5276
+ rowHover: "hover:bg-muted/50",
5277
+ // Row hover background
5278
+ rowSelected: "bg-muted"
5279
+ // Selected row background
5280
+ },
5281
+ /**
5282
+ * Border tokens for table
5283
+ */
5284
+ border: {
5285
+ bottom: "border-b"
5286
+ // Border bottom for rows and headers
5287
+ },
5288
+ /**
5289
+ * Layout tokens for table container and base styles
5290
+ */
5291
+ layout: {
5292
+ overflow: "overflow-x-auto",
5293
+ // Table container overflow
5294
+ table: "w-full border-collapse"
5295
+ // Table base styles
5296
+ },
5297
+ /**
5298
+ * Sticky header tokens
5299
+ * For sticky header positioning and styling
5300
+ */
5301
+ sticky: {
5302
+ header: "sticky top-0 z-10 bg-background"
5303
+ // Sticky header styles
5304
+ },
5305
+ /**
5306
+ * Expandable row tokens
5307
+ * For expandable content styling
5308
+ */
5309
+ expandable: {
5310
+ padding: "p-md",
5311
+ // Expandable content padding - maps to semanticSpacing.md
5312
+ container: "p-0",
5313
+ // Expandable container padding
5314
+ transition: "overflow-hidden transition-all duration-normal ease-in-out",
5315
+ // Transition styles
5316
+ expanded: "max-h-[100vh] opacity-100",
5317
+ // Expanded state
5318
+ collapsed: "max-h-0 opacity-0",
5319
+ // Collapsed state
5320
+ cursor: "cursor-pointer",
5321
+ // Cursor for expandable rows
5322
+ content: {
5323
+ expanded: "block",
5324
+ // Expanded content display
5325
+ collapsed: "hidden"
5326
+ // Collapsed content display
5327
+ }
5328
+ },
5329
+ /**
5330
+ * Loading state tokens
5331
+ * For loading state cell styling
5332
+ */
5333
+ loading: {
5334
+ cellPadding: "p-sm",
5335
+ // Loading state cell padding - maps to semanticSpacing.sm
5336
+ skeletonWidth: "w-full"
5337
+ // Skeleton width
5338
+ },
5339
+ /**
5340
+ * Empty state tokens
5341
+ * For empty state cell styling
5342
+ */
5343
+ empty: {
5344
+ padding: "p-8"
5345
+ // Empty state padding - maps to semanticSpacing.2xl
5346
+ },
5347
+ /**
5348
+ * Sortable header tokens
5349
+ * For sortable header styling and interactions
5350
+ */
5351
+ sortable: {
5352
+ hover: "hover:bg-muted/50",
5353
+ // Sortable header hover
5354
+ gap: "gap-2",
5355
+ // Sort icon gap - maps to semanticSpacing.sm
5356
+ cursor: "cursor-pointer select-none",
5357
+ // Sortable cursor
5358
+ container: "flex items-center",
5359
+ // Sortable header container
5360
+ icon: {
5361
+ base: "inline-flex size-4 items-center text-muted-foreground transition-transform",
5362
+ // Sort icon base styles
5363
+ rotated: "rotate-180",
5364
+ // Rotated state (descending)
5365
+ inactive: "opacity-30"
5366
+ // Inactive state (no sort)
5367
+ }
5368
+ }
5369
+ };
5370
+
5371
+ // src/tokens/components/data-list.ts
5372
+ var DATA_LIST_TOKENS = {
5373
+ /**
5374
+ * Spacing tokens for DataList
5375
+ * Maps to semantic spacing tokens
5376
+ */
5377
+ spacing: {
5378
+ gap: "gap-md"},
5379
+ /**
5380
+ * Label width tokens (for desktop horizontal layout)
5381
+ * Maps to Tailwind width utilities
5382
+ */
5383
+ labelWidth: {
5384
+ // 96px (6rem) - small label width
5385
+ md: "w-32"},
5386
+ /**
5387
+ * Row padding tokens
5388
+ * Maps to semantic spacing tokens
5389
+ */
5390
+ rowPadding: {
5391
+ sm: "py-xs",
5392
+ // 4px (0.25rem) - maps to semanticSpacing.xs
5393
+ md: "py-sm",
5394
+ // 8px (0.5rem) - maps to semanticSpacing.sm
5395
+ lg: "py-md"
5396
+ // 16px (1rem) - maps to semanticSpacing.md
5397
+ },
5398
+ /**
5399
+ * Item tokens
5400
+ * For individual DataList item styling
5401
+ */
5402
+ item: {
5403
+ /**
5404
+ * Border tokens for items
5405
+ */
5406
+ border: "border-b border-border last:border-0",
5407
+ // Item borders
5408
+ /**
5409
+ * Responsive layout tokens
5410
+ */
5411
+ layout: {
5412
+ mobile: "flex flex-col",
5413
+ // Mobile layout - vertical
5414
+ desktop: "md:flex-row md:items-center"
5415
+ // Desktop layout - horizontal
5416
+ }
5417
+ },
5418
+ /**
5419
+ * Label tokens
5420
+ * For DataList label styling
5421
+ */
5422
+ label: {
5423
+ mobile: "mb-1 font-semibold text-foreground",
5424
+ // Mobile label styles
5425
+ desktop: "md:mb-0"
5426
+ // Desktop label margin override
5427
+ },
5428
+ /**
5429
+ * Value tokens
5430
+ * For DataList value styling
5431
+ */
5432
+ value: {
5433
+ color: "text-muted-foreground",
5434
+ // Value text color
5435
+ flex: "flex-1"
5436
+ // Value flex grow
5437
+ }
5438
+ };
5439
+
5440
+ // src/tokens/components/empty-state.ts
5441
+ var EMPTY_STATE_TOKENS = {
5442
+ /**
5443
+ * Spacing tokens for EmptyState
5444
+ * Maps to semantic spacing tokens
5445
+ */
5446
+ spacing: {
5447
+ // 24px (1.5rem) - container padding - maps to semanticSpacing.lg
5448
+ action: "mt-2"
5449
+ // Action button margin top - maps to semanticSpacing.xs
5450
+ },
5451
+ /**
5452
+ * Icon sizes by variant
5453
+ * Maps to Tailwind size utilities
5454
+ */
5455
+ icon: {
5456
+ size: {
5457
+ sm: "size-8",
5458
+ // 32px (2rem)
5459
+ md: "size-12",
5460
+ // 48px (3rem)
5461
+ lg: "size-16"
5462
+ // 64px (4rem)
5463
+ },
5464
+ container: "flex items-center justify-center text-muted-foreground"
5465
+ // Icon container styles
5466
+ },
5467
+ /**
5468
+ * Typography tokens for EmptyState
5469
+ * Maps to foundation typography tokens
5470
+ */
5471
+ typography: {
5472
+ title: {
5473
+ fontSize: "text-lg",
5474
+ // Maps to fontSize.lg[0]
5475
+ fontWeight: "font-semibold",
5476
+ // Maps to fontWeight.semibold
5477
+ color: "text-foreground"
5478
+ // Title text color
5479
+ },
5480
+ description: {
5481
+ fontSize: "text-sm",
5482
+ // Maps to fontSize.sm[0]
5483
+ fontWeight: "font-normal",
5484
+ // Maps to fontWeight.normal
5485
+ color: "text-muted-foreground",
5486
+ // Description text color
5487
+ maxWidth: "max-w-md"
5488
+ // Maximum width for description
5489
+ }
5490
+ },
5491
+ /**
5492
+ * Alignment tokens
5493
+ * For text alignment in EmptyState
5494
+ */
5495
+ alignment: {
5496
+ center: "text-center"}
5497
+ };
5498
+
5499
+ // src/tokens/motion/v2.ts
5500
+ var motionV2Durations = {
5501
+ fast: "150ms",
5502
+ // Quick interactions
5503
+ normal: "250ms",
5504
+ // Default transitions
5505
+ slow: "350ms",
5506
+ // Emphasized animations
5507
+ reduced: "0ms"
5508
+ // For prefers-reduced-motion
5509
+ };
5510
+ var motionV2Easings = {
5511
+ soft: "cubic-bezier(0.22, 1, 0.36, 1)",
5512
+ // Gentle, smooth
5513
+ standard: "cubic-bezier(0.4, 0, 0.2, 1)",
5514
+ // Material Design standard
5515
+ emphasized: "cubic-bezier(0.2, 0, 0, 1)"
5516
+ // Strong, decisive
5517
+ };
5518
+ var motionV2Transitions = {
5519
+ fast: `${motionV2Durations.fast} ${motionV2Easings.standard}`,
5520
+ normal: `${motionV2Durations.normal} ${motionV2Easings.standard}`,
5521
+ slow: `${motionV2Durations.slow} ${motionV2Easings.emphasized}`,
5522
+ soft: `${motionV2Durations.normal} ${motionV2Easings.soft}`,
5523
+ reduced: `${motionV2Durations.reduced} linear`
5524
+ };
5525
+ var motionV2Fade = {
5526
+ in: {
5527
+ from: { opacity: 0 },
5528
+ to: { opacity: 1 }
5529
+ },
5530
+ out: {
5531
+ from: { opacity: 1 },
5532
+ to: { opacity: 0 }
5533
+ }
5534
+ };
5535
+ var motionV2Scale = {
5536
+ in: {
5537
+ from: { transform: "scale(0.95)", opacity: 0 },
5538
+ to: { transform: "scale(1)", opacity: 1 }
5539
+ },
5540
+ out: {
5541
+ from: { transform: "scale(1)", opacity: 1 },
5542
+ to: { transform: "scale(0.95)", opacity: 0 }
5543
+ }
5544
+ };
5545
+ var motionV2Slide = {
5546
+ up: {
5547
+ in: {
5548
+ from: { transform: "translateY(100%)", opacity: 0 },
5549
+ to: { transform: "translateY(0)", opacity: 1 }
5550
+ },
5551
+ out: {
5552
+ from: { transform: "translateY(0)", opacity: 1 },
5553
+ to: { transform: "translateY(100%)", opacity: 0 }
5554
+ }
5555
+ },
5556
+ down: {
5115
5557
  in: {
5116
5558
  from: { transform: "translateY(-100%)", opacity: 0 },
5117
5559
  to: { transform: "translateY(0)", opacity: 1 }
@@ -6374,6 +6816,13 @@ var UI_COLORS = tailwindThemeColors;
6374
6816
  function cn(...inputs) {
6375
6817
  return tailwindMerge.twMerge(clsx.clsx(inputs));
6376
6818
  }
6819
+ function formatDate(date) {
6820
+ return new Intl.DateTimeFormat("en-US", {
6821
+ month: "long",
6822
+ day: "numeric",
6823
+ year: "numeric"
6824
+ }).format(new Date(date));
6825
+ }
6377
6826
  var buttonVariants = classVarianceAuthority.cva(
6378
6827
  `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`,
6379
6828
  {
@@ -8339,31 +8788,31 @@ var Radio = React49__namespace.forwardRef(
8339
8788
  );
8340
8789
  Radio.displayName = "Radio";
8341
8790
  var textareaVariants = classVarianceAuthority.cva(
8342
- `flex min-h-[80px] ${INPUT_TOKENS.shadow} ${MOTION_TOKENS.transition.colors} disabled:cursor-not-allowed focus-visible:outline-none resize-y`,
8791
+ `flex min-h-[80px] ${TEXTAREA_TOKENS.shadow} ${MOTION_TOKENS.transition.colors} disabled:cursor-not-allowed focus-visible:outline-none resize-y`,
8343
8792
  {
8344
8793
  variants: {
8345
8794
  variant: {
8346
- 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}`,
8347
- 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}`,
8348
- 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}`,
8349
- 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}`,
8350
- 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}`
8795
+ 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}`,
8796
+ 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}`,
8797
+ 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}`,
8798
+ 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}`,
8799
+ 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}`
8351
8800
  },
8352
8801
  size: {
8353
- xs: `${INPUT_TOKENS.size.xs.padding.horizontal} ${INPUT_TOKENS.size.xs.padding.vertical} ${INPUT_TOKENS.size.xs.radius} ${INPUT_TOKENS.size.xs.fontSize}`,
8354
- sm: `${INPUT_TOKENS.size.sm.padding.horizontal} ${INPUT_TOKENS.size.sm.padding.vertical} ${INPUT_TOKENS.size.sm.radius} ${INPUT_TOKENS.size.sm.fontSize}`,
8355
- 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}`,
8356
- lg: `${INPUT_TOKENS.size.lg.padding.horizontal} ${INPUT_TOKENS.size.lg.padding.vertical} ${INPUT_TOKENS.size.lg.radius} ${INPUT_TOKENS.size.lg.fontSize}`,
8357
- xl: `${INPUT_TOKENS.size.xl.padding.horizontal} ${INPUT_TOKENS.size.xl.padding.vertical} ${INPUT_TOKENS.size.xl.radius} ${INPUT_TOKENS.size.xl.fontSize}`
8802
+ xs: `${TEXTAREA_TOKENS.size.xs.padding.horizontal} ${TEXTAREA_TOKENS.size.xs.padding.vertical} ${TEXTAREA_TOKENS.size.xs.radius} ${TEXTAREA_TOKENS.size.xs.fontSize}`,
8803
+ sm: `${TEXTAREA_TOKENS.size.sm.padding.horizontal} ${TEXTAREA_TOKENS.size.sm.padding.vertical} ${TEXTAREA_TOKENS.size.sm.radius} ${TEXTAREA_TOKENS.size.sm.fontSize}`,
8804
+ 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}`,
8805
+ lg: `${TEXTAREA_TOKENS.size.lg.padding.horizontal} ${TEXTAREA_TOKENS.size.lg.padding.vertical} ${TEXTAREA_TOKENS.size.lg.radius} ${TEXTAREA_TOKENS.size.lg.fontSize}`,
8806
+ xl: `${TEXTAREA_TOKENS.size.xl.padding.horizontal} ${TEXTAREA_TOKENS.size.xl.padding.vertical} ${TEXTAREA_TOKENS.size.xl.radius} ${TEXTAREA_TOKENS.size.xl.fontSize}`
8358
8807
  },
8359
8808
  state: {
8360
- 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}`,
8361
- 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}`,
8362
- 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}`,
8363
- 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}`
8809
+ 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}`,
8810
+ 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}`,
8811
+ 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}`,
8812
+ 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}`
8364
8813
  },
8365
8814
  fullWidth: {
8366
- true: INPUT_TOKENS.width.full,
8815
+ true: TEXTAREA_TOKENS.width.full,
8367
8816
  false: ""
8368
8817
  }
8369
8818
  },
@@ -8407,7 +8856,7 @@ var Textarea = React49__namespace.forwardRef(
8407
8856
  const currentLength = typeof currentValue === "string" ? currentValue.length : 0;
8408
8857
  const shouldShowCounter = showCharacterCount && maxLength !== void 0;
8409
8858
  if (shouldShowCounter) {
8410
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", fullWidth !== false && INPUT_TOKENS.width.full), children: [
8859
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative", fullWidth !== false && TEXTAREA_TOKENS.width.full), children: [
8411
8860
  /* @__PURE__ */ jsxRuntime.jsx(
8412
8861
  "textarea",
8413
8862
  {
@@ -8427,11 +8876,11 @@ var Textarea = React49__namespace.forwardRef(
8427
8876
  {
8428
8877
  className: cn(
8429
8878
  "absolute",
8430
- INPUT_TOKENS.message.position.bottom,
8431
- INPUT_TOKENS.message.position.right,
8879
+ TEXTAREA_TOKENS.message.position.bottom,
8880
+ TEXTAREA_TOKENS.message.position.right,
8432
8881
  TEXT_TOKENS.fontSize.xs,
8433
- INPUT_TOKENS.message.color.default,
8434
- currentLength > maxLength && INPUT_TOKENS.message.color.error
8882
+ TEXTAREA_TOKENS.message.color.default,
8883
+ currentLength > maxLength && TEXTAREA_TOKENS.message.color.error
8435
8884
  ),
8436
8885
  children: [
8437
8886
  currentLength,
@@ -8992,7 +9441,7 @@ var labelVariants = classVarianceAuthority.cva(
8992
9441
  var Label2 = React49__namespace.forwardRef(
8993
9442
  ({ className, required, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(LabelPrimitive__namespace.Root, { ref, className: cn(labelVariants(), className), ...props, children: [
8994
9443
  children,
8995
- required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(INPUT_TOKENS.label.requiredMark, "ml-xs"), children: "*" })
9444
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(FORM_TOKENS.label.requiredMark, "ml-xs"), children: "*" })
8996
9445
  ] })
8997
9446
  );
8998
9447
  Label2.displayName = LabelPrimitive__namespace.Root.displayName;
@@ -10398,7 +10847,7 @@ var PopoverArrow = React49__namespace.forwardRef(
10398
10847
  );
10399
10848
  PopoverArrow.displayName = "PopoverArrow";
10400
10849
 
10401
- // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
10850
+ // node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
10402
10851
  var min = Math.min;
10403
10852
  var max = Math.max;
10404
10853
  var round = Math.round;
@@ -10529,7 +10978,7 @@ function rectToClientRect(rect) {
10529
10978
  };
10530
10979
  }
10531
10980
 
10532
- // node_modules/@floating-ui/core/dist/floating-ui.core.mjs
10981
+ // node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs
10533
10982
  function computeCoordsFromPlacement(_ref, placement, rtl) {
10534
10983
  let {
10535
10984
  reference,
@@ -10974,7 +11423,7 @@ var shift = function(options) {
10974
11423
  };
10975
11424
  };
10976
11425
 
10977
- // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
11426
+ // node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
10978
11427
  function hasWindow() {
10979
11428
  return typeof window !== "undefined";
10980
11429
  }
@@ -11127,7 +11576,7 @@ function getFrameElement(win) {
11127
11576
  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
11128
11577
  }
11129
11578
 
11130
- // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
11579
+ // node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
11131
11580
  function getCssDimensions(element) {
11132
11581
  const css = getComputedStyle2(element);
11133
11582
  let width = parseFloat(css.width) || 0;
@@ -13224,7 +13673,7 @@ var Skeleton = React49__namespace.forwardRef(
13224
13673
  Skeleton.displayName = "Skeleton";
13225
13674
  var EmptyStateAction = React49__namespace.forwardRef(
13226
13675
  ({ className, children, ...props }, ref) => {
13227
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("mt-2", className), ...props, children });
13676
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn(EMPTY_STATE_TOKENS.spacing.action, className), ...props, children });
13228
13677
  }
13229
13678
  );
13230
13679
  EmptyStateAction.displayName = "EmptyStateAction";
@@ -13235,9 +13684,10 @@ var EmptyStateDescription = React49__namespace.forwardRef(
13235
13684
  {
13236
13685
  ref,
13237
13686
  className: cn(
13238
- DATA_TOKENS.emptyState.typography.description.fontSize,
13239
- DATA_TOKENS.emptyState.typography.description.fontWeight,
13240
- "max-w-md text-muted-foreground",
13687
+ EMPTY_STATE_TOKENS.typography.description.fontSize,
13688
+ EMPTY_STATE_TOKENS.typography.description.fontWeight,
13689
+ EMPTY_STATE_TOKENS.typography.description.color,
13690
+ EMPTY_STATE_TOKENS.typography.description.maxWidth,
13241
13691
  className
13242
13692
  ),
13243
13693
  ...props,
@@ -13249,16 +13699,12 @@ var EmptyStateDescription = React49__namespace.forwardRef(
13249
13699
  EmptyStateDescription.displayName = "EmptyStateDescription";
13250
13700
  var EmptyStateIcon = React49__namespace.forwardRef(
13251
13701
  ({ children, size: size3 = "md", className, ...props }, ref) => {
13252
- const iconSizeClass = DATA_TOKENS.emptyState.iconSize[size3];
13702
+ const iconSizeClass = EMPTY_STATE_TOKENS.icon.size[size3];
13253
13703
  return /* @__PURE__ */ jsxRuntime.jsx(
13254
13704
  "div",
13255
13705
  {
13256
13706
  ref,
13257
- className: cn(
13258
- "flex items-center justify-center text-muted-foreground",
13259
- iconSizeClass,
13260
- className
13261
- ),
13707
+ className: cn(EMPTY_STATE_TOKENS.icon.container, iconSizeClass, className),
13262
13708
  ...props,
13263
13709
  children
13264
13710
  }
@@ -13273,9 +13719,9 @@ var EmptyStateTitle = React49__namespace.forwardRef(
13273
13719
  {
13274
13720
  ref,
13275
13721
  className: cn(
13276
- DATA_TOKENS.emptyState.typography.title.fontSize,
13277
- DATA_TOKENS.emptyState.typography.title.fontWeight,
13278
- "text-foreground",
13722
+ EMPTY_STATE_TOKENS.typography.title.fontSize,
13723
+ EMPTY_STATE_TOKENS.typography.title.fontWeight,
13724
+ EMPTY_STATE_TOKENS.typography.title.color,
13279
13725
  className
13280
13726
  ),
13281
13727
  ...props,
@@ -13296,7 +13742,7 @@ var EmptyState = React49__namespace.forwardRef(
13296
13742
  variant: "flat",
13297
13743
  radius: "xl",
13298
13744
  p: "lg",
13299
- className: cn("text-center", className),
13745
+ className: cn(EMPTY_STATE_TOKENS.alignment.center, className),
13300
13746
  id: emptyStateId,
13301
13747
  ...props,
13302
13748
  children: /* @__PURE__ */ jsxRuntime.jsx(Stack, { gap: "md", align: "center", justify: "center", children })
@@ -13313,14 +13759,16 @@ var DataListItem = React49__namespace.forwardRef(
13313
13759
  ({ padding = "md", className, children, ...props }, ref) => {
13314
13760
  const paddingValue = getBaseValue(padding);
13315
13761
  const paddingKey = paddingValue && ["sm", "md", "lg"].includes(String(paddingValue)) ? String(paddingValue) : "md";
13316
- const paddingClass = DATA_TOKENS.dataList.rowPadding[paddingKey];
13762
+ const paddingClass = DATA_LIST_TOKENS.rowPadding[paddingKey];
13317
13763
  return /* @__PURE__ */ jsxRuntime.jsx(
13318
13764
  "div",
13319
13765
  {
13320
13766
  ref,
13321
13767
  className: cn(
13322
13768
  paddingClass,
13323
- "flex flex-col border-b border-border last:border-0 md:flex-row md:items-center",
13769
+ DATA_LIST_TOKENS.item.layout.mobile,
13770
+ DATA_LIST_TOKENS.item.layout.desktop,
13771
+ DATA_LIST_TOKENS.item.border,
13324
13772
  className
13325
13773
  ),
13326
13774
  ...props,
@@ -13337,9 +13785,9 @@ var DataListLabel = React49__namespace.forwardRef(
13337
13785
  {
13338
13786
  ref,
13339
13787
  className: cn(
13340
- "mb-1 font-semibold text-foreground md:mb-0",
13341
- "md:w-32",
13342
- // Default md width from tokens
13788
+ DATA_LIST_TOKENS.label.mobile,
13789
+ DATA_LIST_TOKENS.label.desktop,
13790
+ DATA_LIST_TOKENS.labelWidth.md,
13343
13791
  className
13344
13792
  ),
13345
13793
  ...props,
@@ -13351,13 +13799,21 @@ var DataListLabel = React49__namespace.forwardRef(
13351
13799
  DataListLabel.displayName = "DataListLabel";
13352
13800
  var DataListValue = React49__namespace.forwardRef(
13353
13801
  ({ className, children, ...props }, ref) => {
13354
- return /* @__PURE__ */ jsxRuntime.jsx("dd", { ref, className: cn("flex-1 text-muted-foreground", className), ...props, children });
13802
+ return /* @__PURE__ */ jsxRuntime.jsx(
13803
+ "dd",
13804
+ {
13805
+ ref,
13806
+ className: cn(DATA_LIST_TOKENS.value.flex, DATA_LIST_TOKENS.value.color, className),
13807
+ ...props,
13808
+ children
13809
+ }
13810
+ );
13355
13811
  }
13356
13812
  );
13357
13813
  DataListValue.displayName = "DataListValue";
13358
13814
  var DataListRoot = React49__namespace.forwardRef(
13359
13815
  ({ labelWidth: _labelWidth = "md", className, children, ...props }, ref) => {
13360
- return /* @__PURE__ */ jsxRuntime.jsx("dl", { ref, className: cn(DATA_TOKENS.dataList.spacing.gap, className), ...props, children });
13816
+ return /* @__PURE__ */ jsxRuntime.jsx("dl", { ref, className: cn(DATA_LIST_TOKENS.spacing.gap, className), ...props, children });
13361
13817
  }
13362
13818
  );
13363
13819
  DataListRoot.displayName = "DataListRoot";
@@ -13372,9 +13828,9 @@ var TableBody = React49__namespace.forwardRef(
13372
13828
  TableBody.displayName = "TableBody";
13373
13829
  var TableCell = React49__namespace.forwardRef(
13374
13830
  ({ align = "left", size: size3 = "md", className, ...props }, ref) => {
13375
- const paddingClass = DATA_TOKENS.table.padding.cell[size3];
13376
- const typographyClass = DATA_TOKENS.table.typography.cell.fontSize;
13377
- const fontWeightClass = DATA_TOKENS.table.typography.cell.fontWeight;
13831
+ const paddingClass = TABLE_TOKENS.padding.cell[size3];
13832
+ const typographyClass = TABLE_TOKENS.typography.cell.fontSize;
13833
+ const fontWeightClass = TABLE_TOKENS.typography.cell.fontWeight;
13378
13834
  const alignmentClasses = {
13379
13835
  left: "text-left",
13380
13836
  center: "text-center",
@@ -13400,7 +13856,7 @@ var TableCell = React49__namespace.forwardRef(
13400
13856
  TableCell.displayName = "TableCell";
13401
13857
  var TableEmpty = React49__namespace.forwardRef(
13402
13858
  ({ colSpan, message = "No data available", className, ...props }, ref) => {
13403
- return /* @__PURE__ */ jsxRuntime.jsx("tr", { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan, className: "p-8", children: /* @__PURE__ */ jsxRuntime.jsxs(EmptyState, { children: [
13859
+ return /* @__PURE__ */ jsxRuntime.jsx("tr", { ref, className: cn(className), ...props, children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan, className: TABLE_TOKENS.empty.padding, children: /* @__PURE__ */ jsxRuntime.jsxs(EmptyState, { children: [
13404
13860
  /* @__PURE__ */ jsxRuntime.jsx(EmptyStateIcon, { children: "\u{1F4ED}" }),
13405
13861
  /* @__PURE__ */ jsxRuntime.jsx(EmptyStateTitle, { children: message })
13406
13862
  ] }) }) });
@@ -13415,13 +13871,22 @@ var TableExpandableContent = React49__namespace.forwardRef(
13415
13871
  ref,
13416
13872
  colSpan,
13417
13873
  className: cn(
13418
- "p-0",
13419
- "overflow-hidden transition-all duration-normal ease-in-out",
13420
- expanded ? "max-h-[100vh] opacity-100" : "max-h-0 opacity-0",
13874
+ TABLE_TOKENS.expandable.container,
13875
+ TABLE_TOKENS.expandable.transition,
13876
+ expanded ? TABLE_TOKENS.expandable.expanded : TABLE_TOKENS.expandable.collapsed,
13421
13877
  className
13422
13878
  ),
13423
13879
  ...props,
13424
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("p-md", expanded ? "block" : "hidden"), children })
13880
+ children: /* @__PURE__ */ jsxRuntime.jsx(
13881
+ "div",
13882
+ {
13883
+ className: cn(
13884
+ TABLE_TOKENS.expandable.padding,
13885
+ expanded ? TABLE_TOKENS.expandable.content.expanded : TABLE_TOKENS.expandable.content.collapsed
13886
+ ),
13887
+ children
13888
+ }
13889
+ )
13425
13890
  }
13426
13891
  );
13427
13892
  }
@@ -13434,9 +13899,9 @@ var TableSortIcon = React49__namespace.forwardRef(
13434
13899
  {
13435
13900
  ref,
13436
13901
  className: cn(
13437
- "inline-flex size-4 items-center text-muted-foreground transition-transform",
13438
- direction === "desc" && "rotate-180",
13439
- !direction && "opacity-30",
13902
+ TABLE_TOKENS.sortable.icon.base,
13903
+ direction === "desc" && TABLE_TOKENS.sortable.icon.rotated,
13904
+ !direction && TABLE_TOKENS.sortable.icon.inactive,
13440
13905
  className
13441
13906
  ),
13442
13907
  "aria-hidden": "true",
@@ -13483,9 +13948,9 @@ var TableHead = React49__namespace.forwardRef(
13483
13948
  direction: nextDirection
13484
13949
  });
13485
13950
  }, [sortable, columnKey, sortState, setSortState]);
13486
- const paddingClass = DATA_TOKENS.table.padding.header[size3];
13487
- const typographyClass = DATA_TOKENS.table.typography.header.fontSize;
13488
- const fontWeightClass = DATA_TOKENS.table.typography.header.fontWeight;
13951
+ const paddingClass = TABLE_TOKENS.padding.header[size3];
13952
+ const typographyClass = TABLE_TOKENS.typography.header.fontSize;
13953
+ const fontWeightClass = TABLE_TOKENS.typography.header.fontWeight;
13489
13954
  const alignmentClasses = {
13490
13955
  left: "text-left",
13491
13956
  center: "text-center",
@@ -13502,9 +13967,10 @@ var TableHead = React49__namespace.forwardRef(
13502
13967
  typographyClass,
13503
13968
  fontWeightClass,
13504
13969
  alignmentClasses[align],
13505
- DATA_TOKENS.table.colors.border,
13506
- "border-b",
13507
- sortable && "cursor-pointer select-none hover:bg-muted/50",
13970
+ TABLE_TOKENS.colors.border,
13971
+ TABLE_TOKENS.border.bottom,
13972
+ sortable && TABLE_TOKENS.sortable.cursor,
13973
+ sortable && TABLE_TOKENS.sortable.hover,
13508
13974
  className
13509
13975
  ),
13510
13976
  onClick: handleSort,
@@ -13516,7 +13982,7 @@ var TableHead = React49__namespace.forwardRef(
13516
13982
  })(),
13517
13983
  role: "columnheader",
13518
13984
  ...props,
13519
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
13985
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn(TABLE_TOKENS.sortable.container, TABLE_TOKENS.sortable.gap), children: [
13520
13986
  children,
13521
13987
  sortable && /* @__PURE__ */ jsxRuntime.jsx(TableSortIcon, { direction: sortDirection })
13522
13988
  ] })
@@ -13531,7 +13997,7 @@ var TableHeader = React49__namespace.forwardRef(
13531
13997
  "thead",
13532
13998
  {
13533
13999
  ref,
13534
- className: cn(sticky && "sticky top-0 z-10 bg-background", className),
14000
+ className: cn(sticky && TABLE_TOKENS.sticky.header, className),
13535
14001
  role: "rowgroup",
13536
14002
  ...props
13537
14003
  }
@@ -13541,7 +14007,7 @@ var TableHeader = React49__namespace.forwardRef(
13541
14007
  TableHeader.displayName = "TableHeader";
13542
14008
  var TableLoadingState = React49__namespace.forwardRef(
13543
14009
  ({ colSpan, rows = 5, className, ...props }, ref) => {
13544
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from({ length: rows }).map((_, index2) => /* @__PURE__ */ jsxRuntime.jsx("tr", { ref: index2 === 0 ? ref : void 0, className: cn(className), ...props, children: Array.from({ length: colSpan }).map((_2, cellIndex) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-sm", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { variant: "text", className: "w-full" }) }, cellIndex)) }, index2)) });
14010
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: Array.from({ length: rows }).map((_, index2) => /* @__PURE__ */ jsxRuntime.jsx("tr", { ref: index2 === 0 ? ref : void 0, className: cn(className), ...props, children: Array.from({ length: colSpan }).map((_2, cellIndex) => /* @__PURE__ */ jsxRuntime.jsx("td", { className: TABLE_TOKENS.loading.cellPadding, children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { variant: "text", className: TABLE_TOKENS.loading.skeletonWidth }) }, cellIndex)) }, index2)) });
13545
14011
  }
13546
14012
  );
13547
14013
  TableLoadingState.displayName = "TableLoadingState";
@@ -13559,11 +14025,11 @@ var TableRow = React49__namespace.forwardRef(
13559
14025
  {
13560
14026
  ref,
13561
14027
  className: cn(
13562
- DATA_TOKENS.table.colors.border,
13563
- "border-b",
13564
- DATA_TOKENS.table.colors.rowHover,
13565
- selected && DATA_TOKENS.table.colors.rowSelected,
13566
- expandable && "cursor-pointer",
14028
+ TABLE_TOKENS.colors.border,
14029
+ TABLE_TOKENS.border.bottom,
14030
+ TABLE_TOKENS.colors.rowHover,
14031
+ selected && TABLE_TOKENS.colors.rowSelected,
14032
+ expandable && TABLE_TOKENS.expandable.cursor,
13567
14033
  className
13568
14034
  ),
13569
14035
  "aria-expanded": expandable ? expanded : void 0,
@@ -13624,13 +14090,13 @@ function TableRoot({
13624
14090
  }),
13625
14091
  [sortState, expandedRows, toggleRow, expandable, renderExpandableContent]
13626
14092
  );
13627
- return /* @__PURE__ */ jsxRuntime.jsx(TableContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
14093
+ return /* @__PURE__ */ jsxRuntime.jsx(TableContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: TABLE_TOKENS.layout.overflow, children: /* @__PURE__ */ jsxRuntime.jsx(
13628
14094
  "table",
13629
14095
  {
13630
14096
  className: cn(
13631
- "w-full border-collapse",
13632
- DATA_TOKENS.table.radius.default,
13633
- DATA_TOKENS.table.shadow.subtle,
14097
+ TABLE_TOKENS.layout.table,
14098
+ TABLE_TOKENS.radius.default,
14099
+ TABLE_TOKENS.shadow.subtle,
13634
14100
  className
13635
14101
  ),
13636
14102
  role: "table",
@@ -15197,8 +15663,8 @@ var artistCardGenresVariants = classVarianceAuthority.cva(
15197
15663
  }
15198
15664
  );
15199
15665
  var artistCardFooterBorderVariants = classVarianceAuthority.cva(
15200
- // Base classes - border top, spacing
15201
- "border-t border-border",
15666
+ // Base classes - border top from ARTIST_TOKENS, spacing from DOMAIN_TOKENS
15667
+ ARTIST_TOKENS.footer.border.top,
15202
15668
  {
15203
15669
  variants: {
15204
15670
  size: {
@@ -15258,37 +15724,49 @@ var ArtistCard = React49__namespace.forwardRef(
15258
15724
  ...props,
15259
15725
  children: [
15260
15726
  featured && popularBadgeText && /* @__PURE__ */ jsxRuntime.jsx("div", { className: artistCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: artistCardBadgeSurfaceVariants({ size: size3, variant: "featured" }), children: popularBadgeText }) }),
15261
- showImage && /* @__PURE__ */ jsxRuntime.jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full overflow-hidden bg-gradient-to-br from-muted to-muted/50", children: [
15262
- imageUrl ? /* @__PURE__ */ jsxRuntime.jsx(
15263
- "img",
15264
- {
15265
- src: imageUrl,
15266
- alt: name,
15267
- className: cn("h-full w-full", artistCardImageTransformVariants({ size: size3 }))
15268
- }
15269
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
15270
- Icon2,
15271
- {
15272
- name: "info",
15273
- size: "xl",
15274
- color: "muted",
15275
- className: ICON_TOKENS.sizes["4xl"],
15276
- "aria-hidden": "true"
15277
- }
15278
- ) }),
15279
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: artistCardImageOverlayVariants({ size: size3 }) })
15280
- ] }) }),
15727
+ showImage && /* @__PURE__ */ jsxRuntime.jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs(
15728
+ "div",
15729
+ {
15730
+ className: cn(
15731
+ ARTIST_TOKENS.image.container.layout,
15732
+ DOMAIN_TOKENS.image.placeholder.gradient
15733
+ ),
15734
+ children: [
15735
+ imageUrl ? /* @__PURE__ */ jsxRuntime.jsx(
15736
+ "img",
15737
+ {
15738
+ src: imageUrl,
15739
+ alt: name,
15740
+ className: cn(
15741
+ ARTIST_TOKENS.image.sizing.full,
15742
+ artistCardImageTransformVariants({ size: size3 })
15743
+ )
15744
+ }
15745
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: ARTIST_TOKENS.image.placeholder.container, children: /* @__PURE__ */ jsxRuntime.jsx(
15746
+ Icon2,
15747
+ {
15748
+ name: "info",
15749
+ size: "xl",
15750
+ color: "muted",
15751
+ className: ICON_TOKENS.sizes["4xl"],
15752
+ "aria-hidden": "true"
15753
+ }
15754
+ ) }),
15755
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: artistCardImageOverlayVariants({ size: size3 }) })
15756
+ ]
15757
+ }
15758
+ ) }),
15281
15759
  /* @__PURE__ */ jsxRuntime.jsxs(CardBaseContentWrapper, { size: size3, children: [
15282
15760
  /* @__PURE__ */ jsxRuntime.jsx(
15283
15761
  Heading,
15284
15762
  {
15285
15763
  level: 3,
15286
15764
  className: cn(
15287
- "line-clamp-2",
15765
+ DOMAIN_TOKENS.text.lineClamp.two,
15288
15766
  TEXT_TOKENS.fontSize.lg,
15289
15767
  TEXT_TOKENS.fontWeight.bold,
15290
15768
  MOTION_TOKENS.transition.colors,
15291
- "group-hover:text-primary",
15769
+ DOMAIN_TOKENS.text.hover.primary,
15292
15770
  size3 === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
15293
15771
  ),
15294
15772
  children: href ? /* @__PURE__ */ jsxRuntime.jsx(Link, { href, variant: "ghost", children: name }) : name
@@ -15300,7 +15778,7 @@ var ArtistCard = React49__namespace.forwardRef(
15300
15778
  size: "sm",
15301
15779
  variant: "muted",
15302
15780
  className: cn(
15303
- "line-clamp-2",
15781
+ DOMAIN_TOKENS.text.lineClamp.two,
15304
15782
  size3 === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
15305
15783
  ),
15306
15784
  children: description
@@ -15362,16 +15840,16 @@ var ArtistCard = React49__namespace.forwardRef(
15362
15840
  }
15363
15841
  );
15364
15842
  ArtistCard.displayName = "ArtistCard";
15365
- var eventCardBadgeVariants = classVarianceAuthority.cva(
15843
+ var categoryCardBadgeVariants = classVarianceAuthority.cva(
15366
15844
  // Base classes - absolute positioning, z-index
15367
15845
  "absolute z-10",
15368
15846
  {
15369
15847
  variants: {
15370
15848
  size: {
15371
15849
  default: DOMAIN_TOKENS.badges.position.default,
15372
- // Default positioning - maps to semanticSpacing.md (12px)
15850
+ // Default positioning - references semanticSpacing.md (16px)
15373
15851
  compact: DOMAIN_TOKENS.badges.position.compact
15374
- // Compact positioning - maps to semanticSpacing.sm (8px)
15852
+ // Compact positioning - references semanticSpacing.sm (8px)
15375
15853
  }
15376
15854
  },
15377
15855
  defaultVariants: {
@@ -15379,9 +15857,10 @@ var eventCardBadgeVariants = classVarianceAuthority.cva(
15379
15857
  }
15380
15858
  }
15381
15859
  );
15382
- var eventCardBadgeSurfaceVariants = classVarianceAuthority.cva(
15860
+ var categoryCardBadgeSurfaceVariants = classVarianceAuthority.cva(
15383
15861
  // Base classes - flex layout, items center, badge styling
15384
- `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`,
15862
+ // Uses DOMAIN_TOKENS for badge-specific styles, TEXT_TOKENS for typography
15863
+ `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}`,
15385
15864
  {
15386
15865
  variants: {
15387
15866
  variant: {
@@ -15394,130 +15873,14 @@ var eventCardBadgeSurfaceVariants = classVarianceAuthority.cva(
15394
15873
  }
15395
15874
  }
15396
15875
  );
15397
- var eventCardMetadataVariants = classVarianceAuthority.cva(
15398
- // Base classes - flex column, metadata spacing
15399
- `flex flex-col ${DOMAIN_TOKENS.metadata.spacing.vertical}`,
15400
- {
15401
- variants: {
15402
- size: {
15403
- default: "",
15404
- compact: ""
15405
- }
15406
- },
15407
- defaultVariants: {
15408
- size: "default"
15409
- }
15410
- }
15411
- );
15412
- var eventCardMetadataItemVariants = classVarianceAuthority.cva(
15413
- // Base classes - flex items center, metadata spacing and text
15414
- `flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.xs}`,
15415
- {
15416
- variants: {
15417
- size: {
15418
- default: "",
15419
- compact: ""
15420
- }
15421
- },
15422
- defaultVariants: {
15423
- size: "default"
15424
- }
15425
- }
15426
- );
15427
- var eventCardMetadataIconVariants = classVarianceAuthority.cva(
15428
- // Base classes - icon size and color
15429
- `${ICON_TOKENS.sizes.md} ${ICON_TOKENS.colors.muted}`,
15430
- {
15431
- variants: {
15432
- size: {
15433
- default: "",
15434
- compact: ""
15435
- }
15436
- },
15437
- defaultVariants: {
15438
- size: "default"
15439
- }
15440
- }
15441
- );
15442
- var eventCardFooterVariants = classVarianceAuthority.cva(
15443
- // Base classes - border top, spacing
15444
- "border-t border-border",
15445
- {
15446
- variants: {
15447
- size: {
15448
- default: DOMAIN_TOKENS.spacing.footer.paddingTopDefault,
15449
- // Default padding top - references semanticSpacing.sm (8px) via Tailwind
15450
- compact: DOMAIN_TOKENS.spacing.footer.paddingTopCompact
15451
- // Compact padding top - references semanticSpacing.xs (4px) via Tailwind
15452
- }
15453
- },
15454
- defaultVariants: {
15455
- size: "default"
15456
- }
15457
- }
15458
- );
15459
- var eventCardTicketButtonVariants = classVarianceAuthority.cva(
15460
- // Base classes - flex layout, badge gradient, motion
15461
- `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`,
15462
- {
15463
- variants: {
15464
- size: {
15465
- default: DOMAIN_TOKENS.spacing.button.paddingDefault,
15466
- // Default padding - references semanticSpacing.md (16px) horizontal, xs (4px) vertical via Tailwind
15467
- compact: DOMAIN_TOKENS.spacing.button.paddingCompact
15468
- // Compact padding - references semanticSpacing.sm (8px) horizontal, xs (4px) vertical via Tailwind
15469
- }
15470
- },
15471
- defaultVariants: {
15472
- size: "default"
15473
- }
15474
- }
15475
- );
15476
- var eventCardTicketButtonIconVariants = classVarianceAuthority.cva(
15477
- // Base classes - icon size and spacing
15478
- `${ICON_TOKENS.sizes.md} ${DOMAIN_TOKENS.spacing.button.iconMarginLeft}`,
15479
- {
15480
- variants: {
15481
- size: {
15482
- default: "",
15483
- compact: ""
15484
- }
15485
- },
15486
- defaultVariants: {
15487
- size: "default"
15488
- }
15489
- }
15490
- );
15491
- var eventCardPriceVariants = classVarianceAuthority.cva(
15492
- // Base classes - price gradient text
15493
- `bg-gradient-to-r from-accent-500 to-primary-600 bg-clip-text text-transparent`,
15494
- {
15495
- variants: {
15496
- size: {
15497
- default: TEXT_TOKENS.fontSize.lg,
15498
- // Default size
15499
- compact: TEXT_TOKENS.fontSize.md
15500
- // Compact size
15501
- }
15502
- },
15503
- defaultVariants: {
15504
- size: "default"
15505
- }
15506
- }
15507
- );
15508
- var EventCard = React49__namespace.forwardRef(
15876
+ var CategoryCard = React49__namespace.forwardRef(
15509
15877
  ({
15510
15878
  title,
15511
15879
  description,
15512
- date,
15513
- venueName,
15514
- price,
15515
15880
  imageUrl,
15516
15881
  href,
15517
- ticketUrl,
15518
15882
  featured = false,
15519
15883
  showImage = true,
15520
- getTicketsLabel,
15521
15884
  featuredBadgeText,
15522
15885
  size: size3 = "default",
15523
15886
  variant,
@@ -15540,46 +15903,57 @@ var EventCard = React49__namespace.forwardRef(
15540
15903
  className: cn("group relative", className),
15541
15904
  ...props,
15542
15905
  children: [
15543
- featured && featuredBadgeText && /* @__PURE__ */ jsxRuntime.jsx("div", { className: eventCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: eventCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
15544
- showImage && /* @__PURE__ */ jsxRuntime.jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full overflow-hidden bg-gradient-to-br from-surface-elevated1 to-surface-elevated2", children: [
15545
- imageUrl ? /* @__PURE__ */ jsxRuntime.jsx(
15546
- "img",
15547
- {
15548
- src: imageUrl,
15549
- alt: title,
15550
- className: cn(
15551
- "h-full w-full object-cover",
15552
- DOMAIN_TOKENS.motion.hover.transition,
15553
- DOMAIN_TOKENS.motion.hover.scale
15554
- )
15555
- }
15556
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
15557
- Icon2,
15558
- {
15559
- name: "info",
15560
- size: "xl",
15561
- color: "muted",
15562
- className: ICON_TOKENS.sizes["4xl"],
15563
- "aria-hidden": "true"
15564
- }
15565
- ) }),
15566
- /* @__PURE__ */ jsxRuntime.jsx(
15567
- "div",
15568
- {
15569
- className: cn(
15570
- "absolute inset-0 opacity-0 transition-opacity duration-normal group-hover:opacity-100",
15571
- DOMAIN_TOKENS.image.overlay.gradient
15906
+ featured && featuredBadgeText && /* @__PURE__ */ jsxRuntime.jsx("div", { className: categoryCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: categoryCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
15907
+ showImage && /* @__PURE__ */ jsxRuntime.jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs(
15908
+ "div",
15909
+ {
15910
+ className: cn(
15911
+ "relative w-full overflow-hidden",
15912
+ DOMAIN_TOKENS.image.placeholder.gradient
15913
+ ),
15914
+ children: [
15915
+ imageUrl ? /* @__PURE__ */ jsxRuntime.jsx(
15916
+ "img",
15917
+ {
15918
+ src: imageUrl,
15919
+ alt: title,
15920
+ className: cn(
15921
+ "h-full w-full object-cover",
15922
+ DOMAIN_TOKENS.motion.hover.transition,
15923
+ DOMAIN_TOKENS.motion.hover.scale
15924
+ )
15925
+ }
15926
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
15927
+ Icon2,
15928
+ {
15929
+ name: "info",
15930
+ className: cn(ICON_TOKENS.sizes["4xl"], ICON_TOKENS.colors.muted),
15931
+ "aria-hidden": "true"
15932
+ }
15933
+ ) }),
15934
+ /* @__PURE__ */ jsxRuntime.jsx(
15935
+ "div",
15936
+ {
15937
+ className: cn(
15938
+ "absolute inset-0 opacity-0 group-hover:opacity-100",
15939
+ MOTION_TOKENS.transition.opacity,
15940
+ MOTION_TOKENS.duration.normal,
15941
+ DOMAIN_TOKENS.image.overlay.gradient
15942
+ )
15943
+ }
15572
15944
  )
15573
- }
15574
- )
15575
- ] }) }),
15945
+ ]
15946
+ }
15947
+ ) }),
15576
15948
  /* @__PURE__ */ jsxRuntime.jsxs(CardBaseContentWrapper, { size: size3, children: [
15577
15949
  /* @__PURE__ */ jsxRuntime.jsx(
15578
15950
  Heading,
15579
15951
  {
15580
15952
  level: 3,
15581
15953
  className: cn(
15582
- "line-clamp-2 transition-colors group-hover:text-primary",
15954
+ DOMAIN_TOKENS.text.lineClamp.two,
15955
+ MOTION_TOKENS.transition.colors,
15956
+ DOMAIN_TOKENS.text.hover.primary,
15583
15957
  TEXT_TOKENS.fontSize.lg,
15584
15958
  TEXT_TOKENS.fontWeight.bold,
15585
15959
  DOMAIN_TOKENS.spacing.section.titleToSubtitle
@@ -15591,47 +15965,21 @@ var EventCard = React49__namespace.forwardRef(
15591
15965
  Text,
15592
15966
  {
15593
15967
  size: "sm",
15594
- muted: true,
15968
+ variant: "muted",
15595
15969
  className: cn(
15596
- "line-clamp-2",
15970
+ DOMAIN_TOKENS.text.lineClamp.two,
15597
15971
  size3 === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
15598
15972
  ),
15599
15973
  children: description
15600
15974
  }
15601
- ),
15602
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: eventCardMetadataVariants({ size: size3 }), children: [
15603
- date && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: eventCardMetadataItemVariants({ size: size3 }), children: [
15604
- /* @__PURE__ */ jsxRuntime.jsx(IconCalendar, { className: eventCardMetadataIconVariants({ size: size3 }) }),
15605
- /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", muted: true, children: date })
15606
- ] }),
15607
- venueName && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: eventCardMetadataItemVariants({ size: size3 }), children: [
15608
- /* @__PURE__ */ jsxRuntime.jsx(IconLocation, { className: eventCardMetadataIconVariants({ size: size3 }) }),
15609
- /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", muted: true, className: "line-clamp-1", children: venueName })
15610
- ] })
15611
- ] })
15612
- ] }),
15613
- /* @__PURE__ */ jsxRuntime.jsx(CardBaseFooterWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full", eventCardFooterVariants({ size: size3 })), children: [
15614
- ticketUrl && /* @__PURE__ */ jsxRuntime.jsxs(
15615
- Link,
15616
- {
15617
- href: ticketUrl,
15618
- className: cn("w-full", eventCardTicketButtonVariants({ size: size3 })),
15619
- target: "_blank",
15620
- rel: "noopener noreferrer",
15621
- children: [
15622
- getTicketsLabel,
15623
- /* @__PURE__ */ jsxRuntime.jsx(IconArrowRight, { className: eventCardTicketButtonIconVariants({ size: size3 }) })
15624
- ]
15625
- }
15626
- ),
15627
- !ticketUrl && price && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-right", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { size: size3 === "compact" ? "md" : "lg", weight: "bold", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: eventCardPriceVariants({ size: size3 }), children: price }) }) })
15628
- ] }) })
15975
+ )
15976
+ ] })
15629
15977
  ]
15630
15978
  }
15631
15979
  ) });
15632
15980
  }
15633
15981
  );
15634
- EventCard.displayName = "EventCard";
15982
+ CategoryCard.displayName = "CategoryCard";
15635
15983
  var promoCardBadgeVariants = classVarianceAuthority.cva(
15636
15984
  // Base classes - absolute positioning, z-index
15637
15985
  "absolute z-10",
@@ -15665,14 +16013,14 @@ var promoCardBadgeSurfaceVariants = classVarianceAuthority.cva(
15665
16013
  }
15666
16014
  );
15667
16015
  var promoCardCtaButtonVariants = classVarianceAuthority.cva(
15668
- // Base classes - flex layout, button tokens, motion
15669
- `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`,
16016
+ // Base classes - flex layout, CTA button tokens, motion
16017
+ `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`,
15670
16018
  {
15671
16019
  variants: {
15672
16020
  size: {
15673
- default: `${BUTTON_TOKENS.height.md} ${BUTTON_TOKENS.padding.horizontal.md} ${BUTTON_TOKENS.padding.vertical.sm} ${BUTTON_TOKENS.fontSize.md}`,
16021
+ 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}`,
15674
16022
  // Default size - uses md height and padding
15675
- compact: `${BUTTON_TOKENS.height.sm} ${BUTTON_TOKENS.padding.horizontal.sm} ${BUTTON_TOKENS.padding.vertical.sm} ${BUTTON_TOKENS.fontSize.sm}`
16023
+ 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}`
15676
16024
  // Compact size - uses sm height and padding
15677
16025
  }
15678
16026
  },
@@ -15804,6 +16152,22 @@ var PromoCard = React49__namespace.forwardRef(
15804
16152
  }
15805
16153
  );
15806
16154
  PromoCard.displayName = "PromoCard";
16155
+ var ticketCardVariants = classVarianceAuthority.cva("group relative", {
16156
+ variants: {
16157
+ size: {
16158
+ default: "",
16159
+ compact: ""
16160
+ },
16161
+ variant: {
16162
+ default: "",
16163
+ featured: ""
16164
+ }
16165
+ },
16166
+ defaultVariants: {
16167
+ size: "default",
16168
+ variant: "default"
16169
+ }
16170
+ });
15807
16171
  var ticketCardBadgeVariants = classVarianceAuthority.cva(
15808
16172
  // Base classes - absolute positioning, z-index
15809
16173
  "absolute z-10",
@@ -15811,7 +16175,7 @@ var ticketCardBadgeVariants = classVarianceAuthority.cva(
15811
16175
  variants: {
15812
16176
  size: {
15813
16177
  default: DOMAIN_TOKENS.badges.position.default,
15814
- // Default positioning - maps to semanticSpacing.md (12px)
16178
+ // Default positioning - maps to semanticSpacing.md (16px)
15815
16179
  compact: DOMAIN_TOKENS.badges.position.compact
15816
16180
  // Compact positioning - maps to semanticSpacing.sm (8px)
15817
16181
  }
@@ -15823,7 +16187,7 @@ var ticketCardBadgeVariants = classVarianceAuthority.cva(
15823
16187
  );
15824
16188
  var ticketCardBadgeSurfaceVariants = classVarianceAuthority.cva(
15825
16189
  // Base classes - flex layout, items center, badge styling
15826
- `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`,
16190
+ `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}`,
15827
16191
  {
15828
16192
  variants: {
15829
16193
  variant: {
@@ -15840,6 +16204,45 @@ var ticketCardBadgeSurfaceVariants = classVarianceAuthority.cva(
15840
16204
  }
15841
16205
  }
15842
16206
  );
16207
+ var ticketCardTitleVariants = classVarianceAuthority.cva(
16208
+ `${TEXT_TOKENS.fontSize.lg} ${TEXT_TOKENS.fontWeight.bold} ${MOTION_TOKENS.transition.colors} ${DOMAIN_TOKENS.text.hover.primary} ${DOMAIN_TOKENS.text.lineClamp.two}`,
16209
+ {
16210
+ variants: {
16211
+ size: {
16212
+ default: DOMAIN_TOKENS.spacing.section.subtitleToMetadata,
16213
+ compact: DOMAIN_TOKENS.spacing.section.titleToSubtitle
16214
+ }
16215
+ },
16216
+ defaultVariants: {
16217
+ size: "default"
16218
+ }
16219
+ }
16220
+ );
16221
+ var ticketCardDateVariants = classVarianceAuthority.cva(
16222
+ `${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.sm} ${MOTION_TOKENS.transition.colors}`,
16223
+ {
16224
+ variants: {
16225
+ size: {
16226
+ default: DOMAIN_TOKENS.spacing.section.titleToSubtitle,
16227
+ compact: `${DOMAIN_TOKENS.spacing.section.titleToSubtitle} ${TEXT_TOKENS.fontSize.xs}`
16228
+ }
16229
+ },
16230
+ defaultVariants: {
16231
+ size: "default"
16232
+ }
16233
+ }
16234
+ );
16235
+ var ticketCardDescriptionVariants = classVarianceAuthority.cva(`${DOMAIN_TOKENS.text.lineClamp.two}`, {
16236
+ variants: {
16237
+ size: {
16238
+ default: DOMAIN_TOKENS.spacing.section.subtitleToMetadata,
16239
+ compact: DOMAIN_TOKENS.spacing.section.titleToSubtitle
16240
+ }
16241
+ },
16242
+ defaultVariants: {
16243
+ size: "default"
16244
+ }
16245
+ });
15843
16246
  var ticketCardPriceCapacityContainerVariants = classVarianceAuthority.cva(
15844
16247
  // Base classes - flex layout, price/capacity spacing
15845
16248
  `flex items-center ${DOMAIN_TOKENS.priceCapacity.spacing}`,
@@ -15857,7 +16260,7 @@ var ticketCardPriceCapacityContainerVariants = classVarianceAuthority.cva(
15857
16260
  );
15858
16261
  var ticketCardPriceVariants = classVarianceAuthority.cva(
15859
16262
  // Base classes - price text color
15860
- `${DOMAIN_TOKENS.priceCapacity.text.primary} font-bold`,
16263
+ `${DOMAIN_TOKENS.priceCapacity.text.primary} ${TEXT_TOKENS.fontWeight.bold}`,
15861
16264
  {
15862
16265
  variants: {
15863
16266
  size: {
@@ -15891,7 +16294,7 @@ var ticketCardCapacityVariants = classVarianceAuthority.cva(
15891
16294
  );
15892
16295
  var ticketCardAvailabilityVariants = classVarianceAuthority.cva(
15893
16296
  // Base classes - availability indicator styling
15894
- `inline-flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${TEXT_TOKENS.fontSize.xs} font-medium`,
16297
+ `inline-flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${TEXT_TOKENS.fontSize.xs} ${TEXT_TOKENS.fontWeight.medium}`,
15895
16298
  {
15896
16299
  variants: {
15897
16300
  availability: {
@@ -15924,7 +16327,7 @@ var ticketCardFooterVariants = classVarianceAuthority.cva(
15924
16327
  );
15925
16328
  var ticketCardPurchaseButtonVariants = classVarianceAuthority.cva(
15926
16329
  // Base classes - flex layout, badge gradient, motion
15927
- `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`,
16330
+ `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`,
15928
16331
  {
15929
16332
  variants: {
15930
16333
  size: {
@@ -15959,9 +16362,38 @@ var ticketCardPurchaseButtonIconVariants = classVarianceAuthority.cva(
15959
16362
  }
15960
16363
  }
15961
16364
  );
16365
+ var ticketCardImageOverlayVariants = classVarianceAuthority.cva(
16366
+ `absolute inset-0 ${DOMAIN_TOKENS.image.overlay.gradient} opacity-0 ${MOTION_TOKENS.transition.opacity} ${MOTION_TOKENS.duration.normal} group-hover:opacity-100`,
16367
+ {
16368
+ variants: {
16369
+ size: {
16370
+ default: "",
16371
+ compact: ""
16372
+ }
16373
+ },
16374
+ defaultVariants: {
16375
+ size: "default"
16376
+ }
16377
+ }
16378
+ );
16379
+ var ticketCardImageTransformVariants = classVarianceAuthority.cva(
16380
+ `object-cover ${MOTION_TOKENS.transition.transform} ${MOTION_TOKENS.duration.slow} ${DOMAIN_TOKENS.motion.hover.scale}`,
16381
+ {
16382
+ variants: {
16383
+ size: {
16384
+ default: "",
16385
+ compact: ""
16386
+ }
16387
+ },
16388
+ defaultVariants: {
16389
+ size: "default"
16390
+ }
16391
+ }
16392
+ );
15962
16393
  var TicketCard = React49__namespace.forwardRef(
15963
16394
  ({
15964
16395
  title,
16396
+ date,
15965
16397
  description,
15966
16398
  price,
15967
16399
  capacity,
@@ -16008,57 +16440,368 @@ var TicketCard = React49__namespace.forwardRef(
16008
16440
  }
16009
16441
  };
16010
16442
  const availabilityLabel = getAvailabilityLabel();
16443
+ const formattedDate = date ? formatDate(date) : null;
16444
+ const dateTimeValue = (() => {
16445
+ if (!date) return null;
16446
+ if (typeof date === "string") {
16447
+ return new Date(date).toISOString();
16448
+ }
16449
+ if (date instanceof Date) {
16450
+ return date.toISOString();
16451
+ }
16452
+ return new Date(date).toISOString();
16453
+ })();
16011
16454
  return /* @__PURE__ */ jsxRuntime.jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxRuntime.jsxs(
16012
16455
  CardBase,
16013
16456
  {
16014
16457
  ref,
16015
16458
  size: size3,
16016
16459
  variant: cardVariant,
16017
- className: cn("group relative", className),
16460
+ className: cn(ticketCardVariants({ size: size3, variant: cardVariant }), className),
16018
16461
  ...props,
16019
16462
  children: [
16020
16463
  featured && featuredBadgeText && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ticketCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
16021
16464
  vipBadgeText && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(ticketCardBadgeVariants({ size: size3 }), getVipBadgePosition()), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "vip" }), children: vipBadgeText }) }),
16022
16465
  discountBadgeText && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(ticketCardBadgeVariants({ size: size3 }), getDiscountBadgePosition()), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: ticketCardBadgeSurfaceVariants({ variant: "discount" }), children: discountBadgeText }) }),
16023
- showImage && /* @__PURE__ */ jsxRuntime.jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full overflow-hidden bg-gradient-to-br from-surface-elevated1 to-surface-elevated2", children: [
16024
- imageUrl ? /* @__PURE__ */ jsxRuntime.jsx(
16025
- "img",
16026
- {
16027
- src: imageUrl,
16028
- alt: title,
16029
- className: cn(
16030
- "h-full w-full object-cover",
16031
- DOMAIN_TOKENS.motion.hover.transition,
16032
- DOMAIN_TOKENS.motion.hover.scale
16033
- )
16034
- }
16035
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
16036
- Icon2,
16037
- {
16038
- name: "info",
16039
- size: "xl",
16040
- color: "muted",
16041
- className: ICON_TOKENS.sizes["4xl"],
16042
- "aria-hidden": "true"
16043
- }
16044
- ) }),
16045
- /* @__PURE__ */ jsxRuntime.jsx(
16046
- "div",
16466
+ showImage && /* @__PURE__ */ jsxRuntime.jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs(
16467
+ "div",
16468
+ {
16469
+ className: cn(
16470
+ "relative w-full overflow-hidden",
16471
+ DOMAIN_TOKENS.image.placeholder.gradient
16472
+ ),
16473
+ children: [
16474
+ imageUrl ? /* @__PURE__ */ jsxRuntime.jsx(
16475
+ "img",
16476
+ {
16477
+ src: imageUrl,
16478
+ alt: title,
16479
+ className: cn("h-full w-full", ticketCardImageTransformVariants({ size: size3 }))
16480
+ }
16481
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
16482
+ Icon2,
16483
+ {
16484
+ name: "info",
16485
+ size: "xl",
16486
+ color: "muted",
16487
+ className: ICON_TOKENS.sizes["4xl"],
16488
+ "aria-hidden": "true"
16489
+ }
16490
+ ) }),
16491
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: ticketCardImageOverlayVariants({ size: size3 }) })
16492
+ ]
16493
+ }
16494
+ ) }),
16495
+ /* @__PURE__ */ jsxRuntime.jsxs(CardBaseContentWrapper, { size: size3, children: [
16496
+ /* @__PURE__ */ jsxRuntime.jsx(Heading, { level: 3, className: ticketCardTitleVariants({ size: size3 }), children: href ? /* @__PURE__ */ jsxRuntime.jsx(Link, { href, variant: "ghost", children: title }) : title }),
16497
+ formattedDate && dateTimeValue && /* @__PURE__ */ jsxRuntime.jsx("time", { dateTime: dateTimeValue, className: ticketCardDateVariants({ size: size3 }), children: formattedDate }),
16498
+ description && /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "sm", variant: "muted", className: ticketCardDescriptionVariants({ size: size3 }), children: description }),
16499
+ (price || capacity) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ticketCardPriceCapacityContainerVariants({ size: size3 }), children: [
16500
+ price && /* @__PURE__ */ jsxRuntime.jsx(
16501
+ Text,
16502
+ {
16503
+ size: size3 === "compact" ? "md" : "lg",
16504
+ weight: "bold",
16505
+ className: ticketCardPriceVariants({ size: size3 }),
16506
+ children: price
16507
+ }
16508
+ ),
16509
+ capacity && /* @__PURE__ */ jsxRuntime.jsx(
16510
+ Text,
16511
+ {
16512
+ size: size3 === "compact" ? "xs" : "sm",
16513
+ variant: "muted",
16514
+ className: ticketCardCapacityVariants({ size: size3 }),
16515
+ children: capacity
16516
+ }
16517
+ )
16518
+ ] }),
16519
+ availabilityLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ticketCardAvailabilityVariants({ availability }), children: /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", variant: availability === "sold_out" ? "muted" : "primary", children: availabilityLabel }) })
16520
+ ] }),
16521
+ /* @__PURE__ */ jsxRuntime.jsx(CardBaseFooterWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full", ticketCardFooterVariants({ size: size3 })), children: [
16522
+ purchaseUrl && !isPurchaseDisabled && /* @__PURE__ */ jsxRuntime.jsxs(
16523
+ Link,
16047
16524
  {
16525
+ href: purchaseUrl,
16048
16526
  className: cn(
16049
- "absolute inset-0 opacity-0 transition-opacity duration-normal group-hover:opacity-100",
16050
- DOMAIN_TOKENS.image.overlay.gradient
16051
- )
16527
+ "w-full",
16528
+ ticketCardPurchaseButtonVariants({ size: size3, disabled: false })
16529
+ ),
16530
+ target: "_blank",
16531
+ rel: "noopener noreferrer",
16532
+ children: [
16533
+ purchaseLabel,
16534
+ /* @__PURE__ */ jsxRuntime.jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size: size3 }) })
16535
+ ]
16536
+ }
16537
+ ),
16538
+ (!purchaseUrl || isPurchaseDisabled) && /* @__PURE__ */ jsxRuntime.jsxs(
16539
+ "div",
16540
+ {
16541
+ className: cn(
16542
+ "w-full",
16543
+ ticketCardPurchaseButtonVariants({ size: size3, disabled: isPurchaseDisabled })
16544
+ ),
16545
+ children: [
16546
+ purchaseLabel,
16547
+ /* @__PURE__ */ jsxRuntime.jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size: size3 }) })
16548
+ ]
16052
16549
  }
16053
16550
  )
16054
- ] }) }),
16551
+ ] }) })
16552
+ ]
16553
+ }
16554
+ ) });
16555
+ }
16556
+ );
16557
+ TicketCard.displayName = "TicketCard";
16558
+ var eventCardVariants = classVarianceAuthority.cva(
16559
+ // Base classes - surface, border, radius, shadow, motion from tokens
16560
+ `${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`,
16561
+ {
16562
+ variants: {
16563
+ size: {
16564
+ default: `${CARD_TOKENS.size.md.padding} ${DOMAIN_TOKENS.layout.gap.default}`,
16565
+ compact: `${CARD_TOKENS.size.sm.padding} ${DOMAIN_TOKENS.layout.gap.compact}`
16566
+ },
16567
+ layout: {
16568
+ vertical: "flex flex-col"
16569
+ },
16570
+ variant: {
16571
+ default: "",
16572
+ featured: `${DOMAIN_TOKENS.badges.surface.featured}`
16573
+ }
16574
+ },
16575
+ defaultVariants: {
16576
+ size: "default",
16577
+ layout: "vertical",
16578
+ variant: "default"
16579
+ }
16580
+ }
16581
+ );
16582
+ var eventCardBadgeVariants = classVarianceAuthority.cva(
16583
+ // Base classes - absolute positioning, z-index
16584
+ "absolute z-10",
16585
+ {
16586
+ variants: {
16587
+ size: {
16588
+ default: DOMAIN_TOKENS.badges.position.default,
16589
+ compact: DOMAIN_TOKENS.badges.position.compact
16590
+ }
16591
+ },
16592
+ defaultVariants: {
16593
+ size: "default"
16594
+ }
16595
+ }
16596
+ );
16597
+ var eventCardBadgeSurfaceVariants = classVarianceAuthority.cva(
16598
+ // Base classes - flex layout, items center, badge styling from tokens
16599
+ `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}`,
16600
+ {
16601
+ variants: {
16602
+ variant: {
16603
+ default: DOMAIN_TOKENS.badges.surface.default,
16604
+ featured: DOMAIN_TOKENS.badges.surface.featured
16605
+ }
16606
+ },
16607
+ defaultVariants: {
16608
+ variant: "featured"
16609
+ }
16610
+ }
16611
+ );
16612
+ var eventCardMetadataVariants = classVarianceAuthority.cva(
16613
+ // Base classes - flex column, metadata spacing from tokens
16614
+ `flex flex-col ${DOMAIN_TOKENS.metadata.spacing.vertical}`,
16615
+ {
16616
+ variants: {
16617
+ size: {
16618
+ default: "",
16619
+ compact: ""
16620
+ }
16621
+ },
16622
+ defaultVariants: {
16623
+ size: "default"
16624
+ }
16625
+ }
16626
+ );
16627
+ var eventCardMetadataItemVariants = classVarianceAuthority.cva(
16628
+ // Base classes - flex items center, metadata spacing and text from tokens
16629
+ `flex items-center ${DOMAIN_TOKENS.metadata.spacing.horizontal} ${DOMAIN_TOKENS.metadata.text.secondary} ${TEXT_TOKENS.fontSize.xs}`,
16630
+ {
16631
+ variants: {
16632
+ size: {
16633
+ default: "",
16634
+ compact: ""
16635
+ }
16636
+ },
16637
+ defaultVariants: {
16638
+ size: "default"
16639
+ }
16640
+ }
16641
+ );
16642
+ var eventCardMetadataIconVariants = classVarianceAuthority.cva(
16643
+ // Base classes - icon size and color from tokens
16644
+ `${DOMAIN_TOKENS.metadata.icon.sizeSm} ${DOMAIN_TOKENS.metadata.icon.default}`,
16645
+ {
16646
+ variants: {
16647
+ size: {
16648
+ default: "",
16649
+ compact: ""
16650
+ }
16651
+ },
16652
+ defaultVariants: {
16653
+ size: "default"
16654
+ }
16655
+ }
16656
+ );
16657
+ var eventCardFooterVariants = classVarianceAuthority.cva(
16658
+ // Base classes - border top, spacing from tokens
16659
+ "border-t border-border",
16660
+ {
16661
+ variants: {
16662
+ size: {
16663
+ default: DOMAIN_TOKENS.spacing.footer.paddingTopDefault,
16664
+ compact: DOMAIN_TOKENS.spacing.footer.paddingTopCompact
16665
+ }
16666
+ },
16667
+ defaultVariants: {
16668
+ size: "default"
16669
+ }
16670
+ }
16671
+ );
16672
+ var eventCardTicketButtonVariants = classVarianceAuthority.cva(
16673
+ // Base classes - flex layout, badge gradient, motion from tokens
16674
+ `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`,
16675
+ {
16676
+ variants: {
16677
+ size: {
16678
+ default: DOMAIN_TOKENS.spacing.button.paddingDefault,
16679
+ compact: DOMAIN_TOKENS.spacing.button.paddingCompact
16680
+ }
16681
+ },
16682
+ defaultVariants: {
16683
+ size: "default"
16684
+ }
16685
+ }
16686
+ );
16687
+ var eventCardTicketButtonIconVariants = classVarianceAuthority.cva(
16688
+ // Base classes - icon size and spacing from tokens
16689
+ `${DOMAIN_TOKENS.metadata.icon.sizeSm} ${DOMAIN_TOKENS.spacing.button.iconMarginLeft}`,
16690
+ {
16691
+ variants: {
16692
+ size: {
16693
+ default: "",
16694
+ compact: ""
16695
+ }
16696
+ },
16697
+ defaultVariants: {
16698
+ size: "default"
16699
+ }
16700
+ }
16701
+ );
16702
+ var eventCardPriceVariants = classVarianceAuthority.cva(
16703
+ // Base classes - price gradient text from tokens
16704
+ `bg-gradient-to-r from-accent-500 to-primary-600 bg-clip-text text-transparent`,
16705
+ {
16706
+ variants: {
16707
+ size: {
16708
+ default: TEXT_TOKENS.fontSize.lg,
16709
+ compact: TEXT_TOKENS.fontSize.md
16710
+ }
16711
+ },
16712
+ defaultVariants: {
16713
+ size: "default"
16714
+ }
16715
+ }
16716
+ );
16717
+ var EventCard = React49__namespace.forwardRef(
16718
+ ({
16719
+ title,
16720
+ description,
16721
+ date,
16722
+ venueName,
16723
+ price,
16724
+ imageUrl,
16725
+ href,
16726
+ ticketUrl,
16727
+ featured = false,
16728
+ showImage = true,
16729
+ getTicketsLabel,
16730
+ featuredBadgeText,
16731
+ size: size3 = "default",
16732
+ layout = "vertical",
16733
+ variant,
16734
+ className,
16735
+ animation,
16736
+ ...props
16737
+ }, ref) => {
16738
+ const animationProps = resolveComponentAnimations({
16739
+ animation: animation?.animation || "fadeInUp",
16740
+ hoverAnimation: animation?.hoverAnimation || "hoverLift",
16741
+ animationProps: animation?.animationProps
16742
+ });
16743
+ const cardVariant = variant || (featured ? "featured" : "default");
16744
+ return /* @__PURE__ */ jsxRuntime.jsx(Box, { ...animationProps, children: /* @__PURE__ */ jsxRuntime.jsxs(
16745
+ CardBase,
16746
+ {
16747
+ ref,
16748
+ size: size3,
16749
+ variant: cardVariant,
16750
+ className: cn(
16751
+ eventCardVariants({ size: size3, layout, variant: cardVariant }),
16752
+ "group relative",
16753
+ className
16754
+ ),
16755
+ ...props,
16756
+ children: [
16757
+ featured && featuredBadgeText && /* @__PURE__ */ jsxRuntime.jsx("div", { className: eventCardBadgeVariants({ size: size3 }), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: eventCardBadgeSurfaceVariants({ variant: "featured" }), children: featuredBadgeText }) }),
16758
+ showImage && /* @__PURE__ */ jsxRuntime.jsx(CardBaseImageWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs(
16759
+ "div",
16760
+ {
16761
+ className: cn("relative w-full overflow-hidden", DOMAIN_TOKENS.surface.bg.default),
16762
+ children: [
16763
+ imageUrl ? /* @__PURE__ */ jsxRuntime.jsx(
16764
+ "img",
16765
+ {
16766
+ src: imageUrl,
16767
+ alt: title,
16768
+ className: cn(
16769
+ "h-full w-full object-cover",
16770
+ DOMAIN_TOKENS.motion.hover.transition,
16771
+ DOMAIN_TOKENS.motion.hover.scale
16772
+ )
16773
+ }
16774
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
16775
+ Icon2,
16776
+ {
16777
+ name: "info",
16778
+ size: "xl",
16779
+ color: "muted",
16780
+ className: ICON_TOKENS.sizes["4xl"],
16781
+ "aria-hidden": "true"
16782
+ }
16783
+ ) }),
16784
+ /* @__PURE__ */ jsxRuntime.jsx(
16785
+ "div",
16786
+ {
16787
+ className: cn(
16788
+ "absolute inset-0 opacity-0 group-hover:opacity-100",
16789
+ DOMAIN_TOKENS.motion.hover.transition,
16790
+ DOMAIN_TOKENS.image.overlay.gradient
16791
+ )
16792
+ }
16793
+ )
16794
+ ]
16795
+ }
16796
+ ) }),
16055
16797
  /* @__PURE__ */ jsxRuntime.jsxs(CardBaseContentWrapper, { size: size3, children: [
16056
16798
  /* @__PURE__ */ jsxRuntime.jsx(
16057
16799
  Heading,
16058
16800
  {
16059
16801
  level: 3,
16060
16802
  className: cn(
16061
- "line-clamp-2 transition-colors group-hover:text-primary",
16803
+ "line-clamp-2 group-hover:text-primary",
16804
+ DOMAIN_TOKENS.motion.hover.transition,
16062
16805
  TEXT_TOKENS.fontSize.lg,
16063
16806
  TEXT_TOKENS.fontWeight.bold,
16064
16807
  DOMAIN_TOKENS.spacing.section.titleToSubtitle
@@ -16070,7 +16813,7 @@ var TicketCard = React49__namespace.forwardRef(
16070
16813
  Text,
16071
16814
  {
16072
16815
  size: "sm",
16073
- variant: "muted",
16816
+ muted: true,
16074
16817
  className: cn(
16075
16818
  "line-clamp-2",
16076
16819
  size3 === "compact" ? DOMAIN_TOKENS.spacing.section.titleToSubtitle : DOMAIN_TOKENS.spacing.section.subtitleToMetadata
@@ -16078,49 +16821,57 @@ var TicketCard = React49__namespace.forwardRef(
16078
16821
  children: description
16079
16822
  }
16080
16823
  ),
16081
- (price || capacity) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: ticketCardPriceCapacityContainerVariants({ size: size3 }), children: [
16082
- price && /* @__PURE__ */ jsxRuntime.jsx(Text, { size: size3 === "compact" ? "md" : "lg", weight: "bold", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: ticketCardPriceVariants({ size: size3 }), children: price }) }),
16083
- capacity && /* @__PURE__ */ jsxRuntime.jsx(Text, { size: size3 === "compact" ? "xs" : "sm", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: ticketCardCapacityVariants({ size: size3 }), children: capacity }) })
16084
- ] }),
16085
- availabilityLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: ticketCardAvailabilityVariants({ availability }), children: /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", variant: availability === "sold_out" ? "muted" : "primary", children: availabilityLabel }) })
16824
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: eventCardMetadataVariants({ size: size3 }), children: [
16825
+ date && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: eventCardMetadataItemVariants({ size: size3 }), role: "text", children: [
16826
+ /* @__PURE__ */ jsxRuntime.jsx(
16827
+ IconCalendar,
16828
+ {
16829
+ className: eventCardMetadataIconVariants({ size: size3 }),
16830
+ "aria-hidden": true
16831
+ }
16832
+ ),
16833
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", muted: true, children: /* @__PURE__ */ jsxRuntime.jsx("time", { dateTime: date, children: date }) })
16834
+ ] }),
16835
+ venueName && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: eventCardMetadataItemVariants({ size: size3 }), role: "text", children: [
16836
+ /* @__PURE__ */ jsxRuntime.jsx(
16837
+ IconLocation,
16838
+ {
16839
+ className: eventCardMetadataIconVariants({ size: size3 }),
16840
+ "aria-hidden": true
16841
+ }
16842
+ ),
16843
+ /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xs", muted: true, className: "line-clamp-1", children: /* @__PURE__ */ jsxRuntime.jsx("address", { children: venueName }) })
16844
+ ] })
16845
+ ] })
16086
16846
  ] }),
16087
- /* @__PURE__ */ jsxRuntime.jsx(CardBaseFooterWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full", ticketCardFooterVariants({ size: size3 })), children: [
16088
- purchaseUrl && !isPurchaseDisabled && /* @__PURE__ */ jsxRuntime.jsxs(
16847
+ /* @__PURE__ */ jsxRuntime.jsx(CardBaseFooterWrapper, { size: size3, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full", eventCardFooterVariants({ size: size3 })), children: [
16848
+ ticketUrl && /* @__PURE__ */ jsxRuntime.jsxs(
16089
16849
  Link,
16090
16850
  {
16091
- href: purchaseUrl,
16092
- className: cn(
16093
- "w-full",
16094
- ticketCardPurchaseButtonVariants({ size: size3, disabled: false })
16095
- ),
16851
+ href: ticketUrl,
16852
+ className: cn("w-full", eventCardTicketButtonVariants({ size: size3 })),
16096
16853
  target: "_blank",
16097
16854
  rel: "noopener noreferrer",
16098
16855
  children: [
16099
- purchaseLabel,
16100
- /* @__PURE__ */ jsxRuntime.jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size: size3 }) })
16856
+ getTicketsLabel,
16857
+ /* @__PURE__ */ jsxRuntime.jsx(
16858
+ IconArrowRight,
16859
+ {
16860
+ className: eventCardTicketButtonIconVariants({ size: size3 }),
16861
+ "aria-hidden": true
16862
+ }
16863
+ )
16101
16864
  ]
16102
16865
  }
16103
16866
  ),
16104
- (!purchaseUrl || isPurchaseDisabled) && /* @__PURE__ */ jsxRuntime.jsxs(
16105
- "div",
16106
- {
16107
- className: cn(
16108
- "w-full",
16109
- ticketCardPurchaseButtonVariants({ size: size3, disabled: isPurchaseDisabled })
16110
- ),
16111
- children: [
16112
- purchaseLabel,
16113
- /* @__PURE__ */ jsxRuntime.jsx(IconArrowRight, { className: ticketCardPurchaseButtonIconVariants({ size: size3 }) })
16114
- ]
16115
- }
16116
- )
16867
+ !ticketUrl && price && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-right", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { size: size3 === "compact" ? "md" : "lg", weight: "bold", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: eventCardPriceVariants({ size: size3 }), children: price }) }) })
16117
16868
  ] }) })
16118
16869
  ]
16119
16870
  }
16120
16871
  ) });
16121
16872
  }
16122
16873
  );
16123
- TicketCard.displayName = "TicketCard";
16874
+ EventCard.displayName = "EventCard";
16124
16875
 
16125
16876
  exports.ALERT_TOKENS = ALERT_TOKENS;
16126
16877
  exports.Alert = Alert;
@@ -16138,6 +16889,7 @@ exports.Card = Card;
16138
16889
  exports.CardBody = CardBody;
16139
16890
  exports.CardFooter = CardFooter;
16140
16891
  exports.CardHeader = CardHeader;
16892
+ exports.CategoryCard = CategoryCard;
16141
16893
  exports.Checkbox = Checkbox;
16142
16894
  exports.Code = Code;
16143
16895
  exports.Column = Column;