@medialane/ui 0.330.0 → 0.332.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 (39) hide show
  1. package/dist/components/discover-community-section.cjs +79 -67
  2. package/dist/components/discover-community-section.cjs.map +1 -1
  3. package/dist/components/discover-community-section.js +79 -67
  4. package/dist/components/discover-community-section.js.map +1 -1
  5. package/dist/components/discover-features.cjs +73 -0
  6. package/dist/components/discover-features.cjs.map +1 -0
  7. package/dist/components/discover-features.d.cts +5 -0
  8. package/dist/components/discover-features.d.ts +5 -0
  9. package/dist/components/discover-features.js +64 -0
  10. package/dist/components/discover-features.js.map +1 -0
  11. package/dist/components/discover-page.cjs +2 -2
  12. package/dist/components/discover-page.cjs.map +1 -1
  13. package/dist/components/discover-page.js +2 -2
  14. package/dist/components/discover-page.js.map +1 -1
  15. package/dist/components/rewards/leaderboard-panel.cjs +2 -2
  16. package/dist/components/rewards/leaderboard-panel.cjs.map +1 -1
  17. package/dist/components/rewards/leaderboard-panel.js +2 -2
  18. package/dist/components/rewards/leaderboard-panel.js.map +1 -1
  19. package/dist/components/rewards/leaderboard-table.cjs +1 -1
  20. package/dist/components/rewards/leaderboard-table.cjs.map +1 -1
  21. package/dist/components/rewards/leaderboard-table.js +1 -1
  22. package/dist/components/rewards/leaderboard-table.js.map +1 -1
  23. package/dist/components/scroll-section.cjs.map +1 -1
  24. package/dist/components/scroll-section.d.cts +1 -1
  25. package/dist/components/scroll-section.d.ts +1 -1
  26. package/dist/components/scroll-section.js.map +1 -1
  27. package/dist/components/section-heading.cjs +1 -1
  28. package/dist/components/section-heading.cjs.map +1 -1
  29. package/dist/components/section-heading.d.cts +1 -1
  30. package/dist/components/section-heading.d.ts +1 -1
  31. package/dist/components/section-heading.js +1 -1
  32. package/dist/components/section-heading.js.map +1 -1
  33. package/package.json +1 -1
  34. package/dist/components/discover-principles.cjs +0 -51
  35. package/dist/components/discover-principles.cjs.map +0 -1
  36. package/dist/components/discover-principles.d.cts +0 -5
  37. package/dist/components/discover-principles.d.ts +0 -5
  38. package/dist/components/discover-principles.js +0 -38
  39. package/dist/components/discover-principles.js.map +0 -1
@@ -36,87 +36,99 @@ 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");
40
39
  var import_skeleton = require("./skeleton.js");
41
40
  var import_activity_row = require("./activity-row.js");
42
41
  var import_medialane_app = require("./medialane-app.js");
43
42
  var import_leaderboard_panel = require("./rewards/leaderboard-panel.js");
44
43
  var import_use_activities = require("../utils/use-activities.js");
45
44
  var import_time = require("../utils/time.js");
46
- var import_cn = require("../utils/cn.js");
47
45
  var import_empty_messages = require("../utils/empty-messages.js");
48
- const FEED_LIMIT = 8;
46
+ const ROWS = 5;
47
+ function CommunityCard({
48
+ icon,
49
+ title,
50
+ subtitle,
51
+ href,
52
+ linkLabel,
53
+ children
54
+ }) {
55
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "overflow-hidden rounded-2xl border border-border/50 bg-card", children: [
56
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3 border-b border-border/50 px-4 py-3", children: [
57
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex min-w-0 items-center gap-2", children: [
58
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4", children: icon }),
59
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
60
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-sm font-semibold leading-none tracking-tight text-foreground", children: title }),
61
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "mt-1 flex h-3.5 items-center gap-1 text-2xs text-muted-foreground", children: subtitle })
62
+ ] })
63
+ ] }),
64
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
65
+ import_link.default,
66
+ {
67
+ href,
68
+ className: "inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground",
69
+ children: [
70
+ linkLabel,
71
+ " ",
72
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3 w-3" })
73
+ ]
74
+ }
75
+ )
76
+ ] }),
77
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "min-h-[324px]", children })
78
+ ] });
79
+ }
49
80
  function DiscoverCommunitySection() {
50
- const { activities, isLoading } = (0, import_use_activities.useActivities)({ limit: FEED_LIMIT });
81
+ const { activities, isLoading } = (0, import_use_activities.useActivities)({ limit: ROWS });
51
82
  const { walletAddress: address } = (0, import_medialane_app.useMedialaneApp)();
52
83
  const [lastUpdated, setLastUpdated] = (0, import_react.useState)(() => (/* @__PURE__ */ new Date()).toISOString());
53
84
  (0, import_react.useEffect)(() => {
54
85
  if (!isLoading) setLastUpdated((/* @__PURE__ */ new Date()).toISOString());
55
86
  }, [activities, isLoading]);
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: [
57
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "lg:col-span-7 space-y-4 sm:space-y-5", children: [
58
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
59
- import_section_heading.SectionHeading,
60
- {
61
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-4 w-4" }),
62
- title: "Activities",
63
- subtitle: !isLoading && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
64
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.RefreshCw, { className: "h-2.5 w-2.5" }),
65
- "Updated ",
66
- (0, import_time.timeAgo)(lastUpdated)
67
- ] }),
68
- href: "/activities",
69
- linkLabel: "View all"
70
- }
71
- ),
72
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "divide-y divide-border/50 rounded-xl border border-border overflow-hidden", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-3 px-4 py-3.5", children: [
73
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-8 w-8 rounded-lg shrink-0" }),
74
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-9 w-9 rounded-md shrink-0" }),
75
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex-1 space-y-2", children: [
76
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-3.5 w-40" }),
77
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-2.5 w-24" })
78
- ] })
79
- ] }, i)) }) : activities.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: (0, import_cn.cn)("rounded-xl border border-border py-12 text-center"), children: [
80
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium", children: import_empty_messages.emptyMessages.activity.title }),
81
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm text-muted-foreground", children: import_empty_messages.emptyMessages.activity.description })
82
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "divide-y divide-border/50 rounded-xl border border-border overflow-hidden", children: activities.map((activity, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
83
- import_activity_row.ActivityRow,
84
- {
85
- activity,
86
- showActor: true,
87
- showExplorer: true
88
- },
89
- activity.txHash ? `${activity.txHash}-${activity.type}-${activity.nftTokenId ?? ""}` : `activity-${i}`
90
- )) }) })
91
- ] }),
92
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "lg:col-span-5 space-y-4 sm:space-y-5", children: [
93
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
94
- import_section_heading.SectionHeading,
95
- {
96
- icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, { className: "h-4 w-4" }),
97
- title: "Rewards",
98
- href: "/rewards",
99
- linkLabel: "Scoreboard"
100
- }
101
- ),
102
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "overflow-hidden rounded-2xl border border-border/50 bg-card", children: [
103
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("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", children: [
104
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-semibold leading-snug", children: "Earn XP. Share the Creator's Fund." }),
105
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
106
- import_link.default,
107
- {
108
- href: "/rewards",
109
- className: "inline-flex shrink-0 items-center gap-1 text-xs font-semibold text-brand-rose hover:opacity-80 transition-opacity",
110
- children: [
111
- "Start earning ",
112
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3 w-3" })
113
- ]
114
- }
115
- )
87
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "grid grid-cols-1 gap-6 lg:grid-cols-2 lg:gap-8", children: [
88
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
89
+ CommunityCard,
90
+ {
91
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, {}),
92
+ title: "Activities",
93
+ subtitle: !isLoading && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
94
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.RefreshCw, { className: "h-2.5 w-2.5" }),
95
+ "Updated ",
96
+ (0, import_time.timeAgo)(lastUpdated)
116
97
  ] }),
117
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_leaderboard_panel.LeaderboardPanel, { myAddress: address, limit: 5, showHeading: false, compact: true })
118
- ] })
119
- ] })
98
+ href: "/activities",
99
+ linkLabel: "View all",
100
+ children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "divide-y divide-border/50", children: Array.from({ length: ROWS }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex h-16 items-center gap-3 px-4", children: [
101
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-8 w-8 shrink-0 rounded-lg" }),
102
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-9 w-9 shrink-0 rounded-md" }),
103
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex-1 space-y-2", children: [
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-3.5 w-40" }),
105
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: "h-2.5 w-24" })
106
+ ] })
107
+ ] }, i)) }) : activities.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "py-12 text-center", children: [
108
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium", children: import_empty_messages.emptyMessages.activity.title }),
109
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm text-muted-foreground", children: import_empty_messages.emptyMessages.activity.description })
110
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "divide-y divide-border/50", children: activities.map((activity, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
111
+ import_activity_row.ActivityRow,
112
+ {
113
+ activity,
114
+ showActor: true,
115
+ showExplorer: true
116
+ },
117
+ activity.txHash ? `${activity.txHash}-${activity.type}-${activity.nftTokenId ?? ""}` : `activity-${i}`
118
+ )) })
119
+ }
120
+ ),
121
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
122
+ CommunityCard,
123
+ {
124
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, {}),
125
+ title: "Rewards",
126
+ subtitle: "Earn XP. Share the Creator's Fund.",
127
+ href: "/rewards",
128
+ linkLabel: "Scoreboard",
129
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_leaderboard_panel.LeaderboardPanel, { myAddress: address, limit: ROWS, showHeading: false, compact: true })
130
+ }
131
+ )
120
132
  ] });
121
133
  }
122
134
  // Annotate the CommonJS export names for ESM import in node:
@@ -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 { 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"]}
1
+ {"version":3,"sources":["../../src/components/discover-community-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type ReactNode } 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 { emptyMessages } from \"../utils/empty-messages.js\";\n\nconst ROWS = 5;\n\nfunction CommunityCard({\n icon,\n title,\n subtitle,\n href,\n linkLabel,\n children,\n}: {\n icon: ReactNode;\n title: string;\n subtitle?: ReactNode;\n href: string;\n linkLabel: string;\n children: ReactNode;\n}) {\n return (\n <section className=\"overflow-hidden rounded-2xl border border-border/50 bg-card\">\n <div className=\"flex items-center justify-between gap-3 border-b border-border/50 px-4 py-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">{icon}</span>\n <div className=\"min-w-0\">\n <h2 className=\"text-sm font-semibold leading-none tracking-tight text-foreground\">{title}</h2>\n <p className=\"mt-1 flex h-3.5 items-center gap-1 text-2xs text-muted-foreground\">{subtitle}</p>\n </div>\n </div>\n <Link\n href={href}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground\"\n >\n {linkLabel} <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <div className=\"min-h-[324px]\">{children}</div>\n </section>\n );\n}\n\nexport function DiscoverCommunitySection() {\n const { activities, isLoading } = useActivities({ limit: ROWS });\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 gap-6 lg:grid-cols-2 lg:gap-8\">\n <CommunityCard\n icon={<Activity />}\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 {isLoading ? (\n <div className=\"divide-y divide-border/50\">\n {Array.from({ length: ROWS }).map((_, i) => (\n <div key={i} className=\"flex h-16 items-center gap-3 px-4\">\n <Skeleton className=\"h-8 w-8 shrink-0 rounded-lg\" />\n <Skeleton className=\"h-9 w-9 shrink-0 rounded-md\" />\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=\"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\">\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 </CommunityCard>\n\n <CommunityCard\n icon={<Sparkles />}\n title=\"Rewards\"\n subtitle=\"Earn XP. Share the Creator's Fund.\"\n href=\"/rewards\"\n linkLabel=\"Scoreboard\"\n >\n <LeaderboardPanel myAddress={address} limit={ROWS} showHeading={false} compact />\n </CommunityCard>\n </section>\n );\n}\n"],"mappings":"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","names":["Link"]}
@@ -3,87 +3,99 @@ 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";
7
6
  import { Skeleton } from "./skeleton.js";
8
7
  import { ActivityRow } from "./activity-row.js";
9
8
  import { useMedialaneApp } from "./medialane-app.js";
10
9
  import { LeaderboardPanel } from "./rewards/leaderboard-panel.js";
11
10
  import { useActivities } from "../utils/use-activities.js";
12
11
  import { timeAgo } from "../utils/time.js";
13
- import { cn } from "../utils/cn.js";
14
12
  import { emptyMessages } from "../utils/empty-messages.js";
15
- const FEED_LIMIT = 8;
13
+ const ROWS = 5;
14
+ function CommunityCard({
15
+ icon,
16
+ title,
17
+ subtitle,
18
+ href,
19
+ linkLabel,
20
+ children
21
+ }) {
22
+ return /* @__PURE__ */ jsxs("section", { className: "overflow-hidden rounded-2xl border border-border/50 bg-card", children: [
23
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-border/50 px-4 py-3", children: [
24
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
25
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4", children: icon }),
26
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
27
+ /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold leading-none tracking-tight text-foreground", children: title }),
28
+ /* @__PURE__ */ jsx("p", { className: "mt-1 flex h-3.5 items-center gap-1 text-2xs text-muted-foreground", children: subtitle })
29
+ ] })
30
+ ] }),
31
+ /* @__PURE__ */ jsxs(
32
+ Link,
33
+ {
34
+ href,
35
+ className: "inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground",
36
+ children: [
37
+ linkLabel,
38
+ " ",
39
+ /* @__PURE__ */ jsx(ArrowRight, { className: "h-3 w-3" })
40
+ ]
41
+ }
42
+ )
43
+ ] }),
44
+ /* @__PURE__ */ jsx("div", { className: "min-h-[324px]", children })
45
+ ] });
46
+ }
16
47
  function DiscoverCommunitySection() {
17
- const { activities, isLoading } = useActivities({ limit: FEED_LIMIT });
48
+ const { activities, isLoading } = useActivities({ limit: ROWS });
18
49
  const { walletAddress: address } = useMedialaneApp();
19
50
  const [lastUpdated, setLastUpdated] = useState(() => (/* @__PURE__ */ new Date()).toISOString());
20
51
  useEffect(() => {
21
52
  if (!isLoading) setLastUpdated((/* @__PURE__ */ new Date()).toISOString());
22
53
  }, [activities, isLoading]);
23
- return /* @__PURE__ */ jsxs("section", { className: "grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start", children: [
24
- /* @__PURE__ */ jsxs("div", { className: "lg:col-span-7 space-y-4 sm:space-y-5", children: [
25
- /* @__PURE__ */ jsx(
26
- SectionHeading,
27
- {
28
- icon: /* @__PURE__ */ jsx(Activity, { className: "h-4 w-4" }),
29
- title: "Activities",
30
- subtitle: !isLoading && /* @__PURE__ */ jsxs(Fragment, { children: [
31
- /* @__PURE__ */ jsx(RefreshCw, { className: "h-2.5 w-2.5" }),
32
- "Updated ",
33
- timeAgo(lastUpdated)
34
- ] }),
35
- href: "/activities",
36
- linkLabel: "View all"
37
- }
38
- ),
39
- /* @__PURE__ */ jsx("div", { children: isLoading ? /* @__PURE__ */ jsx("div", { className: "divide-y divide-border/50 rounded-xl border border-border overflow-hidden", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-4 py-3.5", children: [
40
- /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 rounded-lg shrink-0" }),
41
- /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-9 rounded-md shrink-0" }),
42
- /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-2", children: [
43
- /* @__PURE__ */ jsx(Skeleton, { className: "h-3.5 w-40" }),
44
- /* @__PURE__ */ jsx(Skeleton, { className: "h-2.5 w-24" })
45
- ] })
46
- ] }, i)) }) : activities.length === 0 ? /* @__PURE__ */ jsxs("div", { className: cn("rounded-xl border border-border py-12 text-center"), children: [
47
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: emptyMessages.activity.title }),
48
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessages.activity.description })
49
- ] }) : /* @__PURE__ */ jsx("div", { className: "divide-y divide-border/50 rounded-xl border border-border overflow-hidden", children: activities.map((activity, i) => /* @__PURE__ */ jsx(
50
- ActivityRow,
51
- {
52
- activity,
53
- showActor: true,
54
- showExplorer: true
55
- },
56
- activity.txHash ? `${activity.txHash}-${activity.type}-${activity.nftTokenId ?? ""}` : `activity-${i}`
57
- )) }) })
58
- ] }),
59
- /* @__PURE__ */ jsxs("div", { className: "lg:col-span-5 space-y-4 sm:space-y-5", children: [
60
- /* @__PURE__ */ jsx(
61
- SectionHeading,
62
- {
63
- icon: /* @__PURE__ */ jsx(Sparkles, { className: "h-4 w-4" }),
64
- title: "Rewards",
65
- href: "/rewards",
66
- linkLabel: "Scoreboard"
67
- }
68
- ),
69
- /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-2xl border border-border/50 bg-card", children: [
70
- /* @__PURE__ */ jsxs("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", children: [
71
- /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold leading-snug", children: "Earn XP. Share the Creator's Fund." }),
72
- /* @__PURE__ */ jsxs(
73
- Link,
74
- {
75
- href: "/rewards",
76
- className: "inline-flex shrink-0 items-center gap-1 text-xs font-semibold text-brand-rose hover:opacity-80 transition-opacity",
77
- children: [
78
- "Start earning ",
79
- /* @__PURE__ */ jsx(ArrowRight, { className: "h-3 w-3" })
80
- ]
81
- }
82
- )
54
+ return /* @__PURE__ */ jsxs("section", { className: "grid grid-cols-1 gap-6 lg:grid-cols-2 lg:gap-8", children: [
55
+ /* @__PURE__ */ jsx(
56
+ CommunityCard,
57
+ {
58
+ icon: /* @__PURE__ */ jsx(Activity, {}),
59
+ title: "Activities",
60
+ subtitle: !isLoading && /* @__PURE__ */ jsxs(Fragment, { children: [
61
+ /* @__PURE__ */ jsx(RefreshCw, { className: "h-2.5 w-2.5" }),
62
+ "Updated ",
63
+ timeAgo(lastUpdated)
83
64
  ] }),
84
- /* @__PURE__ */ jsx(LeaderboardPanel, { myAddress: address, limit: 5, showHeading: false, compact: true })
85
- ] })
86
- ] })
65
+ href: "/activities",
66
+ linkLabel: "View all",
67
+ children: isLoading ? /* @__PURE__ */ jsx("div", { className: "divide-y divide-border/50", children: Array.from({ length: ROWS }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "flex h-16 items-center gap-3 px-4", children: [
68
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 shrink-0 rounded-lg" }),
69
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-9 shrink-0 rounded-md" }),
70
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-2", children: [
71
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-3.5 w-40" }),
72
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-2.5 w-24" })
73
+ ] })
74
+ ] }, i)) }) : activities.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "py-12 text-center", children: [
75
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: emptyMessages.activity.title }),
76
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessages.activity.description })
77
+ ] }) : /* @__PURE__ */ jsx("div", { className: "divide-y divide-border/50", children: activities.map((activity, i) => /* @__PURE__ */ jsx(
78
+ ActivityRow,
79
+ {
80
+ activity,
81
+ showActor: true,
82
+ showExplorer: true
83
+ },
84
+ activity.txHash ? `${activity.txHash}-${activity.type}-${activity.nftTokenId ?? ""}` : `activity-${i}`
85
+ )) })
86
+ }
87
+ ),
88
+ /* @__PURE__ */ jsx(
89
+ CommunityCard,
90
+ {
91
+ icon: /* @__PURE__ */ jsx(Sparkles, {}),
92
+ title: "Rewards",
93
+ subtitle: "Earn XP. Share the Creator's Fund.",
94
+ href: "/rewards",
95
+ linkLabel: "Scoreboard",
96
+ children: /* @__PURE__ */ jsx(LeaderboardPanel, { myAddress: address, limit: ROWS, showHeading: false, compact: true })
97
+ }
98
+ )
87
99
  ] });
88
100
  }
89
101
  export {
@@ -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 { 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":[]}
1
+ {"version":3,"sources":["../../src/components/discover-community-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type ReactNode } 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 { emptyMessages } from \"../utils/empty-messages.js\";\n\nconst ROWS = 5;\n\nfunction CommunityCard({\n icon,\n title,\n subtitle,\n href,\n linkLabel,\n children,\n}: {\n icon: ReactNode;\n title: string;\n subtitle?: ReactNode;\n href: string;\n linkLabel: string;\n children: ReactNode;\n}) {\n return (\n <section className=\"overflow-hidden rounded-2xl border border-border/50 bg-card\">\n <div className=\"flex items-center justify-between gap-3 border-b border-border/50 px-4 py-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">{icon}</span>\n <div className=\"min-w-0\">\n <h2 className=\"text-sm font-semibold leading-none tracking-tight text-foreground\">{title}</h2>\n <p className=\"mt-1 flex h-3.5 items-center gap-1 text-2xs text-muted-foreground\">{subtitle}</p>\n </div>\n </div>\n <Link\n href={href}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground\"\n >\n {linkLabel} <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <div className=\"min-h-[324px]\">{children}</div>\n </section>\n );\n}\n\nexport function DiscoverCommunitySection() {\n const { activities, isLoading } = useActivities({ limit: ROWS });\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 gap-6 lg:grid-cols-2 lg:gap-8\">\n <CommunityCard\n icon={<Activity />}\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 {isLoading ? (\n <div className=\"divide-y divide-border/50\">\n {Array.from({ length: ROWS }).map((_, i) => (\n <div key={i} className=\"flex h-16 items-center gap-3 px-4\">\n <Skeleton className=\"h-8 w-8 shrink-0 rounded-lg\" />\n <Skeleton className=\"h-9 w-9 shrink-0 rounded-md\" />\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=\"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\">\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 </CommunityCard>\n\n <CommunityCard\n icon={<Sparkles />}\n title=\"Rewards\"\n subtitle=\"Earn XP. Share the Creator's Fund.\"\n href=\"/rewards\"\n linkLabel=\"Scoreboard\"\n >\n <LeaderboardPanel myAddress={address} limit={ROWS} showHeading={false} compact />\n </CommunityCard>\n </section>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var discover_features_exports = {};
20
+ __export(discover_features_exports, {
21
+ DiscoverFeatures: () => DiscoverFeatures
22
+ });
23
+ module.exports = __toCommonJS(discover_features_exports);
24
+ var import_jsx_runtime = require("react/jsx-runtime");
25
+ var import_lucide_react = require("lucide-react");
26
+ var import_scroll_section = require("./scroll-section.js");
27
+ var import_cn = require("../utils/cn.js");
28
+ const HUES = [
29
+ { text: "text-brand-blue", border: "border-brand-blue/30", tint: "bg-brand-blue/10" },
30
+ { text: "text-brand-maeve", border: "border-brand-maeve/30", tint: "bg-brand-maeve/10" },
31
+ { text: "text-brand-orange", border: "border-brand-orange/30", tint: "bg-brand-orange/10" },
32
+ { text: "text-brand-purple", border: "border-brand-purple/30", tint: "bg-brand-purple/10" },
33
+ { text: "text-brand-rose", border: "border-brand-rose/30", tint: "bg-brand-rose/10" }
34
+ ];
35
+ const FEATURES = [
36
+ { icon: import_lucide_react.HandCoins, title: "99% to creators and owners" },
37
+ { icon: import_lucide_react.Globe, title: "Censorship resistance" },
38
+ { icon: import_lucide_react.ShieldCheck, title: "Stark cryptography" },
39
+ { icon: import_lucide_react.EyeOff, title: "Privacy by design" },
40
+ { icon: import_lucide_react.ScanEye, title: "Zero knowledge proof with Starknet" },
41
+ { icon: import_lucide_react.Percent, title: "Zero fees on protocols" },
42
+ { icon: import_lucide_react.Lock, title: "Immutable smart contracts" },
43
+ { icon: import_lucide_react.DoorOpen, title: "Permissionless" },
44
+ { icon: import_lucide_react.Database, title: "Smart contracts are the source of truth" },
45
+ { icon: import_lucide_react.FileCog, title: "Programmable IP" },
46
+ { icon: import_lucide_react.Gem, title: "Immutable assets" },
47
+ { icon: import_lucide_react.Scale, title: "IP protection compliance" },
48
+ { icon: import_lucide_react.Code, title: "Open source and auditable" }
49
+ ];
50
+ function DiscoverFeatures() {
51
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_scroll_section.ScrollSection, { icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.BadgeCheck, {}), title: "Medialane features", children: FEATURES.map(({ icon: Icon, title }, i) => {
52
+ const hue = HUES[i % HUES.length];
53
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
54
+ "div",
55
+ {
56
+ className: (0, import_cn.cn)(
57
+ "flex min-h-[168px] w-56 shrink-0 snap-start flex-col gap-4 rounded-2xl border bg-card p-6 sm:w-64",
58
+ hue.border
59
+ ),
60
+ children: [
61
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: (0, import_cn.cn)("flex h-11 w-11 items-center justify-center rounded-xl", hue.tint), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { className: (0, import_cn.cn)("h-6 w-6", hue.text) }) }),
62
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { className: "text-lg font-black leading-snug tracking-tight", children: title })
63
+ ]
64
+ },
65
+ title
66
+ );
67
+ }) });
68
+ }
69
+ // Annotate the CommonJS export names for ESM import in node:
70
+ 0 && (module.exports = {
71
+ DiscoverFeatures
72
+ });
73
+ //# sourceMappingURL=discover-features.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/discover-features.tsx"],"sourcesContent":["import {\n BadgeCheck,\n Code,\n Database,\n DoorOpen,\n EyeOff,\n FileCog,\n Gem,\n Globe,\n HandCoins,\n Lock,\n Percent,\n ScanEye,\n Scale,\n ShieldCheck,\n type LucideIcon,\n} from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { cn } from \"../utils/cn.js\";\n\nconst HUES = [\n { text: \"text-brand-blue\", border: \"border-brand-blue/30\", tint: \"bg-brand-blue/10\" },\n { text: \"text-brand-maeve\", border: \"border-brand-maeve/30\", tint: \"bg-brand-maeve/10\" },\n { text: \"text-brand-orange\", border: \"border-brand-orange/30\", tint: \"bg-brand-orange/10\" },\n { text: \"text-brand-purple\", border: \"border-brand-purple/30\", tint: \"bg-brand-purple/10\" },\n { text: \"text-brand-rose\", border: \"border-brand-rose/30\", tint: \"bg-brand-rose/10\" },\n];\n\nconst FEATURES: ReadonlyArray<{ icon: LucideIcon; title: string }> = [\n { icon: HandCoins, title: \"99% to creators and owners\" },\n { icon: Globe, title: \"Censorship resistance\" },\n { icon: ShieldCheck, title: \"Stark cryptography\" },\n { icon: EyeOff, title: \"Privacy by design\" },\n { icon: ScanEye, title: \"Zero knowledge proof with Starknet\" },\n { icon: Percent, title: \"Zero fees on protocols\" },\n { icon: Lock, title: \"Immutable smart contracts\" },\n { icon: DoorOpen, title: \"Permissionless\" },\n { icon: Database, title: \"Smart contracts are the source of truth\" },\n { icon: FileCog, title: \"Programmable IP\" },\n { icon: Gem, title: \"Immutable assets\" },\n { icon: Scale, title: \"IP protection compliance\" },\n { icon: Code, title: \"Open source and auditable\" },\n];\n\nexport function DiscoverFeatures() {\n return (\n <ScrollSection icon={<BadgeCheck />} title=\"Medialane features\">\n {FEATURES.map(({ icon: Icon, title }, i) => {\n const hue = HUES[i % HUES.length]!;\n return (\n <div\n key={title}\n className={cn(\n \"flex min-h-[168px] w-56 shrink-0 snap-start flex-col gap-4 rounded-2xl border bg-card p-6 sm:w-64\",\n hue.border,\n )}\n >\n <span className={cn(\"flex h-11 w-11 items-center justify-center rounded-xl\", hue.tint)}>\n <Icon className={cn(\"h-6 w-6\", hue.text)} />\n </span>\n <h3 className=\"text-lg font-black leading-snug tracking-tight\">{title}</h3>\n </div>\n );\n })}\n </ScrollSection>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CyB;AA9CzB,0BAgBO;AACP,4BAA8B;AAC9B,gBAAmB;AAEnB,MAAM,OAAO;AAAA,EACX,EAAE,MAAM,mBAAmB,QAAQ,wBAAwB,MAAM,mBAAmB;AAAA,EACpF,EAAE,MAAM,oBAAoB,QAAQ,yBAAyB,MAAM,oBAAoB;AAAA,EACvF,EAAE,MAAM,qBAAqB,QAAQ,0BAA0B,MAAM,qBAAqB;AAAA,EAC1F,EAAE,MAAM,qBAAqB,QAAQ,0BAA0B,MAAM,qBAAqB;AAAA,EAC1F,EAAE,MAAM,mBAAmB,QAAQ,wBAAwB,MAAM,mBAAmB;AACtF;AAEA,MAAM,WAA+D;AAAA,EACnE,EAAE,MAAM,+BAAW,OAAO,6BAA6B;AAAA,EACvD,EAAE,MAAM,2BAAO,OAAO,wBAAwB;AAAA,EAC9C,EAAE,MAAM,iCAAa,OAAO,qBAAqB;AAAA,EACjD,EAAE,MAAM,4BAAQ,OAAO,oBAAoB;AAAA,EAC3C,EAAE,MAAM,6BAAS,OAAO,qCAAqC;AAAA,EAC7D,EAAE,MAAM,6BAAS,OAAO,yBAAyB;AAAA,EACjD,EAAE,MAAM,0BAAM,OAAO,4BAA4B;AAAA,EACjD,EAAE,MAAM,8BAAU,OAAO,iBAAiB;AAAA,EAC1C,EAAE,MAAM,8BAAU,OAAO,0CAA0C;AAAA,EACnE,EAAE,MAAM,6BAAS,OAAO,kBAAkB;AAAA,EAC1C,EAAE,MAAM,yBAAK,OAAO,mBAAmB;AAAA,EACvC,EAAE,MAAM,2BAAO,OAAO,2BAA2B;AAAA,EACjD,EAAE,MAAM,0BAAM,OAAO,4BAA4B;AACnD;AAEO,SAAS,mBAAmB;AACjC,SACE,4CAAC,uCAAc,MAAM,4CAAC,kCAAW,GAAI,OAAM,sBACxC,mBAAS,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM,GAAG,MAAM;AAC1C,UAAM,MAAM,KAAK,IAAI,KAAK,MAAM;AAChC,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,eAAW;AAAA,UACT;AAAA,UACA,IAAI;AAAA,QACN;AAAA,QAEA;AAAA,sDAAC,UAAK,eAAW,cAAG,yDAAyD,IAAI,IAAI,GACnF,sDAAC,QAAK,eAAW,cAAG,WAAW,IAAI,IAAI,GAAG,GAC5C;AAAA,UACA,4CAAC,QAAG,WAAU,kDAAkD,iBAAM;AAAA;AAAA;AAAA,MATjE;AAAA,IAUP;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -0,0 +1,5 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function DiscoverFeatures(): react_jsx_runtime.JSX.Element;
4
+
5
+ export { DiscoverFeatures };
@@ -0,0 +1,5 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ declare function DiscoverFeatures(): react_jsx_runtime.JSX.Element;
4
+
5
+ export { DiscoverFeatures };
@@ -0,0 +1,64 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import {
3
+ BadgeCheck,
4
+ Code,
5
+ Database,
6
+ DoorOpen,
7
+ EyeOff,
8
+ FileCog,
9
+ Gem,
10
+ Globe,
11
+ HandCoins,
12
+ Lock,
13
+ Percent,
14
+ ScanEye,
15
+ Scale,
16
+ ShieldCheck
17
+ } from "lucide-react";
18
+ import { ScrollSection } from "./scroll-section.js";
19
+ import { cn } from "../utils/cn.js";
20
+ const HUES = [
21
+ { text: "text-brand-blue", border: "border-brand-blue/30", tint: "bg-brand-blue/10" },
22
+ { text: "text-brand-maeve", border: "border-brand-maeve/30", tint: "bg-brand-maeve/10" },
23
+ { text: "text-brand-orange", border: "border-brand-orange/30", tint: "bg-brand-orange/10" },
24
+ { text: "text-brand-purple", border: "border-brand-purple/30", tint: "bg-brand-purple/10" },
25
+ { text: "text-brand-rose", border: "border-brand-rose/30", tint: "bg-brand-rose/10" }
26
+ ];
27
+ const FEATURES = [
28
+ { icon: HandCoins, title: "99% to creators and owners" },
29
+ { icon: Globe, title: "Censorship resistance" },
30
+ { icon: ShieldCheck, title: "Stark cryptography" },
31
+ { icon: EyeOff, title: "Privacy by design" },
32
+ { icon: ScanEye, title: "Zero knowledge proof with Starknet" },
33
+ { icon: Percent, title: "Zero fees on protocols" },
34
+ { icon: Lock, title: "Immutable smart contracts" },
35
+ { icon: DoorOpen, title: "Permissionless" },
36
+ { icon: Database, title: "Smart contracts are the source of truth" },
37
+ { icon: FileCog, title: "Programmable IP" },
38
+ { icon: Gem, title: "Immutable assets" },
39
+ { icon: Scale, title: "IP protection compliance" },
40
+ { icon: Code, title: "Open source and auditable" }
41
+ ];
42
+ function DiscoverFeatures() {
43
+ return /* @__PURE__ */ jsx(ScrollSection, { icon: /* @__PURE__ */ jsx(BadgeCheck, {}), title: "Medialane features", children: FEATURES.map(({ icon: Icon, title }, i) => {
44
+ const hue = HUES[i % HUES.length];
45
+ return /* @__PURE__ */ jsxs(
46
+ "div",
47
+ {
48
+ className: cn(
49
+ "flex min-h-[168px] w-56 shrink-0 snap-start flex-col gap-4 rounded-2xl border bg-card p-6 sm:w-64",
50
+ hue.border
51
+ ),
52
+ children: [
53
+ /* @__PURE__ */ jsx("span", { className: cn("flex h-11 w-11 items-center justify-center rounded-xl", hue.tint), children: /* @__PURE__ */ jsx(Icon, { className: cn("h-6 w-6", hue.text) }) }),
54
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-black leading-snug tracking-tight", children: title })
55
+ ]
56
+ },
57
+ title
58
+ );
59
+ }) });
60
+ }
61
+ export {
62
+ DiscoverFeatures
63
+ };
64
+ //# sourceMappingURL=discover-features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/discover-features.tsx"],"sourcesContent":["import {\n BadgeCheck,\n Code,\n Database,\n DoorOpen,\n EyeOff,\n FileCog,\n Gem,\n Globe,\n HandCoins,\n Lock,\n Percent,\n ScanEye,\n Scale,\n ShieldCheck,\n type LucideIcon,\n} from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { cn } from \"../utils/cn.js\";\n\nconst HUES = [\n { text: \"text-brand-blue\", border: \"border-brand-blue/30\", tint: \"bg-brand-blue/10\" },\n { text: \"text-brand-maeve\", border: \"border-brand-maeve/30\", tint: \"bg-brand-maeve/10\" },\n { text: \"text-brand-orange\", border: \"border-brand-orange/30\", tint: \"bg-brand-orange/10\" },\n { text: \"text-brand-purple\", border: \"border-brand-purple/30\", tint: \"bg-brand-purple/10\" },\n { text: \"text-brand-rose\", border: \"border-brand-rose/30\", tint: \"bg-brand-rose/10\" },\n];\n\nconst FEATURES: ReadonlyArray<{ icon: LucideIcon; title: string }> = [\n { icon: HandCoins, title: \"99% to creators and owners\" },\n { icon: Globe, title: \"Censorship resistance\" },\n { icon: ShieldCheck, title: \"Stark cryptography\" },\n { icon: EyeOff, title: \"Privacy by design\" },\n { icon: ScanEye, title: \"Zero knowledge proof with Starknet\" },\n { icon: Percent, title: \"Zero fees on protocols\" },\n { icon: Lock, title: \"Immutable smart contracts\" },\n { icon: DoorOpen, title: \"Permissionless\" },\n { icon: Database, title: \"Smart contracts are the source of truth\" },\n { icon: FileCog, title: \"Programmable IP\" },\n { icon: Gem, title: \"Immutable assets\" },\n { icon: Scale, title: \"IP protection compliance\" },\n { icon: Code, title: \"Open source and auditable\" },\n];\n\nexport function DiscoverFeatures() {\n return (\n <ScrollSection icon={<BadgeCheck />} title=\"Medialane features\">\n {FEATURES.map(({ icon: Icon, title }, i) => {\n const hue = HUES[i % HUES.length]!;\n return (\n <div\n key={title}\n className={cn(\n \"flex min-h-[168px] w-56 shrink-0 snap-start flex-col gap-4 rounded-2xl border bg-card p-6 sm:w-64\",\n hue.border,\n )}\n >\n <span className={cn(\"flex h-11 w-11 items-center justify-center rounded-xl\", hue.tint)}>\n <Icon className={cn(\"h-6 w-6\", hue.text)} />\n </span>\n <h3 className=\"text-lg font-black leading-snug tracking-tight\">{title}</h3>\n </div>\n );\n })}\n </ScrollSection>\n );\n}\n"],"mappings":"AA8CyB,cAIf,YAJe;AA9CzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,qBAAqB;AAC9B,SAAS,UAAU;AAEnB,MAAM,OAAO;AAAA,EACX,EAAE,MAAM,mBAAmB,QAAQ,wBAAwB,MAAM,mBAAmB;AAAA,EACpF,EAAE,MAAM,oBAAoB,QAAQ,yBAAyB,MAAM,oBAAoB;AAAA,EACvF,EAAE,MAAM,qBAAqB,QAAQ,0BAA0B,MAAM,qBAAqB;AAAA,EAC1F,EAAE,MAAM,qBAAqB,QAAQ,0BAA0B,MAAM,qBAAqB;AAAA,EAC1F,EAAE,MAAM,mBAAmB,QAAQ,wBAAwB,MAAM,mBAAmB;AACtF;AAEA,MAAM,WAA+D;AAAA,EACnE,EAAE,MAAM,WAAW,OAAO,6BAA6B;AAAA,EACvD,EAAE,MAAM,OAAO,OAAO,wBAAwB;AAAA,EAC9C,EAAE,MAAM,aAAa,OAAO,qBAAqB;AAAA,EACjD,EAAE,MAAM,QAAQ,OAAO,oBAAoB;AAAA,EAC3C,EAAE,MAAM,SAAS,OAAO,qCAAqC;AAAA,EAC7D,EAAE,MAAM,SAAS,OAAO,yBAAyB;AAAA,EACjD,EAAE,MAAM,MAAM,OAAO,4BAA4B;AAAA,EACjD,EAAE,MAAM,UAAU,OAAO,iBAAiB;AAAA,EAC1C,EAAE,MAAM,UAAU,OAAO,0CAA0C;AAAA,EACnE,EAAE,MAAM,SAAS,OAAO,kBAAkB;AAAA,EAC1C,EAAE,MAAM,KAAK,OAAO,mBAAmB;AAAA,EACvC,EAAE,MAAM,OAAO,OAAO,2BAA2B;AAAA,EACjD,EAAE,MAAM,MAAM,OAAO,4BAA4B;AACnD;AAEO,SAAS,mBAAmB;AACjC,SACE,oBAAC,iBAAc,MAAM,oBAAC,cAAW,GAAI,OAAM,sBACxC,mBAAS,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM,GAAG,MAAM;AAC1C,UAAM,MAAM,KAAK,IAAI,KAAK,MAAM;AAChC,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,IAAI;AAAA,QACN;AAAA,QAEA;AAAA,8BAAC,UAAK,WAAW,GAAG,yDAAyD,IAAI,IAAI,GACnF,8BAAC,QAAK,WAAW,GAAG,WAAW,IAAI,IAAI,GAAG,GAC5C;AAAA,UACA,oBAAC,QAAG,WAAU,kDAAkD,iBAAM;AAAA;AAAA;AAAA,MATjE;AAAA,IAUP;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -30,7 +30,7 @@ var import_discover_hero = require("./discover-hero.js");
30
30
  var import_discover_collections_strip = require("./discover-collections-strip.js");
31
31
  var import_discover_feed_section = require("./discover-feed-section.js");
32
32
  var import_discover_community_section = require("./discover-community-section.js");
33
- var import_discover_principles = require("./discover-principles.js");
33
+ var import_discover_features = require("./discover-features.js");
34
34
  var import_ip_type_nav = require("./ip-type-nav.js");
35
35
  var import_medialane_app = require("./medialane-app.js");
36
36
  var import_use_orders = require("../utils/use-orders.js");
@@ -91,8 +91,8 @@ function DiscoverPage({ useMarketActions, heroBadge, heroHeadline }) {
91
91
  }
92
92
  ),
93
93
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ip_type_nav.IpTypeNav, {}),
94
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_discover_principles.DiscoverPrinciples, {}),
95
94
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_discover_community_section.DiscoverCommunitySection, {}),
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_discover_features.DiscoverFeatures, {}),
96
96
  market.dialogs
97
97
  ] });
98
98
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/discover-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref } from \"@medialane/sdk\";\nimport { Sparkles } from \"lucide-react\";\nimport { PageContainer } from \"./page-container.js\";\nimport { DiscoverHero } from \"./discover-hero.js\";\nimport { DiscoverCollectionsStrip } from \"./discover-collections-strip.js\";\nimport { DiscoverActivityStrip } from \"./discover-feed-section.js\";\nimport { DiscoverCommunitySection } from \"./discover-community-section.js\";\nimport { DiscoverPrinciples } from \"./discover-principles.js\";\nimport { IpTypeNav } from \"./ip-type-nav.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 { usePlatformStats } from \"../utils/use-platform-stats.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nexport interface DiscoverPageProps {\n useMarketActions: () => CollectionMarketActions;\n heroBadge?: string;\n heroHeadline?: string;\n}\n\nexport function DiscoverPage({ useMarketActions, heroBadge, heroHeadline }: DiscoverPageProps) {\n const { walletAddress } = useMedialaneApp();\n const market = useMarketActions();\n const { stats } = usePlatformStats();\n const { orders: tickerOrders } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 14 });\n const { orders: feedOrders, isLoading: feedLoading } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 10 });\n const { collections: featured, isLoading: featuredLoading } = useCollections(1, 8, true);\n const { collections, isLoading: collectionsLoading } = useCollections(1, 8);\n\n return (\n <PageContainer className=\"box-border max-w-full space-y-14 px-4 pt-20 sm:space-y-20 sm:px-5 lg:px-6\">\n <div className=\"space-y-8 sm:space-y-10\">\n <DiscoverHero\n stats={stats ?? null}\n orders={tickerOrders}\n badgeText={heroBadge}\n headlineText={heroHeadline}\n getTickerHref={(o) => assetHref(\"STARKNET\", o.nftContract, o.nftTokenId)}\n />\n <div className=\"space-y-14 sm:space-y-20\">\n {(featuredLoading || featured.length > 0) && (\n <DiscoverCollectionsStrip\n collections={featured}\n isLoading={featuredLoading}\n getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)}\n allCollectionsHref=\"/collections\"\n title=\"Featured\"\n icon={<Sparkles />}\n />\n )}\n <DiscoverCollectionsStrip\n collections={collections}\n isLoading={collectionsLoading}\n getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)}\n allCollectionsHref=\"/collections\"\n />\n </div>\n </div>\n <DiscoverActivityStrip\n orders={feedOrders}\n isLoading={feedLoading}\n marketplaceHref=\"/marketplace\"\n onBuyOrder={market.buy}\n isOwnOrder={(o) => !!walletAddress && !!o.offerer && isSameAddress(o.offerer, walletAddress)}\n />\n <IpTypeNav />\n <DiscoverPrinciples />\n <DiscoverCommunitySection />\n {market.dialogs}\n </PageContainer>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCQ;AAlCR,iBAA0C;AAC1C,0BAAyB;AACzB,4BAA8B;AAC9B,2BAA6B;AAC7B,wCAAyC;AACzC,mCAAsC;AACtC,wCAAyC;AACzC,iCAAmC;AACnC,yBAA0B;AAC1B,2BAAgC;AAEhC,wBAA0B;AAC1B,6BAA+B;AAC/B,gCAAiC;AACjC,0BAA8B;AAQvB,SAAS,aAAa,EAAE,kBAAkB,WAAW,aAAa,GAAsB;AAC7F,QAAM,EAAE,cAAc,QAAI,sCAAgB;AAC1C,QAAM,SAAS,iBAAiB;AAChC,QAAM,EAAE,MAAM,QAAI,4CAAiB;AACnC,QAAM,EAAE,QAAQ,aAAa,QAAI,6BAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAC1F,QAAM,EAAE,QAAQ,YAAY,WAAW,YAAY,QAAI,6BAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAChH,QAAM,EAAE,aAAa,UAAU,WAAW,gBAAgB,QAAI,uCAAe,GAAG,GAAG,IAAI;AACvF,QAAM,EAAE,aAAa,WAAW,mBAAmB,QAAI,uCAAe,GAAG,CAAC;AAE1E,SACE,6CAAC,uCAAc,WAAU,6EACvB;AAAA,iDAAC,SAAI,WAAU,2BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,SAAS;AAAA,UAChB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,cAAc;AAAA,UACd,eAAe,CAAC,UAAM,sBAAU,YAAY,EAAE,aAAa,EAAE,UAAU;AAAA;AAAA,MACzE;AAAA,MACA,6CAAC,SAAI,WAAU,4BACX;AAAA,4BAAmB,SAAS,SAAS,MACrC;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,YACb,WAAW;AAAA,YACX,SAAS,CAAC,UAAM,2BAAe,YAAY,EAAE,eAAe;AAAA,YAC5D,oBAAmB;AAAA,YACnB,OAAM;AAAA,YACN,MAAM,4CAAC,gCAAS;AAAA;AAAA,QAClB;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,WAAW;AAAA,YACX,SAAS,CAAC,UAAM,2BAAe,YAAY,EAAE,eAAe;AAAA,YAC5D,oBAAmB;AAAA;AAAA,QACrB;AAAA,SACF;AAAA,OACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,iBAAgB;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,YAAY,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,eAAW,mCAAc,EAAE,SAAS,aAAa;AAAA;AAAA,IAC7F;AAAA,IACA,4CAAC,gCAAU;AAAA,IACX,4CAAC,iDAAmB;AAAA,IACpB,4CAAC,8DAAyB;AAAA,IACzB,OAAO;AAAA,KACV;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/discover-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref } from \"@medialane/sdk\";\nimport { Sparkles } from \"lucide-react\";\nimport { PageContainer } from \"./page-container.js\";\nimport { DiscoverHero } from \"./discover-hero.js\";\nimport { DiscoverCollectionsStrip } from \"./discover-collections-strip.js\";\nimport { DiscoverActivityStrip } from \"./discover-feed-section.js\";\nimport { DiscoverCommunitySection } from \"./discover-community-section.js\";\nimport { DiscoverFeatures } from \"./discover-features.js\";\nimport { IpTypeNav } from \"./ip-type-nav.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 { usePlatformStats } from \"../utils/use-platform-stats.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nexport interface DiscoverPageProps {\n useMarketActions: () => CollectionMarketActions;\n heroBadge?: string;\n heroHeadline?: string;\n}\n\nexport function DiscoverPage({ useMarketActions, heroBadge, heroHeadline }: DiscoverPageProps) {\n const { walletAddress } = useMedialaneApp();\n const market = useMarketActions();\n const { stats } = usePlatformStats();\n const { orders: tickerOrders } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 14 });\n const { orders: feedOrders, isLoading: feedLoading } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 10 });\n const { collections: featured, isLoading: featuredLoading } = useCollections(1, 8, true);\n const { collections, isLoading: collectionsLoading } = useCollections(1, 8);\n\n return (\n <PageContainer className=\"box-border max-w-full space-y-14 px-4 pt-20 sm:space-y-20 sm:px-5 lg:px-6\">\n <div className=\"space-y-8 sm:space-y-10\">\n <DiscoverHero\n stats={stats ?? null}\n orders={tickerOrders}\n badgeText={heroBadge}\n headlineText={heroHeadline}\n getTickerHref={(o) => assetHref(\"STARKNET\", o.nftContract, o.nftTokenId)}\n />\n <div className=\"space-y-14 sm:space-y-20\">\n {(featuredLoading || featured.length > 0) && (\n <DiscoverCollectionsStrip\n collections={featured}\n isLoading={featuredLoading}\n getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)}\n allCollectionsHref=\"/collections\"\n title=\"Featured\"\n icon={<Sparkles />}\n />\n )}\n <DiscoverCollectionsStrip\n collections={collections}\n isLoading={collectionsLoading}\n getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)}\n allCollectionsHref=\"/collections\"\n />\n </div>\n </div>\n <DiscoverActivityStrip\n orders={feedOrders}\n isLoading={feedLoading}\n marketplaceHref=\"/marketplace\"\n onBuyOrder={market.buy}\n isOwnOrder={(o) => !!walletAddress && !!o.offerer && isSameAddress(o.offerer, walletAddress)}\n />\n <IpTypeNav />\n <DiscoverCommunitySection />\n <DiscoverFeatures />\n {market.dialogs}\n </PageContainer>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCQ;AAlCR,iBAA0C;AAC1C,0BAAyB;AACzB,4BAA8B;AAC9B,2BAA6B;AAC7B,wCAAyC;AACzC,mCAAsC;AACtC,wCAAyC;AACzC,+BAAiC;AACjC,yBAA0B;AAC1B,2BAAgC;AAEhC,wBAA0B;AAC1B,6BAA+B;AAC/B,gCAAiC;AACjC,0BAA8B;AAQvB,SAAS,aAAa,EAAE,kBAAkB,WAAW,aAAa,GAAsB;AAC7F,QAAM,EAAE,cAAc,QAAI,sCAAgB;AAC1C,QAAM,SAAS,iBAAiB;AAChC,QAAM,EAAE,MAAM,QAAI,4CAAiB;AACnC,QAAM,EAAE,QAAQ,aAAa,QAAI,6BAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAC1F,QAAM,EAAE,QAAQ,YAAY,WAAW,YAAY,QAAI,6BAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAChH,QAAM,EAAE,aAAa,UAAU,WAAW,gBAAgB,QAAI,uCAAe,GAAG,GAAG,IAAI;AACvF,QAAM,EAAE,aAAa,WAAW,mBAAmB,QAAI,uCAAe,GAAG,CAAC;AAE1E,SACE,6CAAC,uCAAc,WAAU,6EACvB;AAAA,iDAAC,SAAI,WAAU,2BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,SAAS;AAAA,UAChB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,cAAc;AAAA,UACd,eAAe,CAAC,UAAM,sBAAU,YAAY,EAAE,aAAa,EAAE,UAAU;AAAA;AAAA,MACzE;AAAA,MACA,6CAAC,SAAI,WAAU,4BACX;AAAA,4BAAmB,SAAS,SAAS,MACrC;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,YACb,WAAW;AAAA,YACX,SAAS,CAAC,UAAM,2BAAe,YAAY,EAAE,eAAe;AAAA,YAC5D,oBAAmB;AAAA,YACnB,OAAM;AAAA,YACN,MAAM,4CAAC,gCAAS;AAAA;AAAA,QAClB;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,WAAW;AAAA,YACX,SAAS,CAAC,UAAM,2BAAe,YAAY,EAAE,eAAe;AAAA,YAC5D,oBAAmB;AAAA;AAAA,QACrB;AAAA,SACF;AAAA,OACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,iBAAgB;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,YAAY,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,eAAW,mCAAc,EAAE,SAAS,aAAa;AAAA;AAAA,IAC7F;AAAA,IACA,4CAAC,gCAAU;AAAA,IACX,4CAAC,8DAAyB;AAAA,IAC1B,4CAAC,6CAAiB;AAAA,IACjB,OAAO;AAAA,KACV;AAEJ;","names":[]}
@@ -7,7 +7,7 @@ import { DiscoverHero } from "./discover-hero.js";
7
7
  import { DiscoverCollectionsStrip } from "./discover-collections-strip.js";
8
8
  import { DiscoverActivityStrip } from "./discover-feed-section.js";
9
9
  import { DiscoverCommunitySection } from "./discover-community-section.js";
10
- import { DiscoverPrinciples } from "./discover-principles.js";
10
+ import { DiscoverFeatures } from "./discover-features.js";
11
11
  import { IpTypeNav } from "./ip-type-nav.js";
12
12
  import { useMedialaneApp } from "./medialane-app.js";
13
13
  import { useOrders } from "../utils/use-orders.js";
@@ -68,8 +68,8 @@ function DiscoverPage({ useMarketActions, heroBadge, heroHeadline }) {
68
68
  }
69
69
  ),
70
70
  /* @__PURE__ */ jsx(IpTypeNav, {}),
71
- /* @__PURE__ */ jsx(DiscoverPrinciples, {}),
72
71
  /* @__PURE__ */ jsx(DiscoverCommunitySection, {}),
72
+ /* @__PURE__ */ jsx(DiscoverFeatures, {}),
73
73
  market.dialogs
74
74
  ] });
75
75
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/discover-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref } from \"@medialane/sdk\";\nimport { Sparkles } from \"lucide-react\";\nimport { PageContainer } from \"./page-container.js\";\nimport { DiscoverHero } from \"./discover-hero.js\";\nimport { DiscoverCollectionsStrip } from \"./discover-collections-strip.js\";\nimport { DiscoverActivityStrip } from \"./discover-feed-section.js\";\nimport { DiscoverCommunitySection } from \"./discover-community-section.js\";\nimport { DiscoverPrinciples } from \"./discover-principles.js\";\nimport { IpTypeNav } from \"./ip-type-nav.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 { usePlatformStats } from \"../utils/use-platform-stats.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nexport interface DiscoverPageProps {\n useMarketActions: () => CollectionMarketActions;\n heroBadge?: string;\n heroHeadline?: string;\n}\n\nexport function DiscoverPage({ useMarketActions, heroBadge, heroHeadline }: DiscoverPageProps) {\n const { walletAddress } = useMedialaneApp();\n const market = useMarketActions();\n const { stats } = usePlatformStats();\n const { orders: tickerOrders } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 14 });\n const { orders: feedOrders, isLoading: feedLoading } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 10 });\n const { collections: featured, isLoading: featuredLoading } = useCollections(1, 8, true);\n const { collections, isLoading: collectionsLoading } = useCollections(1, 8);\n\n return (\n <PageContainer className=\"box-border max-w-full space-y-14 px-4 pt-20 sm:space-y-20 sm:px-5 lg:px-6\">\n <div className=\"space-y-8 sm:space-y-10\">\n <DiscoverHero\n stats={stats ?? null}\n orders={tickerOrders}\n badgeText={heroBadge}\n headlineText={heroHeadline}\n getTickerHref={(o) => assetHref(\"STARKNET\", o.nftContract, o.nftTokenId)}\n />\n <div className=\"space-y-14 sm:space-y-20\">\n {(featuredLoading || featured.length > 0) && (\n <DiscoverCollectionsStrip\n collections={featured}\n isLoading={featuredLoading}\n getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)}\n allCollectionsHref=\"/collections\"\n title=\"Featured\"\n icon={<Sparkles />}\n />\n )}\n <DiscoverCollectionsStrip\n collections={collections}\n isLoading={collectionsLoading}\n getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)}\n allCollectionsHref=\"/collections\"\n />\n </div>\n </div>\n <DiscoverActivityStrip\n orders={feedOrders}\n isLoading={feedLoading}\n marketplaceHref=\"/marketplace\"\n onBuyOrder={market.buy}\n isOwnOrder={(o) => !!walletAddress && !!o.offerer && isSameAddress(o.offerer, walletAddress)}\n />\n <IpTypeNav />\n <DiscoverPrinciples />\n <DiscoverCommunitySection />\n {market.dialogs}\n </PageContainer>\n );\n}\n"],"mappings":";AAoCQ,cAOA,YAPA;AAlCR,SAAS,WAAW,sBAAsB;AAC1C,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAC7B,SAAS,gCAAgC;AACzC,SAAS,6BAA6B;AACtC,SAAS,gCAAgC;AACzC,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAEhC,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAQvB,SAAS,aAAa,EAAE,kBAAkB,WAAW,aAAa,GAAsB;AAC7F,QAAM,EAAE,cAAc,IAAI,gBAAgB;AAC1C,QAAM,SAAS,iBAAiB;AAChC,QAAM,EAAE,MAAM,IAAI,iBAAiB;AACnC,QAAM,EAAE,QAAQ,aAAa,IAAI,UAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAC1F,QAAM,EAAE,QAAQ,YAAY,WAAW,YAAY,IAAI,UAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAChH,QAAM,EAAE,aAAa,UAAU,WAAW,gBAAgB,IAAI,eAAe,GAAG,GAAG,IAAI;AACvF,QAAM,EAAE,aAAa,WAAW,mBAAmB,IAAI,eAAe,GAAG,CAAC;AAE1E,SACE,qBAAC,iBAAc,WAAU,6EACvB;AAAA,yBAAC,SAAI,WAAU,2BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,SAAS;AAAA,UAChB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,cAAc;AAAA,UACd,eAAe,CAAC,MAAM,UAAU,YAAY,EAAE,aAAa,EAAE,UAAU;AAAA;AAAA,MACzE;AAAA,MACA,qBAAC,SAAI,WAAU,4BACX;AAAA,4BAAmB,SAAS,SAAS,MACrC;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,YACb,WAAW;AAAA,YACX,SAAS,CAAC,MAAM,eAAe,YAAY,EAAE,eAAe;AAAA,YAC5D,oBAAmB;AAAA,YACnB,OAAM;AAAA,YACN,MAAM,oBAAC,YAAS;AAAA;AAAA,QAClB;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,WAAW;AAAA,YACX,SAAS,CAAC,MAAM,eAAe,YAAY,EAAE,eAAe;AAAA,YAC5D,oBAAmB;AAAA;AAAA,QACrB;AAAA,SACF;AAAA,OACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,iBAAgB;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,YAAY,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,WAAW,cAAc,EAAE,SAAS,aAAa;AAAA;AAAA,IAC7F;AAAA,IACA,oBAAC,aAAU;AAAA,IACX,oBAAC,sBAAmB;AAAA,IACpB,oBAAC,4BAAyB;AAAA,IACzB,OAAO;AAAA,KACV;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/discover-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref } from \"@medialane/sdk\";\nimport { Sparkles } from \"lucide-react\";\nimport { PageContainer } from \"./page-container.js\";\nimport { DiscoverHero } from \"./discover-hero.js\";\nimport { DiscoverCollectionsStrip } from \"./discover-collections-strip.js\";\nimport { DiscoverActivityStrip } from \"./discover-feed-section.js\";\nimport { DiscoverCommunitySection } from \"./discover-community-section.js\";\nimport { DiscoverFeatures } from \"./discover-features.js\";\nimport { IpTypeNav } from \"./ip-type-nav.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 { usePlatformStats } from \"../utils/use-platform-stats.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nexport interface DiscoverPageProps {\n useMarketActions: () => CollectionMarketActions;\n heroBadge?: string;\n heroHeadline?: string;\n}\n\nexport function DiscoverPage({ useMarketActions, heroBadge, heroHeadline }: DiscoverPageProps) {\n const { walletAddress } = useMedialaneApp();\n const market = useMarketActions();\n const { stats } = usePlatformStats();\n const { orders: tickerOrders } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 14 });\n const { orders: feedOrders, isLoading: feedLoading } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 10 });\n const { collections: featured, isLoading: featuredLoading } = useCollections(1, 8, true);\n const { collections, isLoading: collectionsLoading } = useCollections(1, 8);\n\n return (\n <PageContainer className=\"box-border max-w-full space-y-14 px-4 pt-20 sm:space-y-20 sm:px-5 lg:px-6\">\n <div className=\"space-y-8 sm:space-y-10\">\n <DiscoverHero\n stats={stats ?? null}\n orders={tickerOrders}\n badgeText={heroBadge}\n headlineText={heroHeadline}\n getTickerHref={(o) => assetHref(\"STARKNET\", o.nftContract, o.nftTokenId)}\n />\n <div className=\"space-y-14 sm:space-y-20\">\n {(featuredLoading || featured.length > 0) && (\n <DiscoverCollectionsStrip\n collections={featured}\n isLoading={featuredLoading}\n getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)}\n allCollectionsHref=\"/collections\"\n title=\"Featured\"\n icon={<Sparkles />}\n />\n )}\n <DiscoverCollectionsStrip\n collections={collections}\n isLoading={collectionsLoading}\n getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)}\n allCollectionsHref=\"/collections\"\n />\n </div>\n </div>\n <DiscoverActivityStrip\n orders={feedOrders}\n isLoading={feedLoading}\n marketplaceHref=\"/marketplace\"\n onBuyOrder={market.buy}\n isOwnOrder={(o) => !!walletAddress && !!o.offerer && isSameAddress(o.offerer, walletAddress)}\n />\n <IpTypeNav />\n <DiscoverCommunitySection />\n <DiscoverFeatures />\n {market.dialogs}\n </PageContainer>\n );\n}\n"],"mappings":";AAoCQ,cAOA,YAPA;AAlCR,SAAS,WAAW,sBAAsB;AAC1C,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAC7B,SAAS,gCAAgC;AACzC,SAAS,6BAA6B;AACtC,SAAS,gCAAgC;AACzC,SAAS,wBAAwB;AACjC,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAEhC,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAQvB,SAAS,aAAa,EAAE,kBAAkB,WAAW,aAAa,GAAsB;AAC7F,QAAM,EAAE,cAAc,IAAI,gBAAgB;AAC1C,QAAM,SAAS,iBAAiB;AAChC,QAAM,EAAE,MAAM,IAAI,iBAAiB;AACnC,QAAM,EAAE,QAAQ,aAAa,IAAI,UAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAC1F,QAAM,EAAE,QAAQ,YAAY,WAAW,YAAY,IAAI,UAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAChH,QAAM,EAAE,aAAa,UAAU,WAAW,gBAAgB,IAAI,eAAe,GAAG,GAAG,IAAI;AACvF,QAAM,EAAE,aAAa,WAAW,mBAAmB,IAAI,eAAe,GAAG,CAAC;AAE1E,SACE,qBAAC,iBAAc,WAAU,6EACvB;AAAA,yBAAC,SAAI,WAAU,2BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO,SAAS;AAAA,UAChB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,cAAc;AAAA,UACd,eAAe,CAAC,MAAM,UAAU,YAAY,EAAE,aAAa,EAAE,UAAU;AAAA;AAAA,MACzE;AAAA,MACA,qBAAC,SAAI,WAAU,4BACX;AAAA,4BAAmB,SAAS,SAAS,MACrC;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,YACb,WAAW;AAAA,YACX,SAAS,CAAC,MAAM,eAAe,YAAY,EAAE,eAAe;AAAA,YAC5D,oBAAmB;AAAA,YACnB,OAAM;AAAA,YACN,MAAM,oBAAC,YAAS;AAAA;AAAA,QAClB;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,WAAW;AAAA,YACX,SAAS,CAAC,MAAM,eAAe,YAAY,EAAE,eAAe;AAAA,YAC5D,oBAAmB;AAAA;AAAA,QACrB;AAAA,SACF;AAAA,OACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,iBAAgB;AAAA,QAChB,YAAY,OAAO;AAAA,QACnB,YAAY,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,WAAW,cAAc,EAAE,SAAS,aAAa;AAAA;AAAA,IAC7F;AAAA,IACA,oBAAC,aAAU;AAAA,IACX,oBAAC,4BAAyB;AAAA,IAC1B,oBAAC,oBAAiB;AAAA,IACjB,OAAO;AAAA,KACV;AAEJ;","names":[]}
@@ -54,7 +54,7 @@ function CreatorIdentity({ address, compact }) {
54
54
  walletAddress: address
55
55
  });
56
56
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "inline-flex min-w-0 items-center gap-2.5", children: [
57
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: (0, import_cn.cn)("relative shrink-0 overflow-hidden rounded-full bg-foreground/[0.08]", compact ? "h-7 w-7" : "h-9 w-9"), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
57
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "relative h-9 w-9 shrink-0 overflow-hidden rounded-full bg-foreground/[0.08]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
58
58
  import_image.default,
59
59
  {
60
60
  src: avatarUrl ?? "/icon.png",
@@ -83,7 +83,7 @@ function LeaderboardPanel({
83
83
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br from-brand-rose to-brand-orange text-white shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, { className: "h-3.5 w-3.5" }) }),
84
84
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-sm font-black", children: "Community Rewards" })
85
85
  ] }),
86
- isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: compact ? "divide-y divide-border/40" : "space-y-1.5", children: Array.from({ length: Math.min(limit, 6) }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: compact ? "h-11 w-full rounded-none" : "h-10 w-full rounded-lg" }, i)) }) : rows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: (0, import_cn.cn)("text-sm text-muted-foreground py-4", compact && "px-4"), children: "Nobody's earned points yet \u2014 be the first." }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
86
+ isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: compact ? "divide-y divide-border/40" : "space-y-1.5", children: Array.from({ length: Math.min(limit, 6) }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { className: compact ? "h-16 w-full rounded-none" : "h-10 w-full rounded-lg" }, i)) }) : rows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: (0, import_cn.cn)("text-sm text-muted-foreground py-4", compact && "px-4"), children: "Nobody's earned points yet \u2014 be the first." }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
87
87
  import_leaderboard_table.LeaderboardTable,
88
88
  {
89
89
  entries: rows,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/leaderboard-panel.tsx"],"sourcesContent":["\"use client\";\n\nimport { Sparkles } from \"lucide-react\";\nimport { normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport Image from \"../image.js\";\nimport Link from \"../link.js\";\nimport { Skeleton } from \"../skeleton.js\";\nimport { AddressDisplay } from \"../address-display.js\";\nimport { LeaderboardTable } from \"./leaderboard-table.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { profileIdentity } from \"../../utils/profile-identity.js\";\nimport { useCreatorProfile } from \"../../utils/use-profiles.js\";\nimport { useImageUrl } from \"../../utils/use-image-url.js\";\nimport { useLeaderboard } from \"../../utils/use-rewards.js\";\n\nexport interface LeaderboardPanelProps {\n myAddress?: string | null;\n limit?: number;\n showHeading?: boolean;\n viewAllHref?: string;\n compact?: boolean;\n className?: string;\n}\n\nfunction CreatorIdentity({ address, compact }: { address: string; compact?: boolean }) {\n const { profile } = useCreatorProfile(address);\n const avatarUrl = useImageUrl()(profile?.avatarImage, { width: 96 });\n const { identity: name } = profileIdentity({\n username: profile?.username,\n name: profile?.name,\n walletAddress: address,\n });\n\n return (\n <span className=\"inline-flex min-w-0 items-center gap-2.5\">\n <span className={cn(\"relative shrink-0 overflow-hidden rounded-full bg-foreground/[0.08]\", compact ? \"h-7 w-7\" : \"h-9 w-9\")}>\n <Image\n src={avatarUrl ?? \"/icon.png\"}\n alt=\"\"\n fill\n unoptimized\n className={avatarUrl ? \"object-cover\" : \"object-cover p-[15%] opacity-50\"}\n />\n </span>\n {name ? (\n <span className={cn(\"truncate font-bold\", compact ? \"text-sm font-semibold\" : \"text-base\")}>{name}</span>\n ) : (\n <AddressDisplay address={address} chars={4} showCopy={false} className={compact ? \"text-sm font-semibold\" : \"text-base font-bold\"} />\n )}\n </span>\n );\n}\n\nexport function LeaderboardPanel({\n myAddress,\n limit = 20,\n showHeading = true,\n viewAllHref,\n compact,\n className,\n}: LeaderboardPanelProps) {\n const { data, isLoading } = useLeaderboard(1, limit);\n const rows = data?.data ?? [];\n\n const highlightAddress = myAddress ? normalizeAddress(\"STARKNET\", myAddress) : null;\n\n return (\n <div className={cn(compact ? \"\" : \"space-y-3\", className)}>\n {showHeading && (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br from-brand-rose to-brand-orange text-white shrink-0\">\n <Sparkles className=\"h-3.5 w-3.5\" />\n </div>\n <h2 className=\"text-sm font-black\">Community Rewards</h2>\n </div>\n )}\n\n {isLoading ? (\n <div className={compact ? \"divide-y divide-border/40\" : \"space-y-1.5\"}>\n {Array.from({ length: Math.min(limit, 6) }).map((_, i) => (\n <Skeleton key={i} className={compact ? \"h-11 w-full rounded-none\" : \"h-10 w-full rounded-lg\"} />\n ))}\n </div>\n ) : rows.length === 0 ? (\n <p className={cn(\"text-sm text-muted-foreground py-4\", compact && \"px-4\")}>\n Nobody&apos;s earned points yet — be the first.\n </p>\n ) : (\n <LeaderboardTable\n entries={rows}\n highlightAddress={highlightAddress}\n compact={compact}\n renderAddress={(address) => (\n <Link href={profileHref({ address })} className=\"hover:text-foreground transition-colors\">\n <CreatorIdentity address={address} compact={compact} />\n </Link>\n )}\n />\n )}\n\n {viewAllHref && rows.length > 0 && (\n <Link\n href={viewAllHref}\n className=\"inline-flex items-center gap-1 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors pt-1\"\n >\n View scoreboard →\n </Link>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCI;AAhCJ,0BAAyB;AACzB,iBAA8C;AAC9C,mBAAkB;AAClB,kBAAiB;AACjB,sBAAyB;AACzB,6BAA+B;AAC/B,+BAAiC;AACjC,gBAAmB;AACnB,8BAAgC;AAChC,0BAAkC;AAClC,2BAA4B;AAC5B,yBAA+B;AAW/B,SAAS,gBAAgB,EAAE,SAAS,QAAQ,GAA2C;AACrF,QAAM,EAAE,QAAQ,QAAI,uCAAkB,OAAO;AAC7C,QAAM,gBAAY,kCAAY,EAAE,SAAS,aAAa,EAAE,OAAO,GAAG,CAAC;AACnE,QAAM,EAAE,UAAU,KAAK,QAAI,yCAAgB;AAAA,IACzC,UAAU,SAAS;AAAA,IACnB,MAAM,SAAS;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AAED,SACE,6CAAC,UAAK,WAAU,4CACd;AAAA,gDAAC,UAAK,eAAW,cAAG,uEAAuE,UAAU,YAAY,SAAS,GACxH;AAAA,MAAC,aAAAA;AAAA,MAAA;AAAA,QACC,KAAK,aAAa;AAAA,QAClB,KAAI;AAAA,QACJ,MAAI;AAAA,QACJ,aAAW;AAAA,QACX,WAAW,YAAY,iBAAiB;AAAA;AAAA,IAC1C,GACF;AAAA,IACC,OACC,4CAAC,UAAK,eAAW,cAAG,sBAAsB,UAAU,0BAA0B,WAAW,GAAI,gBAAK,IAElG,4CAAC,yCAAe,SAAkB,OAAO,GAAG,UAAU,OAAO,WAAW,UAAU,0BAA0B,uBAAuB;AAAA,KAEvI;AAEJ;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,EAAE,MAAM,UAAU,QAAI,mCAAe,GAAG,KAAK;AACnD,QAAM,OAAO,MAAM,QAAQ,CAAC;AAE5B,QAAM,mBAAmB,gBAAY,6BAAiB,YAAY,SAAS,IAAI;AAE/E,SACE,6CAAC,SAAI,eAAW,cAAG,UAAU,KAAK,aAAa,SAAS,GACrD;AAAA,mBACC,6CAAC,SAAI,WAAU,2BACb;AAAA,kDAAC,SAAI,WAAU,6HACb,sDAAC,gCAAS,WAAU,eAAc,GACpC;AAAA,MACA,4CAAC,QAAG,WAAU,sBAAqB,+BAAiB;AAAA,OACtD;AAAA,IAGD,YACC,4CAAC,SAAI,WAAW,UAAU,8BAA8B,eACrD,gBAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAClD,4CAAC,4BAAiB,WAAW,UAAU,6BAA6B,4BAArD,CAA+E,CAC/F,GACH,IACE,KAAK,WAAW,IAClB,4CAAC,OAAE,eAAW,cAAG,sCAAsC,WAAW,MAAM,GAAG,6DAE3E,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,eAAe,CAAC,YACd,4CAAC,YAAAC,SAAA,EAAK,UAAM,wBAAY,EAAE,QAAQ,CAAC,GAAG,WAAU,2CAC9C,sDAAC,mBAAgB,SAAkB,SAAkB,GACvD;AAAA;AAAA,IAEJ;AAAA,IAGD,eAAe,KAAK,SAAS,KAC5B;AAAA,MAAC,YAAAA;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,WAAU;AAAA,QACX;AAAA;AAAA,IAED;AAAA,KAEJ;AAEJ;","names":["Image","Link"]}
1
+ {"version":3,"sources":["../../../src/components/rewards/leaderboard-panel.tsx"],"sourcesContent":["\"use client\";\n\nimport { Sparkles } from \"lucide-react\";\nimport { normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport Image from \"../image.js\";\nimport Link from \"../link.js\";\nimport { Skeleton } from \"../skeleton.js\";\nimport { AddressDisplay } from \"../address-display.js\";\nimport { LeaderboardTable } from \"./leaderboard-table.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { profileIdentity } from \"../../utils/profile-identity.js\";\nimport { useCreatorProfile } from \"../../utils/use-profiles.js\";\nimport { useImageUrl } from \"../../utils/use-image-url.js\";\nimport { useLeaderboard } from \"../../utils/use-rewards.js\";\n\nexport interface LeaderboardPanelProps {\n myAddress?: string | null;\n limit?: number;\n showHeading?: boolean;\n viewAllHref?: string;\n compact?: boolean;\n className?: string;\n}\n\nfunction CreatorIdentity({ address, compact }: { address: string; compact?: boolean }) {\n const { profile } = useCreatorProfile(address);\n const avatarUrl = useImageUrl()(profile?.avatarImage, { width: 96 });\n const { identity: name } = profileIdentity({\n username: profile?.username,\n name: profile?.name,\n walletAddress: address,\n });\n\n return (\n <span className=\"inline-flex min-w-0 items-center gap-2.5\">\n <span className=\"relative h-9 w-9 shrink-0 overflow-hidden rounded-full bg-foreground/[0.08]\">\n <Image\n src={avatarUrl ?? \"/icon.png\"}\n alt=\"\"\n fill\n unoptimized\n className={avatarUrl ? \"object-cover\" : \"object-cover p-[15%] opacity-50\"}\n />\n </span>\n {name ? (\n <span className={cn(\"truncate font-bold\", compact ? \"text-sm font-semibold\" : \"text-base\")}>{name}</span>\n ) : (\n <AddressDisplay address={address} chars={4} showCopy={false} className={compact ? \"text-sm font-semibold\" : \"text-base font-bold\"} />\n )}\n </span>\n );\n}\n\nexport function LeaderboardPanel({\n myAddress,\n limit = 20,\n showHeading = true,\n viewAllHref,\n compact,\n className,\n}: LeaderboardPanelProps) {\n const { data, isLoading } = useLeaderboard(1, limit);\n const rows = data?.data ?? [];\n\n const highlightAddress = myAddress ? normalizeAddress(\"STARKNET\", myAddress) : null;\n\n return (\n <div className={cn(compact ? \"\" : \"space-y-3\", className)}>\n {showHeading && (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br from-brand-rose to-brand-orange text-white shrink-0\">\n <Sparkles className=\"h-3.5 w-3.5\" />\n </div>\n <h2 className=\"text-sm font-black\">Community Rewards</h2>\n </div>\n )}\n\n {isLoading ? (\n <div className={compact ? \"divide-y divide-border/40\" : \"space-y-1.5\"}>\n {Array.from({ length: Math.min(limit, 6) }).map((_, i) => (\n <Skeleton key={i} className={compact ? \"h-16 w-full rounded-none\" : \"h-10 w-full rounded-lg\"} />\n ))}\n </div>\n ) : rows.length === 0 ? (\n <p className={cn(\"text-sm text-muted-foreground py-4\", compact && \"px-4\")}>\n Nobody&apos;s earned points yet — be the first.\n </p>\n ) : (\n <LeaderboardTable\n entries={rows}\n highlightAddress={highlightAddress}\n compact={compact}\n renderAddress={(address) => (\n <Link href={profileHref({ address })} className=\"hover:text-foreground transition-colors\">\n <CreatorIdentity address={address} compact={compact} />\n </Link>\n )}\n />\n )}\n\n {viewAllHref && rows.length > 0 && (\n <Link\n href={viewAllHref}\n className=\"inline-flex items-center gap-1 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors pt-1\"\n >\n View scoreboard →\n </Link>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCI;AAhCJ,0BAAyB;AACzB,iBAA8C;AAC9C,mBAAkB;AAClB,kBAAiB;AACjB,sBAAyB;AACzB,6BAA+B;AAC/B,+BAAiC;AACjC,gBAAmB;AACnB,8BAAgC;AAChC,0BAAkC;AAClC,2BAA4B;AAC5B,yBAA+B;AAW/B,SAAS,gBAAgB,EAAE,SAAS,QAAQ,GAA2C;AACrF,QAAM,EAAE,QAAQ,QAAI,uCAAkB,OAAO;AAC7C,QAAM,gBAAY,kCAAY,EAAE,SAAS,aAAa,EAAE,OAAO,GAAG,CAAC;AACnE,QAAM,EAAE,UAAU,KAAK,QAAI,yCAAgB;AAAA,IACzC,UAAU,SAAS;AAAA,IACnB,MAAM,SAAS;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AAED,SACE,6CAAC,UAAK,WAAU,4CACd;AAAA,gDAAC,UAAK,WAAU,+EACd;AAAA,MAAC,aAAAA;AAAA,MAAA;AAAA,QACC,KAAK,aAAa;AAAA,QAClB,KAAI;AAAA,QACJ,MAAI;AAAA,QACJ,aAAW;AAAA,QACX,WAAW,YAAY,iBAAiB;AAAA;AAAA,IAC1C,GACF;AAAA,IACC,OACC,4CAAC,UAAK,eAAW,cAAG,sBAAsB,UAAU,0BAA0B,WAAW,GAAI,gBAAK,IAElG,4CAAC,yCAAe,SAAkB,OAAO,GAAG,UAAU,OAAO,WAAW,UAAU,0BAA0B,uBAAuB;AAAA,KAEvI;AAEJ;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,EAAE,MAAM,UAAU,QAAI,mCAAe,GAAG,KAAK;AACnD,QAAM,OAAO,MAAM,QAAQ,CAAC;AAE5B,QAAM,mBAAmB,gBAAY,6BAAiB,YAAY,SAAS,IAAI;AAE/E,SACE,6CAAC,SAAI,eAAW,cAAG,UAAU,KAAK,aAAa,SAAS,GACrD;AAAA,mBACC,6CAAC,SAAI,WAAU,2BACb;AAAA,kDAAC,SAAI,WAAU,6HACb,sDAAC,gCAAS,WAAU,eAAc,GACpC;AAAA,MACA,4CAAC,QAAG,WAAU,sBAAqB,+BAAiB;AAAA,OACtD;AAAA,IAGD,YACC,4CAAC,SAAI,WAAW,UAAU,8BAA8B,eACrD,gBAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAClD,4CAAC,4BAAiB,WAAW,UAAU,6BAA6B,4BAArD,CAA+E,CAC/F,GACH,IACE,KAAK,WAAW,IAClB,4CAAC,OAAE,eAAW,cAAG,sCAAsC,WAAW,MAAM,GAAG,6DAE3E,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,eAAe,CAAC,YACd,4CAAC,YAAAC,SAAA,EAAK,UAAM,wBAAY,EAAE,QAAQ,CAAC,GAAG,WAAU,2CAC9C,sDAAC,mBAAgB,SAAkB,SAAkB,GACvD;AAAA;AAAA,IAEJ;AAAA,IAGD,eAAe,KAAK,SAAS,KAC5B;AAAA,MAAC,YAAAA;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,WAAU;AAAA,QACX;AAAA;AAAA,IAED;AAAA,KAEJ;AAEJ;","names":["Image","Link"]}
@@ -21,7 +21,7 @@ function CreatorIdentity({ address, compact }) {
21
21
  walletAddress: address
22
22
  });
23
23
  return /* @__PURE__ */ jsxs("span", { className: "inline-flex min-w-0 items-center gap-2.5", children: [
24
- /* @__PURE__ */ jsx("span", { className: cn("relative shrink-0 overflow-hidden rounded-full bg-foreground/[0.08]", compact ? "h-7 w-7" : "h-9 w-9"), children: /* @__PURE__ */ jsx(
24
+ /* @__PURE__ */ jsx("span", { className: "relative h-9 w-9 shrink-0 overflow-hidden rounded-full bg-foreground/[0.08]", children: /* @__PURE__ */ jsx(
25
25
  Image,
26
26
  {
27
27
  src: avatarUrl ?? "/icon.png",
@@ -50,7 +50,7 @@ function LeaderboardPanel({
50
50
  /* @__PURE__ */ jsx("div", { className: "flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br from-brand-rose to-brand-orange text-white shrink-0", children: /* @__PURE__ */ jsx(Sparkles, { className: "h-3.5 w-3.5" }) }),
51
51
  /* @__PURE__ */ jsx("h2", { className: "text-sm font-black", children: "Community Rewards" })
52
52
  ] }),
53
- isLoading ? /* @__PURE__ */ jsx("div", { className: compact ? "divide-y divide-border/40" : "space-y-1.5", children: Array.from({ length: Math.min(limit, 6) }).map((_, i) => /* @__PURE__ */ jsx(Skeleton, { className: compact ? "h-11 w-full rounded-none" : "h-10 w-full rounded-lg" }, i)) }) : rows.length === 0 ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground py-4", compact && "px-4"), children: "Nobody's earned points yet \u2014 be the first." }) : /* @__PURE__ */ jsx(
53
+ isLoading ? /* @__PURE__ */ jsx("div", { className: compact ? "divide-y divide-border/40" : "space-y-1.5", children: Array.from({ length: Math.min(limit, 6) }).map((_, i) => /* @__PURE__ */ jsx(Skeleton, { className: compact ? "h-16 w-full rounded-none" : "h-10 w-full rounded-lg" }, i)) }) : rows.length === 0 ? /* @__PURE__ */ jsx("p", { className: cn("text-sm text-muted-foreground py-4", compact && "px-4"), children: "Nobody's earned points yet \u2014 be the first." }) : /* @__PURE__ */ jsx(
54
54
  LeaderboardTable,
55
55
  {
56
56
  entries: rows,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/leaderboard-panel.tsx"],"sourcesContent":["\"use client\";\n\nimport { Sparkles } from \"lucide-react\";\nimport { normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport Image from \"../image.js\";\nimport Link from \"../link.js\";\nimport { Skeleton } from \"../skeleton.js\";\nimport { AddressDisplay } from \"../address-display.js\";\nimport { LeaderboardTable } from \"./leaderboard-table.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { profileIdentity } from \"../../utils/profile-identity.js\";\nimport { useCreatorProfile } from \"../../utils/use-profiles.js\";\nimport { useImageUrl } from \"../../utils/use-image-url.js\";\nimport { useLeaderboard } from \"../../utils/use-rewards.js\";\n\nexport interface LeaderboardPanelProps {\n myAddress?: string | null;\n limit?: number;\n showHeading?: boolean;\n viewAllHref?: string;\n compact?: boolean;\n className?: string;\n}\n\nfunction CreatorIdentity({ address, compact }: { address: string; compact?: boolean }) {\n const { profile } = useCreatorProfile(address);\n const avatarUrl = useImageUrl()(profile?.avatarImage, { width: 96 });\n const { identity: name } = profileIdentity({\n username: profile?.username,\n name: profile?.name,\n walletAddress: address,\n });\n\n return (\n <span className=\"inline-flex min-w-0 items-center gap-2.5\">\n <span className={cn(\"relative shrink-0 overflow-hidden rounded-full bg-foreground/[0.08]\", compact ? \"h-7 w-7\" : \"h-9 w-9\")}>\n <Image\n src={avatarUrl ?? \"/icon.png\"}\n alt=\"\"\n fill\n unoptimized\n className={avatarUrl ? \"object-cover\" : \"object-cover p-[15%] opacity-50\"}\n />\n </span>\n {name ? (\n <span className={cn(\"truncate font-bold\", compact ? \"text-sm font-semibold\" : \"text-base\")}>{name}</span>\n ) : (\n <AddressDisplay address={address} chars={4} showCopy={false} className={compact ? \"text-sm font-semibold\" : \"text-base font-bold\"} />\n )}\n </span>\n );\n}\n\nexport function LeaderboardPanel({\n myAddress,\n limit = 20,\n showHeading = true,\n viewAllHref,\n compact,\n className,\n}: LeaderboardPanelProps) {\n const { data, isLoading } = useLeaderboard(1, limit);\n const rows = data?.data ?? [];\n\n const highlightAddress = myAddress ? normalizeAddress(\"STARKNET\", myAddress) : null;\n\n return (\n <div className={cn(compact ? \"\" : \"space-y-3\", className)}>\n {showHeading && (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br from-brand-rose to-brand-orange text-white shrink-0\">\n <Sparkles className=\"h-3.5 w-3.5\" />\n </div>\n <h2 className=\"text-sm font-black\">Community Rewards</h2>\n </div>\n )}\n\n {isLoading ? (\n <div className={compact ? \"divide-y divide-border/40\" : \"space-y-1.5\"}>\n {Array.from({ length: Math.min(limit, 6) }).map((_, i) => (\n <Skeleton key={i} className={compact ? \"h-11 w-full rounded-none\" : \"h-10 w-full rounded-lg\"} />\n ))}\n </div>\n ) : rows.length === 0 ? (\n <p className={cn(\"text-sm text-muted-foreground py-4\", compact && \"px-4\")}>\n Nobody&apos;s earned points yet — be the first.\n </p>\n ) : (\n <LeaderboardTable\n entries={rows}\n highlightAddress={highlightAddress}\n compact={compact}\n renderAddress={(address) => (\n <Link href={profileHref({ address })} className=\"hover:text-foreground transition-colors\">\n <CreatorIdentity address={address} compact={compact} />\n </Link>\n )}\n />\n )}\n\n {viewAllHref && rows.length > 0 && (\n <Link\n href={viewAllHref}\n className=\"inline-flex items-center gap-1 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors pt-1\"\n >\n View scoreboard →\n </Link>\n )}\n </div>\n );\n}\n"],"mappings":";AAkCI,SAEI,KAFJ;AAhCJ,SAAS,gBAAgB;AACzB,SAAS,kBAAkB,mBAAmB;AAC9C,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,UAAU;AACnB,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAClC,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAW/B,SAAS,gBAAgB,EAAE,SAAS,QAAQ,GAA2C;AACrF,QAAM,EAAE,QAAQ,IAAI,kBAAkB,OAAO;AAC7C,QAAM,YAAY,YAAY,EAAE,SAAS,aAAa,EAAE,OAAO,GAAG,CAAC;AACnE,QAAM,EAAE,UAAU,KAAK,IAAI,gBAAgB;AAAA,IACzC,UAAU,SAAS;AAAA,IACnB,MAAM,SAAS;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AAED,SACE,qBAAC,UAAK,WAAU,4CACd;AAAA,wBAAC,UAAK,WAAW,GAAG,uEAAuE,UAAU,YAAY,SAAS,GACxH;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,aAAa;AAAA,QAClB,KAAI;AAAA,QACJ,MAAI;AAAA,QACJ,aAAW;AAAA,QACX,WAAW,YAAY,iBAAiB;AAAA;AAAA,IAC1C,GACF;AAAA,IACC,OACC,oBAAC,UAAK,WAAW,GAAG,sBAAsB,UAAU,0BAA0B,WAAW,GAAI,gBAAK,IAElG,oBAAC,kBAAe,SAAkB,OAAO,GAAG,UAAU,OAAO,WAAW,UAAU,0BAA0B,uBAAuB;AAAA,KAEvI;AAEJ;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,EAAE,MAAM,UAAU,IAAI,eAAe,GAAG,KAAK;AACnD,QAAM,OAAO,MAAM,QAAQ,CAAC;AAE5B,QAAM,mBAAmB,YAAY,iBAAiB,YAAY,SAAS,IAAI;AAE/E,SACE,qBAAC,SAAI,WAAW,GAAG,UAAU,KAAK,aAAa,SAAS,GACrD;AAAA,mBACC,qBAAC,SAAI,WAAU,2BACb;AAAA,0BAAC,SAAI,WAAU,6HACb,8BAAC,YAAS,WAAU,eAAc,GACpC;AAAA,MACA,oBAAC,QAAG,WAAU,sBAAqB,+BAAiB;AAAA,OACtD;AAAA,IAGD,YACC,oBAAC,SAAI,WAAW,UAAU,8BAA8B,eACrD,gBAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAClD,oBAAC,YAAiB,WAAW,UAAU,6BAA6B,4BAArD,CAA+E,CAC/F,GACH,IACE,KAAK,WAAW,IAClB,oBAAC,OAAE,WAAW,GAAG,sCAAsC,WAAW,MAAM,GAAG,6DAE3E,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,eAAe,CAAC,YACd,oBAAC,QAAK,MAAM,YAAY,EAAE,QAAQ,CAAC,GAAG,WAAU,2CAC9C,8BAAC,mBAAgB,SAAkB,SAAkB,GACvD;AAAA;AAAA,IAEJ;AAAA,IAGD,eAAe,KAAK,SAAS,KAC5B;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,WAAU;AAAA,QACX;AAAA;AAAA,IAED;AAAA,KAEJ;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/leaderboard-panel.tsx"],"sourcesContent":["\"use client\";\n\nimport { Sparkles } from \"lucide-react\";\nimport { normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport Image from \"../image.js\";\nimport Link from \"../link.js\";\nimport { Skeleton } from \"../skeleton.js\";\nimport { AddressDisplay } from \"../address-display.js\";\nimport { LeaderboardTable } from \"./leaderboard-table.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { profileIdentity } from \"../../utils/profile-identity.js\";\nimport { useCreatorProfile } from \"../../utils/use-profiles.js\";\nimport { useImageUrl } from \"../../utils/use-image-url.js\";\nimport { useLeaderboard } from \"../../utils/use-rewards.js\";\n\nexport interface LeaderboardPanelProps {\n myAddress?: string | null;\n limit?: number;\n showHeading?: boolean;\n viewAllHref?: string;\n compact?: boolean;\n className?: string;\n}\n\nfunction CreatorIdentity({ address, compact }: { address: string; compact?: boolean }) {\n const { profile } = useCreatorProfile(address);\n const avatarUrl = useImageUrl()(profile?.avatarImage, { width: 96 });\n const { identity: name } = profileIdentity({\n username: profile?.username,\n name: profile?.name,\n walletAddress: address,\n });\n\n return (\n <span className=\"inline-flex min-w-0 items-center gap-2.5\">\n <span className=\"relative h-9 w-9 shrink-0 overflow-hidden rounded-full bg-foreground/[0.08]\">\n <Image\n src={avatarUrl ?? \"/icon.png\"}\n alt=\"\"\n fill\n unoptimized\n className={avatarUrl ? \"object-cover\" : \"object-cover p-[15%] opacity-50\"}\n />\n </span>\n {name ? (\n <span className={cn(\"truncate font-bold\", compact ? \"text-sm font-semibold\" : \"text-base\")}>{name}</span>\n ) : (\n <AddressDisplay address={address} chars={4} showCopy={false} className={compact ? \"text-sm font-semibold\" : \"text-base font-bold\"} />\n )}\n </span>\n );\n}\n\nexport function LeaderboardPanel({\n myAddress,\n limit = 20,\n showHeading = true,\n viewAllHref,\n compact,\n className,\n}: LeaderboardPanelProps) {\n const { data, isLoading } = useLeaderboard(1, limit);\n const rows = data?.data ?? [];\n\n const highlightAddress = myAddress ? normalizeAddress(\"STARKNET\", myAddress) : null;\n\n return (\n <div className={cn(compact ? \"\" : \"space-y-3\", className)}>\n {showHeading && (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex h-7 w-7 items-center justify-center rounded-lg bg-gradient-to-br from-brand-rose to-brand-orange text-white shrink-0\">\n <Sparkles className=\"h-3.5 w-3.5\" />\n </div>\n <h2 className=\"text-sm font-black\">Community Rewards</h2>\n </div>\n )}\n\n {isLoading ? (\n <div className={compact ? \"divide-y divide-border/40\" : \"space-y-1.5\"}>\n {Array.from({ length: Math.min(limit, 6) }).map((_, i) => (\n <Skeleton key={i} className={compact ? \"h-16 w-full rounded-none\" : \"h-10 w-full rounded-lg\"} />\n ))}\n </div>\n ) : rows.length === 0 ? (\n <p className={cn(\"text-sm text-muted-foreground py-4\", compact && \"px-4\")}>\n Nobody&apos;s earned points yet — be the first.\n </p>\n ) : (\n <LeaderboardTable\n entries={rows}\n highlightAddress={highlightAddress}\n compact={compact}\n renderAddress={(address) => (\n <Link href={profileHref({ address })} className=\"hover:text-foreground transition-colors\">\n <CreatorIdentity address={address} compact={compact} />\n </Link>\n )}\n />\n )}\n\n {viewAllHref && rows.length > 0 && (\n <Link\n href={viewAllHref}\n className=\"inline-flex items-center gap-1 text-xs font-semibold text-muted-foreground hover:text-foreground transition-colors pt-1\"\n >\n View scoreboard →\n </Link>\n )}\n </div>\n );\n}\n"],"mappings":";AAkCI,SAEI,KAFJ;AAhCJ,SAAS,gBAAgB;AACzB,SAAS,kBAAkB,mBAAmB;AAC9C,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,UAAU;AACnB,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAClC,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAW/B,SAAS,gBAAgB,EAAE,SAAS,QAAQ,GAA2C;AACrF,QAAM,EAAE,QAAQ,IAAI,kBAAkB,OAAO;AAC7C,QAAM,YAAY,YAAY,EAAE,SAAS,aAAa,EAAE,OAAO,GAAG,CAAC;AACnE,QAAM,EAAE,UAAU,KAAK,IAAI,gBAAgB;AAAA,IACzC,UAAU,SAAS;AAAA,IACnB,MAAM,SAAS;AAAA,IACf,eAAe;AAAA,EACjB,CAAC;AAED,SACE,qBAAC,UAAK,WAAU,4CACd;AAAA,wBAAC,UAAK,WAAU,+EACd;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,aAAa;AAAA,QAClB,KAAI;AAAA,QACJ,MAAI;AAAA,QACJ,aAAW;AAAA,QACX,WAAW,YAAY,iBAAiB;AAAA;AAAA,IAC1C,GACF;AAAA,IACC,OACC,oBAAC,UAAK,WAAW,GAAG,sBAAsB,UAAU,0BAA0B,WAAW,GAAI,gBAAK,IAElG,oBAAC,kBAAe,SAAkB,OAAO,GAAG,UAAU,OAAO,WAAW,UAAU,0BAA0B,uBAAuB;AAAA,KAEvI;AAEJ;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,EAAE,MAAM,UAAU,IAAI,eAAe,GAAG,KAAK;AACnD,QAAM,OAAO,MAAM,QAAQ,CAAC;AAE5B,QAAM,mBAAmB,YAAY,iBAAiB,YAAY,SAAS,IAAI;AAE/E,SACE,qBAAC,SAAI,WAAW,GAAG,UAAU,KAAK,aAAa,SAAS,GACrD;AAAA,mBACC,qBAAC,SAAI,WAAU,2BACb;AAAA,0BAAC,SAAI,WAAU,6HACb,8BAAC,YAAS,WAAU,eAAc,GACpC;AAAA,MACA,oBAAC,QAAG,WAAU,sBAAqB,+BAAiB;AAAA,OACtD;AAAA,IAGD,YACC,oBAAC,SAAI,WAAW,UAAU,8BAA8B,eACrD,gBAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAClD,oBAAC,YAAiB,WAAW,UAAU,6BAA6B,4BAArD,CAA+E,CAC/F,GACH,IACE,KAAK,WAAW,IAClB,oBAAC,OAAE,WAAW,GAAG,sCAAsC,WAAW,MAAM,GAAG,6DAE3E,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,eAAe,CAAC,YACd,oBAAC,QAAK,MAAM,YAAY,EAAE,QAAQ,CAAC,GAAG,WAAU,2CAC9C,8BAAC,mBAAgB,SAAkB,SAAkB,GACvD;AAAA;AAAA,IAEJ;AAAA,IAGD,eAAe,KAAK,SAAS,KAC5B;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN,WAAU;AAAA,QACX;AAAA;AAAA,IAED;AAAA,KAEJ;AAEJ;","names":[]}
@@ -30,7 +30,7 @@ function LeaderboardTable({ entries, highlightAddress, renderAddress, compact, c
30
30
  if (compact) {
31
31
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_cn.cn)("divide-y divide-border/40", className), children: entries.map((e) => {
32
32
  const isViewer = highlightAddress != null && e.address === highlightAddress;
33
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: (0, import_cn.cn)("flex items-center gap-3 px-4 py-2.5", isViewer && "bg-brand-rose/10"), children: [
33
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: (0, import_cn.cn)("flex h-16 items-center gap-3 px-4", isViewer && "bg-brand-rose/10"), children: [
34
34
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "w-4 shrink-0 text-xs font-medium tabular-nums text-muted-foreground", children: e.rank }),
35
35
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "min-w-0 flex-1 truncate text-sm font-semibold", children: [
36
36
  renderAddress ? renderAddress(e.address) : (0, import_address.shortenAddress)(e.address),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/leaderboard-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { shortenAddress } from \"../../utils/address.js\";\nimport { LevelBadge } from \"./level-badge.js\";\n\nexport interface LeaderboardEntryLike {\n\n rank: number;\n address: string;\n publicId?: string | null;\n totalXp: number;\n currentLevel: number;\n currentLevelName: string;\n badgeColor: string;\n}\n\nexport interface LeaderboardTableProps {\n entries: LeaderboardEntryLike[];\n\n highlightAddress?: string | null;\n\n renderAddress?: (address: string) => ReactNode;\n compact?: boolean;\n className?: string;\n}\n\nexport function LeaderboardTable({ entries, highlightAddress, renderAddress, compact, className }: LeaderboardTableProps) {\n if (compact) {\n return (\n <div className={cn(\"divide-y divide-border/40\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div key={e.address} className={cn(\"flex items-center gap-3 px-4 py-2.5\", isViewer && \"bg-brand-rose/10\")}>\n <span className=\"w-4 shrink-0 text-xs font-medium tabular-nums text-muted-foreground\">{e.rank}</span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-semibold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-sm font-bold tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-medium text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n }\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div\n key={e.address}\n className={cn(\n \"flex items-center gap-4 rounded-2xl px-4 py-3.5 transition-colors\",\n isViewer ? \"bg-brand-rose/10\" : \"bg-foreground/[0.04] hover:bg-foreground/[0.07]\"\n )}\n >\n <span className=\"min-w-0 flex-1 truncate text-base font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-lg font-black tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-bold text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface LeaderboardWidgetProps {\n entries: LeaderboardEntryLike[];\n title?: string;\n\n href?: string;\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\nexport function LeaderboardWidget({ entries, title = \"Community Rewards\", href, renderAddress, className }: LeaderboardWidgetProps) {\n if (entries.length === 0) return null;\n return (\n <section className={cn(\"rounded-2xl bg-foreground/[0.04] p-5\", className)}>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-lg font-black\">{title}</h2>\n {href && (\n <a href={href} className=\"text-xs font-bold text-foreground/50 hover:text-foreground active:opacity-70\">\n View scoreboard →\n </a>\n )}\n </div>\n <ol className=\"space-y-2.5\">\n {entries.map((e) => (\n <li key={e.address} className=\"flex items-center gap-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCc;AAjCd,gBAAmB;AACnB,qBAA+B;AAC/B,yBAA2B;AAuBpB,SAAS,iBAAiB,EAAE,SAAS,kBAAkB,eAAe,SAAS,UAAU,GAA0B;AACxH,MAAI,SAAS;AACX,WACE,4CAAC,SAAI,eAAW,cAAG,6BAA6B,SAAS,GACtD,kBAAQ,IAAI,CAAC,MAAM;AAClB,YAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,aACE,6CAAC,SAAoB,eAAW,cAAG,uCAAuC,YAAY,kBAAkB,GACtG;AAAA,oDAAC,UAAK,WAAU,uEAAuE,YAAE,MAAK;AAAA,QAC9F,6CAAC,UAAK,WAAU,iDACb;AAAA,0BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO;AAAA,UACnE,YAAY,4CAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,WACpF;AAAA,QACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,QACnI,6CAAC,UAAK,WAAU,2CACb;AAAA,YAAE,QAAQ,eAAe;AAAA,UAC1B,4CAAC,UAAK,WAAU,+CAA8C,gBAAE;AAAA,WAClE;AAAA,WAVQ,EAAE,OAWZ;AAAA,IAEJ,CAAC,GACH;AAAA,EAEJ;AACA,SACE,4CAAC,SAAI,eAAW,cAAG,eAAe,SAAS,GACxC,kBAAQ,IAAI,CAAC,MAAM;AAClB,UAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,eAAW;AAAA,UACT;AAAA,UACA,WAAW,qBAAqB;AAAA,QAClC;AAAA,QAEA;AAAA,uDAAC,UAAK,WAAU,+CACb;AAAA,4BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO;AAAA,YACnE,YAAY,4CAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,aACpF;AAAA,UACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,UACnI,6CAAC,UAAK,WAAU,4CACb;AAAA,cAAE,QAAQ,eAAe;AAAA,YAC1B,4CAAC,UAAK,WAAU,6CAA4C,gBAAE;AAAA,aAChE;AAAA;AAAA;AAAA,MAdK,EAAE;AAAA,IAeT;AAAA,EAEJ,CAAC,GACH;AAEJ;AAWO,SAAS,kBAAkB,EAAE,SAAS,QAAQ,qBAAqB,MAAM,eAAe,UAAU,GAA2B;AAClI,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,6CAAC,aAAQ,eAAW,cAAG,wCAAwC,SAAS,GACtE;AAAA,iDAAC,SAAI,WAAU,0CACb;AAAA,kDAAC,QAAG,WAAU,sBAAsB,iBAAM;AAAA,MACzC,QACC,4CAAC,OAAE,MAAY,WAAU,gFAA+E,oCAExG;AAAA,OAEJ;AAAA,IACA,4CAAC,QAAG,WAAU,eACX,kBAAQ,IAAI,CAAC,MACZ,6CAAC,QAAmB,WAAU,6BAC5B;AAAA,kDAAC,UAAK,WAAU,6CACb,0BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO,GACtE;AAAA,MACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK;AAAA,SAJ1F,EAAE,OAKX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/leaderboard-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { shortenAddress } from \"../../utils/address.js\";\nimport { LevelBadge } from \"./level-badge.js\";\n\nexport interface LeaderboardEntryLike {\n\n rank: number;\n address: string;\n publicId?: string | null;\n totalXp: number;\n currentLevel: number;\n currentLevelName: string;\n badgeColor: string;\n}\n\nexport interface LeaderboardTableProps {\n entries: LeaderboardEntryLike[];\n\n highlightAddress?: string | null;\n\n renderAddress?: (address: string) => ReactNode;\n compact?: boolean;\n className?: string;\n}\n\nexport function LeaderboardTable({ entries, highlightAddress, renderAddress, compact, className }: LeaderboardTableProps) {\n if (compact) {\n return (\n <div className={cn(\"divide-y divide-border/40\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div key={e.address} className={cn(\"flex h-16 items-center gap-3 px-4\", isViewer && \"bg-brand-rose/10\")}>\n <span className=\"w-4 shrink-0 text-xs font-medium tabular-nums text-muted-foreground\">{e.rank}</span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-semibold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-sm font-bold tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-medium text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n }\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div\n key={e.address}\n className={cn(\n \"flex items-center gap-4 rounded-2xl px-4 py-3.5 transition-colors\",\n isViewer ? \"bg-brand-rose/10\" : \"bg-foreground/[0.04] hover:bg-foreground/[0.07]\"\n )}\n >\n <span className=\"min-w-0 flex-1 truncate text-base font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-lg font-black tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-bold text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface LeaderboardWidgetProps {\n entries: LeaderboardEntryLike[];\n title?: string;\n\n href?: string;\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\nexport function LeaderboardWidget({ entries, title = \"Community Rewards\", href, renderAddress, className }: LeaderboardWidgetProps) {\n if (entries.length === 0) return null;\n return (\n <section className={cn(\"rounded-2xl bg-foreground/[0.04] p-5\", className)}>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-lg font-black\">{title}</h2>\n {href && (\n <a href={href} className=\"text-xs font-bold text-foreground/50 hover:text-foreground active:opacity-70\">\n View scoreboard →\n </a>\n )}\n </div>\n <ol className=\"space-y-2.5\">\n {entries.map((e) => (\n <li key={e.address} className=\"flex items-center gap-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCc;AAjCd,gBAAmB;AACnB,qBAA+B;AAC/B,yBAA2B;AAuBpB,SAAS,iBAAiB,EAAE,SAAS,kBAAkB,eAAe,SAAS,UAAU,GAA0B;AACxH,MAAI,SAAS;AACX,WACE,4CAAC,SAAI,eAAW,cAAG,6BAA6B,SAAS,GACtD,kBAAQ,IAAI,CAAC,MAAM;AAClB,YAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,aACE,6CAAC,SAAoB,eAAW,cAAG,qCAAqC,YAAY,kBAAkB,GACpG;AAAA,oDAAC,UAAK,WAAU,uEAAuE,YAAE,MAAK;AAAA,QAC9F,6CAAC,UAAK,WAAU,iDACb;AAAA,0BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO;AAAA,UACnE,YAAY,4CAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,WACpF;AAAA,QACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,QACnI,6CAAC,UAAK,WAAU,2CACb;AAAA,YAAE,QAAQ,eAAe;AAAA,UAC1B,4CAAC,UAAK,WAAU,+CAA8C,gBAAE;AAAA,WAClE;AAAA,WAVQ,EAAE,OAWZ;AAAA,IAEJ,CAAC,GACH;AAAA,EAEJ;AACA,SACE,4CAAC,SAAI,eAAW,cAAG,eAAe,SAAS,GACxC,kBAAQ,IAAI,CAAC,MAAM;AAClB,UAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,eAAW;AAAA,UACT;AAAA,UACA,WAAW,qBAAqB;AAAA,QAClC;AAAA,QAEA;AAAA,uDAAC,UAAK,WAAU,+CACb;AAAA,4BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO;AAAA,YACnE,YAAY,4CAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,aACpF;AAAA,UACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,UACnI,6CAAC,UAAK,WAAU,4CACb;AAAA,cAAE,QAAQ,eAAe;AAAA,YAC1B,4CAAC,UAAK,WAAU,6CAA4C,gBAAE;AAAA,aAChE;AAAA;AAAA;AAAA,MAdK,EAAE;AAAA,IAeT;AAAA,EAEJ,CAAC,GACH;AAEJ;AAWO,SAAS,kBAAkB,EAAE,SAAS,QAAQ,qBAAqB,MAAM,eAAe,UAAU,GAA2B;AAClI,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,6CAAC,aAAQ,eAAW,cAAG,wCAAwC,SAAS,GACtE;AAAA,iDAAC,SAAI,WAAU,0CACb;AAAA,kDAAC,QAAG,WAAU,sBAAsB,iBAAM;AAAA,MACzC,QACC,4CAAC,OAAE,MAAY,WAAU,gFAA+E,oCAExG;AAAA,OAEJ;AAAA,IACA,4CAAC,QAAG,WAAU,eACX,kBAAQ,IAAI,CAAC,MACZ,6CAAC,QAAmB,WAAU,6BAC5B;AAAA,kDAAC,UAAK,WAAU,6CACb,0BAAgB,cAAc,EAAE,OAAO,QAAI,+BAAe,EAAE,OAAO,GACtE;AAAA,MACA,4CAAC,iCAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK;AAAA,SAJ1F,EAAE,OAKX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -6,7 +6,7 @@ function LeaderboardTable({ entries, highlightAddress, renderAddress, compact, c
6
6
  if (compact) {
7
7
  return /* @__PURE__ */ jsx("div", { className: cn("divide-y divide-border/40", className), children: entries.map((e) => {
8
8
  const isViewer = highlightAddress != null && e.address === highlightAddress;
9
- return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-3 px-4 py-2.5", isViewer && "bg-brand-rose/10"), children: [
9
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex h-16 items-center gap-3 px-4", isViewer && "bg-brand-rose/10"), children: [
10
10
  /* @__PURE__ */ jsx("span", { className: "w-4 shrink-0 text-xs font-medium tabular-nums text-muted-foreground", children: e.rank }),
11
11
  /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1 truncate text-sm font-semibold", children: [
12
12
  renderAddress ? renderAddress(e.address) : shortenAddress(e.address),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/rewards/leaderboard-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { shortenAddress } from \"../../utils/address.js\";\nimport { LevelBadge } from \"./level-badge.js\";\n\nexport interface LeaderboardEntryLike {\n\n rank: number;\n address: string;\n publicId?: string | null;\n totalXp: number;\n currentLevel: number;\n currentLevelName: string;\n badgeColor: string;\n}\n\nexport interface LeaderboardTableProps {\n entries: LeaderboardEntryLike[];\n\n highlightAddress?: string | null;\n\n renderAddress?: (address: string) => ReactNode;\n compact?: boolean;\n className?: string;\n}\n\nexport function LeaderboardTable({ entries, highlightAddress, renderAddress, compact, className }: LeaderboardTableProps) {\n if (compact) {\n return (\n <div className={cn(\"divide-y divide-border/40\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div key={e.address} className={cn(\"flex items-center gap-3 px-4 py-2.5\", isViewer && \"bg-brand-rose/10\")}>\n <span className=\"w-4 shrink-0 text-xs font-medium tabular-nums text-muted-foreground\">{e.rank}</span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-semibold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-sm font-bold tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-medium text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n }\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div\n key={e.address}\n className={cn(\n \"flex items-center gap-4 rounded-2xl px-4 py-3.5 transition-colors\",\n isViewer ? \"bg-brand-rose/10\" : \"bg-foreground/[0.04] hover:bg-foreground/[0.07]\"\n )}\n >\n <span className=\"min-w-0 flex-1 truncate text-base font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-lg font-black tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-bold text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface LeaderboardWidgetProps {\n entries: LeaderboardEntryLike[];\n title?: string;\n\n href?: string;\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\nexport function LeaderboardWidget({ entries, title = \"Community Rewards\", href, renderAddress, className }: LeaderboardWidgetProps) {\n if (entries.length === 0) return null;\n return (\n <section className={cn(\"rounded-2xl bg-foreground/[0.04] p-5\", className)}>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-lg font-black\">{title}</h2>\n {href && (\n <a href={href} className=\"text-xs font-bold text-foreground/50 hover:text-foreground active:opacity-70\">\n View scoreboard →\n </a>\n )}\n </div>\n <ol className=\"space-y-2.5\">\n {entries.map((e) => (\n <li key={e.address} className=\"flex items-center gap-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n"],"mappings":"AAkCc,cACA,YADA;AAjCd,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAuBpB,SAAS,iBAAiB,EAAE,SAAS,kBAAkB,eAAe,SAAS,UAAU,GAA0B;AACxH,MAAI,SAAS;AACX,WACE,oBAAC,SAAI,WAAW,GAAG,6BAA6B,SAAS,GACtD,kBAAQ,IAAI,CAAC,MAAM;AAClB,YAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,aACE,qBAAC,SAAoB,WAAW,GAAG,uCAAuC,YAAY,kBAAkB,GACtG;AAAA,4BAAC,UAAK,WAAU,uEAAuE,YAAE,MAAK;AAAA,QAC9F,qBAAC,UAAK,WAAU,iDACb;AAAA,0BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO;AAAA,UACnE,YAAY,oBAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,WACpF;AAAA,QACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,QACnI,qBAAC,UAAK,WAAU,2CACb;AAAA,YAAE,QAAQ,eAAe;AAAA,UAC1B,oBAAC,UAAK,WAAU,+CAA8C,gBAAE;AAAA,WAClE;AAAA,WAVQ,EAAE,OAWZ;AAAA,IAEJ,CAAC,GACH;AAAA,EAEJ;AACA,SACE,oBAAC,SAAI,WAAW,GAAG,eAAe,SAAS,GACxC,kBAAQ,IAAI,CAAC,MAAM;AAClB,UAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,qBAAqB;AAAA,QAClC;AAAA,QAEA;AAAA,+BAAC,UAAK,WAAU,+CACb;AAAA,4BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO;AAAA,YACnE,YAAY,oBAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,aACpF;AAAA,UACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,UACnI,qBAAC,UAAK,WAAU,4CACb;AAAA,cAAE,QAAQ,eAAe;AAAA,YAC1B,oBAAC,UAAK,WAAU,6CAA4C,gBAAE;AAAA,aAChE;AAAA;AAAA;AAAA,MAdK,EAAE;AAAA,IAeT;AAAA,EAEJ,CAAC,GACH;AAEJ;AAWO,SAAS,kBAAkB,EAAE,SAAS,QAAQ,qBAAqB,MAAM,eAAe,UAAU,GAA2B;AAClI,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,qBAAC,aAAQ,WAAW,GAAG,wCAAwC,SAAS,GACtE;AAAA,yBAAC,SAAI,WAAU,0CACb;AAAA,0BAAC,QAAG,WAAU,sBAAsB,iBAAM;AAAA,MACzC,QACC,oBAAC,OAAE,MAAY,WAAU,gFAA+E,oCAExG;AAAA,OAEJ;AAAA,IACA,oBAAC,QAAG,WAAU,eACX,kBAAQ,IAAI,CAAC,MACZ,qBAAC,QAAmB,WAAU,6BAC5B;AAAA,0BAAC,UAAK,WAAU,6CACb,0BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,GACtE;AAAA,MACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK;AAAA,SAJ1F,EAAE,OAKX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/rewards/leaderboard-table.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { shortenAddress } from \"../../utils/address.js\";\nimport { LevelBadge } from \"./level-badge.js\";\n\nexport interface LeaderboardEntryLike {\n\n rank: number;\n address: string;\n publicId?: string | null;\n totalXp: number;\n currentLevel: number;\n currentLevelName: string;\n badgeColor: string;\n}\n\nexport interface LeaderboardTableProps {\n entries: LeaderboardEntryLike[];\n\n highlightAddress?: string | null;\n\n renderAddress?: (address: string) => ReactNode;\n compact?: boolean;\n className?: string;\n}\n\nexport function LeaderboardTable({ entries, highlightAddress, renderAddress, compact, className }: LeaderboardTableProps) {\n if (compact) {\n return (\n <div className={cn(\"divide-y divide-border/40\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div key={e.address} className={cn(\"flex h-16 items-center gap-3 px-4\", isViewer && \"bg-brand-rose/10\")}>\n <span className=\"w-4 shrink-0 text-xs font-medium tabular-nums text-muted-foreground\">{e.rank}</span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-semibold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-sm font-bold tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-medium text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n }\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {entries.map((e) => {\n const isViewer = highlightAddress != null && e.address === highlightAddress;\n return (\n <div\n key={e.address}\n className={cn(\n \"flex items-center gap-4 rounded-2xl px-4 py-3.5 transition-colors\",\n isViewer ? \"bg-brand-rose/10\" : \"bg-foreground/[0.04] hover:bg-foreground/[0.07]\"\n )}\n >\n <span className=\"min-w-0 flex-1 truncate text-base font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n {isViewer && <span className=\"ml-1.5 text-xs font-medium text-foreground/50\">(you)</span>}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" className=\"hidden sm:inline-flex\" />\n <span className=\"shrink-0 text-lg font-black tabular-nums\">\n {e.totalXp.toLocaleString()}\n <span className=\"ml-1 text-xs font-bold text-foreground/40\">XP</span>\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport interface LeaderboardWidgetProps {\n entries: LeaderboardEntryLike[];\n title?: string;\n\n href?: string;\n renderAddress?: (address: string) => ReactNode;\n className?: string;\n}\n\nexport function LeaderboardWidget({ entries, title = \"Community Rewards\", href, renderAddress, className }: LeaderboardWidgetProps) {\n if (entries.length === 0) return null;\n return (\n <section className={cn(\"rounded-2xl bg-foreground/[0.04] p-5\", className)}>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-lg font-black\">{title}</h2>\n {href && (\n <a href={href} className=\"text-xs font-bold text-foreground/50 hover:text-foreground active:opacity-70\">\n View scoreboard →\n </a>\n )}\n </div>\n <ol className=\"space-y-2.5\">\n {entries.map((e) => (\n <li key={e.address} className=\"flex items-center gap-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-sm font-bold\">\n {renderAddress ? renderAddress(e.address) : shortenAddress(e.address)}\n </span>\n <LevelBadge level={e.currentLevel} name={e.currentLevelName} badgeColor={e.badgeColor} size=\"sm\" />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n"],"mappings":"AAkCc,cACA,YADA;AAjCd,SAAS,UAAU;AACnB,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAuBpB,SAAS,iBAAiB,EAAE,SAAS,kBAAkB,eAAe,SAAS,UAAU,GAA0B;AACxH,MAAI,SAAS;AACX,WACE,oBAAC,SAAI,WAAW,GAAG,6BAA6B,SAAS,GACtD,kBAAQ,IAAI,CAAC,MAAM;AAClB,YAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,aACE,qBAAC,SAAoB,WAAW,GAAG,qCAAqC,YAAY,kBAAkB,GACpG;AAAA,4BAAC,UAAK,WAAU,uEAAuE,YAAE,MAAK;AAAA,QAC9F,qBAAC,UAAK,WAAU,iDACb;AAAA,0BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO;AAAA,UACnE,YAAY,oBAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,WACpF;AAAA,QACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,QACnI,qBAAC,UAAK,WAAU,2CACb;AAAA,YAAE,QAAQ,eAAe;AAAA,UAC1B,oBAAC,UAAK,WAAU,+CAA8C,gBAAE;AAAA,WAClE;AAAA,WAVQ,EAAE,OAWZ;AAAA,IAEJ,CAAC,GACH;AAAA,EAEJ;AACA,SACE,oBAAC,SAAI,WAAW,GAAG,eAAe,SAAS,GACxC,kBAAQ,IAAI,CAAC,MAAM;AAClB,UAAM,WAAW,oBAAoB,QAAQ,EAAE,YAAY;AAC3D,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,WAAW,qBAAqB;AAAA,QAClC;AAAA,QAEA;AAAA,+BAAC,UAAK,WAAU,+CACb;AAAA,4BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO;AAAA,YACnE,YAAY,oBAAC,UAAK,WAAU,iDAAgD,mBAAK;AAAA,aACpF;AAAA,UACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK,WAAU,yBAAwB;AAAA,UACnI,qBAAC,UAAK,WAAU,4CACb;AAAA,cAAE,QAAQ,eAAe;AAAA,YAC1B,oBAAC,UAAK,WAAU,6CAA4C,gBAAE;AAAA,aAChE;AAAA;AAAA;AAAA,MAdK,EAAE;AAAA,IAeT;AAAA,EAEJ,CAAC,GACH;AAEJ;AAWO,SAAS,kBAAkB,EAAE,SAAS,QAAQ,qBAAqB,MAAM,eAAe,UAAU,GAA2B;AAClI,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,SACE,qBAAC,aAAQ,WAAW,GAAG,wCAAwC,SAAS,GACtE;AAAA,yBAAC,SAAI,WAAU,0CACb;AAAA,0BAAC,QAAG,WAAU,sBAAsB,iBAAM;AAAA,MACzC,QACC,oBAAC,OAAE,MAAY,WAAU,gFAA+E,oCAExG;AAAA,OAEJ;AAAA,IACA,oBAAC,QAAG,WAAU,eACX,kBAAQ,IAAI,CAAC,MACZ,qBAAC,QAAmB,WAAU,6BAC5B;AAAA,0BAAC,UAAK,WAAU,6CACb,0BAAgB,cAAc,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,GACtE;AAAA,MACA,oBAAC,cAAW,OAAO,EAAE,cAAc,MAAM,EAAE,kBAAkB,YAAY,EAAE,YAAY,MAAK,MAAK;AAAA,SAJ1F,EAAE,OAKX,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { SectionHeading } from \"./section-heading.js\";\n\nexport interface ScrollSectionProps {\n icon: React.ReactNode;\n title: string;\n subtitle?: React.ReactNode;\n href: string;\n linkLabel?: string;\n children: React.ReactNode;\n}\n\nexport function ScrollSection({ icon, title, subtitle, href, linkLabel, children }: ScrollSectionProps) {\n return (\n <section className=\"space-y-4\">\n <SectionHeading icon={icon} title={title} subtitle={subtitle} href={href} linkLabel={linkLabel} />\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeI;AAbJ,6BAA+B;AAWxB,SAAS,cAAc,EAAE,MAAM,OAAO,UAAU,MAAM,WAAW,SAAS,GAAuB;AACtG,SACE,6CAAC,aAAQ,WAAU,aACjB;AAAA,gDAAC,yCAAe,MAAY,OAAc,UAAoB,MAAY,WAAsB;AAAA,IAEhG,4CAAC,SAAI,WAAU,yCACb,sDAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { SectionHeading } from \"./section-heading.js\";\n\nexport interface ScrollSectionProps {\n icon: React.ReactNode;\n title: string;\n subtitle?: React.ReactNode;\n href?: string;\n linkLabel?: string;\n children: React.ReactNode;\n}\n\nexport function ScrollSection({ icon, title, subtitle, href, linkLabel, children }: ScrollSectionProps) {\n return (\n <section className=\"space-y-4\">\n <SectionHeading icon={icon} title={title} subtitle={subtitle} href={href} linkLabel={linkLabel} />\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeI;AAbJ,6BAA+B;AAWxB,SAAS,cAAc,EAAE,MAAM,OAAO,UAAU,MAAM,WAAW,SAAS,GAAuB;AACtG,SACE,6CAAC,aAAQ,WAAU,aACjB;AAAA,gDAAC,yCAAe,MAAY,OAAc,UAAoB,MAAY,WAAsB;AAAA,IAEhG,4CAAC,SAAI,WAAU,yCACb,sDAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -4,7 +4,7 @@ interface ScrollSectionProps {
4
4
  icon: React.ReactNode;
5
5
  title: string;
6
6
  subtitle?: React.ReactNode;
7
- href: string;
7
+ href?: string;
8
8
  linkLabel?: string;
9
9
  children: React.ReactNode;
10
10
  }
@@ -4,7 +4,7 @@ interface ScrollSectionProps {
4
4
  icon: React.ReactNode;
5
5
  title: string;
6
6
  subtitle?: React.ReactNode;
7
- href: string;
7
+ href?: string;
8
8
  linkLabel?: string;
9
9
  children: React.ReactNode;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { SectionHeading } from \"./section-heading.js\";\n\nexport interface ScrollSectionProps {\n icon: React.ReactNode;\n title: string;\n subtitle?: React.ReactNode;\n href: string;\n linkLabel?: string;\n children: React.ReactNode;\n}\n\nexport function ScrollSection({ icon, title, subtitle, href, linkLabel, children }: ScrollSectionProps) {\n return (\n <section className=\"space-y-4\">\n <SectionHeading icon={icon} title={title} subtitle={subtitle} href={href} linkLabel={linkLabel} />\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";AAeI,SACE,KADF;AAbJ,SAAS,sBAAsB;AAWxB,SAAS,cAAc,EAAE,MAAM,OAAO,UAAU,MAAM,WAAW,SAAS,GAAuB;AACtG,SACE,qBAAC,aAAQ,WAAU,aACjB;AAAA,wBAAC,kBAAe,MAAY,OAAc,UAAoB,MAAY,WAAsB;AAAA,IAEhG,oBAAC,SAAI,WAAU,yCACb,8BAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { SectionHeading } from \"./section-heading.js\";\n\nexport interface ScrollSectionProps {\n icon: React.ReactNode;\n title: string;\n subtitle?: React.ReactNode;\n href?: string;\n linkLabel?: string;\n children: React.ReactNode;\n}\n\nexport function ScrollSection({ icon, title, subtitle, href, linkLabel, children }: ScrollSectionProps) {\n return (\n <section className=\"space-y-4\">\n <SectionHeading icon={icon} title={title} subtitle={subtitle} href={href} linkLabel={linkLabel} />\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":";AAeI,SACE,KADF;AAbJ,SAAS,sBAAsB;AAWxB,SAAS,cAAc,EAAE,MAAM,OAAO,UAAU,MAAM,WAAW,SAAS,GAAuB;AACtG,SACE,qBAAC,aAAQ,WAAU,aACjB;AAAA,wBAAC,kBAAe,MAAY,OAAc,UAAoB,MAAY,WAAsB;AAAA,IAEhG,oBAAC,SAAI,WAAU,yCACb,8BAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -44,7 +44,7 @@ function SectionHeading({ icon, title, subtitle, href, linkLabel = "View all" })
44
44
  subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "mt-1 flex items-center gap-1 text-2xs text-muted-foreground", children: subtitle })
45
45
  ] })
46
46
  ] }),
47
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
47
+ href && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
48
48
  import_link.default,
49
49
  {
50
50
  href,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/section-heading.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight } from \"lucide-react\";\n\nexport interface SectionHeadingProps {\n icon: React.ReactNode;\n title: string;\n subtitle?: React.ReactNode;\n href: string;\n linkLabel?: string;\n}\n\nexport function SectionHeading({ icon, title, subtitle, href, linkLabel = \"View all\" }: SectionHeadingProps) {\n return (\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">{icon}</span>\n <div className=\"min-w-0\">\n <h2 className=\"text-sm font-semibold leading-none tracking-tight text-foreground\">{title}</h2>\n {subtitle && <p className=\"mt-1 flex items-center gap-1 text-2xs text-muted-foreground\">{subtitle}</p>}\n </div>\n </div>\n <Link\n href={href}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground\"\n >\n {linkLabel} <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBQ;AAfR,kBAAiB;AACjB,0BAA2B;AAUpB,SAAS,eAAe,EAAE,MAAM,OAAO,UAAU,MAAM,YAAY,WAAW,GAAwB;AAC3G,SACE,6CAAC,SAAI,WAAU,2CACb;AAAA,iDAAC,SAAI,WAAU,mCACb;AAAA,kDAAC,UAAK,WAAU,0DAA0D,gBAAK;AAAA,MAC/E,6CAAC,SAAI,WAAU,WACb;AAAA,oDAAC,QAAG,WAAU,qEAAqE,iBAAM;AAAA,QACxF,YAAY,4CAAC,OAAE,WAAU,+DAA+D,oBAAS;AAAA,SACpG;AAAA,OACF;AAAA,IACA;AAAA,MAAC,YAAAA;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAU;AAAA,QAET;AAAA;AAAA,UAAU;AAAA,UAAC,4CAAC,kCAAW,WAAU,WAAU;AAAA;AAAA;AAAA,IAC9C;AAAA,KACF;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/section-heading.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight } from \"lucide-react\";\n\nexport interface SectionHeadingProps {\n icon: React.ReactNode;\n title: string;\n subtitle?: React.ReactNode;\n href?: string;\n linkLabel?: string;\n}\n\nexport function SectionHeading({ icon, title, subtitle, href, linkLabel = \"View all\" }: SectionHeadingProps) {\n return (\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">{icon}</span>\n <div className=\"min-w-0\">\n <h2 className=\"text-sm font-semibold leading-none tracking-tight text-foreground\">{title}</h2>\n {subtitle && <p className=\"mt-1 flex items-center gap-1 text-2xs text-muted-foreground\">{subtitle}</p>}\n </div>\n </div>\n {href && (\n <Link\n href={href}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground\"\n >\n {linkLabel} <ArrowRight className=\"h-3 w-3\" />\n </Link>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBQ;AAfR,kBAAiB;AACjB,0BAA2B;AAUpB,SAAS,eAAe,EAAE,MAAM,OAAO,UAAU,MAAM,YAAY,WAAW,GAAwB;AAC3G,SACE,6CAAC,SAAI,WAAU,2CACb;AAAA,iDAAC,SAAI,WAAU,mCACb;AAAA,kDAAC,UAAK,WAAU,0DAA0D,gBAAK;AAAA,MAC/E,6CAAC,SAAI,WAAU,WACb;AAAA,oDAAC,QAAG,WAAU,qEAAqE,iBAAM;AAAA,QACxF,YAAY,4CAAC,OAAE,WAAU,+DAA+D,oBAAS;AAAA,SACpG;AAAA,OACF;AAAA,IACC,QACC;AAAA,MAAC,YAAAA;AAAA,MAAA;AAAA,QACC;AAAA,QACA,WAAU;AAAA,QAET;AAAA;AAAA,UAAU;AAAA,UAAC,4CAAC,kCAAW,WAAU,WAAU;AAAA;AAAA;AAAA,IAC9C;AAAA,KAEJ;AAEJ;","names":["Link"]}
@@ -4,7 +4,7 @@ interface SectionHeadingProps {
4
4
  icon: React.ReactNode;
5
5
  title: string;
6
6
  subtitle?: React.ReactNode;
7
- href: string;
7
+ href?: string;
8
8
  linkLabel?: string;
9
9
  }
10
10
  declare function SectionHeading({ icon, title, subtitle, href, linkLabel }: SectionHeadingProps): react_jsx_runtime.JSX.Element;
@@ -4,7 +4,7 @@ interface SectionHeadingProps {
4
4
  icon: React.ReactNode;
5
5
  title: string;
6
6
  subtitle?: React.ReactNode;
7
- href: string;
7
+ href?: string;
8
8
  linkLabel?: string;
9
9
  }
10
10
  declare function SectionHeading({ icon, title, subtitle, href, linkLabel }: SectionHeadingProps): react_jsx_runtime.JSX.Element;
@@ -11,7 +11,7 @@ function SectionHeading({ icon, title, subtitle, href, linkLabel = "View all" })
11
11
  subtitle && /* @__PURE__ */ jsx("p", { className: "mt-1 flex items-center gap-1 text-2xs text-muted-foreground", children: subtitle })
12
12
  ] })
13
13
  ] }),
14
- /* @__PURE__ */ jsxs(
14
+ href && /* @__PURE__ */ jsxs(
15
15
  Link,
16
16
  {
17
17
  href,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/section-heading.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight } from \"lucide-react\";\n\nexport interface SectionHeadingProps {\n icon: React.ReactNode;\n title: string;\n subtitle?: React.ReactNode;\n href: string;\n linkLabel?: string;\n}\n\nexport function SectionHeading({ icon, title, subtitle, href, linkLabel = \"View all\" }: SectionHeadingProps) {\n return (\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">{icon}</span>\n <div className=\"min-w-0\">\n <h2 className=\"text-sm font-semibold leading-none tracking-tight text-foreground\">{title}</h2>\n {subtitle && <p className=\"mt-1 flex items-center gap-1 text-2xs text-muted-foreground\">{subtitle}</p>}\n </div>\n </div>\n <Link\n href={href}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground\"\n >\n {linkLabel} <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n );\n}\n"],"mappings":";AAiBQ,cACA,YADA;AAfR,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAUpB,SAAS,eAAe,EAAE,MAAM,OAAO,UAAU,MAAM,YAAY,WAAW,GAAwB;AAC3G,SACE,qBAAC,SAAI,WAAU,2CACb;AAAA,yBAAC,SAAI,WAAU,mCACb;AAAA,0BAAC,UAAK,WAAU,0DAA0D,gBAAK;AAAA,MAC/E,qBAAC,SAAI,WAAU,WACb;AAAA,4BAAC,QAAG,WAAU,qEAAqE,iBAAM;AAAA,QACxF,YAAY,oBAAC,OAAE,WAAU,+DAA+D,oBAAS;AAAA,SACpG;AAAA,OACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAU;AAAA,QAET;AAAA;AAAA,UAAU;AAAA,UAAC,oBAAC,cAAW,WAAU,WAAU;AAAA;AAAA;AAAA,IAC9C;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/section-heading.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ArrowRight } from \"lucide-react\";\n\nexport interface SectionHeadingProps {\n icon: React.ReactNode;\n title: string;\n subtitle?: React.ReactNode;\n href?: string;\n linkLabel?: string;\n}\n\nexport function SectionHeading({ icon, title, subtitle, href, linkLabel = \"View all\" }: SectionHeadingProps) {\n return (\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">{icon}</span>\n <div className=\"min-w-0\">\n <h2 className=\"text-sm font-semibold leading-none tracking-tight text-foreground\">{title}</h2>\n {subtitle && <p className=\"mt-1 flex items-center gap-1 text-2xs text-muted-foreground\">{subtitle}</p>}\n </div>\n </div>\n {href && (\n <Link\n href={href}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground\"\n >\n {linkLabel} <ArrowRight className=\"h-3 w-3\" />\n </Link>\n )}\n </div>\n );\n}\n"],"mappings":";AAiBQ,cACA,YADA;AAfR,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAUpB,SAAS,eAAe,EAAE,MAAM,OAAO,UAAU,MAAM,YAAY,WAAW,GAAwB;AAC3G,SACE,qBAAC,SAAI,WAAU,2CACb;AAAA,yBAAC,SAAI,WAAU,mCACb;AAAA,0BAAC,UAAK,WAAU,0DAA0D,gBAAK;AAAA,MAC/E,qBAAC,SAAI,WAAU,WACb;AAAA,4BAAC,QAAG,WAAU,qEAAqE,iBAAM;AAAA,QACxF,YAAY,oBAAC,OAAE,WAAU,+DAA+D,oBAAS;AAAA,SACpG;AAAA,OACF;AAAA,IACC,QACC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAU;AAAA,QAET;AAAA;AAAA,UAAU;AAAA,UAAC,oBAAC,cAAW,WAAU,WAAU;AAAA;AAAA;AAAA,IAC9C;AAAA,KAEJ;AAEJ;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/ui",
3
- "version": "0.330.0",
3
+ "version": "0.332.0",
4
4
  "description": "Shared UI components for Medialane apps",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -1,51 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var discover_principles_exports = {};
20
- __export(discover_principles_exports, {
21
- DiscoverPrinciples: () => DiscoverPrinciples
22
- });
23
- module.exports = __toCommonJS(discover_principles_exports);
24
- var import_jsx_runtime = require("react/jsx-runtime");
25
- var import_lucide_react = require("lucide-react");
26
- const PRINCIPLES = [
27
- { icon: import_lucide_react.HandCoins, title: "99% to creators", line: "Creators and owners keep 99% of every sale." },
28
- { icon: import_lucide_react.Globe, title: "No one can take it down", line: "Your work stays up, whatever anyone thinks of it." },
29
- { icon: import_lucide_react.ShieldCheck, title: "Security you can verify", line: "Protected by mathematical proof, not promises." },
30
- { icon: import_lucide_react.EyeOff, title: "Private by design", line: "You choose what to share. The rest stays yours." },
31
- { icon: import_lucide_react.Percent, title: "No fees in the technology", line: "The technology itself charges nothing." },
32
- { icon: import_lucide_react.Lock, title: "Rules that never change", line: "Once launched, they stay exactly as written." },
33
- { icon: import_lucide_react.DoorOpen, title: "Open to everyone", line: "Create, sell and buy without asking permission." },
34
- { icon: import_lucide_react.BadgeCheck, title: "Ownership anyone can check", line: "What you own is public and verifiable." },
35
- { icon: import_lucide_react.FileCog, title: "Programmable IP", line: "Set your license once and it travels with your work." },
36
- { icon: import_lucide_react.PenLine, title: "Authorship, recorded for good", line: "Your claim to your work is permanent." }
37
- ];
38
- function DiscoverPrinciples() {
39
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("section", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dl", { className: "grid grid-cols-1 gap-x-8 gap-y-6 sm:grid-cols-2 lg:grid-cols-5", children: PRINCIPLES.map(({ icon: Icon, title, line }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-3 border-t border-border/50 pt-5", children: [
40
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-brand-blue/10 text-brand-blue", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { className: "h-4 w-4" }) }),
41
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1", children: [
42
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { className: "text-sm font-semibold leading-snug", children: title }),
43
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { className: "text-sm leading-relaxed text-muted-foreground", children: line })
44
- ] })
45
- ] }, title)) }) });
46
- }
47
- // Annotate the CommonJS export names for ESM import in node:
48
- 0 && (module.exports = {
49
- DiscoverPrinciples
50
- });
51
- //# sourceMappingURL=discover-principles.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/discover-principles.tsx"],"sourcesContent":["import {\n BadgeCheck,\n DoorOpen,\n EyeOff,\n FileCog,\n Globe,\n HandCoins,\n Lock,\n PenLine,\n Percent,\n ShieldCheck,\n type LucideIcon,\n} from \"lucide-react\";\n\nconst PRINCIPLES: ReadonlyArray<{ icon: LucideIcon; title: string; line: string }> = [\n { icon: HandCoins, title: \"99% to creators\", line: \"Creators and owners keep 99% of every sale.\" },\n { icon: Globe, title: \"No one can take it down\", line: \"Your work stays up, whatever anyone thinks of it.\" },\n { icon: ShieldCheck, title: \"Security you can verify\", line: \"Protected by mathematical proof, not promises.\" },\n { icon: EyeOff, title: \"Private by design\", line: \"You choose what to share. The rest stays yours.\" },\n { icon: Percent, title: \"No fees in the technology\", line: \"The technology itself charges nothing.\" },\n { icon: Lock, title: \"Rules that never change\", line: \"Once launched, they stay exactly as written.\" },\n { icon: DoorOpen, title: \"Open to everyone\", line: \"Create, sell and buy without asking permission.\" },\n { icon: BadgeCheck, title: \"Ownership anyone can check\", line: \"What you own is public and verifiable.\" },\n { icon: FileCog, title: \"Programmable IP\", line: \"Set your license once and it travels with your work.\" },\n { icon: PenLine, title: \"Authorship, recorded for good\", line: \"Your claim to your work is permanent.\" },\n];\n\nexport function DiscoverPrinciples() {\n return (\n <section>\n <dl className=\"grid grid-cols-1 gap-x-8 gap-y-6 sm:grid-cols-2 lg:grid-cols-5\">\n {PRINCIPLES.map(({ icon: Icon, title, line }) => (\n <div key={title} className=\"space-y-3 border-t border-border/50 pt-5\">\n <span className=\"flex h-9 w-9 items-center justify-center rounded-full bg-brand-blue/10 text-brand-blue\">\n <Icon className=\"h-4 w-4\" />\n </span>\n <div className=\"space-y-1\">\n <dt className=\"text-sm font-semibold leading-snug\">{title}</dt>\n <dd className=\"text-sm leading-relaxed text-muted-foreground\">{line}</dd>\n </div>\n </div>\n ))}\n </dl>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCc;AAlCd,0BAYO;AAEP,MAAM,aAA+E;AAAA,EACnF,EAAE,MAAM,+BAAW,OAAO,mBAAmB,MAAM,8CAA8C;AAAA,EACjG,EAAE,MAAM,2BAAO,OAAO,2BAA2B,MAAM,oDAAoD;AAAA,EAC3G,EAAE,MAAM,iCAAa,OAAO,2BAA2B,MAAM,iDAAiD;AAAA,EAC9G,EAAE,MAAM,4BAAQ,OAAO,qBAAqB,MAAM,kDAAkD;AAAA,EACpG,EAAE,MAAM,6BAAS,OAAO,6BAA6B,MAAM,yCAAyC;AAAA,EACpG,EAAE,MAAM,0BAAM,OAAO,2BAA2B,MAAM,+CAA+C;AAAA,EACrG,EAAE,MAAM,8BAAU,OAAO,oBAAoB,MAAM,kDAAkD;AAAA,EACrG,EAAE,MAAM,gCAAY,OAAO,8BAA8B,MAAM,yCAAyC;AAAA,EACxG,EAAE,MAAM,6BAAS,OAAO,mBAAmB,MAAM,uDAAuD;AAAA,EACxG,EAAE,MAAM,6BAAS,OAAO,iCAAiC,MAAM,wCAAwC;AACzG;AAEO,SAAS,qBAAqB;AACnC,SACE,4CAAC,aACC,sDAAC,QAAG,WAAU,kEACX,qBAAW,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,KAAK,MACzC,6CAAC,SAAgB,WAAU,4CACzB;AAAA,gDAAC,UAAK,WAAU,0FACd,sDAAC,QAAK,WAAU,WAAU,GAC5B;AAAA,IACA,6CAAC,SAAI,WAAU,aACb;AAAA,kDAAC,QAAG,WAAU,sCAAsC,iBAAM;AAAA,MAC1D,4CAAC,QAAG,WAAU,iDAAiD,gBAAK;AAAA,OACtE;AAAA,OAPQ,KAQV,CACD,GACH,GACF;AAEJ;","names":[]}
@@ -1,5 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
-
3
- declare function DiscoverPrinciples(): react_jsx_runtime.JSX.Element;
4
-
5
- export { DiscoverPrinciples };
@@ -1,5 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
-
3
- declare function DiscoverPrinciples(): react_jsx_runtime.JSX.Element;
4
-
5
- export { DiscoverPrinciples };
@@ -1,38 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import {
3
- BadgeCheck,
4
- DoorOpen,
5
- EyeOff,
6
- FileCog,
7
- Globe,
8
- HandCoins,
9
- Lock,
10
- PenLine,
11
- Percent,
12
- ShieldCheck
13
- } from "lucide-react";
14
- const PRINCIPLES = [
15
- { icon: HandCoins, title: "99% to creators", line: "Creators and owners keep 99% of every sale." },
16
- { icon: Globe, title: "No one can take it down", line: "Your work stays up, whatever anyone thinks of it." },
17
- { icon: ShieldCheck, title: "Security you can verify", line: "Protected by mathematical proof, not promises." },
18
- { icon: EyeOff, title: "Private by design", line: "You choose what to share. The rest stays yours." },
19
- { icon: Percent, title: "No fees in the technology", line: "The technology itself charges nothing." },
20
- { icon: Lock, title: "Rules that never change", line: "Once launched, they stay exactly as written." },
21
- { icon: DoorOpen, title: "Open to everyone", line: "Create, sell and buy without asking permission." },
22
- { icon: BadgeCheck, title: "Ownership anyone can check", line: "What you own is public and verifiable." },
23
- { icon: FileCog, title: "Programmable IP", line: "Set your license once and it travels with your work." },
24
- { icon: PenLine, title: "Authorship, recorded for good", line: "Your claim to your work is permanent." }
25
- ];
26
- function DiscoverPrinciples() {
27
- return /* @__PURE__ */ jsx("section", { children: /* @__PURE__ */ jsx("dl", { className: "grid grid-cols-1 gap-x-8 gap-y-6 sm:grid-cols-2 lg:grid-cols-5", children: PRINCIPLES.map(({ icon: Icon, title, line }) => /* @__PURE__ */ jsxs("div", { className: "space-y-3 border-t border-border/50 pt-5", children: [
28
- /* @__PURE__ */ jsx("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-brand-blue/10 text-brand-blue", children: /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" }) }),
29
- /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
30
- /* @__PURE__ */ jsx("dt", { className: "text-sm font-semibold leading-snug", children: title }),
31
- /* @__PURE__ */ jsx("dd", { className: "text-sm leading-relaxed text-muted-foreground", children: line })
32
- ] })
33
- ] }, title)) }) });
34
- }
35
- export {
36
- DiscoverPrinciples
37
- };
38
- //# sourceMappingURL=discover-principles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/discover-principles.tsx"],"sourcesContent":["import {\n BadgeCheck,\n DoorOpen,\n EyeOff,\n FileCog,\n Globe,\n HandCoins,\n Lock,\n PenLine,\n Percent,\n ShieldCheck,\n type LucideIcon,\n} from \"lucide-react\";\n\nconst PRINCIPLES: ReadonlyArray<{ icon: LucideIcon; title: string; line: string }> = [\n { icon: HandCoins, title: \"99% to creators\", line: \"Creators and owners keep 99% of every sale.\" },\n { icon: Globe, title: \"No one can take it down\", line: \"Your work stays up, whatever anyone thinks of it.\" },\n { icon: ShieldCheck, title: \"Security you can verify\", line: \"Protected by mathematical proof, not promises.\" },\n { icon: EyeOff, title: \"Private by design\", line: \"You choose what to share. The rest stays yours.\" },\n { icon: Percent, title: \"No fees in the technology\", line: \"The technology itself charges nothing.\" },\n { icon: Lock, title: \"Rules that never change\", line: \"Once launched, they stay exactly as written.\" },\n { icon: DoorOpen, title: \"Open to everyone\", line: \"Create, sell and buy without asking permission.\" },\n { icon: BadgeCheck, title: \"Ownership anyone can check\", line: \"What you own is public and verifiable.\" },\n { icon: FileCog, title: \"Programmable IP\", line: \"Set your license once and it travels with your work.\" },\n { icon: PenLine, title: \"Authorship, recorded for good\", line: \"Your claim to your work is permanent.\" },\n];\n\nexport function DiscoverPrinciples() {\n return (\n <section>\n <dl className=\"grid grid-cols-1 gap-x-8 gap-y-6 sm:grid-cols-2 lg:grid-cols-5\">\n {PRINCIPLES.map(({ icon: Icon, title, line }) => (\n <div key={title} className=\"space-y-3 border-t border-border/50 pt-5\">\n <span className=\"flex h-9 w-9 items-center justify-center rounded-full bg-brand-blue/10 text-brand-blue\">\n <Icon className=\"h-4 w-4\" />\n </span>\n <div className=\"space-y-1\">\n <dt className=\"text-sm font-semibold leading-snug\">{title}</dt>\n <dd className=\"text-sm leading-relaxed text-muted-foreground\">{line}</dd>\n </div>\n </div>\n ))}\n </dl>\n </section>\n );\n}\n"],"mappings":"AAkCc,cAEF,YAFE;AAlCd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAEP,MAAM,aAA+E;AAAA,EACnF,EAAE,MAAM,WAAW,OAAO,mBAAmB,MAAM,8CAA8C;AAAA,EACjG,EAAE,MAAM,OAAO,OAAO,2BAA2B,MAAM,oDAAoD;AAAA,EAC3G,EAAE,MAAM,aAAa,OAAO,2BAA2B,MAAM,iDAAiD;AAAA,EAC9G,EAAE,MAAM,QAAQ,OAAO,qBAAqB,MAAM,kDAAkD;AAAA,EACpG,EAAE,MAAM,SAAS,OAAO,6BAA6B,MAAM,yCAAyC;AAAA,EACpG,EAAE,MAAM,MAAM,OAAO,2BAA2B,MAAM,+CAA+C;AAAA,EACrG,EAAE,MAAM,UAAU,OAAO,oBAAoB,MAAM,kDAAkD;AAAA,EACrG,EAAE,MAAM,YAAY,OAAO,8BAA8B,MAAM,yCAAyC;AAAA,EACxG,EAAE,MAAM,SAAS,OAAO,mBAAmB,MAAM,uDAAuD;AAAA,EACxG,EAAE,MAAM,SAAS,OAAO,iCAAiC,MAAM,wCAAwC;AACzG;AAEO,SAAS,qBAAqB;AACnC,SACE,oBAAC,aACC,8BAAC,QAAG,WAAU,kEACX,qBAAW,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,KAAK,MACzC,qBAAC,SAAgB,WAAU,4CACzB;AAAA,wBAAC,UAAK,WAAU,0FACd,8BAAC,QAAK,WAAU,WAAU,GAC5B;AAAA,IACA,qBAAC,SAAI,WAAU,aACb;AAAA,0BAAC,QAAG,WAAU,sCAAsC,iBAAM;AAAA,MAC1D,oBAAC,QAAG,WAAU,iDAAiD,gBAAK;AAAA,OACtE;AAAA,OAPQ,KAQV,CACD,GACH,GACF;AAEJ;","names":[]}