@medialane/ui 0.127.0 → 0.127.2

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 (169) hide show
  1. package/dist/components/activity-card.cjs +1 -1
  2. package/dist/components/activity-card.cjs.map +1 -1
  3. package/dist/components/activity-card.js +1 -1
  4. package/dist/components/activity-card.js.map +1 -1
  5. package/dist/components/activity-feed-shell.cjs +1 -1
  6. package/dist/components/activity-feed-shell.cjs.map +1 -1
  7. package/dist/components/activity-feed-shell.js +1 -1
  8. package/dist/components/activity-feed-shell.js.map +1 -1
  9. package/dist/components/activity-row.cjs +2 -2
  10. package/dist/components/activity-row.cjs.map +1 -1
  11. package/dist/components/activity-row.js +2 -2
  12. package/dist/components/activity-row.js.map +1 -1
  13. package/dist/components/activity-ticker.cjs +1 -1
  14. package/dist/components/activity-ticker.cjs.map +1 -1
  15. package/dist/components/activity-ticker.js +1 -1
  16. package/dist/components/activity-ticker.js.map +1 -1
  17. package/dist/components/animated-token-media.cjs +1 -1
  18. package/dist/components/animated-token-media.cjs.map +1 -1
  19. package/dist/components/animated-token-media.js +1 -1
  20. package/dist/components/animated-token-media.js.map +1 -1
  21. package/dist/components/asset-card.cjs +1 -1
  22. package/dist/components/asset-card.cjs.map +1 -1
  23. package/dist/components/asset-card.js +1 -1
  24. package/dist/components/asset-card.js.map +1 -1
  25. package/dist/components/asset-collection-bar.cjs +2 -2
  26. package/dist/components/asset-collection-bar.cjs.map +1 -1
  27. package/dist/components/asset-collection-bar.js +2 -2
  28. package/dist/components/asset-collection-bar.js.map +1 -1
  29. package/dist/components/asset-picker-cell.cjs +1 -1
  30. package/dist/components/asset-picker-cell.cjs.map +1 -1
  31. package/dist/components/asset-picker-cell.js +1 -1
  32. package/dist/components/asset-picker-cell.js.map +1 -1
  33. package/dist/components/asset-top-sections.cjs +1 -1
  34. package/dist/components/asset-top-sections.cjs.map +1 -1
  35. package/dist/components/asset-top-sections.js +1 -1
  36. package/dist/components/asset-top-sections.js.map +1 -1
  37. package/dist/components/brand-logo.cjs +2 -2
  38. package/dist/components/brand-logo.cjs.map +1 -1
  39. package/dist/components/brand-logo.js +2 -2
  40. package/dist/components/brand-logo.js.map +1 -1
  41. package/dist/components/club-owner-actions.cjs +1 -1
  42. package/dist/components/club-owner-actions.cjs.map +1 -1
  43. package/dist/components/club-owner-actions.js +1 -1
  44. package/dist/components/club-owner-actions.js.map +1 -1
  45. package/dist/components/coin-card.cjs +2 -2
  46. package/dist/components/coin-card.cjs.map +1 -1
  47. package/dist/components/coin-card.js +2 -2
  48. package/dist/components/coin-card.js.map +1 -1
  49. package/dist/components/coin-launch-preview.cjs +1 -1
  50. package/dist/components/coin-launch-preview.cjs.map +1 -1
  51. package/dist/components/coin-launch-preview.js +1 -1
  52. package/dist/components/coin-launch-preview.js.map +1 -1
  53. package/dist/components/collection-card.cjs +2 -2
  54. package/dist/components/collection-card.cjs.map +1 -1
  55. package/dist/components/collection-card.js +2 -2
  56. package/dist/components/collection-card.js.map +1 -1
  57. package/dist/components/creation-record.cjs +3 -3
  58. package/dist/components/creation-record.cjs.map +1 -1
  59. package/dist/components/creation-record.js +2 -2
  60. package/dist/components/creation-record.js.map +1 -1
  61. package/dist/components/creator-chip.cjs +1 -1
  62. package/dist/components/creator-chip.cjs.map +1 -1
  63. package/dist/components/creator-chip.js +1 -1
  64. package/dist/components/creator-chip.js.map +1 -1
  65. package/dist/components/creator-score-inline.cjs +1 -1
  66. package/dist/components/creator-score-inline.cjs.map +1 -1
  67. package/dist/components/creator-score-inline.js +1 -1
  68. package/dist/components/creator-score-inline.js.map +1 -1
  69. package/dist/components/cta-card-grid.cjs +1 -1
  70. package/dist/components/cta-card-grid.cjs.map +1 -1
  71. package/dist/components/cta-card-grid.js +1 -1
  72. package/dist/components/cta-card-grid.js.map +1 -1
  73. package/dist/components/currency-icon.cjs +1 -1
  74. package/dist/components/currency-icon.cjs.map +1 -1
  75. package/dist/components/currency-icon.js +1 -1
  76. package/dist/components/currency-icon.js.map +1 -1
  77. package/dist/components/empty-or-error.cjs +1 -1
  78. package/dist/components/empty-or-error.cjs.map +1 -1
  79. package/dist/components/empty-or-error.js +1 -1
  80. package/dist/components/empty-or-error.js.map +1 -1
  81. package/dist/components/hero-slider.cjs +2 -2
  82. package/dist/components/hero-slider.cjs.map +1 -1
  83. package/dist/components/hero-slider.js +2 -2
  84. package/dist/components/hero-slider.js.map +1 -1
  85. package/dist/components/image.cjs +35 -0
  86. package/dist/components/image.cjs.map +1 -0
  87. package/dist/components/image.d.cts +1 -0
  88. package/dist/components/image.d.ts +1 -0
  89. package/dist/components/image.js +5 -0
  90. package/dist/components/image.js.map +1 -0
  91. package/dist/components/launchpad-services.cjs +1 -1
  92. package/dist/components/launchpad-services.cjs.map +1 -1
  93. package/dist/components/launchpad-services.js +1 -1
  94. package/dist/components/launchpad-services.js.map +1 -1
  95. package/dist/components/launchpad-strip.cjs +1 -1
  96. package/dist/components/launchpad-strip.cjs.map +1 -1
  97. package/dist/components/launchpad-strip.js +1 -1
  98. package/dist/components/launchpad-strip.js.map +1 -1
  99. package/dist/components/link.cjs +35 -0
  100. package/dist/components/link.cjs.map +1 -0
  101. package/dist/components/link.d.cts +3 -0
  102. package/dist/components/link.d.ts +3 -0
  103. package/dist/components/link.js +5 -0
  104. package/dist/components/link.js.map +1 -0
  105. package/dist/components/listing-card.cjs +1 -1
  106. package/dist/components/listing-card.cjs.map +1 -1
  107. package/dist/components/listing-card.js +1 -1
  108. package/dist/components/listing-card.js.map +1 -1
  109. package/dist/components/marketplace-dialog-primitives.cjs +1 -1
  110. package/dist/components/marketplace-dialog-primitives.cjs.map +1 -1
  111. package/dist/components/marketplace-dialog-primitives.js +1 -1
  112. package/dist/components/marketplace-dialog-primitives.js.map +1 -1
  113. package/dist/components/nav-command-menu.cjs +2 -2
  114. package/dist/components/nav-command-menu.cjs.map +1 -1
  115. package/dist/components/nav-command-menu.js +1 -1
  116. package/dist/components/nav-command-menu.js.map +1 -1
  117. package/dist/components/owner-setup-panel.cjs +1 -1
  118. package/dist/components/owner-setup-panel.cjs.map +1 -1
  119. package/dist/components/owner-setup-panel.js +1 -1
  120. package/dist/components/owner-setup-panel.js.map +1 -1
  121. package/dist/components/parent-attribution-banner.cjs +1 -1
  122. package/dist/components/parent-attribution-banner.cjs.map +1 -1
  123. package/dist/components/parent-attribution-banner.js +1 -1
  124. package/dist/components/parent-attribution-banner.js.map +1 -1
  125. package/dist/components/portfolio-activity.cjs +2 -2
  126. package/dist/components/portfolio-activity.cjs.map +1 -1
  127. package/dist/components/portfolio-activity.js +1 -1
  128. package/dist/components/portfolio-activity.js.map +1 -1
  129. package/dist/components/portfolio-chip-filter.cjs +1 -1
  130. package/dist/components/portfolio-chip-filter.cjs.map +1 -1
  131. package/dist/components/portfolio-chip-filter.js +1 -1
  132. package/dist/components/portfolio-chip-filter.js.map +1 -1
  133. package/dist/components/portfolio-header.cjs +1 -1
  134. package/dist/components/portfolio-header.cjs.map +1 -1
  135. package/dist/components/portfolio-header.js +1 -1
  136. package/dist/components/portfolio-header.js.map +1 -1
  137. package/dist/components/portfolio-section.cjs +1 -1
  138. package/dist/components/portfolio-section.cjs.map +1 -1
  139. package/dist/components/portfolio-section.js +1 -1
  140. package/dist/components/portfolio-section.js.map +1 -1
  141. package/dist/components/remixes-tab.cjs +1 -1
  142. package/dist/components/remixes-tab.cjs.map +1 -1
  143. package/dist/components/remixes-tab.js +1 -1
  144. package/dist/components/remixes-tab.js.map +1 -1
  145. package/dist/components/rewards-section.cjs +1 -1
  146. package/dist/components/rewards-section.cjs.map +1 -1
  147. package/dist/components/rewards-section.js +1 -1
  148. package/dist/components/rewards-section.js.map +1 -1
  149. package/dist/components/router.cjs +29 -0
  150. package/dist/components/router.cjs.map +1 -0
  151. package/dist/components/router.d.cts +1 -0
  152. package/dist/components/router.d.ts +1 -0
  153. package/dist/components/router.js +5 -0
  154. package/dist/components/router.js.map +1 -0
  155. package/dist/components/scroll-section.cjs +1 -1
  156. package/dist/components/scroll-section.cjs.map +1 -1
  157. package/dist/components/scroll-section.js +1 -1
  158. package/dist/components/scroll-section.js.map +1 -1
  159. package/dist/components/token-card.cjs +1 -1
  160. package/dist/components/token-card.cjs.map +1 -1
  161. package/dist/components/token-card.js +1 -1
  162. package/dist/components/token-card.js.map +1 -1
  163. package/dist/utils/explorer-url.cjs +29 -0
  164. package/dist/utils/explorer-url.cjs.map +1 -0
  165. package/dist/utils/explorer-url.d.cts +3 -0
  166. package/dist/utils/explorer-url.d.ts +3 -0
  167. package/dist/utils/explorer-url.js +5 -0
  168. package/dist/utils/explorer-url.js.map +1 -0
  169. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/portfolio-activity.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useMemo } from \"react\";\nimport type { MedialaneClient } from \"@medialane/sdk/starknet\";\nimport { Activity } from \"lucide-react\";\nimport { assetHref } from \"@medialane/sdk\";\nimport { useActivitiesByAddress } from \"../utils/use-activities.js\";\nimport { EmptyOrError } from \"./empty-or-error.js\";\nimport { ACTIVITY_TYPE_CONFIG, TYPE_FILTERS } from \"../data/activity.js\";\nimport { ActivityRow } from \"./activity-row.js\";\nimport { cn } from \"../utils/cn.js\";\n\nconst EXPLORER_URL = process.env.NEXT_PUBLIC_EXPLORER_URL || \"https://voyager.online\";\n\nexport interface PortfolioActivityProps {\n getClient: () => MedialaneClient;\n address: string | null;\n}\n\nexport function PortfolioActivity({ getClient, address }: PortfolioActivityProps) {\n const { activities, isLoading, error, mutate } = useActivitiesByAddress(getClient, address);\n const [typeFilter, setTypeFilter] = useState(\"\");\n\n const displayed = typeFilter\n ? activities.filter((a) => a.type === typeFilter)\n : activities;\n\n const typeCounts = useMemo(() => {\n const counts: Record<string, number> = {};\n for (const a of activities) {\n counts[a.type] = (counts[a.type] ?? 0) + 1;\n }\n return counts;\n }, [activities]);\n\n return (\n <div className=\"space-y-4\">\n\n <div className=\"flex flex-wrap gap-2\">\n {TYPE_FILTERS.map((f) => {\n const typeConfig = f.value ? ACTIVITY_TYPE_CONFIG[f.value] : null;\n const Icon = typeConfig?.icon;\n const count = f.value ? typeCounts[f.value] : activities.length;\n const isActive = typeFilter === f.value;\n return (\n <button\n key={f.value}\n onClick={() => setTypeFilter(f.value)}\n className={cn(\n \"flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-full transition-all font-medium\",\n isActive\n ? \"bg-primary text-primary-foreground shadow-sm\"\n : \"bg-muted text-muted-foreground hover:bg-muted/70 hover:text-foreground\"\n )}\n >\n {Icon && (\n <Icon\n className={cn(\n \"h-3 w-3\",\n isActive ? \"text-primary-foreground\" : typeConfig?.colorClass\n )}\n />\n )}\n {f.label}\n {!isLoading && count != null && count > 0 && (\n <span\n className={cn(\n \"text-[10px] font-bold tabular-nums\",\n isActive\n ? \"text-primary-foreground/70\"\n : \"text-muted-foreground/60\"\n )}\n >\n {count}\n </span>\n )}\n </button>\n );\n })}\n </div>\n\n <EmptyOrError\n isLoading={isLoading}\n error={error}\n isEmpty={displayed.length === 0}\n onRetry={mutate}\n emptyTitle={typeFilter ? `No ${typeFilter} events yet` : \"No activity yet\"}\n emptyDescription=\"Start by listing or buying an asset on the marketplace.\"\n emptyCta={{ label: \"Browse marketplace\", href: \"/marketplace\" }}\n emptyIcon={<Activity className=\"h-7 w-7 text-muted-foreground\" />}\n skeletonCount={8}\n >\n <div className=\"rounded-xl border border-border overflow-hidden divide-y divide-border/50\">\n {displayed.map((activity, i) => (\n <ActivityRow\n key={`${activity.txHash}-${activity.type}-${i}`}\n activity={activity}\n showActor={false}\n showExplorer\n explorerUrl={EXPLORER_URL}\n getAssetHref={(c, t) => assetHref(\"STARKNET\", c, t)}\n />\n ))}\n </div>\n </EmptyOrError>\n </div>\n );\n}\n"],"mappings":";AA6CY,SAWI,KAXJ;AA3CZ,SAAS,UAAU,eAAe;AAElC,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,8BAA8B;AACvC,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB,oBAAoB;AACnD,SAAS,mBAAmB;AAC5B,SAAS,UAAU;AAEnB,MAAM,eAAe,QAAQ,IAAI,4BAA4B;AAOtD,SAAS,kBAAkB,EAAE,WAAW,QAAQ,GAA2B;AAChF,QAAM,EAAE,YAAY,WAAW,OAAO,OAAO,IAAI,uBAAuB,WAAW,OAAO;AAC1F,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,EAAE;AAE/C,QAAM,YAAY,aACd,WAAW,OAAO,CAAC,MAAM,EAAE,SAAS,UAAU,IAC9C;AAEJ,QAAM,aAAa,QAAQ,MAAM;AAC/B,UAAM,SAAiC,CAAC;AACxC,eAAW,KAAK,YAAY;AAC1B,aAAO,EAAE,IAAI,KAAK,OAAO,EAAE,IAAI,KAAK,KAAK;AAAA,IAC3C;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,CAAC;AAEf,SACE,qBAAC,SAAI,WAAU,aAEb;AAAA,wBAAC,SAAI,WAAU,wBACZ,uBAAa,IAAI,CAAC,MAAM;AACvB,YAAM,aAAa,EAAE,QAAQ,qBAAqB,EAAE,KAAK,IAAI;AAC7D,YAAM,OAAO,YAAY;AACzB,YAAM,QAAQ,EAAE,QAAQ,WAAW,EAAE,KAAK,IAAI,WAAW;AACzD,YAAM,WAAW,eAAe,EAAE;AAClC,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,MAAM,cAAc,EAAE,KAAK;AAAA,UACpC,WAAW;AAAA,YACT;AAAA,YACA,WACI,iDACA;AAAA,UACN;AAAA,UAEC;AAAA,oBACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,WAAW,4BAA4B,YAAY;AAAA,gBACrD;AAAA;AAAA,YACF;AAAA,YAED,EAAE;AAAA,YACF,CAAC,aAAa,SAAS,QAAQ,QAAQ,KACtC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,WACI,+BACA;AAAA,gBACN;AAAA,gBAEC;AAAA;AAAA,YACH;AAAA;AAAA;AAAA,QA5BG,EAAE;AAAA,MA8BT;AAAA,IAEJ,CAAC,GACH;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS,UAAU,WAAW;AAAA,QAC9B,SAAS;AAAA,QACT,YAAY,aAAa,MAAM,UAAU,gBAAgB;AAAA,QACzD,kBAAiB;AAAA,QACjB,UAAU,EAAE,OAAO,sBAAsB,MAAM,eAAe;AAAA,QAC9D,WAAW,oBAAC,YAAS,WAAU,iCAAgC;AAAA,QAC/D,eAAe;AAAA,QAEf,8BAAC,SAAI,WAAU,6EACZ,oBAAU,IAAI,CAAC,UAAU,MACxB;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA,WAAW;AAAA,YACX,cAAY;AAAA,YACZ,aAAa;AAAA,YACb,cAAc,CAAC,GAAG,MAAM,UAAU,YAAY,GAAG,CAAC;AAAA;AAAA,UAL7C,GAAG,SAAS,MAAM,IAAI,SAAS,IAAI,IAAI,CAAC;AAAA,QAM/C,CACD,GACH;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/portfolio-activity.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useMemo } from \"react\";\nimport type { MedialaneClient } from \"@medialane/sdk/starknet\";\nimport { Activity } from \"lucide-react\";\nimport { assetHref } from \"@medialane/sdk\";\nimport { useActivitiesByAddress } from \"../utils/use-activities.js\";\nimport { EmptyOrError } from \"./empty-or-error.js\";\nimport { ACTIVITY_TYPE_CONFIG, TYPE_FILTERS } from \"../data/activity.js\";\nimport { ActivityRow } from \"./activity-row.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { EXPLORER_URL } from \"../utils/explorer-url.js\";\n\nexport interface PortfolioActivityProps {\n getClient: () => MedialaneClient;\n address: string | null;\n}\n\nexport function PortfolioActivity({ getClient, address }: PortfolioActivityProps) {\n const { activities, isLoading, error, mutate } = useActivitiesByAddress(getClient, address);\n const [typeFilter, setTypeFilter] = useState(\"\");\n\n const displayed = typeFilter\n ? activities.filter((a) => a.type === typeFilter)\n : activities;\n\n const typeCounts = useMemo(() => {\n const counts: Record<string, number> = {};\n for (const a of activities) {\n counts[a.type] = (counts[a.type] ?? 0) + 1;\n }\n return counts;\n }, [activities]);\n\n return (\n <div className=\"space-y-4\">\n\n <div className=\"flex flex-wrap gap-2\">\n {TYPE_FILTERS.map((f) => {\n const typeConfig = f.value ? ACTIVITY_TYPE_CONFIG[f.value] : null;\n const Icon = typeConfig?.icon;\n const count = f.value ? typeCounts[f.value] : activities.length;\n const isActive = typeFilter === f.value;\n return (\n <button\n key={f.value}\n onClick={() => setTypeFilter(f.value)}\n className={cn(\n \"flex items-center gap-1.5 text-xs px-3 py-1.5 rounded-full transition-all font-medium\",\n isActive\n ? \"bg-primary text-primary-foreground shadow-sm\"\n : \"bg-muted text-muted-foreground hover:bg-muted/70 hover:text-foreground\"\n )}\n >\n {Icon && (\n <Icon\n className={cn(\n \"h-3 w-3\",\n isActive ? \"text-primary-foreground\" : typeConfig?.colorClass\n )}\n />\n )}\n {f.label}\n {!isLoading && count != null && count > 0 && (\n <span\n className={cn(\n \"text-[10px] font-bold tabular-nums\",\n isActive\n ? \"text-primary-foreground/70\"\n : \"text-muted-foreground/60\"\n )}\n >\n {count}\n </span>\n )}\n </button>\n );\n })}\n </div>\n\n <EmptyOrError\n isLoading={isLoading}\n error={error}\n isEmpty={displayed.length === 0}\n onRetry={mutate}\n emptyTitle={typeFilter ? `No ${typeFilter} events yet` : \"No activity yet\"}\n emptyDescription=\"Start by listing or buying an asset on the marketplace.\"\n emptyCta={{ label: \"Browse marketplace\", href: \"/marketplace\" }}\n emptyIcon={<Activity className=\"h-7 w-7 text-muted-foreground\" />}\n skeletonCount={8}\n >\n <div className=\"rounded-xl border border-border overflow-hidden divide-y divide-border/50\">\n {displayed.map((activity, i) => (\n <ActivityRow\n key={`${activity.txHash}-${activity.type}-${i}`}\n activity={activity}\n showActor={false}\n showExplorer\n explorerUrl={EXPLORER_URL}\n getAssetHref={(c, t) => assetHref(\"STARKNET\", c, t)}\n />\n ))}\n </div>\n </EmptyOrError>\n </div>\n );\n}\n"],"mappings":";AA4CY,SAWI,KAXJ;AA1CZ,SAAS,UAAU,eAAe;AAElC,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,8BAA8B;AACvC,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB,oBAAoB;AACnD,SAAS,mBAAmB;AAC5B,SAAS,UAAU;AACnB,SAAS,oBAAoB;AAOtB,SAAS,kBAAkB,EAAE,WAAW,QAAQ,GAA2B;AAChF,QAAM,EAAE,YAAY,WAAW,OAAO,OAAO,IAAI,uBAAuB,WAAW,OAAO;AAC1F,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,EAAE;AAE/C,QAAM,YAAY,aACd,WAAW,OAAO,CAAC,MAAM,EAAE,SAAS,UAAU,IAC9C;AAEJ,QAAM,aAAa,QAAQ,MAAM;AAC/B,UAAM,SAAiC,CAAC;AACxC,eAAW,KAAK,YAAY;AAC1B,aAAO,EAAE,IAAI,KAAK,OAAO,EAAE,IAAI,KAAK,KAAK;AAAA,IAC3C;AACA,WAAO;AAAA,EACT,GAAG,CAAC,UAAU,CAAC;AAEf,SACE,qBAAC,SAAI,WAAU,aAEb;AAAA,wBAAC,SAAI,WAAU,wBACZ,uBAAa,IAAI,CAAC,MAAM;AACvB,YAAM,aAAa,EAAE,QAAQ,qBAAqB,EAAE,KAAK,IAAI;AAC7D,YAAM,OAAO,YAAY;AACzB,YAAM,QAAQ,EAAE,QAAQ,WAAW,EAAE,KAAK,IAAI,WAAW;AACzD,YAAM,WAAW,eAAe,EAAE;AAClC,aACE;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,MAAM,cAAc,EAAE,KAAK;AAAA,UACpC,WAAW;AAAA,YACT;AAAA,YACA,WACI,iDACA;AAAA,UACN;AAAA,UAEC;AAAA,oBACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,WAAW,4BAA4B,YAAY;AAAA,gBACrD;AAAA;AAAA,YACF;AAAA,YAED,EAAE;AAAA,YACF,CAAC,aAAa,SAAS,QAAQ,QAAQ,KACtC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW;AAAA,kBACT;AAAA,kBACA,WACI,+BACA;AAAA,gBACN;AAAA,gBAEC;AAAA;AAAA,YACH;AAAA;AAAA;AAAA,QA5BG,EAAE;AAAA,MA8BT;AAAA,IAEJ,CAAC,GACH;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS,UAAU,WAAW;AAAA,QAC9B,SAAS;AAAA,QACT,YAAY,aAAa,MAAM,UAAU,gBAAgB;AAAA,QACzD,kBAAiB;AAAA,QACjB,UAAU,EAAE,OAAO,sBAAsB,MAAM,eAAe;AAAA,QAC9D,WAAW,oBAAC,YAAS,WAAU,iCAAgC;AAAA,QAC/D,eAAe;AAAA,QAEf,8BAAC,SAAI,WAAU,6EACZ,oBAAU,IAAI,CAAC,UAAU,MACxB;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA,WAAW;AAAA,YACX,cAAY;AAAA,YACZ,aAAa;AAAA,YACb,cAAc,CAAC,GAAG,MAAM,UAAU,YAAY,GAAG,CAAC;AAAA;AAAA,UAL7C,GAAG,SAAS,MAAM,IAAI,SAAS,IAAI,IAAI,CAAC;AAAA,QAM/C,CACD,GACH;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":[]}
@@ -33,7 +33,7 @@ __export(portfolio_chip_filter_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(portfolio_chip_filter_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
- var import_link = __toESM(require("next/link"), 1);
36
+ var import_link = __toESM(require("./link.js"), 1);
37
37
  var import_cn = require("../utils/cn.js");
38
38
  const CHIP_CLASS = "shrink-0 rounded-full px-3.5 py-1.5 text-sm whitespace-nowrap transition-colors border";
39
39
  const INACTIVE_CLASS = "bg-muted border-border/60 text-muted-foreground hover:text-foreground hover:border-border";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/portfolio-chip-filter.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface PortfolioChipFilterOption {\n key: string;\n label: string;\n\n href?: string;\n}\n\nexport interface PortfolioChipFilterProps {\n options: PortfolioChipFilterOption[];\n\n value: string;\n onChange: (key: string) => void;\n\n showAll?: boolean;\n className?: string;\n}\n\nconst CHIP_CLASS =\n \"shrink-0 rounded-full px-3.5 py-1.5 text-sm whitespace-nowrap transition-colors border\";\nconst INACTIVE_CLASS = \"bg-muted border-border/60 text-muted-foreground hover:text-foreground hover:border-border\";\nconst ACTIVE_CLASS = \"bg-gradient-to-r from-brand-purple to-brand-orange border-transparent text-white font-bold\";\n\nexport function PortfolioChipFilter({\n options,\n value,\n onChange,\n showAll = true,\n className,\n}: PortfolioChipFilterProps) {\n const items = showAll ? [{ key: \"all\", label: \"All\" }, ...options] : options;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-1.5 overflow-x-auto scrollbar-hide -mx-4 px-4 sm:-mx-6 sm:px-6 lg:-mx-8 lg:px-8\",\n className,\n )}\n >\n {items.map((item) =>\n item.href ? (\n <Link\n key={item.key}\n href={item.href}\n className={cn(CHIP_CLASS, item.href === value ? ACTIVE_CLASS : INACTIVE_CLASS)}\n >\n {item.label}\n </Link>\n ) : (\n <button\n key={item.key}\n type=\"button\"\n onClick={() => onChange(item.key)}\n className={cn(CHIP_CLASS, item.key === value ? ACTIVE_CLASS : INACTIVE_CLASS)}\n >\n {item.label}\n </button>\n ),\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CU;AA3CV,kBAAiB;AACjB,gBAAmB;AAmBnB,MAAM,aACJ;AACF,MAAM,iBAAiB;AACvB,MAAM,eAAe;AAEd,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAA6B;AAC3B,QAAM,QAAQ,UAAU,CAAC,EAAE,KAAK,OAAO,OAAO,MAAM,GAAG,GAAG,OAAO,IAAI;AAErE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC,gBAAM;AAAA,QAAI,CAAC,SACV,KAAK,OACH;AAAA,UAAC,YAAAA;AAAA,UAAA;AAAA,YAEC,MAAM,KAAK;AAAA,YACX,eAAW,cAAG,YAAY,KAAK,SAAS,QAAQ,eAAe,cAAc;AAAA,YAE5E,eAAK;AAAA;AAAA,UAJD,KAAK;AAAA,QAKZ,IAEA;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,SAAS,MAAM,SAAS,KAAK,GAAG;AAAA,YAChC,eAAW,cAAG,YAAY,KAAK,QAAQ,QAAQ,eAAe,cAAc;AAAA,YAE3E,eAAK;AAAA;AAAA,UALD,KAAK;AAAA,QAMZ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/portfolio-chip-filter.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface PortfolioChipFilterOption {\n key: string;\n label: string;\n\n href?: string;\n}\n\nexport interface PortfolioChipFilterProps {\n options: PortfolioChipFilterOption[];\n\n value: string;\n onChange: (key: string) => void;\n\n showAll?: boolean;\n className?: string;\n}\n\nconst CHIP_CLASS =\n \"shrink-0 rounded-full px-3.5 py-1.5 text-sm whitespace-nowrap transition-colors border\";\nconst INACTIVE_CLASS = \"bg-muted border-border/60 text-muted-foreground hover:text-foreground hover:border-border\";\nconst ACTIVE_CLASS = \"bg-gradient-to-r from-brand-purple to-brand-orange border-transparent text-white font-bold\";\n\nexport function PortfolioChipFilter({\n options,\n value,\n onChange,\n showAll = true,\n className,\n}: PortfolioChipFilterProps) {\n const items = showAll ? [{ key: \"all\", label: \"All\" }, ...options] : options;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-1.5 overflow-x-auto scrollbar-hide -mx-4 px-4 sm:-mx-6 sm:px-6 lg:-mx-8 lg:px-8\",\n className,\n )}\n >\n {items.map((item) =>\n item.href ? (\n <Link\n key={item.key}\n href={item.href}\n className={cn(CHIP_CLASS, item.href === value ? ACTIVE_CLASS : INACTIVE_CLASS)}\n >\n {item.label}\n </Link>\n ) : (\n <button\n key={item.key}\n type=\"button\"\n onClick={() => onChange(item.key)}\n className={cn(CHIP_CLASS, item.key === value ? ACTIVE_CLASS : INACTIVE_CLASS)}\n >\n {item.label}\n </button>\n ),\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CU;AA3CV,kBAAiB;AACjB,gBAAmB;AAmBnB,MAAM,aACJ;AACF,MAAM,iBAAiB;AACvB,MAAM,eAAe;AAEd,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAA6B;AAC3B,QAAM,QAAQ,UAAU,CAAC,EAAE,KAAK,OAAO,OAAO,MAAM,GAAG,GAAG,OAAO,IAAI;AAErE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC,gBAAM;AAAA,QAAI,CAAC,SACV,KAAK,OACH;AAAA,UAAC,YAAAA;AAAA,UAAA;AAAA,YAEC,MAAM,KAAK;AAAA,YACX,eAAW,cAAG,YAAY,KAAK,SAAS,QAAQ,eAAe,cAAc;AAAA,YAE5E,eAAK;AAAA;AAAA,UAJD,KAAK;AAAA,QAKZ,IAEA;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,SAAS,MAAM,SAAS,KAAK,GAAG;AAAA,YAChC,eAAW,cAAG,YAAY,KAAK,QAAQ,QAAQ,eAAe,cAAc;AAAA,YAE3E,eAAK;AAAA;AAAA,UALD,KAAK;AAAA,QAMZ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;","names":["Link"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import Link from "./link.js";
4
4
  import { cn } from "../utils/cn.js";
5
5
  const CHIP_CLASS = "shrink-0 rounded-full px-3.5 py-1.5 text-sm whitespace-nowrap transition-colors border";
6
6
  const INACTIVE_CLASS = "bg-muted border-border/60 text-muted-foreground hover:text-foreground hover:border-border";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/portfolio-chip-filter.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface PortfolioChipFilterOption {\n key: string;\n label: string;\n\n href?: string;\n}\n\nexport interface PortfolioChipFilterProps {\n options: PortfolioChipFilterOption[];\n\n value: string;\n onChange: (key: string) => void;\n\n showAll?: boolean;\n className?: string;\n}\n\nconst CHIP_CLASS =\n \"shrink-0 rounded-full px-3.5 py-1.5 text-sm whitespace-nowrap transition-colors border\";\nconst INACTIVE_CLASS = \"bg-muted border-border/60 text-muted-foreground hover:text-foreground hover:border-border\";\nconst ACTIVE_CLASS = \"bg-gradient-to-r from-brand-purple to-brand-orange border-transparent text-white font-bold\";\n\nexport function PortfolioChipFilter({\n options,\n value,\n onChange,\n showAll = true,\n className,\n}: PortfolioChipFilterProps) {\n const items = showAll ? [{ key: \"all\", label: \"All\" }, ...options] : options;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-1.5 overflow-x-auto scrollbar-hide -mx-4 px-4 sm:-mx-6 sm:px-6 lg:-mx-8 lg:px-8\",\n className,\n )}\n >\n {items.map((item) =>\n item.href ? (\n <Link\n key={item.key}\n href={item.href}\n className={cn(CHIP_CLASS, item.href === value ? ACTIVE_CLASS : INACTIVE_CLASS)}\n >\n {item.label}\n </Link>\n ) : (\n <button\n key={item.key}\n type=\"button\"\n onClick={() => onChange(item.key)}\n className={cn(CHIP_CLASS, item.key === value ? ACTIVE_CLASS : INACTIVE_CLASS)}\n >\n {item.label}\n </button>\n ),\n )}\n </div>\n );\n}\n"],"mappings":";AA6CU;AA3CV,OAAO,UAAU;AACjB,SAAS,UAAU;AAmBnB,MAAM,aACJ;AACF,MAAM,iBAAiB;AACvB,MAAM,eAAe;AAEd,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAA6B;AAC3B,QAAM,QAAQ,UAAU,CAAC,EAAE,KAAK,OAAO,OAAO,MAAM,GAAG,GAAG,OAAO,IAAI;AAErE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC,gBAAM;AAAA,QAAI,CAAC,SACV,KAAK,OACH;AAAA,UAAC;AAAA;AAAA,YAEC,MAAM,KAAK;AAAA,YACX,WAAW,GAAG,YAAY,KAAK,SAAS,QAAQ,eAAe,cAAc;AAAA,YAE5E,eAAK;AAAA;AAAA,UAJD,KAAK;AAAA,QAKZ,IAEA;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,SAAS,MAAM,SAAS,KAAK,GAAG;AAAA,YAChC,WAAW,GAAG,YAAY,KAAK,QAAQ,QAAQ,eAAe,cAAc;AAAA,YAE3E,eAAK;AAAA;AAAA,UALD,KAAK;AAAA,QAMZ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/portfolio-chip-filter.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface PortfolioChipFilterOption {\n key: string;\n label: string;\n\n href?: string;\n}\n\nexport interface PortfolioChipFilterProps {\n options: PortfolioChipFilterOption[];\n\n value: string;\n onChange: (key: string) => void;\n\n showAll?: boolean;\n className?: string;\n}\n\nconst CHIP_CLASS =\n \"shrink-0 rounded-full px-3.5 py-1.5 text-sm whitespace-nowrap transition-colors border\";\nconst INACTIVE_CLASS = \"bg-muted border-border/60 text-muted-foreground hover:text-foreground hover:border-border\";\nconst ACTIVE_CLASS = \"bg-gradient-to-r from-brand-purple to-brand-orange border-transparent text-white font-bold\";\n\nexport function PortfolioChipFilter({\n options,\n value,\n onChange,\n showAll = true,\n className,\n}: PortfolioChipFilterProps) {\n const items = showAll ? [{ key: \"all\", label: \"All\" }, ...options] : options;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-1.5 overflow-x-auto scrollbar-hide -mx-4 px-4 sm:-mx-6 sm:px-6 lg:-mx-8 lg:px-8\",\n className,\n )}\n >\n {items.map((item) =>\n item.href ? (\n <Link\n key={item.key}\n href={item.href}\n className={cn(CHIP_CLASS, item.href === value ? ACTIVE_CLASS : INACTIVE_CLASS)}\n >\n {item.label}\n </Link>\n ) : (\n <button\n key={item.key}\n type=\"button\"\n onClick={() => onChange(item.key)}\n className={cn(CHIP_CLASS, item.key === value ? ACTIVE_CLASS : INACTIVE_CLASS)}\n >\n {item.label}\n </button>\n ),\n )}\n </div>\n );\n}\n"],"mappings":";AA6CU;AA3CV,OAAO,UAAU;AACjB,SAAS,UAAU;AAmBnB,MAAM,aACJ;AACF,MAAM,iBAAiB;AACvB,MAAM,eAAe;AAEd,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AACF,GAA6B;AAC3B,QAAM,QAAQ,UAAU,CAAC,EAAE,KAAK,OAAO,OAAO,MAAM,GAAG,GAAG,OAAO,IAAI;AAErE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEC,gBAAM;AAAA,QAAI,CAAC,SACV,KAAK,OACH;AAAA,UAAC;AAAA;AAAA,YAEC,MAAM,KAAK;AAAA,YACX,WAAW,GAAG,YAAY,KAAK,SAAS,QAAQ,eAAe,cAAc;AAAA,YAE5E,eAAK;AAAA;AAAA,UAJD,KAAK;AAAA,QAKZ,IAEA;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,SAAS,MAAM,SAAS,KAAK,GAAG;AAAA,YAChC,WAAW,GAAG,YAAY,KAAK,QAAQ,QAAQ,eAAe,cAAc;AAAA,YAE3E,eAAK;AAAA;AAAA,UALD,KAAK;AAAA,QAMZ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -33,7 +33,7 @@ __export(portfolio_header_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(portfolio_header_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
- var import_link = __toESM(require("next/link"), 1);
36
+ var import_link = __toESM(require("./link.js"), 1);
37
37
  var import_cn = require("../utils/cn.js");
38
38
  var import_address_display = require("./address-display.js");
39
39
  function PortfolioHeader({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/portfolio-header.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { cn } from \"../utils/cn.js\";\nimport { AddressDisplay } from \"./address-display.js\";\n\nexport interface PortfolioHeaderScore {\n\n levelName: string;\n totalXp: number;\n\n href?: string;\n}\n\nexport interface PortfolioHeaderProps {\n address: string;\n score?: PortfolioHeaderScore | null;\n className?: string;\n}\n\nexport function PortfolioHeader({\n address,\n score,\n className,\n}: PortfolioHeaderProps) {\n const scoreChip = score && (\n <div className=\"rounded-full bg-gradient-to-r from-brand-orange to-brand-maeve px-3.5 py-1.5 flex items-baseline gap-2 whitespace-nowrap text-white\">\n <span className=\"text-sm font-bold\">\n {score.levelName}\n </span>\n <span className=\"text-xs font-medium text-white/80 tabular-nums\">\n {score.totalXp.toLocaleString()} XP\n </span>\n </div>\n );\n\n return (\n <div className={cn(\"flex items-center justify-between gap-4\", className)}>\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-muted-foreground\">\n Portfolio\n </p>\n <AddressDisplay\n address={address}\n chars={6}\n className=\"text-2xl sm:text-3xl font-black tracking-tight text-foreground\"\n />\n </div>\n {score?.href ? (\n <Link href={score.href} className=\"shrink-0 active:opacity-80\">\n {scoreChip}\n </Link>\n ) : (\n <div className=\"shrink-0\">{scoreChip}</div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BM;AAzBN,kBAAiB;AACjB,gBAAmB;AACnB,6BAA+B;AAgBxB,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,YAAY,SAChB,6CAAC,SAAI,WAAU,uIACb;AAAA,gDAAC,UAAK,WAAU,qBACb,gBAAM,WACT;AAAA,IACA,6CAAC,UAAK,WAAU,kDACb;AAAA,YAAM,QAAQ,eAAe;AAAA,MAAE;AAAA,OAClC;AAAA,KACF;AAGF,SACE,6CAAC,SAAI,eAAW,cAAG,2CAA2C,SAAS,GACrE;AAAA,iDAAC,SAAI,WAAU,WACb;AAAA,kDAAC,OAAE,WAAU,6CAA4C,uBAEzD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,WAAU;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,IACC,OAAO,OACN,4CAAC,YAAAA,SAAA,EAAK,MAAM,MAAM,MAAM,WAAU,8BAC/B,qBACH,IAEA,4CAAC,SAAI,WAAU,YAAY,qBAAU;AAAA,KAEzC;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/portfolio-header.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { AddressDisplay } from \"./address-display.js\";\n\nexport interface PortfolioHeaderScore {\n\n levelName: string;\n totalXp: number;\n\n href?: string;\n}\n\nexport interface PortfolioHeaderProps {\n address: string;\n score?: PortfolioHeaderScore | null;\n className?: string;\n}\n\nexport function PortfolioHeader({\n address,\n score,\n className,\n}: PortfolioHeaderProps) {\n const scoreChip = score && (\n <div className=\"rounded-full bg-gradient-to-r from-brand-orange to-brand-maeve px-3.5 py-1.5 flex items-baseline gap-2 whitespace-nowrap text-white\">\n <span className=\"text-sm font-bold\">\n {score.levelName}\n </span>\n <span className=\"text-xs font-medium text-white/80 tabular-nums\">\n {score.totalXp.toLocaleString()} XP\n </span>\n </div>\n );\n\n return (\n <div className={cn(\"flex items-center justify-between gap-4\", className)}>\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-muted-foreground\">\n Portfolio\n </p>\n <AddressDisplay\n address={address}\n chars={6}\n className=\"text-2xl sm:text-3xl font-black tracking-tight text-foreground\"\n />\n </div>\n {score?.href ? (\n <Link href={score.href} className=\"shrink-0 active:opacity-80\">\n {scoreChip}\n </Link>\n ) : (\n <div className=\"shrink-0\">{scoreChip}</div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BM;AAzBN,kBAAiB;AACjB,gBAAmB;AACnB,6BAA+B;AAgBxB,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,YAAY,SAChB,6CAAC,SAAI,WAAU,uIACb;AAAA,gDAAC,UAAK,WAAU,qBACb,gBAAM,WACT;AAAA,IACA,6CAAC,UAAK,WAAU,kDACb;AAAA,YAAM,QAAQ,eAAe;AAAA,MAAE;AAAA,OAClC;AAAA,KACF;AAGF,SACE,6CAAC,SAAI,eAAW,cAAG,2CAA2C,SAAS,GACrE;AAAA,iDAAC,SAAI,WAAU,WACb;AAAA,kDAAC,OAAE,WAAU,6CAA4C,uBAEzD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,WAAU;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,IACC,OAAO,OACN,4CAAC,YAAAA,SAAA,EAAK,MAAM,MAAM,MAAM,WAAU,8BAC/B,qBACH,IAEA,4CAAC,SAAI,WAAU,YAAY,qBAAU;AAAA,KAEzC;AAEJ;","names":["Link"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import Link from "./link.js";
4
4
  import { cn } from "../utils/cn.js";
5
5
  import { AddressDisplay } from "./address-display.js";
6
6
  function PortfolioHeader({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/portfolio-header.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { cn } from \"../utils/cn.js\";\nimport { AddressDisplay } from \"./address-display.js\";\n\nexport interface PortfolioHeaderScore {\n\n levelName: string;\n totalXp: number;\n\n href?: string;\n}\n\nexport interface PortfolioHeaderProps {\n address: string;\n score?: PortfolioHeaderScore | null;\n className?: string;\n}\n\nexport function PortfolioHeader({\n address,\n score,\n className,\n}: PortfolioHeaderProps) {\n const scoreChip = score && (\n <div className=\"rounded-full bg-gradient-to-r from-brand-orange to-brand-maeve px-3.5 py-1.5 flex items-baseline gap-2 whitespace-nowrap text-white\">\n <span className=\"text-sm font-bold\">\n {score.levelName}\n </span>\n <span className=\"text-xs font-medium text-white/80 tabular-nums\">\n {score.totalXp.toLocaleString()} XP\n </span>\n </div>\n );\n\n return (\n <div className={cn(\"flex items-center justify-between gap-4\", className)}>\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-muted-foreground\">\n Portfolio\n </p>\n <AddressDisplay\n address={address}\n chars={6}\n className=\"text-2xl sm:text-3xl font-black tracking-tight text-foreground\"\n />\n </div>\n {score?.href ? (\n <Link href={score.href} className=\"shrink-0 active:opacity-80\">\n {scoreChip}\n </Link>\n ) : (\n <div className=\"shrink-0\">{scoreChip}</div>\n )}\n </div>\n );\n}\n"],"mappings":";AA2BM,cAGA,YAHA;AAzBN,OAAO,UAAU;AACjB,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAgBxB,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,YAAY,SAChB,qBAAC,SAAI,WAAU,uIACb;AAAA,wBAAC,UAAK,WAAU,qBACb,gBAAM,WACT;AAAA,IACA,qBAAC,UAAK,WAAU,kDACb;AAAA,YAAM,QAAQ,eAAe;AAAA,MAAE;AAAA,OAClC;AAAA,KACF;AAGF,SACE,qBAAC,SAAI,WAAW,GAAG,2CAA2C,SAAS,GACrE;AAAA,yBAAC,SAAI,WAAU,WACb;AAAA,0BAAC,OAAE,WAAU,6CAA4C,uBAEzD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,WAAU;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,IACC,OAAO,OACN,oBAAC,QAAK,MAAM,MAAM,MAAM,WAAU,8BAC/B,qBACH,IAEA,oBAAC,SAAI,WAAU,YAAY,qBAAU;AAAA,KAEzC;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/portfolio-header.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { AddressDisplay } from \"./address-display.js\";\n\nexport interface PortfolioHeaderScore {\n\n levelName: string;\n totalXp: number;\n\n href?: string;\n}\n\nexport interface PortfolioHeaderProps {\n address: string;\n score?: PortfolioHeaderScore | null;\n className?: string;\n}\n\nexport function PortfolioHeader({\n address,\n score,\n className,\n}: PortfolioHeaderProps) {\n const scoreChip = score && (\n <div className=\"rounded-full bg-gradient-to-r from-brand-orange to-brand-maeve px-3.5 py-1.5 flex items-baseline gap-2 whitespace-nowrap text-white\">\n <span className=\"text-sm font-bold\">\n {score.levelName}\n </span>\n <span className=\"text-xs font-medium text-white/80 tabular-nums\">\n {score.totalXp.toLocaleString()} XP\n </span>\n </div>\n );\n\n return (\n <div className={cn(\"flex items-center justify-between gap-4\", className)}>\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-muted-foreground\">\n Portfolio\n </p>\n <AddressDisplay\n address={address}\n chars={6}\n className=\"text-2xl sm:text-3xl font-black tracking-tight text-foreground\"\n />\n </div>\n {score?.href ? (\n <Link href={score.href} className=\"shrink-0 active:opacity-80\">\n {scoreChip}\n </Link>\n ) : (\n <div className=\"shrink-0\">{scoreChip}</div>\n )}\n </div>\n );\n}\n"],"mappings":";AA2BM,cAGA,YAHA;AAzBN,OAAO,UAAU;AACjB,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAgBxB,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,YAAY,SAChB,qBAAC,SAAI,WAAU,uIACb;AAAA,wBAAC,UAAK,WAAU,qBACb,gBAAM,WACT;AAAA,IACA,qBAAC,UAAK,WAAU,kDACb;AAAA,YAAM,QAAQ,eAAe;AAAA,MAAE;AAAA,OAClC;AAAA,KACF;AAGF,SACE,qBAAC,SAAI,WAAW,GAAG,2CAA2C,SAAS,GACrE;AAAA,yBAAC,SAAI,WAAU,WACb;AAAA,0BAAC,OAAE,WAAU,6CAA4C,uBAEzD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,WAAU;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,IACC,OAAO,OACN,oBAAC,QAAK,MAAM,MAAM,MAAM,WAAU,8BAC/B,qBACH,IAEA,oBAAC,SAAI,WAAU,YAAY,qBAAU;AAAA,KAEzC;AAEJ;","names":[]}
@@ -33,7 +33,7 @@ __export(portfolio_section_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(portfolio_section_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
- var import_link = __toESM(require("next/link"), 1);
36
+ var import_link = __toESM(require("./link.js"), 1);
37
37
  var import_lucide_react = require("lucide-react");
38
38
  var import_cn = require("../utils/cn.js");
39
39
  const BORDER_BY_COLOR = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/portfolio-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { ArrowRight } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\n\nexport type PortfolioSectionColor =\n | \"blue\"\n | \"purple\"\n | \"rose\"\n | \"orange\"\n | \"maeve\"\n | \"navy\";\n\nconst BORDER_BY_COLOR: Record<PortfolioSectionColor, string> = {\n blue: \"border-brand-blue/40\",\n purple: \"border-brand-purple/40\",\n rose: \"border-brand-rose/40\",\n orange: \"border-brand-orange/40\",\n maeve: \"border-brand-maeve/40\",\n navy: \"border-brand-navy/40\",\n};\n\nexport interface PortfolioSectionProps {\n title: string;\n href: string;\n\n /** Which brand color accents this section's hairline border. */\n color?: PortfolioSectionColor;\n\n /** \"default\" sits in the grid alongside its siblings; \"wide\" spans the\n * full row instead — for list-like content (e.g. Activity) that reads\n * better edge-to-edge than column-width. */\n size?: \"default\" | \"wide\";\n children: React.ReactNode;\n className?: string;\n}\n\nexport function PortfolioSection({\n title,\n href,\n color = \"purple\",\n size = \"default\",\n children,\n className,\n}: PortfolioSectionProps) {\n return (\n <section\n className={cn(\n \"rounded-2xl border min-w-0\",\n BORDER_BY_COLOR[color],\n size === \"wide\" && \"sm:col-span-2 lg:col-span-3\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-3 px-5 pt-5 pb-3\">\n <h2 className=\"text-sm font-black text-foreground tracking-tight\">\n {title}\n </h2>\n <Link\n href={href}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors\"\n >\n See all\n <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <div className=\"px-5 pb-5\">{children}</div>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwDQ;AAtDR,kBAAiB;AACjB,0BAA2B;AAC3B,gBAAmB;AAUnB,MAAM,kBAAyD;AAAA,EAC7D,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AACR;AAiBO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA,gBAAgB,KAAK;AAAA,QACrB,SAAS,UAAU;AAAA,QACnB;AAAA,MACF;AAAA,MAEA;AAAA,qDAAC,SAAI,WAAU,0DACb;AAAA,sDAAC,QAAG,WAAU,qDACX,iBACH;AAAA,UACA;AAAA,YAAC,YAAAA;AAAA,YAAA;AAAA,cACC;AAAA,cACA,WAAU;AAAA,cACX;AAAA;AAAA,gBAEC,4CAAC,kCAAW,WAAU,WAAU;AAAA;AAAA;AAAA,UAClC;AAAA,WACF;AAAA,QACA,4CAAC,SAAI,WAAU,aAAa,UAAS;AAAA;AAAA;AAAA,EACvC;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/portfolio-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\n\nexport type PortfolioSectionColor =\n | \"blue\"\n | \"purple\"\n | \"rose\"\n | \"orange\"\n | \"maeve\"\n | \"navy\";\n\nconst BORDER_BY_COLOR: Record<PortfolioSectionColor, string> = {\n blue: \"border-brand-blue/40\",\n purple: \"border-brand-purple/40\",\n rose: \"border-brand-rose/40\",\n orange: \"border-brand-orange/40\",\n maeve: \"border-brand-maeve/40\",\n navy: \"border-brand-navy/40\",\n};\n\nexport interface PortfolioSectionProps {\n title: string;\n href: string;\n\n /** Which brand color accents this section's hairline border. */\n color?: PortfolioSectionColor;\n\n /** \"default\" sits in the grid alongside its siblings; \"wide\" spans the\n * full row instead — for list-like content (e.g. Activity) that reads\n * better edge-to-edge than column-width. */\n size?: \"default\" | \"wide\";\n children: React.ReactNode;\n className?: string;\n}\n\nexport function PortfolioSection({\n title,\n href,\n color = \"purple\",\n size = \"default\",\n children,\n className,\n}: PortfolioSectionProps) {\n return (\n <section\n className={cn(\n \"rounded-2xl border min-w-0\",\n BORDER_BY_COLOR[color],\n size === \"wide\" && \"sm:col-span-2 lg:col-span-3\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-3 px-5 pt-5 pb-3\">\n <h2 className=\"text-sm font-black text-foreground tracking-tight\">\n {title}\n </h2>\n <Link\n href={href}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors\"\n >\n See all\n <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <div className=\"px-5 pb-5\">{children}</div>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwDQ;AAtDR,kBAAiB;AACjB,0BAA2B;AAC3B,gBAAmB;AAUnB,MAAM,kBAAyD;AAAA,EAC7D,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AACR;AAiBO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA,gBAAgB,KAAK;AAAA,QACrB,SAAS,UAAU;AAAA,QACnB;AAAA,MACF;AAAA,MAEA;AAAA,qDAAC,SAAI,WAAU,0DACb;AAAA,sDAAC,QAAG,WAAU,qDACX,iBACH;AAAA,UACA;AAAA,YAAC,YAAAA;AAAA,YAAA;AAAA,cACC;AAAA,cACA,WAAU;AAAA,cACX;AAAA;AAAA,gBAEC,4CAAC,kCAAW,WAAU,WAAU;AAAA;AAAA;AAAA,UAClC;AAAA,WACF;AAAA,QACA,4CAAC,SAAI,WAAU,aAAa,UAAS;AAAA;AAAA;AAAA,EACvC;AAEJ;","names":["Link"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import Link from "./link.js";
4
4
  import { ArrowRight } from "lucide-react";
5
5
  import { cn } from "../utils/cn.js";
6
6
  const BORDER_BY_COLOR = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/portfolio-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { ArrowRight } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\n\nexport type PortfolioSectionColor =\n | \"blue\"\n | \"purple\"\n | \"rose\"\n | \"orange\"\n | \"maeve\"\n | \"navy\";\n\nconst BORDER_BY_COLOR: Record<PortfolioSectionColor, string> = {\n blue: \"border-brand-blue/40\",\n purple: \"border-brand-purple/40\",\n rose: \"border-brand-rose/40\",\n orange: \"border-brand-orange/40\",\n maeve: \"border-brand-maeve/40\",\n navy: \"border-brand-navy/40\",\n};\n\nexport interface PortfolioSectionProps {\n title: string;\n href: string;\n\n /** Which brand color accents this section's hairline border. */\n color?: PortfolioSectionColor;\n\n /** \"default\" sits in the grid alongside its siblings; \"wide\" spans the\n * full row instead — for list-like content (e.g. Activity) that reads\n * better edge-to-edge than column-width. */\n size?: \"default\" | \"wide\";\n children: React.ReactNode;\n className?: string;\n}\n\nexport function PortfolioSection({\n title,\n href,\n color = \"purple\",\n size = \"default\",\n children,\n className,\n}: PortfolioSectionProps) {\n return (\n <section\n className={cn(\n \"rounded-2xl border min-w-0\",\n BORDER_BY_COLOR[color],\n size === \"wide\" && \"sm:col-span-2 lg:col-span-3\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-3 px-5 pt-5 pb-3\">\n <h2 className=\"text-sm font-black text-foreground tracking-tight\">\n {title}\n </h2>\n <Link\n href={href}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors\"\n >\n See all\n <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <div className=\"px-5 pb-5\">{children}</div>\n </section>\n );\n}\n"],"mappings":";AAwDQ,cAGA,YAHA;AAtDR,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AAUnB,MAAM,kBAAyD;AAAA,EAC7D,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AACR;AAiBO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,KAAK;AAAA,QACrB,SAAS,UAAU;AAAA,QACnB;AAAA,MACF;AAAA,MAEA;AAAA,6BAAC,SAAI,WAAU,0DACb;AAAA,8BAAC,QAAG,WAAU,qDACX,iBACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,WAAU;AAAA,cACX;AAAA;AAAA,gBAEC,oBAAC,cAAW,WAAU,WAAU;AAAA;AAAA;AAAA,UAClC;AAAA,WACF;AAAA,QACA,oBAAC,SAAI,WAAU,aAAa,UAAS;AAAA;AAAA;AAAA,EACvC;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/portfolio-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\n\nexport type PortfolioSectionColor =\n | \"blue\"\n | \"purple\"\n | \"rose\"\n | \"orange\"\n | \"maeve\"\n | \"navy\";\n\nconst BORDER_BY_COLOR: Record<PortfolioSectionColor, string> = {\n blue: \"border-brand-blue/40\",\n purple: \"border-brand-purple/40\",\n rose: \"border-brand-rose/40\",\n orange: \"border-brand-orange/40\",\n maeve: \"border-brand-maeve/40\",\n navy: \"border-brand-navy/40\",\n};\n\nexport interface PortfolioSectionProps {\n title: string;\n href: string;\n\n /** Which brand color accents this section's hairline border. */\n color?: PortfolioSectionColor;\n\n /** \"default\" sits in the grid alongside its siblings; \"wide\" spans the\n * full row instead — for list-like content (e.g. Activity) that reads\n * better edge-to-edge than column-width. */\n size?: \"default\" | \"wide\";\n children: React.ReactNode;\n className?: string;\n}\n\nexport function PortfolioSection({\n title,\n href,\n color = \"purple\",\n size = \"default\",\n children,\n className,\n}: PortfolioSectionProps) {\n return (\n <section\n className={cn(\n \"rounded-2xl border min-w-0\",\n BORDER_BY_COLOR[color],\n size === \"wide\" && \"sm:col-span-2 lg:col-span-3\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-3 px-5 pt-5 pb-3\">\n <h2 className=\"text-sm font-black text-foreground tracking-tight\">\n {title}\n </h2>\n <Link\n href={href}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors\"\n >\n See all\n <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <div className=\"px-5 pb-5\">{children}</div>\n </section>\n );\n}\n"],"mappings":";AAwDQ,cAGA,YAHA;AAtDR,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AAUnB,MAAM,kBAAyD;AAAA,EAC7D,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AACR;AAiBO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,gBAAgB,KAAK;AAAA,QACrB,SAAS,UAAU;AAAA,QACnB;AAAA,MACF;AAAA,MAEA;AAAA,6BAAC,SAAI,WAAU,0DACb;AAAA,8BAAC,QAAG,WAAU,qDACX,iBACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,WAAU;AAAA,cACX;AAAA;AAAA,gBAEC,oBAAC,cAAW,WAAU,WAAU;AAAA;AAAA;AAAA,UAClC;AAAA,WACF;AAAA,QACA,oBAAC,SAAI,WAAU,aAAa,UAAS;AAAA;AAAA;AAAA,EACvC;AAEJ;","names":[]}
@@ -33,7 +33,7 @@ __export(remixes_tab_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(remixes_tab_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
- var import_link = __toESM(require("next/link"), 1);
36
+ var import_link = __toESM(require("./link.js"), 1);
37
37
  var import_sdk = require("@medialane/sdk");
38
38
  var import_lucide_react = require("lucide-react");
39
39
  var import_use_remix_offers = require("../utils/use-remix-offers.js");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/remixes-tab.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { assetHref } from \"@medialane/sdk\";\nimport { GitBranch } from \"lucide-react\";\nimport { useTokenRemixes } from \"../utils/use-remix-offers.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport type { ApiFetchConfig } from \"../utils/api-fetch.js\";\n\nexport interface RemixesTabProps {\n apiConfig: ApiFetchConfig;\n contractAddress: string;\n tokenId: string;\n}\n\nexport function RemixesTab({ apiConfig, contractAddress, tokenId }: RemixesTabProps) {\n const { remixes, total, isLoading } = useTokenRemixes(apiConfig, contractAddress, tokenId);\n\n if (isLoading) {\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"aspect-square rounded-xl\" />\n ))}\n </div>\n );\n }\n\n if (remixes.length === 0) {\n return (\n <div className=\"flex flex-col items-center gap-3 py-12 text-center\">\n <div className=\"h-12 w-12 rounded-full bg-primary/10 flex items-center justify-center\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n </div>\n <p className=\"text-sm font-medium\">No remixes yet</p>\n <p className=\"text-xs text-muted-foreground\">Remix this asset to create the first derivative work.</p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">{total} remix{total !== 1 ? \"es\" : \"\"} of this asset</p>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-3\">\n {remixes.map((remix) =>\n remix.remixContract && remix.remixTokenId ? (\n <Link\n key={remix.id}\n href={assetHref(\"STARKNET\", remix.remixContract, remix.remixTokenId)}\n className=\"group relative block\"\n >\n <div className=\"card-base p-3 space-y-1 hover:border-primary/40 transition-colors\">\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"h-3 w-3 text-primary\" />\n <span className=\"text-primary font-medium\">Remix</span>\n </div>\n <p className=\"text-xs tabular-nums truncate\">#{remix.remixTokenId}</p>\n <p className=\"text-[10px] text-muted-foreground\">{remix.licenseType}</p>\n <div className=\"flex gap-1 flex-wrap\">\n {remix.commercial && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded-full bg-brand-blue/10 text-brand-blue border border-brand-blue/20\">Commercial</span>\n )}\n {remix.derivatives && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded-full bg-primary/10 text-primary border border-primary/20\">Derivatives</span>\n )}\n </div>\n </div>\n </Link>\n ) : null\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBU;AApBV,kBAAiB;AACjB,iBAA0B;AAC1B,0BAA0B;AAC1B,8BAAgC;AAChC,sBAAyB;AASlB,SAAS,WAAW,EAAE,WAAW,iBAAiB,QAAQ,GAAoB;AACnF,QAAM,EAAE,SAAS,OAAO,UAAU,QAAI,yCAAgB,WAAW,iBAAiB,OAAO;AAEzF,MAAI,WAAW;AACb,WACE,4CAAC,SAAI,WAAU,yCACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,4CAAC,4BAAiB,WAAU,8BAAb,CAAwC,CACxD,GACH;AAAA,EAEJ;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,WACE,6CAAC,SAAI,WAAU,sDACb;AAAA,kDAAC,SAAI,WAAU,yEACb,sDAAC,iCAAU,WAAU,wBAAuB,GAC9C;AAAA,MACA,4CAAC,OAAE,WAAU,uBAAsB,4BAAc;AAAA,MACjD,4CAAC,OAAE,WAAU,iCAAgC,mEAAqD;AAAA,OACpG;AAAA,EAEJ;AAEA,SACE,6CAAC,SAAI,WAAU,aACb;AAAA,iDAAC,OAAE,WAAU,iCAAiC;AAAA;AAAA,MAAM;AAAA,MAAO,UAAU,IAAI,OAAO;AAAA,MAAG;AAAA,OAAc;AAAA,IACjG,4CAAC,SAAI,WAAU,yCACZ,kBAAQ;AAAA,MAAI,CAAC,UACZ,MAAM,iBAAiB,MAAM,eAC3B;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UAEC,UAAM,sBAAU,YAAY,MAAM,eAAe,MAAM,YAAY;AAAA,UACnE,WAAU;AAAA,UAEV,uDAAC,SAAI,WAAU,qEACb;AAAA,yDAAC,SAAI,WAAU,2DACb;AAAA,0DAAC,iCAAU,WAAU,wBAAuB;AAAA,cAC5C,4CAAC,UAAK,WAAU,4BAA2B,mBAAK;AAAA,eAClD;AAAA,YACA,6CAAC,OAAE,WAAU,iCAAgC;AAAA;AAAA,cAAE,MAAM;AAAA,eAAa;AAAA,YAClE,4CAAC,OAAE,WAAU,qCAAqC,gBAAM,aAAY;AAAA,YACpE,6CAAC,SAAI,WAAU,wBACZ;AAAA,oBAAM,cACL,4CAAC,UAAK,WAAU,sGAAqG,wBAAU;AAAA,cAEhI,MAAM,eACL,4CAAC,UAAK,WAAU,6FAA4F,yBAAW;AAAA,eAE3H;AAAA,aACF;AAAA;AAAA,QAnBK,MAAM;AAAA,MAoBb,IACE;AAAA,IACN,GACF;AAAA,KACF;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/remixes-tab.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { assetHref } from \"@medialane/sdk\";\nimport { GitBranch } from \"lucide-react\";\nimport { useTokenRemixes } from \"../utils/use-remix-offers.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport type { ApiFetchConfig } from \"../utils/api-fetch.js\";\n\nexport interface RemixesTabProps {\n apiConfig: ApiFetchConfig;\n contractAddress: string;\n tokenId: string;\n}\n\nexport function RemixesTab({ apiConfig, contractAddress, tokenId }: RemixesTabProps) {\n const { remixes, total, isLoading } = useTokenRemixes(apiConfig, contractAddress, tokenId);\n\n if (isLoading) {\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"aspect-square rounded-xl\" />\n ))}\n </div>\n );\n }\n\n if (remixes.length === 0) {\n return (\n <div className=\"flex flex-col items-center gap-3 py-12 text-center\">\n <div className=\"h-12 w-12 rounded-full bg-primary/10 flex items-center justify-center\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n </div>\n <p className=\"text-sm font-medium\">No remixes yet</p>\n <p className=\"text-xs text-muted-foreground\">Remix this asset to create the first derivative work.</p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">{total} remix{total !== 1 ? \"es\" : \"\"} of this asset</p>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-3\">\n {remixes.map((remix) =>\n remix.remixContract && remix.remixTokenId ? (\n <Link\n key={remix.id}\n href={assetHref(\"STARKNET\", remix.remixContract, remix.remixTokenId)}\n className=\"group relative block\"\n >\n <div className=\"card-base p-3 space-y-1 hover:border-primary/40 transition-colors\">\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"h-3 w-3 text-primary\" />\n <span className=\"text-primary font-medium\">Remix</span>\n </div>\n <p className=\"text-xs tabular-nums truncate\">#{remix.remixTokenId}</p>\n <p className=\"text-[10px] text-muted-foreground\">{remix.licenseType}</p>\n <div className=\"flex gap-1 flex-wrap\">\n {remix.commercial && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded-full bg-brand-blue/10 text-brand-blue border border-brand-blue/20\">Commercial</span>\n )}\n {remix.derivatives && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded-full bg-primary/10 text-primary border border-primary/20\">Derivatives</span>\n )}\n </div>\n </div>\n </Link>\n ) : null\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBU;AApBV,kBAAiB;AACjB,iBAA0B;AAC1B,0BAA0B;AAC1B,8BAAgC;AAChC,sBAAyB;AASlB,SAAS,WAAW,EAAE,WAAW,iBAAiB,QAAQ,GAAoB;AACnF,QAAM,EAAE,SAAS,OAAO,UAAU,QAAI,yCAAgB,WAAW,iBAAiB,OAAO;AAEzF,MAAI,WAAW;AACb,WACE,4CAAC,SAAI,WAAU,yCACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,4CAAC,4BAAiB,WAAU,8BAAb,CAAwC,CACxD,GACH;AAAA,EAEJ;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,WACE,6CAAC,SAAI,WAAU,sDACb;AAAA,kDAAC,SAAI,WAAU,yEACb,sDAAC,iCAAU,WAAU,wBAAuB,GAC9C;AAAA,MACA,4CAAC,OAAE,WAAU,uBAAsB,4BAAc;AAAA,MACjD,4CAAC,OAAE,WAAU,iCAAgC,mEAAqD;AAAA,OACpG;AAAA,EAEJ;AAEA,SACE,6CAAC,SAAI,WAAU,aACb;AAAA,iDAAC,OAAE,WAAU,iCAAiC;AAAA;AAAA,MAAM;AAAA,MAAO,UAAU,IAAI,OAAO;AAAA,MAAG;AAAA,OAAc;AAAA,IACjG,4CAAC,SAAI,WAAU,yCACZ,kBAAQ;AAAA,MAAI,CAAC,UACZ,MAAM,iBAAiB,MAAM,eAC3B;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UAEC,UAAM,sBAAU,YAAY,MAAM,eAAe,MAAM,YAAY;AAAA,UACnE,WAAU;AAAA,UAEV,uDAAC,SAAI,WAAU,qEACb;AAAA,yDAAC,SAAI,WAAU,2DACb;AAAA,0DAAC,iCAAU,WAAU,wBAAuB;AAAA,cAC5C,4CAAC,UAAK,WAAU,4BAA2B,mBAAK;AAAA,eAClD;AAAA,YACA,6CAAC,OAAE,WAAU,iCAAgC;AAAA;AAAA,cAAE,MAAM;AAAA,eAAa;AAAA,YAClE,4CAAC,OAAE,WAAU,qCAAqC,gBAAM,aAAY;AAAA,YACpE,6CAAC,SAAI,WAAU,wBACZ;AAAA,oBAAM,cACL,4CAAC,UAAK,WAAU,sGAAqG,wBAAU;AAAA,cAEhI,MAAM,eACL,4CAAC,UAAK,WAAU,6FAA4F,yBAAW;AAAA,eAE3H;AAAA,aACF;AAAA;AAAA,QAnBK,MAAM;AAAA,MAoBb,IACE;AAAA,IACN,GACF;AAAA,KACF;AAEJ;","names":["Link"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import Link from "./link.js";
4
4
  import { assetHref } from "@medialane/sdk";
5
5
  import { GitBranch } from "lucide-react";
6
6
  import { useTokenRemixes } from "../utils/use-remix-offers.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/remixes-tab.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { assetHref } from \"@medialane/sdk\";\nimport { GitBranch } from \"lucide-react\";\nimport { useTokenRemixes } from \"../utils/use-remix-offers.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport type { ApiFetchConfig } from \"../utils/api-fetch.js\";\n\nexport interface RemixesTabProps {\n apiConfig: ApiFetchConfig;\n contractAddress: string;\n tokenId: string;\n}\n\nexport function RemixesTab({ apiConfig, contractAddress, tokenId }: RemixesTabProps) {\n const { remixes, total, isLoading } = useTokenRemixes(apiConfig, contractAddress, tokenId);\n\n if (isLoading) {\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"aspect-square rounded-xl\" />\n ))}\n </div>\n );\n }\n\n if (remixes.length === 0) {\n return (\n <div className=\"flex flex-col items-center gap-3 py-12 text-center\">\n <div className=\"h-12 w-12 rounded-full bg-primary/10 flex items-center justify-center\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n </div>\n <p className=\"text-sm font-medium\">No remixes yet</p>\n <p className=\"text-xs text-muted-foreground\">Remix this asset to create the first derivative work.</p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">{total} remix{total !== 1 ? \"es\" : \"\"} of this asset</p>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-3\">\n {remixes.map((remix) =>\n remix.remixContract && remix.remixTokenId ? (\n <Link\n key={remix.id}\n href={assetHref(\"STARKNET\", remix.remixContract, remix.remixTokenId)}\n className=\"group relative block\"\n >\n <div className=\"card-base p-3 space-y-1 hover:border-primary/40 transition-colors\">\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"h-3 w-3 text-primary\" />\n <span className=\"text-primary font-medium\">Remix</span>\n </div>\n <p className=\"text-xs tabular-nums truncate\">#{remix.remixTokenId}</p>\n <p className=\"text-[10px] text-muted-foreground\">{remix.licenseType}</p>\n <div className=\"flex gap-1 flex-wrap\">\n {remix.commercial && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded-full bg-brand-blue/10 text-brand-blue border border-brand-blue/20\">Commercial</span>\n )}\n {remix.derivatives && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded-full bg-primary/10 text-primary border border-primary/20\">Derivatives</span>\n )}\n </div>\n </div>\n </Link>\n ) : null\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";AAsBU,cAQJ,YARI;AApBV,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AASlB,SAAS,WAAW,EAAE,WAAW,iBAAiB,QAAQ,GAAoB;AACnF,QAAM,EAAE,SAAS,OAAO,UAAU,IAAI,gBAAgB,WAAW,iBAAiB,OAAO;AAEzF,MAAI,WAAW;AACb,WACE,oBAAC,SAAI,WAAU,yCACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,oBAAC,YAAiB,WAAU,8BAAb,CAAwC,CACxD,GACH;AAAA,EAEJ;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,WACE,qBAAC,SAAI,WAAU,sDACb;AAAA,0BAAC,SAAI,WAAU,yEACb,8BAAC,aAAU,WAAU,wBAAuB,GAC9C;AAAA,MACA,oBAAC,OAAE,WAAU,uBAAsB,4BAAc;AAAA,MACjD,oBAAC,OAAE,WAAU,iCAAgC,mEAAqD;AAAA,OACpG;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,yBAAC,OAAE,WAAU,iCAAiC;AAAA;AAAA,MAAM;AAAA,MAAO,UAAU,IAAI,OAAO;AAAA,MAAG;AAAA,OAAc;AAAA,IACjG,oBAAC,SAAI,WAAU,yCACZ,kBAAQ;AAAA,MAAI,CAAC,UACZ,MAAM,iBAAiB,MAAM,eAC3B;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM,UAAU,YAAY,MAAM,eAAe,MAAM,YAAY;AAAA,UACnE,WAAU;AAAA,UAEV,+BAAC,SAAI,WAAU,qEACb;AAAA,iCAAC,SAAI,WAAU,2DACb;AAAA,kCAAC,aAAU,WAAU,wBAAuB;AAAA,cAC5C,oBAAC,UAAK,WAAU,4BAA2B,mBAAK;AAAA,eAClD;AAAA,YACA,qBAAC,OAAE,WAAU,iCAAgC;AAAA;AAAA,cAAE,MAAM;AAAA,eAAa;AAAA,YAClE,oBAAC,OAAE,WAAU,qCAAqC,gBAAM,aAAY;AAAA,YACpE,qBAAC,SAAI,WAAU,wBACZ;AAAA,oBAAM,cACL,oBAAC,UAAK,WAAU,sGAAqG,wBAAU;AAAA,cAEhI,MAAM,eACL,oBAAC,UAAK,WAAU,6FAA4F,yBAAW;AAAA,eAE3H;AAAA,aACF;AAAA;AAAA,QAnBK,MAAM;AAAA,MAoBb,IACE;AAAA,IACN,GACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/remixes-tab.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { assetHref } from \"@medialane/sdk\";\nimport { GitBranch } from \"lucide-react\";\nimport { useTokenRemixes } from \"../utils/use-remix-offers.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport type { ApiFetchConfig } from \"../utils/api-fetch.js\";\n\nexport interface RemixesTabProps {\n apiConfig: ApiFetchConfig;\n contractAddress: string;\n tokenId: string;\n}\n\nexport function RemixesTab({ apiConfig, contractAddress, tokenId }: RemixesTabProps) {\n const { remixes, total, isLoading } = useTokenRemixes(apiConfig, contractAddress, tokenId);\n\n if (isLoading) {\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <Skeleton key={i} className=\"aspect-square rounded-xl\" />\n ))}\n </div>\n );\n }\n\n if (remixes.length === 0) {\n return (\n <div className=\"flex flex-col items-center gap-3 py-12 text-center\">\n <div className=\"h-12 w-12 rounded-full bg-primary/10 flex items-center justify-center\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n </div>\n <p className=\"text-sm font-medium\">No remixes yet</p>\n <p className=\"text-xs text-muted-foreground\">Remix this asset to create the first derivative work.</p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">{total} remix{total !== 1 ? \"es\" : \"\"} of this asset</p>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-3\">\n {remixes.map((remix) =>\n remix.remixContract && remix.remixTokenId ? (\n <Link\n key={remix.id}\n href={assetHref(\"STARKNET\", remix.remixContract, remix.remixTokenId)}\n className=\"group relative block\"\n >\n <div className=\"card-base p-3 space-y-1 hover:border-primary/40 transition-colors\">\n <div className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"h-3 w-3 text-primary\" />\n <span className=\"text-primary font-medium\">Remix</span>\n </div>\n <p className=\"text-xs tabular-nums truncate\">#{remix.remixTokenId}</p>\n <p className=\"text-[10px] text-muted-foreground\">{remix.licenseType}</p>\n <div className=\"flex gap-1 flex-wrap\">\n {remix.commercial && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded-full bg-brand-blue/10 text-brand-blue border border-brand-blue/20\">Commercial</span>\n )}\n {remix.derivatives && (\n <span className=\"text-[9px] px-1.5 py-0.5 rounded-full bg-primary/10 text-primary border border-primary/20\">Derivatives</span>\n )}\n </div>\n </div>\n </Link>\n ) : null\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";AAsBU,cAQJ,YARI;AApBV,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AASlB,SAAS,WAAW,EAAE,WAAW,iBAAiB,QAAQ,GAAoB;AACnF,QAAM,EAAE,SAAS,OAAO,UAAU,IAAI,gBAAgB,WAAW,iBAAiB,OAAO;AAEzF,MAAI,WAAW;AACb,WACE,oBAAC,SAAI,WAAU,yCACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,oBAAC,YAAiB,WAAU,8BAAb,CAAwC,CACxD,GACH;AAAA,EAEJ;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,WACE,qBAAC,SAAI,WAAU,sDACb;AAAA,0BAAC,SAAI,WAAU,yEACb,8BAAC,aAAU,WAAU,wBAAuB,GAC9C;AAAA,MACA,oBAAC,OAAE,WAAU,uBAAsB,4BAAc;AAAA,MACjD,oBAAC,OAAE,WAAU,iCAAgC,mEAAqD;AAAA,OACpG;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,yBAAC,OAAE,WAAU,iCAAiC;AAAA;AAAA,MAAM;AAAA,MAAO,UAAU,IAAI,OAAO;AAAA,MAAG;AAAA,OAAc;AAAA,IACjG,oBAAC,SAAI,WAAU,yCACZ,kBAAQ;AAAA,MAAI,CAAC,UACZ,MAAM,iBAAiB,MAAM,eAC3B;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM,UAAU,YAAY,MAAM,eAAe,MAAM,YAAY;AAAA,UACnE,WAAU;AAAA,UAEV,+BAAC,SAAI,WAAU,qEACb;AAAA,iCAAC,SAAI,WAAU,2DACb;AAAA,kCAAC,aAAU,WAAU,wBAAuB;AAAA,cAC5C,oBAAC,UAAK,WAAU,4BAA2B,mBAAK;AAAA,eAClD;AAAA,YACA,qBAAC,OAAE,WAAU,iCAAgC;AAAA;AAAA,cAAE,MAAM;AAAA,eAAa;AAAA,YAClE,oBAAC,OAAE,WAAU,qCAAqC,gBAAM,aAAY;AAAA,YACpE,qBAAC,SAAI,WAAU,wBACZ;AAAA,oBAAM,cACL,oBAAC,UAAK,WAAU,sGAAqG,wBAAU;AAAA,cAEhI,MAAM,eACL,oBAAC,UAAK,WAAU,6FAA4F,yBAAW;AAAA,eAE3H;AAAA,aACF;AAAA;AAAA,QAnBK,MAAM;AAAA,MAoBb,IACE;AAAA,IACN,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -33,7 +33,7 @@ __export(rewards_section_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(rewards_section_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
- var import_link = __toESM(require("next/link"), 1);
36
+ var import_link = __toESM(require("./link.js"), 1);
37
37
  var import_lucide_react = require("lucide-react");
38
38
  const pillars = [
39
39
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/rewards-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { ArrowRight, Zap, Coins, Gift } from \"lucide-react\";\n\nexport interface RewardsSectionProps {\n rewardsHref: string;\n}\n\nconst pillars = [\n {\n icon: Zap,\n label: \"XP\",\n detail: \"Earned for every mint, trade, and connection you make.\",\n },\n {\n icon: Coins,\n label: \"Creator's Fund\",\n detail: \"Your XP grows your share of the shared pool.\",\n },\n {\n icon: Gift,\n label: \"Airdrop\",\n detail: \"Claim your share on-chain, every round.\",\n },\n];\n\nexport function RewardsSection({ rewardsHref }: RewardsSectionProps) {\n return (\n <div className=\"rounded-2xl p-[1.5px] bg-gradient-to-r from-brand-orange to-brand-maeve\">\n <section className=\"rounded-[15px] bg-background px-7 py-8 sm:px-9\">\n <div className=\"flex flex-col lg:flex-row lg:items-center gap-8 lg:gap-14\">\n <div className=\"flex-1 min-w-0\">\n <h2 className=\"text-2xl sm:text-3xl font-bold tracking-tight leading-tight text-foreground\">\n Rewards\n </h2>\n <p className=\"mt-2 text-sm text-muted-foreground leading-relaxed max-w-md\">\n Every action earns XP. Active members receive a growing share of the\n Creator&apos;s Fund, claimed as an airdrop each round.\n </p>\n\n <Link\n href={rewardsHref}\n className=\"mt-6 inline-flex items-center justify-center gap-2 rounded-xl bg-gradient-to-r from-brand-orange to-brand-maeve px-6 py-3 text-sm font-semibold text-white transition-all hover:brightness-110 active:scale-[0.98]\"\n >\n View your rewards\n <ArrowRight className=\"h-4 w-4\" />\n </Link>\n </div>\n\n <div className=\"flex flex-col gap-4 lg:w-[300px] shrink-0 lg:border-l lg:border-border lg:pl-10\">\n {pillars.map(({ icon: Icon, label, detail }) => (\n <div key={label} className=\"flex items-start gap-3.5\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-gradient-to-br from-brand-orange/15 to-brand-maeve/15 text-brand-maeve shrink-0\">\n <Icon className=\"h-4 w-4\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-foreground\">{label}</p>\n <p className=\"text-xs text-muted-foreground leading-relaxed\">{detail}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCY;AA/BZ,kBAAiB;AACjB,0BAA6C;AAM7C,MAAM,UAAU;AAAA,EACd;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,eAAe,EAAE,YAAY,GAAwB;AACnE,SACE,4CAAC,SAAI,WAAU,2EACb,sDAAC,aAAQ,WAAU,kDACjB,uDAAC,SAAI,WAAU,6DACb;AAAA,iDAAC,SAAI,WAAU,kBACb;AAAA,kDAAC,QAAG,WAAU,+EAA8E,qBAE5F;AAAA,MACA,4CAAC,OAAE,WAAU,+DAA8D,oIAG3E;AAAA,MAEA;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,UACX;AAAA;AAAA,YAEC,4CAAC,kCAAW,WAAU,WAAU;AAAA;AAAA;AAAA,MAClC;AAAA,OACF;AAAA,IAEA,4CAAC,SAAI,WAAU,mFACZ,kBAAQ,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,OAAO,MACxC,6CAAC,SAAgB,WAAU,4BACzB;AAAA,kDAAC,SAAI,WAAU,0IACb,sDAAC,QAAK,WAAU,WAAU,GAC5B;AAAA,MACA,6CAAC,SAAI,WAAU,WACb;AAAA,oDAAC,OAAE,WAAU,yCAAyC,iBAAM;AAAA,QAC5D,4CAAC,OAAE,WAAU,iDAAiD,kBAAO;AAAA,SACvE;AAAA,SAPQ,KAQV,CACD,GACH;AAAA,KACF,GACF,GACF;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/rewards-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight, Zap, Coins, Gift } from \"lucide-react\";\n\nexport interface RewardsSectionProps {\n rewardsHref: string;\n}\n\nconst pillars = [\n {\n icon: Zap,\n label: \"XP\",\n detail: \"Earned for every mint, trade, and connection you make.\",\n },\n {\n icon: Coins,\n label: \"Creator's Fund\",\n detail: \"Your XP grows your share of the shared pool.\",\n },\n {\n icon: Gift,\n label: \"Airdrop\",\n detail: \"Claim your share on-chain, every round.\",\n },\n];\n\nexport function RewardsSection({ rewardsHref }: RewardsSectionProps) {\n return (\n <div className=\"rounded-2xl p-[1.5px] bg-gradient-to-r from-brand-orange to-brand-maeve\">\n <section className=\"rounded-[15px] bg-background px-7 py-8 sm:px-9\">\n <div className=\"flex flex-col lg:flex-row lg:items-center gap-8 lg:gap-14\">\n <div className=\"flex-1 min-w-0\">\n <h2 className=\"text-2xl sm:text-3xl font-bold tracking-tight leading-tight text-foreground\">\n Rewards\n </h2>\n <p className=\"mt-2 text-sm text-muted-foreground leading-relaxed max-w-md\">\n Every action earns XP. Active members receive a growing share of the\n Creator&apos;s Fund, claimed as an airdrop each round.\n </p>\n\n <Link\n href={rewardsHref}\n className=\"mt-6 inline-flex items-center justify-center gap-2 rounded-xl bg-gradient-to-r from-brand-orange to-brand-maeve px-6 py-3 text-sm font-semibold text-white transition-all hover:brightness-110 active:scale-[0.98]\"\n >\n View your rewards\n <ArrowRight className=\"h-4 w-4\" />\n </Link>\n </div>\n\n <div className=\"flex flex-col gap-4 lg:w-[300px] shrink-0 lg:border-l lg:border-border lg:pl-10\">\n {pillars.map(({ icon: Icon, label, detail }) => (\n <div key={label} className=\"flex items-start gap-3.5\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-gradient-to-br from-brand-orange/15 to-brand-maeve/15 text-brand-maeve shrink-0\">\n <Icon className=\"h-4 w-4\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-foreground\">{label}</p>\n <p className=\"text-xs text-muted-foreground leading-relaxed\">{detail}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCY;AA/BZ,kBAAiB;AACjB,0BAA6C;AAM7C,MAAM,UAAU;AAAA,EACd;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,eAAe,EAAE,YAAY,GAAwB;AACnE,SACE,4CAAC,SAAI,WAAU,2EACb,sDAAC,aAAQ,WAAU,kDACjB,uDAAC,SAAI,WAAU,6DACb;AAAA,iDAAC,SAAI,WAAU,kBACb;AAAA,kDAAC,QAAG,WAAU,+EAA8E,qBAE5F;AAAA,MACA,4CAAC,OAAE,WAAU,+DAA8D,oIAG3E;AAAA,MAEA;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,UACX;AAAA;AAAA,YAEC,4CAAC,kCAAW,WAAU,WAAU;AAAA;AAAA;AAAA,MAClC;AAAA,OACF;AAAA,IAEA,4CAAC,SAAI,WAAU,mFACZ,kBAAQ,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,OAAO,MACxC,6CAAC,SAAgB,WAAU,4BACzB;AAAA,kDAAC,SAAI,WAAU,0IACb,sDAAC,QAAK,WAAU,WAAU,GAC5B;AAAA,MACA,6CAAC,SAAI,WAAU,WACb;AAAA,oDAAC,OAAE,WAAU,yCAAyC,iBAAM;AAAA,QAC5D,4CAAC,OAAE,WAAU,iDAAiD,kBAAO;AAAA,SACvE;AAAA,SAPQ,KAQV,CACD,GACH;AAAA,KACF,GACF,GACF;AAEJ;","names":["Link"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import Link from "./link.js";
4
4
  import { ArrowRight, Zap, Coins, Gift } from "lucide-react";
5
5
  const pillars = [
6
6
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/rewards-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { ArrowRight, Zap, Coins, Gift } from \"lucide-react\";\n\nexport interface RewardsSectionProps {\n rewardsHref: string;\n}\n\nconst pillars = [\n {\n icon: Zap,\n label: \"XP\",\n detail: \"Earned for every mint, trade, and connection you make.\",\n },\n {\n icon: Coins,\n label: \"Creator's Fund\",\n detail: \"Your XP grows your share of the shared pool.\",\n },\n {\n icon: Gift,\n label: \"Airdrop\",\n detail: \"Claim your share on-chain, every round.\",\n },\n];\n\nexport function RewardsSection({ rewardsHref }: RewardsSectionProps) {\n return (\n <div className=\"rounded-2xl p-[1.5px] bg-gradient-to-r from-brand-orange to-brand-maeve\">\n <section className=\"rounded-[15px] bg-background px-7 py-8 sm:px-9\">\n <div className=\"flex flex-col lg:flex-row lg:items-center gap-8 lg:gap-14\">\n <div className=\"flex-1 min-w-0\">\n <h2 className=\"text-2xl sm:text-3xl font-bold tracking-tight leading-tight text-foreground\">\n Rewards\n </h2>\n <p className=\"mt-2 text-sm text-muted-foreground leading-relaxed max-w-md\">\n Every action earns XP. Active members receive a growing share of the\n Creator&apos;s Fund, claimed as an airdrop each round.\n </p>\n\n <Link\n href={rewardsHref}\n className=\"mt-6 inline-flex items-center justify-center gap-2 rounded-xl bg-gradient-to-r from-brand-orange to-brand-maeve px-6 py-3 text-sm font-semibold text-white transition-all hover:brightness-110 active:scale-[0.98]\"\n >\n View your rewards\n <ArrowRight className=\"h-4 w-4\" />\n </Link>\n </div>\n\n <div className=\"flex flex-col gap-4 lg:w-[300px] shrink-0 lg:border-l lg:border-border lg:pl-10\">\n {pillars.map(({ icon: Icon, label, detail }) => (\n <div key={label} className=\"flex items-start gap-3.5\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-gradient-to-br from-brand-orange/15 to-brand-maeve/15 text-brand-maeve shrink-0\">\n <Icon className=\"h-4 w-4\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-foreground\">{label}</p>\n <p className=\"text-xs text-muted-foreground leading-relaxed\">{detail}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n </div>\n );\n}\n"],"mappings":";AAiCY,cAQA,YARA;AA/BZ,OAAO,UAAU;AACjB,SAAS,YAAY,KAAK,OAAO,YAAY;AAM7C,MAAM,UAAU;AAAA,EACd;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,eAAe,EAAE,YAAY,GAAwB;AACnE,SACE,oBAAC,SAAI,WAAU,2EACb,8BAAC,aAAQ,WAAU,kDACjB,+BAAC,SAAI,WAAU,6DACb;AAAA,yBAAC,SAAI,WAAU,kBACb;AAAA,0BAAC,QAAG,WAAU,+EAA8E,qBAE5F;AAAA,MACA,oBAAC,OAAE,WAAU,+DAA8D,oIAG3E;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,UACX;AAAA;AAAA,YAEC,oBAAC,cAAW,WAAU,WAAU;AAAA;AAAA;AAAA,MAClC;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,mFACZ,kBAAQ,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,OAAO,MACxC,qBAAC,SAAgB,WAAU,4BACzB;AAAA,0BAAC,SAAI,WAAU,0IACb,8BAAC,QAAK,WAAU,WAAU,GAC5B;AAAA,MACA,qBAAC,SAAI,WAAU,WACb;AAAA,4BAAC,OAAE,WAAU,yCAAyC,iBAAM;AAAA,QAC5D,oBAAC,OAAE,WAAU,iDAAiD,kBAAO;AAAA,SACvE;AAAA,SAPQ,KAQV,CACD,GACH;AAAA,KACF,GACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/rewards-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight, Zap, Coins, Gift } from \"lucide-react\";\n\nexport interface RewardsSectionProps {\n rewardsHref: string;\n}\n\nconst pillars = [\n {\n icon: Zap,\n label: \"XP\",\n detail: \"Earned for every mint, trade, and connection you make.\",\n },\n {\n icon: Coins,\n label: \"Creator's Fund\",\n detail: \"Your XP grows your share of the shared pool.\",\n },\n {\n icon: Gift,\n label: \"Airdrop\",\n detail: \"Claim your share on-chain, every round.\",\n },\n];\n\nexport function RewardsSection({ rewardsHref }: RewardsSectionProps) {\n return (\n <div className=\"rounded-2xl p-[1.5px] bg-gradient-to-r from-brand-orange to-brand-maeve\">\n <section className=\"rounded-[15px] bg-background px-7 py-8 sm:px-9\">\n <div className=\"flex flex-col lg:flex-row lg:items-center gap-8 lg:gap-14\">\n <div className=\"flex-1 min-w-0\">\n <h2 className=\"text-2xl sm:text-3xl font-bold tracking-tight leading-tight text-foreground\">\n Rewards\n </h2>\n <p className=\"mt-2 text-sm text-muted-foreground leading-relaxed max-w-md\">\n Every action earns XP. Active members receive a growing share of the\n Creator&apos;s Fund, claimed as an airdrop each round.\n </p>\n\n <Link\n href={rewardsHref}\n className=\"mt-6 inline-flex items-center justify-center gap-2 rounded-xl bg-gradient-to-r from-brand-orange to-brand-maeve px-6 py-3 text-sm font-semibold text-white transition-all hover:brightness-110 active:scale-[0.98]\"\n >\n View your rewards\n <ArrowRight className=\"h-4 w-4\" />\n </Link>\n </div>\n\n <div className=\"flex flex-col gap-4 lg:w-[300px] shrink-0 lg:border-l lg:border-border lg:pl-10\">\n {pillars.map(({ icon: Icon, label, detail }) => (\n <div key={label} className=\"flex items-start gap-3.5\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-gradient-to-br from-brand-orange/15 to-brand-maeve/15 text-brand-maeve shrink-0\">\n <Icon className=\"h-4 w-4\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-semibold text-foreground\">{label}</p>\n <p className=\"text-xs text-muted-foreground leading-relaxed\">{detail}</p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n </div>\n );\n}\n"],"mappings":";AAiCY,cAQA,YARA;AA/BZ,OAAO,UAAU;AACjB,SAAS,YAAY,KAAK,OAAO,YAAY;AAM7C,MAAM,UAAU;AAAA,EACd;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,eAAe,EAAE,YAAY,GAAwB;AACnE,SACE,oBAAC,SAAI,WAAU,2EACb,8BAAC,aAAQ,WAAU,kDACjB,+BAAC,SAAI,WAAU,6DACb;AAAA,yBAAC,SAAI,WAAU,kBACb;AAAA,0BAAC,QAAG,WAAU,+EAA8E,qBAE5F;AAAA,MACA,oBAAC,OAAE,WAAU,+DAA8D,oIAG3E;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM;AAAA,UACN,WAAU;AAAA,UACX;AAAA;AAAA,YAEC,oBAAC,cAAW,WAAU,WAAU;AAAA;AAAA;AAAA,MAClC;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,mFACZ,kBAAQ,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,OAAO,MACxC,qBAAC,SAAgB,WAAU,4BACzB;AAAA,0BAAC,SAAI,WAAU,0IACb,8BAAC,QAAK,WAAU,WAAU,GAC5B;AAAA,MACA,qBAAC,SAAI,WAAU,WACb;AAAA,4BAAC,OAAE,WAAU,yCAAyC,iBAAM;AAAA,QAC5D,oBAAC,OAAE,WAAU,iDAAiD,kBAAO;AAAA,SACvE;AAAA,SAPQ,KAQV,CACD,GACH;AAAA,KACF,GACF,GACF;AAEJ;","names":[]}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var router_exports = {};
20
+ __export(router_exports, {
21
+ useRouter: () => import_navigation.useRouter
22
+ });
23
+ module.exports = __toCommonJS(router_exports);
24
+ var import_navigation = require("next/navigation");
25
+ // Annotate the CommonJS export names for ESM import in node:
26
+ 0 && (module.exports = {
27
+ useRouter
28
+ });
29
+ //# sourceMappingURL=router.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/router.tsx"],"sourcesContent":["// Internal indirection over next/navigation — see link.tsx for why.\nexport { useRouter } from \"next/navigation\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,wBAA0B;","names":[]}
@@ -0,0 +1 @@
1
+ export { useRouter } from 'next/navigation';
@@ -0,0 +1 @@
1
+ export { useRouter } from 'next/navigation';
@@ -0,0 +1,5 @@
1
+ import { useRouter } from "next/navigation";
2
+ export {
3
+ useRouter
4
+ };
5
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/router.tsx"],"sourcesContent":["// Internal indirection over next/navigation — see link.tsx for why.\nexport { useRouter } from \"next/navigation\";\n"],"mappings":"AACA,SAAS,iBAAiB;","names":[]}
@@ -33,7 +33,7 @@ __export(scroll_section_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(scroll_section_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
- var import_link = __toESM(require("next/link"), 1);
36
+ var import_link = __toESM(require("./link.js"), 1);
37
37
  var import_lucide_react = require("lucide-react");
38
38
  function ScrollSection({
39
39
  icon,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { ArrowRight } from \"lucide-react\";\n\nexport interface ScrollSectionProps {\n\n icon: React.ReactNode;\n\n iconBg: string;\n title: string;\n\n subtitle?: React.ReactNode;\n\n href: string;\n\n linkLabel?: string;\n\n children: React.ReactNode;\n}\n\nexport function ScrollSection({\n icon,\n iconBg,\n title,\n subtitle,\n href,\n linkLabel = \"See all\",\n children,\n}: ScrollSectionProps) {\n return (\n <section className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2.5\">\n <div className={`h-7 w-7 rounded-lg flex items-center justify-center ${iconBg}`}>\n {icon}\n </div>\n <div>\n <h2 className=\"text-lg sm:text-xl font-semibold leading-none\">{title}</h2>\n {subtitle && <p className=\"text-2xs text-muted-foreground mt-1\">{subtitle}</p>}\n </div>\n </div>\n <Link\n href={href}\n className=\"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors\"\n >\n {linkLabel} <ArrowRight className=\"h-3.5 w-3.5\" />\n </Link>\n </div>\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCU;AAhCV,kBAAiB;AACjB,0BAA2B;AAkBpB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAAuB;AACrB,SACE,6CAAC,aAAQ,WAAU,aACjB;AAAA,iDAAC,SAAI,WAAU,qCACb;AAAA,mDAAC,SAAI,WAAU,6BACb;AAAA,oDAAC,SAAI,WAAW,uDAAuD,MAAM,IAC1E,gBACH;AAAA,QACA,6CAAC,SACC;AAAA,sDAAC,QAAG,WAAU,iDAAiD,iBAAM;AAAA,UACpE,YAAY,4CAAC,OAAE,WAAU,uCAAuC,oBAAS;AAAA,WAC5E;AAAA,SACF;AAAA,MACA;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,WAAU;AAAA,UAET;AAAA;AAAA,YAAU;AAAA,YAAC,4CAAC,kCAAW,WAAU,eAAc;AAAA;AAAA;AAAA,MAClD;AAAA,OACF;AAAA,IAEA,4CAAC,SAAI,WAAU,yCACb,sDAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight } from \"lucide-react\";\n\nexport interface ScrollSectionProps {\n\n icon: React.ReactNode;\n\n iconBg: string;\n title: string;\n\n subtitle?: React.ReactNode;\n\n href: string;\n\n linkLabel?: string;\n\n children: React.ReactNode;\n}\n\nexport function ScrollSection({\n icon,\n iconBg,\n title,\n subtitle,\n href,\n linkLabel = \"See all\",\n children,\n}: ScrollSectionProps) {\n return (\n <section className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2.5\">\n <div className={`h-7 w-7 rounded-lg flex items-center justify-center ${iconBg}`}>\n {icon}\n </div>\n <div>\n <h2 className=\"text-lg sm:text-xl font-semibold leading-none\">{title}</h2>\n {subtitle && <p className=\"text-2xs text-muted-foreground mt-1\">{subtitle}</p>}\n </div>\n </div>\n <Link\n href={href}\n className=\"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors\"\n >\n {linkLabel} <ArrowRight className=\"h-3.5 w-3.5\" />\n </Link>\n </div>\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCU;AAhCV,kBAAiB;AACjB,0BAA2B;AAkBpB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAAuB;AACrB,SACE,6CAAC,aAAQ,WAAU,aACjB;AAAA,iDAAC,SAAI,WAAU,qCACb;AAAA,mDAAC,SAAI,WAAU,6BACb;AAAA,oDAAC,SAAI,WAAW,uDAAuD,MAAM,IAC1E,gBACH;AAAA,QACA,6CAAC,SACC;AAAA,sDAAC,QAAG,WAAU,iDAAiD,iBAAM;AAAA,UACpE,YAAY,4CAAC,OAAE,WAAU,uCAAuC,oBAAS;AAAA,WAC5E;AAAA,SACF;AAAA,MACA;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA,WAAU;AAAA,UAET;AAAA;AAAA,YAAU;AAAA,YAAC,4CAAC,kCAAW,WAAU,eAAc;AAAA;AAAA;AAAA,MAClD;AAAA,OACF;AAAA,IAEA,4CAAC,SAAI,WAAU,yCACb,sDAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;","names":["Link"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import Link from "./link.js";
4
4
  import { ArrowRight } from "lucide-react";
5
5
  function ScrollSection({
6
6
  icon,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { ArrowRight } from \"lucide-react\";\n\nexport interface ScrollSectionProps {\n\n icon: React.ReactNode;\n\n iconBg: string;\n title: string;\n\n subtitle?: React.ReactNode;\n\n href: string;\n\n linkLabel?: string;\n\n children: React.ReactNode;\n}\n\nexport function ScrollSection({\n icon,\n iconBg,\n title,\n subtitle,\n href,\n linkLabel = \"See all\",\n children,\n}: ScrollSectionProps) {\n return (\n <section className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2.5\">\n <div className={`h-7 w-7 rounded-lg flex items-center justify-center ${iconBg}`}>\n {icon}\n </div>\n <div>\n <h2 className=\"text-lg sm:text-xl font-semibold leading-none\">{title}</h2>\n {subtitle && <p className=\"text-2xs text-muted-foreground mt-1\">{subtitle}</p>}\n </div>\n </div>\n <Link\n href={href}\n className=\"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors\"\n >\n {linkLabel} <ArrowRight className=\"h-3.5 w-3.5\" />\n </Link>\n </div>\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";AAkCU,cAGA,YAHA;AAhCV,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAkBpB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAAuB;AACrB,SACE,qBAAC,aAAQ,WAAU,aACjB;AAAA,yBAAC,SAAI,WAAU,qCACb;AAAA,2BAAC,SAAI,WAAU,6BACb;AAAA,4BAAC,SAAI,WAAW,uDAAuD,MAAM,IAC1E,gBACH;AAAA,QACA,qBAAC,SACC;AAAA,8BAAC,QAAG,WAAU,iDAAiD,iBAAM;AAAA,UACpE,YAAY,oBAAC,OAAE,WAAU,uCAAuC,oBAAS;AAAA,WAC5E;AAAA,SACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,WAAU;AAAA,UAET;AAAA;AAAA,YAAU;AAAA,YAAC,oBAAC,cAAW,WAAU,eAAc;AAAA;AAAA;AAAA,MAClD;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,yCACb,8BAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight } from \"lucide-react\";\n\nexport interface ScrollSectionProps {\n\n icon: React.ReactNode;\n\n iconBg: string;\n title: string;\n\n subtitle?: React.ReactNode;\n\n href: string;\n\n linkLabel?: string;\n\n children: React.ReactNode;\n}\n\nexport function ScrollSection({\n icon,\n iconBg,\n title,\n subtitle,\n href,\n linkLabel = \"See all\",\n children,\n}: ScrollSectionProps) {\n return (\n <section className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2.5\">\n <div className={`h-7 w-7 rounded-lg flex items-center justify-center ${iconBg}`}>\n {icon}\n </div>\n <div>\n <h2 className=\"text-lg sm:text-xl font-semibold leading-none\">{title}</h2>\n {subtitle && <p className=\"text-2xs text-muted-foreground mt-1\">{subtitle}</p>}\n </div>\n </div>\n <Link\n href={href}\n className=\"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors\"\n >\n {linkLabel} <ArrowRight className=\"h-3.5 w-3.5\" />\n </Link>\n </div>\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";AAkCU,cAGA,YAHA;AAhCV,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAkBpB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAAuB;AACrB,SACE,qBAAC,aAAQ,WAAU,aACjB;AAAA,yBAAC,SAAI,WAAU,qCACb;AAAA,2BAAC,SAAI,WAAU,6BACb;AAAA,4BAAC,SAAI,WAAW,uDAAuD,MAAM,IAC1E,gBACH;AAAA,QACA,qBAAC,SACC;AAAA,8BAAC,QAAG,WAAU,iDAAiD,iBAAM;AAAA,UACpE,YAAY,oBAAC,OAAE,WAAU,uCAAuC,oBAAS;AAAA,WAC5E;AAAA,SACF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,WAAU;AAAA,UAET;AAAA;AAAA,YAAU;AAAA,YAAC,oBAAC,cAAW,WAAU,eAAc;AAAA;AAAA;AAAA,MAClD;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,yCACb,8BAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -34,7 +34,7 @@ __export(token_card_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(token_card_exports);
36
36
  var import_jsx_runtime = require("react/jsx-runtime");
37
- var import_link = __toESM(require("next/link"), 1);
37
+ var import_link = __toESM(require("./link.js"), 1);
38
38
  var import_lucide_react = require("lucide-react");
39
39
  var import_dropdown_menu = require("./dropdown-menu.js");
40
40
  var import_cn = require("../utils/cn.js");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/token-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport {\n Loader2, ArrowUpRight, MoreHorizontal, Zap, HandCoins, Tag,\n Layers, GitBranch, Flag, UserCircle2, ArrowRightLeft, XCircle,\n} from \"lucide-react\";\nimport {\n DropdownMenu, DropdownMenuContent, DropdownMenuItem,\n DropdownMenuSeparator, DropdownMenuTrigger,\n} from \"./dropdown-menu.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\nimport { isLivingRenderCollection } from \"../data/living-render-collections.js\";\nimport { assetHref as buildAssetHref, collectionHref as buildCollectionHref } from \"@medialane/sdk\";\nimport type { ApiToken, Chain } from \"@medialane/sdk\";\n\nconst BTN_BASE = \"h-8 rounded-[9px] flex items-center justify-center gap-1.5 text-xs font-semibold transition-all active:scale-[0.98] shadow-none border-0\";\nconst BTN_OUTLINE = cn(BTN_BASE, \"border border-border/60 text-foreground hover:bg-muted/60\");\n\nexport interface TokenCardProps {\n token: ApiToken;\n isOwner?: boolean;\n onList?: (token: ApiToken) => void;\n onTransfer?: (token: ApiToken) => void;\n onCancel?: (token: ApiToken) => void;\n onBuy?: (token: ApiToken) => void;\n onOffer?: (token: ApiToken) => void;\n onReport?: (token: ApiToken) => void;\n\n usdValue?: string | null;\n}\n\nexport function TokenCard({\n token,\n isOwner = false,\n onList,\n onTransfer,\n onCancel,\n onBuy,\n onOffer,\n onReport,\n usdValue,\n}: TokenCardProps) {\n const name = token.metadata?.name || `Token #${token.tokenId}`;\n const image = ipfsToHttp(token.metadata?.image);\n const animationUrl = token.metadata?.animationUrl ?? null;\n const ipType = token.metadata?.ipType;\n\n const listingOrder = token.activeOrders?.find(\n (o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\"\n );\n\n const creatorAttr = token.metadata?.attributes?.find((a) => a.trait_type === \"Creator\");\n const creator = typeof creatorAttr?.value === \"string\" ? creatorAttr.value : null;\n const owner = token.balances?.[0]?.owner ?? token.owner ?? null;\n\n const chain = token.chain.toUpperCase() as Chain;\n const live = isLivingRenderCollection(chain, token.contractAddress);\n const assetHref = buildAssetHref(chain, token.contractAddress, token.tokenId);\n const collectionHref = buildCollectionHref(chain, token.contractAddress);\n const remixHref = `/create/remix/${token.contractAddress}/${token.tokenId}`;\n\n const handleBuy = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onBuy?.(token);\n };\n\n const handleOffer = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onOffer?.(token);\n };\n\n return (\n <div className=\"card-base relative overflow-hidden flex flex-col w-full\">\n\n <Link href={assetHref} className=\"flex flex-col flex-1\">\n\n <div className=\"relative aspect-square bg-muted overflow-hidden shrink-0\">\n <AnimatedTokenMedia\n image={image}\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\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-purple/15 to-brand-blue/15\">\n <span className=\"text-2xl tabular-nums text-muted-foreground\">#{token.tokenId}</span>\n </div>\n }\n />\n\n {listingOrder && (\n <div className=\"absolute bottom-2 right-2 z-10\">\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1.5 rounded-full text-sm font-bold bg-background/90 backdrop-blur-sm border border-border/40 shadow-sm tabular-nums\">\n <PriceChipContent\n amountFormatted={listingOrder.price.formatted}\n currency={listingOrder.price.currency}\n usdValue={usdValue}\n tone=\"card\"\n />\n </span>\n </div>\n )}\n\n {(token.metadataStatus === \"PENDING\" || token.metadataStatus === \"FETCHING\") && (\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\n <div className=\"px-3 pt-2.5 pb-4 flex-1\">\n <p className=\"text-base font-bold line-clamp-2 leading-snug\">{name}</p>\n <div className=\"flex items-center gap-1.5 mt-1.5 flex-wrap\">\n {ipType && <IpTypeBadge ipType={ipType as any} size=\"sm\" />}\n {creator ? (\n <p className=\"text-2xs tabular-nums text-muted-foreground/60 truncate\">\n {creator.slice(0, 8)}…{creator.slice(-6)}\n </p>\n ) : token.metadata?.description ? (\n <p className=\"text-2xs text-muted-foreground truncate leading-snug\">\n {token.metadata.description}\n </p>\n ) : null}\n </div>\n </div>\n </Link>\n\n <div className=\"px-3 pb-3 flex items-center gap-1.5\">\n\n <Link\n href={assetHref}\n className={cn(BTN_OUTLINE, \"w-8 shrink-0 px-0\")}\n title=\"View asset\"\n >\n <ArrowUpRight className=\"h-3.5 w-3.5\" />\n </Link>\n\n {isOwner ? (\n listingOrder ? (\n <Link href={assetHref} className={cn(BTN_OUTLINE, \"flex-1\")}>\n <ArrowUpRight className=\"h-3.5 w-3.5 mr-1.5\" />\n View\n </Link>\n ) : (\n <button\n className={cn(BTN_OUTLINE, \"flex-1 text-brand-purple border-brand-purple/30 hover:bg-brand-purple/10 hover:text-brand-purple\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onList?.(token); }}\n >\n <Tag className=\"h-3.5 w-3.5 mr-1.5\" />\n List\n </button>\n )\n ) : listingOrder ? (\n <div className=\"btn-border-animated p-[1.5px] rounded-[10px] flex-1 h-8\">\n <button\n className=\"w-full h-full rounded-[9px] bg-background flex items-center justify-center gap-1.5 text-xs font-semibold text-foreground hover:bg-muted/60 transition-all active:scale-[0.98]\"\n onClick={handleBuy}\n >\n <Zap className=\"h-3.5 w-3.5 shrink-0\" />\n Buy\n </button>\n </div>\n ) : (\n <button\n className={cn(BTN_OUTLINE, \"flex-1 text-brand-orange border-brand-orange/30 hover:bg-brand-orange/10 hover:text-brand-orange\")}\n onClick={handleOffer}\n >\n <HandCoins className=\"h-3.5 w-3.5 mr-1.5\" />\n Offer\n </button>\n )}\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(BTN_OUTLINE, \"w-8 p-0 shrink-0\")}\n aria-label=\"More actions\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-52\">\n\n <DropdownMenuItem asChild>\n <Link href={assetHref} className=\"flex items-center gap-2\">\n <ArrowUpRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n View asset\n </Link>\n </DropdownMenuItem>\n\n <DropdownMenuSeparator />\n\n {isOwner ? (\n <>\n {!listingOrder && onList && (\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-brand-purple focus:text-brand-purple\"\n onClick={() => onList(token)}\n >\n <Tag className=\"h-3.5 w-3.5\" />\n List\n </DropdownMenuItem>\n )}\n {onTransfer && (\n <DropdownMenuItem\n className=\"flex items-center gap-2\"\n onClick={() => onTransfer(token)}\n >\n <ArrowRightLeft className=\"h-3.5 w-3.5 text-muted-foreground\" />\n Transfer\n </DropdownMenuItem>\n )}\n {listingOrder && onCancel && (\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-brand-orange focus:text-brand-orange\"\n onClick={() => onCancel(token)}\n >\n <XCircle className=\"h-3.5 w-3.5\" />\n Cancel listing\n </DropdownMenuItem>\n )}\n </>\n ) : (\n <>\n {listingOrder && onBuy && (\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-brand-blue focus:text-brand-blue\"\n onClick={handleBuy}\n >\n <Zap className=\"h-3.5 w-3.5\" />\n <span className=\"flex items-center gap-1\">\n Buy —\n <CurrencyIcon symbol={listingOrder.price.currency} size={12} />\n {formatDisplayPrice(listingOrder.price.formatted)}\n </span>\n </DropdownMenuItem>\n )}\n {onOffer && (\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-brand-orange focus:text-brand-orange\"\n onClick={handleOffer}\n >\n <HandCoins className=\"h-3.5 w-3.5\" />\n Make offer\n </DropdownMenuItem>\n )}\n </>\n )}\n\n <DropdownMenuItem asChild>\n <Link href={remixHref} className=\"flex items-center gap-2 text-brand-purple focus:text-brand-purple\">\n <GitBranch className=\"h-3.5 w-3.5\" />\n Remix\n </Link>\n </DropdownMenuItem>\n\n <DropdownMenuSeparator />\n\n <DropdownMenuItem asChild>\n <Link href={collectionHref} className=\"flex items-center gap-2\">\n <Layers className=\"h-3.5 w-3.5 text-muted-foreground\" />\n View collection\n </Link>\n </DropdownMenuItem>\n\n {(owner ?? creator) && (\n <DropdownMenuItem asChild>\n <Link href={`/account/${owner ?? creator}`} className=\"flex items-center gap-2\">\n <UserCircle2 className=\"h-3.5 w-3.5 text-muted-foreground\" />\n View owner\n </Link>\n </DropdownMenuItem>\n )}\n\n {onReport && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-muted-foreground focus:text-muted-foreground\"\n onClick={() => onReport(token)}\n >\n <Flag className=\"h-3.5 w-3.5\" />\n Report\n </DropdownMenuItem>\n </>\n )}\n\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n}\n\nexport function TokenCardSkeleton() {\n return (\n <div className=\"card-base overflow-hidden\">\n <div className=\"aspect-square w-full animate-pulse bg-muted\" />\n <div className=\"px-3 pt-2.5 pb-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-2.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n <div className=\"px-3 pb-3 flex gap-1.5\">\n <div className=\"h-8 w-8 rounded-[9px] animate-pulse bg-muted shrink-0\" />\n <div className=\"h-8 flex-1 rounded-[9px] animate-pulse bg-muted\" />\n <div className=\"h-8 w-8 rounded-[9px] animate-pulse bg-muted shrink-0\" />\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":["buildAssetHref","buildCollectionHref","Link"]}
1
+ {"version":3,"sources":["../../src/components/token-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport {\n Loader2, ArrowUpRight, MoreHorizontal, Zap, HandCoins, Tag,\n Layers, GitBranch, Flag, UserCircle2, ArrowRightLeft, XCircle,\n} from \"lucide-react\";\nimport {\n DropdownMenu, DropdownMenuContent, DropdownMenuItem,\n DropdownMenuSeparator, DropdownMenuTrigger,\n} from \"./dropdown-menu.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\nimport { PriceChipContent } from \"./dual-price.js\";\nimport { IpTypeBadge } from \"./ip-type-badge.js\";\nimport { AnimatedTokenMedia } from \"./animated-token-media.js\";\nimport { isLivingRenderCollection } from \"../data/living-render-collections.js\";\nimport { assetHref as buildAssetHref, collectionHref as buildCollectionHref } from \"@medialane/sdk\";\nimport type { ApiToken, Chain } from \"@medialane/sdk\";\n\nconst BTN_BASE = \"h-8 rounded-[9px] flex items-center justify-center gap-1.5 text-xs font-semibold transition-all active:scale-[0.98] shadow-none border-0\";\nconst BTN_OUTLINE = cn(BTN_BASE, \"border border-border/60 text-foreground hover:bg-muted/60\");\n\nexport interface TokenCardProps {\n token: ApiToken;\n isOwner?: boolean;\n onList?: (token: ApiToken) => void;\n onTransfer?: (token: ApiToken) => void;\n onCancel?: (token: ApiToken) => void;\n onBuy?: (token: ApiToken) => void;\n onOffer?: (token: ApiToken) => void;\n onReport?: (token: ApiToken) => void;\n\n usdValue?: string | null;\n}\n\nexport function TokenCard({\n token,\n isOwner = false,\n onList,\n onTransfer,\n onCancel,\n onBuy,\n onOffer,\n onReport,\n usdValue,\n}: TokenCardProps) {\n const name = token.metadata?.name || `Token #${token.tokenId}`;\n const image = ipfsToHttp(token.metadata?.image);\n const animationUrl = token.metadata?.animationUrl ?? null;\n const ipType = token.metadata?.ipType;\n\n const listingOrder = token.activeOrders?.find(\n (o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\"\n );\n\n const creatorAttr = token.metadata?.attributes?.find((a) => a.trait_type === \"Creator\");\n const creator = typeof creatorAttr?.value === \"string\" ? creatorAttr.value : null;\n const owner = token.balances?.[0]?.owner ?? token.owner ?? null;\n\n const chain = token.chain.toUpperCase() as Chain;\n const live = isLivingRenderCollection(chain, token.contractAddress);\n const assetHref = buildAssetHref(chain, token.contractAddress, token.tokenId);\n const collectionHref = buildCollectionHref(chain, token.contractAddress);\n const remixHref = `/create/remix/${token.contractAddress}/${token.tokenId}`;\n\n const handleBuy = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onBuy?.(token);\n };\n\n const handleOffer = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onOffer?.(token);\n };\n\n return (\n <div className=\"card-base relative overflow-hidden flex flex-col w-full\">\n\n <Link href={assetHref} className=\"flex flex-col flex-1\">\n\n <div className=\"relative aspect-square bg-muted overflow-hidden shrink-0\">\n <AnimatedTokenMedia\n image={image}\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\"\n fallback={\n <div className=\"absolute inset-0 flex items-center justify-center bg-gradient-to-br from-brand-purple/15 to-brand-blue/15\">\n <span className=\"text-2xl tabular-nums text-muted-foreground\">#{token.tokenId}</span>\n </div>\n }\n />\n\n {listingOrder && (\n <div className=\"absolute bottom-2 right-2 z-10\">\n <span className=\"inline-flex items-center gap-1.5 px-2.5 py-1.5 rounded-full text-sm font-bold bg-background/90 backdrop-blur-sm border border-border/40 shadow-sm tabular-nums\">\n <PriceChipContent\n amountFormatted={listingOrder.price.formatted}\n currency={listingOrder.price.currency}\n usdValue={usdValue}\n tone=\"card\"\n />\n </span>\n </div>\n )}\n\n {(token.metadataStatus === \"PENDING\" || token.metadataStatus === \"FETCHING\") && (\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\n <div className=\"px-3 pt-2.5 pb-4 flex-1\">\n <p className=\"text-base font-bold line-clamp-2 leading-snug\">{name}</p>\n <div className=\"flex items-center gap-1.5 mt-1.5 flex-wrap\">\n {ipType && <IpTypeBadge ipType={ipType as any} size=\"sm\" />}\n {creator ? (\n <p className=\"text-2xs tabular-nums text-muted-foreground/60 truncate\">\n {creator.slice(0, 8)}…{creator.slice(-6)}\n </p>\n ) : token.metadata?.description ? (\n <p className=\"text-2xs text-muted-foreground truncate leading-snug\">\n {token.metadata.description}\n </p>\n ) : null}\n </div>\n </div>\n </Link>\n\n <div className=\"px-3 pb-3 flex items-center gap-1.5\">\n\n <Link\n href={assetHref}\n className={cn(BTN_OUTLINE, \"w-8 shrink-0 px-0\")}\n title=\"View asset\"\n >\n <ArrowUpRight className=\"h-3.5 w-3.5\" />\n </Link>\n\n {isOwner ? (\n listingOrder ? (\n <Link href={assetHref} className={cn(BTN_OUTLINE, \"flex-1\")}>\n <ArrowUpRight className=\"h-3.5 w-3.5 mr-1.5\" />\n View\n </Link>\n ) : (\n <button\n className={cn(BTN_OUTLINE, \"flex-1 text-brand-purple border-brand-purple/30 hover:bg-brand-purple/10 hover:text-brand-purple\")}\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); onList?.(token); }}\n >\n <Tag className=\"h-3.5 w-3.5 mr-1.5\" />\n List\n </button>\n )\n ) : listingOrder ? (\n <div className=\"btn-border-animated p-[1.5px] rounded-[10px] flex-1 h-8\">\n <button\n className=\"w-full h-full rounded-[9px] bg-background flex items-center justify-center gap-1.5 text-xs font-semibold text-foreground hover:bg-muted/60 transition-all active:scale-[0.98]\"\n onClick={handleBuy}\n >\n <Zap className=\"h-3.5 w-3.5 shrink-0\" />\n Buy\n </button>\n </div>\n ) : (\n <button\n className={cn(BTN_OUTLINE, \"flex-1 text-brand-orange border-brand-orange/30 hover:bg-brand-orange/10 hover:text-brand-orange\")}\n onClick={handleOffer}\n >\n <HandCoins className=\"h-3.5 w-3.5 mr-1.5\" />\n Offer\n </button>\n )}\n\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(BTN_OUTLINE, \"w-8 p-0 shrink-0\")}\n aria-label=\"More actions\"\n >\n <MoreHorizontal className=\"h-3.5 w-3.5\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-52\">\n\n <DropdownMenuItem asChild>\n <Link href={assetHref} className=\"flex items-center gap-2\">\n <ArrowUpRight className=\"h-3.5 w-3.5 text-muted-foreground\" />\n View asset\n </Link>\n </DropdownMenuItem>\n\n <DropdownMenuSeparator />\n\n {isOwner ? (\n <>\n {!listingOrder && onList && (\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-brand-purple focus:text-brand-purple\"\n onClick={() => onList(token)}\n >\n <Tag className=\"h-3.5 w-3.5\" />\n List\n </DropdownMenuItem>\n )}\n {onTransfer && (\n <DropdownMenuItem\n className=\"flex items-center gap-2\"\n onClick={() => onTransfer(token)}\n >\n <ArrowRightLeft className=\"h-3.5 w-3.5 text-muted-foreground\" />\n Transfer\n </DropdownMenuItem>\n )}\n {listingOrder && onCancel && (\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-brand-orange focus:text-brand-orange\"\n onClick={() => onCancel(token)}\n >\n <XCircle className=\"h-3.5 w-3.5\" />\n Cancel listing\n </DropdownMenuItem>\n )}\n </>\n ) : (\n <>\n {listingOrder && onBuy && (\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-brand-blue focus:text-brand-blue\"\n onClick={handleBuy}\n >\n <Zap className=\"h-3.5 w-3.5\" />\n <span className=\"flex items-center gap-1\">\n Buy —\n <CurrencyIcon symbol={listingOrder.price.currency} size={12} />\n {formatDisplayPrice(listingOrder.price.formatted)}\n </span>\n </DropdownMenuItem>\n )}\n {onOffer && (\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-brand-orange focus:text-brand-orange\"\n onClick={handleOffer}\n >\n <HandCoins className=\"h-3.5 w-3.5\" />\n Make offer\n </DropdownMenuItem>\n )}\n </>\n )}\n\n <DropdownMenuItem asChild>\n <Link href={remixHref} className=\"flex items-center gap-2 text-brand-purple focus:text-brand-purple\">\n <GitBranch className=\"h-3.5 w-3.5\" />\n Remix\n </Link>\n </DropdownMenuItem>\n\n <DropdownMenuSeparator />\n\n <DropdownMenuItem asChild>\n <Link href={collectionHref} className=\"flex items-center gap-2\">\n <Layers className=\"h-3.5 w-3.5 text-muted-foreground\" />\n View collection\n </Link>\n </DropdownMenuItem>\n\n {(owner ?? creator) && (\n <DropdownMenuItem asChild>\n <Link href={`/account/${owner ?? creator}`} className=\"flex items-center gap-2\">\n <UserCircle2 className=\"h-3.5 w-3.5 text-muted-foreground\" />\n View owner\n </Link>\n </DropdownMenuItem>\n )}\n\n {onReport && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className=\"flex items-center gap-2 text-muted-foreground focus:text-muted-foreground\"\n onClick={() => onReport(token)}\n >\n <Flag className=\"h-3.5 w-3.5\" />\n Report\n </DropdownMenuItem>\n </>\n )}\n\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n}\n\nexport function TokenCardSkeleton() {\n return (\n <div className=\"card-base overflow-hidden\">\n <div className=\"aspect-square w-full animate-pulse bg-muted\" />\n <div className=\"px-3 pt-2.5 pb-3 space-y-1.5\">\n <div className=\"h-4 w-3/4 rounded-md animate-pulse bg-muted\" />\n <div className=\"h-2.5 w-2/5 rounded-md animate-pulse bg-muted\" />\n </div>\n <div className=\"px-3 pb-3 flex gap-1.5\">\n <div className=\"h-8 w-8 rounded-[9px] animate-pulse bg-muted shrink-0\" />\n <div className=\"h-8 flex-1 rounded-[9px] animate-pulse bg-muted\" />\n <div className=\"h-8 w-8 rounded-[9px] animate-pulse bg-muted shrink-0\" />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+Fc;AA7Fd,kBAAiB;AACjB,0BAGO;AACP,2BAGO;AACP,gBAAmB;AACnB,kBAA2B;AAC3B,oBAAmC;AACnC,2BAA6B;AAC7B,wBAAiC;AACjC,2BAA4B;AAC5B,kCAAmC;AACnC,uCAAyC;AACzC,iBAAmF;AAGnF,MAAM,WAAW;AACjB,MAAM,kBAAc,cAAG,UAAU,2DAA2D;AAerF,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACjB,QAAM,OAAO,MAAM,UAAU,QAAQ,UAAU,MAAM,OAAO;AAC5D,QAAM,YAAQ,wBAAW,MAAM,UAAU,KAAK;AAC9C,QAAM,eAAe,MAAM,UAAU,gBAAgB;AACrD,QAAM,SAAS,MAAM,UAAU;AAE/B,QAAM,eAAe,MAAM,cAAc;AAAA,IACvC,CAAC,MAAM,EAAE,MAAM,aAAa,YAAY,EAAE,MAAM,aAAa;AAAA,EAC/D;AAEA,QAAM,cAAc,MAAM,UAAU,YAAY,KAAK,CAAC,MAAM,EAAE,eAAe,SAAS;AACtF,QAAM,UAAU,OAAO,aAAa,UAAU,WAAW,YAAY,QAAQ;AAC7E,QAAM,QAAQ,MAAM,WAAW,CAAC,GAAG,SAAS,MAAM,SAAS;AAE3D,QAAM,QAAQ,MAAM,MAAM,YAAY;AACtC,QAAM,WAAO,2DAAyB,OAAO,MAAM,eAAe;AAClE,QAAM,gBAAY,WAAAA,WAAe,OAAO,MAAM,iBAAiB,MAAM,OAAO;AAC5E,QAAM,qBAAiB,WAAAC,gBAAoB,OAAO,MAAM,eAAe;AACvE,QAAM,YAAY,iBAAiB,MAAM,eAAe,IAAI,MAAM,OAAO;AAEzE,QAAM,YAAY,CAAC,MAAwB;AACzC,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,YAAQ,KAAK;AAAA,EACf;AAEA,QAAM,cAAc,CAAC,MAAwB;AAC3C,MAAE,eAAe;AACjB,MAAE,gBAAgB;AAClB,cAAU,KAAK;AAAA,EACjB;AAEA,SACE,6CAAC,SAAI,WAAU,2DAEb;AAAA,iDAAC,YAAAC,SAAA,EAAK,MAAM,WAAW,WAAU,wBAE/B;AAAA,mDAAC,SAAI,WAAU,4DACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,KAAK;AAAA,YACL,MAAK;AAAA,YACL,OAAM;AAAA,YACN,WAAU;AAAA,YACV,UACE,4CAAC,SAAI,WAAU,6GACb,uDAAC,UAAK,WAAU,+CAA8C;AAAA;AAAA,cAAE,MAAM;AAAA,eAAQ,GAChF;AAAA;AAAA,QAEJ;AAAA,QAEC,gBACC,4CAAC,SAAI,WAAU,kCACb,sDAAC,UAAK,WAAU,kKACd;AAAA,UAAC;AAAA;AAAA,YACC,iBAAiB,aAAa,MAAM;AAAA,YACpC,UAAU,aAAa,MAAM;AAAA,YAC7B;AAAA,YACA,MAAK;AAAA;AAAA,QACP,GACF,GACF;AAAA,SAGA,MAAM,mBAAmB,aAAa,MAAM,mBAAmB,eAC/D,6CAAC,SAAI,WAAU,4GACb;AAAA,sDAAC,+BAAQ,WAAU,sCAAqC;AAAA,UACxD,4CAAC,UAAK,WAAU,0BAAyB,4BAAS;AAAA,WACpD;AAAA,SAEJ;AAAA,MAEA,6CAAC,SAAI,WAAU,2BACb;AAAA,oDAAC,OAAE,WAAU,iDAAiD,gBAAK;AAAA,QACnE,6CAAC,SAAI,WAAU,8CACZ;AAAA,oBAAU,4CAAC,oCAAY,QAAuB,MAAK,MAAK;AAAA,UACxD,UACC,6CAAC,OAAE,WAAU,2DACV;AAAA,oBAAQ,MAAM,GAAG,CAAC;AAAA,YAAE;AAAA,YAAE,QAAQ,MAAM,EAAE;AAAA,aACzC,IACE,MAAM,UAAU,cAClB,4CAAC,OAAE,WAAU,wDACV,gBAAM,SAAS,aAClB,IACE;AAAA,WACN;AAAA,SACF;AAAA,OACF;AAAA,IAEA,6CAAC,SAAI,WAAU,uCAEb;AAAA;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,eAAW,cAAG,aAAa,mBAAmB;AAAA,UAC9C,OAAM;AAAA,UAEN,sDAAC,oCAAa,WAAU,eAAc;AAAA;AAAA,MACxC;AAAA,MAEC,UACC,eACE,6CAAC,YAAAA,SAAA,EAAK,MAAM,WAAW,eAAW,cAAG,aAAa,QAAQ,GACxD;AAAA,oDAAC,oCAAa,WAAU,sBAAqB;AAAA,QAAE;AAAA,SAEjD,IAEA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW,cAAG,aAAa,kGAAkG;AAAA,UAC7H,SAAS,CAAC,MAAM;AAAE,cAAE,eAAe;AAAG,cAAE,gBAAgB;AAAG,qBAAS,KAAK;AAAA,UAAG;AAAA,UAE5E;AAAA,wDAAC,2BAAI,WAAU,sBAAqB;AAAA,YAAE;AAAA;AAAA;AAAA,MAExC,IAEA,eACF,4CAAC,SAAI,WAAU,2DACb;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS;AAAA,UAET;AAAA,wDAAC,2BAAI,WAAU,wBAAuB;AAAA,YAAE;AAAA;AAAA;AAAA,MAE1C,GACF,IAEA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW,cAAG,aAAa,kGAAkG;AAAA,UAC7H,SAAS;AAAA,UAET;AAAA,wDAAC,iCAAU,WAAU,sBAAqB;AAAA,YAAE;AAAA;AAAA;AAAA,MAE9C;AAAA,MAGF,6CAAC,qCACC;AAAA,oDAAC,4CAAoB,SAAO,MAC1B;AAAA,UAAC;AAAA;AAAA,YACC,eAAW,cAAG,aAAa,kBAAkB;AAAA,YAC7C,cAAW;AAAA,YAEX,sDAAC,sCAAe,WAAU,eAAc;AAAA;AAAA,QAC1C,GACF;AAAA,QACA,6CAAC,4CAAoB,OAAM,OAAM,WAAU,QAEzC;AAAA,sDAAC,yCAAiB,SAAO,MACvB,uDAAC,YAAAA,SAAA,EAAK,MAAM,WAAW,WAAU,2BAC/B;AAAA,wDAAC,oCAAa,WAAU,qCAAoC;AAAA,YAAE;AAAA,aAEhE,GACF;AAAA,UAEA,4CAAC,8CAAsB;AAAA,UAEtB,UACC,4EACG;AAAA,aAAC,gBAAgB,UAChB;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,MAAM,OAAO,KAAK;AAAA,gBAE3B;AAAA,8DAAC,2BAAI,WAAU,eAAc;AAAA,kBAAE;AAAA;AAAA;AAAA,YAEjC;AAAA,YAED,cACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,MAAM,WAAW,KAAK;AAAA,gBAE/B;AAAA,8DAAC,sCAAe,WAAU,qCAAoC;AAAA,kBAAE;AAAA;AAAA;AAAA,YAElE;AAAA,YAED,gBAAgB,YACf;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,MAAM,SAAS,KAAK;AAAA,gBAE7B;AAAA,8DAAC,+BAAQ,WAAU,eAAc;AAAA,kBAAE;AAAA;AAAA;AAAA,YAErC;AAAA,aAEJ,IAEA,4EACG;AAAA,4BAAgB,SACf;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBAET;AAAA,8DAAC,2BAAI,WAAU,eAAc;AAAA,kBAC7B,6CAAC,UAAK,WAAU,2BAA0B;AAAA;AAAA,oBAExC,4CAAC,qCAAa,QAAQ,aAAa,MAAM,UAAU,MAAM,IAAI;AAAA,wBAC5D,kCAAmB,aAAa,MAAM,SAAS;AAAA,qBAClD;AAAA;AAAA;AAAA,YACF;AAAA,YAED,WACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBAET;AAAA,8DAAC,iCAAU,WAAU,eAAc;AAAA,kBAAE;AAAA;AAAA;AAAA,YAEvC;AAAA,aAEJ;AAAA,UAGF,4CAAC,yCAAiB,SAAO,MACvB,uDAAC,YAAAA,SAAA,EAAK,MAAM,WAAW,WAAU,qEAC/B;AAAA,wDAAC,iCAAU,WAAU,eAAc;AAAA,YAAE;AAAA,aAEvC,GACF;AAAA,UAEA,4CAAC,8CAAsB;AAAA,UAEvB,4CAAC,yCAAiB,SAAO,MACvB,uDAAC,YAAAA,SAAA,EAAK,MAAM,gBAAgB,WAAU,2BACpC;AAAA,wDAAC,8BAAO,WAAU,qCAAoC;AAAA,YAAE;AAAA,aAE1D,GACF;AAAA,WAEE,SAAS,YACT,4CAAC,yCAAiB,SAAO,MACvB,uDAAC,YAAAA,SAAA,EAAK,MAAM,YAAY,SAAS,OAAO,IAAI,WAAU,2BACpD;AAAA,wDAAC,mCAAY,WAAU,qCAAoC;AAAA,YAAE;AAAA,aAE/D,GACF;AAAA,UAGD,YACC,4EACE;AAAA,wDAAC,8CAAsB;AAAA,YACvB;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,MAAM,SAAS,KAAK;AAAA,gBAE7B;AAAA,8DAAC,4BAAK,WAAU,eAAc;AAAA,kBAAE;AAAA;AAAA;AAAA,YAElC;AAAA,aACF;AAAA,WAGJ;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEJ;AAEO,SAAS,oBAAoB;AAClC,SACE,6CAAC,SAAI,WAAU,6BACb;AAAA,gDAAC,SAAI,WAAU,+CAA8C;AAAA,IAC7D,6CAAC,SAAI,WAAU,gCACb;AAAA,kDAAC,SAAI,WAAU,+CAA8C;AAAA,MAC7D,4CAAC,SAAI,WAAU,iDAAgD;AAAA,OACjE;AAAA,IACA,6CAAC,SAAI,WAAU,0BACb;AAAA,kDAAC,SAAI,WAAU,yDAAwD;AAAA,MACvE,4CAAC,SAAI,WAAU,mDAAkD;AAAA,MACjE,4CAAC,SAAI,WAAU,yDAAwD;AAAA,OACzE;AAAA,KACF;AAEJ;","names":["buildAssetHref","buildCollectionHref","Link"]}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
- import Link from "next/link";
3
+ import Link from "./link.js";
4
4
  import {
5
5
  Loader2,
6
6
  ArrowUpRight,