@medialane/ui 0.120.0 → 0.122.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 +0 -6
  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 +0 -6
  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 +2 -1
  242. package/dist/components/portfolio-bento-tile.cjs.map +1 -1
  243. package/dist/components/portfolio-bento-tile.d.cts +6 -13
  244. package/dist/components/portfolio-bento-tile.d.ts +6 -13
  245. package/dist/components/portfolio-bento-tile.js +2 -1
  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 +7 -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 +7 -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/asset-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\n\nexport interface AssetCardPrice {\n formatted?: string | null;\n currency?: string | null;\n /**\n * Pre-formatted USD equivalent (e.g. \"$13.15\"), computed by the host from\n * its own live rate feed — this package has no price-feed access by\n * design. Omit/null renders the crypto amount alone (today's behavior).\n */\n usdValue?: string | null;\n}\n\nexport interface AssetCardProps {\n /** Asset detail link. */\n href: string;\n /** Asset title. */\n name: string;\n /** Raw image (ipfs:// or http) — resolved internally. */\n image?: string | null;\n /** Resolved animation_url — the live on-chain renderer, if any. */\n animationUrl?: string | null;\n /** Caller-computed eligibility for the living-render treatment. */\n live?: boolean;\n /** Secondary line under the title (collection or description). */\n subtitle?: string | null;\n /** IP type (apiValue or label) — renders the icon badge on the footer left. */\n ipType?: string | null;\n /** Listing price; omit/null shows no price. */\n price?: AssetCardPrice | null;\n /** Shown when the image is missing/errors (e.g. token id). */\n fallbackId?: string | null;\n /** Show the \"Indexing…\" overlay. */\n indexing?: boolean;\n /** Base URL for the ipType badge link. Default \"\" (relative). */\n ipTypeBaseUrl?: string;\n className?: string;\n}\n\n/**\n * The platform's shared asset card — lean and presentational.\n *\n * Intentionally has no action buttons, dropdowns or dialogs: the image and\n * text are the only interactive surface (a single asset link), which keeps\n * browse grids and carousels fast even when many cards render. Surfaces that\n * need owner/marketplace actions use the richer `TokenCard` / `ListingCard`.\n *\n * Layout: inset 4:5 artwork (gallery ratio, echoing the Medialane Collection\n * Card) with the price as a glass pill on the artwork (the collection cards'\n * Floor-pill vocabulary) → one body row: display-face title + optional\n * subtitle, with the optional ipType badge inline on the right.\n */\nexport function AssetCard({\n href,\n name,\n image,\n animationUrl,\n live = false,\n subtitle,\n ipType,\n price,\n fallbackId,\n indexing = false,\n ipTypeBaseUrl = \"\",\n className,\n}: AssetCardProps) {\n const resolved = image ? ipfsToHttp(image) : null;\n const hasPrice = !!price?.formatted;\n\n return (\n <div\n className={cn(\n \"card-base group relative flex flex-col w-full transition-colors hover:border-foreground/20\",\n className\n )}\n >\n {/* Artwork — inset with a gallery 4:5 ratio, like the Collection Card */}\n <Link href={href} className=\"block p-1.5 pb-0\">\n <div className=\"relative aspect-[4/5] rounded-[12px] bg-muted overflow-hidden ring-1 ring-border/50\">\n <AnimatedTokenMedia\n image={resolved}\n animationUrl={animationUrl}\n live={live}\n alt={name}\n mode=\"fill\"\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-500 group-hover:scale-105\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-blue/25 via-brand-purple/25 to-brand-rose/25\">\n <span className=\"text-sm font-semibold text-muted-foreground tabular-nums\">\n #{fallbackId ?? \"?\"}\n </span>\n </div>\n }\n />\n\n {/* Price pill — anchored on the artwork, same glass chip as the\n collection cards' Floor pill. Fiat leads when a live rate is\n available; the on-chain amount trails, dimmer, as a secondary\n fact — never a second full-weight number competing for\n attention. Stablecoins collapse to fiat + symbol alone, since\n the crypto amount would just repeat the same figure. */}\n {hasPrice && !indexing && (\n <span className=\"absolute bottom-2 right-2 inline-flex items-center gap-1.5 text-sm font-bold text-white/95 backdrop-blur-md bg-black/40 rounded-full pl-3 pr-3 py-1.5 tabular-nums\">\n <PriceChipContent\n amountFormatted={price!.formatted}\n currency={price!.currency}\n usdValue={price!.usdValue}\n tone=\"overlay-dark\"\n />\n </span>\n )}\n\n {indexing && (\n <div className=\"absolute bottom-0 inset-x-0 flex items-center justify-center gap-1.5 bg-black/50 backdrop-blur-sm py-1.5\">\n <Loader2 className=\"h-3 w-3 animate-spin text-white/70\" />\n <span className=\"text-2xs text-white/70\">Indexing…</span>\n </div>\n )}\n </div>\n </Link>\n\n {/* Body — one tight block: title (+ optional ipType badge inline) and subtitle */}\n <div className=\"flex items-start justify-between gap-2 px-3 py-3\">\n <Link href={href} className=\"block min-w-0 flex-1\">\n <p className=\"text-base font-bold line-clamp-1 leading-snug\">\n {name}\n </p>\n {subtitle && (\n <p className=\"text-xs text-muted-foreground line-clamp-1 leading-snug\">\n {subtitle}\n </p>\n )}\n </Link>\n\n {ipType && (\n <div className=\"shrink-0 mt-0.5\">\n <IpTypeBadge ipType={ipType} size=\"sm\" baseUrl={ipTypeBaseUrl} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function AssetCardSkeleton() {\n return (\n <div className=\"card-base flex flex-col w-full\">\n <div className=\"p-1.5 pb-0\">\n <div className=\"aspect-[4/5] w-full animate-pulse bg-muted rounded-[12px]\" />\n </div>\n <div className=\"px-3 py-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-3.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgGc;AA9Fd,kBAAiB;AACjB,0BAAwB;AACxB,gBAAmB;AACnB,kBAA2B;AAC3B,wBAAiC;AACjC,2BAA4B;AAC5B,kCAAmC;AAoD5B,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB;AACF,GAAmB;AACjB,QAAM,WAAW,YAAQ,wBAAW,KAAK,IAAI;AAC7C,QAAM,WAAW,CAAC,CAAC,OAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGA;AAAA,oDAAC,YAAAA,SAAA,EAAK,MAAY,WAAU,oBAC1B,uDAAC,SAAI,WAAU,uFACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,UACE,4CAAC,SAAI,WAAU,+HACb,uDAAC,UAAK,WAAU,4DAA2D;AAAA;AAAA,gBACvE,cAAc;AAAA,iBAClB,GACF;AAAA;AAAA,UAEJ;AAAA,UAQC,YAAY,CAAC,YACZ,4CAAC,UAAK,WAAU,sKACd;AAAA,YAAC;AAAA;AAAA,cACC,iBAAiB,MAAO;AAAA,cACxB,UAAU,MAAO;AAAA,cACjB,UAAU,MAAO;AAAA,cACjB,MAAK;AAAA;AAAA,UACP,GACF;AAAA,UAGD,YACC,6CAAC,SAAI,WAAU,4GACb;AAAA,wDAAC,+BAAQ,WAAU,sCAAqC;AAAA,YACxD,4CAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,aACpD;AAAA,WAEJ,GACF;AAAA,QAGA,6CAAC,SAAI,WAAU,oDACb;AAAA,uDAAC,YAAAA,SAAA,EAAK,MAAY,WAAU,wBAC1B;AAAA,wDAAC,OAAE,WAAU,iDACV,gBACH;AAAA,YACC,YACC,4CAAC,OAAE,WAAU,2DACV,oBACH;AAAA,aAEJ;AAAA,UAEC,UACC,4CAAC,SAAI,WAAU,mBACb,sDAAC,oCAAY,QAAgB,MAAK,MAAK,SAAS,eAAe,GACjE;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,6CAAC,SAAI,WAAU,kCACb;AAAA,gDAAC,SAAI,WAAU,cACb,sDAAC,SAAI,WAAU,6DAA4D,GAC7E;AAAA,IACA,6CAAC,SAAI,WAAU,yBACb;AAAA,kDAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,4CAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,KACF;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/asset-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\n\nexport interface AssetCardPrice {\n formatted?: string | null;\n currency?: string | null;\n\n usdValue?: string | null;\n}\n\nexport interface AssetCardProps {\n\n href: string;\n\n name: string;\n\n image?: string | null;\n\n animationUrl?: string | null;\n\n live?: boolean;\n\n subtitle?: string | null;\n\n ipType?: string | null;\n\n price?: AssetCardPrice | null;\n\n fallbackId?: string | null;\n\n indexing?: boolean;\n\n ipTypeBaseUrl?: string;\n className?: string;\n}\n\nexport function AssetCard({\n href,\n name,\n image,\n animationUrl,\n live = false,\n subtitle,\n ipType,\n price,\n fallbackId,\n indexing = false,\n ipTypeBaseUrl = \"\",\n className,\n}: AssetCardProps) {\n const resolved = image ? ipfsToHttp(image) : null;\n const hasPrice = !!price?.formatted;\n\n return (\n <div\n className={cn(\n \"card-base group relative flex flex-col w-full transition-colors hover:border-foreground/20\",\n className\n )}\n >\n\n <Link href={href} className=\"block p-1.5 pb-0\">\n <div className=\"relative aspect-[4/5] rounded-[12px] bg-muted overflow-hidden ring-1 ring-border/50\">\n <AnimatedTokenMedia\n image={resolved}\n animationUrl={animationUrl}\n live={live}\n alt={name}\n mode=\"fill\"\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-500 group-hover:scale-105\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-blue/25 via-brand-purple/25 to-brand-rose/25\">\n <span className=\"text-sm font-semibold text-muted-foreground tabular-nums\">\n #{fallbackId ?? \"?\"}\n </span>\n </div>\n }\n />\n\n {hasPrice && !indexing && (\n <span className=\"absolute bottom-2 right-2 inline-flex items-center gap-1.5 text-sm font-bold text-white/95 backdrop-blur-md bg-black/40 rounded-full pl-3 pr-3 py-1.5 tabular-nums\">\n <PriceChipContent\n amountFormatted={price!.formatted}\n currency={price!.currency}\n usdValue={price!.usdValue}\n tone=\"overlay-dark\"\n />\n </span>\n )}\n\n {indexing && (\n <div className=\"absolute bottom-0 inset-x-0 flex items-center justify-center gap-1.5 bg-black/50 backdrop-blur-sm py-1.5\">\n <Loader2 className=\"h-3 w-3 animate-spin text-white/70\" />\n <span className=\"text-2xs text-white/70\">Indexing…</span>\n </div>\n )}\n </div>\n </Link>\n\n <div className=\"flex items-start justify-between gap-2 px-3 py-3\">\n <Link href={href} className=\"block min-w-0 flex-1\">\n <p className=\"text-base font-bold line-clamp-1 leading-snug\">\n {name}\n </p>\n {subtitle && (\n <p className=\"text-xs text-muted-foreground line-clamp-1 leading-snug\">\n {subtitle}\n </p>\n )}\n </Link>\n\n {ipType && (\n <div className=\"shrink-0 mt-0.5\">\n <IpTypeBadge ipType={ipType} size=\"sm\" baseUrl={ipTypeBaseUrl} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function AssetCardSkeleton() {\n return (\n <div className=\"card-base flex flex-col w-full\">\n <div className=\"p-1.5 pb-0\">\n <div className=\"aspect-[4/5] w-full animate-pulse bg-muted rounded-[12px]\" />\n </div>\n <div className=\"px-3 py-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-3.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+Ec;AA7Ed,kBAAiB;AACjB,0BAAwB;AACxB,gBAAmB;AACnB,kBAA2B;AAC3B,wBAAiC;AACjC,2BAA4B;AAC5B,kCAAmC;AAmC5B,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB;AACF,GAAmB;AACjB,QAAM,WAAW,YAAQ,wBAAW,KAAK,IAAI;AAC7C,QAAM,WAAW,CAAC,CAAC,OAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGA;AAAA,oDAAC,YAAAA,SAAA,EAAK,MAAY,WAAU,oBAC1B,uDAAC,SAAI,WAAU,uFACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,UACE,4CAAC,SAAI,WAAU,+HACb,uDAAC,UAAK,WAAU,4DAA2D;AAAA;AAAA,gBACvE,cAAc;AAAA,iBAClB,GACF;AAAA;AAAA,UAEJ;AAAA,UAEC,YAAY,CAAC,YACZ,4CAAC,UAAK,WAAU,sKACd;AAAA,YAAC;AAAA;AAAA,cACC,iBAAiB,MAAO;AAAA,cACxB,UAAU,MAAO;AAAA,cACjB,UAAU,MAAO;AAAA,cACjB,MAAK;AAAA;AAAA,UACP,GACF;AAAA,UAGD,YACC,6CAAC,SAAI,WAAU,4GACb;AAAA,wDAAC,+BAAQ,WAAU,sCAAqC;AAAA,YACxD,4CAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,aACpD;AAAA,WAEJ,GACF;AAAA,QAEA,6CAAC,SAAI,WAAU,oDACb;AAAA,uDAAC,YAAAA,SAAA,EAAK,MAAY,WAAU,wBAC1B;AAAA,wDAAC,OAAE,WAAU,iDACV,gBACH;AAAA,YACC,YACC,4CAAC,OAAE,WAAU,2DACV,oBACH;AAAA,aAEJ;AAAA,UAEC,UACC,4CAAC,SAAI,WAAU,mBACb,sDAAC,oCAAY,QAAgB,MAAK,MAAK,SAAS,eAAe,GACjE;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,6CAAC,SAAI,WAAU,kCACb;AAAA,gDAAC,SAAI,WAAU,cACb,sDAAC,SAAI,WAAU,6DAA4D,GAC7E;AAAA,IACA,6CAAC,SAAI,WAAU,yBACb;AAAA,kDAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,4CAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,KACF;AAEJ;","names":["Link"]}
@@ -3,51 +3,22 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  interface AssetCardPrice {
4
4
  formatted?: string | null;
5
5
  currency?: string | null;
6
- /**
7
- * Pre-formatted USD equivalent (e.g. "$13.15"), computed by the host from
8
- * its own live rate feed — this package has no price-feed access by
9
- * design. Omit/null renders the crypto amount alone (today's behavior).
10
- */
11
6
  usdValue?: string | null;
12
7
  }
13
8
  interface AssetCardProps {
14
- /** Asset detail link. */
15
9
  href: string;
16
- /** Asset title. */
17
10
  name: string;
18
- /** Raw image (ipfs:// or http) — resolved internally. */
19
11
  image?: string | null;
20
- /** Resolved animation_url — the live on-chain renderer, if any. */
21
12
  animationUrl?: string | null;
22
- /** Caller-computed eligibility for the living-render treatment. */
23
13
  live?: boolean;
24
- /** Secondary line under the title (collection or description). */
25
14
  subtitle?: string | null;
26
- /** IP type (apiValue or label) — renders the icon badge on the footer left. */
27
15
  ipType?: string | null;
28
- /** Listing price; omit/null shows no price. */
29
16
  price?: AssetCardPrice | null;
30
- /** Shown when the image is missing/errors (e.g. token id). */
31
17
  fallbackId?: string | null;
32
- /** Show the "Indexing…" overlay. */
33
18
  indexing?: boolean;
34
- /** Base URL for the ipType badge link. Default "" (relative). */
35
19
  ipTypeBaseUrl?: string;
36
20
  className?: string;
37
21
  }
38
- /**
39
- * The platform's shared asset card — lean and presentational.
40
- *
41
- * Intentionally has no action buttons, dropdowns or dialogs: the image and
42
- * text are the only interactive surface (a single asset link), which keeps
43
- * browse grids and carousels fast even when many cards render. Surfaces that
44
- * need owner/marketplace actions use the richer `TokenCard` / `ListingCard`.
45
- *
46
- * Layout: inset 4:5 artwork (gallery ratio, echoing the Medialane Collection
47
- * Card) with the price as a glass pill on the artwork (the collection cards'
48
- * Floor-pill vocabulary) → one body row: display-face title + optional
49
- * subtitle, with the optional ipType badge inline on the right.
50
- */
51
22
  declare function AssetCard({ href, name, image, animationUrl, live, subtitle, ipType, price, fallbackId, indexing, ipTypeBaseUrl, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
52
23
  declare function AssetCardSkeleton(): react_jsx_runtime.JSX.Element;
53
24
 
@@ -3,51 +3,22 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  interface AssetCardPrice {
4
4
  formatted?: string | null;
5
5
  currency?: string | null;
6
- /**
7
- * Pre-formatted USD equivalent (e.g. "$13.15"), computed by the host from
8
- * its own live rate feed — this package has no price-feed access by
9
- * design. Omit/null renders the crypto amount alone (today's behavior).
10
- */
11
6
  usdValue?: string | null;
12
7
  }
13
8
  interface AssetCardProps {
14
- /** Asset detail link. */
15
9
  href: string;
16
- /** Asset title. */
17
10
  name: string;
18
- /** Raw image (ipfs:// or http) — resolved internally. */
19
11
  image?: string | null;
20
- /** Resolved animation_url — the live on-chain renderer, if any. */
21
12
  animationUrl?: string | null;
22
- /** Caller-computed eligibility for the living-render treatment. */
23
13
  live?: boolean;
24
- /** Secondary line under the title (collection or description). */
25
14
  subtitle?: string | null;
26
- /** IP type (apiValue or label) — renders the icon badge on the footer left. */
27
15
  ipType?: string | null;
28
- /** Listing price; omit/null shows no price. */
29
16
  price?: AssetCardPrice | null;
30
- /** Shown when the image is missing/errors (e.g. token id). */
31
17
  fallbackId?: string | null;
32
- /** Show the "Indexing…" overlay. */
33
18
  indexing?: boolean;
34
- /** Base URL for the ipType badge link. Default "" (relative). */
35
19
  ipTypeBaseUrl?: string;
36
20
  className?: string;
37
21
  }
38
- /**
39
- * The platform's shared asset card — lean and presentational.
40
- *
41
- * Intentionally has no action buttons, dropdowns or dialogs: the image and
42
- * text are the only interactive surface (a single asset link), which keeps
43
- * browse grids and carousels fast even when many cards render. Surfaces that
44
- * need owner/marketplace actions use the richer `TokenCard` / `ListingCard`.
45
- *
46
- * Layout: inset 4:5 artwork (gallery ratio, echoing the Medialane Collection
47
- * Card) with the price as a glass pill on the artwork (the collection cards'
48
- * Floor-pill vocabulary) → one body row: display-face title + optional
49
- * subtitle, with the optional ipType badge inline on the right.
50
- */
51
22
  declare function AssetCard({ href, name, image, animationUrl, live, subtitle, ipType, price, fallbackId, indexing, ipTypeBaseUrl, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
52
23
  declare function AssetCardSkeleton(): react_jsx_runtime.JSX.Element;
53
24
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\n\nexport interface AssetCardPrice {\n formatted?: string | null;\n currency?: string | null;\n /**\n * Pre-formatted USD equivalent (e.g. \"$13.15\"), computed by the host from\n * its own live rate feed — this package has no price-feed access by\n * design. Omit/null renders the crypto amount alone (today's behavior).\n */\n usdValue?: string | null;\n}\n\nexport interface AssetCardProps {\n /** Asset detail link. */\n href: string;\n /** Asset title. */\n name: string;\n /** Raw image (ipfs:// or http) — resolved internally. */\n image?: string | null;\n /** Resolved animation_url — the live on-chain renderer, if any. */\n animationUrl?: string | null;\n /** Caller-computed eligibility for the living-render treatment. */\n live?: boolean;\n /** Secondary line under the title (collection or description). */\n subtitle?: string | null;\n /** IP type (apiValue or label) — renders the icon badge on the footer left. */\n ipType?: string | null;\n /** Listing price; omit/null shows no price. */\n price?: AssetCardPrice | null;\n /** Shown when the image is missing/errors (e.g. token id). */\n fallbackId?: string | null;\n /** Show the \"Indexing…\" overlay. */\n indexing?: boolean;\n /** Base URL for the ipType badge link. Default \"\" (relative). */\n ipTypeBaseUrl?: string;\n className?: string;\n}\n\n/**\n * The platform's shared asset card — lean and presentational.\n *\n * Intentionally has no action buttons, dropdowns or dialogs: the image and\n * text are the only interactive surface (a single asset link), which keeps\n * browse grids and carousels fast even when many cards render. Surfaces that\n * need owner/marketplace actions use the richer `TokenCard` / `ListingCard`.\n *\n * Layout: inset 4:5 artwork (gallery ratio, echoing the Medialane Collection\n * Card) with the price as a glass pill on the artwork (the collection cards'\n * Floor-pill vocabulary) → one body row: display-face title + optional\n * subtitle, with the optional ipType badge inline on the right.\n */\nexport function AssetCard({\n href,\n name,\n image,\n animationUrl,\n live = false,\n subtitle,\n ipType,\n price,\n fallbackId,\n indexing = false,\n ipTypeBaseUrl = \"\",\n className,\n}: AssetCardProps) {\n const resolved = image ? ipfsToHttp(image) : null;\n const hasPrice = !!price?.formatted;\n\n return (\n <div\n className={cn(\n \"card-base group relative flex flex-col w-full transition-colors hover:border-foreground/20\",\n className\n )}\n >\n {/* Artwork — inset with a gallery 4:5 ratio, like the Collection Card */}\n <Link href={href} className=\"block p-1.5 pb-0\">\n <div className=\"relative aspect-[4/5] rounded-[12px] bg-muted overflow-hidden ring-1 ring-border/50\">\n <AnimatedTokenMedia\n image={resolved}\n animationUrl={animationUrl}\n live={live}\n alt={name}\n mode=\"fill\"\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-500 group-hover:scale-105\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-blue/25 via-brand-purple/25 to-brand-rose/25\">\n <span className=\"text-sm font-semibold text-muted-foreground tabular-nums\">\n #{fallbackId ?? \"?\"}\n </span>\n </div>\n }\n />\n\n {/* Price pill — anchored on the artwork, same glass chip as the\n collection cards' Floor pill. Fiat leads when a live rate is\n available; the on-chain amount trails, dimmer, as a secondary\n fact — never a second full-weight number competing for\n attention. Stablecoins collapse to fiat + symbol alone, since\n the crypto amount would just repeat the same figure. */}\n {hasPrice && !indexing && (\n <span className=\"absolute bottom-2 right-2 inline-flex items-center gap-1.5 text-sm font-bold text-white/95 backdrop-blur-md bg-black/40 rounded-full pl-3 pr-3 py-1.5 tabular-nums\">\n <PriceChipContent\n amountFormatted={price!.formatted}\n currency={price!.currency}\n usdValue={price!.usdValue}\n tone=\"overlay-dark\"\n />\n </span>\n )}\n\n {indexing && (\n <div className=\"absolute bottom-0 inset-x-0 flex items-center justify-center gap-1.5 bg-black/50 backdrop-blur-sm py-1.5\">\n <Loader2 className=\"h-3 w-3 animate-spin text-white/70\" />\n <span className=\"text-2xs text-white/70\">Indexing…</span>\n </div>\n )}\n </div>\n </Link>\n\n {/* Body — one tight block: title (+ optional ipType badge inline) and subtitle */}\n <div className=\"flex items-start justify-between gap-2 px-3 py-3\">\n <Link href={href} className=\"block min-w-0 flex-1\">\n <p className=\"text-base font-bold line-clamp-1 leading-snug\">\n {name}\n </p>\n {subtitle && (\n <p className=\"text-xs text-muted-foreground line-clamp-1 leading-snug\">\n {subtitle}\n </p>\n )}\n </Link>\n\n {ipType && (\n <div className=\"shrink-0 mt-0.5\">\n <IpTypeBadge ipType={ipType} size=\"sm\" baseUrl={ipTypeBaseUrl} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function AssetCardSkeleton() {\n return (\n <div className=\"card-base flex flex-col w-full\">\n <div className=\"p-1.5 pb-0\">\n <div className=\"aspect-[4/5] w-full animate-pulse bg-muted rounded-[12px]\" />\n </div>\n <div className=\"px-3 py-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-3.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n </div>\n );\n}\n"],"mappings":";AAgGc,cACE,YADF;AA9Fd,OAAO,UAAU;AACjB,SAAS,eAAe;AACxB,SAAS,UAAU;AACnB,SAAS,kBAAkB;AAC3B,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AAoD5B,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB;AACF,GAAmB;AACjB,QAAM,WAAW,QAAQ,WAAW,KAAK,IAAI;AAC7C,QAAM,WAAW,CAAC,CAAC,OAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGA;AAAA,4BAAC,QAAK,MAAY,WAAU,oBAC1B,+BAAC,SAAI,WAAU,uFACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,UACE,oBAAC,SAAI,WAAU,+HACb,+BAAC,UAAK,WAAU,4DAA2D;AAAA;AAAA,gBACvE,cAAc;AAAA,iBAClB,GACF;AAAA;AAAA,UAEJ;AAAA,UAQC,YAAY,CAAC,YACZ,oBAAC,UAAK,WAAU,sKACd;AAAA,YAAC;AAAA;AAAA,cACC,iBAAiB,MAAO;AAAA,cACxB,UAAU,MAAO;AAAA,cACjB,UAAU,MAAO;AAAA,cACjB,MAAK;AAAA;AAAA,UACP,GACF;AAAA,UAGD,YACC,qBAAC,SAAI,WAAU,4GACb;AAAA,gCAAC,WAAQ,WAAU,sCAAqC;AAAA,YACxD,oBAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,aACpD;AAAA,WAEJ,GACF;AAAA,QAGA,qBAAC,SAAI,WAAU,oDACb;AAAA,+BAAC,QAAK,MAAY,WAAU,wBAC1B;AAAA,gCAAC,OAAE,WAAU,iDACV,gBACH;AAAA,YACC,YACC,oBAAC,OAAE,WAAU,2DACV,oBACH;AAAA,aAEJ;AAAA,UAEC,UACC,oBAAC,SAAI,WAAU,mBACb,8BAAC,eAAY,QAAgB,MAAK,MAAK,SAAS,eAAe,GACjE;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,qBAAC,SAAI,WAAU,kCACb;AAAA,wBAAC,SAAI,WAAU,cACb,8BAAC,SAAI,WAAU,6DAA4D,GAC7E;AAAA,IACA,qBAAC,SAAI,WAAU,yBACb;AAAA,0BAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,oBAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/asset-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { Loader2 } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\n\nexport interface AssetCardPrice {\n formatted?: string | null;\n currency?: string | null;\n\n usdValue?: string | null;\n}\n\nexport interface AssetCardProps {\n\n href: string;\n\n name: string;\n\n image?: string | null;\n\n animationUrl?: string | null;\n\n live?: boolean;\n\n subtitle?: string | null;\n\n ipType?: string | null;\n\n price?: AssetCardPrice | null;\n\n fallbackId?: string | null;\n\n indexing?: boolean;\n\n ipTypeBaseUrl?: string;\n className?: string;\n}\n\nexport function AssetCard({\n href,\n name,\n image,\n animationUrl,\n live = false,\n subtitle,\n ipType,\n price,\n fallbackId,\n indexing = false,\n ipTypeBaseUrl = \"\",\n className,\n}: AssetCardProps) {\n const resolved = image ? ipfsToHttp(image) : null;\n const hasPrice = !!price?.formatted;\n\n return (\n <div\n className={cn(\n \"card-base group relative flex flex-col w-full transition-colors hover:border-foreground/20\",\n className\n )}\n >\n\n <Link href={href} className=\"block p-1.5 pb-0\">\n <div className=\"relative aspect-[4/5] rounded-[12px] bg-muted overflow-hidden ring-1 ring-border/50\">\n <AnimatedTokenMedia\n image={resolved}\n animationUrl={animationUrl}\n live={live}\n alt={name}\n mode=\"fill\"\n sizes=\"(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 22vw\"\n className=\"object-cover transition-transform duration-500 group-hover:scale-105\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-blue/25 via-brand-purple/25 to-brand-rose/25\">\n <span className=\"text-sm font-semibold text-muted-foreground tabular-nums\">\n #{fallbackId ?? \"?\"}\n </span>\n </div>\n }\n />\n\n {hasPrice && !indexing && (\n <span className=\"absolute bottom-2 right-2 inline-flex items-center gap-1.5 text-sm font-bold text-white/95 backdrop-blur-md bg-black/40 rounded-full pl-3 pr-3 py-1.5 tabular-nums\">\n <PriceChipContent\n amountFormatted={price!.formatted}\n currency={price!.currency}\n usdValue={price!.usdValue}\n tone=\"overlay-dark\"\n />\n </span>\n )}\n\n {indexing && (\n <div className=\"absolute bottom-0 inset-x-0 flex items-center justify-center gap-1.5 bg-black/50 backdrop-blur-sm py-1.5\">\n <Loader2 className=\"h-3 w-3 animate-spin text-white/70\" />\n <span className=\"text-2xs text-white/70\">Indexing…</span>\n </div>\n )}\n </div>\n </Link>\n\n <div className=\"flex items-start justify-between gap-2 px-3 py-3\">\n <Link href={href} className=\"block min-w-0 flex-1\">\n <p className=\"text-base font-bold line-clamp-1 leading-snug\">\n {name}\n </p>\n {subtitle && (\n <p className=\"text-xs text-muted-foreground line-clamp-1 leading-snug\">\n {subtitle}\n </p>\n )}\n </Link>\n\n {ipType && (\n <div className=\"shrink-0 mt-0.5\">\n <IpTypeBadge ipType={ipType} size=\"sm\" baseUrl={ipTypeBaseUrl} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function AssetCardSkeleton() {\n return (\n <div className=\"card-base flex flex-col w-full\">\n <div className=\"p-1.5 pb-0\">\n <div className=\"aspect-[4/5] w-full animate-pulse bg-muted rounded-[12px]\" />\n </div>\n <div className=\"px-3 py-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-3.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n </div>\n );\n}\n"],"mappings":";AA+Ec,cACE,YADF;AA7Ed,OAAO,UAAU;AACjB,SAAS,eAAe;AACxB,SAAS,UAAU;AACnB,SAAS,kBAAkB;AAC3B,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AAmC5B,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB;AACF,GAAmB;AACjB,QAAM,WAAW,QAAQ,WAAW,KAAK,IAAI;AAC7C,QAAM,WAAW,CAAC,CAAC,OAAO;AAE1B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAGA;AAAA,4BAAC,QAAK,MAAY,WAAU,oBAC1B,+BAAC,SAAI,WAAU,uFACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,KAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,UACE,oBAAC,SAAI,WAAU,+HACb,+BAAC,UAAK,WAAU,4DAA2D;AAAA;AAAA,gBACvE,cAAc;AAAA,iBAClB,GACF;AAAA;AAAA,UAEJ;AAAA,UAEC,YAAY,CAAC,YACZ,oBAAC,UAAK,WAAU,sKACd;AAAA,YAAC;AAAA;AAAA,cACC,iBAAiB,MAAO;AAAA,cACxB,UAAU,MAAO;AAAA,cACjB,UAAU,MAAO;AAAA,cACjB,MAAK;AAAA;AAAA,UACP,GACF;AAAA,UAGD,YACC,qBAAC,SAAI,WAAU,4GACb;AAAA,gCAAC,WAAQ,WAAU,sCAAqC;AAAA,YACxD,oBAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,aACpD;AAAA,WAEJ,GACF;AAAA,QAEA,qBAAC,SAAI,WAAU,oDACb;AAAA,+BAAC,QAAK,MAAY,WAAU,wBAC1B;AAAA,gCAAC,OAAE,WAAU,iDACV,gBACH;AAAA,YACC,YACC,oBAAC,OAAE,WAAU,2DACV,oBACH;AAAA,aAEJ;AAAA,UAEC,UACC,oBAAC,SAAI,WAAU,mBACb,8BAAC,eAAY,QAAgB,MAAK,MAAK,SAAS,eAAe,GACjE;AAAA,WAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,qBAAC,SAAI,WAAU,kCACb;AAAA,wBAAC,SAAI,WAAU,cACb,8BAAC,SAAI,WAAU,6DAA4D,GAC7E;AAAA,IACA,qBAAC,SAAI,WAAU,yBACb;AAAA,0BAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,oBAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-collection-bar.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { ArrowRight } from \"lucide-react\";\nexport interface AssetCollectionBarSibling {\n tokenId: string;\n /** Already-resolved, ready-to-render src. `null` renders a placeholder. */\n image: string | null;\n}\n\nexport interface AssetCollectionBarProps {\n collectionName: string;\n collectionImage?: string | null;\n collectionHref: string;\n currentTokenId: string;\n siblingTokens: AssetCollectionBarSibling[];\n onNavigate: (tokenId: string) => void;\n}\n\nexport function AssetCollectionBar({\n collectionName,\n collectionImage,\n collectionHref,\n currentTokenId,\n siblingTokens,\n onNavigate,\n}: AssetCollectionBarProps) {\n // Show up to 4 OTHER tokens — never the current one\n const others = siblingTokens.filter(\n (t) => String(t.tokenId) !== String(currentTokenId)\n );\n const preview = others.slice(0, 4);\n\n return (\n <div className=\"rounded-2xl bg-gradient-to-br from-muted/40 to-transparent overflow-hidden p-4 space-y-3\">\n\n {/* Collection identity — links to collection page */}\n <Link href={collectionHref} className=\"flex items-center gap-3 group min-w-0\">\n <div className=\"relative h-11 w-11 rounded-xl overflow-hidden shrink-0 bg-gradient-to-br from-brand-blue/20 to-brand-purple/20 ring-1 ring-border/30 group-hover:ring-border/60 transition-all\">\n {collectionImage ? (\n <Image src={collectionImage} alt=\"\" fill className=\"object-cover\" unoptimized />\n ) : null}\n </div>\n <p className=\"text-base font-bold leading-tight truncate min-w-0 flex-1 group-hover:text-primary transition-colors\">\n {collectionName}\n </p>\n <div className=\"shrink-0 h-8 w-8 rounded-xl bg-background/40 flex items-center justify-center text-muted-foreground group-hover:bg-background/70 group-hover:text-foreground transition-all\">\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </div>\n </Link>\n\n {/* Grid — always 4 columns so thumbnails stay the same size regardless of count */}\n {preview.length > 0 && (\n <div className=\"grid grid-cols-4 gap-1.5\">\n {Array.from({ length: 4 }).map((_, i) => {\n const sibling = preview[i];\n if (!sibling) {\n return <div key={`empty-${i}`} className=\"aspect-square rounded-xl bg-muted/20\" />;\n }\n return (\n <button\n key={sibling.tokenId}\n type=\"button\"\n onClick={() => onNavigate(sibling.tokenId)}\n className=\"group relative aspect-square rounded-xl overflow-hidden transition-all duration-200 hover:scale-[1.02] active:scale-95\"\n >\n {sibling.image ? (\n <Image\n src={sibling.image}\n alt=\"\"\n fill\n className=\"object-cover transition-transform duration-300 group-hover:scale-105\"\n unoptimized\n />\n ) : (\n <div className=\"h-full w-full bg-muted\" />\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCM;AApCN,mBAAkB;AAClB,kBAAiB;AACjB,0BAA2B;AAgBpB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAE1B,QAAM,SAAS,cAAc;AAAA,IAC3B,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,OAAO,cAAc;AAAA,EACpD;AACA,QAAM,UAAU,OAAO,MAAM,GAAG,CAAC;AAEjC,SACE,6CAAC,SAAI,WAAU,4FAGb;AAAA,iDAAC,YAAAA,SAAA,EAAK,MAAM,gBAAgB,WAAU,yCACpC;AAAA,kDAAC,SAAI,WAAU,kLACZ,4BACC,4CAAC,aAAAC,SAAA,EAAM,KAAK,iBAAiB,KAAI,IAAG,MAAI,MAAC,WAAU,gBAAe,aAAW,MAAC,IAC5E,MACN;AAAA,MACA,4CAAC,OAAE,WAAU,wGACV,0BACH;AAAA,MACA,4CAAC,SAAI,WAAU,+KACb,sDAAC,kCAAW,WAAU,eAAc,GACtC;AAAA,OACF;AAAA,IAGC,QAAQ,SAAS,KAChB,4CAAC,SAAI,WAAU,4BACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACvC,YAAM,UAAU,QAAQ,CAAC;AACzB,UAAI,CAAC,SAAS;AACZ,eAAO,4CAAC,SAAuB,WAAU,0CAAxB,SAAS,CAAC,EAAqD;AAAA,MAClF;AACA,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAAS,MAAM,WAAW,QAAQ,OAAO;AAAA,UACzC,WAAU;AAAA,UAET,kBAAQ,QACP;AAAA,YAAC,aAAAA;AAAA,YAAA;AAAA,cACC,KAAK,QAAQ;AAAA,cACb,KAAI;AAAA,cACJ,MAAI;AAAA,cACJ,WAAU;AAAA,cACV,aAAW;AAAA;AAAA,UACb,IAEA,4CAAC,SAAI,WAAU,0BAAyB;AAAA;AAAA,QAdrC,QAAQ;AAAA,MAgBf;AAAA,IAEJ,CAAC,GACH;AAAA,KAEJ;AAEJ;","names":["Link","Image"]}
1
+ {"version":3,"sources":["../../src/components/asset-collection-bar.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { ArrowRight } from \"lucide-react\";\nexport interface AssetCollectionBarSibling {\n tokenId: string;\n\n image: string | null;\n}\n\nexport interface AssetCollectionBarProps {\n collectionName: string;\n collectionImage?: string | null;\n collectionHref: string;\n currentTokenId: string;\n siblingTokens: AssetCollectionBarSibling[];\n onNavigate: (tokenId: string) => void;\n}\n\nexport function AssetCollectionBar({\n collectionName,\n collectionImage,\n collectionHref,\n currentTokenId,\n siblingTokens,\n onNavigate,\n}: AssetCollectionBarProps) {\n\n const others = siblingTokens.filter(\n (t) => String(t.tokenId) !== String(currentTokenId)\n );\n const preview = others.slice(0, 4);\n\n return (\n <div className=\"rounded-2xl bg-gradient-to-br from-muted/40 to-transparent overflow-hidden p-4 space-y-3\">\n\n <Link href={collectionHref} className=\"flex items-center gap-3 group min-w-0\">\n <div className=\"relative h-11 w-11 rounded-xl overflow-hidden shrink-0 bg-gradient-to-br from-brand-blue/20 to-brand-purple/20 ring-1 ring-border/30 group-hover:ring-border/60 transition-all\">\n {collectionImage ? (\n <Image src={collectionImage} alt=\"\" fill className=\"object-cover\" unoptimized />\n ) : null}\n </div>\n <p className=\"text-base font-bold leading-tight truncate min-w-0 flex-1 group-hover:text-primary transition-colors\">\n {collectionName}\n </p>\n <div className=\"shrink-0 h-8 w-8 rounded-xl bg-background/40 flex items-center justify-center text-muted-foreground group-hover:bg-background/70 group-hover:text-foreground transition-all\">\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </div>\n </Link>\n\n {preview.length > 0 && (\n <div className=\"grid grid-cols-4 gap-1.5\">\n {Array.from({ length: 4 }).map((_, i) => {\n const sibling = preview[i];\n if (!sibling) {\n return <div key={`empty-${i}`} className=\"aspect-square rounded-xl bg-muted/20\" />;\n }\n return (\n <button\n key={sibling.tokenId}\n type=\"button\"\n onClick={() => onNavigate(sibling.tokenId)}\n className=\"group relative aspect-square rounded-xl overflow-hidden transition-all duration-200 hover:scale-[1.02] active:scale-95\"\n >\n {sibling.image ? (\n <Image\n src={sibling.image}\n alt=\"\"\n fill\n className=\"object-cover transition-transform duration-300 group-hover:scale-105\"\n unoptimized\n />\n ) : (\n <div className=\"h-full w-full bg-muted\" />\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCM;AAnCN,mBAAkB;AAClB,kBAAiB;AACjB,0BAA2B;AAgBpB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAE1B,QAAM,SAAS,cAAc;AAAA,IAC3B,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,OAAO,cAAc;AAAA,EACpD;AACA,QAAM,UAAU,OAAO,MAAM,GAAG,CAAC;AAEjC,SACE,6CAAC,SAAI,WAAU,4FAEb;AAAA,iDAAC,YAAAA,SAAA,EAAK,MAAM,gBAAgB,WAAU,yCACpC;AAAA,kDAAC,SAAI,WAAU,kLACZ,4BACC,4CAAC,aAAAC,SAAA,EAAM,KAAK,iBAAiB,KAAI,IAAG,MAAI,MAAC,WAAU,gBAAe,aAAW,MAAC,IAC5E,MACN;AAAA,MACA,4CAAC,OAAE,WAAU,wGACV,0BACH;AAAA,MACA,4CAAC,SAAI,WAAU,+KACb,sDAAC,kCAAW,WAAU,eAAc,GACtC;AAAA,OACF;AAAA,IAEC,QAAQ,SAAS,KAChB,4CAAC,SAAI,WAAU,4BACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACvC,YAAM,UAAU,QAAQ,CAAC;AACzB,UAAI,CAAC,SAAS;AACZ,eAAO,4CAAC,SAAuB,WAAU,0CAAxB,SAAS,CAAC,EAAqD;AAAA,MAClF;AACA,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAAS,MAAM,WAAW,QAAQ,OAAO;AAAA,UACzC,WAAU;AAAA,UAET,kBAAQ,QACP;AAAA,YAAC,aAAAA;AAAA,YAAA;AAAA,cACC,KAAK,QAAQ;AAAA,cACb,KAAI;AAAA,cACJ,MAAI;AAAA,cACJ,WAAU;AAAA,cACV,aAAW;AAAA;AAAA,UACb,IAEA,4CAAC,SAAI,WAAU,0BAAyB;AAAA;AAAA,QAdrC,QAAQ;AAAA,MAgBf;AAAA,IAEJ,CAAC,GACH;AAAA,KAEJ;AAEJ;","names":["Link","Image"]}
@@ -2,7 +2,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
 
3
3
  interface AssetCollectionBarSibling {
4
4
  tokenId: string;
5
- /** Already-resolved, ready-to-render src. `null` renders a placeholder. */
6
5
  image: string | null;
7
6
  }
8
7
  interface AssetCollectionBarProps {
@@ -2,7 +2,6 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
 
3
3
  interface AssetCollectionBarSibling {
4
4
  tokenId: string;
5
- /** Already-resolved, ready-to-render src. `null` renders a placeholder. */
6
5
  image: string | null;
7
6
  }
8
7
  interface AssetCollectionBarProps {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-collection-bar.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { ArrowRight } from \"lucide-react\";\nexport interface AssetCollectionBarSibling {\n tokenId: string;\n /** Already-resolved, ready-to-render src. `null` renders a placeholder. */\n image: string | null;\n}\n\nexport interface AssetCollectionBarProps {\n collectionName: string;\n collectionImage?: string | null;\n collectionHref: string;\n currentTokenId: string;\n siblingTokens: AssetCollectionBarSibling[];\n onNavigate: (tokenId: string) => void;\n}\n\nexport function AssetCollectionBar({\n collectionName,\n collectionImage,\n collectionHref,\n currentTokenId,\n siblingTokens,\n onNavigate,\n}: AssetCollectionBarProps) {\n // Show up to 4 OTHER tokens — never the current one\n const others = siblingTokens.filter(\n (t) => String(t.tokenId) !== String(currentTokenId)\n );\n const preview = others.slice(0, 4);\n\n return (\n <div className=\"rounded-2xl bg-gradient-to-br from-muted/40 to-transparent overflow-hidden p-4 space-y-3\">\n\n {/* Collection identity — links to collection page */}\n <Link href={collectionHref} className=\"flex items-center gap-3 group min-w-0\">\n <div className=\"relative h-11 w-11 rounded-xl overflow-hidden shrink-0 bg-gradient-to-br from-brand-blue/20 to-brand-purple/20 ring-1 ring-border/30 group-hover:ring-border/60 transition-all\">\n {collectionImage ? (\n <Image src={collectionImage} alt=\"\" fill className=\"object-cover\" unoptimized />\n ) : null}\n </div>\n <p className=\"text-base font-bold leading-tight truncate min-w-0 flex-1 group-hover:text-primary transition-colors\">\n {collectionName}\n </p>\n <div className=\"shrink-0 h-8 w-8 rounded-xl bg-background/40 flex items-center justify-center text-muted-foreground group-hover:bg-background/70 group-hover:text-foreground transition-all\">\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </div>\n </Link>\n\n {/* Grid — always 4 columns so thumbnails stay the same size regardless of count */}\n {preview.length > 0 && (\n <div className=\"grid grid-cols-4 gap-1.5\">\n {Array.from({ length: 4 }).map((_, i) => {\n const sibling = preview[i];\n if (!sibling) {\n return <div key={`empty-${i}`} className=\"aspect-square rounded-xl bg-muted/20\" />;\n }\n return (\n <button\n key={sibling.tokenId}\n type=\"button\"\n onClick={() => onNavigate(sibling.tokenId)}\n className=\"group relative aspect-square rounded-xl overflow-hidden transition-all duration-200 hover:scale-[1.02] active:scale-95\"\n >\n {sibling.image ? (\n <Image\n src={sibling.image}\n alt=\"\"\n fill\n className=\"object-cover transition-transform duration-300 group-hover:scale-105\"\n unoptimized\n />\n ) : (\n <div className=\"h-full w-full bg-muted\" />\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";AAsCM,SAGM,KAHN;AApCN,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAgBpB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAE1B,QAAM,SAAS,cAAc;AAAA,IAC3B,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,OAAO,cAAc;AAAA,EACpD;AACA,QAAM,UAAU,OAAO,MAAM,GAAG,CAAC;AAEjC,SACE,qBAAC,SAAI,WAAU,4FAGb;AAAA,yBAAC,QAAK,MAAM,gBAAgB,WAAU,yCACpC;AAAA,0BAAC,SAAI,WAAU,kLACZ,4BACC,oBAAC,SAAM,KAAK,iBAAiB,KAAI,IAAG,MAAI,MAAC,WAAU,gBAAe,aAAW,MAAC,IAC5E,MACN;AAAA,MACA,oBAAC,OAAE,WAAU,wGACV,0BACH;AAAA,MACA,oBAAC,SAAI,WAAU,+KACb,8BAAC,cAAW,WAAU,eAAc,GACtC;AAAA,OACF;AAAA,IAGC,QAAQ,SAAS,KAChB,oBAAC,SAAI,WAAU,4BACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACvC,YAAM,UAAU,QAAQ,CAAC;AACzB,UAAI,CAAC,SAAS;AACZ,eAAO,oBAAC,SAAuB,WAAU,0CAAxB,SAAS,CAAC,EAAqD;AAAA,MAClF;AACA,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAAS,MAAM,WAAW,QAAQ,OAAO;AAAA,UACzC,WAAU;AAAA,UAET,kBAAQ,QACP;AAAA,YAAC;AAAA;AAAA,cACC,KAAK,QAAQ;AAAA,cACb,KAAI;AAAA,cACJ,MAAI;AAAA,cACJ,WAAU;AAAA,cACV,aAAW;AAAA;AAAA,UACb,IAEA,oBAAC,SAAI,WAAU,0BAAyB;AAAA;AAAA,QAdrC,QAAQ;AAAA,MAgBf;AAAA,IAEJ,CAAC,GACH;AAAA,KAEJ;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/asset-collection-bar.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { ArrowRight } from \"lucide-react\";\nexport interface AssetCollectionBarSibling {\n tokenId: string;\n\n image: string | null;\n}\n\nexport interface AssetCollectionBarProps {\n collectionName: string;\n collectionImage?: string | null;\n collectionHref: string;\n currentTokenId: string;\n siblingTokens: AssetCollectionBarSibling[];\n onNavigate: (tokenId: string) => void;\n}\n\nexport function AssetCollectionBar({\n collectionName,\n collectionImage,\n collectionHref,\n currentTokenId,\n siblingTokens,\n onNavigate,\n}: AssetCollectionBarProps) {\n\n const others = siblingTokens.filter(\n (t) => String(t.tokenId) !== String(currentTokenId)\n );\n const preview = others.slice(0, 4);\n\n return (\n <div className=\"rounded-2xl bg-gradient-to-br from-muted/40 to-transparent overflow-hidden p-4 space-y-3\">\n\n <Link href={collectionHref} className=\"flex items-center gap-3 group min-w-0\">\n <div className=\"relative h-11 w-11 rounded-xl overflow-hidden shrink-0 bg-gradient-to-br from-brand-blue/20 to-brand-purple/20 ring-1 ring-border/30 group-hover:ring-border/60 transition-all\">\n {collectionImage ? (\n <Image src={collectionImage} alt=\"\" fill className=\"object-cover\" unoptimized />\n ) : null}\n </div>\n <p className=\"text-base font-bold leading-tight truncate min-w-0 flex-1 group-hover:text-primary transition-colors\">\n {collectionName}\n </p>\n <div className=\"shrink-0 h-8 w-8 rounded-xl bg-background/40 flex items-center justify-center text-muted-foreground group-hover:bg-background/70 group-hover:text-foreground transition-all\">\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </div>\n </Link>\n\n {preview.length > 0 && (\n <div className=\"grid grid-cols-4 gap-1.5\">\n {Array.from({ length: 4 }).map((_, i) => {\n const sibling = preview[i];\n if (!sibling) {\n return <div key={`empty-${i}`} className=\"aspect-square rounded-xl bg-muted/20\" />;\n }\n return (\n <button\n key={sibling.tokenId}\n type=\"button\"\n onClick={() => onNavigate(sibling.tokenId)}\n className=\"group relative aspect-square rounded-xl overflow-hidden transition-all duration-200 hover:scale-[1.02] active:scale-95\"\n >\n {sibling.image ? (\n <Image\n src={sibling.image}\n alt=\"\"\n fill\n className=\"object-cover transition-transform duration-300 group-hover:scale-105\"\n unoptimized\n />\n ) : (\n <div className=\"h-full w-full bg-muted\" />\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";AAqCM,SAGM,KAHN;AAnCN,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAgBpB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAE1B,QAAM,SAAS,cAAc;AAAA,IAC3B,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,OAAO,cAAc;AAAA,EACpD;AACA,QAAM,UAAU,OAAO,MAAM,GAAG,CAAC;AAEjC,SACE,qBAAC,SAAI,WAAU,4FAEb;AAAA,yBAAC,QAAK,MAAM,gBAAgB,WAAU,yCACpC;AAAA,0BAAC,SAAI,WAAU,kLACZ,4BACC,oBAAC,SAAM,KAAK,iBAAiB,KAAI,IAAG,MAAI,MAAC,WAAU,gBAAe,aAAW,MAAC,IAC5E,MACN;AAAA,MACA,oBAAC,OAAE,WAAU,wGACV,0BACH;AAAA,MACA,oBAAC,SAAI,WAAU,+KACb,8BAAC,cAAW,WAAU,eAAc,GACtC;AAAA,OACF;AAAA,IAEC,QAAQ,SAAS,KAChB,oBAAC,SAAI,WAAU,4BACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AACvC,YAAM,UAAU,QAAQ,CAAC;AACzB,UAAI,CAAC,SAAS;AACZ,eAAO,oBAAC,SAAuB,WAAU,0CAAxB,SAAS,CAAC,EAAqD;AAAA,MAClF;AACA,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAAS,MAAM,WAAW,QAAQ,OAAO;AAAA,UACzC,WAAU;AAAA,UAET,kBAAQ,QACP;AAAA,YAAC;AAAA;AAAA,cACC,KAAK,QAAQ;AAAA,cACb,KAAI;AAAA,cACJ,MAAI;AAAA,cACJ,WAAU;AAAA,cACV,aAAW;AAAA;AAAA,UACb,IAEA,oBAAC,SAAI,WAAU,0BAAyB;AAAA;AAAA,QAdrC,QAAQ;AAAA,MAgBf;AAAA,IAEJ,CAAC,GACH;AAAA,KAEJ;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-license-summary.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { Bot, DollarSign, GitBranch, Globe } from \"lucide-react\";\nimport { licenseSummary } from \"../utils/license-summary.js\";\n\ntype AssetAttribute = { trait_type?: string; value?: string };\n\n/**\n * Human-first license callout for the asset hero column. Leads with one\n * plain-language sentence (the same one the metadata implies), then a row of\n * glanceable fact pills — so a buyer understands the rights at a glance without\n * digging into the Overview tab. The detailed receipts (full license bento +\n * worldwide-protection banner) still live in the Overview tab. Renders nothing\n * when the asset carries no license data.\n */\nexport function AssetLicenseSummary({ attributes }: { attributes: AssetAttribute[] }) {\n const summary = licenseSummary(attributes);\n if (!summary) return null;\n\n const get = (key: string) =>\n attributes.find((a) => a.trait_type?.toLowerCase() === key.toLowerCase())?.value;\n\n const commercialRaw = get(\"Commercial Use\");\n const derivatives = (get(\"Derivatives\") ?? \"\").toLowerCase();\n const ai = (get(\"AI Policy\") ?? get(\"AI & Data Mining\") ?? \"\").toLowerCase();\n const territory = get(\"Territory\");\n\n const pills: { icon: ReactNode; label: string }[] = [];\n if (commercialRaw) {\n pills.push({\n icon: <DollarSign className=\"h-3.5 w-3.5\" />,\n label: commercialRaw.toLowerCase() === \"yes\" ? \"Commercial use\" : \"Non-commercial\",\n });\n }\n if (derivatives) {\n pills.push({\n icon: <GitBranch className=\"h-3.5 w-3.5\" />,\n label: derivatives === \"not allowed\" ? \"No remixing\" : \"Remixable\",\n });\n }\n if (ai) {\n pills.push({\n icon: <Bot className=\"h-3.5 w-3.5\" />,\n label: ai.includes(\"not\") ? \"No AI training\" : \"AI allowed\",\n });\n }\n if (territory) {\n pills.push({ icon: <Globe className=\"h-3.5 w-3.5\" />, label: territory });\n }\n\n return (\n <div className=\"space-y-2.5\">\n <p className=\"text-2xs font-medium text-muted-foreground\">License</p>\n <p className=\"text-base font-medium leading-relaxed text-foreground/90\">{summary}</p>\n {pills.length > 0 ? (\n <div className=\"flex flex-wrap gap-2 pt-0.5\">\n {pills.map((pill) => (\n <span\n key={pill.label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-xs font-medium text-foreground/80\"\n >\n {pill.icon}\n {pill.label}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BY;AA5BZ,0BAAkD;AAClD,6BAA+B;AAYxB,SAAS,oBAAoB,EAAE,WAAW,GAAqC;AACpF,QAAM,cAAU,uCAAe,UAAU;AACzC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,MAAM,CAAC,QACX,WAAW,KAAK,CAAC,MAAM,EAAE,YAAY,YAAY,MAAM,IAAI,YAAY,CAAC,GAAG;AAE7E,QAAM,gBAAgB,IAAI,gBAAgB;AAC1C,QAAM,eAAe,IAAI,aAAa,KAAK,IAAI,YAAY;AAC3D,QAAM,MAAM,IAAI,WAAW,KAAK,IAAI,kBAAkB,KAAK,IAAI,YAAY;AAC3E,QAAM,YAAY,IAAI,WAAW;AAEjC,QAAM,QAA8C,CAAC;AACrD,MAAI,eAAe;AACjB,UAAM,KAAK;AAAA,MACT,MAAM,4CAAC,kCAAW,WAAU,eAAc;AAAA,MAC1C,OAAO,cAAc,YAAY,MAAM,QAAQ,mBAAmB;AAAA,IACpE,CAAC;AAAA,EACH;AACA,MAAI,aAAa;AACf,UAAM,KAAK;AAAA,MACT,MAAM,4CAAC,iCAAU,WAAU,eAAc;AAAA,MACzC,OAAO,gBAAgB,gBAAgB,gBAAgB;AAAA,IACzD,CAAC;AAAA,EACH;AACA,MAAI,IAAI;AACN,UAAM,KAAK;AAAA,MACT,MAAM,4CAAC,2BAAI,WAAU,eAAc;AAAA,MACnC,OAAO,GAAG,SAAS,KAAK,IAAI,mBAAmB;AAAA,IACjD,CAAC;AAAA,EACH;AACA,MAAI,WAAW;AACb,UAAM,KAAK,EAAE,MAAM,4CAAC,6BAAM,WAAU,eAAc,GAAI,OAAO,UAAU,CAAC;AAAA,EAC1E;AAEA,SACE,6CAAC,SAAI,WAAU,eACb;AAAA,gDAAC,OAAE,WAAU,8CAA6C,qBAAO;AAAA,IACjE,4CAAC,OAAE,WAAU,4DAA4D,mBAAQ;AAAA,IAChF,MAAM,SAAS,IACd,4CAAC,SAAI,WAAU,+BACZ,gBAAM,IAAI,CAAC,SACV;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QAET;AAAA,eAAK;AAAA,UACL,KAAK;AAAA;AAAA;AAAA,MAJD,KAAK;AAAA,IAKZ,CACD,GACH,IACE;AAAA,KACN;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/asset-license-summary.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { Bot, DollarSign, GitBranch, Globe } from \"lucide-react\";\nimport { licenseSummary } from \"../utils/license-summary.js\";\n\ntype AssetAttribute = { trait_type?: string; value?: string };\n\nexport function AssetLicenseSummary({ attributes }: { attributes: AssetAttribute[] }) {\n const summary = licenseSummary(attributes);\n if (!summary) return null;\n\n const get = (key: string) =>\n attributes.find((a) => a.trait_type?.toLowerCase() === key.toLowerCase())?.value;\n\n const commercialRaw = get(\"Commercial Use\");\n const derivatives = (get(\"Derivatives\") ?? \"\").toLowerCase();\n const ai = (get(\"AI Policy\") ?? get(\"AI & Data Mining\") ?? \"\").toLowerCase();\n const territory = get(\"Territory\");\n\n const pills: { icon: ReactNode; label: string }[] = [];\n if (commercialRaw) {\n pills.push({\n icon: <DollarSign className=\"h-3.5 w-3.5\" />,\n label: commercialRaw.toLowerCase() === \"yes\" ? \"Commercial use\" : \"Non-commercial\",\n });\n }\n if (derivatives) {\n pills.push({\n icon: <GitBranch className=\"h-3.5 w-3.5\" />,\n label: derivatives === \"not allowed\" ? \"No remixing\" : \"Remixable\",\n });\n }\n if (ai) {\n pills.push({\n icon: <Bot className=\"h-3.5 w-3.5\" />,\n label: ai.includes(\"not\") ? \"No AI training\" : \"AI allowed\",\n });\n }\n if (territory) {\n pills.push({ icon: <Globe className=\"h-3.5 w-3.5\" />, label: territory });\n }\n\n return (\n <div className=\"space-y-2.5\">\n <p className=\"text-2xs font-medium text-muted-foreground\">License</p>\n <p className=\"text-base font-medium leading-relaxed text-foreground/90\">{summary}</p>\n {pills.length > 0 ? (\n <div className=\"flex flex-wrap gap-2 pt-0.5\">\n {pills.map((pill) => (\n <span\n key={pill.label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-xs font-medium text-foreground/80\"\n >\n {pill.icon}\n {pill.label}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBY;AApBZ,0BAAkD;AAClD,6BAA+B;AAIxB,SAAS,oBAAoB,EAAE,WAAW,GAAqC;AACpF,QAAM,cAAU,uCAAe,UAAU;AACzC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,MAAM,CAAC,QACX,WAAW,KAAK,CAAC,MAAM,EAAE,YAAY,YAAY,MAAM,IAAI,YAAY,CAAC,GAAG;AAE7E,QAAM,gBAAgB,IAAI,gBAAgB;AAC1C,QAAM,eAAe,IAAI,aAAa,KAAK,IAAI,YAAY;AAC3D,QAAM,MAAM,IAAI,WAAW,KAAK,IAAI,kBAAkB,KAAK,IAAI,YAAY;AAC3E,QAAM,YAAY,IAAI,WAAW;AAEjC,QAAM,QAA8C,CAAC;AACrD,MAAI,eAAe;AACjB,UAAM,KAAK;AAAA,MACT,MAAM,4CAAC,kCAAW,WAAU,eAAc;AAAA,MAC1C,OAAO,cAAc,YAAY,MAAM,QAAQ,mBAAmB;AAAA,IACpE,CAAC;AAAA,EACH;AACA,MAAI,aAAa;AACf,UAAM,KAAK;AAAA,MACT,MAAM,4CAAC,iCAAU,WAAU,eAAc;AAAA,MACzC,OAAO,gBAAgB,gBAAgB,gBAAgB;AAAA,IACzD,CAAC;AAAA,EACH;AACA,MAAI,IAAI;AACN,UAAM,KAAK;AAAA,MACT,MAAM,4CAAC,2BAAI,WAAU,eAAc;AAAA,MACnC,OAAO,GAAG,SAAS,KAAK,IAAI,mBAAmB;AAAA,IACjD,CAAC;AAAA,EACH;AACA,MAAI,WAAW;AACb,UAAM,KAAK,EAAE,MAAM,4CAAC,6BAAM,WAAU,eAAc,GAAI,OAAO,UAAU,CAAC;AAAA,EAC1E;AAEA,SACE,6CAAC,SAAI,WAAU,eACb;AAAA,gDAAC,OAAE,WAAU,8CAA6C,qBAAO;AAAA,IACjE,4CAAC,OAAE,WAAU,4DAA4D,mBAAQ;AAAA,IAChF,MAAM,SAAS,IACd,4CAAC,SAAI,WAAU,+BACZ,gBAAM,IAAI,CAAC,SACV;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QAET;AAAA,eAAK;AAAA,UACL,KAAK;AAAA;AAAA;AAAA,MAJD,KAAK;AAAA,IAKZ,CACD,GACH,IACE;AAAA,KACN;AAEJ;","names":[]}
@@ -4,14 +4,6 @@ type AssetAttribute = {
4
4
  trait_type?: string;
5
5
  value?: string;
6
6
  };
7
- /**
8
- * Human-first license callout for the asset hero column. Leads with one
9
- * plain-language sentence (the same one the metadata implies), then a row of
10
- * glanceable fact pills — so a buyer understands the rights at a glance without
11
- * digging into the Overview tab. The detailed receipts (full license bento +
12
- * worldwide-protection banner) still live in the Overview tab. Renders nothing
13
- * when the asset carries no license data.
14
- */
15
7
  declare function AssetLicenseSummary({ attributes }: {
16
8
  attributes: AssetAttribute[];
17
9
  }): react_jsx_runtime.JSX.Element | null;
@@ -4,14 +4,6 @@ type AssetAttribute = {
4
4
  trait_type?: string;
5
5
  value?: string;
6
6
  };
7
- /**
8
- * Human-first license callout for the asset hero column. Leads with one
9
- * plain-language sentence (the same one the metadata implies), then a row of
10
- * glanceable fact pills — so a buyer understands the rights at a glance without
11
- * digging into the Overview tab. The detailed receipts (full license bento +
12
- * worldwide-protection banner) still live in the Overview tab. Renders nothing
13
- * when the asset carries no license data.
14
- */
15
7
  declare function AssetLicenseSummary({ attributes }: {
16
8
  attributes: AssetAttribute[];
17
9
  }): react_jsx_runtime.JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-license-summary.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { Bot, DollarSign, GitBranch, Globe } from \"lucide-react\";\nimport { licenseSummary } from \"../utils/license-summary.js\";\n\ntype AssetAttribute = { trait_type?: string; value?: string };\n\n/**\n * Human-first license callout for the asset hero column. Leads with one\n * plain-language sentence (the same one the metadata implies), then a row of\n * glanceable fact pills — so a buyer understands the rights at a glance without\n * digging into the Overview tab. The detailed receipts (full license bento +\n * worldwide-protection banner) still live in the Overview tab. Renders nothing\n * when the asset carries no license data.\n */\nexport function AssetLicenseSummary({ attributes }: { attributes: AssetAttribute[] }) {\n const summary = licenseSummary(attributes);\n if (!summary) return null;\n\n const get = (key: string) =>\n attributes.find((a) => a.trait_type?.toLowerCase() === key.toLowerCase())?.value;\n\n const commercialRaw = get(\"Commercial Use\");\n const derivatives = (get(\"Derivatives\") ?? \"\").toLowerCase();\n const ai = (get(\"AI Policy\") ?? get(\"AI & Data Mining\") ?? \"\").toLowerCase();\n const territory = get(\"Territory\");\n\n const pills: { icon: ReactNode; label: string }[] = [];\n if (commercialRaw) {\n pills.push({\n icon: <DollarSign className=\"h-3.5 w-3.5\" />,\n label: commercialRaw.toLowerCase() === \"yes\" ? \"Commercial use\" : \"Non-commercial\",\n });\n }\n if (derivatives) {\n pills.push({\n icon: <GitBranch className=\"h-3.5 w-3.5\" />,\n label: derivatives === \"not allowed\" ? \"No remixing\" : \"Remixable\",\n });\n }\n if (ai) {\n pills.push({\n icon: <Bot className=\"h-3.5 w-3.5\" />,\n label: ai.includes(\"not\") ? \"No AI training\" : \"AI allowed\",\n });\n }\n if (territory) {\n pills.push({ icon: <Globe className=\"h-3.5 w-3.5\" />, label: territory });\n }\n\n return (\n <div className=\"space-y-2.5\">\n <p className=\"text-2xs font-medium text-muted-foreground\">License</p>\n <p className=\"text-base font-medium leading-relaxed text-foreground/90\">{summary}</p>\n {pills.length > 0 ? (\n <div className=\"flex flex-wrap gap-2 pt-0.5\">\n {pills.map((pill) => (\n <span\n key={pill.label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-xs font-medium text-foreground/80\"\n >\n {pill.icon}\n {pill.label}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";AA+BY,cA2BA,YA3BA;AA5BZ,SAAS,KAAK,YAAY,WAAW,aAAa;AAClD,SAAS,sBAAsB;AAYxB,SAAS,oBAAoB,EAAE,WAAW,GAAqC;AACpF,QAAM,UAAU,eAAe,UAAU;AACzC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,MAAM,CAAC,QACX,WAAW,KAAK,CAAC,MAAM,EAAE,YAAY,YAAY,MAAM,IAAI,YAAY,CAAC,GAAG;AAE7E,QAAM,gBAAgB,IAAI,gBAAgB;AAC1C,QAAM,eAAe,IAAI,aAAa,KAAK,IAAI,YAAY;AAC3D,QAAM,MAAM,IAAI,WAAW,KAAK,IAAI,kBAAkB,KAAK,IAAI,YAAY;AAC3E,QAAM,YAAY,IAAI,WAAW;AAEjC,QAAM,QAA8C,CAAC;AACrD,MAAI,eAAe;AACjB,UAAM,KAAK;AAAA,MACT,MAAM,oBAAC,cAAW,WAAU,eAAc;AAAA,MAC1C,OAAO,cAAc,YAAY,MAAM,QAAQ,mBAAmB;AAAA,IACpE,CAAC;AAAA,EACH;AACA,MAAI,aAAa;AACf,UAAM,KAAK;AAAA,MACT,MAAM,oBAAC,aAAU,WAAU,eAAc;AAAA,MACzC,OAAO,gBAAgB,gBAAgB,gBAAgB;AAAA,IACzD,CAAC;AAAA,EACH;AACA,MAAI,IAAI;AACN,UAAM,KAAK;AAAA,MACT,MAAM,oBAAC,OAAI,WAAU,eAAc;AAAA,MACnC,OAAO,GAAG,SAAS,KAAK,IAAI,mBAAmB;AAAA,IACjD,CAAC;AAAA,EACH;AACA,MAAI,WAAW;AACb,UAAM,KAAK,EAAE,MAAM,oBAAC,SAAM,WAAU,eAAc,GAAI,OAAO,UAAU,CAAC;AAAA,EAC1E;AAEA,SACE,qBAAC,SAAI,WAAU,eACb;AAAA,wBAAC,OAAE,WAAU,8CAA6C,qBAAO;AAAA,IACjE,oBAAC,OAAE,WAAU,4DAA4D,mBAAQ;AAAA,IAChF,MAAM,SAAS,IACd,oBAAC,SAAI,WAAU,+BACZ,gBAAM,IAAI,CAAC,SACV;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QAET;AAAA,eAAK;AAAA,UACL,KAAK;AAAA;AAAA;AAAA,MAJD,KAAK;AAAA,IAKZ,CACD,GACH,IACE;AAAA,KACN;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/asset-license-summary.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { Bot, DollarSign, GitBranch, Globe } from \"lucide-react\";\nimport { licenseSummary } from \"../utils/license-summary.js\";\n\ntype AssetAttribute = { trait_type?: string; value?: string };\n\nexport function AssetLicenseSummary({ attributes }: { attributes: AssetAttribute[] }) {\n const summary = licenseSummary(attributes);\n if (!summary) return null;\n\n const get = (key: string) =>\n attributes.find((a) => a.trait_type?.toLowerCase() === key.toLowerCase())?.value;\n\n const commercialRaw = get(\"Commercial Use\");\n const derivatives = (get(\"Derivatives\") ?? \"\").toLowerCase();\n const ai = (get(\"AI Policy\") ?? get(\"AI & Data Mining\") ?? \"\").toLowerCase();\n const territory = get(\"Territory\");\n\n const pills: { icon: ReactNode; label: string }[] = [];\n if (commercialRaw) {\n pills.push({\n icon: <DollarSign className=\"h-3.5 w-3.5\" />,\n label: commercialRaw.toLowerCase() === \"yes\" ? \"Commercial use\" : \"Non-commercial\",\n });\n }\n if (derivatives) {\n pills.push({\n icon: <GitBranch className=\"h-3.5 w-3.5\" />,\n label: derivatives === \"not allowed\" ? \"No remixing\" : \"Remixable\",\n });\n }\n if (ai) {\n pills.push({\n icon: <Bot className=\"h-3.5 w-3.5\" />,\n label: ai.includes(\"not\") ? \"No AI training\" : \"AI allowed\",\n });\n }\n if (territory) {\n pills.push({ icon: <Globe className=\"h-3.5 w-3.5\" />, label: territory });\n }\n\n return (\n <div className=\"space-y-2.5\">\n <p className=\"text-2xs font-medium text-muted-foreground\">License</p>\n <p className=\"text-base font-medium leading-relaxed text-foreground/90\">{summary}</p>\n {pills.length > 0 ? (\n <div className=\"flex flex-wrap gap-2 pt-0.5\">\n {pills.map((pill) => (\n <span\n key={pill.label}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border/60 bg-muted/30 px-3 py-1 text-xs font-medium text-foreground/80\"\n >\n {pill.icon}\n {pill.label}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";AAuBY,cA2BA,YA3BA;AApBZ,SAAS,KAAK,YAAY,WAAW,aAAa;AAClD,SAAS,sBAAsB;AAIxB,SAAS,oBAAoB,EAAE,WAAW,GAAqC;AACpF,QAAM,UAAU,eAAe,UAAU;AACzC,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,MAAM,CAAC,QACX,WAAW,KAAK,CAAC,MAAM,EAAE,YAAY,YAAY,MAAM,IAAI,YAAY,CAAC,GAAG;AAE7E,QAAM,gBAAgB,IAAI,gBAAgB;AAC1C,QAAM,eAAe,IAAI,aAAa,KAAK,IAAI,YAAY;AAC3D,QAAM,MAAM,IAAI,WAAW,KAAK,IAAI,kBAAkB,KAAK,IAAI,YAAY;AAC3E,QAAM,YAAY,IAAI,WAAW;AAEjC,QAAM,QAA8C,CAAC;AACrD,MAAI,eAAe;AACjB,UAAM,KAAK;AAAA,MACT,MAAM,oBAAC,cAAW,WAAU,eAAc;AAAA,MAC1C,OAAO,cAAc,YAAY,MAAM,QAAQ,mBAAmB;AAAA,IACpE,CAAC;AAAA,EACH;AACA,MAAI,aAAa;AACf,UAAM,KAAK;AAAA,MACT,MAAM,oBAAC,aAAU,WAAU,eAAc;AAAA,MACzC,OAAO,gBAAgB,gBAAgB,gBAAgB;AAAA,IACzD,CAAC;AAAA,EACH;AACA,MAAI,IAAI;AACN,UAAM,KAAK;AAAA,MACT,MAAM,oBAAC,OAAI,WAAU,eAAc;AAAA,MACnC,OAAO,GAAG,SAAS,KAAK,IAAI,mBAAmB;AAAA,IACjD,CAAC;AAAA,EACH;AACA,MAAI,WAAW;AACb,UAAM,KAAK,EAAE,MAAM,oBAAC,SAAM,WAAU,eAAc,GAAI,OAAO,UAAU,CAAC;AAAA,EAC1E;AAEA,SACE,qBAAC,SAAI,WAAU,eACb;AAAA,wBAAC,OAAE,WAAU,8CAA6C,qBAAO;AAAA,IACjE,oBAAC,OAAE,WAAU,4DAA4D,mBAAQ;AAAA,IAChF,MAAM,SAAS,IACd,oBAAC,SAAI,WAAU,+BACZ,gBAAM,IAAI,CAAC,SACV;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QAET;AAAA,eAAK;AAAA,UACL,KAAK;AAAA;AAAA;AAAA,MAJD,KAAK;AAAA,IAKZ,CACD,GACH,IACE;AAAA,KACN;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-lightbox.tsx"],"sourcesContent":["\"use client\";\n\nimport { X } from \"lucide-react\";\nimport { Dialog, DialogContent, DialogTitle } from \"./dialog.js\";\n\nexport interface AssetLightboxProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n image: string | null;\n alt: string;\n}\n\nexport function AssetLightbox({ open, onOpenChange, image, alt }: AssetLightboxProps) {\n if (!image) return null;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n hideClose\n className=\"max-w-[96vw] w-fit max-h-none overflow-visible border-0 bg-transparent p-0 shadow-none\"\n >\n <DialogTitle className=\"sr-only\">{alt}</DialogTitle>\n <div className=\"relative\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={image}\n alt={alt}\n crossOrigin=\"anonymous\"\n style={{ maxHeight: \"92svh\", maxWidth: \"96vw\" }}\n className=\"block h-auto w-auto object-contain rounded-2xl\"\n />\n <button\n onClick={() => onOpenChange(false)}\n aria-label=\"Close\"\n className=\"absolute top-3 right-3 h-8 w-8 rounded-full bg-black/55 backdrop-blur-sm border border-white/10 flex items-center justify-center text-white/75 hover:text-white hover:bg-black/80 transition-all\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBQ;AAnBR,0BAAkB;AAClB,oBAAmD;AAS5C,SAAS,cAAc,EAAE,MAAM,cAAc,OAAO,IAAI,GAAuB;AACpF,MAAI,CAAC,MAAO,QAAO;AAEnB,SACE,4CAAC,wBAAO,MAAY,cAClB;AAAA,IAAC;AAAA;AAAA,MACC,WAAS;AAAA,MACT,WAAU;AAAA,MAEV;AAAA,oDAAC,6BAAY,WAAU,WAAW,eAAI;AAAA,QACtC,6CAAC,SAAI,WAAU,YAEb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL;AAAA,cACA,aAAY;AAAA,cACZ,OAAO,EAAE,WAAW,SAAS,UAAU,OAAO;AAAA,cAC9C,WAAU;AAAA;AAAA,UACZ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM,aAAa,KAAK;AAAA,cACjC,cAAW;AAAA,cACX,WAAU;AAAA,cAEV,sDAAC,yBAAE,WAAU,WAAU;AAAA;AAAA,UACzB;AAAA,WACF;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/asset-lightbox.tsx"],"sourcesContent":["\"use client\";\n\nimport { X } from \"lucide-react\";\nimport { Dialog, DialogContent, DialogTitle } from \"./dialog.js\";\n\nexport interface AssetLightboxProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n image: string | null;\n alt: string;\n}\n\nexport function AssetLightbox({ open, onOpenChange, image, alt }: AssetLightboxProps) {\n if (!image) return null;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n hideClose\n className=\"max-w-[96vw] w-fit max-h-none overflow-visible border-0 bg-transparent p-0 shadow-none\"\n >\n <DialogTitle className=\"sr-only\">{alt}</DialogTitle>\n <div className=\"relative\">\n\n <img\n src={image}\n alt={alt}\n crossOrigin=\"anonymous\"\n style={{ maxHeight: \"92svh\", maxWidth: \"96vw\" }}\n className=\"block h-auto w-auto object-contain rounded-2xl\"\n />\n <button\n onClick={() => onOpenChange(false)}\n aria-label=\"Close\"\n className=\"absolute top-3 right-3 h-8 w-8 rounded-full bg-black/55 backdrop-blur-sm border border-white/10 flex items-center justify-center text-white/75 hover:text-white hover:bg-black/80 transition-all\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBQ;AAnBR,0BAAkB;AAClB,oBAAmD;AAS5C,SAAS,cAAc,EAAE,MAAM,cAAc,OAAO,IAAI,GAAuB;AACpF,MAAI,CAAC,MAAO,QAAO;AAEnB,SACE,4CAAC,wBAAO,MAAY,cAClB;AAAA,IAAC;AAAA;AAAA,MACC,WAAS;AAAA,MACT,WAAU;AAAA,MAEV;AAAA,oDAAC,6BAAY,WAAU,WAAW,eAAI;AAAA,QACtC,6CAAC,SAAI,WAAU,YAEb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL;AAAA,cACA,aAAY;AAAA,cACZ,OAAO,EAAE,WAAW,SAAS,UAAU,OAAO;AAAA,cAC9C,WAAU;AAAA;AAAA,UACZ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM,aAAa,KAAK;AAAA,cACjC,cAAW;AAAA,cACX,WAAU;AAAA,cAEV,sDAAC,yBAAE,WAAU,WAAU;AAAA;AAAA,UACzB;AAAA,WACF;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-lightbox.tsx"],"sourcesContent":["\"use client\";\n\nimport { X } from \"lucide-react\";\nimport { Dialog, DialogContent, DialogTitle } from \"./dialog.js\";\n\nexport interface AssetLightboxProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n image: string | null;\n alt: string;\n}\n\nexport function AssetLightbox({ open, onOpenChange, image, alt }: AssetLightboxProps) {\n if (!image) return null;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n hideClose\n className=\"max-w-[96vw] w-fit max-h-none overflow-visible border-0 bg-transparent p-0 shadow-none\"\n >\n <DialogTitle className=\"sr-only\">{alt}</DialogTitle>\n <div className=\"relative\">\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={image}\n alt={alt}\n crossOrigin=\"anonymous\"\n style={{ maxHeight: \"92svh\", maxWidth: \"96vw\" }}\n className=\"block h-auto w-auto object-contain rounded-2xl\"\n />\n <button\n onClick={() => onOpenChange(false)}\n aria-label=\"Close\"\n className=\"absolute top-3 right-3 h-8 w-8 rounded-full bg-black/55 backdrop-blur-sm border border-white/10 flex items-center justify-center text-white/75 hover:text-white hover:bg-black/80 transition-all\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";AAqBQ,cACA,YADA;AAnBR,SAAS,SAAS;AAClB,SAAS,QAAQ,eAAe,mBAAmB;AAS5C,SAAS,cAAc,EAAE,MAAM,cAAc,OAAO,IAAI,GAAuB;AACpF,MAAI,CAAC,MAAO,QAAO;AAEnB,SACE,oBAAC,UAAO,MAAY,cAClB;AAAA,IAAC;AAAA;AAAA,MACC,WAAS;AAAA,MACT,WAAU;AAAA,MAEV;AAAA,4BAAC,eAAY,WAAU,WAAW,eAAI;AAAA,QACtC,qBAAC,SAAI,WAAU,YAEb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL;AAAA,cACA,aAAY;AAAA,cACZ,OAAO,EAAE,WAAW,SAAS,UAAU,OAAO;AAAA,cAC9C,WAAU;AAAA;AAAA,UACZ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM,aAAa,KAAK;AAAA,cACjC,cAAW;AAAA,cACX,WAAU;AAAA,cAEV,8BAAC,KAAE,WAAU,WAAU;AAAA;AAAA,UACzB;AAAA,WACF;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/asset-lightbox.tsx"],"sourcesContent":["\"use client\";\n\nimport { X } from \"lucide-react\";\nimport { Dialog, DialogContent, DialogTitle } from \"./dialog.js\";\n\nexport interface AssetLightboxProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n image: string | null;\n alt: string;\n}\n\nexport function AssetLightbox({ open, onOpenChange, image, alt }: AssetLightboxProps) {\n if (!image) return null;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n hideClose\n className=\"max-w-[96vw] w-fit max-h-none overflow-visible border-0 bg-transparent p-0 shadow-none\"\n >\n <DialogTitle className=\"sr-only\">{alt}</DialogTitle>\n <div className=\"relative\">\n\n <img\n src={image}\n alt={alt}\n crossOrigin=\"anonymous\"\n style={{ maxHeight: \"92svh\", maxWidth: \"96vw\" }}\n className=\"block h-auto w-auto object-contain rounded-2xl\"\n />\n <button\n onClick={() => onOpenChange(false)}\n aria-label=\"Close\"\n className=\"absolute top-3 right-3 h-8 w-8 rounded-full bg-black/55 backdrop-blur-sm border border-white/10 flex items-center justify-center text-white/75 hover:text-white hover:bg-black/80 transition-all\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";AAqBQ,cACA,YADA;AAnBR,SAAS,SAAS;AAClB,SAAS,QAAQ,eAAe,mBAAmB;AAS5C,SAAS,cAAc,EAAE,MAAM,cAAc,OAAO,IAAI,GAAuB;AACpF,MAAI,CAAC,MAAO,QAAO;AAEnB,SACE,oBAAC,UAAO,MAAY,cAClB;AAAA,IAAC;AAAA;AAAA,MACC,WAAS;AAAA,MACT,WAAU;AAAA,MAEV;AAAA,4BAAC,eAAY,WAAU,WAAW,eAAI;AAAA,QACtC,qBAAC,SAAI,WAAU,YAEb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL;AAAA,cACA,aAAY;AAAA,cACZ,OAAO,EAAE,WAAW,SAAS,UAAU,OAAO;AAAA,cAC9C,WAAU;AAAA;AAAA,UACZ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,MAAM,aAAa,KAAK;AAAA,cACjC,cAAW;AAAA,cACX,WAAU;AAAA,cAEV,8BAAC,KAAE,WAAU,WAAU;AAAA;AAAA,UACzB;AAAA,WACF;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/asset-marketplace-panel.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n ArrowRightLeft, CheckCircle, Clock, GitBranch, HandCoins, Handshake, Loader2,\n ShoppingCart, Tag, X,\n} from \"lucide-react\";\nimport { CurrencyIcon, CurrencyAmount } from \"./currency-icon.js\";\nimport { AddressDisplay } from \"./address-display.js\";\nimport { ActionButton } from \"./action-button.js\";\nimport { DualPrice } from \"./dual-price.js\";\nimport { formatDisplayPrice, parsePriceDisplay } from \"../utils/format.js\";\nimport { timeUntil } from \"../utils/time.js\";\n\n/** Structural subset of `ApiOrder` (both apps' `@medialane/sdk` types satisfy this). */\nexport interface ApiOrderLike {\n orderHash: string;\n offerer: string;\n endTime: string;\n price: { formatted: string | null; currency: string | null };\n}\n\nexport interface AssetMarketplacePanelProps<T extends ApiOrderLike = ApiOrderLike> {\n cheapest?: T;\n isOwner: boolean;\n isSignedIn: boolean;\n isProcessing: boolean;\n isERC1155: boolean;\n isMarketLoading?: boolean;\n myListing: T | null;\n activeBids: T[];\n walletAddress?: string | null;\n remixEnabled?: boolean;\n showDealOption?: boolean;\n /**\n * Pre-formatted USD equivalent of `cheapest.price` (e.g. \"$12.34\"), computed\n * by the host from its own live rate feed — this package has no price-feed\n * access by design. Omit (or pass null) to render no USD line.\n */\n usdValue?: string | null;\n /** Renders the sign-in/connect-wallet CTA for the given label (e.g. \"Sign in to trade\"). */\n renderAuthAction: (label: string) => ReactNode;\n /** Renders an inline help/info affordance for the given tooltip text. */\n renderHelp: (content: string) => ReactNode;\n onCancelClick: (order: T) => void;\n onAcceptBid: (order: T) => void;\n onOpenListing: () => void;\n onOpenTransfer: () => void;\n onOpenPurchase: (order: T) => void;\n onOpenOffer: () => void;\n onOpenRemix?: () => void;\n onProposeDeal?: () => void;\n /** Non-owner: propose a sponsorship deal on this asset. */\n showSponsorOption?: boolean;\n onOpenSponsorProposal?: () => void;\n /** Owner: open this asset for sponsorship bidding. */\n showSponsorSolicitOption?: boolean;\n onOpenSponsorSolicit?: () => void;\n /** Raw \"0.07 STRK\"-style strings — already resolved by the caller. Shown\n * only in the \"not currently listed\" fallback state (see StatRow) — the\n * active-listing price row dropped them to stay uncluttered. */\n floorPriceRaw?: string | null;\n lastSaleRaw?: string | null;\n}\n\n/** Floor + last-sale stats — each hides itself when its data is absent\n * (no dangling \"—\" placeholders), and the whole row disappears when\n * neither is available. Only used in the \"not currently listed\" state. */\nfunction StatRow({ floorPriceRaw, lastSaleRaw }: { floorPriceRaw?: string | null; lastSaleRaw?: string | null }) {\n const floor = floorPriceRaw ? parsePriceDisplay(floorPriceRaw) : null;\n const lastSale = lastSaleRaw ? parsePriceDisplay(lastSaleRaw) : null;\n if (!floor?.symbol && !lastSale?.symbol) return null;\n return (\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground\">\n {floor?.symbol && (\n <span className=\"flex items-center gap-1.5\">\n <span>Floor</span>\n <CurrencyAmount amount={floor.numStr} symbol={floor.symbol} iconSize={12} amountClassName=\"text-foreground font-semibold\" />\n </span>\n )}\n {lastSale?.symbol && (\n <span className=\"flex items-center gap-1.5\">\n <span>Last sale</span>\n <CurrencyAmount amount={lastSale.numStr} symbol={lastSale.symbol} iconSize={12} amountClassName=\"text-foreground font-semibold\" />\n </span>\n )}\n </div>\n );\n}\n\nexport function AssetMarketplacePanel<T extends ApiOrderLike = ApiOrderLike>({\n cheapest,\n isOwner,\n isSignedIn,\n isProcessing,\n isERC1155,\n isMarketLoading = false,\n myListing,\n activeBids,\n walletAddress,\n remixEnabled = false,\n showDealOption = false,\n showSponsorOption = false,\n onOpenSponsorProposal,\n showSponsorSolicitOption = false,\n onOpenSponsorSolicit,\n floorPriceRaw,\n lastSaleRaw,\n usdValue,\n renderAuthAction,\n renderHelp,\n onCancelClick,\n onAcceptBid,\n onOpenListing,\n onOpenTransfer,\n onOpenPurchase,\n onOpenOffer,\n onOpenRemix,\n onProposeDeal,\n}: AssetMarketplacePanelProps<T>) {\n const myBid = !isOwner && walletAddress\n ? activeBids.find((bid) => bid.offerer.toLowerCase() === walletAddress.toLowerCase()) ?? null\n : null;\n\n const canBuyMore =\n isERC1155 && isOwner && !!cheapest && !!walletAddress &&\n cheapest.offerer.toLowerCase() !== walletAddress.toLowerCase();\n\n if (isMarketLoading && !cheapest) {\n return (\n <div className=\"space-y-4\">\n <div className=\"h-9 w-32 rounded-md bg-muted animate-pulse\" />\n <div className=\"h-12 w-full rounded-2xl bg-muted animate-pulse\" />\n </div>\n );\n }\n\n return (\n <div className=\"relative\">\n\n <div className=\"relative space-y-4\">\n {cheapest ? (\n <div className=\"space-y-4\">\n <DualPrice\n amountFormatted={cheapest.price.formatted}\n currency={cheapest.price.currency}\n usdValue={usdValue}\n scale=\"hero\"\n trailing={renderHelp(\n `${isOwner && !canBuyMore ? \"Your listing\" : \"Current price\"} · Expires ${timeUntil(cheapest.endTime)}`\n )}\n />\n\n {isOwner ? (\n <div className=\"space-y-2\">\n <div className=\"grid grid-cols-2 gap-2\">\n {myListing ? (\n <ActionButton big\n icon={isProcessing ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <X className=\"h-4 w-4\" />}\n onClick={() => onCancelClick(myListing)}\n disabled={isProcessing}\n tone=\"red\"\n renderHelp={renderHelp}\n >\n Cancel Listing\n </ActionButton>\n ) : null}\n {/* ERC-721 has exactly one possible listing — once myListing exists,\n \"List on Marketplace\" is redundant next to \"Cancel Listing\" and\n reads as a broken/confusing pair. An ERC-1155 owner can still hold\n un-listed editions while one listing is active, so it stays for them. */}\n {(!myListing || isERC1155) ? (\n <ActionButton big tone=\"blue\" icon={<Tag className=\"h-4 w-4\" />} onClick={onOpenListing} renderHelp={renderHelp}>List on Marketplace</ActionButton>\n ) : null}\n <ActionButton big tone=\"orange\" icon={<ArrowRightLeft className=\"h-4 w-4\" />} onClick={onOpenTransfer} renderHelp={renderHelp}>Transfer</ActionButton>\n {remixEnabled && onOpenRemix ? (\n <ActionButton big\n action=\"remix\"\n icon={<GitBranch className=\"h-4 w-4\" />}\n onClick={onOpenRemix}\n helpContent=\"Build a licensed derivative of this digital asset — your remix is minted as a new onchain NFT linked to the original\"\n renderHelp={renderHelp}\n >\n Remix\n </ActionButton>\n ) : null}\n {showSponsorSolicitOption && onOpenSponsorSolicit ? (\n <ActionButton big\n tone=\"blue\"\n icon={<Handshake className=\"h-4 w-4\" />}\n onClick={onOpenSponsorSolicit}\n helpContent=\"Let sponsors bid on a license for this asset.\"\n renderHelp={renderHelp}\n >\n Open for Sponsorship\n </ActionButton>\n ) : null}\n </div>\n\n {canBuyMore && (\n <>\n <div className=\"border-t border-border/40 pt-2 mt-1\" />\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionButton big action=\"buy\" icon={<ShoppingCart className=\"h-4 w-4\" />} onClick={() => onOpenPurchase(cheapest!)} renderHelp={renderHelp}>Buy</ActionButton>\n <ActionButton big action=\"offer\" icon={<HandCoins className=\"h-4 w-4\" />} onClick={onOpenOffer} renderHelp={renderHelp}>Make offer</ActionButton>\n </div>\n </>\n )}\n </div>\n ) : isSignedIn ? (\n <>\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionButton big action=\"buy\" icon={<ShoppingCart className=\"h-4 w-4\" />} onClick={() => onOpenPurchase(cheapest)} renderHelp={renderHelp}>Buy</ActionButton>\n <ActionButton big action=\"offer\" icon={<HandCoins className=\"h-4 w-4\" />} onClick={onOpenOffer} renderHelp={renderHelp}>Make offer</ActionButton>\n {remixEnabled && onOpenRemix ? (\n <ActionButton big\n action=\"remix\"\n icon={<GitBranch className=\"h-4 w-4\" />}\n onClick={onOpenRemix}\n helpContent=\"Create your own attributed derivative of this work.\"\n renderHelp={renderHelp}\n >\n Remix\n </ActionButton>\n ) : null}\n {showDealOption && onProposeDeal ? (\n <ActionButton big\n action=\"license\"\n icon={<HandCoins className=\"h-4 w-4\" />}\n onClick={onProposeDeal}\n helpContent=\"Propose a license deal to the creator to use this work.\"\n renderHelp={renderHelp}\n >\n License\n </ActionButton>\n ) : null}\n {showSponsorOption && onOpenSponsorProposal ? (\n <ActionButton big\n tone=\"blue\"\n icon={<Handshake className=\"h-4 w-4\" />}\n onClick={onOpenSponsorProposal}\n helpContent=\"Propose to sponsor this creator's work — pay them directly for a license, no escrow.\"\n renderHelp={renderHelp}\n >\n Sponsor this IP\n </ActionButton>\n ) : null}\n </div>\n {!remixEnabled && !showDealOption ? (\n <p className=\"text-xs text-muted-foreground mt-2 leading-relaxed\">\n The creator marked this asset as no-derivatives.\n </p>\n ) : null}\n </>\n ) : (\n renderAuthAction(\"Sign in to trade\")\n )}\n </div>\n ) : (\n <div className=\"space-y-3\">\n <StatRow floorPriceRaw={floorPriceRaw} lastSaleRaw={lastSaleRaw} />\n {isOwner ? (\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionButton big tone=\"blue\" icon={<Tag className=\"h-4 w-4\" />} onClick={onOpenListing} renderHelp={renderHelp}>List on Marketplace</ActionButton>\n <ActionButton big tone=\"orange\" icon={<ArrowRightLeft className=\"h-4 w-4\" />} onClick={onOpenTransfer} renderHelp={renderHelp}>Transfer</ActionButton>\n {remixEnabled && onOpenRemix ? (\n <ActionButton big\n action=\"remix\"\n icon={<GitBranch className=\"h-4 w-4\" />}\n onClick={onOpenRemix}\n helpContent=\"Build a licensed derivative of this digital asset — your remix is minted as a new onchain NFT linked to the original\"\n renderHelp={renderHelp}\n >\n Remix\n </ActionButton>\n ) : null}\n {showSponsorSolicitOption && onOpenSponsorSolicit ? (\n <ActionButton big\n tone=\"blue\"\n icon={<Handshake className=\"h-4 w-4\" />}\n onClick={onOpenSponsorSolicit}\n helpContent=\"Let sponsors bid on a license for this asset.\"\n renderHelp={renderHelp}\n >\n Open for Sponsorship\n </ActionButton>\n ) : null}\n </div>\n ) : isSignedIn ? (\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionButton big action=\"offer\" icon={<HandCoins className=\"h-4 w-4\" />} onClick={onOpenOffer} renderHelp={renderHelp}>Make offer</ActionButton>\n {remixEnabled && onOpenRemix ? (\n <ActionButton big\n action=\"remix\"\n icon={<GitBranch className=\"h-4 w-4\" />}\n onClick={onOpenRemix}\n helpContent=\"Build a licensed derivative of this digital asset — your remix is minted as a new onchain NFT linked to the original\"\n renderHelp={renderHelp}\n >\n Remix\n </ActionButton>\n ) : null}\n {showSponsorOption && onOpenSponsorProposal ? (\n <ActionButton big\n tone=\"blue\"\n icon={<Handshake className=\"h-4 w-4\" />}\n onClick={onOpenSponsorProposal}\n helpContent=\"Propose to sponsor this creator's work — pay them directly for a license, no escrow.\"\n renderHelp={renderHelp}\n >\n Sponsor this IP\n </ActionButton>\n ) : null}\n </div>\n ) : (\n renderAuthAction(\"Sign in to make an offer\")\n )}\n </div>\n )}\n\n {myBid ? (\n <div className=\"rounded-xl bg-amber-500/8 px-4 py-3 flex items-center justify-between gap-3\">\n <div className=\"min-w-0 flex items-center gap-2.5\">\n <HandCoins className=\"h-4 w-4 text-amber-500 shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"text-xs font-semibold text-amber-500\">Your active offer</p>\n <p className=\"text-xs text-muted-foreground flex items-center gap-1.5 mt-0.5\">\n <span className=\"font-bold text-foreground inline-flex items-center gap-1\">\n {formatDisplayPrice(myBid.price.formatted)}\n <CurrencyIcon symbol={myBid.price.currency ?? \"\"} size={12} />\n </span>\n <span>·</span>\n <Clock className=\"h-3 w-3\" />\n {timeUntil(myBid.endTime)}\n </p>\n </div>\n </div>\n <button\n className=\"shrink-0 text-xs font-semibold text-red-400 hover:text-red-300 transition-colors flex items-center gap-1\"\n onClick={() => onCancelClick(myBid)}\n >\n <X className=\"h-3.5 w-3.5\" />\n Cancel\n </button>\n </div>\n ) : null}\n\n {isOwner && activeBids.length > 0 ? (\n <div className=\"rounded-xl bg-card/40 p-5 space-y-3\">\n <p className=\"text-xs font-semibold text-muted-foreground\">\n Incoming offers ({activeBids.length})\n </p>\n <div className=\"space-y-2\">\n {activeBids.map((bid) => (\n <div key={bid.orderHash} className=\"flex items-center justify-between gap-3 rounded-lg bg-muted/30 px-3 py-2\">\n <div className=\"min-w-0\">\n <p className=\"text-sm font-bold\">\n <span className=\"inline-flex items-center gap-1.5\">\n {formatDisplayPrice(bid.price.formatted)}\n <CurrencyIcon symbol={bid.price.currency ?? \"\"} size={14} />\n </span>\n </p>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <AddressDisplay address={bid.offerer} chars={4} showCopy={false} className=\"text-xs text-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">·</span>\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Clock className=\"h-3 w-3\" />\n {timeUntil(bid.endTime)}\n </div>\n </div>\n </div>\n <button\n disabled={isProcessing}\n onClick={() => onAcceptBid(bid)}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary px-3 py-1.5 text-xs font-semibold text-primary-foreground disabled:opacity-50\"\n >\n <CheckCircle className=\"h-3.5 w-3.5\" />\n Accept\n </button>\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/components/asset-marketplace-panel.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n ArrowRightLeft, CheckCircle, Clock, GitBranch, HandCoins, Handshake, Loader2,\n ShoppingCart, Tag, X,\n} from \"lucide-react\";\nimport { CurrencyIcon, CurrencyAmount } from \"./currency-icon.js\";\nimport { AddressDisplay } from \"./address-display.js\";\nimport { ActionButton } from \"./action-button.js\";\nimport { DualPrice } from \"./dual-price.js\";\nimport { formatDisplayPrice, parsePriceDisplay } from \"../utils/format.js\";\nimport { timeUntil } from \"../utils/time.js\";\n\nexport interface ApiOrderLike {\n orderHash: string;\n offerer: string;\n endTime: string;\n price: { formatted: string | null; currency: string | null };\n}\n\nexport interface AssetMarketplacePanelProps<T extends ApiOrderLike = ApiOrderLike> {\n cheapest?: T;\n isOwner: boolean;\n isSignedIn: boolean;\n isProcessing: boolean;\n isERC1155: boolean;\n isMarketLoading?: boolean;\n myListing: T | null;\n activeBids: T[];\n walletAddress?: string | null;\n remixEnabled?: boolean;\n showDealOption?: boolean;\n\n usdValue?: string | null;\n\n renderAuthAction: (label: string) => ReactNode;\n\n renderHelp: (content: string) => ReactNode;\n onCancelClick: (order: T) => void;\n onAcceptBid: (order: T) => void;\n onOpenListing: () => void;\n onOpenTransfer: () => void;\n onOpenPurchase: (order: T) => void;\n onOpenOffer: () => void;\n onOpenRemix?: () => void;\n onProposeDeal?: () => void;\n\n showSponsorOption?: boolean;\n onOpenSponsorProposal?: () => void;\n\n showSponsorSolicitOption?: boolean;\n onOpenSponsorSolicit?: () => void;\n\n floorPriceRaw?: string | null;\n lastSaleRaw?: string | null;\n}\n\nfunction StatRow({ floorPriceRaw, lastSaleRaw }: { floorPriceRaw?: string | null; lastSaleRaw?: string | null }) {\n const floor = floorPriceRaw ? parsePriceDisplay(floorPriceRaw) : null;\n const lastSale = lastSaleRaw ? parsePriceDisplay(lastSaleRaw) : null;\n if (!floor?.symbol && !lastSale?.symbol) return null;\n return (\n <div className=\"flex items-center gap-4 text-sm text-muted-foreground\">\n {floor?.symbol && (\n <span className=\"flex items-center gap-1.5\">\n <span>Floor</span>\n <CurrencyAmount amount={floor.numStr} symbol={floor.symbol} iconSize={12} amountClassName=\"text-foreground font-semibold\" />\n </span>\n )}\n {lastSale?.symbol && (\n <span className=\"flex items-center gap-1.5\">\n <span>Last sale</span>\n <CurrencyAmount amount={lastSale.numStr} symbol={lastSale.symbol} iconSize={12} amountClassName=\"text-foreground font-semibold\" />\n </span>\n )}\n </div>\n );\n}\n\nexport function AssetMarketplacePanel<T extends ApiOrderLike = ApiOrderLike>({\n cheapest,\n isOwner,\n isSignedIn,\n isProcessing,\n isERC1155,\n isMarketLoading = false,\n myListing,\n activeBids,\n walletAddress,\n remixEnabled = false,\n showDealOption = false,\n showSponsorOption = false,\n onOpenSponsorProposal,\n showSponsorSolicitOption = false,\n onOpenSponsorSolicit,\n floorPriceRaw,\n lastSaleRaw,\n usdValue,\n renderAuthAction,\n renderHelp,\n onCancelClick,\n onAcceptBid,\n onOpenListing,\n onOpenTransfer,\n onOpenPurchase,\n onOpenOffer,\n onOpenRemix,\n onProposeDeal,\n}: AssetMarketplacePanelProps<T>) {\n const myBid = !isOwner && walletAddress\n ? activeBids.find((bid) => bid.offerer.toLowerCase() === walletAddress.toLowerCase()) ?? null\n : null;\n\n const canBuyMore =\n isERC1155 && isOwner && !!cheapest && !!walletAddress &&\n cheapest.offerer.toLowerCase() !== walletAddress.toLowerCase();\n\n if (isMarketLoading && !cheapest) {\n return (\n <div className=\"space-y-4\">\n <div className=\"h-9 w-32 rounded-md bg-muted animate-pulse\" />\n <div className=\"h-12 w-full rounded-2xl bg-muted animate-pulse\" />\n </div>\n );\n }\n\n return (\n <div className=\"relative\">\n\n <div className=\"relative space-y-4\">\n {cheapest ? (\n <div className=\"space-y-4\">\n <DualPrice\n amountFormatted={cheapest.price.formatted}\n currency={cheapest.price.currency}\n usdValue={usdValue}\n scale=\"hero\"\n trailing={renderHelp(\n `${isOwner && !canBuyMore ? \"Your listing\" : \"Current price\"} · Expires ${timeUntil(cheapest.endTime)}`\n )}\n />\n\n {isOwner ? (\n <div className=\"space-y-2\">\n <div className=\"grid grid-cols-2 gap-2\">\n {myListing ? (\n <ActionButton big\n icon={isProcessing ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <X className=\"h-4 w-4\" />}\n onClick={() => onCancelClick(myListing)}\n disabled={isProcessing}\n tone=\"red\"\n renderHelp={renderHelp}\n >\n Cancel Listing\n </ActionButton>\n ) : null}\n\n {(!myListing || isERC1155) ? (\n <ActionButton big tone=\"blue\" icon={<Tag className=\"h-4 w-4\" />} onClick={onOpenListing} renderHelp={renderHelp}>List on Marketplace</ActionButton>\n ) : null}\n <ActionButton big tone=\"orange\" icon={<ArrowRightLeft className=\"h-4 w-4\" />} onClick={onOpenTransfer} renderHelp={renderHelp}>Transfer</ActionButton>\n {remixEnabled && onOpenRemix ? (\n <ActionButton big\n action=\"remix\"\n icon={<GitBranch className=\"h-4 w-4\" />}\n onClick={onOpenRemix}\n helpContent=\"Build a licensed derivative of this digital asset — your remix is minted as a new onchain NFT linked to the original\"\n renderHelp={renderHelp}\n >\n Remix\n </ActionButton>\n ) : null}\n {showSponsorSolicitOption && onOpenSponsorSolicit ? (\n <ActionButton big\n tone=\"blue\"\n icon={<Handshake className=\"h-4 w-4\" />}\n onClick={onOpenSponsorSolicit}\n helpContent=\"Let sponsors bid on a license for this asset.\"\n renderHelp={renderHelp}\n >\n Open for Sponsorship\n </ActionButton>\n ) : null}\n </div>\n\n {canBuyMore && (\n <>\n <div className=\"border-t border-border/40 pt-2 mt-1\" />\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionButton big action=\"buy\" icon={<ShoppingCart className=\"h-4 w-4\" />} onClick={() => onOpenPurchase(cheapest!)} renderHelp={renderHelp}>Buy</ActionButton>\n <ActionButton big action=\"offer\" icon={<HandCoins className=\"h-4 w-4\" />} onClick={onOpenOffer} renderHelp={renderHelp}>Make offer</ActionButton>\n </div>\n </>\n )}\n </div>\n ) : isSignedIn ? (\n <>\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionButton big action=\"buy\" icon={<ShoppingCart className=\"h-4 w-4\" />} onClick={() => onOpenPurchase(cheapest)} renderHelp={renderHelp}>Buy</ActionButton>\n <ActionButton big action=\"offer\" icon={<HandCoins className=\"h-4 w-4\" />} onClick={onOpenOffer} renderHelp={renderHelp}>Make offer</ActionButton>\n {remixEnabled && onOpenRemix ? (\n <ActionButton big\n action=\"remix\"\n icon={<GitBranch className=\"h-4 w-4\" />}\n onClick={onOpenRemix}\n helpContent=\"Create your own attributed derivative of this work.\"\n renderHelp={renderHelp}\n >\n Remix\n </ActionButton>\n ) : null}\n {showDealOption && onProposeDeal ? (\n <ActionButton big\n action=\"license\"\n icon={<HandCoins className=\"h-4 w-4\" />}\n onClick={onProposeDeal}\n helpContent=\"Propose a license deal to the creator to use this work.\"\n renderHelp={renderHelp}\n >\n License\n </ActionButton>\n ) : null}\n {showSponsorOption && onOpenSponsorProposal ? (\n <ActionButton big\n tone=\"blue\"\n icon={<Handshake className=\"h-4 w-4\" />}\n onClick={onOpenSponsorProposal}\n helpContent=\"Propose to sponsor this creator's work — pay them directly for a license, no escrow.\"\n renderHelp={renderHelp}\n >\n Sponsor this IP\n </ActionButton>\n ) : null}\n </div>\n {!remixEnabled && !showDealOption ? (\n <p className=\"text-xs text-muted-foreground mt-2 leading-relaxed\">\n The creator marked this asset as no-derivatives.\n </p>\n ) : null}\n </>\n ) : (\n renderAuthAction(\"Sign in to trade\")\n )}\n </div>\n ) : (\n <div className=\"space-y-3\">\n <StatRow floorPriceRaw={floorPriceRaw} lastSaleRaw={lastSaleRaw} />\n {isOwner ? (\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionButton big tone=\"blue\" icon={<Tag className=\"h-4 w-4\" />} onClick={onOpenListing} renderHelp={renderHelp}>List on Marketplace</ActionButton>\n <ActionButton big tone=\"orange\" icon={<ArrowRightLeft className=\"h-4 w-4\" />} onClick={onOpenTransfer} renderHelp={renderHelp}>Transfer</ActionButton>\n {remixEnabled && onOpenRemix ? (\n <ActionButton big\n action=\"remix\"\n icon={<GitBranch className=\"h-4 w-4\" />}\n onClick={onOpenRemix}\n helpContent=\"Build a licensed derivative of this digital asset — your remix is minted as a new onchain NFT linked to the original\"\n renderHelp={renderHelp}\n >\n Remix\n </ActionButton>\n ) : null}\n {showSponsorSolicitOption && onOpenSponsorSolicit ? (\n <ActionButton big\n tone=\"blue\"\n icon={<Handshake className=\"h-4 w-4\" />}\n onClick={onOpenSponsorSolicit}\n helpContent=\"Let sponsors bid on a license for this asset.\"\n renderHelp={renderHelp}\n >\n Open for Sponsorship\n </ActionButton>\n ) : null}\n </div>\n ) : isSignedIn ? (\n <div className=\"grid grid-cols-2 gap-2\">\n <ActionButton big action=\"offer\" icon={<HandCoins className=\"h-4 w-4\" />} onClick={onOpenOffer} renderHelp={renderHelp}>Make offer</ActionButton>\n {remixEnabled && onOpenRemix ? (\n <ActionButton big\n action=\"remix\"\n icon={<GitBranch className=\"h-4 w-4\" />}\n onClick={onOpenRemix}\n helpContent=\"Build a licensed derivative of this digital asset — your remix is minted as a new onchain NFT linked to the original\"\n renderHelp={renderHelp}\n >\n Remix\n </ActionButton>\n ) : null}\n {showSponsorOption && onOpenSponsorProposal ? (\n <ActionButton big\n tone=\"blue\"\n icon={<Handshake className=\"h-4 w-4\" />}\n onClick={onOpenSponsorProposal}\n helpContent=\"Propose to sponsor this creator's work — pay them directly for a license, no escrow.\"\n renderHelp={renderHelp}\n >\n Sponsor this IP\n </ActionButton>\n ) : null}\n </div>\n ) : (\n renderAuthAction(\"Sign in to make an offer\")\n )}\n </div>\n )}\n\n {myBid ? (\n <div className=\"rounded-xl bg-amber-500/8 px-4 py-3 flex items-center justify-between gap-3\">\n <div className=\"min-w-0 flex items-center gap-2.5\">\n <HandCoins className=\"h-4 w-4 text-amber-500 shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"text-xs font-semibold text-amber-500\">Your active offer</p>\n <p className=\"text-xs text-muted-foreground flex items-center gap-1.5 mt-0.5\">\n <span className=\"font-bold text-foreground inline-flex items-center gap-1\">\n {formatDisplayPrice(myBid.price.formatted)}\n <CurrencyIcon symbol={myBid.price.currency ?? \"\"} size={12} />\n </span>\n <span>·</span>\n <Clock className=\"h-3 w-3\" />\n {timeUntil(myBid.endTime)}\n </p>\n </div>\n </div>\n <button\n className=\"shrink-0 text-xs font-semibold text-red-400 hover:text-red-300 transition-colors flex items-center gap-1\"\n onClick={() => onCancelClick(myBid)}\n >\n <X className=\"h-3.5 w-3.5\" />\n Cancel\n </button>\n </div>\n ) : null}\n\n {isOwner && activeBids.length > 0 ? (\n <div className=\"rounded-xl bg-card/40 p-5 space-y-3\">\n <p className=\"text-xs font-semibold text-muted-foreground\">\n Incoming offers ({activeBids.length})\n </p>\n <div className=\"space-y-2\">\n {activeBids.map((bid) => (\n <div key={bid.orderHash} className=\"flex items-center justify-between gap-3 rounded-lg bg-muted/30 px-3 py-2\">\n <div className=\"min-w-0\">\n <p className=\"text-sm font-bold\">\n <span className=\"inline-flex items-center gap-1.5\">\n {formatDisplayPrice(bid.price.formatted)}\n <CurrencyIcon symbol={bid.price.currency ?? \"\"} size={14} />\n </span>\n </p>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <AddressDisplay address={bid.offerer} chars={4} showCopy={false} className=\"text-xs text-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">·</span>\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <Clock className=\"h-3 w-3\" />\n {timeUntil(bid.endTime)}\n </div>\n </div>\n </div>\n <button\n disabled={isProcessing}\n onClick={() => onAcceptBid(bid)}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary px-3 py-1.5 text-xs font-semibold text-primary-foreground disabled:opacity-50\"\n >\n <CheckCircle className=\"h-3.5 w-3.5\" />\n Accept\n </button>\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
 
4
- /** Structural subset of `ApiOrder` (both apps' `@medialane/sdk` types satisfy this). */
5
4
  interface ApiOrderLike {
6
5
  orderHash: string;
7
6
  offerer: string;
@@ -23,15 +22,8 @@ interface AssetMarketplacePanelProps<T extends ApiOrderLike = ApiOrderLike> {
23
22
  walletAddress?: string | null;
24
23
  remixEnabled?: boolean;
25
24
  showDealOption?: boolean;
26
- /**
27
- * Pre-formatted USD equivalent of `cheapest.price` (e.g. "$12.34"), computed
28
- * by the host from its own live rate feed — this package has no price-feed
29
- * access by design. Omit (or pass null) to render no USD line.
30
- */
31
25
  usdValue?: string | null;
32
- /** Renders the sign-in/connect-wallet CTA for the given label (e.g. "Sign in to trade"). */
33
26
  renderAuthAction: (label: string) => ReactNode;
34
- /** Renders an inline help/info affordance for the given tooltip text. */
35
27
  renderHelp: (content: string) => ReactNode;
36
28
  onCancelClick: (order: T) => void;
37
29
  onAcceptBid: (order: T) => void;
@@ -41,15 +33,10 @@ interface AssetMarketplacePanelProps<T extends ApiOrderLike = ApiOrderLike> {
41
33
  onOpenOffer: () => void;
42
34
  onOpenRemix?: () => void;
43
35
  onProposeDeal?: () => void;
44
- /** Non-owner: propose a sponsorship deal on this asset. */
45
36
  showSponsorOption?: boolean;
46
37
  onOpenSponsorProposal?: () => void;
47
- /** Owner: open this asset for sponsorship bidding. */
48
38
  showSponsorSolicitOption?: boolean;
49
39
  onOpenSponsorSolicit?: () => void;
50
- /** Raw "0.07 STRK"-style strings — already resolved by the caller. Shown
51
- * only in the "not currently listed" fallback state (see StatRow) — the
52
- * active-listing price row dropped them to stay uncluttered. */
53
40
  floorPriceRaw?: string | null;
54
41
  lastSaleRaw?: string | null;
55
42
  }
@@ -1,7 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
 
4
- /** Structural subset of `ApiOrder` (both apps' `@medialane/sdk` types satisfy this). */
5
4
  interface ApiOrderLike {
6
5
  orderHash: string;
7
6
  offerer: string;
@@ -23,15 +22,8 @@ interface AssetMarketplacePanelProps<T extends ApiOrderLike = ApiOrderLike> {
23
22
  walletAddress?: string | null;
24
23
  remixEnabled?: boolean;
25
24
  showDealOption?: boolean;
26
- /**
27
- * Pre-formatted USD equivalent of `cheapest.price` (e.g. "$12.34"), computed
28
- * by the host from its own live rate feed — this package has no price-feed
29
- * access by design. Omit (or pass null) to render no USD line.
30
- */
31
25
  usdValue?: string | null;
32
- /** Renders the sign-in/connect-wallet CTA for the given label (e.g. "Sign in to trade"). */
33
26
  renderAuthAction: (label: string) => ReactNode;
34
- /** Renders an inline help/info affordance for the given tooltip text. */
35
27
  renderHelp: (content: string) => ReactNode;
36
28
  onCancelClick: (order: T) => void;
37
29
  onAcceptBid: (order: T) => void;
@@ -41,15 +33,10 @@ interface AssetMarketplacePanelProps<T extends ApiOrderLike = ApiOrderLike> {
41
33
  onOpenOffer: () => void;
42
34
  onOpenRemix?: () => void;
43
35
  onProposeDeal?: () => void;
44
- /** Non-owner: propose a sponsorship deal on this asset. */
45
36
  showSponsorOption?: boolean;
46
37
  onOpenSponsorProposal?: () => void;
47
- /** Owner: open this asset for sponsorship bidding. */
48
38
  showSponsorSolicitOption?: boolean;
49
39
  onOpenSponsorSolicit?: () => void;
50
- /** Raw "0.07 STRK"-style strings — already resolved by the caller. Shown
51
- * only in the "not currently listed" fallback state (see StatRow) — the
52
- * active-listing price row dropped them to stay uncluttered. */
53
40
  floorPriceRaw?: string | null;
54
41
  lastSaleRaw?: string | null;
55
42
  }