@medialane/ui 0.326.0 → 0.327.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/home-page.cjs +44 -16
- package/dist/components/home-page.cjs.map +1 -1
- package/dist/components/home-page.js +45 -17
- package/dist/components/home-page.js.map +1 -1
- package/dist/utils/media-wallet/use-erc20-balance.d.cts +1 -1
- package/dist/utils/media-wallet/use-erc20-balance.d.ts +1 -1
- package/package.json +3 -3
|
@@ -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?: "
|
|
7
|
+
variant?: "default" | "secondary" | "outline" | "destructive" | 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?: "
|
|
7
|
+
variant?: "default" | "secondary" | "outline" | "destructive" | 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?: "
|
|
6
|
+
variant?: "link" | "default" | "secondary" | "outline" | "destructive" | "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?: "
|
|
6
|
+
variant?: "link" | "default" | "secondary" | "outline" | "destructive" | "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> {
|
|
@@ -59,30 +59,57 @@ const LAUNCHPAD_HREFS = {
|
|
|
59
59
|
"ip-tickets": "/launchpad/tickets",
|
|
60
60
|
"creator-coins": "/launchpad/coin/create"
|
|
61
61
|
};
|
|
62
|
-
function
|
|
62
|
+
function ListingsStrip({
|
|
63
|
+
market,
|
|
64
|
+
icon,
|
|
65
|
+
title,
|
|
66
|
+
query,
|
|
67
|
+
href,
|
|
68
|
+
linkLabel,
|
|
69
|
+
empty
|
|
70
|
+
}) {
|
|
63
71
|
const { walletAddress } = (0, import_medialane_app.useMedialaneApp)();
|
|
64
|
-
const { orders, isLoading } = (0, import_use_orders.useOrders)(
|
|
72
|
+
const { orders, isLoading } = (0, import_use_orders.useOrders)(query);
|
|
65
73
|
const prices = (0, import_use_usd_prices.useUsdPrices)();
|
|
66
74
|
const listings = orders.filter((o) => o.offer.itemType === "ERC721" || o.offer.itemType === "ERC1155").slice(0, 10);
|
|
75
|
+
if (!isLoading && listings.length === 0 && !empty) return null;
|
|
76
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_scroll_section.ScrollSection, { icon, title, href, linkLabel, children: isLoading ? Array.from({ length: 8 }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-56 shrink-0 snap-start sm:w-64", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_listing_card.ListingCardSkeleton, {}) }, i)) : listings.length === 0 ? empty : listings.map((order) => {
|
|
77
|
+
const own = !!walletAddress && (0, import_same_address.isSameAddress)(order.offerer, walletAddress);
|
|
78
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-56 shrink-0 snap-start sm:w-64", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
79
|
+
import_listing_card.ListingCard,
|
|
80
|
+
{
|
|
81
|
+
order,
|
|
82
|
+
onBuy: own ? void 0 : () => market.buy(order),
|
|
83
|
+
overflowMenu: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_listing_card_menu.ListingCardMenu, { order }),
|
|
84
|
+
usdValue: (0, import_order_usd.orderUsd)(order.price, prices)
|
|
85
|
+
}
|
|
86
|
+
) }, order.orderHash);
|
|
87
|
+
}) });
|
|
88
|
+
}
|
|
89
|
+
function NewListings({ market }) {
|
|
67
90
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
68
|
-
|
|
91
|
+
ListingsStrip,
|
|
69
92
|
{
|
|
70
|
-
|
|
93
|
+
market,
|
|
94
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Tag, {}),
|
|
71
95
|
title: "New listings",
|
|
96
|
+
query: { status: "ACTIVE", limit: 10, page: 1 },
|
|
72
97
|
href: "/marketplace",
|
|
73
98
|
linkLabel: "Marketplace",
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
99
|
+
empty: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "py-4 text-sm text-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: "/launchpad/single-editions", className: "text-primary hover:underline", children: "Sell the first asset" }) })
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
function FeaturedListings({ market }) {
|
|
104
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
105
|
+
ListingsStrip,
|
|
106
|
+
{
|
|
107
|
+
market,
|
|
108
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Sparkles, {}),
|
|
109
|
+
title: "Featured listings",
|
|
110
|
+
query: { status: "ACTIVE", isFeatured: true, limit: 20, page: 1 },
|
|
111
|
+
href: "/marketplace",
|
|
112
|
+
linkLabel: "Marketplace"
|
|
86
113
|
}
|
|
87
114
|
);
|
|
88
115
|
}
|
|
@@ -108,6 +135,7 @@ function HomePage({ useMarketActions, initialFeatured }) {
|
|
|
108
135
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page_container.PageContainer, { className: "box-border max-w-full pt-6 pb-0", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_activity_ticker.ActivityTicker, { orders: tickerOrders, minItems: 3, getHref: (o) => (0, import_sdk.assetHref)("STARKNET", o.nftContract, o.nftTokenId) }) }),
|
|
109
136
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_page_container.PageContainer, { className: "mt-16 box-border max-w-full space-y-10 pt-0 pb-0 sm:space-y-16 lg:space-y-20", children: [
|
|
110
137
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(NewListings, { market }),
|
|
138
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(FeaturedListings, { market }),
|
|
111
139
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CollectionsStrip, {}),
|
|
112
140
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_rewards_section.RewardsSection, { rewardsHref: "/rewards" }),
|
|
113
141
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_launchpad_strip.LaunchpadStrip, { hrefs: LAUNCHPAD_HREFS, marketplaceHref: "/marketplace", launchpadHref: "/launchpad" })
|
|
@@ -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
|
|
1
|
+
{"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref, type ApiCollection, type ApiOrdersQuery } from \"@medialane/sdk\";\nimport type { ReactNode } from \"react\";\nimport { Sparkles, 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 ListingsStrip({\n market, icon, title, query, href, linkLabel, empty,\n}: {\n market: CollectionMarketActions;\n icon: ReactNode;\n title: string;\n query: ApiOrdersQuery;\n href: string;\n linkLabel: string;\n empty?: ReactNode;\n}) {\n const { walletAddress } = useMedialaneApp();\n const { orders, isLoading } = useOrders(query);\n const prices = useUsdPrices();\n const listings = orders.filter((o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\").slice(0, 10);\n if (!isLoading && listings.length === 0 && !empty) return null;\n return (\n <ScrollSection icon={icon} title={title} href={href} linkLabel={linkLabel}>\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-56 shrink-0 snap-start sm:w-64\"><ListingCardSkeleton /></div>\n ))\n : listings.length === 0\n ? empty\n : listings.map((order) => {\n const own = !!walletAddress && isSameAddress(order.offerer, walletAddress);\n return (\n <div key={order.orderHash} className=\"w-56 shrink-0 snap-start sm:w-64\">\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 NewListings({ market }: { market: CollectionMarketActions }) {\n return (\n <ListingsStrip\n market={market}\n icon={<Tag />}\n title=\"New listings\"\n query={{ status: \"ACTIVE\", limit: 10, page: 1 }}\n href=\"/marketplace\"\n linkLabel=\"Marketplace\"\n empty={\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 />\n );\n}\n\nfunction FeaturedListings({ market }: { market: CollectionMarketActions }) {\n return (\n <ListingsStrip\n market={market}\n icon={<Sparkles />}\n title=\"Featured listings\"\n query={{ status: \"ACTIVE\", isFeatured: true, limit: 20, page: 1 }}\n href=\"/marketplace\"\n linkLabel=\"Marketplace\"\n />\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-56 shrink-0 snap-start sm:w-64\"><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 <FeaturedListings market={market} />\n <CollectionsStrip />\n <RewardsSection rewardsHref=\"/rewards\" />\n <LaunchpadStrip hrefs={LAUNCHPAD_HREFS} marketplaceHref=\"/marketplace\" launchpadHref=\"/launchpad\" />\n </PageContainer>\n {market.dialogs}\n </div>\n );\n}\n"],"mappings":"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","names":["Link"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { assetHref, collectionHref } from "@medialane/sdk";
|
|
4
|
-
import { Tag, TrendingUp } from "lucide-react";
|
|
4
|
+
import { Sparkles, Tag, TrendingUp } from "lucide-react";
|
|
5
5
|
import Link from "./link.js";
|
|
6
6
|
import { PageContainer } from "./page-container.js";
|
|
7
7
|
import { HeroSlider } from "./hero-slider.js";
|
|
@@ -26,30 +26,57 @@ const LAUNCHPAD_HREFS = {
|
|
|
26
26
|
"ip-tickets": "/launchpad/tickets",
|
|
27
27
|
"creator-coins": "/launchpad/coin/create"
|
|
28
28
|
};
|
|
29
|
-
function
|
|
29
|
+
function ListingsStrip({
|
|
30
|
+
market,
|
|
31
|
+
icon,
|
|
32
|
+
title,
|
|
33
|
+
query,
|
|
34
|
+
href,
|
|
35
|
+
linkLabel,
|
|
36
|
+
empty
|
|
37
|
+
}) {
|
|
30
38
|
const { walletAddress } = useMedialaneApp();
|
|
31
|
-
const { orders, isLoading } = useOrders(
|
|
39
|
+
const { orders, isLoading } = useOrders(query);
|
|
32
40
|
const prices = useUsdPrices();
|
|
33
41
|
const listings = orders.filter((o) => o.offer.itemType === "ERC721" || o.offer.itemType === "ERC1155").slice(0, 10);
|
|
42
|
+
if (!isLoading && listings.length === 0 && !empty) return null;
|
|
43
|
+
return /* @__PURE__ */ jsx(ScrollSection, { icon, title, href, linkLabel, children: isLoading ? Array.from({ length: 8 }).map((_, i) => /* @__PURE__ */ jsx("div", { className: "w-56 shrink-0 snap-start sm:w-64", children: /* @__PURE__ */ jsx(ListingCardSkeleton, {}) }, i)) : listings.length === 0 ? empty : listings.map((order) => {
|
|
44
|
+
const own = !!walletAddress && isSameAddress(order.offerer, walletAddress);
|
|
45
|
+
return /* @__PURE__ */ jsx("div", { className: "w-56 shrink-0 snap-start sm:w-64", children: /* @__PURE__ */ jsx(
|
|
46
|
+
ListingCard,
|
|
47
|
+
{
|
|
48
|
+
order,
|
|
49
|
+
onBuy: own ? void 0 : () => market.buy(order),
|
|
50
|
+
overflowMenu: /* @__PURE__ */ jsx(ListingCardMenu, { order }),
|
|
51
|
+
usdValue: orderUsd(order.price, prices)
|
|
52
|
+
}
|
|
53
|
+
) }, order.orderHash);
|
|
54
|
+
}) });
|
|
55
|
+
}
|
|
56
|
+
function NewListings({ market }) {
|
|
34
57
|
return /* @__PURE__ */ jsx(
|
|
35
|
-
|
|
58
|
+
ListingsStrip,
|
|
36
59
|
{
|
|
37
|
-
|
|
60
|
+
market,
|
|
61
|
+
icon: /* @__PURE__ */ jsx(Tag, {}),
|
|
38
62
|
title: "New listings",
|
|
63
|
+
query: { status: "ACTIVE", limit: 10, page: 1 },
|
|
39
64
|
href: "/marketplace",
|
|
40
65
|
linkLabel: "Marketplace",
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
66
|
+
empty: /* @__PURE__ */ jsx("p", { className: "py-4 text-sm text-muted-foreground", children: /* @__PURE__ */ jsx(Link, { href: "/launchpad/single-editions", className: "text-primary hover:underline", children: "Sell the first asset" }) })
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
function FeaturedListings({ market }) {
|
|
71
|
+
return /* @__PURE__ */ jsx(
|
|
72
|
+
ListingsStrip,
|
|
73
|
+
{
|
|
74
|
+
market,
|
|
75
|
+
icon: /* @__PURE__ */ jsx(Sparkles, {}),
|
|
76
|
+
title: "Featured listings",
|
|
77
|
+
query: { status: "ACTIVE", isFeatured: true, limit: 20, page: 1 },
|
|
78
|
+
href: "/marketplace",
|
|
79
|
+
linkLabel: "Marketplace"
|
|
53
80
|
}
|
|
54
81
|
);
|
|
55
82
|
}
|
|
@@ -75,6 +102,7 @@ function HomePage({ useMarketActions, initialFeatured }) {
|
|
|
75
102
|
/* @__PURE__ */ jsx(PageContainer, { className: "box-border max-w-full pt-6 pb-0", children: /* @__PURE__ */ jsx(ActivityTicker, { orders: tickerOrders, minItems: 3, getHref: (o) => assetHref("STARKNET", o.nftContract, o.nftTokenId) }) }),
|
|
76
103
|
/* @__PURE__ */ jsxs(PageContainer, { className: "mt-16 box-border max-w-full space-y-10 pt-0 pb-0 sm:space-y-16 lg:space-y-20", children: [
|
|
77
104
|
/* @__PURE__ */ jsx(NewListings, { market }),
|
|
105
|
+
/* @__PURE__ */ jsx(FeaturedListings, { market }),
|
|
78
106
|
/* @__PURE__ */ jsx(CollectionsStrip, {}),
|
|
79
107
|
/* @__PURE__ */ jsx(RewardsSection, { rewardsHref: "/rewards" }),
|
|
80
108
|
/* @__PURE__ */ jsx(LaunchpadStrip, { hrefs: LAUNCHPAD_HREFS, marketplaceHref: "/marketplace", launchpadHref: "/launchpad" })
|
|
@@ -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
|
|
1
|
+
{"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["\"use client\";\n\nimport { assetHref, collectionHref, type ApiCollection, type ApiOrdersQuery } from \"@medialane/sdk\";\nimport type { ReactNode } from \"react\";\nimport { Sparkles, 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 ListingsStrip({\n market, icon, title, query, href, linkLabel, empty,\n}: {\n market: CollectionMarketActions;\n icon: ReactNode;\n title: string;\n query: ApiOrdersQuery;\n href: string;\n linkLabel: string;\n empty?: ReactNode;\n}) {\n const { walletAddress } = useMedialaneApp();\n const { orders, isLoading } = useOrders(query);\n const prices = useUsdPrices();\n const listings = orders.filter((o) => o.offer.itemType === \"ERC721\" || o.offer.itemType === \"ERC1155\").slice(0, 10);\n if (!isLoading && listings.length === 0 && !empty) return null;\n return (\n <ScrollSection icon={icon} title={title} href={href} linkLabel={linkLabel}>\n {isLoading\n ? Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"w-56 shrink-0 snap-start sm:w-64\"><ListingCardSkeleton /></div>\n ))\n : listings.length === 0\n ? empty\n : listings.map((order) => {\n const own = !!walletAddress && isSameAddress(order.offerer, walletAddress);\n return (\n <div key={order.orderHash} className=\"w-56 shrink-0 snap-start sm:w-64\">\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 NewListings({ market }: { market: CollectionMarketActions }) {\n return (\n <ListingsStrip\n market={market}\n icon={<Tag />}\n title=\"New listings\"\n query={{ status: \"ACTIVE\", limit: 10, page: 1 }}\n href=\"/marketplace\"\n linkLabel=\"Marketplace\"\n empty={\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 />\n );\n}\n\nfunction FeaturedListings({ market }: { market: CollectionMarketActions }) {\n return (\n <ListingsStrip\n market={market}\n icon={<Sparkles />}\n title=\"Featured listings\"\n query={{ status: \"ACTIVE\", isFeatured: true, limit: 20, page: 1 }}\n href=\"/marketplace\"\n linkLabel=\"Marketplace\"\n />\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-56 shrink-0 snap-start sm:w-64\"><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 <FeaturedListings 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":[]}
|
|
@@ -7,7 +7,7 @@ declare function useTokenBalance(symbol: string | null, holderAddress: string |
|
|
|
7
7
|
rawBalance: bigint | null;
|
|
8
8
|
isLoading: boolean;
|
|
9
9
|
error: any;
|
|
10
|
-
decimals:
|
|
10
|
+
decimals: 8 | 6 | 18;
|
|
11
11
|
};
|
|
12
12
|
declare function hasSufficientBalance(rawBalance: bigint | null, requiredHuman: string, decimals: number): boolean | null;
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ declare function useTokenBalance(symbol: string | null, holderAddress: string |
|
|
|
7
7
|
rawBalance: bigint | null;
|
|
8
8
|
isLoading: boolean;
|
|
9
9
|
error: any;
|
|
10
|
-
decimals:
|
|
10
|
+
decimals: 8 | 6 | 18;
|
|
11
11
|
};
|
|
12
12
|
declare function hasSufficientBalance(rawBalance: bigint | null, requiredHuman: string, decimals: number): boolean | null;
|
|
13
13
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@medialane/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.327.0",
|
|
4
4
|
"description": "Shared UI components for Medialane apps",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"preview": "vite --config preview/vite.config.ts"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@medialane/sdk": ">=0.
|
|
54
|
+
"@medialane/sdk": ">=0.225.0 <1.0.0",
|
|
55
55
|
"@radix-ui/react-checkbox": ">=1.1.0",
|
|
56
56
|
"@radix-ui/react-collapsible": ">=1.1.0",
|
|
57
57
|
"@radix-ui/react-dialog": ">=1.1.0",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"devDependencies": {
|
|
88
88
|
"@happy-dom/global-registrator": "^20.14.5",
|
|
89
89
|
"@hookform/resolvers": "^3.10.0",
|
|
90
|
-
"@medialane/sdk": "0.
|
|
90
|
+
"@medialane/sdk": "0.225.0",
|
|
91
91
|
"@radix-ui/react-checkbox": "^1.3.8",
|
|
92
92
|
"@radix-ui/react-collapsible": "^1.1.17",
|
|
93
93
|
"@radix-ui/react-dialog": "^1.1.20",
|