@medialane/ui 0.315.0 → 0.316.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/badge.d.cts +1 -1
- package/dist/components/badge.d.ts +1 -1
- package/dist/components/button.d.cts +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/components/discover-collections-strip.cjs +1 -2
- package/dist/components/discover-collections-strip.cjs.map +1 -1
- package/dist/components/discover-collections-strip.js +1 -2
- package/dist/components/discover-collections-strip.js.map +1 -1
- package/dist/components/discover-community-section.cjs +6 -37
- package/dist/components/discover-community-section.cjs.map +1 -1
- package/dist/components/discover-community-section.js +6 -37
- package/dist/components/discover-community-section.js.map +1 -1
- package/dist/components/discover-feed-section.cjs +6 -33
- package/dist/components/discover-feed-section.cjs.map +1 -1
- package/dist/components/discover-feed-section.js +7 -34
- package/dist/components/discover-feed-section.js.map +1 -1
- package/dist/components/fast-mint/fast-mint.d.cts +2 -2
- package/dist/components/fast-mint/fast-mint.d.ts +2 -2
- package/dist/components/home-page.cjs +2 -4
- package/dist/components/home-page.cjs.map +1 -1
- package/dist/components/home-page.js +2 -4
- package/dist/components/home-page.js.map +1 -1
- package/dist/components/launchpad-strip.cjs +1 -2
- package/dist/components/launchpad-strip.cjs.map +1 -1
- package/dist/components/launchpad-strip.js +1 -2
- package/dist/components/launchpad-strip.js.map +1 -1
- package/dist/components/scroll-section.cjs +3 -42
- package/dist/components/scroll-section.cjs.map +1 -1
- package/dist/components/scroll-section.d.cts +1 -2
- package/dist/components/scroll-section.d.ts +1 -2
- package/dist/components/scroll-section.js +3 -32
- package/dist/components/scroll-section.js.map +1 -1
- package/dist/components/section-heading.cjs +65 -0
- package/dist/components/section-heading.cjs.map +1 -0
- package/dist/components/section-heading.d.cts +12 -0
- package/dist/components/section-heading.d.ts +12 -0
- package/dist/components/section-heading.js +31 -0
- package/dist/components/section-heading.js.map +1 -0
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "default" | "
|
|
7
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
10
10
|
}
|
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "default" | "
|
|
7
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
10
10
|
}
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const buttonVariants: (props?: ({
|
|
6
|
-
variant?: "default" | "
|
|
6
|
+
variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
|
|
7
7
|
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const buttonVariants: (props?: ({
|
|
6
|
-
variant?: "default" | "
|
|
6
|
+
variant?: "default" | "link" | "destructive" | "outline" | "secondary" | "ghost" | "premium" | "tonal" | "gradient-border" | "gradient-fill" | null | undefined;
|
|
7
7
|
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
@@ -35,8 +35,7 @@ function DiscoverCollectionsStrip({
|
|
|
35
35
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
36
36
|
import_scroll_section.ScrollSection,
|
|
37
37
|
{
|
|
38
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Layers, { className: "h-
|
|
39
|
-
iconBg: "bg-gradient-to-br from-brand-blue to-indigo-600 shadow-md shadow-brand-blue/20",
|
|
38
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Layers, { className: "h-4 w-4" }),
|
|
40
39
|
title,
|
|
41
40
|
href: allCollectionsHref,
|
|
42
41
|
linkLabel: "View all",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/discover-collections-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport type { ApiCollection } from \"@medialane/sdk\";\n\nexport interface DiscoverCollectionsStripProps {\n collections: ApiCollection[];\n isLoading: boolean;\n\n getHref?: (collection: ApiCollection) => string;\n allCollectionsHref?: string;\n\n sectionLabel?: string;\n title?: string;\n}\n\nexport function DiscoverCollectionsStrip({\n collections,\n isLoading,\n allCollectionsHref = \"/collections\",\n title = \"Collections\",\n}: DiscoverCollectionsStripProps) {\n return (\n <ScrollSection\n icon={<Layers className=\"h-
|
|
1
|
+
{"version":3,"sources":["../../src/components/discover-collections-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport type { ApiCollection } from \"@medialane/sdk\";\n\nexport interface DiscoverCollectionsStripProps {\n collections: ApiCollection[];\n isLoading: boolean;\n\n getHref?: (collection: ApiCollection) => string;\n allCollectionsHref?: string;\n\n sectionLabel?: string;\n title?: string;\n}\n\nexport function DiscoverCollectionsStrip({\n collections,\n isLoading,\n allCollectionsHref = \"/collections\",\n title = \"Collections\",\n}: DiscoverCollectionsStripProps) {\n return (\n <ScrollSection\n icon={<Layers className=\"h-4 w-4\" />}\n title={title}\n href={allCollectionsHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCardSkeleton />\n </div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCard collection={col} />\n </div>\n ))}\n </ScrollSection>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BY;AAxBZ,0BAAuB;AACvB,4BAA8B;AAC9B,6BAAuD;AAchD,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,QAAQ;AACV,GAAkC;AAChC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,4CAAC,8BAAO,WAAU,WAAU;AAAA,MAClC;AAAA,MACA,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,4CAAC,SAAY,WAAU,oCACrB,sDAAC,iDAAuB,KADhB,CAEV,CACD,IACD,YAAY,IAAI,CAAC,QACf,4CAAC,SAA8B,WAAU,oCACvC,sDAAC,yCAAe,YAAY,KAAK,KADzB,IAAI,eAEd,CACD;AAAA;AAAA,EACP;AAEJ;","names":[]}
|
|
@@ -12,8 +12,7 @@ function DiscoverCollectionsStrip({
|
|
|
12
12
|
return /* @__PURE__ */ jsx(
|
|
13
13
|
ScrollSection,
|
|
14
14
|
{
|
|
15
|
-
icon: /* @__PURE__ */ jsx(Layers, { className: "h-
|
|
16
|
-
iconBg: "bg-gradient-to-br from-brand-blue to-indigo-600 shadow-md shadow-brand-blue/20",
|
|
15
|
+
icon: /* @__PURE__ */ jsx(Layers, { className: "h-4 w-4" }),
|
|
17
16
|
title,
|
|
18
17
|
href: allCollectionsHref,
|
|
19
18
|
linkLabel: "View all",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/discover-collections-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport type { ApiCollection } from \"@medialane/sdk\";\n\nexport interface DiscoverCollectionsStripProps {\n collections: ApiCollection[];\n isLoading: boolean;\n\n getHref?: (collection: ApiCollection) => string;\n allCollectionsHref?: string;\n\n sectionLabel?: string;\n title?: string;\n}\n\nexport function DiscoverCollectionsStrip({\n collections,\n isLoading,\n allCollectionsHref = \"/collections\",\n title = \"Collections\",\n}: DiscoverCollectionsStripProps) {\n return (\n <ScrollSection\n icon={<Layers className=\"h-
|
|
1
|
+
{"version":3,"sources":["../../src/components/discover-collections-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport type { ApiCollection } from \"@medialane/sdk\";\n\nexport interface DiscoverCollectionsStripProps {\n collections: ApiCollection[];\n isLoading: boolean;\n\n getHref?: (collection: ApiCollection) => string;\n allCollectionsHref?: string;\n\n sectionLabel?: string;\n title?: string;\n}\n\nexport function DiscoverCollectionsStrip({\n collections,\n isLoading,\n allCollectionsHref = \"/collections\",\n title = \"Collections\",\n}: DiscoverCollectionsStripProps) {\n return (\n <ScrollSection\n icon={<Layers className=\"h-4 w-4\" />}\n title={title}\n href={allCollectionsHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCardSkeleton />\n </div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <CollectionCard collection={col} />\n </div>\n ))}\n </ScrollSection>\n );\n}\n"],"mappings":";AA0BY;AAxBZ,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB,8BAA8B;AAchD,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,QAAQ;AACV,GAAkC;AAChC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,oBAAC,UAAO,WAAU,WAAU;AAAA,MAClC;AAAA,MACA,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,oCACrB,8BAAC,0BAAuB,KADhB,CAEV,CACD,IACD,YAAY,IAAI,CAAC,QACf,oBAAC,SAA8B,WAAU,oCACvC,8BAAC,kBAAe,YAAY,KAAK,KADzB,IAAI,eAEd,CACD;AAAA;AAAA,EACP;AAEJ;","names":[]}
|
|
@@ -36,6 +36,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
36
36
|
var import_react = require("react");
|
|
37
37
|
var import_lucide_react = require("lucide-react");
|
|
38
38
|
var import_link = __toESM(require("./link.js"), 1);
|
|
39
|
+
var import_section_heading = require("./section-heading.js");
|
|
39
40
|
var import_skeleton = require("./skeleton.js");
|
|
40
41
|
var import_activity_row = require("./activity-row.js");
|
|
41
42
|
var import_medialane_app = require("./medialane-app.js");
|
|
@@ -45,36 +46,6 @@ var import_time = require("../utils/time.js");
|
|
|
45
46
|
var import_cn = require("../utils/cn.js");
|
|
46
47
|
var import_empty_messages = require("../utils/empty-messages.js");
|
|
47
48
|
const FEED_LIMIT = 8;
|
|
48
|
-
function ColumnHeader({
|
|
49
|
-
icon,
|
|
50
|
-
iconBg,
|
|
51
|
-
title,
|
|
52
|
-
caption,
|
|
53
|
-
href,
|
|
54
|
-
linkLabel
|
|
55
|
-
}) {
|
|
56
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
57
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
58
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_cn.cn)("h-7 w-7 rounded-lg flex items-center justify-center shadow-md shrink-0", iconBg), children: icon }),
|
|
59
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
60
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
|
|
61
|
-
caption && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs text-muted-foreground mt-1 flex items-center gap-1", children: caption })
|
|
62
|
-
] })
|
|
63
|
-
] }),
|
|
64
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
65
|
-
import_link.default,
|
|
66
|
-
{
|
|
67
|
-
href,
|
|
68
|
-
className: "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors shrink-0",
|
|
69
|
-
children: [
|
|
70
|
-
linkLabel,
|
|
71
|
-
" ",
|
|
72
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3.5 w-3.5" })
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
)
|
|
76
|
-
] });
|
|
77
|
-
}
|
|
78
49
|
function DiscoverCommunitySection() {
|
|
79
50
|
const { activities, isLoading } = (0, import_use_activities.useActivities)({ limit: FEED_LIMIT });
|
|
80
51
|
const { walletAddress: address } = (0, import_medialane_app.useMedialaneApp)();
|
|
@@ -85,12 +56,11 @@ function DiscoverCommunitySection() {
|
|
|
85
56
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start", children: [
|
|
86
57
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "lg:col-span-7 space-y-4 sm:space-y-5", children: [
|
|
87
58
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
88
|
-
|
|
59
|
+
import_section_heading.SectionHeading,
|
|
89
60
|
{
|
|
90
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-
|
|
91
|
-
iconBg: "bg-gradient-to-br from-brand-purple to-brand-blue shadow-brand-purple/20",
|
|
61
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-4 w-4" }),
|
|
92
62
|
title: "Activities",
|
|
93
|
-
|
|
63
|
+
subtitle: !isLoading && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
94
64
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.RefreshCw, { className: "h-2.5 w-2.5" }),
|
|
95
65
|
"Updated ",
|
|
96
66
|
(0, import_time.timeAgo)(lastUpdated)
|
|
@@ -121,10 +91,9 @@ function DiscoverCommunitySection() {
|
|
|
121
91
|
] }),
|
|
122
92
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "lg:col-span-5 space-y-4 sm:space-y-5", children: [
|
|
123
93
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
124
|
-
|
|
94
|
+
import_section_heading.SectionHeading,
|
|
125
95
|
{
|
|
126
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, { className: "h-
|
|
127
|
-
iconBg: "bg-gradient-to-br from-brand-rose to-brand-orange",
|
|
96
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, { className: "h-4 w-4" }),
|
|
128
97
|
title: "Rewards",
|
|
129
98
|
href: "/rewards",
|
|
130
99
|
linkLabel: "Scoreboard"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/discover-community-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Activity, ArrowRight, RefreshCw, Sparkles } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { ActivityRow } from \"./activity-row.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport { LeaderboardPanel } from \"./rewards/leaderboard-panel.js\";\nimport { useActivities } from \"../utils/use-activities.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nconst FEED_LIMIT = 8;\n\
|
|
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's Fund.</p>\n <Link\n href=\"/rewards\"\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-semibold text-brand-rose hover:opacity-80 transition-opacity\"\n >\n Start earning <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <LeaderboardPanel myAddress={address} limit={5} showHeading={false} compact />\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":["Link"]}
|
|
@@ -3,6 +3,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useEffect, useState } from "react";
|
|
4
4
|
import { Activity, ArrowRight, RefreshCw, Sparkles } from "lucide-react";
|
|
5
5
|
import Link from "./link.js";
|
|
6
|
+
import { SectionHeading } from "./section-heading.js";
|
|
6
7
|
import { Skeleton } from "./skeleton.js";
|
|
7
8
|
import { ActivityRow } from "./activity-row.js";
|
|
8
9
|
import { useMedialaneApp } from "./medialane-app.js";
|
|
@@ -12,36 +13,6 @@ import { timeAgo } from "../utils/time.js";
|
|
|
12
13
|
import { cn } from "../utils/cn.js";
|
|
13
14
|
import { emptyMessages } from "../utils/empty-messages.js";
|
|
14
15
|
const FEED_LIMIT = 8;
|
|
15
|
-
function ColumnHeader({
|
|
16
|
-
icon,
|
|
17
|
-
iconBg,
|
|
18
|
-
title,
|
|
19
|
-
caption,
|
|
20
|
-
href,
|
|
21
|
-
linkLabel
|
|
22
|
-
}) {
|
|
23
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
24
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
25
|
-
/* @__PURE__ */ jsx("div", { className: cn("h-7 w-7 rounded-lg flex items-center justify-center shadow-md shrink-0", iconBg), children: icon }),
|
|
26
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
27
|
-
/* @__PURE__ */ jsx("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
|
|
28
|
-
caption && /* @__PURE__ */ jsx("p", { className: "text-2xs text-muted-foreground mt-1 flex items-center gap-1", children: caption })
|
|
29
|
-
] })
|
|
30
|
-
] }),
|
|
31
|
-
/* @__PURE__ */ jsxs(
|
|
32
|
-
Link,
|
|
33
|
-
{
|
|
34
|
-
href,
|
|
35
|
-
className: "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors shrink-0",
|
|
36
|
-
children: [
|
|
37
|
-
linkLabel,
|
|
38
|
-
" ",
|
|
39
|
-
/* @__PURE__ */ jsx(ArrowRight, { className: "h-3.5 w-3.5" })
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
)
|
|
43
|
-
] });
|
|
44
|
-
}
|
|
45
16
|
function DiscoverCommunitySection() {
|
|
46
17
|
const { activities, isLoading } = useActivities({ limit: FEED_LIMIT });
|
|
47
18
|
const { walletAddress: address } = useMedialaneApp();
|
|
@@ -52,12 +23,11 @@ function DiscoverCommunitySection() {
|
|
|
52
23
|
return /* @__PURE__ */ jsxs("section", { className: "grid grid-cols-1 lg:grid-cols-12 gap-6 lg:gap-8 items-start", children: [
|
|
53
24
|
/* @__PURE__ */ jsxs("div", { className: "lg:col-span-7 space-y-4 sm:space-y-5", children: [
|
|
54
25
|
/* @__PURE__ */ jsx(
|
|
55
|
-
|
|
26
|
+
SectionHeading,
|
|
56
27
|
{
|
|
57
|
-
icon: /* @__PURE__ */ jsx(Activity, { className: "h-
|
|
58
|
-
iconBg: "bg-gradient-to-br from-brand-purple to-brand-blue shadow-brand-purple/20",
|
|
28
|
+
icon: /* @__PURE__ */ jsx(Activity, { className: "h-4 w-4" }),
|
|
59
29
|
title: "Activities",
|
|
60
|
-
|
|
30
|
+
subtitle: !isLoading && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
61
31
|
/* @__PURE__ */ jsx(RefreshCw, { className: "h-2.5 w-2.5" }),
|
|
62
32
|
"Updated ",
|
|
63
33
|
timeAgo(lastUpdated)
|
|
@@ -88,10 +58,9 @@ function DiscoverCommunitySection() {
|
|
|
88
58
|
] }),
|
|
89
59
|
/* @__PURE__ */ jsxs("div", { className: "lg:col-span-5 space-y-4 sm:space-y-5", children: [
|
|
90
60
|
/* @__PURE__ */ jsx(
|
|
91
|
-
|
|
61
|
+
SectionHeading,
|
|
92
62
|
{
|
|
93
|
-
icon: /* @__PURE__ */ jsx(Sparkles, { className: "h-
|
|
94
|
-
iconBg: "bg-gradient-to-br from-brand-rose to-brand-orange",
|
|
63
|
+
icon: /* @__PURE__ */ jsx(Sparkles, { className: "h-4 w-4" }),
|
|
95
64
|
title: "Rewards",
|
|
96
65
|
href: "/rewards",
|
|
97
66
|
linkLabel: "Scoreboard"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/discover-community-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Activity, ArrowRight, RefreshCw, Sparkles } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { Skeleton } from \"./skeleton.js\";\nimport { ActivityRow } from \"./activity-row.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport { LeaderboardPanel } from \"./rewards/leaderboard-panel.js\";\nimport { useActivities } from \"../utils/use-activities.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport { cn } from \"../utils/cn.js\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nconst FEED_LIMIT = 8;\n\
|
|
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's Fund.</p>\n <Link\n href=\"/rewards\"\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-semibold text-brand-rose hover:opacity-80 transition-opacity\"\n >\n Start earning <ArrowRight className=\"h-3 w-3\" />\n </Link>\n </div>\n <LeaderboardPanel myAddress={address} limit={5} showHeading={false} compact />\n </div>\n </div>\n </section>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -25,43 +25,18 @@ __export(discover_feed_section_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(discover_feed_section_exports);
|
|
26
26
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
27
27
|
var import_lucide_react = require("lucide-react");
|
|
28
|
+
var import_section_heading = require("./section-heading.js");
|
|
28
29
|
var import_motion_primitives = require("./motion-primitives.js");
|
|
29
30
|
var import_listing_card = require("./listing-card.js");
|
|
30
31
|
var import_activity_card = require("./activity-card.js");
|
|
31
32
|
var import_time = require("../utils/time.js");
|
|
32
|
-
var import_cn = require("../utils/cn.js");
|
|
33
33
|
var import_empty_messages = require("../utils/empty-messages.js");
|
|
34
34
|
function StripShell({
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
title,
|
|
38
|
-
subtitle,
|
|
39
|
-
href,
|
|
40
|
-
linkLabel,
|
|
41
|
-
children
|
|
35
|
+
children,
|
|
36
|
+
...heading
|
|
42
37
|
}) {
|
|
43
38
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "space-y-4", children: [
|
|
44
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
45
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
46
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_cn.cn)("h-7 w-7 rounded-lg flex items-center justify-center", iconBg), children: icon }),
|
|
47
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
48
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
|
|
49
|
-
subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs text-muted-foreground mt-1", children: subtitle })
|
|
50
|
-
] })
|
|
51
|
-
] }),
|
|
52
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
53
|
-
"a",
|
|
54
|
-
{
|
|
55
|
-
href,
|
|
56
|
-
className: "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors",
|
|
57
|
-
children: [
|
|
58
|
-
linkLabel,
|
|
59
|
-
" ",
|
|
60
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3.5 w-3.5" })
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
)
|
|
64
|
-
] }),
|
|
39
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_section_heading.SectionHeading, { ...heading }),
|
|
65
40
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full overflow-x-auto scrollbar-hide", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2", style: { width: "max-content" }, children }) })
|
|
66
41
|
] });
|
|
67
42
|
}
|
|
@@ -75,8 +50,7 @@ function DiscoverActivityStrip({
|
|
|
75
50
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_motion_primitives.FadeIn, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
76
51
|
StripShell,
|
|
77
52
|
{
|
|
78
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, { className: "h-
|
|
79
|
-
iconBg: "bg-gradient-to-br from-rose-500 to-pink-600 shadow-md shadow-rose-500/20",
|
|
53
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, { className: "h-4 w-4" }),
|
|
80
54
|
title: "Activity",
|
|
81
55
|
href: marketplaceHref,
|
|
82
56
|
linkLabel: "View all",
|
|
@@ -118,8 +92,7 @@ function DiscoverFeedSection({
|
|
|
118
92
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_motion_primitives.FadeIn, { delay: 0.08, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
119
93
|
StripShell,
|
|
120
94
|
{
|
|
121
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-
|
|
122
|
-
iconBg: "bg-gradient-to-br from-indigo-500 to-blue-600 shadow-md shadow-indigo-500/20",
|
|
95
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Activity, { className: "h-4 w-4" }),
|
|
123
96
|
title: "Community",
|
|
124
97
|
subtitle: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "flex items-center gap-1", children: [
|
|
125
98
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.RefreshCw, { className: "h-2.5 w-2.5" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/discover-feed-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag, Activity, RefreshCw
|
|
1
|
+
{"version":3,"sources":["../../src/components/discover-feed-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag, Activity, RefreshCw } from \"lucide-react\";\nimport { SectionHeading, type SectionHeadingProps } from \"./section-heading.js\";\nimport { FadeIn } from \"./motion-primitives.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ActivityCard, ActivityCardSkeleton } from \"./activity-card.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport type { ApiOrder, ApiActivity } from \"@medialane/sdk\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nexport interface DiscoverFeedSectionProps {\n orders: ApiOrder[];\n isLoading: boolean;\n activities: ApiActivity[];\n activitiesLoading: boolean;\n lastUpdated: string;\n explorerUrl?: string;\n marketplaceHref?: string;\n activitiesHref?: string;\n\n onBuyOrder?: (order: ApiOrder) => void;\n\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nfunction StripShell({\n children,\n ...heading\n}: SectionHeadingProps & { children: React.ReactNode }) {\n return (\n <section className=\"space-y-4\">\n <SectionHeading {...heading} />\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n\nexport interface DiscoverActivityStripProps {\n orders: ApiOrder[];\n isLoading: boolean;\n marketplaceHref?: string;\n onBuyOrder?: (order: ApiOrder) => void;\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nexport function DiscoverActivityStrip({\n orders,\n isLoading,\n marketplaceHref = \"/marketplace\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverActivityStripProps) {\n return (\n <FadeIn>\n <StripShell\n icon={<Tag className=\"h-4 w-4\" />}\n title=\"Activity\"\n href={marketplaceHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 snap-start shrink-0\">\n <ListingCardSkeleton />\n </div>\n ))\n : orders.length === 0\n ? (\n <p className=\"text-sm text-muted-foreground py-4\">No active listings yet.</p>\n )\n : orders.map((order) => {\n const own = isOwnOrder?.(order) ?? false;\n return (\n <div key={order.orderHash} className=\"w-72 snap-start shrink-0\">\n <ListingCard\n order={order}\n onBuy={onBuyOrder && !own ? () => onBuyOrder(order) : undefined}\n />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n );\n}\n\nexport function DiscoverFeedSection({\n orders,\n isLoading,\n activities,\n activitiesLoading,\n lastUpdated,\n marketplaceHref = \"/marketplace\",\n activitiesHref = \"/activities\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverFeedSectionProps) {\n return (\n <div className=\"space-y-14 sm:space-y-20\">\n <DiscoverActivityStrip\n orders={orders}\n isLoading={isLoading}\n marketplaceHref={marketplaceHref}\n onBuyOrder={onBuyOrder}\n isOwnOrder={isOwnOrder}\n />\n\n <FadeIn delay={0.08}>\n <StripShell\n icon={<Activity className=\"h-4 w-4\" />}\n title=\"Community\"\n subtitle={\n <span className=\"flex items-center gap-1\">\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </span>\n }\n href={activitiesHref}\n linkLabel=\"Activities\"\n >\n {activitiesLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCardSkeleton />\n </div>\n ))\n : activities.length === 0\n ? (\n <div className=\"py-4\">\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n )\n : activities.map((act, i) => {\n const key = act.txHash\n ? `${act.txHash}-${act.type}-${act.nftTokenId ?? \"\"}`\n : `activity-${i}`;\n return (\n <div key={key} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCard activity={act} />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BI;AA7BJ,0BAAyC;AACzC,6BAAyD;AACzD,+BAAuB;AACvB,0BAAiD;AACjD,2BAAmD;AACnD,kBAAwB;AAExB,4BAA8B;AAiB9B,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE,6CAAC,aAAQ,WAAU,aACjB;AAAA,gDAAC,yCAAgB,GAAG,SAAS;AAAA,IAE7B,4CAAC,SAAI,WAAU,yCACb,sDAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;AAUO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AACF,GAA+B;AAC7B,SACE,4CAAC,mCACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,4CAAC,2BAAI,WAAU,WAAU;AAAA,MAC/B,OAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,4CAAC,SAAY,WAAU,4BACrB,sDAAC,2CAAoB,KADb,CAEV,CACD,IACD,OAAO,WAAW,IAEhB,4CAAC,OAAE,WAAU,sCAAqC,qCAAuB,IAE3E,OAAO,IAAI,CAAC,UAAU;AACpB,cAAM,MAAM,aAAa,KAAK,KAAK;AACnC,eACE,4CAAC,SAA0B,WAAU,4BACnC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,OAAO,cAAc,CAAC,MAAM,MAAM,WAAW,KAAK,IAAI;AAAA;AAAA,QACxD,KAJQ,MAAM,SAKhB;AAAA,MAEJ,CAAC;AAAA;AAAA,EACP,GACF;AAEJ;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB;AAAA,EACA;AACF,GAA6B;AAC3B,SACE,6CAAC,SAAI,WAAU,4BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,IAEA,4CAAC,mCAAO,OAAO,MACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,4CAAC,gCAAS,WAAU,WAAU;AAAA,QACpC,OAAM;AAAA,QACN,UACE,6CAAC,UAAK,WAAU,2BACd;AAAA,sDAAC,iCAAU,WAAU,eAAc;AAAA,UAAE;AAAA,cAC5B,qBAAQ,WAAW;AAAA,WAC9B;AAAA,QAEF,MAAM;AAAA,QACN,WAAU;AAAA,QAET,8BACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,4CAAC,SAAY,WAAU,oCACrB,sDAAC,6CAAqB,KADd,CAEV,CACD,IACD,WAAW,WAAW,IAEpB,6CAAC,SAAI,WAAU,QACb;AAAA,sDAAC,OAAE,WAAU,uBAAuB,8CAAc,SAAS,OAAM;AAAA,UACjE,4CAAC,OAAE,WAAU,iCAAiC,8CAAc,SAAS,aAAY;AAAA,WACnF,IAEF,WAAW,IAAI,CAAC,KAAK,MAAM;AACzB,gBAAM,MAAM,IAAI,SACZ,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,cAAc,EAAE,KACjD,YAAY,CAAC;AACjB,iBACE,4CAAC,SAAc,WAAU,oCACvB,sDAAC,qCAAa,UAAU,KAAK,KADrB,GAEV;AAAA,QAEJ,CAAC;AAAA;AAAA,IACP,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1,43 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Tag, Activity, RefreshCw
|
|
3
|
+
import { Tag, Activity, RefreshCw } from "lucide-react";
|
|
4
|
+
import { SectionHeading } from "./section-heading.js";
|
|
4
5
|
import { FadeIn } from "./motion-primitives.js";
|
|
5
6
|
import { ListingCard, ListingCardSkeleton } from "./listing-card.js";
|
|
6
7
|
import { ActivityCard, ActivityCardSkeleton } from "./activity-card.js";
|
|
7
8
|
import { timeAgo } from "../utils/time.js";
|
|
8
|
-
import { cn } from "../utils/cn.js";
|
|
9
9
|
import { emptyMessages } from "../utils/empty-messages.js";
|
|
10
10
|
function StripShell({
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
title,
|
|
14
|
-
subtitle,
|
|
15
|
-
href,
|
|
16
|
-
linkLabel,
|
|
17
|
-
children
|
|
11
|
+
children,
|
|
12
|
+
...heading
|
|
18
13
|
}) {
|
|
19
14
|
return /* @__PURE__ */ jsxs("section", { className: "space-y-4", children: [
|
|
20
|
-
/* @__PURE__ */
|
|
21
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
22
|
-
/* @__PURE__ */ jsx("div", { className: cn("h-7 w-7 rounded-lg flex items-center justify-center", iconBg), children: icon }),
|
|
23
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
24
|
-
/* @__PURE__ */ jsx("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
|
|
25
|
-
subtitle && /* @__PURE__ */ jsx("p", { className: "text-2xs text-muted-foreground mt-1", children: subtitle })
|
|
26
|
-
] })
|
|
27
|
-
] }),
|
|
28
|
-
/* @__PURE__ */ jsxs(
|
|
29
|
-
"a",
|
|
30
|
-
{
|
|
31
|
-
href,
|
|
32
|
-
className: "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors",
|
|
33
|
-
children: [
|
|
34
|
-
linkLabel,
|
|
35
|
-
" ",
|
|
36
|
-
/* @__PURE__ */ jsx(ArrowRight, { className: "h-3.5 w-3.5" })
|
|
37
|
-
]
|
|
38
|
-
}
|
|
39
|
-
)
|
|
40
|
-
] }),
|
|
15
|
+
/* @__PURE__ */ jsx(SectionHeading, { ...heading }),
|
|
41
16
|
/* @__PURE__ */ jsx("div", { className: "w-full overflow-x-auto scrollbar-hide", children: /* @__PURE__ */ jsx("div", { className: "flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2", style: { width: "max-content" }, children }) })
|
|
42
17
|
] });
|
|
43
18
|
}
|
|
@@ -51,8 +26,7 @@ function DiscoverActivityStrip({
|
|
|
51
26
|
return /* @__PURE__ */ jsx(FadeIn, { children: /* @__PURE__ */ jsx(
|
|
52
27
|
StripShell,
|
|
53
28
|
{
|
|
54
|
-
icon: /* @__PURE__ */ jsx(Tag, { className: "h-
|
|
55
|
-
iconBg: "bg-gradient-to-br from-rose-500 to-pink-600 shadow-md shadow-rose-500/20",
|
|
29
|
+
icon: /* @__PURE__ */ jsx(Tag, { className: "h-4 w-4" }),
|
|
56
30
|
title: "Activity",
|
|
57
31
|
href: marketplaceHref,
|
|
58
32
|
linkLabel: "View all",
|
|
@@ -94,8 +68,7 @@ function DiscoverFeedSection({
|
|
|
94
68
|
/* @__PURE__ */ jsx(FadeIn, { delay: 0.08, children: /* @__PURE__ */ jsx(
|
|
95
69
|
StripShell,
|
|
96
70
|
{
|
|
97
|
-
icon: /* @__PURE__ */ jsx(Activity, { className: "h-
|
|
98
|
-
iconBg: "bg-gradient-to-br from-indigo-500 to-blue-600 shadow-md shadow-indigo-500/20",
|
|
71
|
+
icon: /* @__PURE__ */ jsx(Activity, { className: "h-4 w-4" }),
|
|
99
72
|
title: "Community",
|
|
100
73
|
subtitle: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
|
|
101
74
|
/* @__PURE__ */ jsx(RefreshCw, { className: "h-2.5 w-2.5" }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/discover-feed-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag, Activity, RefreshCw
|
|
1
|
+
{"version":3,"sources":["../../src/components/discover-feed-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag, Activity, RefreshCw } from \"lucide-react\";\nimport { SectionHeading, type SectionHeadingProps } from \"./section-heading.js\";\nimport { FadeIn } from \"./motion-primitives.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ActivityCard, ActivityCardSkeleton } from \"./activity-card.js\";\nimport { timeAgo } from \"../utils/time.js\";\nimport type { ApiOrder, ApiActivity } from \"@medialane/sdk\";\nimport { emptyMessages } from \"../utils/empty-messages.js\";\n\nexport interface DiscoverFeedSectionProps {\n orders: ApiOrder[];\n isLoading: boolean;\n activities: ApiActivity[];\n activitiesLoading: boolean;\n lastUpdated: string;\n explorerUrl?: string;\n marketplaceHref?: string;\n activitiesHref?: string;\n\n onBuyOrder?: (order: ApiOrder) => void;\n\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nfunction StripShell({\n children,\n ...heading\n}: SectionHeadingProps & { children: React.ReactNode }) {\n return (\n <section className=\"space-y-4\">\n <SectionHeading {...heading} />\n\n <div className=\"w-full overflow-x-auto scrollbar-hide\">\n <div className=\"flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2\" style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </section>\n );\n}\n\nexport interface DiscoverActivityStripProps {\n orders: ApiOrder[];\n isLoading: boolean;\n marketplaceHref?: string;\n onBuyOrder?: (order: ApiOrder) => void;\n isOwnOrder?: (order: ApiOrder) => boolean;\n}\n\nexport function DiscoverActivityStrip({\n orders,\n isLoading,\n marketplaceHref = \"/marketplace\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverActivityStripProps) {\n return (\n <FadeIn>\n <StripShell\n icon={<Tag className=\"h-4 w-4\" />}\n title=\"Activity\"\n href={marketplaceHref}\n linkLabel=\"View all\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 snap-start shrink-0\">\n <ListingCardSkeleton />\n </div>\n ))\n : orders.length === 0\n ? (\n <p className=\"text-sm text-muted-foreground py-4\">No active listings yet.</p>\n )\n : orders.map((order) => {\n const own = isOwnOrder?.(order) ?? false;\n return (\n <div key={order.orderHash} className=\"w-72 snap-start shrink-0\">\n <ListingCard\n order={order}\n onBuy={onBuyOrder && !own ? () => onBuyOrder(order) : undefined}\n />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n );\n}\n\nexport function DiscoverFeedSection({\n orders,\n isLoading,\n activities,\n activitiesLoading,\n lastUpdated,\n marketplaceHref = \"/marketplace\",\n activitiesHref = \"/activities\",\n onBuyOrder,\n isOwnOrder,\n}: DiscoverFeedSectionProps) {\n return (\n <div className=\"space-y-14 sm:space-y-20\">\n <DiscoverActivityStrip\n orders={orders}\n isLoading={isLoading}\n marketplaceHref={marketplaceHref}\n onBuyOrder={onBuyOrder}\n isOwnOrder={isOwnOrder}\n />\n\n <FadeIn delay={0.08}>\n <StripShell\n icon={<Activity className=\"h-4 w-4\" />}\n title=\"Community\"\n subtitle={\n <span className=\"flex items-center gap-1\">\n <RefreshCw className=\"h-2.5 w-2.5\" />\n Updated {timeAgo(lastUpdated)}\n </span>\n }\n href={activitiesHref}\n linkLabel=\"Activities\"\n >\n {activitiesLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCardSkeleton />\n </div>\n ))\n : activities.length === 0\n ? (\n <div className=\"py-4\">\n <p className=\"text-sm font-medium\">{emptyMessages.activity.title}</p>\n <p className=\"text-sm text-muted-foreground\">{emptyMessages.activity.description}</p>\n </div>\n )\n : activities.map((act, i) => {\n const key = act.txHash\n ? `${act.txHash}-${act.type}-${act.nftTokenId ?? \"\"}`\n : `activity-${i}`;\n return (\n <div key={key} className=\"w-56 sm:w-64 snap-start shrink-0\">\n <ActivityCard activity={act} />\n </div>\n );\n })}\n </StripShell>\n </FadeIn>\n </div>\n );\n}\n"],"mappings":";AA+BI,SACE,KADF;AA7BJ,SAAS,KAAK,UAAU,iBAAiB;AACzC,SAAS,sBAAgD;AACzD,SAAS,cAAc;AACvB,SAAS,aAAa,2BAA2B;AACjD,SAAS,cAAc,4BAA4B;AACnD,SAAS,eAAe;AAExB,SAAS,qBAAqB;AAiB9B,SAAS,WAAW;AAAA,EAClB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE,qBAAC,aAAQ,WAAU,aACjB;AAAA,wBAAC,kBAAgB,GAAG,SAAS;AAAA,IAE7B,oBAAC,SAAI,WAAU,yCACb,8BAAC,SAAI,WAAU,kDAAiD,OAAO,EAAE,OAAO,cAAc,GAC3F,UACH,GACF;AAAA,KACF;AAEJ;AAUO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AACF,GAA+B;AAC7B,SACE,oBAAC,UACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,oBAAC,OAAI,WAAU,WAAU;AAAA,MAC/B,OAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,4BACrB,8BAAC,uBAAoB,KADb,CAEV,CACD,IACD,OAAO,WAAW,IAEhB,oBAAC,OAAE,WAAU,sCAAqC,qCAAuB,IAE3E,OAAO,IAAI,CAAC,UAAU;AACpB,cAAM,MAAM,aAAa,KAAK,KAAK;AACnC,eACE,oBAAC,SAA0B,WAAU,4BACnC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,OAAO,cAAc,CAAC,MAAM,MAAM,WAAW,KAAK,IAAI;AAAA;AAAA,QACxD,KAJQ,MAAM,SAKhB;AAAA,MAEJ,CAAC;AAAA;AAAA,EACP,GACF;AAEJ;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB;AAAA,EACA;AACF,GAA6B;AAC3B,SACE,qBAAC,SAAI,WAAU,4BACb;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,UAAO,OAAO,MACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,oBAAC,YAAS,WAAU,WAAU;AAAA,QACpC,OAAM;AAAA,QACN,UACE,qBAAC,UAAK,WAAU,2BACd;AAAA,8BAAC,aAAU,WAAU,eAAc;AAAA,UAAE;AAAA,UAC5B,QAAQ,WAAW;AAAA,WAC9B;AAAA,QAEF,MAAM;AAAA,QACN,WAAU;AAAA,QAET,8BACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,oCACrB,8BAAC,wBAAqB,KADd,CAEV,CACD,IACD,WAAW,WAAW,IAEpB,qBAAC,SAAI,WAAU,QACb;AAAA,8BAAC,OAAE,WAAU,uBAAuB,wBAAc,SAAS,OAAM;AAAA,UACjE,oBAAC,OAAE,WAAU,iCAAiC,wBAAc,SAAS,aAAY;AAAA,WACnF,IAEF,WAAW,IAAI,CAAC,KAAK,MAAM;AACzB,gBAAM,MAAM,IAAI,SACZ,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,cAAc,EAAE,KACjD,YAAY,CAAC;AACjB,iBACE,oBAAC,SAAc,WAAU,oCACvB,8BAAC,gBAAa,UAAU,KAAK,KADrB,GAEV;AAAA,QAEJ,CAAC;AAAA;AAAA,IACP,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
3
|
import { FastMintProps } from './types.cjs';
|
|
4
4
|
import 'starknet';
|
|
5
5
|
import '@medialane/sdk';
|
|
6
6
|
import '@medialane/sdk/starknet';
|
|
7
7
|
|
|
8
|
-
declare function FastMint(props: FastMintProps): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> |
|
|
8
|
+
declare function FastMint(props: FastMintProps): string | number | bigint | boolean | react_jsx_runtime.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
|
|
9
9
|
|
|
10
10
|
export { FastMint };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
2
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
3
|
import { FastMintProps } from './types.js';
|
|
4
4
|
import 'starknet';
|
|
5
5
|
import '@medialane/sdk';
|
|
6
6
|
import '@medialane/sdk/starknet';
|
|
7
7
|
|
|
8
|
-
declare function FastMint(props: FastMintProps): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> |
|
|
8
|
+
declare function FastMint(props: FastMintProps): string | number | bigint | boolean | react_jsx_runtime.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
|
|
9
9
|
|
|
10
10
|
export { FastMint };
|
|
@@ -67,8 +67,7 @@ function NewListings({ market }) {
|
|
|
67
67
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
68
68
|
import_scroll_section.ScrollSection,
|
|
69
69
|
{
|
|
70
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, { className: "h-
|
|
71
|
-
iconBg: "bg-gradient-to-br from-brand-rose to-brand-rose shadow-md shadow-brand-rose/20",
|
|
70
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, { className: "h-4 w-4" }),
|
|
72
71
|
title: "New listings",
|
|
73
72
|
href: "/marketplace",
|
|
74
73
|
linkLabel: "Marketplace",
|
|
@@ -92,8 +91,7 @@ function CollectionsStrip() {
|
|
|
92
91
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
93
92
|
import_scroll_section.ScrollSection,
|
|
94
93
|
{
|
|
95
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.TrendingUp, { className: "h-
|
|
96
|
-
iconBg: "bg-gradient-to-br from-brand-purple to-brand-maeve shadow-md shadow-brand-purple/20",
|
|
94
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.TrendingUp, { className: "h-4 w-4" }),
|
|
97
95
|
title: "Collections",
|
|
98
96
|
href: "/collections",
|
|
99
97
|
linkLabel: "See all",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref, type ApiCollection } from \"@medialane/sdk\";\nimport { Tag, TrendingUp } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { PageContainer } from \"./page-container.js\";\nimport { HeroSlider } from \"./hero-slider.js\";\nimport { ActivityTicker } from \"./activity-ticker.js\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ListingCardMenu } from \"./listing-card-menu.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport { RewardsSection } from \"./rewards-section.js\";\nimport { LaunchpadStrip } from \"./launchpad-strip.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport type { CollectionMarketActions } from \"./collection-page.js\";\nimport { useOrders } from \"../utils/use-orders.js\";\nimport { useCollections } from \"../utils/use-collections.js\";\nimport { useUsdPrices } from \"../utils/use-usd-prices.js\";\nimport { orderUsd } from \"../utils/order-usd.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nconst LAUNCHPAD_HREFS = {\n nfts: \"/launchpad/single-editions\",\n \"limited-editions\": \"/launchpad/nfteditions\",\n \"collection-drop\": \"/launchpad/drop\",\n \"pop-protocol\": \"/launchpad/pop\",\n \"ip-tickets\": \"/launchpad/tickets\",\n \"creator-coins\": \"/launchpad/coin/create\",\n};\n\nfunction NewListings({ market }: { market: CollectionMarketActions }) {\n const { walletAddress } = useMedialaneApp();\n const { orders, isLoading } = useOrders({ status: \"ACTIVE\", limit: 10, page: 1 });\n const prices = useUsdPrices();\n const listings = orders.filter((o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\").slice(0, 10);\n return (\n <ScrollSection\n icon={<Tag className=\"h-
|
|
1
|
+
{"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref, type ApiCollection } from \"@medialane/sdk\";\nimport { Tag, TrendingUp } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { PageContainer } from \"./page-container.js\";\nimport { HeroSlider } from \"./hero-slider.js\";\nimport { ActivityTicker } from \"./activity-ticker.js\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ListingCardMenu } from \"./listing-card-menu.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport { RewardsSection } from \"./rewards-section.js\";\nimport { LaunchpadStrip } from \"./launchpad-strip.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport type { CollectionMarketActions } from \"./collection-page.js\";\nimport { useOrders } from \"../utils/use-orders.js\";\nimport { useCollections } from \"../utils/use-collections.js\";\nimport { useUsdPrices } from \"../utils/use-usd-prices.js\";\nimport { orderUsd } from \"../utils/order-usd.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nconst LAUNCHPAD_HREFS = {\n nfts: \"/launchpad/single-editions\",\n \"limited-editions\": \"/launchpad/nfteditions\",\n \"collection-drop\": \"/launchpad/drop\",\n \"pop-protocol\": \"/launchpad/pop\",\n \"ip-tickets\": \"/launchpad/tickets\",\n \"creator-coins\": \"/launchpad/coin/create\",\n};\n\nfunction NewListings({ market }: { market: CollectionMarketActions }) {\n const { walletAddress } = useMedialaneApp();\n const { orders, isLoading } = useOrders({ status: \"ACTIVE\", limit: 10, page: 1 });\n const prices = useUsdPrices();\n const listings = orders.filter((o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\").slice(0, 10);\n return (\n <ScrollSection\n icon={<Tag className=\"h-4 w-4\" />}\n title=\"New listings\"\n href=\"/marketplace\"\n linkLabel=\"Marketplace\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 shrink-0 snap-start\"><ListingCardSkeleton /></div>\n ))\n : listings.length === 0\n ? (\n <p className=\"py-4 text-sm text-muted-foreground\">\n <Link href=\"/launchpad/single-editions\" className=\"text-primary hover:underline\">Sell the first asset</Link>\n </p>\n )\n : listings.map((order) => {\n const own = !!walletAddress && isSameAddress(order.offerer, walletAddress);\n return (\n <div key={order.orderHash} className=\"w-72 shrink-0 snap-start\">\n <ListingCard\n order={order}\n onBuy={own ? undefined : () => market.buy(order)}\n overflowMenu={<ListingCardMenu order={order} />}\n usdValue={orderUsd(order.price, prices)}\n />\n </div>\n );\n })}\n </ScrollSection>\n );\n}\n\nfunction CollectionsStrip() {\n const { collections, isLoading } = useCollections(1, 10, undefined, \"recent\");\n return (\n <ScrollSection\n icon={<TrendingUp className=\"h-4 w-4\" />}\n title=\"Collections\"\n href=\"/collections\"\n linkLabel=\"See all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 shrink-0 snap-start sm:w-64\"><CollectionCardSkeleton /></div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-64 shrink-0 snap-start\"><CollectionCard collection={col} /></div>\n ))}\n </ScrollSection>\n );\n}\n\nexport interface HomePageProps {\n useMarketActions: () => CollectionMarketActions;\n initialFeatured?: ApiCollection[];\n}\n\nexport function HomePage({ useMarketActions, initialFeatured }: HomePageProps) {\n const market = useMarketActions();\n const { collections: featured, isLoading: featuredLoading } = useCollections(1, 3, true, \"recent\", true, undefined, undefined, initialFeatured);\n const { orders: tickerOrders } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 14 });\n return (\n <div className=\"pb-20\">\n <HeroSlider collections={featured} isLoading={featuredLoading} getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)} />\n <PageContainer className=\"box-border max-w-full pt-6 pb-0\">\n <ActivityTicker orders={tickerOrders} minItems={3} getHref={(o) => assetHref(\"STARKNET\", o.nftContract, o.nftTokenId)} />\n </PageContainer>\n <PageContainer className=\"mt-16 box-border max-w-full space-y-10 pt-0 pb-0 sm:space-y-16 lg:space-y-20\">\n <NewListings market={market} />\n <CollectionsStrip />\n <RewardsSection rewardsHref=\"/rewards\" />\n <LaunchpadStrip hrefs={LAUNCHPAD_HREFS} marketplaceHref=\"/marketplace\" launchpadHref=\"/launchpad\" />\n </PageContainer>\n {market.dialogs}\n </div>\n );\n}\n"],"mappings":"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","names":["Link"]}
|
|
@@ -34,8 +34,7 @@ function NewListings({ market }) {
|
|
|
34
34
|
return /* @__PURE__ */ jsx(
|
|
35
35
|
ScrollSection,
|
|
36
36
|
{
|
|
37
|
-
icon: /* @__PURE__ */ jsx(Tag, { className: "h-
|
|
38
|
-
iconBg: "bg-gradient-to-br from-brand-rose to-brand-rose shadow-md shadow-brand-rose/20",
|
|
37
|
+
icon: /* @__PURE__ */ jsx(Tag, { className: "h-4 w-4" }),
|
|
39
38
|
title: "New listings",
|
|
40
39
|
href: "/marketplace",
|
|
41
40
|
linkLabel: "Marketplace",
|
|
@@ -59,8 +58,7 @@ function CollectionsStrip() {
|
|
|
59
58
|
return /* @__PURE__ */ jsx(
|
|
60
59
|
ScrollSection,
|
|
61
60
|
{
|
|
62
|
-
icon: /* @__PURE__ */ jsx(TrendingUp, { className: "h-
|
|
63
|
-
iconBg: "bg-gradient-to-br from-brand-purple to-brand-maeve shadow-md shadow-brand-purple/20",
|
|
61
|
+
icon: /* @__PURE__ */ jsx(TrendingUp, { className: "h-4 w-4" }),
|
|
64
62
|
title: "Collections",
|
|
65
63
|
href: "/collections",
|
|
66
64
|
linkLabel: "See all",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref, type ApiCollection } from \"@medialane/sdk\";\nimport { Tag, TrendingUp } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { PageContainer } from \"./page-container.js\";\nimport { HeroSlider } from \"./hero-slider.js\";\nimport { ActivityTicker } from \"./activity-ticker.js\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ListingCardMenu } from \"./listing-card-menu.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport { RewardsSection } from \"./rewards-section.js\";\nimport { LaunchpadStrip } from \"./launchpad-strip.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport type { CollectionMarketActions } from \"./collection-page.js\";\nimport { useOrders } from \"../utils/use-orders.js\";\nimport { useCollections } from \"../utils/use-collections.js\";\nimport { useUsdPrices } from \"../utils/use-usd-prices.js\";\nimport { orderUsd } from \"../utils/order-usd.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nconst LAUNCHPAD_HREFS = {\n nfts: \"/launchpad/single-editions\",\n \"limited-editions\": \"/launchpad/nfteditions\",\n \"collection-drop\": \"/launchpad/drop\",\n \"pop-protocol\": \"/launchpad/pop\",\n \"ip-tickets\": \"/launchpad/tickets\",\n \"creator-coins\": \"/launchpad/coin/create\",\n};\n\nfunction NewListings({ market }: { market: CollectionMarketActions }) {\n const { walletAddress } = useMedialaneApp();\n const { orders, isLoading } = useOrders({ status: \"ACTIVE\", limit: 10, page: 1 });\n const prices = useUsdPrices();\n const listings = orders.filter((o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\").slice(0, 10);\n return (\n <ScrollSection\n icon={<Tag className=\"h-
|
|
1
|
+
{"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref, type ApiCollection } from \"@medialane/sdk\";\nimport { Tag, TrendingUp } from \"lucide-react\";\nimport Link from \"./link.js\";\nimport { PageContainer } from \"./page-container.js\";\nimport { HeroSlider } from \"./hero-slider.js\";\nimport { ActivityTicker } from \"./activity-ticker.js\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { ListingCard, ListingCardSkeleton } from \"./listing-card.js\";\nimport { ListingCardMenu } from \"./listing-card-menu.js\";\nimport { CollectionCard, CollectionCardSkeleton } from \"./collection-card.js\";\nimport { RewardsSection } from \"./rewards-section.js\";\nimport { LaunchpadStrip } from \"./launchpad-strip.js\";\nimport { useMedialaneApp } from \"./medialane-app.js\";\nimport type { CollectionMarketActions } from \"./collection-page.js\";\nimport { useOrders } from \"../utils/use-orders.js\";\nimport { useCollections } from \"../utils/use-collections.js\";\nimport { useUsdPrices } from \"../utils/use-usd-prices.js\";\nimport { orderUsd } from \"../utils/order-usd.js\";\nimport { isSameAddress } from \"../utils/same-address.js\";\n\nconst LAUNCHPAD_HREFS = {\n nfts: \"/launchpad/single-editions\",\n \"limited-editions\": \"/launchpad/nfteditions\",\n \"collection-drop\": \"/launchpad/drop\",\n \"pop-protocol\": \"/launchpad/pop\",\n \"ip-tickets\": \"/launchpad/tickets\",\n \"creator-coins\": \"/launchpad/coin/create\",\n};\n\nfunction NewListings({ market }: { market: CollectionMarketActions }) {\n const { walletAddress } = useMedialaneApp();\n const { orders, isLoading } = useOrders({ status: \"ACTIVE\", limit: 10, page: 1 });\n const prices = useUsdPrices();\n const listings = orders.filter((o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\").slice(0, 10);\n return (\n <ScrollSection\n icon={<Tag className=\"h-4 w-4\" />}\n title=\"New listings\"\n href=\"/marketplace\"\n linkLabel=\"Marketplace\"\n >\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-72 shrink-0 snap-start\"><ListingCardSkeleton /></div>\n ))\n : listings.length === 0\n ? (\n <p className=\"py-4 text-sm text-muted-foreground\">\n <Link href=\"/launchpad/single-editions\" className=\"text-primary hover:underline\">Sell the first asset</Link>\n </p>\n )\n : listings.map((order) => {\n const own = !!walletAddress && isSameAddress(order.offerer, walletAddress);\n return (\n <div key={order.orderHash} className=\"w-72 shrink-0 snap-start\">\n <ListingCard\n order={order}\n onBuy={own ? undefined : () => market.buy(order)}\n overflowMenu={<ListingCardMenu order={order} />}\n usdValue={orderUsd(order.price, prices)}\n />\n </div>\n );\n })}\n </ScrollSection>\n );\n}\n\nfunction CollectionsStrip() {\n const { collections, isLoading } = useCollections(1, 10, undefined, \"recent\");\n return (\n <ScrollSection\n icon={<TrendingUp className=\"h-4 w-4\" />}\n title=\"Collections\"\n href=\"/collections\"\n linkLabel=\"See all\"\n >\n {isLoading\n ? Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"w-56 shrink-0 snap-start sm:w-64\"><CollectionCardSkeleton /></div>\n ))\n : collections.map((col) => (\n <div key={col.contractAddress} className=\"w-64 shrink-0 snap-start\"><CollectionCard collection={col} /></div>\n ))}\n </ScrollSection>\n );\n}\n\nexport interface HomePageProps {\n useMarketActions: () => CollectionMarketActions;\n initialFeatured?: ApiCollection[];\n}\n\nexport function HomePage({ useMarketActions, initialFeatured }: HomePageProps) {\n const market = useMarketActions();\n const { collections: featured, isLoading: featuredLoading } = useCollections(1, 3, true, \"recent\", true, undefined, undefined, initialFeatured);\n const { orders: tickerOrders } = useOrders({ status: \"ACTIVE\", sort: \"recent\", limit: 14 });\n return (\n <div className=\"pb-20\">\n <HeroSlider collections={featured} isLoading={featuredLoading} getHref={(c) => collectionHref(\"STARKNET\", c.contractAddress)} />\n <PageContainer className=\"box-border max-w-full pt-6 pb-0\">\n <ActivityTicker orders={tickerOrders} minItems={3} getHref={(o) => assetHref(\"STARKNET\", o.nftContract, o.nftTokenId)} />\n </PageContainer>\n <PageContainer className=\"mt-16 box-border max-w-full space-y-10 pt-0 pb-0 sm:space-y-16 lg:space-y-20\">\n <NewListings market={market} />\n <CollectionsStrip />\n <RewardsSection rewardsHref=\"/rewards\" />\n <LaunchpadStrip hrefs={LAUNCHPAD_HREFS} marketplaceHref=\"/marketplace\" launchpadHref=\"/launchpad\" />\n </PageContainer>\n {market.dialogs}\n </div>\n );\n}\n"],"mappings":";AAsCY,cAmEN,YAnEM;AApCZ,SAAS,WAAW,sBAA0C;AAC9D,SAAS,KAAK,kBAAkB;AAChC,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,aAAa,2BAA2B;AACjD,SAAS,uBAAuB;AAChC,SAAS,gBAAgB,8BAA8B;AACvD,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAEhC,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAE9B,MAAM,kBAAkB;AAAA,EACtB,MAAM;AAAA,EACN,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,iBAAiB;AACnB;AAEA,SAAS,YAAY,EAAE,OAAO,GAAwC;AACpE,QAAM,EAAE,cAAc,IAAI,gBAAgB;AAC1C,QAAM,EAAE,QAAQ,UAAU,IAAI,UAAU,EAAE,QAAQ,UAAU,OAAO,IAAI,MAAM,EAAE,CAAC;AAChF,QAAM,SAAS,aAAa;AAC5B,QAAM,WAAW,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,aAAa,YAAY,EAAE,MAAM,aAAa,SAAS,EAAE,MAAM,GAAG,EAAE;AAClH,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,oBAAC,OAAI,WAAU,WAAU;AAAA,MAC/B,OAAM;AAAA,MACN,MAAK;AAAA,MACL,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,4BAA2B,8BAAC,uBAAoB,KAA7D,CAA+D,CAC1E,IACD,SAAS,WAAW,IAElB,oBAAC,OAAE,WAAU,sCACX,8BAAC,QAAK,MAAK,8BAA6B,WAAU,gCAA+B,kCAAoB,GACvG,IAEF,SAAS,IAAI,CAAC,UAAU;AACtB,cAAM,MAAM,CAAC,CAAC,iBAAiB,cAAc,MAAM,SAAS,aAAa;AACzE,eACE,oBAAC,SAA0B,WAAU,4BACnC;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,OAAO,MAAM,SAAY,MAAM,OAAO,IAAI,KAAK;AAAA,YAC/C,cAAc,oBAAC,mBAAgB,OAAc;AAAA,YAC7C,UAAU,SAAS,MAAM,OAAO,MAAM;AAAA;AAAA,QACxC,KANQ,MAAM,SAOhB;AAAA,MAEJ,CAAC;AAAA;AAAA,EACP;AAEJ;AAEA,SAAS,mBAAmB;AAC1B,QAAM,EAAE,aAAa,UAAU,IAAI,eAAe,GAAG,IAAI,QAAW,QAAQ;AAC5E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,oBAAC,cAAW,WAAU,WAAU;AAAA,MACtC,OAAM;AAAA,MACN,MAAK;AAAA,MACL,WAAU;AAAA,MAET,sBACG,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAChC,oBAAC,SAAY,WAAU,oCAAmC,8BAAC,0BAAuB,KAAxE,CAA0E,CACrF,IACD,YAAY,IAAI,CAAC,QACf,oBAAC,SAA8B,WAAU,4BAA2B,8BAAC,kBAAe,YAAY,KAAK,KAA3F,IAAI,eAAyF,CACxG;AAAA;AAAA,EACP;AAEJ;AAOO,SAAS,SAAS,EAAE,kBAAkB,gBAAgB,GAAkB;AAC7E,QAAM,SAAS,iBAAiB;AAChC,QAAM,EAAE,aAAa,UAAU,WAAW,gBAAgB,IAAI,eAAe,GAAG,GAAG,MAAM,UAAU,MAAM,QAAW,QAAW,eAAe;AAC9I,QAAM,EAAE,QAAQ,aAAa,IAAI,UAAU,EAAE,QAAQ,UAAU,MAAM,UAAU,OAAO,GAAG,CAAC;AAC1F,SACE,qBAAC,SAAI,WAAU,SACb;AAAA,wBAAC,cAAW,aAAa,UAAU,WAAW,iBAAiB,SAAS,CAAC,MAAM,eAAe,YAAY,EAAE,eAAe,GAAG;AAAA,IAC9H,oBAAC,iBAAc,WAAU,mCACvB,8BAAC,kBAAe,QAAQ,cAAc,UAAU,GAAG,SAAS,CAAC,MAAM,UAAU,YAAY,EAAE,aAAa,EAAE,UAAU,GAAG,GACzH;AAAA,IACA,qBAAC,iBAAc,WAAU,gFACvB;AAAA,0BAAC,eAAY,QAAgB;AAAA,MAC7B,oBAAC,oBAAiB;AAAA,MAClB,oBAAC,kBAAe,aAAY,YAAW;AAAA,MACvC,oBAAC,kBAAe,OAAO,iBAAiB,iBAAgB,gBAAe,eAAc,cAAa;AAAA,OACpG;AAAA,IACC,OAAO;AAAA,KACV;AAEJ;","names":[]}
|
|
@@ -128,8 +128,7 @@ function LaunchpadStrip({
|
|
|
128
128
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
129
129
|
import_scroll_section.ScrollSection,
|
|
130
130
|
{
|
|
131
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Rocket, { className: "h-
|
|
132
|
-
iconBg: "bg-gradient-to-br from-primary to-blue-600 shadow-md shadow-primary/20",
|
|
131
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Rocket, { className: "h-4 w-4" }),
|
|
133
132
|
title: "Launchpad",
|
|
134
133
|
href: launchpadHref,
|
|
135
134
|
linkLabel: "Explore",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/launchpad-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ShoppingBag, ArrowRight, Rocket } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { SERVICE_HUES } from \"./launchpad-services.js\";\nimport { LAUNCHPAD_SERVICE_DEFINITIONS } from \"../data/launchpad-services.js\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface LaunchpadStripProps {\n\n hrefs: Record<string, string>;\n\n marketplaceHref?: string;\n\n launchpadHref?: string;\n}\n\ninterface StripCard {\n key: string;\n href: string;\n icon: LucideIcon;\n title: string;\n blurb: string;\n example?: string;\n cta: string;\n hue: { text: string; solid: string; border: string; tint: string };\n}\n\nconst DEF_BY_KEY = Object.fromEntries(LAUNCHPAD_SERVICE_DEFINITIONS.map((d) => [d.key, d]));\n\nconst STRIP_ORDER = [\n \"nfts\",\n \"limited-editions\",\n \"collection-drop\",\n \"pop-protocol\",\n \"ip-tickets\",\n \"creator-coins\",\n];\n\nconst MARKETPLACE_HUE = {\n text: \"text-brand-maeve\",\n solid: \"bg-brand-maeve\",\n border: \"border-brand-maeve/30\",\n tint: \"bg-brand-maeve/10\",\n};\n\nfunction ServiceCard({ card }: { card: StripCard }) {\n const { icon: Icon, title, blurb, example, cta, hue, href } = card;\n return (\n <Link\n href={href}\n className={cn(\n \"relative rounded-2xl border bg-card overflow-hidden flex flex-col h-full min-h-[280px]\",\n \"transition-transform active:scale-[0.99]\",\n hue.border,\n )}\n >\n <div className=\"relative flex flex-col flex-1 p-6 gap-3.5\">\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\n <div className=\"space-y-1.5\">\n <h3 className=\"text-xl font-black tracking-tight leading-snug\">{title}</h3>\n <p className=\"text-sm text-muted-foreground leading-relaxed\">{blurb}</p>\n {example && (\n <p className=\"text-xs text-muted-foreground/70 italic leading-relaxed\">e.g. {example}</p>\n )}\n </div>\n\n <div className=\"mt-auto pt-1 flex justify-end\">\n <span\n className={cn(\n \"inline-flex items-center gap-2 h-9 px-4 rounded-full\",\n \"text-sm font-semibold text-white\",\n hue.solid,\n )}\n >\n {cta}\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </span>\n </div>\n </div>\n </Link>\n );\n}\n\nexport function LaunchpadStrip({\n hrefs,\n marketplaceHref,\n launchpadHref = \"/launchpad\",\n}: LaunchpadStripProps) {\n const cards: StripCard[] = [\n ...STRIP_ORDER.flatMap((key) => {\n const def = DEF_BY_KEY[key];\n const href = hrefs[key];\n if (!def || !href) return [];\n return [{\n key,\n href,\n icon: def.icon,\n title: def.title,\n blurb: def.blurb,\n example: def.example,\n cta: def.cta,\n hue: SERVICE_HUES[key] ?? MARKETPLACE_HUE,\n }];\n }),\n ...(marketplaceHref\n ? [{\n key: \"marketplace\",\n href: marketplaceHref,\n icon: ShoppingBag,\n title: \"Marketplace\",\n blurb: \"Discover and trade works from creators — gasless, instantly settled.\",\n example: \"Buy an art print, make an offer on a music track\",\n cta: \"Browse\",\n hue: MARKETPLACE_HUE,\n }]\n : []),\n ];\n\n return (\n <ScrollSection\n icon={<Rocket className=\"h-
|
|
1
|
+
{"version":3,"sources":["../../src/components/launchpad-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ShoppingBag, ArrowRight, Rocket } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { SERVICE_HUES } from \"./launchpad-services.js\";\nimport { LAUNCHPAD_SERVICE_DEFINITIONS } from \"../data/launchpad-services.js\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface LaunchpadStripProps {\n\n hrefs: Record<string, string>;\n\n marketplaceHref?: string;\n\n launchpadHref?: string;\n}\n\ninterface StripCard {\n key: string;\n href: string;\n icon: LucideIcon;\n title: string;\n blurb: string;\n example?: string;\n cta: string;\n hue: { text: string; solid: string; border: string; tint: string };\n}\n\nconst DEF_BY_KEY = Object.fromEntries(LAUNCHPAD_SERVICE_DEFINITIONS.map((d) => [d.key, d]));\n\nconst STRIP_ORDER = [\n \"nfts\",\n \"limited-editions\",\n \"collection-drop\",\n \"pop-protocol\",\n \"ip-tickets\",\n \"creator-coins\",\n];\n\nconst MARKETPLACE_HUE = {\n text: \"text-brand-maeve\",\n solid: \"bg-brand-maeve\",\n border: \"border-brand-maeve/30\",\n tint: \"bg-brand-maeve/10\",\n};\n\nfunction ServiceCard({ card }: { card: StripCard }) {\n const { icon: Icon, title, blurb, example, cta, hue, href } = card;\n return (\n <Link\n href={href}\n className={cn(\n \"relative rounded-2xl border bg-card overflow-hidden flex flex-col h-full min-h-[280px]\",\n \"transition-transform active:scale-[0.99]\",\n hue.border,\n )}\n >\n <div className=\"relative flex flex-col flex-1 p-6 gap-3.5\">\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\n <div className=\"space-y-1.5\">\n <h3 className=\"text-xl font-black tracking-tight leading-snug\">{title}</h3>\n <p className=\"text-sm text-muted-foreground leading-relaxed\">{blurb}</p>\n {example && (\n <p className=\"text-xs text-muted-foreground/70 italic leading-relaxed\">e.g. {example}</p>\n )}\n </div>\n\n <div className=\"mt-auto pt-1 flex justify-end\">\n <span\n className={cn(\n \"inline-flex items-center gap-2 h-9 px-4 rounded-full\",\n \"text-sm font-semibold text-white\",\n hue.solid,\n )}\n >\n {cta}\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </span>\n </div>\n </div>\n </Link>\n );\n}\n\nexport function LaunchpadStrip({\n hrefs,\n marketplaceHref,\n launchpadHref = \"/launchpad\",\n}: LaunchpadStripProps) {\n const cards: StripCard[] = [\n ...STRIP_ORDER.flatMap((key) => {\n const def = DEF_BY_KEY[key];\n const href = hrefs[key];\n if (!def || !href) return [];\n return [{\n key,\n href,\n icon: def.icon,\n title: def.title,\n blurb: def.blurb,\n example: def.example,\n cta: def.cta,\n hue: SERVICE_HUES[key] ?? MARKETPLACE_HUE,\n }];\n }),\n ...(marketplaceHref\n ? [{\n key: \"marketplace\",\n href: marketplaceHref,\n icon: ShoppingBag,\n title: \"Marketplace\",\n blurb: \"Discover and trade works from creators — gasless, instantly settled.\",\n example: \"Buy an art print, make an offer on a music track\",\n cta: \"Browse\",\n hue: MARKETPLACE_HUE,\n }]\n : []),\n ];\n\n return (\n <ScrollSection\n icon={<Rocket className=\"h-4 w-4\" />}\n title=\"Launchpad\"\n href={launchpadHref}\n linkLabel=\"Explore\"\n >\n {cards.map((card) => (\n <div key={card.key} className=\"w-64 sm:w-72 snap-start shrink-0 flex\">\n <ServiceCard card={card} />\n </div>\n ))}\n </ScrollSection>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6DU;AA3DV,kBAAiB;AACjB,0BAAgD;AAEhD,4BAA8B;AAC9B,gCAA6B;AAC7B,IAAAA,6BAA8C;AAC9C,gBAAmB;AAsBnB,MAAM,aAAa,OAAO,YAAY,yDAA8B,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAE1F,MAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,kBAAkB;AAAA,EACtB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACR;AAEA,SAAS,YAAY,EAAE,KAAK,GAAwB;AAClD,QAAM,EAAE,MAAM,MAAM,OAAO,OAAO,SAAS,KAAK,KAAK,KAAK,IAAI;AAC9D,SACE;AAAA,IAAC,YAAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,eAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,IAAI;AAAA,MACN;AAAA,MAEA,uDAAC,SAAI,WAAU,6CACb;AAAA,oDAAC,UAAK,eAAW,cAAG,yDAAyD,IAAI,IAAI,GACnF,sDAAC,QAAK,eAAW,cAAG,WAAW,IAAI,IAAI,GAAG,GAC5C;AAAA,QAEA,6CAAC,SAAI,WAAU,eACb;AAAA,sDAAC,QAAG,WAAU,kDAAkD,iBAAM;AAAA,UACtE,4CAAC,OAAE,WAAU,iDAAiD,iBAAM;AAAA,UACnE,WACC,6CAAC,OAAE,WAAU,2DAA0D;AAAA;AAAA,YAAM;AAAA,aAAQ;AAAA,WAEzF;AAAA,QAEA,4CAAC,SAAI,WAAU,iCACb;AAAA,UAAC;AAAA;AAAA,YACC,eAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,IAAI;AAAA,YACN;AAAA,YAEC;AAAA;AAAA,cACD,4CAAC,kCAAW,WAAU,eAAc;AAAA;AAAA;AAAA,QACtC,GACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,gBAAgB;AAClB,GAAwB;AACtB,QAAM,QAAqB;AAAA,IACzB,GAAG,YAAY,QAAQ,CAAC,QAAQ;AAC9B,YAAM,MAAM,WAAW,GAAG;AAC1B,YAAM,OAAO,MAAM,GAAG;AACtB,UAAI,CAAC,OAAO,CAAC,KAAM,QAAO,CAAC;AAC3B,aAAO,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA,MAAM,IAAI;AAAA,QACV,OAAO,IAAI;AAAA,QACX,OAAO,IAAI;AAAA,QACX,SAAS,IAAI;AAAA,QACb,KAAK,IAAI;AAAA,QACT,KAAK,uCAAa,GAAG,KAAK;AAAA,MAC5B,CAAC;AAAA,IACH,CAAC;AAAA,IACD,GAAI,kBACA,CAAC;AAAA,MACC,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,IACP,CAAC,IACD,CAAC;AAAA,EACP;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,4CAAC,8BAAO,WAAU,WAAU;AAAA,MAClC,OAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAU;AAAA,MAET,gBAAM,IAAI,CAAC,SACV,4CAAC,SAAmB,WAAU,yCAC5B,sDAAC,eAAY,MAAY,KADjB,KAAK,GAEf,CACD;AAAA;AAAA,EACH;AAEJ;","names":["import_launchpad_services","Link"]}
|
|
@@ -95,8 +95,7 @@ function LaunchpadStrip({
|
|
|
95
95
|
return /* @__PURE__ */ jsx(
|
|
96
96
|
ScrollSection,
|
|
97
97
|
{
|
|
98
|
-
icon: /* @__PURE__ */ jsx(Rocket, { className: "h-
|
|
99
|
-
iconBg: "bg-gradient-to-br from-primary to-blue-600 shadow-md shadow-primary/20",
|
|
98
|
+
icon: /* @__PURE__ */ jsx(Rocket, { className: "h-4 w-4" }),
|
|
100
99
|
title: "Launchpad",
|
|
101
100
|
href: launchpadHref,
|
|
102
101
|
linkLabel: "Explore",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/launchpad-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ShoppingBag, ArrowRight, Rocket } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { SERVICE_HUES } from \"./launchpad-services.js\";\nimport { LAUNCHPAD_SERVICE_DEFINITIONS } from \"../data/launchpad-services.js\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface LaunchpadStripProps {\n\n hrefs: Record<string, string>;\n\n marketplaceHref?: string;\n\n launchpadHref?: string;\n}\n\ninterface StripCard {\n key: string;\n href: string;\n icon: LucideIcon;\n title: string;\n blurb: string;\n example?: string;\n cta: string;\n hue: { text: string; solid: string; border: string; tint: string };\n}\n\nconst DEF_BY_KEY = Object.fromEntries(LAUNCHPAD_SERVICE_DEFINITIONS.map((d) => [d.key, d]));\n\nconst STRIP_ORDER = [\n \"nfts\",\n \"limited-editions\",\n \"collection-drop\",\n \"pop-protocol\",\n \"ip-tickets\",\n \"creator-coins\",\n];\n\nconst MARKETPLACE_HUE = {\n text: \"text-brand-maeve\",\n solid: \"bg-brand-maeve\",\n border: \"border-brand-maeve/30\",\n tint: \"bg-brand-maeve/10\",\n};\n\nfunction ServiceCard({ card }: { card: StripCard }) {\n const { icon: Icon, title, blurb, example, cta, hue, href } = card;\n return (\n <Link\n href={href}\n className={cn(\n \"relative rounded-2xl border bg-card overflow-hidden flex flex-col h-full min-h-[280px]\",\n \"transition-transform active:scale-[0.99]\",\n hue.border,\n )}\n >\n <div className=\"relative flex flex-col flex-1 p-6 gap-3.5\">\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\n <div className=\"space-y-1.5\">\n <h3 className=\"text-xl font-black tracking-tight leading-snug\">{title}</h3>\n <p className=\"text-sm text-muted-foreground leading-relaxed\">{blurb}</p>\n {example && (\n <p className=\"text-xs text-muted-foreground/70 italic leading-relaxed\">e.g. {example}</p>\n )}\n </div>\n\n <div className=\"mt-auto pt-1 flex justify-end\">\n <span\n className={cn(\n \"inline-flex items-center gap-2 h-9 px-4 rounded-full\",\n \"text-sm font-semibold text-white\",\n hue.solid,\n )}\n >\n {cta}\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </span>\n </div>\n </div>\n </Link>\n );\n}\n\nexport function LaunchpadStrip({\n hrefs,\n marketplaceHref,\n launchpadHref = \"/launchpad\",\n}: LaunchpadStripProps) {\n const cards: StripCard[] = [\n ...STRIP_ORDER.flatMap((key) => {\n const def = DEF_BY_KEY[key];\n const href = hrefs[key];\n if (!def || !href) return [];\n return [{\n key,\n href,\n icon: def.icon,\n title: def.title,\n blurb: def.blurb,\n example: def.example,\n cta: def.cta,\n hue: SERVICE_HUES[key] ?? MARKETPLACE_HUE,\n }];\n }),\n ...(marketplaceHref\n ? [{\n key: \"marketplace\",\n href: marketplaceHref,\n icon: ShoppingBag,\n title: \"Marketplace\",\n blurb: \"Discover and trade works from creators — gasless, instantly settled.\",\n example: \"Buy an art print, make an offer on a music track\",\n cta: \"Browse\",\n hue: MARKETPLACE_HUE,\n }]\n : []),\n ];\n\n return (\n <ScrollSection\n icon={<Rocket className=\"h-
|
|
1
|
+
{"version":3,"sources":["../../src/components/launchpad-strip.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"./link.js\";\nimport { ShoppingBag, ArrowRight, Rocket } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\nimport { ScrollSection } from \"./scroll-section.js\";\nimport { SERVICE_HUES } from \"./launchpad-services.js\";\nimport { LAUNCHPAD_SERVICE_DEFINITIONS } from \"../data/launchpad-services.js\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface LaunchpadStripProps {\n\n hrefs: Record<string, string>;\n\n marketplaceHref?: string;\n\n launchpadHref?: string;\n}\n\ninterface StripCard {\n key: string;\n href: string;\n icon: LucideIcon;\n title: string;\n blurb: string;\n example?: string;\n cta: string;\n hue: { text: string; solid: string; border: string; tint: string };\n}\n\nconst DEF_BY_KEY = Object.fromEntries(LAUNCHPAD_SERVICE_DEFINITIONS.map((d) => [d.key, d]));\n\nconst STRIP_ORDER = [\n \"nfts\",\n \"limited-editions\",\n \"collection-drop\",\n \"pop-protocol\",\n \"ip-tickets\",\n \"creator-coins\",\n];\n\nconst MARKETPLACE_HUE = {\n text: \"text-brand-maeve\",\n solid: \"bg-brand-maeve\",\n border: \"border-brand-maeve/30\",\n tint: \"bg-brand-maeve/10\",\n};\n\nfunction ServiceCard({ card }: { card: StripCard }) {\n const { icon: Icon, title, blurb, example, cta, hue, href } = card;\n return (\n <Link\n href={href}\n className={cn(\n \"relative rounded-2xl border bg-card overflow-hidden flex flex-col h-full min-h-[280px]\",\n \"transition-transform active:scale-[0.99]\",\n hue.border,\n )}\n >\n <div className=\"relative flex flex-col flex-1 p-6 gap-3.5\">\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\n <div className=\"space-y-1.5\">\n <h3 className=\"text-xl font-black tracking-tight leading-snug\">{title}</h3>\n <p className=\"text-sm text-muted-foreground leading-relaxed\">{blurb}</p>\n {example && (\n <p className=\"text-xs text-muted-foreground/70 italic leading-relaxed\">e.g. {example}</p>\n )}\n </div>\n\n <div className=\"mt-auto pt-1 flex justify-end\">\n <span\n className={cn(\n \"inline-flex items-center gap-2 h-9 px-4 rounded-full\",\n \"text-sm font-semibold text-white\",\n hue.solid,\n )}\n >\n {cta}\n <ArrowRight className=\"h-3.5 w-3.5\" />\n </span>\n </div>\n </div>\n </Link>\n );\n}\n\nexport function LaunchpadStrip({\n hrefs,\n marketplaceHref,\n launchpadHref = \"/launchpad\",\n}: LaunchpadStripProps) {\n const cards: StripCard[] = [\n ...STRIP_ORDER.flatMap((key) => {\n const def = DEF_BY_KEY[key];\n const href = hrefs[key];\n if (!def || !href) return [];\n return [{\n key,\n href,\n icon: def.icon,\n title: def.title,\n blurb: def.blurb,\n example: def.example,\n cta: def.cta,\n hue: SERVICE_HUES[key] ?? MARKETPLACE_HUE,\n }];\n }),\n ...(marketplaceHref\n ? [{\n key: \"marketplace\",\n href: marketplaceHref,\n icon: ShoppingBag,\n title: \"Marketplace\",\n blurb: \"Discover and trade works from creators — gasless, instantly settled.\",\n example: \"Buy an art print, make an offer on a music track\",\n cta: \"Browse\",\n hue: MARKETPLACE_HUE,\n }]\n : []),\n ];\n\n return (\n <ScrollSection\n icon={<Rocket className=\"h-4 w-4\" />}\n title=\"Launchpad\"\n href={launchpadHref}\n linkLabel=\"Explore\"\n >\n {cards.map((card) => (\n <div key={card.key} className=\"w-64 sm:w-72 snap-start shrink-0 flex\">\n <ServiceCard card={card} />\n </div>\n ))}\n </ScrollSection>\n );\n}\n"],"mappings":";AA6DU,cAOE,YAPF;AA3DV,OAAO,UAAU;AACjB,SAAS,aAAa,YAAY,cAAc;AAEhD,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAC7B,SAAS,qCAAqC;AAC9C,SAAS,UAAU;AAsBnB,MAAM,aAAa,OAAO,YAAY,8BAA8B,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAE1F,MAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,kBAAkB;AAAA,EACtB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACR;AAEA,SAAS,YAAY,EAAE,KAAK,GAAwB;AAClD,QAAM,EAAE,MAAM,MAAM,OAAO,OAAO,SAAS,KAAK,KAAK,KAAK,IAAI;AAC9D,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,IAAI;AAAA,MACN;AAAA,MAEA,+BAAC,SAAI,WAAU,6CACb;AAAA,4BAAC,UAAK,WAAW,GAAG,yDAAyD,IAAI,IAAI,GACnF,8BAAC,QAAK,WAAW,GAAG,WAAW,IAAI,IAAI,GAAG,GAC5C;AAAA,QAEA,qBAAC,SAAI,WAAU,eACb;AAAA,8BAAC,QAAG,WAAU,kDAAkD,iBAAM;AAAA,UACtE,oBAAC,OAAE,WAAU,iDAAiD,iBAAM;AAAA,UACnE,WACC,qBAAC,OAAE,WAAU,2DAA0D;AAAA;AAAA,YAAM;AAAA,aAAQ;AAAA,WAEzF;AAAA,QAEA,oBAAC,SAAI,WAAU,iCACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,cACA,IAAI;AAAA,YACN;AAAA,YAEC;AAAA;AAAA,cACD,oBAAC,cAAW,WAAU,eAAc;AAAA;AAAA;AAAA,QACtC,GACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,gBAAgB;AAClB,GAAwB;AACtB,QAAM,QAAqB;AAAA,IACzB,GAAG,YAAY,QAAQ,CAAC,QAAQ;AAC9B,YAAM,MAAM,WAAW,GAAG;AAC1B,YAAM,OAAO,MAAM,GAAG;AACtB,UAAI,CAAC,OAAO,CAAC,KAAM,QAAO,CAAC;AAC3B,aAAO,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA,MAAM,IAAI;AAAA,QACV,OAAO,IAAI;AAAA,QACX,OAAO,IAAI;AAAA,QACX,SAAS,IAAI;AAAA,QACb,KAAK,IAAI;AAAA,QACT,KAAK,aAAa,GAAG,KAAK;AAAA,MAC5B,CAAC;AAAA,IACH,CAAC;AAAA,IACD,GAAI,kBACA,CAAC;AAAA,MACC,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,IACP,CAAC,IACD,CAAC;AAAA,EACP;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,oBAAC,UAAO,WAAU,WAAU;AAAA,MAClC,OAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAU;AAAA,MAET,gBAAM,IAAI,CAAC,SACV,oBAAC,SAAmB,WAAU,yCAC5B,8BAAC,eAAY,MAAY,KADjB,KAAK,GAEf,CACD;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
"use client";
|
|
3
|
-
var __create = Object.create;
|
|
4
3
|
var __defProp = Object.defineProperty;
|
|
5
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
8
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
7
|
var __export = (target, all) => {
|
|
10
8
|
for (var name in all)
|
|
@@ -18,14 +16,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
16
|
}
|
|
19
17
|
return to;
|
|
20
18
|
};
|
|
21
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
-
mod
|
|
28
|
-
));
|
|
29
19
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
20
|
var scroll_section_exports = {};
|
|
31
21
|
__export(scroll_section_exports, {
|
|
@@ -33,39 +23,10 @@ __export(scroll_section_exports, {
|
|
|
33
23
|
});
|
|
34
24
|
module.exports = __toCommonJS(scroll_section_exports);
|
|
35
25
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
-
var
|
|
37
|
-
|
|
38
|
-
function ScrollSection({
|
|
39
|
-
icon,
|
|
40
|
-
iconBg,
|
|
41
|
-
title,
|
|
42
|
-
subtitle,
|
|
43
|
-
href,
|
|
44
|
-
linkLabel = "See all",
|
|
45
|
-
children
|
|
46
|
-
}) {
|
|
26
|
+
var import_section_heading = require("./section-heading.js");
|
|
27
|
+
function ScrollSection({ icon, title, subtitle, href, linkLabel, children }) {
|
|
47
28
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: "space-y-4", children: [
|
|
48
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
49
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2.5", children: [
|
|
50
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: `h-7 w-7 rounded-lg flex items-center justify-center ${iconBg}`, children: icon }),
|
|
51
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
52
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
|
|
53
|
-
subtitle && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs text-muted-foreground mt-1", children: subtitle })
|
|
54
|
-
] })
|
|
55
|
-
] }),
|
|
56
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
57
|
-
import_link.default,
|
|
58
|
-
{
|
|
59
|
-
href,
|
|
60
|
-
className: "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors",
|
|
61
|
-
children: [
|
|
62
|
-
linkLabel,
|
|
63
|
-
" ",
|
|
64
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3.5 w-3.5" })
|
|
65
|
-
]
|
|
66
|
-
}
|
|
67
|
-
)
|
|
68
|
-
] }),
|
|
29
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_section_heading.SectionHeading, { icon, title, subtitle, href, linkLabel }),
|
|
69
30
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full overflow-x-auto scrollbar-hide", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2", style: { width: "max-content" }, children }) })
|
|
70
31
|
] });
|
|
71
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport
|
|
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":[]}
|
|
@@ -2,13 +2,12 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
|
|
3
3
|
interface ScrollSectionProps {
|
|
4
4
|
icon: React.ReactNode;
|
|
5
|
-
iconBg: string;
|
|
6
5
|
title: string;
|
|
7
6
|
subtitle?: React.ReactNode;
|
|
8
7
|
href: string;
|
|
9
8
|
linkLabel?: string;
|
|
10
9
|
children: React.ReactNode;
|
|
11
10
|
}
|
|
12
|
-
declare function ScrollSection({ icon,
|
|
11
|
+
declare function ScrollSection({ icon, title, subtitle, href, linkLabel, children }: ScrollSectionProps): react_jsx_runtime.JSX.Element;
|
|
13
12
|
|
|
14
13
|
export { ScrollSection, type ScrollSectionProps };
|
|
@@ -2,13 +2,12 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
|
|
3
3
|
interface ScrollSectionProps {
|
|
4
4
|
icon: React.ReactNode;
|
|
5
|
-
iconBg: string;
|
|
6
5
|
title: string;
|
|
7
6
|
subtitle?: React.ReactNode;
|
|
8
7
|
href: string;
|
|
9
8
|
linkLabel?: string;
|
|
10
9
|
children: React.ReactNode;
|
|
11
10
|
}
|
|
12
|
-
declare function ScrollSection({ icon,
|
|
11
|
+
declare function ScrollSection({ icon, title, subtitle, href, linkLabel, children }: ScrollSectionProps): react_jsx_runtime.JSX.Element;
|
|
13
12
|
|
|
14
13
|
export { ScrollSection, type ScrollSectionProps };
|
|
@@ -1,38 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
function ScrollSection({
|
|
6
|
-
icon,
|
|
7
|
-
iconBg,
|
|
8
|
-
title,
|
|
9
|
-
subtitle,
|
|
10
|
-
href,
|
|
11
|
-
linkLabel = "See all",
|
|
12
|
-
children
|
|
13
|
-
}) {
|
|
3
|
+
import { SectionHeading } from "./section-heading.js";
|
|
4
|
+
function ScrollSection({ icon, title, subtitle, href, linkLabel, children }) {
|
|
14
5
|
return /* @__PURE__ */ jsxs("section", { className: "space-y-4", children: [
|
|
15
|
-
/* @__PURE__ */
|
|
16
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
17
|
-
/* @__PURE__ */ jsx("div", { className: `h-7 w-7 rounded-lg flex items-center justify-center ${iconBg}`, children: icon }),
|
|
18
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
19
|
-
/* @__PURE__ */ jsx("h2", { className: "text-lg sm:text-xl font-semibold leading-none", children: title }),
|
|
20
|
-
subtitle && /* @__PURE__ */ jsx("p", { className: "text-2xs text-muted-foreground mt-1", children: subtitle })
|
|
21
|
-
] })
|
|
22
|
-
] }),
|
|
23
|
-
/* @__PURE__ */ jsxs(
|
|
24
|
-
Link,
|
|
25
|
-
{
|
|
26
|
-
href,
|
|
27
|
-
className: "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground px-3 py-1.5 rounded-md hover:bg-accent transition-colors",
|
|
28
|
-
children: [
|
|
29
|
-
linkLabel,
|
|
30
|
-
" ",
|
|
31
|
-
/* @__PURE__ */ jsx(ArrowRight, { className: "h-3.5 w-3.5" })
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
)
|
|
35
|
-
] }),
|
|
6
|
+
/* @__PURE__ */ jsx(SectionHeading, { icon, title, subtitle, href, linkLabel }),
|
|
36
7
|
/* @__PURE__ */ jsx("div", { className: "w-full overflow-x-auto scrollbar-hide", children: /* @__PURE__ */ jsx("div", { className: "flex gap-5 sm:gap-6 snap-x snap-mandatory pb-2", style: { width: "max-content" }, children }) })
|
|
37
8
|
] });
|
|
38
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/scroll-section.tsx"],"sourcesContent":["\"use client\";\n\nimport
|
|
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":[]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var section_heading_exports = {};
|
|
31
|
+
__export(section_heading_exports, {
|
|
32
|
+
SectionHeading: () => SectionHeading
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(section_heading_exports);
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
+
var import_link = __toESM(require("./link.js"), 1);
|
|
37
|
+
var import_lucide_react = require("lucide-react");
|
|
38
|
+
function SectionHeading({ icon, title, subtitle, href, linkLabel = "See all" }) {
|
|
39
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
40
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
41
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4", children: icon }),
|
|
42
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
|
|
43
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-sm font-semibold leading-none tracking-tight text-foreground", children: title }),
|
|
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
|
+
] })
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
48
|
+
import_link.default,
|
|
49
|
+
{
|
|
50
|
+
href,
|
|
51
|
+
className: "inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground",
|
|
52
|
+
children: [
|
|
53
|
+
linkLabel,
|
|
54
|
+
" ",
|
|
55
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3 w-3" })
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
)
|
|
59
|
+
] });
|
|
60
|
+
}
|
|
61
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
62
|
+
0 && (module.exports = {
|
|
63
|
+
SectionHeading
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=section-heading.cjs.map
|
|
@@ -0,0 +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 = \"See 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,UAAU,GAAwB;AAC1G,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"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface SectionHeadingProps {
|
|
4
|
+
icon: React.ReactNode;
|
|
5
|
+
title: string;
|
|
6
|
+
subtitle?: React.ReactNode;
|
|
7
|
+
href: string;
|
|
8
|
+
linkLabel?: string;
|
|
9
|
+
}
|
|
10
|
+
declare function SectionHeading({ icon, title, subtitle, href, linkLabel }: SectionHeadingProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
export { SectionHeading, type SectionHeadingProps };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface SectionHeadingProps {
|
|
4
|
+
icon: React.ReactNode;
|
|
5
|
+
title: string;
|
|
6
|
+
subtitle?: React.ReactNode;
|
|
7
|
+
href: string;
|
|
8
|
+
linkLabel?: string;
|
|
9
|
+
}
|
|
10
|
+
declare function SectionHeading({ icon, title, subtitle, href, linkLabel }: SectionHeadingProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
export { SectionHeading, type SectionHeadingProps };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import Link from "./link.js";
|
|
4
|
+
import { ArrowRight } from "lucide-react";
|
|
5
|
+
function SectionHeading({ icon, title, subtitle, href, linkLabel = "See all" }) {
|
|
6
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
7
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
8
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-muted-foreground [&>svg]:h-4 [&>svg]:w-4", children: icon }),
|
|
9
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
10
|
+
/* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold leading-none tracking-tight text-foreground", children: title }),
|
|
11
|
+
subtitle && /* @__PURE__ */ jsx("p", { className: "mt-1 flex items-center gap-1 text-2xs text-muted-foreground", children: subtitle })
|
|
12
|
+
] })
|
|
13
|
+
] }),
|
|
14
|
+
/* @__PURE__ */ jsxs(
|
|
15
|
+
Link,
|
|
16
|
+
{
|
|
17
|
+
href,
|
|
18
|
+
className: "inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground",
|
|
19
|
+
children: [
|
|
20
|
+
linkLabel,
|
|
21
|
+
" ",
|
|
22
|
+
/* @__PURE__ */ jsx(ArrowRight, { className: "h-3 w-3" })
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
)
|
|
26
|
+
] });
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
SectionHeading
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=section-heading.js.map
|
|
@@ -0,0 +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 = \"See 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,UAAU,GAAwB;AAC1G,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":[]}
|