@medialane/ui 0.314.0 → 0.316.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/components/discover-collections-strip.cjs +1 -2
  2. package/dist/components/discover-collections-strip.cjs.map +1 -1
  3. package/dist/components/discover-collections-strip.js +1 -2
  4. package/dist/components/discover-collections-strip.js.map +1 -1
  5. package/dist/components/discover-community-section.cjs +6 -37
  6. package/dist/components/discover-community-section.cjs.map +1 -1
  7. package/dist/components/discover-community-section.js +6 -37
  8. package/dist/components/discover-community-section.js.map +1 -1
  9. package/dist/components/discover-feed-section.cjs +6 -33
  10. package/dist/components/discover-feed-section.cjs.map +1 -1
  11. package/dist/components/discover-feed-section.js +7 -34
  12. package/dist/components/discover-feed-section.js.map +1 -1
  13. package/dist/components/home-page.cjs +2 -4
  14. package/dist/components/home-page.cjs.map +1 -1
  15. package/dist/components/home-page.js +2 -4
  16. package/dist/components/home-page.js.map +1 -1
  17. package/dist/components/launchpad-strip.cjs +1 -2
  18. package/dist/components/launchpad-strip.cjs.map +1 -1
  19. package/dist/components/launchpad-strip.js +1 -2
  20. package/dist/components/launchpad-strip.js.map +1 -1
  21. package/dist/components/scroll-section.cjs +3 -42
  22. package/dist/components/scroll-section.cjs.map +1 -1
  23. package/dist/components/scroll-section.d.cts +1 -2
  24. package/dist/components/scroll-section.d.ts +1 -2
  25. package/dist/components/scroll-section.js +3 -32
  26. package/dist/components/scroll-section.js.map +1 -1
  27. package/dist/components/section-heading.cjs +65 -0
  28. package/dist/components/section-heading.cjs.map +1 -0
  29. package/dist/components/section-heading.d.cts +12 -0
  30. package/dist/components/section-heading.d.ts +12 -0
  31. package/dist/components/section-heading.js +31 -0
  32. package/dist/components/section-heading.js.map +1 -0
  33. package/dist/index.cjs +0 -7
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +0 -1
  36. package/dist/index.d.ts +0 -1
  37. package/dist/index.js +0 -4
  38. package/dist/index.js.map +1 -1
  39. package/package.json +1 -1
  40. package/dist/utils/sitemap-data.cjs +0 -104
  41. package/dist/utils/sitemap-data.cjs.map +0 -1
  42. package/dist/utils/sitemap-data.d.cts +0 -20
  43. package/dist/utils/sitemap-data.d.ts +0 -20
  44. package/dist/utils/sitemap-data.js +0 -78
  45. package/dist/utils/sitemap-data.js.map +0 -1
@@ -35,8 +35,7 @@ function DiscoverCollectionsStrip({
35
35
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
36
36
  import_scroll_section.ScrollSection,
37
37
  {
38
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Layers, { className: "h-3.5 w-3.5 text-white" }),
39
- iconBg: "bg-gradient-to-br from-brand-blue to-indigo-600 shadow-md shadow-brand-blue/20",
38
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Layers, { className: "h-4 w-4" }),
40
39
  title,
41
40
  href: allCollectionsHref,
42
41
  linkLabel: "View all",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/discover-collections-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport type { ApiCollection } from \"@medialane/sdk\";\n\nexport interface DiscoverCollectionsStripProps {\n collections: ApiCollection[];\n isLoading: boolean;\n\n getHref?: (collection: ApiCollection) => string;\n allCollectionsHref?: string;\n\n sectionLabel?: string;\n title?: string;\n}\n\nexport function DiscoverCollectionsStrip({\n collections,\n isLoading,\n allCollectionsHref = \"/collections\",\n title = \"Collections\",\n}: DiscoverCollectionsStripProps) {\n return (\n <ScrollSection\n icon={<Layers className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-brand-blue to-indigo-600 shadow-md shadow-brand-blue/20\"\n title={title}\n href={allCollectionsHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCardSkeleton />\n </div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCard collection={col} />\n </div>\n ))}\n </ScrollSection>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BY;AAxBZ,0BAAuB;AACvB,4BAA8B;AAC9B,6BAAuD;AAchD,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,QAAQ;AACV,GAAkC;AAChC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,4CAAC,8BAAO,WAAU,0BAAyB;AAAA,MACjD,QAAO;AAAA,MACP;AAAA,MACA,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,4CAAC,SAAY,WAAU,oCACrB,sDAAC,iDAAuB,KADhB,CAEV,CACD,IACD,YAAY,IAAI,CAAC,QACf,4CAAC,SAA8B,WAAU,oCACvC,sDAAC,yCAAe,YAAY,KAAK,KADzB,IAAI,eAEd,CACD;AAAA;AAAA,EACP;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/discover-collections-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport type { ApiCollection } from \"@medialane/sdk\";\n\nexport interface DiscoverCollectionsStripProps {\n collections: ApiCollection[];\n isLoading: boolean;\n\n getHref?: (collection: ApiCollection) => string;\n allCollectionsHref?: string;\n\n sectionLabel?: string;\n title?: string;\n}\n\nexport function DiscoverCollectionsStrip({\n collections,\n isLoading,\n allCollectionsHref = \"/collections\",\n title = \"Collections\",\n}: DiscoverCollectionsStripProps) {\n return (\n <ScrollSection\n icon={<Layers className=\"h-4 w-4\" />}\n title={title}\n href={allCollectionsHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCardSkeleton />\n </div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCard collection={col} />\n </div>\n ))}\n </ScrollSection>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BY;AAxBZ,0BAAuB;AACvB,4BAA8B;AAC9B,6BAAuD;AAchD,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,QAAQ;AACV,GAAkC;AAChC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,4CAAC,8BAAO,WAAU,WAAU;AAAA,MAClC;AAAA,MACA,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,4CAAC,SAAY,WAAU,oCACrB,sDAAC,iDAAuB,KADhB,CAEV,CACD,IACD,YAAY,IAAI,CAAC,QACf,4CAAC,SAA8B,WAAU,oCACvC,sDAAC,yCAAe,YAAY,KAAK,KADzB,IAAI,eAEd,CACD;AAAA;AAAA,EACP;AAEJ;","names":[]}
@@ -12,8 +12,7 @@ function DiscoverCollectionsStrip({
12
12
  return /* @__PURE__ */ jsx(
13
13
  ScrollSection,
14
14
  {
15
- icon: /* @__PURE__ */ jsx(Layers, { className: "h-3.5 w-3.5 text-white" }),
16
- iconBg: "bg-gradient-to-br from-brand-blue to-indigo-600 shadow-md shadow-brand-blue/20",
15
+ icon: /* @__PURE__ */ jsx(Layers, { className: "h-4 w-4" }),
17
16
  title,
18
17
  href: allCollectionsHref,
19
18
  linkLabel: "View all",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/discover-collections-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport type { ApiCollection } from \"@medialane/sdk\";\n\nexport interface DiscoverCollectionsStripProps {\n collections: ApiCollection[];\n isLoading: boolean;\n\n getHref?: (collection: ApiCollection) => string;\n allCollectionsHref?: string;\n\n sectionLabel?: string;\n title?: string;\n}\n\nexport function DiscoverCollectionsStrip({\n collections,\n isLoading,\n allCollectionsHref = \"/collections\",\n title = \"Collections\",\n}: DiscoverCollectionsStripProps) {\n return (\n <ScrollSection\n icon={<Layers className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-brand-blue to-indigo-600 shadow-md shadow-brand-blue/20\"\n title={title}\n href={allCollectionsHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCardSkeleton />\n </div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCard collection={col} />\n </div>\n ))}\n </ScrollSection>\n );\n}\n"],"mappings":";AA0BY;AAxBZ,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB,8BAA8B;AAchD,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,QAAQ;AACV,GAAkC;AAChC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,oBAAC,UAAO,WAAU,0BAAyB;AAAA,MACjD,QAAO;AAAA,MACP;AAAA,MACA,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,oCACrB,8BAAC,0BAAuB,KADhB,CAEV,CACD,IACD,YAAY,IAAI,CAAC,QACf,oBAAC,SAA8B,WAAU,oCACvC,8BAAC,kBAAe,YAAY,KAAK,KADzB,IAAI,eAEd,CACD;AAAA;AAAA,EACP;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/discover-collections-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport type { ApiCollection } from \"@medialane/sdk\";\n\nexport interface DiscoverCollectionsStripProps {\n collections: ApiCollection[];\n isLoading: boolean;\n\n getHref?: (collection: ApiCollection) => string;\n allCollectionsHref?: string;\n\n sectionLabel?: string;\n title?: string;\n}\n\nexport function DiscoverCollectionsStrip({\n collections,\n isLoading,\n allCollectionsHref = \"/collections\",\n title = \"Collections\",\n}: DiscoverCollectionsStripProps) {\n return (\n <ScrollSection\n icon={<Layers className=\"h-4 w-4\" />}\n title={title}\n href={allCollectionsHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCardSkeleton />\n </div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCard collection={col} />\n </div>\n ))}\n </ScrollSection>\n );\n}\n"],"mappings":";AA0BY;AAxBZ,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB,8BAA8B;AAchD,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,QAAQ;AACV,GAAkC;AAChC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,oBAAC,UAAO,WAAU,WAAU;AAAA,MAClC;AAAA,MACA,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,oCACrB,8BAAC,0BAAuB,KADhB,CAEV,CACD,IACD,YAAY,IAAI,CAAC,QACf,oBAAC,SAA8B,WAAU,oCACvC,8BAAC,kBAAe,YAAY,KAAK,KADzB,IAAI,eAEd,CACD;AAAA;AAAA,EACP;AAEJ;","names":[]}
@@ -36,6 +36,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
36
36
  var import_react = require("react");
37
37
  var import_lucide_react = require("lucide-react");
38
38
  var import_link = __toESM(require("./link.js"), 1);
39
+ var import_section_heading = require("./section-heading.js");
39
40
  var import_skeleton = require("./skeleton.js");
40
41
  var import_activity_row = require("./activity-row.js");
41
42
  var import_medialane_app = require("./medialane-app.js");
@@ -45,36 +46,6 @@ var import_time = require("../utils/time.js");
45
46
  var import_cn = require("../utils/cn.js");
46
47
  var import_empty_messages = require("../utils/empty-messages.js");
47
48
  const FEED_LIMIT = 8;
48
- function ColumnHeader({
49
- icon,
50
- iconBg,
51
- title,
52
- caption,
53
- href,
54
- linkLabel
55
- }) {
56
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
57
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2.5", children: [
58
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_cn.cn)("h-7 w-7 rounded-lg flex items-center justify-center shadow-md shrink-0", iconBg), children: icon }),
59
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
60
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
61
- caption && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs text-muted-foreground mt-1 flex items-center gap-1", children: caption })
62
- ] })
63
- ] }),
64
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
65
- import_link.default,
66
- {
67
- href,
68
- 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 shrink-0",
69
- children: [
70
- linkLabel,
71
- " ",
72
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3.5 w-3.5" })
73
- ]
74
- }
75
- )
76
- ] });
77
- }
78
49
  function DiscoverCommunitySection() {
79
50
  const { activities, isLoading } = (0, import_use_activities.useActivities)({ limit: FEED_LIMIT });
80
51
  const { walletAddress: address } = (0, import_medialane_app.useMedialaneApp)();
@@ -85,12 +56,11 @@ function DiscoverCommunitySection() {
85
56
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start", children: [
86
57
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "lg:col-span-7 space-y-4 sm:space-y-5", children: [
87
58
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
88
- ColumnHeader,
59
+ import_section_heading.SectionHeading,
89
60
  {
90
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-3.5 w-3.5 text-white" }),
91
- iconBg: "bg-gradient-to-br from-brand-purple to-brand-blue shadow-brand-purple/20",
61
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-4 w-4" }),
92
62
  title: "Activities",
93
- caption: !isLoading && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
63
+ subtitle: !isLoading && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
94
64
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.RefreshCw, { className: "h-2.5 w-2.5" }),
95
65
  "Updated ",
96
66
  (0, import_time.timeAgo)(lastUpdated)
@@ -121,10 +91,9 @@ function DiscoverCommunitySection() {
121
91
  ] }),
122
92
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "lg:col-span-5 space-y-4 sm:space-y-5", children: [
123
93
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
124
- ColumnHeader,
94
+ import_section_heading.SectionHeading,
125
95
  {
126
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, { className: "h-3.5 w-3.5 text-white" }),
127
- iconBg: "bg-gradient-to-br from-brand-rose to-brand-orange",
96
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, { className: "h-4 w-4" }),
128
97
  title: "Rewards",
129
98
  href: "/rewards",
130
99
  linkLabel: "Scoreboard"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/discover-community-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Activity, ArrowRight, RefreshCw, Sparkles } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { ActivityRow } from \"./activity-row.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport { LeaderboardPanel } from \"./rewards/leaderboard-panel.js\";\nimport { useActivities } from \"../utils/use-activities.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nconst FEED_LIMIT = 8;\n\nfunction ColumnHeader({\n icon,\n iconBg,\n title,\n caption,\n href,\n linkLabel,\n}: {\n icon: React.ReactNode;\n iconBg: string;\n title: string;\n caption?: React.ReactNode;\n href: string;\n linkLabel: string;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2.5\">\n <div className={cn(\"h-7 w-7 rounded-lg flex items-center justify-center shadow-md shrink-0\", iconBg)}>\n {icon}\n </div>\n <div>\n <h2 className=\"text-lg sm:text-xl font-semibold leading-none\">{title}</h2>\n {caption && <p className=\"text-2xs text-muted-foreground mt-1 flex items-center gap-1\">{caption}</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 shrink-0\"\n >\n {linkLabel} <ArrowRight className=\"h-3.5 w-3.5\" />\n </Link>\n </div>\n );\n}\n\nexport function DiscoverCommunitySection() {\n const { activities, isLoading } = useActivities({ limit: FEED_LIMIT });\n const { walletAddress: address } = useMedialaneApp();\n const [lastUpdated, setLastUpdated] = useState(() => new Date().toISOString());\n\n useEffect(() => {\n if (!isLoading) setLastUpdated(new Date().toISOString());\n }, [activities, isLoading]);\n\n return (\n <section className=\"grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start\">\n\n <div className=\"lg:col-span-7 space-y-4 sm:space-y-5\">\n <ColumnHeader\n icon={<Activity className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-brand-purple to-brand-blue shadow-brand-purple/20\"\n title=\"Activities\"\n caption={\n !isLoading && (\n <>\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </>\n )\n }\n href=\"/activities\"\n linkLabel=\"View all\"\n />\n <div>\n {isLoading ? (\n <div className=\"divide-y divide-border/50 rounded-xl border border-border overflow-hidden\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3.5\">\n <Skeleton className=\"h-8 w-8 rounded-lg shrink-0\" />\n <Skeleton className=\"h-9 w-9 rounded-md shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-3.5 w-40\" />\n <Skeleton className=\"h-2.5 w-24\" />\n </div>\n </div>\n ))}\n </div>\n ) : activities.length === 0 ? (\n <div className={cn(\"rounded-xl border border-border py-12 text-center\")}>\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n ) : (\n <div className=\"divide-y divide-border/50 rounded-xl border border-border overflow-hidden\">\n {activities.map((activity, i) => (\n <ActivityRow\n key={activity.txHash ? `${activity.txHash}-${activity.type}-${activity.nftTokenId ?? \"\"}` : `activity-${i}`}\n activity={activity}\n showActor\n showExplorer\n />\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"lg:col-span-5 space-y-4 sm:space-y-5\">\n <ColumnHeader\n icon={<Sparkles className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-brand-rose to-brand-orange\"\n title=\"Rewards\"\n href=\"/rewards\"\n linkLabel=\"Scoreboard\"\n />\n\n <div className=\"overflow-hidden rounded-2xl border border-border/50 bg-card\">\n <div className=\"flex items-center justify-between gap-3 bg-gradient-to-r from-brand-rose/10 to-brand-orange/10 px-4 py-3\">\n <p className=\"text-sm font-semibold leading-snug\">Earn XP. Share the Creator&apos;s Fund.</p>\n <Link\n href=\"/rewards\"\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-semibold text-brand-rose hover:opacity-80 transition-opacity\"\n >\n Start earning <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <LeaderboardPanel myAddress={address} limit={5} showHeading={false} compact />\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/discover-community-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Activity, ArrowRight, RefreshCw, Sparkles } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { SectionHeading } from \"./section-heading.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { ActivityRow } from \"./activity-row.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport { LeaderboardPanel } from \"./rewards/leaderboard-panel.js\";\nimport { useActivities } from \"../utils/use-activities.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nconst FEED_LIMIT = 8;\n\nexport function DiscoverCommunitySection() {\n const { activities, isLoading } = useActivities({ limit: FEED_LIMIT });\n const { walletAddress: address } = useMedialaneApp();\n const [lastUpdated, setLastUpdated] = useState(() => new Date().toISOString());\n\n useEffect(() => {\n if (!isLoading) setLastUpdated(new Date().toISOString());\n }, [activities, isLoading]);\n\n return (\n <section className=\"grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start\">\n\n <div className=\"lg:col-span-7 space-y-4 sm:space-y-5\">\n <SectionHeading\n icon={<Activity className=\"h-4 w-4\" />}\n title=\"Activities\"\n subtitle={\n !isLoading && (\n <>\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </>\n )\n }\n href=\"/activities\"\n linkLabel=\"View all\"\n />\n <div>\n {isLoading ? (\n <div className=\"divide-y divide-border/50 rounded-xl border border-border overflow-hidden\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3.5\">\n <Skeleton className=\"h-8 w-8 rounded-lg shrink-0\" />\n <Skeleton className=\"h-9 w-9 rounded-md shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-3.5 w-40\" />\n <Skeleton className=\"h-2.5 w-24\" />\n </div>\n </div>\n ))}\n </div>\n ) : activities.length === 0 ? (\n <div className={cn(\"rounded-xl border border-border py-12 text-center\")}>\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n ) : (\n <div className=\"divide-y divide-border/50 rounded-xl border border-border overflow-hidden\">\n {activities.map((activity, i) => (\n <ActivityRow\n key={activity.txHash ? `${activity.txHash}-${activity.type}-${activity.nftTokenId ?? \"\"}` : `activity-${i}`}\n activity={activity}\n showActor\n showExplorer\n />\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"lg:col-span-5 space-y-4 sm:space-y-5\">\n <SectionHeading\n icon={<Sparkles className=\"h-4 w-4\" />}\n title=\"Rewards\"\n href=\"/rewards\"\n linkLabel=\"Scoreboard\"\n />\n\n <div className=\"overflow-hidden rounded-2xl border border-border/50 bg-card\">\n <div className=\"flex items-center justify-between gap-3 bg-gradient-to-r from-brand-rose/10 to-brand-orange/10 px-4 py-3\">\n <p className=\"text-sm font-semibold leading-snug\">Earn XP. Share the Creator&apos;s Fund.</p>\n <Link\n href=\"/rewards\"\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-semibold text-brand-rose hover:opacity-80 transition-opacity\"\n >\n Start earning <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <LeaderboardPanel myAddress={address} limit={5} showHeading={false} compact />\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":["Link"]}
@@ -3,6 +3,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useEffect, useState } from "react";
4
4
  import { Activity, ArrowRight, RefreshCw, Sparkles } from "lucide-react";
5
5
  import Link from "./link.js";
6
+ import { SectionHeading } from "./section-heading.js";
6
7
  import { Skeleton } from "./skeleton.js";
7
8
  import { ActivityRow } from "./activity-row.js";
8
9
  import { useMedialaneApp } from "./medialane-app.js";
@@ -12,36 +13,6 @@ import { timeAgo } from "../utils/time.js";
12
13
  import { cn } from "../utils/cn.js";
13
14
  import { emptyMessages } from "../utils/empty-messages.js";
14
15
  const FEED_LIMIT = 8;
15
- function ColumnHeader({
16
- icon,
17
- iconBg,
18
- title,
19
- caption,
20
- href,
21
- linkLabel
22
- }) {
23
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
24
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
25
- /* @__PURE__ */ jsx("div", { className: cn("h-7 w-7 rounded-lg flex items-center justify-center shadow-md shrink-0", iconBg), children: icon }),
26
- /* @__PURE__ */ jsxs("div", { children: [
27
- /* @__PURE__ */ jsx("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
28
- caption && /* @__PURE__ */ jsx("p", { className: "text-2xs text-muted-foreground mt-1 flex items-center gap-1", children: caption })
29
- ] })
30
- ] }),
31
- /* @__PURE__ */ jsxs(
32
- Link,
33
- {
34
- href,
35
- 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 shrink-0",
36
- children: [
37
- linkLabel,
38
- " ",
39
- /* @__PURE__ */ jsx(ArrowRight, { className: "h-3.5 w-3.5" })
40
- ]
41
- }
42
- )
43
- ] });
44
- }
45
16
  function DiscoverCommunitySection() {
46
17
  const { activities, isLoading } = useActivities({ limit: FEED_LIMIT });
47
18
  const { walletAddress: address } = useMedialaneApp();
@@ -52,12 +23,11 @@ function DiscoverCommunitySection() {
52
23
  return /* @__PURE__ */ jsxs("section", { className: "grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start", children: [
53
24
  /* @__PURE__ */ jsxs("div", { className: "lg:col-span-7 space-y-4 sm:space-y-5", children: [
54
25
  /* @__PURE__ */ jsx(
55
- ColumnHeader,
26
+ SectionHeading,
56
27
  {
57
- icon: /* @__PURE__ */ jsx(Activity, { className: "h-3.5 w-3.5 text-white" }),
58
- iconBg: "bg-gradient-to-br from-brand-purple to-brand-blue shadow-brand-purple/20",
28
+ icon: /* @__PURE__ */ jsx(Activity, { className: "h-4 w-4" }),
59
29
  title: "Activities",
60
- caption: !isLoading && /* @__PURE__ */ jsxs(Fragment, { children: [
30
+ subtitle: !isLoading && /* @__PURE__ */ jsxs(Fragment, { children: [
61
31
  /* @__PURE__ */ jsx(RefreshCw, { className: "h-2.5 w-2.5" }),
62
32
  "Updated ",
63
33
  timeAgo(lastUpdated)
@@ -88,10 +58,9 @@ function DiscoverCommunitySection() {
88
58
  ] }),
89
59
  /* @__PURE__ */ jsxs("div", { className: "lg:col-span-5 space-y-4 sm:space-y-5", children: [
90
60
  /* @__PURE__ */ jsx(
91
- ColumnHeader,
61
+ SectionHeading,
92
62
  {
93
- icon: /* @__PURE__ */ jsx(Sparkles, { className: "h-3.5 w-3.5 text-white" }),
94
- iconBg: "bg-gradient-to-br from-brand-rose to-brand-orange",
63
+ icon: /* @__PURE__ */ jsx(Sparkles, { className: "h-4 w-4" }),
95
64
  title: "Rewards",
96
65
  href: "/rewards",
97
66
  linkLabel: "Scoreboard"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/discover-community-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Activity, ArrowRight, RefreshCw, Sparkles } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { ActivityRow } from \"./activity-row.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport { LeaderboardPanel } from \"./rewards/leaderboard-panel.js\";\nimport { useActivities } from \"../utils/use-activities.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nconst FEED_LIMIT = 8;\n\nfunction ColumnHeader({\n icon,\n iconBg,\n title,\n caption,\n href,\n linkLabel,\n}: {\n icon: React.ReactNode;\n iconBg: string;\n title: string;\n caption?: React.ReactNode;\n href: string;\n linkLabel: string;\n}) {\n return (\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2.5\">\n <div className={cn(\"h-7 w-7 rounded-lg flex items-center justify-center shadow-md shrink-0\", iconBg)}>\n {icon}\n </div>\n <div>\n <h2 className=\"text-lg sm:text-xl font-semibold leading-none\">{title}</h2>\n {caption && <p className=\"text-2xs text-muted-foreground mt-1 flex items-center gap-1\">{caption}</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 shrink-0\"\n >\n {linkLabel} <ArrowRight className=\"h-3.5 w-3.5\" />\n </Link>\n </div>\n );\n}\n\nexport function DiscoverCommunitySection() {\n const { activities, isLoading } = useActivities({ limit: FEED_LIMIT });\n const { walletAddress: address } = useMedialaneApp();\n const [lastUpdated, setLastUpdated] = useState(() => new Date().toISOString());\n\n useEffect(() => {\n if (!isLoading) setLastUpdated(new Date().toISOString());\n }, [activities, isLoading]);\n\n return (\n <section className=\"grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start\">\n\n <div className=\"lg:col-span-7 space-y-4 sm:space-y-5\">\n <ColumnHeader\n icon={<Activity className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-brand-purple to-brand-blue shadow-brand-purple/20\"\n title=\"Activities\"\n caption={\n !isLoading && (\n <>\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </>\n )\n }\n href=\"/activities\"\n linkLabel=\"View all\"\n />\n <div>\n {isLoading ? (\n <div className=\"divide-y divide-border/50 rounded-xl border border-border overflow-hidden\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3.5\">\n <Skeleton className=\"h-8 w-8 rounded-lg shrink-0\" />\n <Skeleton className=\"h-9 w-9 rounded-md shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-3.5 w-40\" />\n <Skeleton className=\"h-2.5 w-24\" />\n </div>\n </div>\n ))}\n </div>\n ) : activities.length === 0 ? (\n <div className={cn(\"rounded-xl border border-border py-12 text-center\")}>\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n ) : (\n <div className=\"divide-y divide-border/50 rounded-xl border border-border overflow-hidden\">\n {activities.map((activity, i) => (\n <ActivityRow\n key={activity.txHash ? `${activity.txHash}-${activity.type}-${activity.nftTokenId ?? \"\"}` : `activity-${i}`}\n activity={activity}\n showActor\n showExplorer\n />\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"lg:col-span-5 space-y-4 sm:space-y-5\">\n <ColumnHeader\n icon={<Sparkles className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-brand-rose to-brand-orange\"\n title=\"Rewards\"\n href=\"/rewards\"\n linkLabel=\"Scoreboard\"\n />\n\n <div className=\"overflow-hidden rounded-2xl border border-border/50 bg-card\">\n <div className=\"flex items-center justify-between gap-3 bg-gradient-to-r from-brand-rose/10 to-brand-orange/10 px-4 py-3\">\n <p className=\"text-sm font-semibold leading-snug\">Earn XP. Share the Creator&apos;s Fund.</p>\n <Link\n href=\"/rewards\"\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-semibold text-brand-rose hover:opacity-80 transition-opacity\"\n >\n Start earning <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <LeaderboardPanel myAddress={address} limit={5} showHeading={false} compact />\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";AAkCQ,SAqCM,UArCN,KAGA,YAHA;AAhCR,SAAS,WAAW,gBAAgB;AACpC,SAAS,UAAU,YAAY,WAAW,gBAAgB;AAC1D,OAAO,UAAU;AACjB,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AACxB,SAAS,UAAU;AACnB,SAAS,qBAAqB;AAE9B,MAAM,aAAa;AAEnB,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOG;AACD,SACE,qBAAC,SAAI,WAAU,2CACb;AAAA,yBAAC,SAAI,WAAU,6BACb;AAAA,0BAAC,SAAI,WAAW,GAAG,0EAA0E,MAAM,GAChG,gBACH;AAAA,MACA,qBAAC,SACC;AAAA,4BAAC,QAAG,WAAU,iDAAiD,iBAAM;AAAA,QACpE,WAAW,oBAAC,OAAE,WAAU,+DAA+D,mBAAQ;AAAA,SAClG;AAAA,OACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAU;AAAA,QAET;AAAA;AAAA,UAAU;AAAA,UAAC,oBAAC,cAAW,WAAU,eAAc;AAAA;AAAA;AAAA,IAClD;AAAA,KACF;AAEJ;AAEO,SAAS,2BAA2B;AACzC,QAAM,EAAE,YAAY,UAAU,IAAI,cAAc,EAAE,OAAO,WAAW,CAAC;AACrE,QAAM,EAAE,eAAe,QAAQ,IAAI,gBAAgB;AACnD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,OAAM,oBAAI,KAAK,GAAE,YAAY,CAAC;AAE7E,YAAU,MAAM;AACd,QAAI,CAAC,UAAW,iBAAe,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,EACzD,GAAG,CAAC,YAAY,SAAS,CAAC;AAE1B,SACE,qBAAC,aAAQ,WAAU,+DAEjB;AAAA,yBAAC,SAAI,WAAU,wCACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,oBAAC,YAAS,WAAU,0BAAyB;AAAA,UACnD,QAAO;AAAA,UACP,OAAM;AAAA,UACN,SACE,CAAC,aACC,iCACE;AAAA,gCAAC,aAAU,WAAU,eAAc;AAAA,YAAE;AAAA,YAC5B,QAAQ,WAAW;AAAA,aAC9B;AAAA,UAGJ,MAAK;AAAA,UACL,WAAU;AAAA;AAAA,MACZ;AAAA,MACA,oBAAC,SACE,sBACC,oBAAC,SAAI,WAAU,6EACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACjC,qBAAC,SAAY,WAAU,uCACrB;AAAA,4BAAC,YAAS,WAAU,+BAA8B;AAAA,QAClD,oBAAC,YAAS,WAAU,+BAA8B;AAAA,QAClD,qBAAC,SAAI,WAAU,oBACb;AAAA,8BAAC,YAAS,WAAU,cAAa;AAAA,UACjC,oBAAC,YAAS,WAAU,cAAa;AAAA,WACnC;AAAA,WANQ,CAOV,CACD,GACH,IACE,WAAW,WAAW,IACxB,qBAAC,SAAI,WAAW,GAAG,mDAAmD,GACpE;AAAA,4BAAC,OAAE,WAAU,uBAAuB,wBAAc,SAAS,OAAM;AAAA,QACjE,oBAAC,OAAE,WAAU,iCAAiC,wBAAc,SAAS,aAAY;AAAA,SACnF,IAEA,oBAAC,SAAI,WAAU,6EACZ,qBAAW,IAAI,CAAC,UAAU,MACzB;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA,WAAS;AAAA,UACT,cAAY;AAAA;AAAA,QAHP,SAAS,SAAS,GAAG,SAAS,MAAM,IAAI,SAAS,IAAI,IAAI,SAAS,cAAc,EAAE,KAAK,YAAY,CAAC;AAAA,MAI3G,CACD,GACH,GAEJ;AAAA,OACF;AAAA,IAEA,qBAAC,SAAI,WAAU,wCACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,oBAAC,YAAS,WAAU,0BAAyB;AAAA,UACnD,QAAO;AAAA,UACP,OAAM;AAAA,UACN,MAAK;AAAA,UACL,WAAU;AAAA;AAAA,MACZ;AAAA,MAEA,qBAAC,SAAI,WAAU,+DACb;AAAA,6BAAC,SAAI,WAAU,4GACb;AAAA,8BAAC,OAAE,WAAU,sCAAqC,gDAAuC;AAAA,UACzF;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACX;AAAA;AAAA,gBACe,oBAAC,cAAW,WAAU,WAAU;AAAA;AAAA;AAAA,UAChD;AAAA,WACF;AAAA,QACA,oBAAC,oBAAiB,WAAW,SAAS,OAAO,GAAG,aAAa,OAAO,SAAO,MAAC;AAAA,SAC9E;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/discover-community-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Activity, ArrowRight, RefreshCw, Sparkles } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { SectionHeading } from \"./section-heading.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { ActivityRow } from \"./activity-row.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport { LeaderboardPanel } from \"./rewards/leaderboard-panel.js\";\nimport { useActivities } from \"../utils/use-activities.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nconst FEED_LIMIT = 8;\n\nexport function DiscoverCommunitySection() {\n const { activities, isLoading } = useActivities({ limit: FEED_LIMIT });\n const { walletAddress: address } = useMedialaneApp();\n const [lastUpdated, setLastUpdated] = useState(() => new Date().toISOString());\n\n useEffect(() => {\n if (!isLoading) setLastUpdated(new Date().toISOString());\n }, [activities, isLoading]);\n\n return (\n <section className=\"grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start\">\n\n <div className=\"lg:col-span-7 space-y-4 sm:space-y-5\">\n <SectionHeading\n icon={<Activity className=\"h-4 w-4\" />}\n title=\"Activities\"\n subtitle={\n !isLoading && (\n <>\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </>\n )\n }\n href=\"/activities\"\n linkLabel=\"View all\"\n />\n <div>\n {isLoading ? (\n <div className=\"divide-y divide-border/50 rounded-xl border border-border overflow-hidden\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3.5\">\n <Skeleton className=\"h-8 w-8 rounded-lg shrink-0\" />\n <Skeleton className=\"h-9 w-9 rounded-md shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-3.5 w-40\" />\n <Skeleton className=\"h-2.5 w-24\" />\n </div>\n </div>\n ))}\n </div>\n ) : activities.length === 0 ? (\n <div className={cn(\"rounded-xl border border-border py-12 text-center\")}>\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n ) : (\n <div className=\"divide-y divide-border/50 rounded-xl border border-border overflow-hidden\">\n {activities.map((activity, i) => (\n <ActivityRow\n key={activity.txHash ? `${activity.txHash}-${activity.type}-${activity.nftTokenId ?? \"\"}` : `activity-${i}`}\n activity={activity}\n showActor\n showExplorer\n />\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"lg:col-span-5 space-y-4 sm:space-y-5\">\n <SectionHeading\n icon={<Sparkles className=\"h-4 w-4\" />}\n title=\"Rewards\"\n href=\"/rewards\"\n linkLabel=\"Scoreboard\"\n />\n\n <div className=\"overflow-hidden rounded-2xl border border-border/50 bg-card\">\n <div className=\"flex items-center justify-between gap-3 bg-gradient-to-r from-brand-rose/10 to-brand-orange/10 px-4 py-3\">\n <p className=\"text-sm font-semibold leading-snug\">Earn XP. Share the Creator&apos;s Fund.</p>\n <Link\n href=\"/rewards\"\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-semibold text-brand-rose hover:opacity-80 transition-opacity\"\n >\n Start earning <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <LeaderboardPanel myAddress={address} limit={5} showHeading={false} compact />\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":[]}
@@ -25,43 +25,18 @@ __export(discover_feed_section_exports, {
25
25
  module.exports = __toCommonJS(discover_feed_section_exports);
26
26
  var import_jsx_runtime = require("react/jsx-runtime");
27
27
  var import_lucide_react = require("lucide-react");
28
+ var import_section_heading = require("./section-heading.js");
28
29
  var import_motion_primitives = require("./motion-primitives.js");
29
30
  var import_listing_card = require("./listing-card.js");
30
31
  var import_activity_card = require("./activity-card.js");
31
32
  var import_time = require("../utils/time.js");
32
- var import_cn = require("../utils/cn.js");
33
33
  var import_empty_messages = require("../utils/empty-messages.js");
34
34
  function StripShell({
35
- icon,
36
- iconBg,
37
- title,
38
- subtitle,
39
- href,
40
- linkLabel,
41
- children
35
+ children,
36
+ ...heading
42
37
  }) {
43
38
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "space-y-4", children: [
44
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between", children: [
45
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2.5", children: [
46
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_cn.cn)("h-7 w-7 rounded-lg flex items-center justify-center", iconBg), children: icon }),
47
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
48
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
49
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs text-muted-foreground mt-1", children: subtitle })
50
- ] })
51
- ] }),
52
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
53
- "a",
54
- {
55
- href,
56
- 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",
57
- children: [
58
- linkLabel,
59
- " ",
60
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3.5 w-3.5" })
61
- ]
62
- }
63
- )
64
- ] }),
39
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_section_heading.SectionHeading, { ...heading }),
65
40
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full overflow-x-auto scrollbar-hide", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2", style: { width: "max-content" }, children }) })
66
41
  ] });
67
42
  }
@@ -75,8 +50,7 @@ function DiscoverActivityStrip({
75
50
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_motion_primitives.FadeIn, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
76
51
  StripShell,
77
52
  {
78
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, { className: "h-3.5 w-3.5 text-white" }),
79
- iconBg: "bg-gradient-to-br from-rose-500 to-pink-600 shadow-md shadow-rose-500/20",
53
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, { className: "h-4 w-4" }),
80
54
  title: "Activity",
81
55
  href: marketplaceHref,
82
56
  linkLabel: "View all",
@@ -118,8 +92,7 @@ function DiscoverFeedSection({
118
92
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_motion_primitives.FadeIn, { delay: 0.08, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
119
93
  StripShell,
120
94
  {
121
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-3.5 w-3.5 text-white" }),
122
- iconBg: "bg-gradient-to-br from-indigo-500 to-blue-600 shadow-md shadow-indigo-500/20",
95
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-4 w-4" }),
123
96
  title: "Community",
124
97
  subtitle: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1", children: [
125
98
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.RefreshCw, { className: "h-2.5 w-2.5" }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/discover-feed-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag, Activity, RefreshCw, ArrowRight } from \"lucide-react\";\nimport { FadeIn } from \"./motion-primitives.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ActivityCard, ActivityCardSkeleton } from \"./activity-card.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport type { ApiOrder, ApiActivity } from \"@medialane/sdk\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nexport interface DiscoverFeedSectionProps {\n orders: ApiOrder[];\n isLoading: boolean;\n activities: ApiActivity[];\n activitiesLoading: boolean;\n lastUpdated: string;\n explorerUrl?: string;\n marketplaceHref?: string;\n activitiesHref?: string;\n\n onBuyOrder?: (order: ApiOrder) => void;\n\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nfunction StripShell({\n icon,\n iconBg,\n title,\n subtitle,\n href,\n linkLabel,\n children,\n}: {\n icon: React.ReactNode;\n iconBg: string;\n title: string;\n subtitle?: React.ReactNode;\n href: string;\n linkLabel: string;\n children: React.ReactNode;\n}) {\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={cn(\"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 <a\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 </a>\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\nexport interface DiscoverActivityStripProps {\n orders: ApiOrder[];\n isLoading: boolean;\n marketplaceHref?: string;\n onBuyOrder?: (order: ApiOrder) => void;\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nexport function DiscoverActivityStrip({\n orders,\n isLoading,\n marketplaceHref = \"/marketplace\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverActivityStripProps) {\n return (\n <FadeIn>\n <StripShell\n icon={<Tag className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-rose-500 to-pink-600 shadow-md shadow-rose-500/20\"\n title=\"Activity\"\n href={marketplaceHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 snap-start shrink-0\">\n <ListingCardSkeleton />\n </div>\n ))\n : orders.length === 0\n ? (\n <p className=\"text-sm text-muted-foreground py-4\">No active listings yet.</p>\n )\n : orders.map((order) => {\n const own = isOwnOrder?.(order) ?? false;\n return (\n <div key={order.orderHash} className=\"w-72 snap-start shrink-0\">\n <ListingCard\n order={order}\n onBuy={onBuyOrder && !own ? () => onBuyOrder(order) : undefined}\n />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n );\n}\n\nexport function DiscoverFeedSection({\n orders,\n isLoading,\n activities,\n activitiesLoading,\n lastUpdated,\n marketplaceHref = \"/marketplace\",\n activitiesHref = \"/activities\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverFeedSectionProps) {\n return (\n <div className=\"space-y-14 sm:space-y-20\">\n <DiscoverActivityStrip\n orders={orders}\n isLoading={isLoading}\n marketplaceHref={marketplaceHref}\n onBuyOrder={onBuyOrder}\n isOwnOrder={isOwnOrder}\n />\n\n <FadeIn delay={0.08}>\n <StripShell\n icon={<Activity className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-indigo-500 to-blue-600 shadow-md shadow-indigo-500/20\"\n title=\"Community\"\n subtitle={\n <span className=\"flex items-center gap-1\">\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </span>\n }\n href={activitiesHref}\n linkLabel=\"Activities\"\n >\n {activitiesLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCardSkeleton />\n </div>\n ))\n : activities.length === 0\n ? (\n <div className=\"py-4\">\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n )\n : activities.map((act, i) => {\n const key = act.txHash\n ? `${act.txHash}-${act.type}-${act.nftTokenId ?? \"\"}`\n : `activity-${i}`;\n return (\n <div key={key} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCard activity={act} />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/components/discover-feed-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag, Activity, RefreshCw } from \"lucide-react\";\nimport { SectionHeading, type SectionHeadingProps } from \"./section-heading.js\";\nimport { FadeIn } from \"./motion-primitives.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ActivityCard, ActivityCardSkeleton } from \"./activity-card.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport type { ApiOrder, ApiActivity } from \"@medialane/sdk\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nexport interface DiscoverFeedSectionProps {\n orders: ApiOrder[];\n isLoading: boolean;\n activities: ApiActivity[];\n activitiesLoading: boolean;\n lastUpdated: string;\n explorerUrl?: string;\n marketplaceHref?: string;\n activitiesHref?: string;\n\n onBuyOrder?: (order: ApiOrder) => void;\n\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nfunction StripShell({\n children,\n ...heading\n}: SectionHeadingProps & { children: React.ReactNode }) {\n return (\n <section className=\"space-y-4\">\n <SectionHeading {...heading} />\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\nexport interface DiscoverActivityStripProps {\n orders: ApiOrder[];\n isLoading: boolean;\n marketplaceHref?: string;\n onBuyOrder?: (order: ApiOrder) => void;\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nexport function DiscoverActivityStrip({\n orders,\n isLoading,\n marketplaceHref = \"/marketplace\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverActivityStripProps) {\n return (\n <FadeIn>\n <StripShell\n icon={<Tag className=\"h-4 w-4\" />}\n title=\"Activity\"\n href={marketplaceHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 snap-start shrink-0\">\n <ListingCardSkeleton />\n </div>\n ))\n : orders.length === 0\n ? (\n <p className=\"text-sm text-muted-foreground py-4\">No active listings yet.</p>\n )\n : orders.map((order) => {\n const own = isOwnOrder?.(order) ?? false;\n return (\n <div key={order.orderHash} className=\"w-72 snap-start shrink-0\">\n <ListingCard\n order={order}\n onBuy={onBuyOrder && !own ? () => onBuyOrder(order) : undefined}\n />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n );\n}\n\nexport function DiscoverFeedSection({\n orders,\n isLoading,\n activities,\n activitiesLoading,\n lastUpdated,\n marketplaceHref = \"/marketplace\",\n activitiesHref = \"/activities\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverFeedSectionProps) {\n return (\n <div className=\"space-y-14 sm:space-y-20\">\n <DiscoverActivityStrip\n orders={orders}\n isLoading={isLoading}\n marketplaceHref={marketplaceHref}\n onBuyOrder={onBuyOrder}\n isOwnOrder={isOwnOrder}\n />\n\n <FadeIn delay={0.08}>\n <StripShell\n icon={<Activity className=\"h-4 w-4\" />}\n title=\"Community\"\n subtitle={\n <span className=\"flex items-center gap-1\">\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </span>\n }\n href={activitiesHref}\n linkLabel=\"Activities\"\n >\n {activitiesLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCardSkeleton />\n </div>\n ))\n : activities.length === 0\n ? (\n <div className=\"py-4\">\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n )\n : activities.map((act, i) => {\n const key = act.txHash\n ? `${act.txHash}-${act.type}-${act.nftTokenId ?? \"\"}`\n : `activity-${i}`;\n return (\n <div key={key} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCard activity={act} />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BI;AA7BJ,0BAAyC;AACzC,6BAAyD;AACzD,+BAAuB;AACvB,0BAAiD;AACjD,2BAAmD;AACnD,kBAAwB;AAExB,4BAA8B;AAiB9B,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE,6CAAC,aAAQ,WAAU,aACjB;AAAA,gDAAC,yCAAgB,GAAG,SAAS;AAAA,IAE7B,4CAAC,SAAI,WAAU,yCACb,sDAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;AAUO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AACF,GAA+B;AAC7B,SACE,4CAAC,mCACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,4CAAC,2BAAI,WAAU,WAAU;AAAA,MAC/B,OAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,4CAAC,SAAY,WAAU,4BACrB,sDAAC,2CAAoB,KADb,CAEV,CACD,IACD,OAAO,WAAW,IAEhB,4CAAC,OAAE,WAAU,sCAAqC,qCAAuB,IAE3E,OAAO,IAAI,CAAC,UAAU;AACpB,cAAM,MAAM,aAAa,KAAK,KAAK;AACnC,eACE,4CAAC,SAA0B,WAAU,4BACnC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,OAAO,cAAc,CAAC,MAAM,MAAM,WAAW,KAAK,IAAI;AAAA;AAAA,QACxD,KAJQ,MAAM,SAKhB;AAAA,MAEJ,CAAC;AAAA;AAAA,EACP,GACF;AAEJ;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB;AAAA,EACA;AACF,GAA6B;AAC3B,SACE,6CAAC,SAAI,WAAU,4BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,IAEA,4CAAC,mCAAO,OAAO,MACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,4CAAC,gCAAS,WAAU,WAAU;AAAA,QACpC,OAAM;AAAA,QACN,UACE,6CAAC,UAAK,WAAU,2BACd;AAAA,sDAAC,iCAAU,WAAU,eAAc;AAAA,UAAE;AAAA,cAC5B,qBAAQ,WAAW;AAAA,WAC9B;AAAA,QAEF,MAAM;AAAA,QACN,WAAU;AAAA,QAET,8BACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,4CAAC,SAAY,WAAU,oCACrB,sDAAC,6CAAqB,KADd,CAEV,CACD,IACD,WAAW,WAAW,IAEpB,6CAAC,SAAI,WAAU,QACb;AAAA,sDAAC,OAAE,WAAU,uBAAuB,8CAAc,SAAS,OAAM;AAAA,UACjE,4CAAC,OAAE,WAAU,iCAAiC,8CAAc,SAAS,aAAY;AAAA,WACnF,IAEF,WAAW,IAAI,CAAC,KAAK,MAAM;AACzB,gBAAM,MAAM,IAAI,SACZ,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,cAAc,EAAE,KACjD,YAAY,CAAC;AACjB,iBACE,4CAAC,SAAc,WAAU,oCACvB,sDAAC,qCAAa,UAAU,KAAK,KADrB,GAEV;AAAA,QAEJ,CAAC;AAAA;AAAA,IACP,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -1,43 +1,18 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { Tag, Activity, RefreshCw, ArrowRight } from "lucide-react";
3
+ import { Tag, Activity, RefreshCw } from "lucide-react";
4
+ import { SectionHeading } from "./section-heading.js";
4
5
  import { FadeIn } from "./motion-primitives.js";
5
6
  import { ListingCard, ListingCardSkeleton } from "./listing-card.js";
6
7
  import { ActivityCard, ActivityCardSkeleton } from "./activity-card.js";
7
8
  import { timeAgo } from "../utils/time.js";
8
- import { cn } from "../utils/cn.js";
9
9
  import { emptyMessages } from "../utils/empty-messages.js";
10
10
  function StripShell({
11
- icon,
12
- iconBg,
13
- title,
14
- subtitle,
15
- href,
16
- linkLabel,
17
- children
11
+ children,
12
+ ...heading
18
13
  }) {
19
14
  return /* @__PURE__ */ jsxs("section", { className: "space-y-4", children: [
20
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
21
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
22
- /* @__PURE__ */ jsx("div", { className: cn("h-7 w-7 rounded-lg flex items-center justify-center", iconBg), children: icon }),
23
- /* @__PURE__ */ jsxs("div", { children: [
24
- /* @__PURE__ */ jsx("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
25
- subtitle && /* @__PURE__ */ jsx("p", { className: "text-2xs text-muted-foreground mt-1", children: subtitle })
26
- ] })
27
- ] }),
28
- /* @__PURE__ */ jsxs(
29
- "a",
30
- {
31
- href,
32
- 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",
33
- children: [
34
- linkLabel,
35
- " ",
36
- /* @__PURE__ */ jsx(ArrowRight, { className: "h-3.5 w-3.5" })
37
- ]
38
- }
39
- )
40
- ] }),
15
+ /* @__PURE__ */ jsx(SectionHeading, { ...heading }),
41
16
  /* @__PURE__ */ jsx("div", { className: "w-full overflow-x-auto scrollbar-hide", children: /* @__PURE__ */ jsx("div", { className: "flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2", style: { width: "max-content" }, children }) })
42
17
  ] });
43
18
  }
@@ -51,8 +26,7 @@ function DiscoverActivityStrip({
51
26
  return /* @__PURE__ */ jsx(FadeIn, { children: /* @__PURE__ */ jsx(
52
27
  StripShell,
53
28
  {
54
- icon: /* @__PURE__ */ jsx(Tag, { className: "h-3.5 w-3.5 text-white" }),
55
- iconBg: "bg-gradient-to-br from-rose-500 to-pink-600 shadow-md shadow-rose-500/20",
29
+ icon: /* @__PURE__ */ jsx(Tag, { className: "h-4 w-4" }),
56
30
  title: "Activity",
57
31
  href: marketplaceHref,
58
32
  linkLabel: "View all",
@@ -94,8 +68,7 @@ function DiscoverFeedSection({
94
68
  /* @__PURE__ */ jsx(FadeIn, { delay: 0.08, children: /* @__PURE__ */ jsx(
95
69
  StripShell,
96
70
  {
97
- icon: /* @__PURE__ */ jsx(Activity, { className: "h-3.5 w-3.5 text-white" }),
98
- iconBg: "bg-gradient-to-br from-indigo-500 to-blue-600 shadow-md shadow-indigo-500/20",
71
+ icon: /* @__PURE__ */ jsx(Activity, { className: "h-4 w-4" }),
99
72
  title: "Community",
100
73
  subtitle: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
101
74
  /* @__PURE__ */ jsx(RefreshCw, { className: "h-2.5 w-2.5" }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/discover-feed-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag, Activity, RefreshCw, ArrowRight } from \"lucide-react\";\nimport { FadeIn } from \"./motion-primitives.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ActivityCard, ActivityCardSkeleton } from \"./activity-card.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport type { ApiOrder, ApiActivity } from \"@medialane/sdk\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nexport interface DiscoverFeedSectionProps {\n orders: ApiOrder[];\n isLoading: boolean;\n activities: ApiActivity[];\n activitiesLoading: boolean;\n lastUpdated: string;\n explorerUrl?: string;\n marketplaceHref?: string;\n activitiesHref?: string;\n\n onBuyOrder?: (order: ApiOrder) => void;\n\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nfunction StripShell({\n icon,\n iconBg,\n title,\n subtitle,\n href,\n linkLabel,\n children,\n}: {\n icon: React.ReactNode;\n iconBg: string;\n title: string;\n subtitle?: React.ReactNode;\n href: string;\n linkLabel: string;\n children: React.ReactNode;\n}) {\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={cn(\"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 <a\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 </a>\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\nexport interface DiscoverActivityStripProps {\n orders: ApiOrder[];\n isLoading: boolean;\n marketplaceHref?: string;\n onBuyOrder?: (order: ApiOrder) => void;\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nexport function DiscoverActivityStrip({\n orders,\n isLoading,\n marketplaceHref = \"/marketplace\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverActivityStripProps) {\n return (\n <FadeIn>\n <StripShell\n icon={<Tag className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-rose-500 to-pink-600 shadow-md shadow-rose-500/20\"\n title=\"Activity\"\n href={marketplaceHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 snap-start shrink-0\">\n <ListingCardSkeleton />\n </div>\n ))\n : orders.length === 0\n ? (\n <p className=\"text-sm text-muted-foreground py-4\">No active listings yet.</p>\n )\n : orders.map((order) => {\n const own = isOwnOrder?.(order) ?? false;\n return (\n <div key={order.orderHash} className=\"w-72 snap-start shrink-0\">\n <ListingCard\n order={order}\n onBuy={onBuyOrder && !own ? () => onBuyOrder(order) : undefined}\n />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n );\n}\n\nexport function DiscoverFeedSection({\n orders,\n isLoading,\n activities,\n activitiesLoading,\n lastUpdated,\n marketplaceHref = \"/marketplace\",\n activitiesHref = \"/activities\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverFeedSectionProps) {\n return (\n <div className=\"space-y-14 sm:space-y-20\">\n <DiscoverActivityStrip\n orders={orders}\n isLoading={isLoading}\n marketplaceHref={marketplaceHref}\n onBuyOrder={onBuyOrder}\n isOwnOrder={isOwnOrder}\n />\n\n <FadeIn delay={0.08}>\n <StripShell\n icon={<Activity className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-indigo-500 to-blue-600 shadow-md shadow-indigo-500/20\"\n title=\"Community\"\n subtitle={\n <span className=\"flex items-center gap-1\">\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </span>\n }\n href={activitiesHref}\n linkLabel=\"Activities\"\n >\n {activitiesLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCardSkeleton />\n </div>\n ))\n : activities.length === 0\n ? (\n <div className=\"py-4\">\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n )\n : activities.map((act, i) => {\n const key = act.txHash\n ? `${act.txHash}-${act.type}-${act.nftTokenId ?? \"\"}`\n : `activity-${i}`;\n return (\n <div key={key} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCard activity={act} />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/components/discover-feed-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag, Activity, RefreshCw } from \"lucide-react\";\nimport { SectionHeading, type SectionHeadingProps } from \"./section-heading.js\";\nimport { FadeIn } from \"./motion-primitives.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ActivityCard, ActivityCardSkeleton } from \"./activity-card.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport type { ApiOrder, ApiActivity } from \"@medialane/sdk\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nexport interface DiscoverFeedSectionProps {\n orders: ApiOrder[];\n isLoading: boolean;\n activities: ApiActivity[];\n activitiesLoading: boolean;\n lastUpdated: string;\n explorerUrl?: string;\n marketplaceHref?: string;\n activitiesHref?: string;\n\n onBuyOrder?: (order: ApiOrder) => void;\n\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nfunction StripShell({\n children,\n ...heading\n}: SectionHeadingProps & { children: React.ReactNode }) {\n return (\n <section className=\"space-y-4\">\n <SectionHeading {...heading} />\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\nexport interface DiscoverActivityStripProps {\n orders: ApiOrder[];\n isLoading: boolean;\n marketplaceHref?: string;\n onBuyOrder?: (order: ApiOrder) => void;\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nexport function DiscoverActivityStrip({\n orders,\n isLoading,\n marketplaceHref = \"/marketplace\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverActivityStripProps) {\n return (\n <FadeIn>\n <StripShell\n icon={<Tag className=\"h-4 w-4\" />}\n title=\"Activity\"\n href={marketplaceHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 snap-start shrink-0\">\n <ListingCardSkeleton />\n </div>\n ))\n : orders.length === 0\n ? (\n <p className=\"text-sm text-muted-foreground py-4\">No active listings yet.</p>\n )\n : orders.map((order) => {\n const own = isOwnOrder?.(order) ?? false;\n return (\n <div key={order.orderHash} className=\"w-72 snap-start shrink-0\">\n <ListingCard\n order={order}\n onBuy={onBuyOrder && !own ? () => onBuyOrder(order) : undefined}\n />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n );\n}\n\nexport function DiscoverFeedSection({\n orders,\n isLoading,\n activities,\n activitiesLoading,\n lastUpdated,\n marketplaceHref = \"/marketplace\",\n activitiesHref = \"/activities\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverFeedSectionProps) {\n return (\n <div className=\"space-y-14 sm:space-y-20\">\n <DiscoverActivityStrip\n orders={orders}\n isLoading={isLoading}\n marketplaceHref={marketplaceHref}\n onBuyOrder={onBuyOrder}\n isOwnOrder={isOwnOrder}\n />\n\n <FadeIn delay={0.08}>\n <StripShell\n icon={<Activity className=\"h-4 w-4\" />}\n title=\"Community\"\n subtitle={\n <span className=\"flex items-center gap-1\">\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </span>\n }\n href={activitiesHref}\n linkLabel=\"Activities\"\n >\n {activitiesLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCardSkeleton />\n </div>\n ))\n : activities.length === 0\n ? (\n <div className=\"py-4\">\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n )\n : activities.map((act, i) => {\n const key = act.txHash\n ? `${act.txHash}-${act.type}-${act.nftTokenId ?? \"\"}`\n : `activity-${i}`;\n return (\n <div key={key} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCard activity={act} />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n </div>\n );\n}\n"],"mappings":";AA+BI,SACE,KADF;AA7BJ,SAAS,KAAK,UAAU,iBAAiB;AACzC,SAAS,sBAAgD;AACzD,SAAS,cAAc;AACvB,SAAS,aAAa,2BAA2B;AACjD,SAAS,cAAc,4BAA4B;AACnD,SAAS,eAAe;AAExB,SAAS,qBAAqB;AAiB9B,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE,qBAAC,aAAQ,WAAU,aACjB;AAAA,wBAAC,kBAAgB,GAAG,SAAS;AAAA,IAE7B,oBAAC,SAAI,WAAU,yCACb,8BAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;AAUO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AACF,GAA+B;AAC7B,SACE,oBAAC,UACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,oBAAC,OAAI,WAAU,WAAU;AAAA,MAC/B,OAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,4BACrB,8BAAC,uBAAoB,KADb,CAEV,CACD,IACD,OAAO,WAAW,IAEhB,oBAAC,OAAE,WAAU,sCAAqC,qCAAuB,IAE3E,OAAO,IAAI,CAAC,UAAU;AACpB,cAAM,MAAM,aAAa,KAAK,KAAK;AACnC,eACE,oBAAC,SAA0B,WAAU,4BACnC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,OAAO,cAAc,CAAC,MAAM,MAAM,WAAW,KAAK,IAAI;AAAA;AAAA,QACxD,KAJQ,MAAM,SAKhB;AAAA,MAEJ,CAAC;AAAA;AAAA,EACP,GACF;AAEJ;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB;AAAA,EACA;AACF,GAA6B;AAC3B,SACE,qBAAC,SAAI,WAAU,4BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,UAAO,OAAO,MACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,oBAAC,YAAS,WAAU,WAAU;AAAA,QACpC,OAAM;AAAA,QACN,UACE,qBAAC,UAAK,WAAU,2BACd;AAAA,8BAAC,aAAU,WAAU,eAAc;AAAA,UAAE;AAAA,UAC5B,QAAQ,WAAW;AAAA,WAC9B;AAAA,QAEF,MAAM;AAAA,QACN,WAAU;AAAA,QAET,8BACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,oCACrB,8BAAC,wBAAqB,KADd,CAEV,CACD,IACD,WAAW,WAAW,IAEpB,qBAAC,SAAI,WAAU,QACb;AAAA,8BAAC,OAAE,WAAU,uBAAuB,wBAAc,SAAS,OAAM;AAAA,UACjE,oBAAC,OAAE,WAAU,iCAAiC,wBAAc,SAAS,aAAY;AAAA,WACnF,IAEF,WAAW,IAAI,CAAC,KAAK,MAAM;AACzB,gBAAM,MAAM,IAAI,SACZ,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,cAAc,EAAE,KACjD,YAAY,CAAC;AACjB,iBACE,oBAAC,SAAc,WAAU,oCACvB,8BAAC,gBAAa,UAAU,KAAK,KADrB,GAEV;AAAA,QAEJ,CAAC;AAAA;AAAA,IACP,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -67,8 +67,7 @@ function NewListings({ market }) {
67
67
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
68
68
  import_scroll_section.ScrollSection,
69
69
  {
70
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, { className: "h-3.5 w-3.5 text-white" }),
71
- iconBg: "bg-gradient-to-br from-brand-rose to-brand-rose shadow-md shadow-brand-rose/20",
70
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, { className: "h-4 w-4" }),
72
71
  title: "New listings",
73
72
  href: "/marketplace",
74
73
  linkLabel: "Marketplace",
@@ -92,8 +91,7 @@ function CollectionsStrip() {
92
91
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
93
92
  import_scroll_section.ScrollSection,
94
93
  {
95
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.TrendingUp, { className: "h-3.5 w-3.5 text-white" }),
96
- iconBg: "bg-gradient-to-br from-brand-purple to-brand-maeve shadow-md shadow-brand-purple/20",
94
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.TrendingUp, { className: "h-4 w-4" }),
97
95
  title: "Collections",
98
96
  href: "/collections",
99
97
  linkLabel: "See all",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref, type ApiCollection } from \"@medialane/sdk\";\nimport { Tag, TrendingUp } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { PageContainer } from \"./page-container.js\";\nimport { HeroSlider } from \"./hero-slider.js\";\nimport { ActivityTicker } from \"./activity-ticker.js\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ListingCardMenu } from \"./listing-card-menu.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport { RewardsSection } from \"./rewards-section.js\";\nimport { LaunchpadStrip } from \"./launchpad-strip.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport type { CollectionMarketActions } from \"./collection-page.js\";\nimport { useOrders } from \"../utils/use-orders.js\";\nimport { useCollections } from \"../utils/use-collections.js\";\nimport { useUsdPrices } from \"../utils/use-usd-prices.js\";\nimport { orderUsd } from \"../utils/order-usd.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nconst LAUNCHPAD_HREFS = {\n nfts: \"/launchpad/single-editions\",\n \"limited-editions\": \"/launchpad/nfteditions\",\n \"collection-drop\": \"/launchpad/drop\",\n \"pop-protocol\": \"/launchpad/pop\",\n \"ip-tickets\": \"/launchpad/tickets\",\n \"creator-coins\": \"/launchpad/coin/create\",\n};\n\nfunction NewListings({ market }: { market: CollectionMarketActions }) {\n const { walletAddress } = useMedialaneApp();\n const { orders, isLoading } = useOrders({ status: \"ACTIVE\", limit: 10, page: 1 });\n const prices = useUsdPrices();\n const listings = orders.filter((o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\").slice(0, 10);\n return (\n <ScrollSection\n icon={<Tag className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-brand-rose to-brand-rose shadow-md shadow-brand-rose/20\"\n title=\"New listings\"\n href=\"/marketplace\"\n linkLabel=\"Marketplace\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 shrink-0 snap-start\"><ListingCardSkeleton /></div>\n ))\n : listings.length === 0\n ? (\n <p className=\"py-4 text-sm text-muted-foreground\">\n <Link href=\"/launchpad/single-editions\" className=\"text-primary hover:underline\">Sell the first asset</Link>\n </p>\n )\n : listings.map((order) => {\n const own = !!walletAddress && isSameAddress(order.offerer, walletAddress);\n return (\n <div key={order.orderHash} className=\"w-72 shrink-0 snap-start\">\n <ListingCard\n order={order}\n onBuy={own ? undefined : () => market.buy(order)}\n overflowMenu={<ListingCardMenu order={order} />}\n usdValue={orderUsd(order.price, prices)}\n />\n </div>\n );\n })}\n </ScrollSection>\n );\n}\n\nfunction CollectionsStrip() {\n const { collections, isLoading } = useCollections(1, 10, undefined, \"recent\");\n return (\n <ScrollSection\n icon={<TrendingUp className=\"h-3.5 w-3.5 text-white\" />}\n iconBg=\"bg-gradient-to-br from-brand-purple to-brand-maeve shadow-md shadow-brand-purple/20\"\n title=\"Collections\"\n href=\"/collections\"\n linkLabel=\"See all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 shrink-0 snap-start sm:w-64\"><CollectionCardSkeleton /></div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-64 shrink-0 snap-start\"><CollectionCard collection={col} /></div>\n ))}\n </ScrollSection>\n );\n}\n\nexport interface HomePageProps {\n useMarketActions: () => CollectionMarketActions;\n initialFeatured?: ApiCollection[];\n}\n\nexport function HomePage({ useMarketActions, initialFeatured }: HomePageProps) {\n const market = useMarketActions();\n const { collections: featured, isLoading: featuredLoading } = useCollections(1, 3, true, \"recent\", true, undefined, undefined, initialFeatured);\n const { orders: tickerOrders } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 14 });\n return (\n <div className=\"pb-20\">\n <HeroSlider collections={featured} isLoading={featuredLoading} getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)} />\n <PageContainer className=\"box-border max-w-full pt-6 pb-0\">\n <ActivityTicker orders={tickerOrders} minItems={3} getHref={(o) => assetHref(\"STARKNET\", o.nftContract, o.nftTokenId)} />\n </PageContainer>\n <PageContainer className=\"mt-16 box-border max-w-full space-y-10 pt-0 pb-0 sm:space-y-16 lg:space-y-20\">\n <NewListings market={market} />\n <CollectionsStrip />\n <RewardsSection rewardsHref=\"/rewards\" />\n <LaunchpadStrip hrefs={LAUNCHPAD_HREFS} marketplaceHref=\"/marketplace\" launchpadHref=\"/launchpad\" />\n </PageContainer>\n {market.dialogs}\n </div>\n );\n}\n"],"mappings":"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","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref, type ApiCollection } from \"@medialane/sdk\";\nimport { Tag, TrendingUp } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { PageContainer } from \"./page-container.js\";\nimport { HeroSlider } from \"./hero-slider.js\";\nimport { ActivityTicker } from \"./activity-ticker.js\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ListingCardMenu } from \"./listing-card-menu.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport { RewardsSection } from \"./rewards-section.js\";\nimport { LaunchpadStrip } from \"./launchpad-strip.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport type { CollectionMarketActions } from \"./collection-page.js\";\nimport { useOrders } from \"../utils/use-orders.js\";\nimport { useCollections } from \"../utils/use-collections.js\";\nimport { useUsdPrices } from \"../utils/use-usd-prices.js\";\nimport { orderUsd } from \"../utils/order-usd.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nconst LAUNCHPAD_HREFS = {\n nfts: \"/launchpad/single-editions\",\n \"limited-editions\": \"/launchpad/nfteditions\",\n \"collection-drop\": \"/launchpad/drop\",\n \"pop-protocol\": \"/launchpad/pop\",\n \"ip-tickets\": \"/launchpad/tickets\",\n \"creator-coins\": \"/launchpad/coin/create\",\n};\n\nfunction NewListings({ market }: { market: CollectionMarketActions }) {\n const { walletAddress } = useMedialaneApp();\n const { orders, isLoading } = useOrders({ status: \"ACTIVE\", limit: 10, page: 1 });\n const prices = useUsdPrices();\n const listings = orders.filter((o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\").slice(0, 10);\n return (\n <ScrollSection\n icon={<Tag className=\"h-4 w-4\" />}\n title=\"New listings\"\n href=\"/marketplace\"\n linkLabel=\"Marketplace\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 shrink-0 snap-start\"><ListingCardSkeleton /></div>\n ))\n : listings.length === 0\n ? (\n <p className=\"py-4 text-sm text-muted-foreground\">\n <Link href=\"/launchpad/single-editions\" className=\"text-primary hover:underline\">Sell the first asset</Link>\n </p>\n )\n : listings.map((order) => {\n const own = !!walletAddress && isSameAddress(order.offerer, walletAddress);\n return (\n <div key={order.orderHash} className=\"w-72 shrink-0 snap-start\">\n <ListingCard\n order={order}\n onBuy={own ? undefined : () => market.buy(order)}\n overflowMenu={<ListingCardMenu order={order} />}\n usdValue={orderUsd(order.price, prices)}\n />\n </div>\n );\n })}\n </ScrollSection>\n );\n}\n\nfunction CollectionsStrip() {\n const { collections, isLoading } = useCollections(1, 10, undefined, \"recent\");\n return (\n <ScrollSection\n icon={<TrendingUp className=\"h-4 w-4\" />}\n title=\"Collections\"\n href=\"/collections\"\n linkLabel=\"See all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 shrink-0 snap-start sm:w-64\"><CollectionCardSkeleton /></div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-64 shrink-0 snap-start\"><CollectionCard collection={col} /></div>\n ))}\n </ScrollSection>\n );\n}\n\nexport interface HomePageProps {\n useMarketActions: () => CollectionMarketActions;\n initialFeatured?: ApiCollection[];\n}\n\nexport function HomePage({ useMarketActions, initialFeatured }: HomePageProps) {\n const market = useMarketActions();\n const { collections: featured, isLoading: featuredLoading } = useCollections(1, 3, true, \"recent\", true, undefined, undefined, initialFeatured);\n const { orders: tickerOrders } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 14 });\n return (\n <div className=\"pb-20\">\n <HeroSlider collections={featured} isLoading={featuredLoading} getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)} />\n <PageContainer className=\"box-border max-w-full pt-6 pb-0\">\n <ActivityTicker orders={tickerOrders} minItems={3} getHref={(o) => assetHref(\"STARKNET\", o.nftContract, o.nftTokenId)} />\n </PageContainer>\n <PageContainer className=\"mt-16 box-border max-w-full space-y-10 pt-0 pb-0 sm:space-y-16 lg:space-y-20\">\n <NewListings market={market} />\n <CollectionsStrip />\n <RewardsSection rewardsHref=\"/rewards\" />\n <LaunchpadStrip hrefs={LAUNCHPAD_HREFS} marketplaceHref=\"/marketplace\" launchpadHref=\"/launchpad\" />\n </PageContainer>\n {market.dialogs}\n </div>\n );\n}\n"],"mappings":"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","names":["Link"]}
@@ -34,8 +34,7 @@ function NewListings({ market }) {
34
34
  return /* @__PURE__ */ jsx(
35
35
  ScrollSection,
36
36
  {
37
- icon: /* @__PURE__ */ jsx(Tag, { className: "h-3.5 w-3.5 text-white" }),
38
- iconBg: "bg-gradient-to-br from-brand-rose to-brand-rose shadow-md shadow-brand-rose/20",
37
+ icon: /* @__PURE__ */ jsx(Tag, { className: "h-4 w-4" }),
39
38
  title: "New listings",
40
39
  href: "/marketplace",
41
40
  linkLabel: "Marketplace",
@@ -59,8 +58,7 @@ function CollectionsStrip() {
59
58
  return /* @__PURE__ */ jsx(
60
59
  ScrollSection,
61
60
  {
62
- icon: /* @__PURE__ */ jsx(TrendingUp, { className: "h-3.5 w-3.5 text-white" }),
63
- iconBg: "bg-gradient-to-br from-brand-purple to-brand-maeve shadow-md shadow-brand-purple/20",
61
+ icon: /* @__PURE__ */ jsx(TrendingUp, { className: "h-4 w-4" }),
64
62
  title: "Collections",
65
63
  href: "/collections",
66
64
  linkLabel: "See all",