@medialane/ui 0.11.0 → 0.11.1

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 (81) hide show
  1. package/dist/components/activity-card.cjs +2 -1
  2. package/dist/components/activity-card.cjs.map +1 -1
  3. package/dist/components/activity-card.d.cts +15 -0
  4. package/dist/components/activity-card.d.ts +15 -0
  5. package/dist/components/activity-card.js +2 -1
  6. package/dist/components/activity-card.js.map +1 -1
  7. package/dist/components/activity-feed-shell.d.cts +13 -0
  8. package/dist/components/activity-feed-shell.d.ts +13 -0
  9. package/dist/components/activity-row.d.cts +20 -0
  10. package/dist/components/activity-row.d.ts +20 -0
  11. package/dist/components/activity-ticker.d.cts +13 -0
  12. package/dist/components/activity-ticker.d.ts +13 -0
  13. package/dist/components/address-display.d.cts +12 -0
  14. package/dist/components/address-display.d.ts +12 -0
  15. package/dist/components/brand-icon.d.cts +10 -0
  16. package/dist/components/brand-icon.d.ts +10 -0
  17. package/dist/components/brand-logo.d.cts +11 -0
  18. package/dist/components/brand-logo.d.ts +11 -0
  19. package/dist/components/collection-card.d.cts +13 -0
  20. package/dist/components/collection-card.d.ts +13 -0
  21. package/dist/components/cta-card-grid.d.cts +23 -0
  22. package/dist/components/cta-card-grid.d.ts +23 -0
  23. package/dist/components/currency-icon.d.cts +25 -0
  24. package/dist/components/currency-icon.d.ts +25 -0
  25. package/dist/components/discover-collections-strip.d.cts +14 -0
  26. package/dist/components/discover-collections-strip.d.ts +14 -0
  27. package/dist/components/discover-creators-strip.d.cts +14 -0
  28. package/dist/components/discover-creators-strip.d.ts +14 -0
  29. package/dist/components/discover-feed-section.d.cts +24 -0
  30. package/dist/components/discover-feed-section.d.ts +24 -0
  31. package/dist/components/discover-hero.d.cts +17 -0
  32. package/dist/components/discover-hero.d.ts +17 -0
  33. package/dist/components/featured-carousel.d.cts +13 -0
  34. package/dist/components/featured-carousel.d.ts +13 -0
  35. package/dist/components/hero-slider.d.cts +17 -0
  36. package/dist/components/hero-slider.d.ts +17 -0
  37. package/dist/components/ip-type-badge.d.cts +21 -0
  38. package/dist/components/ip-type-badge.d.ts +21 -0
  39. package/dist/components/launchpad-services.d.cts +43 -0
  40. package/dist/components/launchpad-services.d.ts +43 -0
  41. package/dist/components/listing-card.d.cts +16 -0
  42. package/dist/components/listing-card.d.ts +16 -0
  43. package/dist/components/motion-primitives.d.cts +36 -0
  44. package/dist/components/motion-primitives.d.ts +36 -0
  45. package/dist/components/nav-command-menu.d.cts +51 -0
  46. package/dist/components/nav-command-menu.d.ts +51 -0
  47. package/dist/components/page-container.d.cts +15 -0
  48. package/dist/components/page-container.d.ts +15 -0
  49. package/dist/components/portfolio-subnav.d.cts +27 -0
  50. package/dist/components/portfolio-subnav.d.ts +27 -0
  51. package/dist/components/scroll-section.d.cts +18 -0
  52. package/dist/components/scroll-section.d.ts +18 -0
  53. package/dist/components/share-button.d.cts +12 -0
  54. package/dist/components/share-button.d.ts +12 -0
  55. package/dist/components/token-card.d.cts +31 -0
  56. package/dist/components/token-card.d.ts +31 -0
  57. package/dist/data/activity.d.cts +16 -0
  58. package/dist/data/activity.d.ts +16 -0
  59. package/dist/data/brand.d.cts +44 -0
  60. package/dist/data/brand.d.ts +44 -0
  61. package/dist/data/ip-types.d.cts +13 -0
  62. package/dist/data/ip-types.d.ts +13 -0
  63. package/dist/data/launchpad-services.d.cts +42 -0
  64. package/dist/data/launchpad-services.d.ts +42 -0
  65. package/dist/index.d.cts +42 -0
  66. package/dist/index.d.ts +42 -0
  67. package/dist/preset/tailwind.d.cts +5 -0
  68. package/dist/preset/tailwind.d.ts +5 -0
  69. package/dist/utils/address.d.cts +7 -0
  70. package/dist/utils/address.d.ts +7 -0
  71. package/dist/utils/cn.d.cts +5 -0
  72. package/dist/utils/cn.d.ts +5 -0
  73. package/dist/utils/format.d.cts +7 -0
  74. package/dist/utils/format.d.ts +7 -0
  75. package/dist/utils/ipfs.d.cts +11 -0
  76. package/dist/utils/ipfs.d.ts +11 -0
  77. package/dist/utils/portfolio-counts.d.cts +33 -0
  78. package/dist/utils/portfolio-counts.d.ts +33 -0
  79. package/dist/utils/time.d.cts +7 -0
  80. package/dist/utils/time.d.ts +7 -0
  81. package/package.json +1 -1
@@ -62,9 +62,10 @@ function ActivityCardSkeleton() {
62
62
  ] });
63
63
  }
64
64
  function ActivityCard({
65
- activity,
65
+ activity: rawActivity,
66
66
  getAssetHref = (c, t) => `/asset/${c}/${t}`
67
67
  }) {
68
+ const activity = rawActivity;
68
69
  const config = import_activity.ACTIVITY_TYPE_CONFIG[activity.type] ?? {
69
70
  label: activity.type,
70
71
  variant: "outline",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/activity-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { ExternalLink } from \"lucide-react\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\nimport { ACTIVITY_TYPE_CONFIG } from \"../data/activity.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport { cn } from \"../utils/cn.js\";\nimport type { ApiActivity } from \"@medialane/sdk\";\n\nexport const ACTIVITY_MESSAGES: Record<string, (actor: string | null) => string> = {\n mint: (actor) => actor ? `Minted by ${actor}` : \"Newly minted\",\n listing: (actor) => actor ? `Listed by ${actor}` : \"Listed for sale\",\n sale: (actor) => actor ? `Purchased by ${actor}` : \"Sold\",\n offer: (actor) => actor ? `Offer by ${actor}` : \"Offer placed\",\n transfer: (actor) => actor ? `Transferred by ${actor}` : \"Transferred\",\n cancelled: (actor) => actor ? `Cancelled by ${actor}` : \"Listing cancelled\",\n};\n\nexport function ActivityCardSkeleton() {\n return (\n <div className=\"card-base\">\n <div className=\"aspect-square w-full bg-muted animate-pulse\" />\n <div className=\"p-4 space-y-2\">\n <div className=\"h-4 w-32 bg-muted animate-pulse rounded\" />\n <div className=\"h-3 w-24 bg-muted animate-pulse rounded\" />\n </div>\n </div>\n );\n}\n\nexport interface ActivityCardProps {\n activity: ApiActivity;\n /** Builds the asset link; card is unlinked when the activity has no token ref */\n getAssetHref?: (contract: string, tokenId: string) => string;\n}\n\n/** Card-shaped activity item for horizontal carousels (Discover Community strip).\n * Same data as ActivityRow, presented like a collection/listing card. */\nexport function ActivityCard({\n activity,\n getAssetHref = (c, t) => `/asset/${c}/${t}`,\n}: ActivityCardProps) {\n const config = ACTIVITY_TYPE_CONFIG[activity.type] ?? {\n label: activity.type,\n variant: \"outline\" as const,\n icon: ExternalLink,\n colorClass: \"text-muted-foreground\",\n bgClass: \"bg-muted\",\n };\n const Icon = config.icon;\n\n const contract = activity.nftContract ?? activity.contractAddress ?? null;\n const tokenId = activity.nftTokenId ?? activity.tokenId ?? null;\n const actor =\n activity.offerer ??\n activity.fulfiller ??\n ((activity.type as string) === \"mint\" ? activity.to : activity.from) ??\n null;\n\n const tokenName = activity.token?.name ?? (tokenId ? `#${tokenId}` : \"—\");\n const rawImage = activity.token?.image ?? null;\n const tokenImage = rawImage ? ipfsToHttp(rawImage) : null;\n const amount = activity.amount && Number(activity.amount) > 1 ? activity.amount : null;\n\n const shortActor = actor\n ? actor.length > 10\n ? `${actor.slice(0, 6)}…${actor.slice(-4)}`\n : actor\n : null;\n const message = ACTIVITY_MESSAGES[activity.type]?.(shortActor) ?? config.label;\n\n const body = (\n <>\n <div className=\"aspect-square relative bg-muted\">\n {tokenImage ? (\n <Image\n src={tokenImage}\n alt={tokenName}\n fill\n sizes=\"256px\"\n className=\"object-cover\"\n unoptimized\n />\n ) : (\n <div className=\"absolute inset-0 bg-gradient-to-br from-muted-foreground/10 to-muted-foreground/5\" aria-hidden />\n )}\n {/* Activity type chip — vivid label on glass */}\n <span className=\"absolute top-2.5 left-2.5 inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-[11px] font-semibold bg-background/75 backdrop-blur-md border border-border/40\">\n <Icon className={cn(\"h-3 w-3\", config.colorClass)} aria-hidden />\n <span className={config.colorClass}>{config.label}</span>\n </span>\n {amount && (\n <span className=\"absolute bottom-2.5 right-2.5 px-2 py-0.5 rounded-full text-[10px] font-bold bg-violet-500 text-white\">\n ×{amount}\n </span>\n )}\n </div>\n <div className=\"p-4 space-y-1.5\">\n <p className=\"text-[15px] font-semibold truncate\">{tokenName}</p>\n <p\n className=\"text-xs text-muted-foreground truncate\"\n title={new Date(activity.timestamp).toLocaleString()}\n >\n {message} · {timeAgo(activity.timestamp)}\n </p>\n {activity.price?.formatted && (\n <p className=\"text-sm font-bold tabular-nums flex items-center gap-1.5 pt-0.5\">\n {activity.price.currency && <CurrencyIcon symbol={activity.price.currency} size={13} aria-hidden />}\n {formatDisplayPrice(activity.price.formatted)}\n </p>\n )}\n </div>\n </>\n );\n\n const className = \"card-base block active:scale-[0.99] transition-all\";\n\n return contract && tokenId ? (\n <Link href={getAssetHref(contract, tokenId)} className={className}>\n {body}\n </Link>\n ) : (\n <div className={className}>{body}</div>\n );\n}\n"],"mappings":"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","names":["Image","Link"]}
1
+ {"version":3,"sources":["../../src/components/activity-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { ExternalLink } from \"lucide-react\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\nimport { ACTIVITY_TYPE_CONFIG } from \"../data/activity.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport { cn } from \"../utils/cn.js\";\nimport type { ApiActivity } from \"@medialane/sdk\";\n\n/** ui's pinned SDK lags the apps — extend structurally for fields newer SDKs carry. */\ntype ActivityWithEnrichment = ApiActivity & {\n token?: { name: string | null; image: string | null } | null;\n amount?: string;\n};\n\nexport const ACTIVITY_MESSAGES: Record<string, (actor: string | null) => string> = {\n mint: (actor) => actor ? `Minted by ${actor}` : \"Newly minted\",\n listing: (actor) => actor ? `Listed by ${actor}` : \"Listed for sale\",\n sale: (actor) => actor ? `Purchased by ${actor}` : \"Sold\",\n offer: (actor) => actor ? `Offer by ${actor}` : \"Offer placed\",\n transfer: (actor) => actor ? `Transferred by ${actor}` : \"Transferred\",\n cancelled: (actor) => actor ? `Cancelled by ${actor}` : \"Listing cancelled\",\n};\n\nexport function ActivityCardSkeleton() {\n return (\n <div className=\"card-base\">\n <div className=\"aspect-square w-full bg-muted animate-pulse\" />\n <div className=\"p-4 space-y-2\">\n <div className=\"h-4 w-32 bg-muted animate-pulse rounded\" />\n <div className=\"h-3 w-24 bg-muted animate-pulse rounded\" />\n </div>\n </div>\n );\n}\n\nexport interface ActivityCardProps {\n activity: ApiActivity;\n /** Builds the asset link; card is unlinked when the activity has no token ref */\n getAssetHref?: (contract: string, tokenId: string) => string;\n}\n\n/** Card-shaped activity item for horizontal carousels (Discover Community strip).\n * Same data as ActivityRow, presented like a collection/listing card. */\nexport function ActivityCard({\n activity: rawActivity,\n getAssetHref = (c, t) => `/asset/${c}/${t}`,\n}: ActivityCardProps) {\n const activity = rawActivity as ActivityWithEnrichment;\n const config = ACTIVITY_TYPE_CONFIG[activity.type] ?? {\n label: activity.type,\n variant: \"outline\" as const,\n icon: ExternalLink,\n colorClass: \"text-muted-foreground\",\n bgClass: \"bg-muted\",\n };\n const Icon = config.icon;\n\n const contract = activity.nftContract ?? activity.contractAddress ?? null;\n const tokenId = activity.nftTokenId ?? activity.tokenId ?? null;\n const actor =\n activity.offerer ??\n activity.fulfiller ??\n ((activity.type as string) === \"mint\" ? activity.to : activity.from) ??\n null;\n\n const tokenName = activity.token?.name ?? (tokenId ? `#${tokenId}` : \"—\");\n const rawImage = activity.token?.image ?? null;\n const tokenImage = rawImage ? ipfsToHttp(rawImage) : null;\n const amount = activity.amount && Number(activity.amount) > 1 ? activity.amount : null;\n\n const shortActor = actor\n ? actor.length > 10\n ? `${actor.slice(0, 6)}…${actor.slice(-4)}`\n : actor\n : null;\n const message = ACTIVITY_MESSAGES[activity.type]?.(shortActor) ?? config.label;\n\n const body = (\n <>\n <div className=\"aspect-square relative bg-muted\">\n {tokenImage ? (\n <Image\n src={tokenImage}\n alt={tokenName}\n fill\n sizes=\"256px\"\n className=\"object-cover\"\n unoptimized\n />\n ) : (\n <div className=\"absolute inset-0 bg-gradient-to-br from-muted-foreground/10 to-muted-foreground/5\" aria-hidden />\n )}\n {/* Activity type chip — vivid label on glass */}\n <span className=\"absolute top-2.5 left-2.5 inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-[11px] font-semibold bg-background/75 backdrop-blur-md border border-border/40\">\n <Icon className={cn(\"h-3 w-3\", config.colorClass)} aria-hidden />\n <span className={config.colorClass}>{config.label}</span>\n </span>\n {amount && (\n <span className=\"absolute bottom-2.5 right-2.5 px-2 py-0.5 rounded-full text-[10px] font-bold bg-violet-500 text-white\">\n ×{amount}\n </span>\n )}\n </div>\n <div className=\"p-4 space-y-1.5\">\n <p className=\"text-[15px] font-semibold truncate\">{tokenName}</p>\n <p\n className=\"text-xs text-muted-foreground truncate\"\n title={new Date(activity.timestamp).toLocaleString()}\n >\n {message} · {timeAgo(activity.timestamp)}\n </p>\n {activity.price?.formatted && (\n <p className=\"text-sm font-bold tabular-nums flex items-center gap-1.5 pt-0.5\">\n {activity.price.currency && <CurrencyIcon symbol={activity.price.currency} size={13} aria-hidden />}\n {formatDisplayPrice(activity.price.formatted)}\n </p>\n )}\n </div>\n </>\n );\n\n const className = \"card-base block active:scale-[0.99] transition-all\";\n\n return contract && tokenId ? (\n <Link href={getAssetHref(contract, tokenId)} className={className}>\n {body}\n </Link>\n ) : (\n <div className={className}>{body}</div>\n );\n}\n"],"mappings":"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","names":["Image","Link"]}
@@ -0,0 +1,15 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiActivity } from '@medialane/sdk';
3
+
4
+ declare const ACTIVITY_MESSAGES: Record<string, (actor: string | null) => string>;
5
+ declare function ActivityCardSkeleton(): react_jsx_runtime.JSX.Element;
6
+ interface ActivityCardProps {
7
+ activity: ApiActivity;
8
+ /** Builds the asset link; card is unlinked when the activity has no token ref */
9
+ getAssetHref?: (contract: string, tokenId: string) => string;
10
+ }
11
+ /** Card-shaped activity item for horizontal carousels (Discover Community strip).
12
+ * Same data as ActivityRow, presented like a collection/listing card. */
13
+ declare function ActivityCard({ activity: rawActivity, getAssetHref, }: ActivityCardProps): react_jsx_runtime.JSX.Element;
14
+
15
+ export { ACTIVITY_MESSAGES, ActivityCard, type ActivityCardProps, ActivityCardSkeleton };
@@ -0,0 +1,15 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiActivity } from '@medialane/sdk';
3
+
4
+ declare const ACTIVITY_MESSAGES: Record<string, (actor: string | null) => string>;
5
+ declare function ActivityCardSkeleton(): react_jsx_runtime.JSX.Element;
6
+ interface ActivityCardProps {
7
+ activity: ApiActivity;
8
+ /** Builds the asset link; card is unlinked when the activity has no token ref */
9
+ getAssetHref?: (contract: string, tokenId: string) => string;
10
+ }
11
+ /** Card-shaped activity item for horizontal carousels (Discover Community strip).
12
+ * Same data as ActivityRow, presented like a collection/listing card. */
13
+ declare function ActivityCard({ activity: rawActivity, getAssetHref, }: ActivityCardProps): react_jsx_runtime.JSX.Element;
14
+
15
+ export { ACTIVITY_MESSAGES, ActivityCard, type ActivityCardProps, ActivityCardSkeleton };
@@ -27,9 +27,10 @@ function ActivityCardSkeleton() {
27
27
  ] });
28
28
  }
29
29
  function ActivityCard({
30
- activity,
30
+ activity: rawActivity,
31
31
  getAssetHref = (c, t) => `/asset/${c}/${t}`
32
32
  }) {
33
+ const activity = rawActivity;
33
34
  const config = ACTIVITY_TYPE_CONFIG[activity.type] ?? {
34
35
  label: activity.type,
35
36
  variant: "outline",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/activity-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { ExternalLink } from \"lucide-react\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\nimport { ACTIVITY_TYPE_CONFIG } from \"../data/activity.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport { cn } from \"../utils/cn.js\";\nimport type { ApiActivity } from \"@medialane/sdk\";\n\nexport const ACTIVITY_MESSAGES: Record<string, (actor: string | null) => string> = {\n mint: (actor) => actor ? `Minted by ${actor}` : \"Newly minted\",\n listing: (actor) => actor ? `Listed by ${actor}` : \"Listed for sale\",\n sale: (actor) => actor ? `Purchased by ${actor}` : \"Sold\",\n offer: (actor) => actor ? `Offer by ${actor}` : \"Offer placed\",\n transfer: (actor) => actor ? `Transferred by ${actor}` : \"Transferred\",\n cancelled: (actor) => actor ? `Cancelled by ${actor}` : \"Listing cancelled\",\n};\n\nexport function ActivityCardSkeleton() {\n return (\n <div className=\"card-base\">\n <div className=\"aspect-square w-full bg-muted animate-pulse\" />\n <div className=\"p-4 space-y-2\">\n <div className=\"h-4 w-32 bg-muted animate-pulse rounded\" />\n <div className=\"h-3 w-24 bg-muted animate-pulse rounded\" />\n </div>\n </div>\n );\n}\n\nexport interface ActivityCardProps {\n activity: ApiActivity;\n /** Builds the asset link; card is unlinked when the activity has no token ref */\n getAssetHref?: (contract: string, tokenId: string) => string;\n}\n\n/** Card-shaped activity item for horizontal carousels (Discover Community strip).\n * Same data as ActivityRow, presented like a collection/listing card. */\nexport function ActivityCard({\n activity,\n getAssetHref = (c, t) => `/asset/${c}/${t}`,\n}: ActivityCardProps) {\n const config = ACTIVITY_TYPE_CONFIG[activity.type] ?? {\n label: activity.type,\n variant: \"outline\" as const,\n icon: ExternalLink,\n colorClass: \"text-muted-foreground\",\n bgClass: \"bg-muted\",\n };\n const Icon = config.icon;\n\n const contract = activity.nftContract ?? activity.contractAddress ?? null;\n const tokenId = activity.nftTokenId ?? activity.tokenId ?? null;\n const actor =\n activity.offerer ??\n activity.fulfiller ??\n ((activity.type as string) === \"mint\" ? activity.to : activity.from) ??\n null;\n\n const tokenName = activity.token?.name ?? (tokenId ? `#${tokenId}` : \"—\");\n const rawImage = activity.token?.image ?? null;\n const tokenImage = rawImage ? ipfsToHttp(rawImage) : null;\n const amount = activity.amount && Number(activity.amount) > 1 ? activity.amount : null;\n\n const shortActor = actor\n ? actor.length > 10\n ? `${actor.slice(0, 6)}…${actor.slice(-4)}`\n : actor\n : null;\n const message = ACTIVITY_MESSAGES[activity.type]?.(shortActor) ?? config.label;\n\n const body = (\n <>\n <div className=\"aspect-square relative bg-muted\">\n {tokenImage ? (\n <Image\n src={tokenImage}\n alt={tokenName}\n fill\n sizes=\"256px\"\n className=\"object-cover\"\n unoptimized\n />\n ) : (\n <div className=\"absolute inset-0 bg-gradient-to-br from-muted-foreground/10 to-muted-foreground/5\" aria-hidden />\n )}\n {/* Activity type chip — vivid label on glass */}\n <span className=\"absolute top-2.5 left-2.5 inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-[11px] font-semibold bg-background/75 backdrop-blur-md border border-border/40\">\n <Icon className={cn(\"h-3 w-3\", config.colorClass)} aria-hidden />\n <span className={config.colorClass}>{config.label}</span>\n </span>\n {amount && (\n <span className=\"absolute bottom-2.5 right-2.5 px-2 py-0.5 rounded-full text-[10px] font-bold bg-violet-500 text-white\">\n ×{amount}\n </span>\n )}\n </div>\n <div className=\"p-4 space-y-1.5\">\n <p className=\"text-[15px] font-semibold truncate\">{tokenName}</p>\n <p\n className=\"text-xs text-muted-foreground truncate\"\n title={new Date(activity.timestamp).toLocaleString()}\n >\n {message} · {timeAgo(activity.timestamp)}\n </p>\n {activity.price?.formatted && (\n <p className=\"text-sm font-bold tabular-nums flex items-center gap-1.5 pt-0.5\">\n {activity.price.currency && <CurrencyIcon symbol={activity.price.currency} size={13} aria-hidden />}\n {formatDisplayPrice(activity.price.formatted)}\n </p>\n )}\n </div>\n </>\n );\n\n const className = \"card-base block active:scale-[0.99] transition-all\";\n\n return contract && tokenId ? (\n <Link href={getAssetHref(contract, tokenId)} className={className}>\n {body}\n </Link>\n ) : (\n <div className={className}>{body}</div>\n );\n}\n"],"mappings":";AAyBM,SAmDF,UAnDE,KACA,YADA;AAvBN,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AACrC,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,0BAA0B;AACnC,SAAS,UAAU;AAGZ,MAAM,oBAAsE;AAAA,EACjF,MAAW,CAAC,UAAU,QAAQ,aAAa,KAAK,KAAK;AAAA,EACrD,SAAW,CAAC,UAAU,QAAQ,aAAa,KAAK,KAAK;AAAA,EACrD,MAAW,CAAC,UAAU,QAAQ,gBAAgB,KAAK,KAAK;AAAA,EACxD,OAAW,CAAC,UAAU,QAAQ,YAAY,KAAK,KAAK;AAAA,EACpD,UAAW,CAAC,UAAU,QAAQ,kBAAkB,KAAK,KAAK;AAAA,EAC1D,WAAW,CAAC,UAAU,QAAQ,gBAAgB,KAAK,KAAK;AAC1D;AAEO,SAAS,uBAAuB;AACrC,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,wBAAC,SAAI,WAAU,+CAA8C;AAAA,IAC7D,qBAAC,SAAI,WAAU,iBACb;AAAA,0BAAC,SAAI,WAAU,2CAA0C;AAAA,MACzD,oBAAC,SAAI,WAAU,2CAA0C;AAAA,OAC3D;AAAA,KACF;AAEJ;AAUO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA,eAAe,CAAC,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC;AAC3C,GAAsB;AACpB,QAAM,SAAS,qBAAqB,SAAS,IAAI,KAAK;AAAA,IACpD,OAAO,SAAS;AAAA,IAChB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,SAAS;AAAA,EACX;AACA,QAAM,OAAO,OAAO;AAEpB,QAAM,WAAW,SAAS,eAAe,SAAS,mBAAmB;AACrE,QAAM,UAAU,SAAS,cAAc,SAAS,WAAW;AAC3D,QAAM,QACJ,SAAS,WACT,SAAS,cACP,SAAS,SAAoB,SAAS,SAAS,KAAK,SAAS,SAC/D;AAEF,QAAM,YAAY,SAAS,OAAO,SAAS,UAAU,IAAI,OAAO,KAAK;AACrE,QAAM,WAAW,SAAS,OAAO,SAAS;AAC1C,QAAM,aAAa,WAAW,WAAW,QAAQ,IAAI;AACrD,QAAM,SAAS,SAAS,UAAU,OAAO,SAAS,MAAM,IAAI,IAAI,SAAS,SAAS;AAElF,QAAM,aAAa,QACf,MAAM,SAAS,KACb,GAAG,MAAM,MAAM,GAAG,CAAC,CAAC,SAAI,MAAM,MAAM,EAAE,CAAC,KACvC,QACF;AACJ,QAAM,UAAU,kBAAkB,SAAS,IAAI,IAAI,UAAU,KAAK,OAAO;AAEzE,QAAM,OACJ,iCACE;AAAA,yBAAC,SAAI,WAAU,mCACZ;AAAA,mBACC;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,MAAI;AAAA,UACJ,OAAM;AAAA,UACN,WAAU;AAAA,UACV,aAAW;AAAA;AAAA,MACb,IAEA,oBAAC,SAAI,WAAU,qFAAoF,eAAW,MAAC;AAAA,MAGjH,qBAAC,UAAK,WAAU,2KACd;AAAA,4BAAC,QAAK,WAAW,GAAG,WAAW,OAAO,UAAU,GAAG,eAAW,MAAC;AAAA,QAC/D,oBAAC,UAAK,WAAW,OAAO,YAAa,iBAAO,OAAM;AAAA,SACpD;AAAA,MACC,UACC,qBAAC,UAAK,WAAU,yGAAwG;AAAA;AAAA,QACpH;AAAA,SACJ;AAAA,OAEJ;AAAA,IACA,qBAAC,SAAI,WAAU,mBACb;AAAA,0BAAC,OAAE,WAAU,sCAAsC,qBAAU;AAAA,MAC7D;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,IAAI,KAAK,SAAS,SAAS,EAAE,eAAe;AAAA,UAElD;AAAA;AAAA,YAAQ;AAAA,YAAI,QAAQ,SAAS,SAAS;AAAA;AAAA;AAAA,MACzC;AAAA,MACC,SAAS,OAAO,aACf,qBAAC,OAAE,WAAU,mEACV;AAAA,iBAAS,MAAM,YAAY,oBAAC,gBAAa,QAAQ,SAAS,MAAM,UAAU,MAAM,IAAI,eAAW,MAAC;AAAA,QAChG,mBAAmB,SAAS,MAAM,SAAS;AAAA,SAC9C;AAAA,OAEJ;AAAA,KACF;AAGF,QAAM,YAAY;AAElB,SAAO,YAAY,UACjB,oBAAC,QAAK,MAAM,aAAa,UAAU,OAAO,GAAG,WAC1C,gBACH,IAEA,oBAAC,SAAI,WAAuB,gBAAK;AAErC;","names":[]}
1
+ {"version":3,"sources":["../../src/components/activity-card.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"next/image\";\nimport Link from \"next/link\";\nimport { ExternalLink } from \"lucide-react\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\nimport { ACTIVITY_TYPE_CONFIG } from \"../data/activity.js\";\nimport { ipfsToHttp } from \"../utils/ipfs.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { formatDisplayPrice } from \"../utils/format.js\";\nimport { cn } from \"../utils/cn.js\";\nimport type { ApiActivity } from \"@medialane/sdk\";\n\n/** ui's pinned SDK lags the apps — extend structurally for fields newer SDKs carry. */\ntype ActivityWithEnrichment = ApiActivity & {\n token?: { name: string | null; image: string | null } | null;\n amount?: string;\n};\n\nexport const ACTIVITY_MESSAGES: Record<string, (actor: string | null) => string> = {\n mint: (actor) => actor ? `Minted by ${actor}` : \"Newly minted\",\n listing: (actor) => actor ? `Listed by ${actor}` : \"Listed for sale\",\n sale: (actor) => actor ? `Purchased by ${actor}` : \"Sold\",\n offer: (actor) => actor ? `Offer by ${actor}` : \"Offer placed\",\n transfer: (actor) => actor ? `Transferred by ${actor}` : \"Transferred\",\n cancelled: (actor) => actor ? `Cancelled by ${actor}` : \"Listing cancelled\",\n};\n\nexport function ActivityCardSkeleton() {\n return (\n <div className=\"card-base\">\n <div className=\"aspect-square w-full bg-muted animate-pulse\" />\n <div className=\"p-4 space-y-2\">\n <div className=\"h-4 w-32 bg-muted animate-pulse rounded\" />\n <div className=\"h-3 w-24 bg-muted animate-pulse rounded\" />\n </div>\n </div>\n );\n}\n\nexport interface ActivityCardProps {\n activity: ApiActivity;\n /** Builds the asset link; card is unlinked when the activity has no token ref */\n getAssetHref?: (contract: string, tokenId: string) => string;\n}\n\n/** Card-shaped activity item for horizontal carousels (Discover Community strip).\n * Same data as ActivityRow, presented like a collection/listing card. */\nexport function ActivityCard({\n activity: rawActivity,\n getAssetHref = (c, t) => `/asset/${c}/${t}`,\n}: ActivityCardProps) {\n const activity = rawActivity as ActivityWithEnrichment;\n const config = ACTIVITY_TYPE_CONFIG[activity.type] ?? {\n label: activity.type,\n variant: \"outline\" as const,\n icon: ExternalLink,\n colorClass: \"text-muted-foreground\",\n bgClass: \"bg-muted\",\n };\n const Icon = config.icon;\n\n const contract = activity.nftContract ?? activity.contractAddress ?? null;\n const tokenId = activity.nftTokenId ?? activity.tokenId ?? null;\n const actor =\n activity.offerer ??\n activity.fulfiller ??\n ((activity.type as string) === \"mint\" ? activity.to : activity.from) ??\n null;\n\n const tokenName = activity.token?.name ?? (tokenId ? `#${tokenId}` : \"—\");\n const rawImage = activity.token?.image ?? null;\n const tokenImage = rawImage ? ipfsToHttp(rawImage) : null;\n const amount = activity.amount && Number(activity.amount) > 1 ? activity.amount : null;\n\n const shortActor = actor\n ? actor.length > 10\n ? `${actor.slice(0, 6)}…${actor.slice(-4)}`\n : actor\n : null;\n const message = ACTIVITY_MESSAGES[activity.type]?.(shortActor) ?? config.label;\n\n const body = (\n <>\n <div className=\"aspect-square relative bg-muted\">\n {tokenImage ? (\n <Image\n src={tokenImage}\n alt={tokenName}\n fill\n sizes=\"256px\"\n className=\"object-cover\"\n unoptimized\n />\n ) : (\n <div className=\"absolute inset-0 bg-gradient-to-br from-muted-foreground/10 to-muted-foreground/5\" aria-hidden />\n )}\n {/* Activity type chip — vivid label on glass */}\n <span className=\"absolute top-2.5 left-2.5 inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full text-[11px] font-semibold bg-background/75 backdrop-blur-md border border-border/40\">\n <Icon className={cn(\"h-3 w-3\", config.colorClass)} aria-hidden />\n <span className={config.colorClass}>{config.label}</span>\n </span>\n {amount && (\n <span className=\"absolute bottom-2.5 right-2.5 px-2 py-0.5 rounded-full text-[10px] font-bold bg-violet-500 text-white\">\n ×{amount}\n </span>\n )}\n </div>\n <div className=\"p-4 space-y-1.5\">\n <p className=\"text-[15px] font-semibold truncate\">{tokenName}</p>\n <p\n className=\"text-xs text-muted-foreground truncate\"\n title={new Date(activity.timestamp).toLocaleString()}\n >\n {message} · {timeAgo(activity.timestamp)}\n </p>\n {activity.price?.formatted && (\n <p className=\"text-sm font-bold tabular-nums flex items-center gap-1.5 pt-0.5\">\n {activity.price.currency && <CurrencyIcon symbol={activity.price.currency} size={13} aria-hidden />}\n {formatDisplayPrice(activity.price.formatted)}\n </p>\n )}\n </div>\n </>\n );\n\n const className = \"card-base block active:scale-[0.99] transition-all\";\n\n return contract && tokenId ? (\n <Link href={getAssetHref(contract, tokenId)} className={className}>\n {body}\n </Link>\n ) : (\n <div className={className}>{body}</div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ActivityFeedShellProps {
4
+ title: string;
5
+ href: string;
6
+ hrefLabel?: string;
7
+ lastUpdated: string;
8
+ isLoading: boolean;
9
+ children: React.ReactNode;
10
+ }
11
+ declare function ActivityFeedShell({ title, href, hrefLabel, lastUpdated, isLoading, children }: ActivityFeedShellProps): react_jsx_runtime.JSX.Element;
12
+
13
+ export { ActivityFeedShell, type ActivityFeedShellProps };
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ActivityFeedShellProps {
4
+ title: string;
5
+ href: string;
6
+ hrefLabel?: string;
7
+ lastUpdated: string;
8
+ isLoading: boolean;
9
+ children: React.ReactNode;
10
+ }
11
+ declare function ActivityFeedShell({ title, href, hrefLabel, lastUpdated, isLoading, children }: ActivityFeedShellProps): react_jsx_runtime.JSX.Element;
12
+
13
+ export { ActivityFeedShell, type ActivityFeedShellProps };
@@ -0,0 +1,20 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiActivity } from '@medialane/sdk';
3
+
4
+ interface ActivityRowProps {
5
+ activity: ApiActivity;
6
+ /** Optional token enrichment — if absent shows #tokenId fallback. No internal useToken call. */
7
+ token?: {
8
+ name?: string;
9
+ image?: string;
10
+ };
11
+ showActor?: boolean;
12
+ showExplorer?: boolean;
13
+ compact?: boolean;
14
+ explorerUrl?: string;
15
+ getAssetHref?: (contract: string, tokenId: string) => string;
16
+ getActorHref?: (address: string) => string;
17
+ }
18
+ declare function ActivityRow({ activity, token, showActor, showExplorer, compact, explorerUrl, getAssetHref, getActorHref, }: ActivityRowProps): react_jsx_runtime.JSX.Element;
19
+
20
+ export { ActivityRow, type ActivityRowProps };
@@ -0,0 +1,20 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiActivity } from '@medialane/sdk';
3
+
4
+ interface ActivityRowProps {
5
+ activity: ApiActivity;
6
+ /** Optional token enrichment — if absent shows #tokenId fallback. No internal useToken call. */
7
+ token?: {
8
+ name?: string;
9
+ image?: string;
10
+ };
11
+ showActor?: boolean;
12
+ showExplorer?: boolean;
13
+ compact?: boolean;
14
+ explorerUrl?: string;
15
+ getAssetHref?: (contract: string, tokenId: string) => string;
16
+ getActorHref?: (address: string) => string;
17
+ }
18
+ declare function ActivityRow({ activity, token, showActor, showExplorer, compact, explorerUrl, getAssetHref, getActorHref, }: ActivityRowProps): react_jsx_runtime.JSX.Element;
19
+
20
+ export { ActivityRow, type ActivityRowProps };
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiOrder } from '@medialane/sdk';
3
+
4
+ interface ActivityTickerProps {
5
+ orders: ApiOrder[];
6
+ /** Hide ticker if fewer items than this threshold. Default: 3 */
7
+ minItems?: number;
8
+ className?: string;
9
+ getHref?: (order: ApiOrder) => string;
10
+ }
11
+ declare function ActivityTicker({ orders, minItems, className, getHref }: ActivityTickerProps): react_jsx_runtime.JSX.Element | null;
12
+
13
+ export { ActivityTicker, type ActivityTickerProps };
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiOrder } from '@medialane/sdk';
3
+
4
+ interface ActivityTickerProps {
5
+ orders: ApiOrder[];
6
+ /** Hide ticker if fewer items than this threshold. Default: 3 */
7
+ minItems?: number;
8
+ className?: string;
9
+ getHref?: (order: ApiOrder) => string;
10
+ }
11
+ declare function ActivityTicker({ orders, minItems, className, getHref }: ActivityTickerProps): react_jsx_runtime.JSX.Element | null;
12
+
13
+ export { ActivityTicker, type ActivityTickerProps };
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface AddressDisplayProps {
4
+ address: string;
5
+ className?: string;
6
+ /** Number of chars to show at start and end. Default: 4 */
7
+ chars?: number;
8
+ showCopy?: boolean;
9
+ }
10
+ declare function AddressDisplay({ address, className, chars, showCopy, }: AddressDisplayProps): react_jsx_runtime.JSX.Element;
11
+
12
+ export { AddressDisplay, type AddressDisplayProps };
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface AddressDisplayProps {
4
+ address: string;
5
+ className?: string;
6
+ /** Number of chars to show at start and end. Default: 4 */
7
+ chars?: number;
8
+ showCopy?: boolean;
9
+ }
10
+ declare function AddressDisplay({ address, className, chars, showCopy, }: AddressDisplayProps): react_jsx_runtime.JSX.Element;
11
+
12
+ export { AddressDisplay, type AddressDisplayProps };
@@ -0,0 +1,10 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface MedialaneIconProps {
4
+ size?: number;
5
+ href?: string;
6
+ className?: string;
7
+ }
8
+ declare function MedialaneIcon({ size, href, className }: MedialaneIconProps): react_jsx_runtime.JSX.Element;
9
+
10
+ export { MedialaneIcon, type MedialaneIconProps };
@@ -0,0 +1,10 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface MedialaneIconProps {
4
+ size?: number;
5
+ href?: string;
6
+ className?: string;
7
+ }
8
+ declare function MedialaneIcon({ size, href, className }: MedialaneIconProps): react_jsx_runtime.JSX.Element;
9
+
10
+ export { MedialaneIcon, type MedialaneIconProps };
@@ -0,0 +1,11 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface MedialaneLogoFullProps {
4
+ width?: number;
5
+ height?: number;
6
+ href?: string;
7
+ className?: string;
8
+ }
9
+ declare function MedialaneLogoFull({ width, height, href, className, }: MedialaneLogoFullProps): react_jsx_runtime.JSX.Element;
10
+
11
+ export { MedialaneLogoFull, type MedialaneLogoFullProps };
@@ -0,0 +1,11 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface MedialaneLogoFullProps {
4
+ width?: number;
5
+ height?: number;
6
+ href?: string;
7
+ className?: string;
8
+ }
9
+ declare function MedialaneLogoFull({ width, height, href, className, }: MedialaneLogoFullProps): react_jsx_runtime.JSX.Element;
10
+
11
+ export { MedialaneLogoFull, type MedialaneLogoFullProps };
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiCollection } from '@medialane/sdk';
3
+
4
+ interface CollectionCardProps {
5
+ collection: ApiCollection;
6
+ /** Shows settings gear icon linking to this path — used in portfolio pages */
7
+ settingsHref?: string;
8
+ className?: string;
9
+ }
10
+ declare function CollectionCard({ collection, settingsHref, className }: CollectionCardProps): react_jsx_runtime.JSX.Element;
11
+ declare function CollectionCardSkeleton(): react_jsx_runtime.JSX.Element;
12
+
13
+ export { CollectionCard, type CollectionCardProps, CollectionCardSkeleton };
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiCollection } from '@medialane/sdk';
3
+
4
+ interface CollectionCardProps {
5
+ collection: ApiCollection;
6
+ /** Shows settings gear icon linking to this path — used in portfolio pages */
7
+ settingsHref?: string;
8
+ className?: string;
9
+ }
10
+ declare function CollectionCard({ collection, settingsHref, className }: CollectionCardProps): react_jsx_runtime.JSX.Element;
11
+ declare function CollectionCardSkeleton(): react_jsx_runtime.JSX.Element;
12
+
13
+ export { CollectionCard, type CollectionCardProps, CollectionCardSkeleton };
@@ -0,0 +1,23 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ElementType } from 'react';
3
+
4
+ interface CtaCardItem {
5
+ icon: ElementType;
6
+ title: string;
7
+ description: string;
8
+ links: {
9
+ label: string;
10
+ href: string;
11
+ }[];
12
+ href: string;
13
+ /** Tailwind gradient class applied as a 3% opacity hover overlay */
14
+ gradient: string;
15
+ /** Tailwind gradient + shadow class for the icon pill */
16
+ iconGradient: string;
17
+ }
18
+ interface CtaCardGridProps {
19
+ cards: CtaCardItem[];
20
+ }
21
+ declare function CtaCardGrid({ cards }: CtaCardGridProps): react_jsx_runtime.JSX.Element;
22
+
23
+ export { CtaCardGrid, type CtaCardGridProps, type CtaCardItem };
@@ -0,0 +1,23 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ElementType } from 'react';
3
+
4
+ interface CtaCardItem {
5
+ icon: ElementType;
6
+ title: string;
7
+ description: string;
8
+ links: {
9
+ label: string;
10
+ href: string;
11
+ }[];
12
+ href: string;
13
+ /** Tailwind gradient class applied as a 3% opacity hover overlay */
14
+ gradient: string;
15
+ /** Tailwind gradient + shadow class for the icon pill */
16
+ iconGradient: string;
17
+ }
18
+ interface CtaCardGridProps {
19
+ cards: CtaCardItem[];
20
+ }
21
+ declare function CtaCardGrid({ cards }: CtaCardGridProps): react_jsx_runtime.JSX.Element;
22
+
23
+ export { CtaCardGrid, type CtaCardGridProps, type CtaCardItem };
@@ -0,0 +1,25 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface CurrencyIconProps {
4
+ symbol: string | null | undefined;
5
+ size?: number;
6
+ className?: string;
7
+ /**
8
+ * Base path prepended to icon paths. Default: "" (icons served from app's public root).
9
+ * Example: "https://cdn.medialane.io/icons"
10
+ */
11
+ iconsBasePath?: string;
12
+ }
13
+ declare function CurrencyIcon({ symbol, size, className, iconsBasePath }: CurrencyIconProps): react_jsx_runtime.JSX.Element | null;
14
+ interface CurrencyAmountProps {
15
+ amount: string;
16
+ symbol: string | null | undefined;
17
+ amountClassName?: string;
18
+ iconSize?: number;
19
+ className?: string;
20
+ /** Forwarded to CurrencyIcon. */
21
+ iconsBasePath?: string;
22
+ }
23
+ declare function CurrencyAmount({ amount, symbol, amountClassName, iconSize, className, iconsBasePath, }: CurrencyAmountProps): react_jsx_runtime.JSX.Element;
24
+
25
+ export { CurrencyAmount, type CurrencyAmountProps, CurrencyIcon, type CurrencyIconProps };
@@ -0,0 +1,25 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface CurrencyIconProps {
4
+ symbol: string | null | undefined;
5
+ size?: number;
6
+ className?: string;
7
+ /**
8
+ * Base path prepended to icon paths. Default: "" (icons served from app's public root).
9
+ * Example: "https://cdn.medialane.io/icons"
10
+ */
11
+ iconsBasePath?: string;
12
+ }
13
+ declare function CurrencyIcon({ symbol, size, className, iconsBasePath }: CurrencyIconProps): react_jsx_runtime.JSX.Element | null;
14
+ interface CurrencyAmountProps {
15
+ amount: string;
16
+ symbol: string | null | undefined;
17
+ amountClassName?: string;
18
+ iconSize?: number;
19
+ className?: string;
20
+ /** Forwarded to CurrencyIcon. */
21
+ iconsBasePath?: string;
22
+ }
23
+ declare function CurrencyAmount({ amount, symbol, amountClassName, iconSize, className, iconsBasePath, }: CurrencyAmountProps): react_jsx_runtime.JSX.Element;
24
+
25
+ export { CurrencyAmount, type CurrencyAmountProps, CurrencyIcon, type CurrencyIconProps };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiCollection } from '@medialane/sdk';
3
+
4
+ interface DiscoverCollectionsStripProps {
5
+ collections: ApiCollection[];
6
+ isLoading: boolean;
7
+ getHref: (collection: ApiCollection) => string;
8
+ allCollectionsHref?: string;
9
+ sectionLabel?: string;
10
+ title?: string;
11
+ }
12
+ declare function DiscoverCollectionsStrip({ collections, isLoading, getHref, allCollectionsHref, sectionLabel, title, }: DiscoverCollectionsStripProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { DiscoverCollectionsStrip, type DiscoverCollectionsStripProps };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiCollection } from '@medialane/sdk';
3
+
4
+ interface DiscoverCollectionsStripProps {
5
+ collections: ApiCollection[];
6
+ isLoading: boolean;
7
+ getHref: (collection: ApiCollection) => string;
8
+ allCollectionsHref?: string;
9
+ sectionLabel?: string;
10
+ title?: string;
11
+ }
12
+ declare function DiscoverCollectionsStrip({ collections, isLoading, getHref, allCollectionsHref, sectionLabel, title, }: DiscoverCollectionsStripProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { DiscoverCollectionsStrip, type DiscoverCollectionsStripProps };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiCreatorProfile } from '@medialane/sdk';
3
+
4
+ interface DiscoverCreatorsStripProps {
5
+ creators: ApiCreatorProfile[];
6
+ isLoading: boolean;
7
+ getHref: (creator: ApiCreatorProfile) => string;
8
+ allCreatorsHref?: string;
9
+ sectionLabel?: string;
10
+ title?: string;
11
+ }
12
+ declare function DiscoverCreatorsStrip({ creators, isLoading, getHref, allCreatorsHref, sectionLabel, title, }: DiscoverCreatorsStripProps): react_jsx_runtime.JSX.Element | null;
13
+
14
+ export { DiscoverCreatorsStrip, type DiscoverCreatorsStripProps };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiCreatorProfile } from '@medialane/sdk';
3
+
4
+ interface DiscoverCreatorsStripProps {
5
+ creators: ApiCreatorProfile[];
6
+ isLoading: boolean;
7
+ getHref: (creator: ApiCreatorProfile) => string;
8
+ allCreatorsHref?: string;
9
+ sectionLabel?: string;
10
+ title?: string;
11
+ }
12
+ declare function DiscoverCreatorsStrip({ creators, isLoading, getHref, allCreatorsHref, sectionLabel, title, }: DiscoverCreatorsStripProps): react_jsx_runtime.JSX.Element | null;
13
+
14
+ export { DiscoverCreatorsStrip, type DiscoverCreatorsStripProps };
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiOrder, ApiActivity } from '@medialane/sdk';
3
+
4
+ interface DiscoverFeedSectionProps {
5
+ orders: ApiOrder[];
6
+ isLoading: boolean;
7
+ activities: ApiActivity[];
8
+ activitiesLoading: boolean;
9
+ lastUpdated: string;
10
+ getAssetHref?: (contract: string, tokenId: string) => string;
11
+ getActorHref?: (address: string) => string;
12
+ explorerUrl?: string;
13
+ marketplaceHref?: string;
14
+ activitiesHref?: string;
15
+ /** Optional buy hook — when provided, listing cards show their Buy action */
16
+ onBuyOrder?: (order: ApiOrder) => void;
17
+ /** Hide the buy action for orders the viewer owns */
18
+ isOwnOrder?: (order: ApiOrder) => boolean;
19
+ }
20
+ /** Discover feed — Markets activity + Community as horizontal carousels,
21
+ * matching the Collections/Creators explore-by-scrolling model. */
22
+ declare function DiscoverFeedSection({ orders, isLoading, activities, activitiesLoading, lastUpdated, getAssetHref, marketplaceHref, activitiesHref, onBuyOrder, isOwnOrder, }: DiscoverFeedSectionProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { DiscoverFeedSection, type DiscoverFeedSectionProps };
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiOrder, ApiActivity } from '@medialane/sdk';
3
+
4
+ interface DiscoverFeedSectionProps {
5
+ orders: ApiOrder[];
6
+ isLoading: boolean;
7
+ activities: ApiActivity[];
8
+ activitiesLoading: boolean;
9
+ lastUpdated: string;
10
+ getAssetHref?: (contract: string, tokenId: string) => string;
11
+ getActorHref?: (address: string) => string;
12
+ explorerUrl?: string;
13
+ marketplaceHref?: string;
14
+ activitiesHref?: string;
15
+ /** Optional buy hook — when provided, listing cards show their Buy action */
16
+ onBuyOrder?: (order: ApiOrder) => void;
17
+ /** Hide the buy action for orders the viewer owns */
18
+ isOwnOrder?: (order: ApiOrder) => boolean;
19
+ }
20
+ /** Discover feed — Markets activity + Community as horizontal carousels,
21
+ * matching the Collections/Creators explore-by-scrolling model. */
22
+ declare function DiscoverFeedSection({ orders, isLoading, activities, activitiesLoading, lastUpdated, getAssetHref, marketplaceHref, activitiesHref, onBuyOrder, isOwnOrder, }: DiscoverFeedSectionProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { DiscoverFeedSection, type DiscoverFeedSectionProps };
@@ -0,0 +1,17 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiOrder } from '@medialane/sdk';
3
+
4
+ interface DiscoverHeroProps {
5
+ stats: {
6
+ collections: number;
7
+ tokens: number;
8
+ sales: number;
9
+ } | null;
10
+ orders: ApiOrder[];
11
+ badgeText?: string;
12
+ headlineText?: string;
13
+ getTickerHref?: (order: ApiOrder) => string;
14
+ }
15
+ declare function DiscoverHero({ stats, orders, badgeText, headlineText, getTickerHref, }: DiscoverHeroProps): react_jsx_runtime.JSX.Element;
16
+
17
+ export { DiscoverHero, type DiscoverHeroProps };
@@ -0,0 +1,17 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiOrder } from '@medialane/sdk';
3
+
4
+ interface DiscoverHeroProps {
5
+ stats: {
6
+ collections: number;
7
+ tokens: number;
8
+ sales: number;
9
+ } | null;
10
+ orders: ApiOrder[];
11
+ badgeText?: string;
12
+ headlineText?: string;
13
+ getTickerHref?: (order: ApiOrder) => string;
14
+ }
15
+ declare function DiscoverHero({ stats, orders, badgeText, headlineText, getTickerHref, }: DiscoverHeroProps): react_jsx_runtime.JSX.Element;
16
+
17
+ export { DiscoverHero, type DiscoverHeroProps };
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiCollection } from '@medialane/sdk';
3
+
4
+ interface FeaturedCarouselProps {
5
+ collections: ApiCollection[];
6
+ isLoading: boolean;
7
+ getHref: (collection: ApiCollection) => string;
8
+ allCollectionsHref?: string;
9
+ }
10
+ declare function FeaturedCarouselSkeleton(): react_jsx_runtime.JSX.Element;
11
+ declare function FeaturedCarousel({ collections, isLoading, getHref, allCollectionsHref, }: FeaturedCarouselProps): react_jsx_runtime.JSX.Element | null;
12
+
13
+ export { FeaturedCarousel, type FeaturedCarouselProps, FeaturedCarouselSkeleton };
@@ -0,0 +1,13 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ApiCollection } from '@medialane/sdk';
3
+
4
+ interface FeaturedCarouselProps {
5
+ collections: ApiCollection[];
6
+ isLoading: boolean;
7
+ getHref: (collection: ApiCollection) => string;
8
+ allCollectionsHref?: string;
9
+ }
10
+ declare function FeaturedCarouselSkeleton(): react_jsx_runtime.JSX.Element;
11
+ declare function FeaturedCarousel({ collections, isLoading, getHref, allCollectionsHref, }: FeaturedCarouselProps): react_jsx_runtime.JSX.Element | null;
12
+
13
+ export { FeaturedCarousel, type FeaturedCarouselProps, FeaturedCarouselSkeleton };