@medialane/ui 0.119.0 → 0.121.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/dist/components/action-button.cjs.map +1 -1
  2. package/dist/components/action-button.d.cts +0 -9
  3. package/dist/components/action-button.d.ts +0 -9
  4. package/dist/components/action-button.js.map +1 -1
  5. package/dist/components/action-dialog.cjs.map +1 -1
  6. package/dist/components/action-dialog.d.cts +0 -1
  7. package/dist/components/action-dialog.d.ts +0 -1
  8. package/dist/components/action-dialog.js.map +1 -1
  9. package/dist/components/activity-card.cjs.map +1 -1
  10. package/dist/components/activity-card.d.cts +0 -3
  11. package/dist/components/activity-card.d.ts +0 -3
  12. package/dist/components/activity-card.js.map +1 -1
  13. package/dist/components/activity-row.cjs.map +1 -1
  14. package/dist/components/activity-row.d.cts +0 -1
  15. package/dist/components/activity-row.d.ts +0 -1
  16. package/dist/components/activity-row.js.map +1 -1
  17. package/dist/components/activity-ticker.cjs.map +1 -1
  18. package/dist/components/activity-ticker.d.cts +0 -1
  19. package/dist/components/activity-ticker.d.ts +0 -1
  20. package/dist/components/activity-ticker.js.map +1 -1
  21. package/dist/components/address-display.cjs.map +1 -1
  22. package/dist/components/address-display.d.cts +0 -1
  23. package/dist/components/address-display.d.ts +0 -1
  24. package/dist/components/address-display.js.map +1 -1
  25. package/dist/components/animated-token-media.cjs.map +1 -1
  26. package/dist/components/animated-token-media.d.cts +0 -10
  27. package/dist/components/animated-token-media.d.ts +0 -10
  28. package/dist/components/animated-token-media.js.map +1 -1
  29. package/dist/components/asset-card.cjs.map +1 -1
  30. package/dist/components/asset-card.d.cts +0 -29
  31. package/dist/components/asset-card.d.ts +0 -29
  32. package/dist/components/asset-card.js.map +1 -1
  33. package/dist/components/asset-collection-bar.cjs.map +1 -1
  34. package/dist/components/asset-collection-bar.d.cts +0 -1
  35. package/dist/components/asset-collection-bar.d.ts +0 -1
  36. package/dist/components/asset-collection-bar.js.map +1 -1
  37. package/dist/components/asset-license-summary.cjs.map +1 -1
  38. package/dist/components/asset-license-summary.d.cts +0 -8
  39. package/dist/components/asset-license-summary.d.ts +0 -8
  40. package/dist/components/asset-license-summary.js.map +1 -1
  41. package/dist/components/asset-lightbox.cjs.map +1 -1
  42. package/dist/components/asset-lightbox.js.map +1 -1
  43. package/dist/components/asset-marketplace-panel.cjs.map +1 -1
  44. package/dist/components/asset-marketplace-panel.d.cts +0 -13
  45. package/dist/components/asset-marketplace-panel.d.ts +0 -13
  46. package/dist/components/asset-marketplace-panel.js.map +1 -1
  47. package/dist/components/asset-markets-tab.cjs.map +1 -1
  48. package/dist/components/asset-markets-tab.js.map +1 -1
  49. package/dist/components/asset-overview-content.cjs.map +1 -1
  50. package/dist/components/asset-overview-content.d.cts +0 -7
  51. package/dist/components/asset-overview-content.d.ts +0 -7
  52. package/dist/components/asset-overview-content.js.map +1 -1
  53. package/dist/components/asset-picker-cell.cjs.map +1 -1
  54. package/dist/components/asset-picker-cell.d.cts +0 -4
  55. package/dist/components/asset-picker-cell.d.ts +0 -4
  56. package/dist/components/asset-picker-cell.js.map +1 -1
  57. package/dist/components/asset-picker.cjs.map +1 -1
  58. package/dist/components/asset-picker.d.cts +0 -4
  59. package/dist/components/asset-picker.d.ts +0 -4
  60. package/dist/components/asset-picker.js.map +1 -1
  61. package/dist/components/asset-search-picker.cjs.map +1 -1
  62. package/dist/components/asset-search-picker.d.cts +0 -2
  63. package/dist/components/asset-search-picker.d.ts +0 -2
  64. package/dist/components/asset-search-picker.js.map +1 -1
  65. package/dist/components/asset-top-sections.cjs.map +1 -1
  66. package/dist/components/asset-top-sections.d.cts +0 -18
  67. package/dist/components/asset-top-sections.d.ts +0 -18
  68. package/dist/components/asset-top-sections.js.map +1 -1
  69. package/dist/components/asset-utility-icons.cjs.map +1 -1
  70. package/dist/components/asset-utility-icons.d.cts +0 -5
  71. package/dist/components/asset-utility-icons.d.ts +0 -5
  72. package/dist/components/asset-utility-icons.js.map +1 -1
  73. package/dist/components/claim-rail.cjs.map +1 -1
  74. package/dist/components/claim-rail.d.cts +0 -9
  75. package/dist/components/claim-rail.d.ts +0 -9
  76. package/dist/components/claim-rail.js.map +1 -1
  77. package/dist/components/club-owner-actions.cjs.map +1 -1
  78. package/dist/components/club-owner-actions.d.cts +0 -2
  79. package/dist/components/club-owner-actions.d.ts +0 -2
  80. package/dist/components/club-owner-actions.js.map +1 -1
  81. package/dist/components/coin-card.cjs.map +1 -1
  82. package/dist/components/coin-card.d.cts +0 -2
  83. package/dist/components/coin-card.d.ts +0 -2
  84. package/dist/components/coin-card.js.map +1 -1
  85. package/dist/components/coin-launch-preview.cjs.map +1 -1
  86. package/dist/components/coin-launch-preview.d.cts +0 -7
  87. package/dist/components/coin-launch-preview.d.ts +0 -7
  88. package/dist/components/coin-launch-preview.js.map +1 -1
  89. package/dist/components/coins-explorer.cjs.map +1 -1
  90. package/dist/components/coins-explorer.d.cts +0 -1
  91. package/dist/components/coins-explorer.d.ts +0 -1
  92. package/dist/components/coins-explorer.js.map +1 -1
  93. package/dist/components/collection-card.cjs.map +1 -1
  94. package/dist/components/collection-card.d.cts +0 -2
  95. package/dist/components/collection-card.d.ts +0 -2
  96. package/dist/components/collection-card.js.map +1 -1
  97. package/dist/components/collection-filters.cjs.map +1 -1
  98. package/dist/components/collection-filters.js.map +1 -1
  99. package/dist/components/collection-hero-banner.cjs.map +1 -1
  100. package/dist/components/collection-hero-banner.d.cts +0 -7
  101. package/dist/components/collection-hero-banner.d.ts +0 -7
  102. package/dist/components/collection-hero-banner.js.map +1 -1
  103. package/dist/components/collection-traits-tab.cjs.map +1 -1
  104. package/dist/components/collection-traits-tab.js.map +1 -1
  105. package/dist/components/community-rewards-section.cjs.map +1 -1
  106. package/dist/components/community-rewards-section.js.map +1 -1
  107. package/dist/components/create-form-primitives.cjs.map +1 -1
  108. package/dist/components/create-form-primitives.d.cts +0 -2
  109. package/dist/components/create-form-primitives.d.ts +0 -2
  110. package/dist/components/create-form-primitives.js.map +1 -1
  111. package/dist/components/creation-record.cjs.map +1 -1
  112. package/dist/components/creation-record.d.cts +0 -5
  113. package/dist/components/creation-record.d.ts +0 -5
  114. package/dist/components/creation-record.js.map +1 -1
  115. package/dist/components/creator-airdrop-banner.cjs.map +1 -1
  116. package/dist/components/creator-airdrop-banner.d.cts +0 -1
  117. package/dist/components/creator-airdrop-banner.d.ts +0 -1
  118. package/dist/components/creator-airdrop-banner.js.map +1 -1
  119. package/dist/components/creator-analytics.cjs.map +1 -1
  120. package/dist/components/creator-analytics.js.map +1 -1
  121. package/dist/components/creator-score-inline.cjs.map +1 -1
  122. package/dist/components/creator-score-inline.d.cts +0 -5
  123. package/dist/components/creator-score-inline.d.ts +0 -5
  124. package/dist/components/creator-score-inline.js.map +1 -1
  125. package/dist/components/cta-card-grid.cjs.map +1 -1
  126. package/dist/components/cta-card-grid.d.cts +0 -2
  127. package/dist/components/cta-card-grid.d.ts +0 -2
  128. package/dist/components/cta-card-grid.js.map +1 -1
  129. package/dist/components/currency-icon.cjs.map +1 -1
  130. package/dist/components/currency-icon.d.cts +0 -5
  131. package/dist/components/currency-icon.d.ts +0 -5
  132. package/dist/components/currency-icon.js.map +1 -1
  133. package/dist/components/discover-collections-strip.cjs.map +1 -1
  134. package/dist/components/discover-collections-strip.d.cts +0 -4
  135. package/dist/components/discover-collections-strip.d.ts +0 -4
  136. package/dist/components/discover-collections-strip.js.map +1 -1
  137. package/dist/components/discover-creators-strip.cjs.map +1 -1
  138. package/dist/components/discover-creators-strip.js.map +1 -1
  139. package/dist/components/discover-feed-section.cjs.map +1 -1
  140. package/dist/components/discover-feed-section.d.cts +0 -11
  141. package/dist/components/discover-feed-section.d.ts +0 -11
  142. package/dist/components/discover-feed-section.js.map +1 -1
  143. package/dist/components/discover-hero.cjs.map +1 -1
  144. package/dist/components/discover-hero.js.map +1 -1
  145. package/dist/components/drop-countdown.cjs.map +1 -1
  146. package/dist/components/drop-countdown.js.map +1 -1
  147. package/dist/components/dual-price.cjs +1 -7
  148. package/dist/components/dual-price.cjs.map +1 -1
  149. package/dist/components/dual-price.d.cts +0 -30
  150. package/dist/components/dual-price.d.ts +0 -30
  151. package/dist/components/dual-price.js +1 -7
  152. package/dist/components/dual-price.js.map +1 -1
  153. package/dist/components/empty-or-error.cjs.map +1 -1
  154. package/dist/components/empty-or-error.d.cts +0 -1
  155. package/dist/components/empty-or-error.d.ts +0 -1
  156. package/dist/components/empty-or-error.js.map +1 -1
  157. package/dist/components/gradient-button.cjs.map +1 -1
  158. package/dist/components/gradient-button.d.cts +0 -13
  159. package/dist/components/gradient-button.d.ts +0 -13
  160. package/dist/components/gradient-button.js.map +1 -1
  161. package/dist/components/help-icon.cjs.map +1 -1
  162. package/dist/components/help-icon.d.cts +0 -4
  163. package/dist/components/help-icon.d.ts +0 -4
  164. package/dist/components/help-icon.js.map +1 -1
  165. package/dist/components/hero-slider.cjs.map +1 -1
  166. package/dist/components/hero-slider.d.cts +0 -1
  167. package/dist/components/hero-slider.d.ts +0 -1
  168. package/dist/components/hero-slider.js.map +1 -1
  169. package/dist/components/ip-type-badge.cjs.map +1 -1
  170. package/dist/components/ip-type-badge.d.cts +0 -2
  171. package/dist/components/ip-type-badge.d.ts +0 -2
  172. package/dist/components/ip-type-badge.js.map +1 -1
  173. package/dist/components/ip-type-display.cjs.map +1 -1
  174. package/dist/components/ip-type-display.js.map +1 -1
  175. package/dist/components/ip-type-fields.cjs.map +1 -1
  176. package/dist/components/ip-type-fields.d.cts +0 -2
  177. package/dist/components/ip-type-fields.d.ts +0 -2
  178. package/dist/components/ip-type-fields.js.map +1 -1
  179. package/dist/components/launchpad-filter-bar.cjs.map +1 -1
  180. package/dist/components/launchpad-filter-bar.d.cts +0 -8
  181. package/dist/components/launchpad-filter-bar.d.ts +0 -8
  182. package/dist/components/launchpad-filter-bar.js.map +1 -1
  183. package/dist/components/launchpad-services.cjs +0 -1
  184. package/dist/components/launchpad-services.cjs.map +1 -1
  185. package/dist/components/launchpad-services.d.cts +0 -36
  186. package/dist/components/launchpad-services.d.ts +0 -36
  187. package/dist/components/launchpad-services.js +0 -1
  188. package/dist/components/launchpad-services.js.map +1 -1
  189. package/dist/components/launchpad-strip.cjs.map +1 -1
  190. package/dist/components/launchpad-strip.d.cts +0 -6
  191. package/dist/components/launchpad-strip.d.ts +0 -6
  192. package/dist/components/launchpad-strip.js.map +1 -1
  193. package/dist/components/license-terms-builder.cjs.map +1 -1
  194. package/dist/components/license-terms-builder.d.cts +0 -34
  195. package/dist/components/license-terms-builder.d.ts +0 -34
  196. package/dist/components/license-terms-builder.js.map +1 -1
  197. package/dist/components/listing-card.cjs.map +1 -1
  198. package/dist/components/listing-card.d.cts +0 -19
  199. package/dist/components/listing-card.d.ts +0 -19
  200. package/dist/components/listing-card.js.map +1 -1
  201. package/dist/components/load-more-sentinel.cjs.map +1 -1
  202. package/dist/components/load-more-sentinel.d.cts +0 -6
  203. package/dist/components/load-more-sentinel.d.ts +0 -6
  204. package/dist/components/load-more-sentinel.js.map +1 -1
  205. package/dist/components/medialane-collection-card.cjs +1 -4
  206. package/dist/components/medialane-collection-card.cjs.map +1 -1
  207. package/dist/components/medialane-collection-card.d.cts +0 -13
  208. package/dist/components/medialane-collection-card.d.ts +0 -13
  209. package/dist/components/medialane-collection-card.js +1 -4
  210. package/dist/components/medialane-collection-card.js.map +1 -1
  211. package/dist/components/motion-primitives.cjs.map +1 -1
  212. package/dist/components/motion-primitives.js.map +1 -1
  213. package/dist/components/nav-command-menu.cjs.map +1 -1
  214. package/dist/components/nav-command-menu.d.cts +0 -32
  215. package/dist/components/nav-command-menu.d.ts +0 -32
  216. package/dist/components/nav-command-menu.js.map +1 -1
  217. package/dist/components/nav-shell.cjs.map +1 -1
  218. package/dist/components/nav-shell.d.cts +0 -57
  219. package/dist/components/nav-shell.d.ts +0 -57
  220. package/dist/components/nav-shell.js.map +1 -1
  221. package/dist/components/nav-theme-toggle.cjs.map +1 -1
  222. package/dist/components/nav-theme-toggle.d.cts +0 -4
  223. package/dist/components/nav-theme-toggle.d.ts +0 -4
  224. package/dist/components/nav-theme-toggle.js.map +1 -1
  225. package/dist/components/order-sort-control.cjs.map +1 -1
  226. package/dist/components/order-sort-control.d.cts +0 -2
  227. package/dist/components/order-sort-control.d.ts +0 -2
  228. package/dist/components/order-sort-control.js.map +1 -1
  229. package/dist/components/page-container.cjs +0 -3
  230. package/dist/components/page-container.cjs.map +1 -1
  231. package/dist/components/page-container.d.cts +0 -6
  232. package/dist/components/page-container.d.ts +0 -6
  233. package/dist/components/page-container.js +0 -3
  234. package/dist/components/page-container.js.map +1 -1
  235. package/dist/components/parent-attribution-banner.cjs.map +1 -1
  236. package/dist/components/parent-attribution-banner.d.cts +0 -1
  237. package/dist/components/parent-attribution-banner.d.ts +0 -1
  238. package/dist/components/parent-attribution-banner.js.map +1 -1
  239. package/dist/components/portfolio-activity.cjs.map +1 -1
  240. package/dist/components/portfolio-activity.js.map +1 -1
  241. package/dist/components/portfolio-bento-tile.cjs +8 -3
  242. package/dist/components/portfolio-bento-tile.cjs.map +1 -1
  243. package/dist/components/portfolio-bento-tile.d.cts +5 -13
  244. package/dist/components/portfolio-bento-tile.d.ts +5 -13
  245. package/dist/components/portfolio-bento-tile.js +8 -3
  246. package/dist/components/portfolio-bento-tile.js.map +1 -1
  247. package/dist/components/portfolio-chip-filter.cjs.map +1 -1
  248. package/dist/components/portfolio-chip-filter.d.cts +0 -14
  249. package/dist/components/portfolio-chip-filter.d.ts +0 -14
  250. package/dist/components/portfolio-chip-filter.js.map +1 -1
  251. package/dist/components/portfolio-header.cjs.map +1 -1
  252. package/dist/components/portfolio-header.d.cts +0 -11
  253. package/dist/components/portfolio-header.d.ts +0 -11
  254. package/dist/components/portfolio-header.js.map +1 -1
  255. package/dist/components/portfolio-overview.cjs +6 -1
  256. package/dist/components/portfolio-overview.cjs.map +1 -1
  257. package/dist/components/portfolio-overview.d.cts +0 -18
  258. package/dist/components/portfolio-overview.d.ts +0 -18
  259. package/dist/components/portfolio-overview.js +6 -1
  260. package/dist/components/portfolio-overview.js.map +1 -1
  261. package/dist/components/price-history-chart.cjs.map +1 -1
  262. package/dist/components/price-history-chart.js.map +1 -1
  263. package/dist/components/rewards/badge-catalog.cjs.map +1 -1
  264. package/dist/components/rewards/badge-catalog.d.cts +0 -5
  265. package/dist/components/rewards/badge-catalog.d.ts +0 -5
  266. package/dist/components/rewards/badge-catalog.js.map +1 -1
  267. package/dist/components/rewards/badge-shelf.cjs.map +1 -1
  268. package/dist/components/rewards/badge-shelf.d.cts +0 -5
  269. package/dist/components/rewards/badge-shelf.d.ts +0 -5
  270. package/dist/components/rewards/badge-shelf.js.map +1 -1
  271. package/dist/components/rewards/badge-unlock-toast-content.cjs.map +1 -1
  272. package/dist/components/rewards/badge-unlock-toast-content.d.cts +0 -2
  273. package/dist/components/rewards/badge-unlock-toast-content.d.ts +0 -2
  274. package/dist/components/rewards/badge-unlock-toast-content.js.map +1 -1
  275. package/dist/components/rewards/journey-path.cjs.map +1 -1
  276. package/dist/components/rewards/journey-path.d.cts +0 -9
  277. package/dist/components/rewards/journey-path.d.ts +0 -9
  278. package/dist/components/rewards/journey-path.js.map +1 -1
  279. package/dist/components/rewards/leaderboard-table.cjs.map +1 -1
  280. package/dist/components/rewards/leaderboard-table.d.cts +0 -11
  281. package/dist/components/rewards/leaderboard-table.d.ts +0 -11
  282. package/dist/components/rewards/leaderboard-table.js.map +1 -1
  283. package/dist/components/rewards/level-badge.cjs.map +1 -1
  284. package/dist/components/rewards/level-badge.d.cts +0 -10
  285. package/dist/components/rewards/level-badge.d.ts +0 -10
  286. package/dist/components/rewards/level-badge.js.map +1 -1
  287. package/dist/components/rewards/level-journey-list.cjs.map +1 -1
  288. package/dist/components/rewards/level-journey-list.d.cts +0 -7
  289. package/dist/components/rewards/level-journey-list.d.ts +0 -7
  290. package/dist/components/rewards/level-journey-list.js.map +1 -1
  291. package/dist/components/rewards/level-up-celebration.cjs.map +1 -1
  292. package/dist/components/rewards/level-up-celebration.d.cts +0 -4
  293. package/dist/components/rewards/level-up-celebration.d.ts +0 -4
  294. package/dist/components/rewards/level-up-celebration.js.map +1 -1
  295. package/dist/components/rewards/reward-toast.cjs.map +1 -1
  296. package/dist/components/rewards/reward-toast.d.cts +0 -8
  297. package/dist/components/rewards/reward-toast.d.ts +0 -8
  298. package/dist/components/rewards/reward-toast.js.map +1 -1
  299. package/dist/components/rewards/score-summary-card.cjs.map +1 -1
  300. package/dist/components/rewards/score-summary-card.d.cts +0 -5
  301. package/dist/components/rewards/score-summary-card.d.ts +0 -5
  302. package/dist/components/rewards/score-summary-card.js.map +1 -1
  303. package/dist/components/rewards/use-rewards-celebrations.cjs.map +1 -1
  304. package/dist/components/rewards/use-rewards-celebrations.d.cts +0 -10
  305. package/dist/components/rewards/use-rewards-celebrations.d.ts +0 -10
  306. package/dist/components/rewards/use-rewards-celebrations.js.map +1 -1
  307. package/dist/components/rewards/xp-progress.cjs.map +1 -1
  308. package/dist/components/rewards/xp-progress.d.cts +0 -4
  309. package/dist/components/rewards/xp-progress.d.ts +0 -4
  310. package/dist/components/rewards/xp-progress.js.map +1 -1
  311. package/dist/components/rewards/xp-toast-content.cjs.map +1 -1
  312. package/dist/components/rewards/xp-toast-content.d.cts +0 -7
  313. package/dist/components/rewards/xp-toast-content.d.ts +0 -7
  314. package/dist/components/rewards/xp-toast-content.js.map +1 -1
  315. package/dist/components/scroll-section.cjs.map +1 -1
  316. package/dist/components/scroll-section.d.cts +0 -6
  317. package/dist/components/scroll-section.d.ts +0 -6
  318. package/dist/components/scroll-section.js.map +1 -1
  319. package/dist/components/service-form-shell.cjs.map +1 -1
  320. package/dist/components/service-form-shell.d.cts +0 -14
  321. package/dist/components/service-form-shell.d.ts +0 -14
  322. package/dist/components/service-form-shell.js.map +1 -1
  323. package/dist/components/service-header.cjs.map +1 -1
  324. package/dist/components/service-header.d.cts +0 -11
  325. package/dist/components/service-header.d.ts +0 -11
  326. package/dist/components/service-header.js.map +1 -1
  327. package/dist/components/share-button.cjs.map +1 -1
  328. package/dist/components/share-button.js.map +1 -1
  329. package/dist/components/stat-tile.cjs.map +1 -1
  330. package/dist/components/stat-tile.d.cts +0 -4
  331. package/dist/components/stat-tile.d.ts +0 -4
  332. package/dist/components/stat-tile.js.map +1 -1
  333. package/dist/components/step-nav.cjs.map +1 -1
  334. package/dist/components/step-nav.d.cts +0 -11
  335. package/dist/components/step-nav.d.ts +0 -11
  336. package/dist/components/step-nav.js.map +1 -1
  337. package/dist/components/theme-ambient-background.cjs.map +1 -1
  338. package/dist/components/theme-ambient-background.d.cts +0 -6
  339. package/dist/components/theme-ambient-background.d.ts +0 -6
  340. package/dist/components/theme-ambient-background.js.map +1 -1
  341. package/dist/components/token-card.cjs.map +1 -1
  342. package/dist/components/token-card.d.cts +0 -6
  343. package/dist/components/token-card.d.ts +0 -6
  344. package/dist/components/token-card.js.map +1 -1
  345. package/dist/components/token-glyph.cjs.map +1 -1
  346. package/dist/components/token-glyph.d.cts +0 -2
  347. package/dist/components/token-glyph.d.ts +0 -2
  348. package/dist/components/token-glyph.js.map +1 -1
  349. package/dist/data/brand.cjs.map +1 -1
  350. package/dist/data/brand.d.cts +0 -6
  351. package/dist/data/brand.d.ts +0 -6
  352. package/dist/data/brand.js.map +1 -1
  353. package/dist/data/coins.cjs.map +1 -1
  354. package/dist/data/coins.d.cts +0 -9
  355. package/dist/data/coins.d.ts +0 -9
  356. package/dist/data/coins.js.map +1 -1
  357. package/dist/data/ip-templates.cjs.map +1 -1
  358. package/dist/data/ip-templates.d.cts +0 -12
  359. package/dist/data/ip-templates.d.ts +0 -12
  360. package/dist/data/ip-templates.js.map +1 -1
  361. package/dist/data/ip-types.cjs.map +1 -1
  362. package/dist/data/ip-types.d.cts +0 -2
  363. package/dist/data/ip-types.d.ts +0 -2
  364. package/dist/data/ip-types.js.map +1 -1
  365. package/dist/data/ip.cjs.map +1 -1
  366. package/dist/data/ip.d.cts +0 -1
  367. package/dist/data/ip.d.ts +0 -1
  368. package/dist/data/ip.js.map +1 -1
  369. package/dist/data/launchpad-services.cjs +0 -10
  370. package/dist/data/launchpad-services.cjs.map +1 -1
  371. package/dist/data/launchpad-services.d.cts +0 -10
  372. package/dist/data/launchpad-services.d.ts +0 -10
  373. package/dist/data/launchpad-services.js +0 -10
  374. package/dist/data/launchpad-services.js.map +1 -1
  375. package/dist/data/living-render-collections.cjs +0 -2
  376. package/dist/data/living-render-collections.cjs.map +1 -1
  377. package/dist/data/living-render-collections.d.cts +0 -11
  378. package/dist/data/living-render-collections.d.ts +0 -11
  379. package/dist/data/living-render-collections.js +0 -2
  380. package/dist/data/living-render-collections.js.map +1 -1
  381. package/dist/data/notification.cjs.map +1 -1
  382. package/dist/data/notification.d.cts +0 -3
  383. package/dist/data/notification.d.ts +0 -3
  384. package/dist/index.cjs.map +1 -1
  385. package/dist/index.js.map +1 -1
  386. package/dist/preset/tailwind.cjs +0 -9
  387. package/dist/preset/tailwind.cjs.map +1 -1
  388. package/dist/preset/tailwind.js +0 -9
  389. package/dist/preset/tailwind.js.map +1 -1
  390. package/dist/utils/address.cjs.map +1 -1
  391. package/dist/utils/address.d.cts +0 -4
  392. package/dist/utils/address.d.ts +0 -4
  393. package/dist/utils/address.js.map +1 -1
  394. package/dist/utils/api-fetch.cjs.map +1 -1
  395. package/dist/utils/api-fetch.d.cts +0 -21
  396. package/dist/utils/api-fetch.d.ts +0 -21
  397. package/dist/utils/api-fetch.js.map +1 -1
  398. package/dist/utils/format.cjs.map +1 -1
  399. package/dist/utils/format.d.cts +0 -11
  400. package/dist/utils/format.d.ts +0 -11
  401. package/dist/utils/format.js.map +1 -1
  402. package/dist/utils/ipfs.cjs.map +1 -1
  403. package/dist/utils/ipfs.d.cts +0 -8
  404. package/dist/utils/ipfs.d.ts +0 -8
  405. package/dist/utils/ipfs.js.map +1 -1
  406. package/dist/utils/license-summary.cjs.map +1 -1
  407. package/dist/utils/license-summary.d.cts +0 -8
  408. package/dist/utils/license-summary.d.ts +0 -8
  409. package/dist/utils/license-summary.js.map +1 -1
  410. package/dist/utils/notification-storage.cjs.map +1 -1
  411. package/dist/utils/notification-storage.js.map +1 -1
  412. package/dist/utils/portfolio-counts.cjs.map +1 -1
  413. package/dist/utils/portfolio-counts.d.cts +0 -18
  414. package/dist/utils/portfolio-counts.d.ts +0 -18
  415. package/dist/utils/portfolio-counts.js.map +1 -1
  416. package/dist/utils/proxy-body.cjs.map +1 -1
  417. package/dist/utils/proxy-body.d.cts +0 -11
  418. package/dist/utils/proxy-body.d.ts +0 -11
  419. package/dist/utils/proxy-body.js.map +1 -1
  420. package/dist/utils/time.cjs.map +1 -1
  421. package/dist/utils/time.d.cts +0 -5
  422. package/dist/utils/time.d.ts +0 -5
  423. package/dist/utils/time.js.map +1 -1
  424. package/dist/utils/use-collections.cjs.map +1 -1
  425. package/dist/utils/use-collections.d.cts +1 -11
  426. package/dist/utils/use-collections.d.ts +1 -11
  427. package/dist/utils/use-collections.js.map +1 -1
  428. package/dist/utils/use-intersection-active.cjs.map +1 -1
  429. package/dist/utils/use-intersection-active.d.cts +0 -7
  430. package/dist/utils/use-intersection-active.d.ts +0 -7
  431. package/dist/utils/use-intersection-active.js.map +1 -1
  432. package/dist/utils/use-notifications.cjs.map +1 -1
  433. package/dist/utils/use-notifications.js.map +1 -1
  434. package/dist/utils/use-orders.cjs.map +1 -1
  435. package/dist/utils/use-orders.d.cts +0 -2
  436. package/dist/utils/use-orders.d.ts +0 -2
  437. package/dist/utils/use-orders.js.map +1 -1
  438. package/dist/utils/use-profiles.cjs.map +1 -1
  439. package/dist/utils/use-profiles.js.map +1 -1
  440. package/dist/utils/use-remix-offers.cjs.map +1 -1
  441. package/dist/utils/use-remix-offers.d.cts +0 -1
  442. package/dist/utils/use-remix-offers.d.ts +0 -1
  443. package/dist/utils/use-remix-offers.js.map +1 -1
  444. package/dist/utils/use-rewards.cjs.map +1 -1
  445. package/dist/utils/use-rewards.d.cts +0 -4
  446. package/dist/utils/use-rewards.d.ts +0 -4
  447. package/dist/utils/use-rewards.js.map +1 -1
  448. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/badge-unlock-toast-content.tsx"],"sourcesContent":["import { BadgeIcon } from \"./badge-shelf.js\";\nimport type { BadgeShelfBadge } from \"./badge-shelf.js\";\n\nexport interface BadgeUnlockToastContentProps {\n badge: BadgeShelfBadge;\n}\n\n/** Toast body for a newly-earned badge: icon, name, description — the\n * badge equivalent of XpToastContent. */\nexport function BadgeUnlockToastContent({ badge }: BadgeUnlockToastContentProps) {\n return (\n <div className=\"flex items-center gap-2.5\">\n <span\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border\"\n style={{ borderColor: `${badge.color}60`, backgroundColor: `${badge.color}18` }}\n >\n <BadgeIcon name={badge.icon} color={badge.color} className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">Badge earned · {badge.name}</p>\n <p className=\"text-xs text-muted-foreground truncate\">{badge.description}</p>\n </div>\n </div>\n );\n}\n"],"mappings":"AAgBQ,cAGA,YAHA;AAhBR,SAAS,iBAAiB;AASnB,SAAS,wBAAwB,EAAE,MAAM,GAAiC;AAC/E,SACE,qBAAC,SAAI,WAAU,6BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,aAAa,GAAG,MAAM,KAAK,MAAM,iBAAiB,GAAG,MAAM,KAAK,KAAK;AAAA,QAE9E,8BAAC,aAAU,MAAM,MAAM,MAAM,OAAO,MAAM,OAAO,WAAU,WAAU;AAAA;AAAA,IACvE;AAAA,IACA,qBAAC,SAAI,WAAU,WACb;AAAA,2BAAC,OAAE,WAAU,kCAAiC;AAAA;AAAA,QAAgB,MAAM;AAAA,SAAK;AAAA,MACzE,oBAAC,OAAE,WAAU,0CAA0C,gBAAM,aAAY;AAAA,OAC3E;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/badge-unlock-toast-content.tsx"],"sourcesContent":["import { BadgeIcon } from \"./badge-shelf.js\";\nimport type { BadgeShelfBadge } from \"./badge-shelf.js\";\n\nexport interface BadgeUnlockToastContentProps {\n badge: BadgeShelfBadge;\n}\n\nexport function BadgeUnlockToastContent({ badge }: BadgeUnlockToastContentProps) {\n return (\n <div className=\"flex items-center gap-2.5\">\n <span\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full border\"\n style={{ borderColor: `${badge.color}60`, backgroundColor: `${badge.color}18` }}\n >\n <BadgeIcon name={badge.icon} color={badge.color} className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold\">Badge earned · {badge.name}</p>\n <p className=\"text-xs text-muted-foreground truncate\">{badge.description}</p>\n </div>\n </div>\n );\n}\n"],"mappings":"AAcQ,cAGA,YAHA;AAdR,SAAS,iBAAiB;AAOnB,SAAS,wBAAwB,EAAE,MAAM,GAAiC;AAC/E,SACE,qBAAC,SAAI,WAAU,6BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,aAAa,GAAG,MAAM,KAAK,MAAM,iBAAiB,GAAG,MAAM,KAAK,KAAK;AAAA,QAE9E,8BAAC,aAAU,MAAM,MAAM,MAAM,OAAO,MAAM,OAAO,WAAU,WAAU;AAAA;AAAA,IACvE;AAAA,IACA,qBAAC,SAAI,WAAU,WACb;AAAA,2BAAC,OAAE,WAAU,kCAAiC;AAAA;AAAA,QAAgB,MAAM;AAAA,SAAK;AAAA,MACzE,oBAAC,OAAE,WAAU,0CAA0C,gBAAM,aAAY;AAAA,OAC3E;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/journey-path.tsx"],"sourcesContent":["import type { ElementType } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface JourneyStep {\n /** Matches a key in the rewards breakdown (e.g. \"mint_asset\"). */\n actionType: string;\n label: string;\n href: string;\n icon: ElementType;\n}\n\nexport interface JourneyPathProps {\n steps: JourneyStep[];\n /** The signed-in user's `rewards.breakdown` — a step is done when its\n * actionType key is present with a positive value. Pass `{}` (or omit)\n * for a signed-out visitor — every step renders upcoming. */\n breakdown?: Record<string, number>;\n className?: string;\n}\n\ntype StepState = \"done\" | \"current\" | \"upcoming\";\n\nfunction stateFor(step: JourneyStep, index: number, steps: JourneyStep[], breakdown: Record<string, number>): StepState {\n if ((breakdown[step.actionType] ?? 0) > 0) return \"done\";\n const firstNotDone = steps.findIndex((s) => (breakdown[s.actionType] ?? 0) <= 0);\n return index === firstNotDone ? \"current\" : \"upcoming\";\n}\n\n/** A permanent, ordered milestone path — no time window, no reset, no\n * comparison to other users. A step lights up the moment its action has\n * ever been done and stays lit forever; the first not-yet-done step is\n * highlighted as \"current\". Safe to render for a signed-out visitor\n * (`breakdown` omitted) — every step just renders upcoming, still linkable. */\nexport function JourneyPath({ steps, breakdown = {}, className }: JourneyPathProps) {\n return (\n <ol className={cn(\"flex flex-col gap-1\", className)}>\n {steps.map((step, i) => {\n const state = stateFor(step, i, steps, breakdown);\n const Icon = step.icon;\n return (\n <li key={step.actionType} className=\"relative flex items-center gap-3\">\n {i < steps.length - 1 && (\n <span\n aria-hidden\n className={cn(\n \"absolute left-[21px] top-11 h-[calc(100%-8px)] w-px\",\n state === \"done\" ? \"bg-brand-rose/50\" : \"bg-border\"\n )}\n />\n )}\n <a\n href={step.href}\n className={cn(\n \"flex min-h-11 min-w-11 shrink-0 items-center justify-center rounded-full border transition-colors\",\n state === \"done\" && \"border-brand-rose/40 bg-brand-rose/15 text-brand-rose\",\n state === \"current\" && \"border-brand-orange/60 bg-brand-orange/10 text-brand-orange\",\n state === \"upcoming\" && \"border-border text-muted-foreground/50\"\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </a>\n <a\n href={step.href}\n className={cn(\n \"flex-1 rounded-lg py-1.5 text-sm font-semibold transition-colors hover:text-foreground\",\n state === \"upcoming\" ? \"text-muted-foreground/60\" : \"text-foreground\"\n )}\n >\n {step.label}\n </a>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCU;AAvCV,gBAAmB;AAqBnB,SAAS,SAAS,MAAmB,OAAe,OAAsB,WAA8C;AACtH,OAAK,UAAU,KAAK,UAAU,KAAK,KAAK,EAAG,QAAO;AAClD,QAAM,eAAe,MAAM,UAAU,CAAC,OAAO,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC;AAC/E,SAAO,UAAU,eAAe,YAAY;AAC9C;AAOO,SAAS,YAAY,EAAE,OAAO,YAAY,CAAC,GAAG,UAAU,GAAqB;AAClF,SACE,4CAAC,QAAG,eAAW,cAAG,uBAAuB,SAAS,GAC/C,gBAAM,IAAI,CAAC,MAAM,MAAM;AACtB,UAAM,QAAQ,SAAS,MAAM,GAAG,OAAO,SAAS;AAChD,UAAM,OAAO,KAAK;AAClB,WACE,6CAAC,QAAyB,WAAU,oCACjC;AAAA,UAAI,MAAM,SAAS,KAClB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,eAAW;AAAA,YACT;AAAA,YACA,UAAU,SAAS,qBAAqB;AAAA,UAC1C;AAAA;AAAA,MACF;AAAA,MAEF;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,eAAW;AAAA,YACT;AAAA,YACA,UAAU,UAAU;AAAA,YACpB,UAAU,aAAa;AAAA,YACvB,UAAU,cAAc;AAAA,UAC1B;AAAA,UAEA,sDAAC,QAAK,WAAU,eAAc;AAAA;AAAA,MAChC;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,eAAW;AAAA,YACT;AAAA,YACA,UAAU,aAAa,6BAA6B;AAAA,UACtD;AAAA,UAEC,eAAK;AAAA;AAAA,MACR;AAAA,SA7BO,KAAK,UA8Bd;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/journey-path.tsx"],"sourcesContent":["import type { ElementType } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface JourneyStep {\n\n actionType: string;\n label: string;\n href: string;\n icon: ElementType;\n}\n\nexport interface JourneyPathProps {\n steps: JourneyStep[];\n\n breakdown?: Record<string, number>;\n className?: string;\n}\n\ntype StepState = \"done\" | \"current\" | \"upcoming\";\n\nfunction stateFor(step: JourneyStep, index: number, steps: JourneyStep[], breakdown: Record<string, number>): StepState {\n if ((breakdown[step.actionType] ?? 0) > 0) return \"done\";\n const firstNotDone = steps.findIndex((s) => (breakdown[s.actionType] ?? 0) <= 0);\n return index === firstNotDone ? \"current\" : \"upcoming\";\n}\n\nexport function JourneyPath({ steps, breakdown = {}, className }: JourneyPathProps) {\n return (\n <ol className={cn(\"flex flex-col gap-1\", className)}>\n {steps.map((step, i) => {\n const state = stateFor(step, i, steps, breakdown);\n const Icon = step.icon;\n return (\n <li key={step.actionType} className=\"relative flex items-center gap-3\">\n {i < steps.length - 1 && (\n <span\n aria-hidden\n className={cn(\n \"absolute left-[21px] top-11 h-[calc(100%-8px)] w-px\",\n state === \"done\" ? \"bg-brand-rose/50\" : \"bg-border\"\n )}\n />\n )}\n <a\n href={step.href}\n className={cn(\n \"flex min-h-11 min-w-11 shrink-0 items-center justify-center rounded-full border transition-colors\",\n state === \"done\" && \"border-brand-rose/40 bg-brand-rose/15 text-brand-rose\",\n state === \"current\" && \"border-brand-orange/60 bg-brand-orange/10 text-brand-orange\",\n state === \"upcoming\" && \"border-border text-muted-foreground/50\"\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </a>\n <a\n href={step.href}\n className={cn(\n \"flex-1 rounded-lg py-1.5 text-sm font-semibold transition-colors hover:text-foreground\",\n state === \"upcoming\" ? \"text-muted-foreground/60\" : \"text-foreground\"\n )}\n >\n {step.label}\n </a>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCU;AAhCV,gBAAmB;AAmBnB,SAAS,SAAS,MAAmB,OAAe,OAAsB,WAA8C;AACtH,OAAK,UAAU,KAAK,UAAU,KAAK,KAAK,EAAG,QAAO;AAClD,QAAM,eAAe,MAAM,UAAU,CAAC,OAAO,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC;AAC/E,SAAO,UAAU,eAAe,YAAY;AAC9C;AAEO,SAAS,YAAY,EAAE,OAAO,YAAY,CAAC,GAAG,UAAU,GAAqB;AAClF,SACE,4CAAC,QAAG,eAAW,cAAG,uBAAuB,SAAS,GAC/C,gBAAM,IAAI,CAAC,MAAM,MAAM;AACtB,UAAM,QAAQ,SAAS,MAAM,GAAG,OAAO,SAAS;AAChD,UAAM,OAAO,KAAK;AAClB,WACE,6CAAC,QAAyB,WAAU,oCACjC;AAAA,UAAI,MAAM,SAAS,KAClB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,eAAW;AAAA,YACT;AAAA,YACA,UAAU,SAAS,qBAAqB;AAAA,UAC1C;AAAA;AAAA,MACF;AAAA,MAEF;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,eAAW;AAAA,YACT;AAAA,YACA,UAAU,UAAU;AAAA,YACpB,UAAU,aAAa;AAAA,YACvB,UAAU,cAAc;AAAA,UAC1B;AAAA,UAEA,sDAAC,QAAK,WAAU,eAAc;AAAA;AAAA,MAChC;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,eAAW;AAAA,YACT;AAAA,YACA,UAAU,aAAa,6BAA6B;AAAA,UACtD;AAAA,UAEC,eAAK;AAAA;AAAA,MACR;AAAA,SA7BO,KAAK,UA8Bd;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -2,7 +2,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ElementType } from 'react';
3
3
 
4
4
  interface JourneyStep {
5
- /** Matches a key in the rewards breakdown (e.g. "mint_asset"). */
6
5
  actionType: string;
7
6
  label: string;
8
7
  href: string;
@@ -10,17 +9,9 @@ interface JourneyStep {
10
9
  }
11
10
  interface JourneyPathProps {
12
11
  steps: JourneyStep[];
13
- /** The signed-in user's `rewards.breakdown` — a step is done when its
14
- * actionType key is present with a positive value. Pass `{}` (or omit)
15
- * for a signed-out visitor — every step renders upcoming. */
16
12
  breakdown?: Record<string, number>;
17
13
  className?: string;
18
14
  }
19
- /** A permanent, ordered milestone path — no time window, no reset, no
20
- * comparison to other users. A step lights up the moment its action has
21
- * ever been done and stays lit forever; the first not-yet-done step is
22
- * highlighted as "current". Safe to render for a signed-out visitor
23
- * (`breakdown` omitted) — every step just renders upcoming, still linkable. */
24
15
  declare function JourneyPath({ steps, breakdown, className }: JourneyPathProps): react_jsx_runtime.JSX.Element;
25
16
 
26
17
  export { JourneyPath, type JourneyPathProps, type JourneyStep };
@@ -2,7 +2,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ElementType } from 'react';
3
3
 
4
4
  interface JourneyStep {
5
- /** Matches a key in the rewards breakdown (e.g. "mint_asset"). */
6
5
  actionType: string;
7
6
  label: string;
8
7
  href: string;
@@ -10,17 +9,9 @@ interface JourneyStep {
10
9
  }
11
10
  interface JourneyPathProps {
12
11
  steps: JourneyStep[];
13
- /** The signed-in user's `rewards.breakdown` — a step is done when its
14
- * actionType key is present with a positive value. Pass `{}` (or omit)
15
- * for a signed-out visitor — every step renders upcoming. */
16
12
  breakdown?: Record<string, number>;
17
13
  className?: string;
18
14
  }
19
- /** A permanent, ordered milestone path — no time window, no reset, no
20
- * comparison to other users. A step lights up the moment its action has
21
- * ever been done and stays lit forever; the first not-yet-done step is
22
- * highlighted as "current". Safe to render for a signed-out visitor
23
- * (`breakdown` omitted) — every step just renders upcoming, still linkable. */
24
15
  declare function JourneyPath({ steps, breakdown, className }: JourneyPathProps): react_jsx_runtime.JSX.Element;
25
16
 
26
17
  export { JourneyPath, type JourneyPathProps, type JourneyStep };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/journey-path.tsx"],"sourcesContent":["import type { ElementType } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface JourneyStep {\n /** Matches a key in the rewards breakdown (e.g. \"mint_asset\"). */\n actionType: string;\n label: string;\n href: string;\n icon: ElementType;\n}\n\nexport interface JourneyPathProps {\n steps: JourneyStep[];\n /** The signed-in user's `rewards.breakdown` — a step is done when its\n * actionType key is present with a positive value. Pass `{}` (or omit)\n * for a signed-out visitor — every step renders upcoming. */\n breakdown?: Record<string, number>;\n className?: string;\n}\n\ntype StepState = \"done\" | \"current\" | \"upcoming\";\n\nfunction stateFor(step: JourneyStep, index: number, steps: JourneyStep[], breakdown: Record<string, number>): StepState {\n if ((breakdown[step.actionType] ?? 0) > 0) return \"done\";\n const firstNotDone = steps.findIndex((s) => (breakdown[s.actionType] ?? 0) <= 0);\n return index === firstNotDone ? \"current\" : \"upcoming\";\n}\n\n/** A permanent, ordered milestone path — no time window, no reset, no\n * comparison to other users. A step lights up the moment its action has\n * ever been done and stays lit forever; the first not-yet-done step is\n * highlighted as \"current\". Safe to render for a signed-out visitor\n * (`breakdown` omitted) — every step just renders upcoming, still linkable. */\nexport function JourneyPath({ steps, breakdown = {}, className }: JourneyPathProps) {\n return (\n <ol className={cn(\"flex flex-col gap-1\", className)}>\n {steps.map((step, i) => {\n const state = stateFor(step, i, steps, breakdown);\n const Icon = step.icon;\n return (\n <li key={step.actionType} className=\"relative flex items-center gap-3\">\n {i < steps.length - 1 && (\n <span\n aria-hidden\n className={cn(\n \"absolute left-[21px] top-11 h-[calc(100%-8px)] w-px\",\n state === \"done\" ? \"bg-brand-rose/50\" : \"bg-border\"\n )}\n />\n )}\n <a\n href={step.href}\n className={cn(\n \"flex min-h-11 min-w-11 shrink-0 items-center justify-center rounded-full border transition-colors\",\n state === \"done\" && \"border-brand-rose/40 bg-brand-rose/15 text-brand-rose\",\n state === \"current\" && \"border-brand-orange/60 bg-brand-orange/10 text-brand-orange\",\n state === \"upcoming\" && \"border-border text-muted-foreground/50\"\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </a>\n <a\n href={step.href}\n className={cn(\n \"flex-1 rounded-lg py-1.5 text-sm font-semibold transition-colors hover:text-foreground\",\n state === \"upcoming\" ? \"text-muted-foreground/60\" : \"text-foreground\"\n )}\n >\n {step.label}\n </a>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":"AAwCU,SAEI,KAFJ;AAvCV,SAAS,UAAU;AAqBnB,SAAS,SAAS,MAAmB,OAAe,OAAsB,WAA8C;AACtH,OAAK,UAAU,KAAK,UAAU,KAAK,KAAK,EAAG,QAAO;AAClD,QAAM,eAAe,MAAM,UAAU,CAAC,OAAO,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC;AAC/E,SAAO,UAAU,eAAe,YAAY;AAC9C;AAOO,SAAS,YAAY,EAAE,OAAO,YAAY,CAAC,GAAG,UAAU,GAAqB;AAClF,SACE,oBAAC,QAAG,WAAW,GAAG,uBAAuB,SAAS,GAC/C,gBAAM,IAAI,CAAC,MAAM,MAAM;AACtB,UAAM,QAAQ,SAAS,MAAM,GAAG,OAAO,SAAS;AAChD,UAAM,OAAO,KAAK;AAClB,WACE,qBAAC,QAAyB,WAAU,oCACjC;AAAA,UAAI,MAAM,SAAS,KAClB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,UAAU,SAAS,qBAAqB;AAAA,UAC1C;AAAA;AAAA,MACF;AAAA,MAEF;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,UAAU,UAAU;AAAA,YACpB,UAAU,aAAa;AAAA,YACvB,UAAU,cAAc;AAAA,UAC1B;AAAA,UAEA,8BAAC,QAAK,WAAU,eAAc;AAAA;AAAA,MAChC;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,UAAU,aAAa,6BAA6B;AAAA,UACtD;AAAA,UAEC,eAAK;AAAA;AAAA,MACR;AAAA,SA7BO,KAAK,UA8Bd;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/journey-path.tsx"],"sourcesContent":["import type { ElementType } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface JourneyStep {\n\n actionType: string;\n label: string;\n href: string;\n icon: ElementType;\n}\n\nexport interface JourneyPathProps {\n steps: JourneyStep[];\n\n breakdown?: Record<string, number>;\n className?: string;\n}\n\ntype StepState = \"done\" | \"current\" | \"upcoming\";\n\nfunction stateFor(step: JourneyStep, index: number, steps: JourneyStep[], breakdown: Record<string, number>): StepState {\n if ((breakdown[step.actionType] ?? 0) > 0) return \"done\";\n const firstNotDone = steps.findIndex((s) => (breakdown[s.actionType] ?? 0) <= 0);\n return index === firstNotDone ? \"current\" : \"upcoming\";\n}\n\nexport function JourneyPath({ steps, breakdown = {}, className }: JourneyPathProps) {\n return (\n <ol className={cn(\"flex flex-col gap-1\", className)}>\n {steps.map((step, i) => {\n const state = stateFor(step, i, steps, breakdown);\n const Icon = step.icon;\n return (\n <li key={step.actionType} className=\"relative flex items-center gap-3\">\n {i < steps.length - 1 && (\n <span\n aria-hidden\n className={cn(\n \"absolute left-[21px] top-11 h-[calc(100%-8px)] w-px\",\n state === \"done\" ? \"bg-brand-rose/50\" : \"bg-border\"\n )}\n />\n )}\n <a\n href={step.href}\n className={cn(\n \"flex min-h-11 min-w-11 shrink-0 items-center justify-center rounded-full border transition-colors\",\n state === \"done\" && \"border-brand-rose/40 bg-brand-rose/15 text-brand-rose\",\n state === \"current\" && \"border-brand-orange/60 bg-brand-orange/10 text-brand-orange\",\n state === \"upcoming\" && \"border-border text-muted-foreground/50\"\n )}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n </a>\n <a\n href={step.href}\n className={cn(\n \"flex-1 rounded-lg py-1.5 text-sm font-semibold transition-colors hover:text-foreground\",\n state === \"upcoming\" ? \"text-muted-foreground/60\" : \"text-foreground\"\n )}\n >\n {step.label}\n </a>\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":"AAiCU,SAEI,KAFJ;AAhCV,SAAS,UAAU;AAmBnB,SAAS,SAAS,MAAmB,OAAe,OAAsB,WAA8C;AACtH,OAAK,UAAU,KAAK,UAAU,KAAK,KAAK,EAAG,QAAO;AAClD,QAAM,eAAe,MAAM,UAAU,CAAC,OAAO,UAAU,EAAE,UAAU,KAAK,MAAM,CAAC;AAC/E,SAAO,UAAU,eAAe,YAAY;AAC9C;AAEO,SAAS,YAAY,EAAE,OAAO,YAAY,CAAC,GAAG,UAAU,GAAqB;AAClF,SACE,oBAAC,QAAG,WAAW,GAAG,uBAAuB,SAAS,GAC/C,gBAAM,IAAI,CAAC,MAAM,MAAM;AACtB,UAAM,QAAQ,SAAS,MAAM,GAAG,OAAO,SAAS;AAChD,UAAM,OAAO,KAAK;AAClB,WACE,qBAAC,QAAyB,WAAU,oCACjC;AAAA,UAAI,MAAM,SAAS,KAClB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,UAAU,SAAS,qBAAqB;AAAA,UAC1C;AAAA;AAAA,MACF;AAAA,MAEF;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,UAAU,UAAU;AAAA,YACpB,UAAU,aAAa;AAAA,YACvB,UAAU,cAAc;AAAA,UAC1B;AAAA,UAEA,8BAAC,QAAK,WAAU,eAAc;AAAA;AAAA,MAChC;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,UAAU,aAAa,6BAA6B;AAAA,UACtD;AAAA,UAEC,eAAK;AAAA;AAAA,MACR;AAAA,SA7BO,KAAK,UA8Bd;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/leaderboard-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { shortenAddress } from \"../../utils/address.js\";\nimport { LevelBadge } from \"./level-badge.js\";\n\nexport interface LeaderboardEntryLike {\n /** Kept for API compatibility with the backend's ordered response — not\n * rendered. This is a scoreboard, not a ranking: no \"#1/#2/#3\", no podium\n * colors. Order in the array is still the sort order the caller gets. */\n rank: number;\n address: string;\n publicId?: string | null;\n totalXp: number;\n currentLevel: number;\n currentLevelName: string;\n badgeColor: string;\n}\n\nexport interface LeaderboardTableProps {\n entries: LeaderboardEntryLike[];\n /** The viewer's address — its row gets highlighted. */\n highlightAddress?: string | null;\n /** Render the address cell (e.g. a profile link). Defaults to a shortened address. */\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\n/** Scoreboard rows: address, level chip, points. No position number or\n * podium coloring — this celebrates participation, not competition.\n * Each row is its own rounded tile with real padding, not a bordered\n * list with hairline dividers. */\nexport function LeaderboardTable({ entries, highlightAddress, renderAddress, className }: LeaderboardTableProps) {\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div\n key={e.address}\n className={cn(\n \"flex items-center gap-4 rounded-2xl px-4 py-3.5 transition-colors\",\n isViewer ? \"bg-brand-rose/10\" : \"bg-foreground/[0.04] hover:bg-foreground/[0.07]\"\n )}\n >\n <span className=\"min-w-0 flex-1 truncate text-base font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-lg font-black tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-bold text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface LeaderboardWidgetProps {\n entries: LeaderboardEntryLike[];\n title?: string;\n /** Link to the full scoreboard (\"/rewards\"). */\n href?: string;\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\n/** Compact card for homepage/discover rails — same no-ranking scoreboard rows. */\nexport function LeaderboardWidget({ entries, title = \"Community Rewards\", href, renderAddress, className }: LeaderboardWidgetProps) {\n if (entries.length === 0) return null;\n return (\n <section className={cn(\"rounded-2xl bg-foreground/[0.04] p-5\", className)}>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-lg font-black\">{title}</h2>\n {href && (\n <a href={href} className=\"text-xs font-bold text-foreground/50 hover:text-foreground active:opacity-70\">\n View scoreboard →\n </a>\n )}\n </div>\n <ol className=\"space-y-2.5\">\n {entries.map((e) => (\n <li key={e.address} className=\"flex items-center gap-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4CY;AA3CZ,gBAAmB;AACnB,qBAA+B;AAC/B,yBAA2B;AA4BpB,SAAS,iBAAiB,EAAE,SAAS,kBAAkB,eAAe,UAAU,GAA0B;AAC/G,SACE,4CAAC,SAAI,eAAW,cAAG,eAAe,SAAS,GACxC,kBAAQ,IAAI,CAAC,MAAM;AAClB,UAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,eAAW;AAAA,UACT;AAAA,UACA,WAAW,qBAAqB;AAAA,QAClC;AAAA,QAEA;AAAA,uDAAC,UAAK,WAAU,+CACb;AAAA,4BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO;AAAA,YACnE,YAAY,4CAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,aACpF;AAAA,UACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,UACnI,6CAAC,UAAK,WAAU,4CACb;AAAA,cAAE,QAAQ,eAAe;AAAA,YAC1B,4CAAC,UAAK,WAAU,6CAA4C,gBAAE;AAAA,aAChE;AAAA;AAAA;AAAA,MAdK,EAAE;AAAA,IAeT;AAAA,EAEJ,CAAC,GACH;AAEJ;AAYO,SAAS,kBAAkB,EAAE,SAAS,QAAQ,qBAAqB,MAAM,eAAe,UAAU,GAA2B;AAClI,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,6CAAC,aAAQ,eAAW,cAAG,wCAAwC,SAAS,GACtE;AAAA,iDAAC,SAAI,WAAU,0CACb;AAAA,kDAAC,QAAG,WAAU,sBAAsB,iBAAM;AAAA,MACzC,QACC,4CAAC,OAAE,MAAY,WAAU,gFAA+E,oCAExG;AAAA,OAEJ;AAAA,IACA,4CAAC,QAAG,WAAU,eACX,kBAAQ,IAAI,CAAC,MACZ,6CAAC,QAAmB,WAAU,6BAC5B;AAAA,kDAAC,UAAK,WAAU,6CACb,0BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO,GACtE;AAAA,MACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK;AAAA,SAJ1F,EAAE,OAKX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/leaderboard-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { shortenAddress } from \"../../utils/address.js\";\nimport { LevelBadge } from \"./level-badge.js\";\n\nexport interface LeaderboardEntryLike {\n\n rank: number;\n address: string;\n publicId?: string | null;\n totalXp: number;\n currentLevel: number;\n currentLevelName: string;\n badgeColor: string;\n}\n\nexport interface LeaderboardTableProps {\n entries: LeaderboardEntryLike[];\n\n highlightAddress?: string | null;\n\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\nexport function LeaderboardTable({ entries, highlightAddress, renderAddress, className }: LeaderboardTableProps) {\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div\n key={e.address}\n className={cn(\n \"flex items-center gap-4 rounded-2xl px-4 py-3.5 transition-colors\",\n isViewer ? \"bg-brand-rose/10\" : \"bg-foreground/[0.04] hover:bg-foreground/[0.07]\"\n )}\n >\n <span className=\"min-w-0 flex-1 truncate text-base font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-lg font-black tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-bold text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface LeaderboardWidgetProps {\n entries: LeaderboardEntryLike[];\n title?: string;\n\n href?: string;\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\nexport function LeaderboardWidget({ entries, title = \"Community Rewards\", href, renderAddress, className }: LeaderboardWidgetProps) {\n if (entries.length === 0) return null;\n return (\n <section className={cn(\"rounded-2xl bg-foreground/[0.04] p-5\", className)}>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-lg font-black\">{title}</h2>\n {href && (\n <a href={href} className=\"text-xs font-bold text-foreground/50 hover:text-foreground active:opacity-70\">\n View scoreboard →\n </a>\n )}\n </div>\n <ol className=\"space-y-2.5\">\n {entries.map((e) => (\n <li key={e.address} className=\"flex items-center gap-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCY;AArCZ,gBAAmB;AACnB,qBAA+B;AAC/B,yBAA2B;AAsBpB,SAAS,iBAAiB,EAAE,SAAS,kBAAkB,eAAe,UAAU,GAA0B;AAC/G,SACE,4CAAC,SAAI,eAAW,cAAG,eAAe,SAAS,GACxC,kBAAQ,IAAI,CAAC,MAAM;AAClB,UAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,eAAW;AAAA,UACT;AAAA,UACA,WAAW,qBAAqB;AAAA,QAClC;AAAA,QAEA;AAAA,uDAAC,UAAK,WAAU,+CACb;AAAA,4BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO;AAAA,YACnE,YAAY,4CAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,aACpF;AAAA,UACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,UACnI,6CAAC,UAAK,WAAU,4CACb;AAAA,cAAE,QAAQ,eAAe;AAAA,YAC1B,4CAAC,UAAK,WAAU,6CAA4C,gBAAE;AAAA,aAChE;AAAA;AAAA;AAAA,MAdK,EAAE;AAAA,IAeT;AAAA,EAEJ,CAAC,GACH;AAEJ;AAWO,SAAS,kBAAkB,EAAE,SAAS,QAAQ,qBAAqB,MAAM,eAAe,UAAU,GAA2B;AAClI,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,6CAAC,aAAQ,eAAW,cAAG,wCAAwC,SAAS,GACtE;AAAA,iDAAC,SAAI,WAAU,0CACb;AAAA,kDAAC,QAAG,WAAU,sBAAsB,iBAAM;AAAA,MACzC,QACC,4CAAC,OAAE,MAAY,WAAU,gFAA+E,oCAExG;AAAA,OAEJ;AAAA,IACA,4CAAC,QAAG,WAAU,eACX,kBAAQ,IAAI,CAAC,MACZ,6CAAC,QAAmB,WAAU,6BAC5B;AAAA,kDAAC,UAAK,WAAU,6CACb,0BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO,GACtE;AAAA,MACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK;AAAA,SAJ1F,EAAE,OAKX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -2,9 +2,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
 
4
4
  interface LeaderboardEntryLike {
5
- /** Kept for API compatibility with the backend's ordered response — not
6
- * rendered. This is a scoreboard, not a ranking: no "#1/#2/#3", no podium
7
- * colors. Order in the array is still the sort order the caller gets. */
8
5
  rank: number;
9
6
  address: string;
10
7
  publicId?: string | null;
@@ -15,26 +12,18 @@ interface LeaderboardEntryLike {
15
12
  }
16
13
  interface LeaderboardTableProps {
17
14
  entries: LeaderboardEntryLike[];
18
- /** The viewer's address — its row gets highlighted. */
19
15
  highlightAddress?: string | null;
20
- /** Render the address cell (e.g. a profile link). Defaults to a shortened address. */
21
16
  renderAddress?: (address: string) => ReactNode;
22
17
  className?: string;
23
18
  }
24
- /** Scoreboard rows: address, level chip, points. No position number or
25
- * podium coloring — this celebrates participation, not competition.
26
- * Each row is its own rounded tile with real padding, not a bordered
27
- * list with hairline dividers. */
28
19
  declare function LeaderboardTable({ entries, highlightAddress, renderAddress, className }: LeaderboardTableProps): react_jsx_runtime.JSX.Element;
29
20
  interface LeaderboardWidgetProps {
30
21
  entries: LeaderboardEntryLike[];
31
22
  title?: string;
32
- /** Link to the full scoreboard ("/rewards"). */
33
23
  href?: string;
34
24
  renderAddress?: (address: string) => ReactNode;
35
25
  className?: string;
36
26
  }
37
- /** Compact card for homepage/discover rails — same no-ranking scoreboard rows. */
38
27
  declare function LeaderboardWidget({ entries, title, href, renderAddress, className }: LeaderboardWidgetProps): react_jsx_runtime.JSX.Element | null;
39
28
 
40
29
  export { type LeaderboardEntryLike, LeaderboardTable, type LeaderboardTableProps, LeaderboardWidget, type LeaderboardWidgetProps };
@@ -2,9 +2,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
 
4
4
  interface LeaderboardEntryLike {
5
- /** Kept for API compatibility with the backend's ordered response — not
6
- * rendered. This is a scoreboard, not a ranking: no "#1/#2/#3", no podium
7
- * colors. Order in the array is still the sort order the caller gets. */
8
5
  rank: number;
9
6
  address: string;
10
7
  publicId?: string | null;
@@ -15,26 +12,18 @@ interface LeaderboardEntryLike {
15
12
  }
16
13
  interface LeaderboardTableProps {
17
14
  entries: LeaderboardEntryLike[];
18
- /** The viewer's address — its row gets highlighted. */
19
15
  highlightAddress?: string | null;
20
- /** Render the address cell (e.g. a profile link). Defaults to a shortened address. */
21
16
  renderAddress?: (address: string) => ReactNode;
22
17
  className?: string;
23
18
  }
24
- /** Scoreboard rows: address, level chip, points. No position number or
25
- * podium coloring — this celebrates participation, not competition.
26
- * Each row is its own rounded tile with real padding, not a bordered
27
- * list with hairline dividers. */
28
19
  declare function LeaderboardTable({ entries, highlightAddress, renderAddress, className }: LeaderboardTableProps): react_jsx_runtime.JSX.Element;
29
20
  interface LeaderboardWidgetProps {
30
21
  entries: LeaderboardEntryLike[];
31
22
  title?: string;
32
- /** Link to the full scoreboard ("/rewards"). */
33
23
  href?: string;
34
24
  renderAddress?: (address: string) => ReactNode;
35
25
  className?: string;
36
26
  }
37
- /** Compact card for homepage/discover rails — same no-ranking scoreboard rows. */
38
27
  declare function LeaderboardWidget({ entries, title, href, renderAddress, className }: LeaderboardWidgetProps): react_jsx_runtime.JSX.Element | null;
39
28
 
40
29
  export { type LeaderboardEntryLike, LeaderboardTable, type LeaderboardTableProps, LeaderboardWidget, type LeaderboardWidgetProps };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/leaderboard-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { shortenAddress } from \"../../utils/address.js\";\nimport { LevelBadge } from \"./level-badge.js\";\n\nexport interface LeaderboardEntryLike {\n /** Kept for API compatibility with the backend's ordered response — not\n * rendered. This is a scoreboard, not a ranking: no \"#1/#2/#3\", no podium\n * colors. Order in the array is still the sort order the caller gets. */\n rank: number;\n address: string;\n publicId?: string | null;\n totalXp: number;\n currentLevel: number;\n currentLevelName: string;\n badgeColor: string;\n}\n\nexport interface LeaderboardTableProps {\n entries: LeaderboardEntryLike[];\n /** The viewer's address — its row gets highlighted. */\n highlightAddress?: string | null;\n /** Render the address cell (e.g. a profile link). Defaults to a shortened address. */\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\n/** Scoreboard rows: address, level chip, points. No position number or\n * podium coloring — this celebrates participation, not competition.\n * Each row is its own rounded tile with real padding, not a bordered\n * list with hairline dividers. */\nexport function LeaderboardTable({ entries, highlightAddress, renderAddress, className }: LeaderboardTableProps) {\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div\n key={e.address}\n className={cn(\n \"flex items-center gap-4 rounded-2xl px-4 py-3.5 transition-colors\",\n isViewer ? \"bg-brand-rose/10\" : \"bg-foreground/[0.04] hover:bg-foreground/[0.07]\"\n )}\n >\n <span className=\"min-w-0 flex-1 truncate text-base font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-lg font-black tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-bold text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface LeaderboardWidgetProps {\n entries: LeaderboardEntryLike[];\n title?: string;\n /** Link to the full scoreboard (\"/rewards\"). */\n href?: string;\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\n/** Compact card for homepage/discover rails — same no-ranking scoreboard rows. */\nexport function LeaderboardWidget({ entries, title = \"Community Rewards\", href, renderAddress, className }: LeaderboardWidgetProps) {\n if (entries.length === 0) return null;\n return (\n <section className={cn(\"rounded-2xl bg-foreground/[0.04] p-5\", className)}>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-lg font-black\">{title}</h2>\n {href && (\n <a href={href} className=\"text-xs font-bold text-foreground/50 hover:text-foreground active:opacity-70\">\n View scoreboard →\n </a>\n )}\n </div>\n <ol className=\"space-y-2.5\">\n {entries.map((e) => (\n <li key={e.address} className=\"flex items-center gap-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n"],"mappings":"AA4CY,SAEe,KAFf;AA3CZ,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AA4BpB,SAAS,iBAAiB,EAAE,SAAS,kBAAkB,eAAe,UAAU,GAA0B;AAC/G,SACE,oBAAC,SAAI,WAAW,GAAG,eAAe,SAAS,GACxC,kBAAQ,IAAI,CAAC,MAAM;AAClB,UAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,qBAAqB;AAAA,QAClC;AAAA,QAEA;AAAA,+BAAC,UAAK,WAAU,+CACb;AAAA,4BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO;AAAA,YACnE,YAAY,oBAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,aACpF;AAAA,UACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,UACnI,qBAAC,UAAK,WAAU,4CACb;AAAA,cAAE,QAAQ,eAAe;AAAA,YAC1B,oBAAC,UAAK,WAAU,6CAA4C,gBAAE;AAAA,aAChE;AAAA;AAAA;AAAA,MAdK,EAAE;AAAA,IAeT;AAAA,EAEJ,CAAC,GACH;AAEJ;AAYO,SAAS,kBAAkB,EAAE,SAAS,QAAQ,qBAAqB,MAAM,eAAe,UAAU,GAA2B;AAClI,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,qBAAC,aAAQ,WAAW,GAAG,wCAAwC,SAAS,GACtE;AAAA,yBAAC,SAAI,WAAU,0CACb;AAAA,0BAAC,QAAG,WAAU,sBAAsB,iBAAM;AAAA,MACzC,QACC,oBAAC,OAAE,MAAY,WAAU,gFAA+E,oCAExG;AAAA,OAEJ;AAAA,IACA,oBAAC,QAAG,WAAU,eACX,kBAAQ,IAAI,CAAC,MACZ,qBAAC,QAAmB,WAAU,6BAC5B;AAAA,0BAAC,UAAK,WAAU,6CACb,0BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,GACtE;AAAA,MACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK;AAAA,SAJ1F,EAAE,OAKX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/leaderboard-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { shortenAddress } from \"../../utils/address.js\";\nimport { LevelBadge } from \"./level-badge.js\";\n\nexport interface LeaderboardEntryLike {\n\n rank: number;\n address: string;\n publicId?: string | null;\n totalXp: number;\n currentLevel: number;\n currentLevelName: string;\n badgeColor: string;\n}\n\nexport interface LeaderboardTableProps {\n entries: LeaderboardEntryLike[];\n\n highlightAddress?: string | null;\n\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\nexport function LeaderboardTable({ entries, highlightAddress, renderAddress, className }: LeaderboardTableProps) {\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div\n key={e.address}\n className={cn(\n \"flex items-center gap-4 rounded-2xl px-4 py-3.5 transition-colors\",\n isViewer ? \"bg-brand-rose/10\" : \"bg-foreground/[0.04] hover:bg-foreground/[0.07]\"\n )}\n >\n <span className=\"min-w-0 flex-1 truncate text-base font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-lg font-black tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-bold text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface LeaderboardWidgetProps {\n entries: LeaderboardEntryLike[];\n title?: string;\n\n href?: string;\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\nexport function LeaderboardWidget({ entries, title = \"Community Rewards\", href, renderAddress, className }: LeaderboardWidgetProps) {\n if (entries.length === 0) return null;\n return (\n <section className={cn(\"rounded-2xl bg-foreground/[0.04] p-5\", className)}>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-lg font-black\">{title}</h2>\n {href && (\n <a href={href} className=\"text-xs font-bold text-foreground/50 hover:text-foreground active:opacity-70\">\n View scoreboard →\n </a>\n )}\n </div>\n <ol className=\"space-y-2.5\">\n {entries.map((e) => (\n <li key={e.address} className=\"flex items-center gap-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n"],"mappings":"AAsCY,SAEe,KAFf;AArCZ,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAsBpB,SAAS,iBAAiB,EAAE,SAAS,kBAAkB,eAAe,UAAU,GAA0B;AAC/G,SACE,oBAAC,SAAI,WAAW,GAAG,eAAe,SAAS,GACxC,kBAAQ,IAAI,CAAC,MAAM;AAClB,UAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,qBAAqB;AAAA,QAClC;AAAA,QAEA;AAAA,+BAAC,UAAK,WAAU,+CACb;AAAA,4BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO;AAAA,YACnE,YAAY,oBAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,aACpF;AAAA,UACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,UACnI,qBAAC,UAAK,WAAU,4CACb;AAAA,cAAE,QAAQ,eAAe;AAAA,YAC1B,oBAAC,UAAK,WAAU,6CAA4C,gBAAE;AAAA,aAChE;AAAA;AAAA;AAAA,MAdK,EAAE;AAAA,IAeT;AAAA,EAEJ,CAAC,GACH;AAEJ;AAWO,SAAS,kBAAkB,EAAE,SAAS,QAAQ,qBAAqB,MAAM,eAAe,UAAU,GAA2B;AAClI,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,qBAAC,aAAQ,WAAW,GAAG,wCAAwC,SAAS,GACtE;AAAA,yBAAC,SAAI,WAAU,0CACb;AAAA,0BAAC,QAAG,WAAU,sBAAsB,iBAAM;AAAA,MACzC,QACC,oBAAC,OAAE,MAAY,WAAU,gFAA+E,oCAExG;AAAA,OAEJ;AAAA,IACA,oBAAC,QAAG,WAAU,eACX,kBAAQ,IAAI,CAAC,MACZ,qBAAC,QAAmB,WAAU,6BAC5B;AAAA,0BAAC,UAAK,WAAU,6CACb,0BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,GACtE;AAAA,MACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK;AAAA,SAJ1F,EAAE,OAKX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/level-badge.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface LevelBadgeProps {\n level: number;\n name: string;\n /** Kept for interface consistency with other rewards components that do\n * use per-level color (XpProgress, LevelUpCelebration, JourneyPath) —\n * this component intentionally ignores it in favor of one signature\n * brand gradient across every level, not 20+ flat per-level colors. */\n badgeColor: string;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\n/** Level chip — shows the level's title only (\"Voyager\"), not the raw\n * number (\"Lv.6 Voyager\" read as UI noise). The level is still available\n * on hover via the native title tooltip. One signature orange->maeve\n * gradient fill, white text — vivid and consistent regardless of level,\n * rather than a washed-out per-level tint. Pure presentation — the\n * consuming app supplies level data from the rewards API. */\nexport function LevelBadge({ level, name, size = \"md\", className }: LevelBadgeProps) {\n const sizeClasses = {\n sm: \"h-5 px-2.5 text-2xs\",\n md: \"h-6 px-3 text-xs\",\n lg: \"h-8 px-4 text-sm\",\n };\n\n return (\n <span\n title={`Level ${level}`}\n className={cn(\n \"inline-flex items-center rounded-full font-bold tracking-tight whitespace-nowrap text-white bg-gradient-to-r from-brand-orange to-brand-maeve\",\n sizeClasses[size],\n className\n )}\n >\n {name}\n </span>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BI;AA5BJ,gBAAmB;AAoBZ,SAAS,WAAW,EAAE,OAAO,MAAM,OAAO,MAAM,UAAU,GAAoB;AACnF,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,SAAS,KAAK;AAAA,MACrB,eAAW;AAAA,QACT;AAAA,QACA,YAAY,IAAI;AAAA,QAChB;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/level-badge.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface LevelBadgeProps {\n level: number;\n name: string;\n\n badgeColor: string;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport function LevelBadge({ level, name, size = \"md\", className }: LevelBadgeProps) {\n const sizeClasses = {\n sm: \"h-5 px-2.5 text-2xs\",\n md: \"h-6 px-3 text-xs\",\n lg: \"h-8 px-4 text-sm\",\n };\n\n return (\n <span\n title={`Level ${level}`}\n className={cn(\n \"inline-flex items-center rounded-full font-bold tracking-tight whitespace-nowrap text-white bg-gradient-to-r from-brand-orange to-brand-maeve\",\n sizeClasses[size],\n className\n )}\n >\n {name}\n </span>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBI;AAnBJ,gBAAmB;AAWZ,SAAS,WAAW,EAAE,OAAO,MAAM,OAAO,MAAM,UAAU,GAAoB;AACnF,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,SAAS,KAAK;AAAA,MACrB,eAAW;AAAA,QACT;AAAA,QACA,YAAY,IAAI;AAAA,QAChB;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -3,20 +3,10 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  interface LevelBadgeProps {
4
4
  level: number;
5
5
  name: string;
6
- /** Kept for interface consistency with other rewards components that do
7
- * use per-level color (XpProgress, LevelUpCelebration, JourneyPath) —
8
- * this component intentionally ignores it in favor of one signature
9
- * brand gradient across every level, not 20+ flat per-level colors. */
10
6
  badgeColor: string;
11
7
  size?: "sm" | "md" | "lg";
12
8
  className?: string;
13
9
  }
14
- /** Level chip — shows the level's title only ("Voyager"), not the raw
15
- * number ("Lv.6 Voyager" read as UI noise). The level is still available
16
- * on hover via the native title tooltip. One signature orange->maeve
17
- * gradient fill, white text — vivid and consistent regardless of level,
18
- * rather than a washed-out per-level tint. Pure presentation — the
19
- * consuming app supplies level data from the rewards API. */
20
10
  declare function LevelBadge({ level, name, size, className }: LevelBadgeProps): react_jsx_runtime.JSX.Element;
21
11
 
22
12
  export { LevelBadge, type LevelBadgeProps };
@@ -3,20 +3,10 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  interface LevelBadgeProps {
4
4
  level: number;
5
5
  name: string;
6
- /** Kept for interface consistency with other rewards components that do
7
- * use per-level color (XpProgress, LevelUpCelebration, JourneyPath) —
8
- * this component intentionally ignores it in favor of one signature
9
- * brand gradient across every level, not 20+ flat per-level colors. */
10
6
  badgeColor: string;
11
7
  size?: "sm" | "md" | "lg";
12
8
  className?: string;
13
9
  }
14
- /** Level chip — shows the level's title only ("Voyager"), not the raw
15
- * number ("Lv.6 Voyager" read as UI noise). The level is still available
16
- * on hover via the native title tooltip. One signature orange->maeve
17
- * gradient fill, white text — vivid and consistent regardless of level,
18
- * rather than a washed-out per-level tint. Pure presentation — the
19
- * consuming app supplies level data from the rewards API. */
20
10
  declare function LevelBadge({ level, name, size, className }: LevelBadgeProps): react_jsx_runtime.JSX.Element;
21
11
 
22
12
  export { LevelBadge, type LevelBadgeProps };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/level-badge.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface LevelBadgeProps {\n level: number;\n name: string;\n /** Kept for interface consistency with other rewards components that do\n * use per-level color (XpProgress, LevelUpCelebration, JourneyPath) —\n * this component intentionally ignores it in favor of one signature\n * brand gradient across every level, not 20+ flat per-level colors. */\n badgeColor: string;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\n/** Level chip — shows the level's title only (\"Voyager\"), not the raw\n * number (\"Lv.6 Voyager\" read as UI noise). The level is still available\n * on hover via the native title tooltip. One signature orange->maeve\n * gradient fill, white text — vivid and consistent regardless of level,\n * rather than a washed-out per-level tint. Pure presentation — the\n * consuming app supplies level data from the rewards API. */\nexport function LevelBadge({ level, name, size = \"md\", className }: LevelBadgeProps) {\n const sizeClasses = {\n sm: \"h-5 px-2.5 text-2xs\",\n md: \"h-6 px-3 text-xs\",\n lg: \"h-8 px-4 text-sm\",\n };\n\n return (\n <span\n title={`Level ${level}`}\n className={cn(\n \"inline-flex items-center rounded-full font-bold tracking-tight whitespace-nowrap text-white bg-gradient-to-r from-brand-orange to-brand-maeve\",\n sizeClasses[size],\n className\n )}\n >\n {name}\n </span>\n );\n}\n"],"mappings":"AA4BI;AA5BJ,SAAS,UAAU;AAoBZ,SAAS,WAAW,EAAE,OAAO,MAAM,OAAO,MAAM,UAAU,GAAoB;AACnF,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,SAAS,KAAK;AAAA,MACrB,WAAW;AAAA,QACT;AAAA,QACA,YAAY,IAAI;AAAA,QAChB;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/level-badge.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface LevelBadgeProps {\n level: number;\n name: string;\n\n badgeColor: string;\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport function LevelBadge({ level, name, size = \"md\", className }: LevelBadgeProps) {\n const sizeClasses = {\n sm: \"h-5 px-2.5 text-2xs\",\n md: \"h-6 px-3 text-xs\",\n lg: \"h-8 px-4 text-sm\",\n };\n\n return (\n <span\n title={`Level ${level}`}\n className={cn(\n \"inline-flex items-center rounded-full font-bold tracking-tight whitespace-nowrap text-white bg-gradient-to-r from-brand-orange to-brand-maeve\",\n sizeClasses[size],\n className\n )}\n >\n {name}\n </span>\n );\n}\n"],"mappings":"AAmBI;AAnBJ,SAAS,UAAU;AAWZ,SAAS,WAAW,EAAE,OAAO,MAAM,OAAO,MAAM,UAAU,GAAoB;AACnF,QAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,SAAS,KAAK;AAAA,MACrB,WAAW;AAAA,QACT;AAAA,QACA,YAAY,IAAI;AAAA,QAChB;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/level-journey-list.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface LevelJourneyListLevel {\n level: number;\n name: string;\n xpRequired: number;\n description: string | null;\n}\n\nexport interface LevelJourneyListProps {\n levels: LevelJourneyListLevel[];\n className?: string;\n}\n\n/** The full level ladder as a vertical showcase list — not the old\n * horizontal chip rail, which doesn't scale past a handful of items and\n * was built for a dashboard strip, not a 50-row standalone page. No\n * current-level state: this is the system-wide view, not \"where am I.\"\n * Every 10th level gets a small gradient marker as a milestone cue;\n * colors are otherwise uniform (one signature identity, not 50 flat\n * per-level colors) — badgeColor is deliberately not consumed here. */\nexport function LevelJourneyList({ levels, className }: LevelJourneyListProps) {\n return (\n <ol className={cn(\"divide-y divide-foreground/[0.06]\", className)}>\n {levels.map((l, i) => (\n <li key={l.level} className=\"flex items-start gap-4 py-4\">\n <span className=\"flex items-center gap-1.5 w-8 shrink-0 pt-0.5\">\n <span className=\"text-xs font-bold text-foreground/30 tabular-nums\">{l.level}</span>\n {(i + 1) % 10 === 0 && (\n <span\n aria-hidden\n className=\"h-1.5 w-1.5 rounded-full bg-gradient-to-r from-brand-orange to-brand-maeve\"\n />\n )}\n </span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-base font-bold\">{l.name}</p>\n {l.description && (\n <p className=\"text-sm text-foreground/60 mt-0.5 leading-relaxed\">{l.description}</p>\n )}\n </div>\n <span className=\"text-sm font-black tabular-nums text-foreground/70 shrink-0\">\n {l.xpRequired.toLocaleString()} XP\n </span>\n </li>\n ))}\n </ol>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BU;AA1BV,gBAAmB;AAqBZ,SAAS,iBAAiB,EAAE,QAAQ,UAAU,GAA0B;AAC7E,SACE,4CAAC,QAAG,eAAW,cAAG,qCAAqC,SAAS,GAC7D,iBAAO,IAAI,CAAC,GAAG,MACd,6CAAC,QAAiB,WAAU,+BAC1B;AAAA,iDAAC,UAAK,WAAU,iDACd;AAAA,kDAAC,UAAK,WAAU,qDAAqD,YAAE,OAAM;AAAA,OAC3E,IAAI,KAAK,OAAO,KAChB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,WAAU;AAAA;AAAA,MACZ;AAAA,OAEJ;AAAA,IACA,6CAAC,SAAI,WAAU,kBACb;AAAA,kDAAC,OAAE,WAAU,uBAAuB,YAAE,MAAK;AAAA,MAC1C,EAAE,eACD,4CAAC,OAAE,WAAU,qDAAqD,YAAE,aAAY;AAAA,OAEpF;AAAA,IACA,6CAAC,UAAK,WAAU,+DACb;AAAA,QAAE,WAAW,eAAe;AAAA,MAAE;AAAA,OACjC;AAAA,OAlBO,EAAE,KAmBX,CACD,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/level-journey-list.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface LevelJourneyListLevel {\n level: number;\n name: string;\n xpRequired: number;\n description: string | null;\n}\n\nexport interface LevelJourneyListProps {\n levels: LevelJourneyListLevel[];\n className?: string;\n}\n\nexport function LevelJourneyList({ levels, className }: LevelJourneyListProps) {\n return (\n <ol className={cn(\"divide-y divide-foreground/[0.06]\", className)}>\n {levels.map((l, i) => (\n <li key={l.level} className=\"flex items-start gap-4 py-4\">\n <span className=\"flex items-center gap-1.5 w-8 shrink-0 pt-0.5\">\n <span className=\"text-xs font-bold text-foreground/30 tabular-nums\">{l.level}</span>\n {(i + 1) % 10 === 0 && (\n <span\n aria-hidden\n className=\"h-1.5 w-1.5 rounded-full bg-gradient-to-r from-brand-orange to-brand-maeve\"\n />\n )}\n </span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-base font-bold\">{l.name}</p>\n {l.description && (\n <p className=\"text-sm text-foreground/60 mt-0.5 leading-relaxed\">{l.description}</p>\n )}\n </div>\n <span className=\"text-sm font-black tabular-nums text-foreground/70 shrink-0\">\n {l.xpRequired.toLocaleString()} XP\n </span>\n </li>\n ))}\n </ol>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBU;AAnBV,gBAAmB;AAcZ,SAAS,iBAAiB,EAAE,QAAQ,UAAU,GAA0B;AAC7E,SACE,4CAAC,QAAG,eAAW,cAAG,qCAAqC,SAAS,GAC7D,iBAAO,IAAI,CAAC,GAAG,MACd,6CAAC,QAAiB,WAAU,+BAC1B;AAAA,iDAAC,UAAK,WAAU,iDACd;AAAA,kDAAC,UAAK,WAAU,qDAAqD,YAAE,OAAM;AAAA,OAC3E,IAAI,KAAK,OAAO,KAChB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,WAAU;AAAA;AAAA,MACZ;AAAA,OAEJ;AAAA,IACA,6CAAC,SAAI,WAAU,kBACb;AAAA,kDAAC,OAAE,WAAU,uBAAuB,YAAE,MAAK;AAAA,MAC1C,EAAE,eACD,4CAAC,OAAE,WAAU,qDAAqD,YAAE,aAAY;AAAA,OAEpF;AAAA,IACA,6CAAC,UAAK,WAAU,+DACb;AAAA,QAAE,WAAW,eAAe;AAAA,MAAE;AAAA,OACjC;AAAA,OAlBO,EAAE,KAmBX,CACD,GACH;AAEJ;","names":[]}
@@ -10,13 +10,6 @@ interface LevelJourneyListProps {
10
10
  levels: LevelJourneyListLevel[];
11
11
  className?: string;
12
12
  }
13
- /** The full level ladder as a vertical showcase list — not the old
14
- * horizontal chip rail, which doesn't scale past a handful of items and
15
- * was built for a dashboard strip, not a 50-row standalone page. No
16
- * current-level state: this is the system-wide view, not "where am I."
17
- * Every 10th level gets a small gradient marker as a milestone cue;
18
- * colors are otherwise uniform (one signature identity, not 50 flat
19
- * per-level colors) — badgeColor is deliberately not consumed here. */
20
13
  declare function LevelJourneyList({ levels, className }: LevelJourneyListProps): react_jsx_runtime.JSX.Element;
21
14
 
22
15
  export { LevelJourneyList, type LevelJourneyListLevel, type LevelJourneyListProps };
@@ -10,13 +10,6 @@ interface LevelJourneyListProps {
10
10
  levels: LevelJourneyListLevel[];
11
11
  className?: string;
12
12
  }
13
- /** The full level ladder as a vertical showcase list — not the old
14
- * horizontal chip rail, which doesn't scale past a handful of items and
15
- * was built for a dashboard strip, not a 50-row standalone page. No
16
- * current-level state: this is the system-wide view, not "where am I."
17
- * Every 10th level gets a small gradient marker as a milestone cue;
18
- * colors are otherwise uniform (one signature identity, not 50 flat
19
- * per-level colors) — badgeColor is deliberately not consumed here. */
20
13
  declare function LevelJourneyList({ levels, className }: LevelJourneyListProps): react_jsx_runtime.JSX.Element;
21
14
 
22
15
  export { LevelJourneyList, type LevelJourneyListLevel, type LevelJourneyListProps };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/level-journey-list.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface LevelJourneyListLevel {\n level: number;\n name: string;\n xpRequired: number;\n description: string | null;\n}\n\nexport interface LevelJourneyListProps {\n levels: LevelJourneyListLevel[];\n className?: string;\n}\n\n/** The full level ladder as a vertical showcase list — not the old\n * horizontal chip rail, which doesn't scale past a handful of items and\n * was built for a dashboard strip, not a 50-row standalone page. No\n * current-level state: this is the system-wide view, not \"where am I.\"\n * Every 10th level gets a small gradient marker as a milestone cue;\n * colors are otherwise uniform (one signature identity, not 50 flat\n * per-level colors) — badgeColor is deliberately not consumed here. */\nexport function LevelJourneyList({ levels, className }: LevelJourneyListProps) {\n return (\n <ol className={cn(\"divide-y divide-foreground/[0.06]\", className)}>\n {levels.map((l, i) => (\n <li key={l.level} className=\"flex items-start gap-4 py-4\">\n <span className=\"flex items-center gap-1.5 w-8 shrink-0 pt-0.5\">\n <span className=\"text-xs font-bold text-foreground/30 tabular-nums\">{l.level}</span>\n {(i + 1) % 10 === 0 && (\n <span\n aria-hidden\n className=\"h-1.5 w-1.5 rounded-full bg-gradient-to-r from-brand-orange to-brand-maeve\"\n />\n )}\n </span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-base font-bold\">{l.name}</p>\n {l.description && (\n <p className=\"text-sm text-foreground/60 mt-0.5 leading-relaxed\">{l.description}</p>\n )}\n </div>\n <span className=\"text-sm font-black tabular-nums text-foreground/70 shrink-0\">\n {l.xpRequired.toLocaleString()} XP\n </span>\n </li>\n ))}\n </ol>\n );\n}\n"],"mappings":"AA0BU,SACE,KADF;AA1BV,SAAS,UAAU;AAqBZ,SAAS,iBAAiB,EAAE,QAAQ,UAAU,GAA0B;AAC7E,SACE,oBAAC,QAAG,WAAW,GAAG,qCAAqC,SAAS,GAC7D,iBAAO,IAAI,CAAC,GAAG,MACd,qBAAC,QAAiB,WAAU,+BAC1B;AAAA,yBAAC,UAAK,WAAU,iDACd;AAAA,0BAAC,UAAK,WAAU,qDAAqD,YAAE,OAAM;AAAA,OAC3E,IAAI,KAAK,OAAO,KAChB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,WAAU;AAAA;AAAA,MACZ;AAAA,OAEJ;AAAA,IACA,qBAAC,SAAI,WAAU,kBACb;AAAA,0BAAC,OAAE,WAAU,uBAAuB,YAAE,MAAK;AAAA,MAC1C,EAAE,eACD,oBAAC,OAAE,WAAU,qDAAqD,YAAE,aAAY;AAAA,OAEpF;AAAA,IACA,qBAAC,UAAK,WAAU,+DACb;AAAA,QAAE,WAAW,eAAe;AAAA,MAAE;AAAA,OACjC;AAAA,OAlBO,EAAE,KAmBX,CACD,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/level-journey-list.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\n\nexport interface LevelJourneyListLevel {\n level: number;\n name: string;\n xpRequired: number;\n description: string | null;\n}\n\nexport interface LevelJourneyListProps {\n levels: LevelJourneyListLevel[];\n className?: string;\n}\n\nexport function LevelJourneyList({ levels, className }: LevelJourneyListProps) {\n return (\n <ol className={cn(\"divide-y divide-foreground/[0.06]\", className)}>\n {levels.map((l, i) => (\n <li key={l.level} className=\"flex items-start gap-4 py-4\">\n <span className=\"flex items-center gap-1.5 w-8 shrink-0 pt-0.5\">\n <span className=\"text-xs font-bold text-foreground/30 tabular-nums\">{l.level}</span>\n {(i + 1) % 10 === 0 && (\n <span\n aria-hidden\n className=\"h-1.5 w-1.5 rounded-full bg-gradient-to-r from-brand-orange to-brand-maeve\"\n />\n )}\n </span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-base font-bold\">{l.name}</p>\n {l.description && (\n <p className=\"text-sm text-foreground/60 mt-0.5 leading-relaxed\">{l.description}</p>\n )}\n </div>\n <span className=\"text-sm font-black tabular-nums text-foreground/70 shrink-0\">\n {l.xpRequired.toLocaleString()} XP\n </span>\n </li>\n ))}\n </ol>\n );\n}\n"],"mappings":"AAmBU,SACE,KADF;AAnBV,SAAS,UAAU;AAcZ,SAAS,iBAAiB,EAAE,QAAQ,UAAU,GAA0B;AAC7E,SACE,oBAAC,QAAG,WAAW,GAAG,qCAAqC,SAAS,GAC7D,iBAAO,IAAI,CAAC,GAAG,MACd,qBAAC,QAAiB,WAAU,+BAC1B;AAAA,yBAAC,UAAK,WAAU,iDACd;AAAA,0BAAC,UAAK,WAAU,qDAAqD,YAAE,OAAM;AAAA,OAC3E,IAAI,KAAK,OAAO,KAChB;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,UACX,WAAU;AAAA;AAAA,MACZ;AAAA,OAEJ;AAAA,IACA,qBAAC,SAAI,WAAU,kBACb;AAAA,0BAAC,OAAE,WAAU,uBAAuB,YAAE,MAAK;AAAA,MAC1C,EAAE,eACD,oBAAC,OAAE,WAAU,qDAAqD,YAAE,aAAY;AAAA,OAEpF;AAAA,IACA,qBAAC,UAAK,WAAU,+DACb;AAAA,QAAE,WAAW,eAAe;AAAA,MAAE;AAAA,OACjC;AAAA,OAlBO,EAAE,KAmBX,CACD,GACH;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/level-up-celebration.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { LevelBadge } from \"./level-badge.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface LevelUpCelebrationProps {\n level: number;\n name: string;\n badgeColor: string;\n onDismiss: () => void;\n className?: string;\n}\n\nconst PARTICLE_COUNT = 14;\n\n/** Auto-dismissing celebration burst for a level-up moment. Pure CSS\n * animation, no dependency — particles are positioned/rotated via inline\n * style so the same component works without a keyframe-per-particle\n * stylesheet entry. */\nexport function LevelUpCelebration({ level, name, badgeColor, onDismiss, className }: LevelUpCelebrationProps) {\n useEffect(() => {\n const timer = setTimeout(onDismiss, 3000);\n return () => clearTimeout(timer);\n }, [onDismiss]);\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n \"fixed inset-0 z-[200] flex items-center justify-center bg-background/40 backdrop-blur-sm\",\n className\n )}\n onClick={onDismiss}\n >\n <div className=\"relative flex flex-col items-center gap-3 animate-in zoom-in-95 fade-in duration-300\">\n <div className=\"pointer-events-none absolute inset-0 -z-10\">\n {Array.from({ length: PARTICLE_COUNT }).map((_, i) => {\n const angle = (360 / PARTICLE_COUNT) * i;\n const distance = 60 + (i % 3) * 20;\n return (\n <span\n key={i}\n className=\"absolute left-1/2 top-1/2 h-1.5 w-1.5 rounded-full animate-in fade-in zoom-in duration-700\"\n style={{\n backgroundColor: badgeColor,\n transform: `rotate(${angle}deg) translate(${distance}px) rotate(-${angle}deg)`,\n }}\n />\n );\n })}\n </div>\n <p className=\"text-sm font-bold uppercase tracking-widest text-muted-foreground\">Level up</p>\n <LevelBadge level={level} name={name} badgeColor={badgeColor} size=\"lg\" />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCM;AAlCN,mBAA0B;AAC1B,yBAA2B;AAC3B,gBAAmB;AAUnB,MAAM,iBAAiB;AAMhB,SAAS,mBAAmB,EAAE,OAAO,MAAM,YAAY,WAAW,UAAU,GAA4B;AAC7G,8BAAU,MAAM;AACd,UAAM,QAAQ,WAAW,WAAW,GAAI;AACxC,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,SAAS,CAAC;AAEd,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MAET,uDAAC,SAAI,WAAU,wFACb;AAAA,oDAAC,SAAI,WAAU,8CACZ,gBAAM,KAAK,EAAE,QAAQ,eAAe,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACpD,gBAAM,QAAS,MAAM,iBAAkB;AACvC,gBAAM,WAAW,KAAM,IAAI,IAAK;AAChC,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,iBAAiB;AAAA,gBACjB,WAAW,UAAU,KAAK,kBAAkB,QAAQ,eAAe,KAAK;AAAA,cAC1E;AAAA;AAAA,YALK;AAAA,UAMP;AAAA,QAEJ,CAAC,GACH;AAAA,QACA,4CAAC,OAAE,WAAU,qEAAoE,sBAAQ;AAAA,QACzF,4CAAC,iCAAW,OAAc,MAAY,YAAwB,MAAK,MAAK;AAAA,SAC1E;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/level-up-celebration.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { LevelBadge } from \"./level-badge.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface LevelUpCelebrationProps {\n level: number;\n name: string;\n badgeColor: string;\n onDismiss: () => void;\n className?: string;\n}\n\nconst PARTICLE_COUNT = 14;\n\nexport function LevelUpCelebration({ level, name, badgeColor, onDismiss, className }: LevelUpCelebrationProps) {\n useEffect(() => {\n const timer = setTimeout(onDismiss, 3000);\n return () => clearTimeout(timer);\n }, [onDismiss]);\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n \"fixed inset-0 z-[200] flex items-center justify-center bg-background/40 backdrop-blur-sm\",\n className\n )}\n onClick={onDismiss}\n >\n <div className=\"relative flex flex-col items-center gap-3 animate-in zoom-in-95 fade-in duration-300\">\n <div className=\"pointer-events-none absolute inset-0 -z-10\">\n {Array.from({ length: PARTICLE_COUNT }).map((_, i) => {\n const angle = (360 / PARTICLE_COUNT) * i;\n const distance = 60 + (i % 3) * 20;\n return (\n <span\n key={i}\n className=\"absolute left-1/2 top-1/2 h-1.5 w-1.5 rounded-full animate-in fade-in zoom-in duration-700\"\n style={{\n backgroundColor: badgeColor,\n transform: `rotate(${angle}deg) translate(${distance}px) rotate(-${angle}deg)`,\n }}\n />\n );\n })}\n </div>\n <p className=\"text-sm font-bold uppercase tracking-widest text-muted-foreground\">Level up</p>\n <LevelBadge level={level} name={name} badgeColor={badgeColor} size=\"lg\" />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCM;AA9BN,mBAA0B;AAC1B,yBAA2B;AAC3B,gBAAmB;AAUnB,MAAM,iBAAiB;AAEhB,SAAS,mBAAmB,EAAE,OAAO,MAAM,YAAY,WAAW,UAAU,GAA4B;AAC7G,8BAAU,MAAM;AACd,UAAM,QAAQ,WAAW,WAAW,GAAI;AACxC,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,SAAS,CAAC;AAEd,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MAET,uDAAC,SAAI,WAAU,wFACb;AAAA,oDAAC,SAAI,WAAU,8CACZ,gBAAM,KAAK,EAAE,QAAQ,eAAe,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACpD,gBAAM,QAAS,MAAM,iBAAkB;AACvC,gBAAM,WAAW,KAAM,IAAI,IAAK;AAChC,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,iBAAiB;AAAA,gBACjB,WAAW,UAAU,KAAK,kBAAkB,QAAQ,eAAe,KAAK;AAAA,cAC1E;AAAA;AAAA,YALK;AAAA,UAMP;AAAA,QAEJ,CAAC,GACH;AAAA,QACA,4CAAC,OAAE,WAAU,qEAAoE,sBAAQ;AAAA,QACzF,4CAAC,iCAAW,OAAc,MAAY,YAAwB,MAAK,MAAK;AAAA,SAC1E;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -7,10 +7,6 @@ interface LevelUpCelebrationProps {
7
7
  onDismiss: () => void;
8
8
  className?: string;
9
9
  }
10
- /** Auto-dismissing celebration burst for a level-up moment. Pure CSS
11
- * animation, no dependency — particles are positioned/rotated via inline
12
- * style so the same component works without a keyframe-per-particle
13
- * stylesheet entry. */
14
10
  declare function LevelUpCelebration({ level, name, badgeColor, onDismiss, className }: LevelUpCelebrationProps): react_jsx_runtime.JSX.Element;
15
11
 
16
12
  export { LevelUpCelebration, type LevelUpCelebrationProps };
@@ -7,10 +7,6 @@ interface LevelUpCelebrationProps {
7
7
  onDismiss: () => void;
8
8
  className?: string;
9
9
  }
10
- /** Auto-dismissing celebration burst for a level-up moment. Pure CSS
11
- * animation, no dependency — particles are positioned/rotated via inline
12
- * style so the same component works without a keyframe-per-particle
13
- * stylesheet entry. */
14
10
  declare function LevelUpCelebration({ level, name, badgeColor, onDismiss, className }: LevelUpCelebrationProps): react_jsx_runtime.JSX.Element;
15
11
 
16
12
  export { LevelUpCelebration, type LevelUpCelebrationProps };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/level-up-celebration.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { LevelBadge } from \"./level-badge.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface LevelUpCelebrationProps {\n level: number;\n name: string;\n badgeColor: string;\n onDismiss: () => void;\n className?: string;\n}\n\nconst PARTICLE_COUNT = 14;\n\n/** Auto-dismissing celebration burst for a level-up moment. Pure CSS\n * animation, no dependency — particles are positioned/rotated via inline\n * style so the same component works without a keyframe-per-particle\n * stylesheet entry. */\nexport function LevelUpCelebration({ level, name, badgeColor, onDismiss, className }: LevelUpCelebrationProps) {\n useEffect(() => {\n const timer = setTimeout(onDismiss, 3000);\n return () => clearTimeout(timer);\n }, [onDismiss]);\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n \"fixed inset-0 z-[200] flex items-center justify-center bg-background/40 backdrop-blur-sm\",\n className\n )}\n onClick={onDismiss}\n >\n <div className=\"relative flex flex-col items-center gap-3 animate-in zoom-in-95 fade-in duration-300\">\n <div className=\"pointer-events-none absolute inset-0 -z-10\">\n {Array.from({ length: PARTICLE_COUNT }).map((_, i) => {\n const angle = (360 / PARTICLE_COUNT) * i;\n const distance = 60 + (i % 3) * 20;\n return (\n <span\n key={i}\n className=\"absolute left-1/2 top-1/2 h-1.5 w-1.5 rounded-full animate-in fade-in zoom-in duration-700\"\n style={{\n backgroundColor: badgeColor,\n transform: `rotate(${angle}deg) translate(${distance}px) rotate(-${angle}deg)`,\n }}\n />\n );\n })}\n </div>\n <p className=\"text-sm font-bold uppercase tracking-widest text-muted-foreground\">Level up</p>\n <LevelBadge level={level} name={name} badgeColor={badgeColor} size=\"lg\" />\n </div>\n </div>\n );\n}\n"],"mappings":";AAoCM,SAMQ,KANR;AAlCN,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AAUnB,MAAM,iBAAiB;AAMhB,SAAS,mBAAmB,EAAE,OAAO,MAAM,YAAY,WAAW,UAAU,GAA4B;AAC7G,YAAU,MAAM;AACd,UAAM,QAAQ,WAAW,WAAW,GAAI;AACxC,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,SAAS,CAAC;AAEd,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MAET,+BAAC,SAAI,WAAU,wFACb;AAAA,4BAAC,SAAI,WAAU,8CACZ,gBAAM,KAAK,EAAE,QAAQ,eAAe,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACpD,gBAAM,QAAS,MAAM,iBAAkB;AACvC,gBAAM,WAAW,KAAM,IAAI,IAAK;AAChC,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,iBAAiB;AAAA,gBACjB,WAAW,UAAU,KAAK,kBAAkB,QAAQ,eAAe,KAAK;AAAA,cAC1E;AAAA;AAAA,YALK;AAAA,UAMP;AAAA,QAEJ,CAAC,GACH;AAAA,QACA,oBAAC,OAAE,WAAU,qEAAoE,sBAAQ;AAAA,QACzF,oBAAC,cAAW,OAAc,MAAY,YAAwB,MAAK,MAAK;AAAA,SAC1E;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/level-up-celebration.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { LevelBadge } from \"./level-badge.js\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport interface LevelUpCelebrationProps {\n level: number;\n name: string;\n badgeColor: string;\n onDismiss: () => void;\n className?: string;\n}\n\nconst PARTICLE_COUNT = 14;\n\nexport function LevelUpCelebration({ level, name, badgeColor, onDismiss, className }: LevelUpCelebrationProps) {\n useEffect(() => {\n const timer = setTimeout(onDismiss, 3000);\n return () => clearTimeout(timer);\n }, [onDismiss]);\n\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\n \"fixed inset-0 z-[200] flex items-center justify-center bg-background/40 backdrop-blur-sm\",\n className\n )}\n onClick={onDismiss}\n >\n <div className=\"relative flex flex-col items-center gap-3 animate-in zoom-in-95 fade-in duration-300\">\n <div className=\"pointer-events-none absolute inset-0 -z-10\">\n {Array.from({ length: PARTICLE_COUNT }).map((_, i) => {\n const angle = (360 / PARTICLE_COUNT) * i;\n const distance = 60 + (i % 3) * 20;\n return (\n <span\n key={i}\n className=\"absolute left-1/2 top-1/2 h-1.5 w-1.5 rounded-full animate-in fade-in zoom-in duration-700\"\n style={{\n backgroundColor: badgeColor,\n transform: `rotate(${angle}deg) translate(${distance}px) rotate(-${angle}deg)`,\n }}\n />\n );\n })}\n </div>\n <p className=\"text-sm font-bold uppercase tracking-widest text-muted-foreground\">Level up</p>\n <LevelBadge level={level} name={name} badgeColor={badgeColor} size=\"lg\" />\n </div>\n </div>\n );\n}\n"],"mappings":";AAgCM,SAMQ,KANR;AA9BN,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AAUnB,MAAM,iBAAiB;AAEhB,SAAS,mBAAmB,EAAE,OAAO,MAAM,YAAY,WAAW,UAAU,GAA4B;AAC7G,YAAU,MAAM;AACd,UAAM,QAAQ,WAAW,WAAW,GAAI;AACxC,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC,GAAG,CAAC,SAAS,CAAC;AAEd,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MAET,+BAAC,SAAI,WAAU,wFACb;AAAA,4BAAC,SAAI,WAAU,8CACZ,gBAAM,KAAK,EAAE,QAAQ,eAAe,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACpD,gBAAM,QAAS,MAAM,iBAAkB;AACvC,gBAAM,WAAW,KAAM,IAAI,IAAK;AAChC,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,iBAAiB;AAAA,gBACjB,WAAW,UAAU,KAAK,kBAAkB,QAAQ,eAAe,KAAK;AAAA,cAC1E;AAAA;AAAA,YALK;AAAA,UAMP;AAAA,QAEJ,CAAC,GACH;AAAA,QACA,oBAAC,OAAE,WAAU,qEAAoE,sBAAQ;AAAA,QACzF,oBAAC,cAAW,OAAc,MAAY,YAAwB,MAAK,MAAK;AAAA,SAC1E;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/reward-toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { toast } from \"sonner\";\nimport { XpToastContent } from \"./xp-toast-content.js\";\nimport type { ApiRewardsConfig } from \"@medialane/sdk\";\n\nexport interface RewardToastSnapshot {\n totalXp: number;\n currentLevel: number;\n}\n\n/**\n * Optimistic XP feedback after a scoring action. Scores recompute on a\n * schedule, so this shows the action's configured value, never a balance.\n * Fire-and-forget: any failure is silent (rewards UI must never break a flow).\n *\n * Each app supplies its own `getRewardsConfig` (bound to its own\n * `MedialaneClient` singleton) — the caching/toast logic lives here once.\n */\nexport function createRewardToast(getRewardsConfig: () => Promise<ApiRewardsConfig>) {\n let configPromise: Promise<ApiRewardsConfig> | null = null;\n function loadConfig() {\n configPromise ??= getRewardsConfig();\n return configPromise;\n }\n\n /**\n * @param snapshot Optional — when provided, the toast additionally shows\n * a progress bar toward the next level. Omit to get today's plain toast.\n */\n return function rewardToast(actionType: string, snapshot?: RewardToastSnapshot): void {\n loadConfig()\n .then((config) => {\n const action = config.actions.find((a) => a.type === actionType);\n if (!action) return;\n\n if (!snapshot) {\n toast(<XpToastContent xp={action.xp} label={action.label} />, { duration: 3500 });\n return;\n }\n\n const level = config.levels.find((l) => l.level === snapshot.currentLevel);\n const nextLevel = config.levels.find((l) => l.level === snapshot.currentLevel + 1);\n toast(\n <XpToastContent\n xp={action.xp}\n label={action.label}\n totalXp={snapshot.totalXp}\n levelXp={level?.xpRequired ?? 0}\n nextLevelXp={nextLevel?.xpRequired ?? null}\n />,\n { duration: 3500 }\n );\n })\n .catch(() => {\n configPromise = null; // retry on the next action\n });\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCgB;AAnChB,oBAAsB;AACtB,8BAA+B;AAgBxB,SAAS,kBAAkB,kBAAmD;AACnF,MAAI,gBAAkD;AACtD,WAAS,aAAa;AACpB,sCAAkB,iBAAiB;AACnC,WAAO;AAAA,EACT;AAMA,SAAO,SAAS,YAAY,YAAoB,UAAsC;AACpF,eAAW,EACR,KAAK,CAAC,WAAW;AAChB,YAAM,SAAS,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU;AAC/D,UAAI,CAAC,OAAQ;AAEb,UAAI,CAAC,UAAU;AACb,iCAAM,4CAAC,0CAAe,IAAI,OAAO,IAAI,OAAO,OAAO,OAAO,GAAI,EAAE,UAAU,KAAK,CAAC;AAChF;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,YAAY;AACzE,YAAM,YAAY,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,eAAe,CAAC;AACjF;AAAA,QACE;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,OAAO;AAAA,YACX,OAAO,OAAO;AAAA,YACd,SAAS,SAAS;AAAA,YAClB,SAAS,OAAO,cAAc;AAAA,YAC9B,aAAa,WAAW,cAAc;AAAA;AAAA,QACxC;AAAA,QACA,EAAE,UAAU,KAAK;AAAA,MACnB;AAAA,IACF,CAAC,EACA,MAAM,MAAM;AACX,sBAAgB;AAAA,IAClB,CAAC;AAAA,EACL;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/reward-toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { toast } from \"sonner\";\nimport { XpToastContent } from \"./xp-toast-content.js\";\nimport type { ApiRewardsConfig } from \"@medialane/sdk\";\n\nexport interface RewardToastSnapshot {\n totalXp: number;\n currentLevel: number;\n}\n\nexport function createRewardToast(getRewardsConfig: () => Promise<ApiRewardsConfig>) {\n let configPromise: Promise<ApiRewardsConfig> | null = null;\n function loadConfig() {\n configPromise ??= getRewardsConfig();\n return configPromise;\n }\n\n return function rewardToast(actionType: string, snapshot?: RewardToastSnapshot): void {\n loadConfig()\n .then((config) => {\n const action = config.actions.find((a) => a.type === actionType);\n if (!action) return;\n\n if (!snapshot) {\n toast(<XpToastContent xp={action.xp} label={action.label} />, { duration: 3500 });\n return;\n }\n\n const level = config.levels.find((l) => l.level === snapshot.currentLevel);\n const nextLevel = config.levels.find((l) => l.level === snapshot.currentLevel + 1);\n toast(\n <XpToastContent\n xp={action.xp}\n label={action.label}\n totalXp={snapshot.totalXp}\n levelXp={level?.xpRequired ?? 0}\n nextLevelXp={nextLevel?.xpRequired ?? null}\n />,\n { duration: 3500 }\n );\n })\n .catch(() => {\n configPromise = null;\n });\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBgB;AAvBhB,oBAAsB;AACtB,8BAA+B;AAQxB,SAAS,kBAAkB,kBAAmD;AACnF,MAAI,gBAAkD;AACtD,WAAS,aAAa;AACpB,sCAAkB,iBAAiB;AACnC,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,YAAY,YAAoB,UAAsC;AACpF,eAAW,EACR,KAAK,CAAC,WAAW;AAChB,YAAM,SAAS,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU;AAC/D,UAAI,CAAC,OAAQ;AAEb,UAAI,CAAC,UAAU;AACb,iCAAM,4CAAC,0CAAe,IAAI,OAAO,IAAI,OAAO,OAAO,OAAO,GAAI,EAAE,UAAU,KAAK,CAAC;AAChF;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,YAAY;AACzE,YAAM,YAAY,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,eAAe,CAAC;AACjF;AAAA,QACE;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,OAAO;AAAA,YACX,OAAO,OAAO;AAAA,YACd,SAAS,SAAS;AAAA,YAClB,SAAS,OAAO,cAAc;AAAA,YAC9B,aAAa,WAAW,cAAc;AAAA;AAAA,QACxC;AAAA,QACA,EAAE,UAAU,KAAK;AAAA,MACnB;AAAA,IACF,CAAC,EACA,MAAM,MAAM;AACX,sBAAgB;AAAA,IAClB,CAAC;AAAA,EACL;AACF;","names":[]}
@@ -4,14 +4,6 @@ interface RewardToastSnapshot {
4
4
  totalXp: number;
5
5
  currentLevel: number;
6
6
  }
7
- /**
8
- * Optimistic XP feedback after a scoring action. Scores recompute on a
9
- * schedule, so this shows the action's configured value, never a balance.
10
- * Fire-and-forget: any failure is silent (rewards UI must never break a flow).
11
- *
12
- * Each app supplies its own `getRewardsConfig` (bound to its own
13
- * `MedialaneClient` singleton) — the caching/toast logic lives here once.
14
- */
15
7
  declare function createRewardToast(getRewardsConfig: () => Promise<ApiRewardsConfig>): (actionType: string, snapshot?: RewardToastSnapshot) => void;
16
8
 
17
9
  export { type RewardToastSnapshot, createRewardToast };
@@ -4,14 +4,6 @@ interface RewardToastSnapshot {
4
4
  totalXp: number;
5
5
  currentLevel: number;
6
6
  }
7
- /**
8
- * Optimistic XP feedback after a scoring action. Scores recompute on a
9
- * schedule, so this shows the action's configured value, never a balance.
10
- * Fire-and-forget: any failure is silent (rewards UI must never break a flow).
11
- *
12
- * Each app supplies its own `getRewardsConfig` (bound to its own
13
- * `MedialaneClient` singleton) — the caching/toast logic lives here once.
14
- */
15
7
  declare function createRewardToast(getRewardsConfig: () => Promise<ApiRewardsConfig>): (actionType: string, snapshot?: RewardToastSnapshot) => void;
16
8
 
17
9
  export { type RewardToastSnapshot, createRewardToast };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/reward-toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { toast } from \"sonner\";\nimport { XpToastContent } from \"./xp-toast-content.js\";\nimport type { ApiRewardsConfig } from \"@medialane/sdk\";\n\nexport interface RewardToastSnapshot {\n totalXp: number;\n currentLevel: number;\n}\n\n/**\n * Optimistic XP feedback after a scoring action. Scores recompute on a\n * schedule, so this shows the action's configured value, never a balance.\n * Fire-and-forget: any failure is silent (rewards UI must never break a flow).\n *\n * Each app supplies its own `getRewardsConfig` (bound to its own\n * `MedialaneClient` singleton) — the caching/toast logic lives here once.\n */\nexport function createRewardToast(getRewardsConfig: () => Promise<ApiRewardsConfig>) {\n let configPromise: Promise<ApiRewardsConfig> | null = null;\n function loadConfig() {\n configPromise ??= getRewardsConfig();\n return configPromise;\n }\n\n /**\n * @param snapshot Optional — when provided, the toast additionally shows\n * a progress bar toward the next level. Omit to get today's plain toast.\n */\n return function rewardToast(actionType: string, snapshot?: RewardToastSnapshot): void {\n loadConfig()\n .then((config) => {\n const action = config.actions.find((a) => a.type === actionType);\n if (!action) return;\n\n if (!snapshot) {\n toast(<XpToastContent xp={action.xp} label={action.label} />, { duration: 3500 });\n return;\n }\n\n const level = config.levels.find((l) => l.level === snapshot.currentLevel);\n const nextLevel = config.levels.find((l) => l.level === snapshot.currentLevel + 1);\n toast(\n <XpToastContent\n xp={action.xp}\n label={action.label}\n totalXp={snapshot.totalXp}\n levelXp={level?.xpRequired ?? 0}\n nextLevelXp={nextLevel?.xpRequired ?? null}\n />,\n { duration: 3500 }\n );\n })\n .catch(() => {\n configPromise = null; // retry on the next action\n });\n };\n}\n"],"mappings":";AAqCgB;AAnChB,SAAS,aAAa;AACtB,SAAS,sBAAsB;AAgBxB,SAAS,kBAAkB,kBAAmD;AACnF,MAAI,gBAAkD;AACtD,WAAS,aAAa;AACpB,sCAAkB,iBAAiB;AACnC,WAAO;AAAA,EACT;AAMA,SAAO,SAAS,YAAY,YAAoB,UAAsC;AACpF,eAAW,EACR,KAAK,CAAC,WAAW;AAChB,YAAM,SAAS,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU;AAC/D,UAAI,CAAC,OAAQ;AAEb,UAAI,CAAC,UAAU;AACb,cAAM,oBAAC,kBAAe,IAAI,OAAO,IAAI,OAAO,OAAO,OAAO,GAAI,EAAE,UAAU,KAAK,CAAC;AAChF;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,YAAY;AACzE,YAAM,YAAY,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,eAAe,CAAC;AACjF;AAAA,QACE;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,OAAO;AAAA,YACX,OAAO,OAAO;AAAA,YACd,SAAS,SAAS;AAAA,YAClB,SAAS,OAAO,cAAc;AAAA,YAC9B,aAAa,WAAW,cAAc;AAAA;AAAA,QACxC;AAAA,QACA,EAAE,UAAU,KAAK;AAAA,MACnB;AAAA,IACF,CAAC,EACA,MAAM,MAAM;AACX,sBAAgB;AAAA,IAClB,CAAC;AAAA,EACL;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/reward-toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { toast } from \"sonner\";\nimport { XpToastContent } from \"./xp-toast-content.js\";\nimport type { ApiRewardsConfig } from \"@medialane/sdk\";\n\nexport interface RewardToastSnapshot {\n totalXp: number;\n currentLevel: number;\n}\n\nexport function createRewardToast(getRewardsConfig: () => Promise<ApiRewardsConfig>) {\n let configPromise: Promise<ApiRewardsConfig> | null = null;\n function loadConfig() {\n configPromise ??= getRewardsConfig();\n return configPromise;\n }\n\n return function rewardToast(actionType: string, snapshot?: RewardToastSnapshot): void {\n loadConfig()\n .then((config) => {\n const action = config.actions.find((a) => a.type === actionType);\n if (!action) return;\n\n if (!snapshot) {\n toast(<XpToastContent xp={action.xp} label={action.label} />, { duration: 3500 });\n return;\n }\n\n const level = config.levels.find((l) => l.level === snapshot.currentLevel);\n const nextLevel = config.levels.find((l) => l.level === snapshot.currentLevel + 1);\n toast(\n <XpToastContent\n xp={action.xp}\n label={action.label}\n totalXp={snapshot.totalXp}\n levelXp={level?.xpRequired ?? 0}\n nextLevelXp={nextLevel?.xpRequired ?? null}\n />,\n { duration: 3500 }\n );\n })\n .catch(() => {\n configPromise = null;\n });\n };\n}\n"],"mappings":";AAyBgB;AAvBhB,SAAS,aAAa;AACtB,SAAS,sBAAsB;AAQxB,SAAS,kBAAkB,kBAAmD;AACnF,MAAI,gBAAkD;AACtD,WAAS,aAAa;AACpB,sCAAkB,iBAAiB;AACnC,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,YAAY,YAAoB,UAAsC;AACpF,eAAW,EACR,KAAK,CAAC,WAAW;AAChB,YAAM,SAAS,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,UAAU;AAC/D,UAAI,CAAC,OAAQ;AAEb,UAAI,CAAC,UAAU;AACb,cAAM,oBAAC,kBAAe,IAAI,OAAO,IAAI,OAAO,OAAO,OAAO,GAAI,EAAE,UAAU,KAAK,CAAC;AAChF;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,YAAY;AACzE,YAAM,YAAY,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,eAAe,CAAC;AACjF;AAAA,QACE;AAAA,UAAC;AAAA;AAAA,YACC,IAAI,OAAO;AAAA,YACX,OAAO,OAAO;AAAA,YACd,SAAS,SAAS;AAAA,YAClB,SAAS,OAAO,cAAc;AAAA,YAC9B,aAAa,WAAW,cAAc;AAAA;AAAA,QACxC;AAAA,QACA,EAAE,UAAU,KAAK;AAAA,MACnB;AAAA,IACF,CAAC,EACA,MAAM,MAAM;AACX,sBAAgB;AAAA,IAClB,CAAC;AAAA,EACL;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/score-summary-card.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\nimport { BadgeShelf, type BadgeShelfBadge } from \"./badge-shelf.js\";\n\nexport interface ScoreSummaryCardProps {\n level: number;\n levelName: string;\n badgeColor: string;\n totalXp: number;\n /** XP required to reach the current level. */\n levelXp: number;\n nextLevel: { level: number; name: string; xpRequired: number } | null;\n /** A few earned badges to preview (already limited by the caller). */\n topBadges?: BadgeShelfBadge[];\n /** Where the card links (\"/rewards\"); rendered as a plain anchor. */\n href?: string;\n className?: string;\n}\n\n/** Compact score overview for portfolio/profile surfaces: level ring, XP,\n * next-level progress, and a short badge preview. */\nexport function ScoreSummaryCard({\n level,\n levelName,\n badgeColor,\n totalXp,\n nextLevel,\n topBadges,\n href,\n className,\n}: ScoreSummaryCardProps) {\n const body = (\n <div className={cn(\"rounded-xl border border-border bg-card p-4 sm:p-5 space-y-4\", className)}>\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div\n className=\"h-12 w-12 rounded-xl shrink-0 flex items-center justify-center text-xl font-black text-white\"\n style={{ backgroundColor: badgeColor }}\n >\n {level}\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-bold leading-tight text-foreground truncate\">{levelName}</p>\n <p className=\"text-xs text-muted-foreground\">Level {level}</p>\n </div>\n </div>\n <div className=\"text-right shrink-0\">\n <p className=\"text-2xl font-black text-foreground tabular-nums\">{totalXp.toLocaleString()}</p>\n <p className=\"text-xs uppercase tracking-widest text-muted-foreground\">XP</p>\n </div>\n </div>\n {nextLevel && (\n <p className=\"text-xs text-muted-foreground border-t border-border/50 pt-3\">\n {(nextLevel.xpRequired - totalXp).toLocaleString()} XP to Level {nextLevel.level} · {nextLevel.name}\n </p>\n )}\n {topBadges && topBadges.length > 0 && (\n <BadgeShelf badges={topBadges} className={!nextLevel ? \"border-t border-border/50 pt-3\" : undefined} />\n )}\n </div>\n );\n\n if (!href) return body;\n return (\n <a href={href} className=\"block active:opacity-80\">\n {body}\n </a>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCU;AAlCV,gBAAmB;AACnB,yBAAiD;AAmB1C,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,OACJ,6CAAC,SAAI,eAAW,cAAG,gEAAgE,SAAS,GAC1F;AAAA,iDAAC,SAAI,WAAU,2CACb;AAAA,mDAAC,SAAI,WAAU,mCACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,WAAW;AAAA,YAEpC;AAAA;AAAA,QACH;AAAA,QACA,6CAAC,SAAI,WAAU,WACb;AAAA,sDAAC,OAAE,WAAU,4DAA4D,qBAAU;AAAA,UACnF,6CAAC,OAAE,WAAU,iCAAgC;AAAA;AAAA,YAAO;AAAA,aAAM;AAAA,WAC5D;AAAA,SACF;AAAA,MACA,6CAAC,SAAI,WAAU,uBACb;AAAA,oDAAC,OAAE,WAAU,oDAAoD,kBAAQ,eAAe,GAAE;AAAA,QAC1F,4CAAC,OAAE,WAAU,2DAA0D,gBAAE;AAAA,SAC3E;AAAA,OACF;AAAA,IACC,aACC,6CAAC,OAAE,WAAU,gEACT;AAAA,iBAAU,aAAa,SAAS,eAAe;AAAA,MAAE;AAAA,MAAc,UAAU;AAAA,MAAM;AAAA,MAAI,UAAU;AAAA,OACjG;AAAA,IAED,aAAa,UAAU,SAAS,KAC/B,4CAAC,iCAAW,QAAQ,WAAW,WAAW,CAAC,YAAY,mCAAmC,QAAW;AAAA,KAEzG;AAGF,MAAI,CAAC,KAAM,QAAO;AAClB,SACE,4CAAC,OAAE,MAAY,WAAU,2BACtB,gBACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/score-summary-card.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\nimport { BadgeShelf, type BadgeShelfBadge } from \"./badge-shelf.js\";\n\nexport interface ScoreSummaryCardProps {\n level: number;\n levelName: string;\n badgeColor: string;\n totalXp: number;\n\n levelXp: number;\n nextLevel: { level: number; name: string; xpRequired: number } | null;\n\n topBadges?: BadgeShelfBadge[];\n\n href?: string;\n className?: string;\n}\n\nexport function ScoreSummaryCard({\n level,\n levelName,\n badgeColor,\n totalXp,\n nextLevel,\n topBadges,\n href,\n className,\n}: ScoreSummaryCardProps) {\n const body = (\n <div className={cn(\"rounded-xl border border-border bg-card p-4 sm:p-5 space-y-4\", className)}>\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div\n className=\"h-12 w-12 rounded-xl shrink-0 flex items-center justify-center text-xl font-black text-white\"\n style={{ backgroundColor: badgeColor }}\n >\n {level}\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-bold leading-tight text-foreground truncate\">{levelName}</p>\n <p className=\"text-xs text-muted-foreground\">Level {level}</p>\n </div>\n </div>\n <div className=\"text-right shrink-0\">\n <p className=\"text-2xl font-black text-foreground tabular-nums\">{totalXp.toLocaleString()}</p>\n <p className=\"text-xs uppercase tracking-widest text-muted-foreground\">XP</p>\n </div>\n </div>\n {nextLevel && (\n <p className=\"text-xs text-muted-foreground border-t border-border/50 pt-3\">\n {(nextLevel.xpRequired - totalXp).toLocaleString()} XP to Level {nextLevel.level} · {nextLevel.name}\n </p>\n )}\n {topBadges && topBadges.length > 0 && (\n <BadgeShelf badges={topBadges} className={!nextLevel ? \"border-t border-border/50 pt-3\" : undefined} />\n )}\n </div>\n );\n\n if (!href) return body;\n return (\n <a href={href} className=\"block active:opacity-80\">\n {body}\n </a>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCU;AAhCV,gBAAmB;AACnB,yBAAiD;AAiB1C,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,OACJ,6CAAC,SAAI,eAAW,cAAG,gEAAgE,SAAS,GAC1F;AAAA,iDAAC,SAAI,WAAU,2CACb;AAAA,mDAAC,SAAI,WAAU,mCACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,WAAW;AAAA,YAEpC;AAAA;AAAA,QACH;AAAA,QACA,6CAAC,SAAI,WAAU,WACb;AAAA,sDAAC,OAAE,WAAU,4DAA4D,qBAAU;AAAA,UACnF,6CAAC,OAAE,WAAU,iCAAgC;AAAA;AAAA,YAAO;AAAA,aAAM;AAAA,WAC5D;AAAA,SACF;AAAA,MACA,6CAAC,SAAI,WAAU,uBACb;AAAA,oDAAC,OAAE,WAAU,oDAAoD,kBAAQ,eAAe,GAAE;AAAA,QAC1F,4CAAC,OAAE,WAAU,2DAA0D,gBAAE;AAAA,SAC3E;AAAA,OACF;AAAA,IACC,aACC,6CAAC,OAAE,WAAU,gEACT;AAAA,iBAAU,aAAa,SAAS,eAAe;AAAA,MAAE;AAAA,MAAc,UAAU;AAAA,MAAM;AAAA,MAAI,UAAU;AAAA,OACjG;AAAA,IAED,aAAa,UAAU,SAAS,KAC/B,4CAAC,iCAAW,QAAQ,WAAW,WAAW,CAAC,YAAY,mCAAmC,QAAW;AAAA,KAEzG;AAGF,MAAI,CAAC,KAAM,QAAO;AAClB,SACE,4CAAC,OAAE,MAAY,WAAU,2BACtB,gBACH;AAEJ;","names":[]}
@@ -6,21 +6,16 @@ interface ScoreSummaryCardProps {
6
6
  levelName: string;
7
7
  badgeColor: string;
8
8
  totalXp: number;
9
- /** XP required to reach the current level. */
10
9
  levelXp: number;
11
10
  nextLevel: {
12
11
  level: number;
13
12
  name: string;
14
13
  xpRequired: number;
15
14
  } | null;
16
- /** A few earned badges to preview (already limited by the caller). */
17
15
  topBadges?: BadgeShelfBadge[];
18
- /** Where the card links ("/rewards"); rendered as a plain anchor. */
19
16
  href?: string;
20
17
  className?: string;
21
18
  }
22
- /** Compact score overview for portfolio/profile surfaces: level ring, XP,
23
- * next-level progress, and a short badge preview. */
24
19
  declare function ScoreSummaryCard({ level, levelName, badgeColor, totalXp, nextLevel, topBadges, href, className, }: ScoreSummaryCardProps): react_jsx_runtime.JSX.Element;
25
20
 
26
21
  export { ScoreSummaryCard, type ScoreSummaryCardProps };
@@ -6,21 +6,16 @@ interface ScoreSummaryCardProps {
6
6
  levelName: string;
7
7
  badgeColor: string;
8
8
  totalXp: number;
9
- /** XP required to reach the current level. */
10
9
  levelXp: number;
11
10
  nextLevel: {
12
11
  level: number;
13
12
  name: string;
14
13
  xpRequired: number;
15
14
  } | null;
16
- /** A few earned badges to preview (already limited by the caller). */
17
15
  topBadges?: BadgeShelfBadge[];
18
- /** Where the card links ("/rewards"); rendered as a plain anchor. */
19
16
  href?: string;
20
17
  className?: string;
21
18
  }
22
- /** Compact score overview for portfolio/profile surfaces: level ring, XP,
23
- * next-level progress, and a short badge preview. */
24
19
  declare function ScoreSummaryCard({ level, levelName, badgeColor, totalXp, nextLevel, topBadges, href, className, }: ScoreSummaryCardProps): react_jsx_runtime.JSX.Element;
25
20
 
26
21
  export { ScoreSummaryCard, type ScoreSummaryCardProps };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/score-summary-card.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\nimport { BadgeShelf, type BadgeShelfBadge } from \"./badge-shelf.js\";\n\nexport interface ScoreSummaryCardProps {\n level: number;\n levelName: string;\n badgeColor: string;\n totalXp: number;\n /** XP required to reach the current level. */\n levelXp: number;\n nextLevel: { level: number; name: string; xpRequired: number } | null;\n /** A few earned badges to preview (already limited by the caller). */\n topBadges?: BadgeShelfBadge[];\n /** Where the card links (\"/rewards\"); rendered as a plain anchor. */\n href?: string;\n className?: string;\n}\n\n/** Compact score overview for portfolio/profile surfaces: level ring, XP,\n * next-level progress, and a short badge preview. */\nexport function ScoreSummaryCard({\n level,\n levelName,\n badgeColor,\n totalXp,\n nextLevel,\n topBadges,\n href,\n className,\n}: ScoreSummaryCardProps) {\n const body = (\n <div className={cn(\"rounded-xl border border-border bg-card p-4 sm:p-5 space-y-4\", className)}>\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div\n className=\"h-12 w-12 rounded-xl shrink-0 flex items-center justify-center text-xl font-black text-white\"\n style={{ backgroundColor: badgeColor }}\n >\n {level}\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-bold leading-tight text-foreground truncate\">{levelName}</p>\n <p className=\"text-xs text-muted-foreground\">Level {level}</p>\n </div>\n </div>\n <div className=\"text-right shrink-0\">\n <p className=\"text-2xl font-black text-foreground tabular-nums\">{totalXp.toLocaleString()}</p>\n <p className=\"text-xs uppercase tracking-widest text-muted-foreground\">XP</p>\n </div>\n </div>\n {nextLevel && (\n <p className=\"text-xs text-muted-foreground border-t border-border/50 pt-3\">\n {(nextLevel.xpRequired - totalXp).toLocaleString()} XP to Level {nextLevel.level} · {nextLevel.name}\n </p>\n )}\n {topBadges && topBadges.length > 0 && (\n <BadgeShelf badges={topBadges} className={!nextLevel ? \"border-t border-border/50 pt-3\" : undefined} />\n )}\n </div>\n );\n\n if (!href) return body;\n return (\n <a href={href} className=\"block active:opacity-80\">\n {body}\n </a>\n );\n}\n"],"mappings":"AAkCU,cAQE,YARF;AAlCV,SAAS,UAAU;AACnB,SAAS,kBAAwC;AAmB1C,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,OACJ,qBAAC,SAAI,WAAW,GAAG,gEAAgE,SAAS,GAC1F;AAAA,yBAAC,SAAI,WAAU,2CACb;AAAA,2BAAC,SAAI,WAAU,mCACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,WAAW;AAAA,YAEpC;AAAA;AAAA,QACH;AAAA,QACA,qBAAC,SAAI,WAAU,WACb;AAAA,8BAAC,OAAE,WAAU,4DAA4D,qBAAU;AAAA,UACnF,qBAAC,OAAE,WAAU,iCAAgC;AAAA;AAAA,YAAO;AAAA,aAAM;AAAA,WAC5D;AAAA,SACF;AAAA,MACA,qBAAC,SAAI,WAAU,uBACb;AAAA,4BAAC,OAAE,WAAU,oDAAoD,kBAAQ,eAAe,GAAE;AAAA,QAC1F,oBAAC,OAAE,WAAU,2DAA0D,gBAAE;AAAA,SAC3E;AAAA,OACF;AAAA,IACC,aACC,qBAAC,OAAE,WAAU,gEACT;AAAA,iBAAU,aAAa,SAAS,eAAe;AAAA,MAAE;AAAA,MAAc,UAAU;AAAA,MAAM;AAAA,MAAI,UAAU;AAAA,OACjG;AAAA,IAED,aAAa,UAAU,SAAS,KAC/B,oBAAC,cAAW,QAAQ,WAAW,WAAW,CAAC,YAAY,mCAAmC,QAAW;AAAA,KAEzG;AAGF,MAAI,CAAC,KAAM,QAAO;AAClB,SACE,oBAAC,OAAE,MAAY,WAAU,2BACtB,gBACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/score-summary-card.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn.js\";\nimport { BadgeShelf, type BadgeShelfBadge } from \"./badge-shelf.js\";\n\nexport interface ScoreSummaryCardProps {\n level: number;\n levelName: string;\n badgeColor: string;\n totalXp: number;\n\n levelXp: number;\n nextLevel: { level: number; name: string; xpRequired: number } | null;\n\n topBadges?: BadgeShelfBadge[];\n\n href?: string;\n className?: string;\n}\n\nexport function ScoreSummaryCard({\n level,\n levelName,\n badgeColor,\n totalXp,\n nextLevel,\n topBadges,\n href,\n className,\n}: ScoreSummaryCardProps) {\n const body = (\n <div className={cn(\"rounded-xl border border-border bg-card p-4 sm:p-5 space-y-4\", className)}>\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <div\n className=\"h-12 w-12 rounded-xl shrink-0 flex items-center justify-center text-xl font-black text-white\"\n style={{ backgroundColor: badgeColor }}\n >\n {level}\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-bold leading-tight text-foreground truncate\">{levelName}</p>\n <p className=\"text-xs text-muted-foreground\">Level {level}</p>\n </div>\n </div>\n <div className=\"text-right shrink-0\">\n <p className=\"text-2xl font-black text-foreground tabular-nums\">{totalXp.toLocaleString()}</p>\n <p className=\"text-xs uppercase tracking-widest text-muted-foreground\">XP</p>\n </div>\n </div>\n {nextLevel && (\n <p className=\"text-xs text-muted-foreground border-t border-border/50 pt-3\">\n {(nextLevel.xpRequired - totalXp).toLocaleString()} XP to Level {nextLevel.level} · {nextLevel.name}\n </p>\n )}\n {topBadges && topBadges.length > 0 && (\n <BadgeShelf badges={topBadges} className={!nextLevel ? \"border-t border-border/50 pt-3\" : undefined} />\n )}\n </div>\n );\n\n if (!href) return body;\n return (\n <a href={href} className=\"block active:opacity-80\">\n {body}\n </a>\n );\n}\n"],"mappings":"AAgCU,cAQE,YARF;AAhCV,SAAS,UAAU;AACnB,SAAS,kBAAwC;AAiB1C,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,OACJ,qBAAC,SAAI,WAAW,GAAG,gEAAgE,SAAS,GAC1F;AAAA,yBAAC,SAAI,WAAU,2CACb;AAAA,2BAAC,SAAI,WAAU,mCACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,WAAW;AAAA,YAEpC;AAAA;AAAA,QACH;AAAA,QACA,qBAAC,SAAI,WAAU,WACb;AAAA,8BAAC,OAAE,WAAU,4DAA4D,qBAAU;AAAA,UACnF,qBAAC,OAAE,WAAU,iCAAgC;AAAA;AAAA,YAAO;AAAA,aAAM;AAAA,WAC5D;AAAA,SACF;AAAA,MACA,qBAAC,SAAI,WAAU,uBACb;AAAA,4BAAC,OAAE,WAAU,oDAAoD,kBAAQ,eAAe,GAAE;AAAA,QAC1F,oBAAC,OAAE,WAAU,2DAA0D,gBAAE;AAAA,SAC3E;AAAA,OACF;AAAA,IACC,aACC,qBAAC,OAAE,WAAU,gEACT;AAAA,iBAAU,aAAa,SAAS,eAAe;AAAA,MAAE;AAAA,MAAc,UAAU;AAAA,MAAM;AAAA,MAAI,UAAU;AAAA,OACjG;AAAA,IAED,aAAa,UAAU,SAAS,KAC/B,oBAAC,cAAW,QAAQ,WAAW,WAAW,CAAC,YAAY,mCAAmC,QAAW;AAAA,KAEzG;AAGF,MAAI,CAAC,KAAM,QAAO;AAClB,SACE,oBAAC,OAAE,MAAY,WAAU,2BACtB,gBACH;AAEJ;","names":[]}