@medialane/ui 0.138.0 → 0.139.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/coin-launch-preview.cjs +30 -23
- package/dist/components/coin-launch-preview.cjs.map +1 -1
- package/dist/components/coin-launch-preview.d.cts +1 -0
- package/dist/components/coin-launch-preview.d.ts +1 -0
- package/dist/components/coin-launch-preview.js +30 -23
- package/dist/components/coin-launch-preview.js.map +1 -1
- package/dist/data/drop-create-schema.d.cts +2 -2
- package/dist/data/drop-create-schema.d.ts +2 -2
- package/package.json +1 -1
|
@@ -36,11 +36,14 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
36
36
|
var import_image = __toESM(require("./image.js"), 1);
|
|
37
37
|
var import_lucide_react = require("lucide-react");
|
|
38
38
|
var import_cn = require("../utils/cn.js");
|
|
39
|
-
|
|
39
|
+
var import_currency_icon = require("./currency-icon.js");
|
|
40
40
|
const COIN_GRADIENT = "linear-gradient(135deg, #f6608f, #fb8b46)";
|
|
41
|
+
function StatValue({ children }) {
|
|
42
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "inline-flex items-center gap-1 font-bold tabular-nums text-brand-maeve", children });
|
|
43
|
+
}
|
|
41
44
|
function CoinLaunchPreview({ data, className }) {
|
|
42
|
-
const { name, symbol, description, imageUrl, supplyHuman, quoteSymbol, teamPct } = data;
|
|
43
|
-
const marketCap = supplyHuman != null ? supplyHuman *
|
|
45
|
+
const { name, symbol, description, imageUrl, supplyHuman, price, quoteSymbol, teamPct } = data;
|
|
46
|
+
const marketCap = supplyHuman != null ? supplyHuman * price : null;
|
|
44
47
|
const yourCoins = supplyHuman != null ? supplyHuman * (teamPct / 100) : null;
|
|
45
48
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: (0, import_cn.cn)("rounded-2xl bg-muted/50 dark:bg-card overflow-hidden", className), children: [
|
|
46
49
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "px-5 pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "section-label", children: "Live preview" }) }),
|
|
@@ -53,40 +56,44 @@ function CoinLaunchPreview({ data, className }) {
|
|
|
53
56
|
] })
|
|
54
57
|
] }),
|
|
55
58
|
description ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm text-muted-foreground leading-relaxed line-clamp-3", children: description }) : null,
|
|
56
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "
|
|
59
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "rounded-xl bg-muted/50 dark:bg-muted/30 p-4 space-y-3", children: [
|
|
57
60
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
58
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs uppercase tracking-wide text-muted-foreground", children: "
|
|
59
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
60
|
-
|
|
61
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs uppercase tracking-wide text-muted-foreground", children: "Market cap" }),
|
|
62
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xl", children: marketCap != null ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(StatValue, { children: [
|
|
63
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_currency_icon.CurrencyIcon, { symbol: quoteSymbol, size: 18 }),
|
|
64
|
+
marketCap.toLocaleString(),
|
|
61
65
|
" ",
|
|
62
66
|
quoteSymbol
|
|
63
|
-
] })
|
|
67
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: "\u2014" }) })
|
|
64
68
|
] }),
|
|
65
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
66
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("
|
|
67
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between text-sm border-t border-border/60 pt-3", children: [
|
|
70
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: "Launch price" }),
|
|
71
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "inline-flex items-center gap-1 font-semibold tabular-nums", children: [
|
|
72
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_currency_icon.CurrencyIcon, { symbol: quoteSymbol, size: 14 }),
|
|
73
|
+
price,
|
|
74
|
+
" ",
|
|
75
|
+
quoteSymbol,
|
|
76
|
+
" / coin"
|
|
77
|
+
] })
|
|
72
78
|
] })
|
|
73
79
|
] }),
|
|
74
80
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1.5", children: [
|
|
75
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex
|
|
76
|
-
teamPct > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { width: `${teamPct}%`, background: COIN_GRADIENT } }),
|
|
77
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex-1" })
|
|
78
|
-
] }),
|
|
79
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex justify-between text-2xs text-muted-foreground", children: [
|
|
81
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between text-sm", children: [
|
|
80
82
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "font-medium text-brand-rose", children: [
|
|
81
|
-
"You ",
|
|
83
|
+
"You keep ",
|
|
82
84
|
teamPct,
|
|
83
|
-
"%"
|
|
85
|
+
"%",
|
|
86
|
+
yourCoins != null ? ` \xB7 ${yourCoins.toLocaleString()} ${symbol || "coins"}` : ""
|
|
84
87
|
] }),
|
|
85
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
88
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "text-muted-foreground", children: [
|
|
86
89
|
"Community ",
|
|
87
90
|
100 - teamPct,
|
|
88
91
|
"%"
|
|
89
92
|
] })
|
|
93
|
+
] }),
|
|
94
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex h-2.5 rounded-full overflow-hidden bg-muted-foreground/15", children: [
|
|
95
|
+
teamPct > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { width: `${teamPct}%`, background: COIN_GRADIENT } }),
|
|
96
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex-1" })
|
|
90
97
|
] })
|
|
91
98
|
] }),
|
|
92
99
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs text-muted-foreground/70", children: "Liquidity is locked forever \u2014 nobody can pull it, including us." })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/coin-launch-preview.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"./image.js\";\nimport { TrendingUp } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface CoinPreviewData {\n name: string;\n symbol: string;\n description: string;\n\n imageUrl: string | null;\n\n supplyHuman: number | null;\n quoteSymbol: string;\n teamPct: number;\n}\n\nconst
|
|
1
|
+
{"version":3,"sources":["../../src/components/coin-launch-preview.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"./image.js\";\nimport { TrendingUp } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\n\nexport interface CoinPreviewData {\n name: string;\n symbol: string;\n description: string;\n\n imageUrl: string | null;\n\n supplyHuman: number | null;\n price: number;\n quoteSymbol: string;\n teamPct: number;\n}\n\nconst COIN_GRADIENT = \"linear-gradient(135deg, #f6608f, #fb8b46)\";\n\nfunction StatValue({ children }: { children: React.ReactNode }) {\n return (\n <span className=\"inline-flex items-center gap-1 font-bold tabular-nums text-brand-maeve\">\n {children}\n </span>\n );\n}\n\nexport function CoinLaunchPreview({ data, className }: { data: CoinPreviewData; className?: string }) {\n const { name, symbol, description, imageUrl, supplyHuman, price, quoteSymbol, teamPct } = data;\n const marketCap = supplyHuman != null ? supplyHuman * price : null;\n const yourCoins = supplyHuman != null ? supplyHuman * (teamPct / 100) : null;\n\n return (\n <div className={cn(\"rounded-2xl bg-muted/50 dark:bg-card overflow-hidden\", className)}>\n <div className=\"px-5 pt-4\">\n <p className=\"section-label\">Live preview</p>\n </div>\n\n <div className=\"p-5 space-y-4\">\n\n <div className=\"flex items-center gap-3\">\n <div className=\"shrink-0 rounded-full p-[2px]\" style={{ background: COIN_GRADIENT }}>\n <div className=\"relative h-14 w-14 rounded-full overflow-hidden bg-card flex items-center justify-center\">\n {imageUrl ? (\n <Image src={imageUrl} alt=\"\" fill sizes=\"56px\" className=\"object-cover\" unoptimized />\n ) : (\n <TrendingUp className=\"h-6 w-6 text-brand-rose/70\" />\n )}\n </div>\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className={cn(\"font-bold text-lg leading-snug truncate\", !name && \"text-muted-foreground/50\")}>\n {name || \"Your coin\"}\n </p>\n <p className=\"text-sm text-muted-foreground tabular-nums\">{symbol ? `$${symbol}` : \"$SYMBOL\"}</p>\n </div>\n </div>\n\n {description ? (\n <p className=\"text-sm text-muted-foreground leading-relaxed line-clamp-3\">{description}</p>\n ) : null}\n\n <div className=\"rounded-xl bg-muted/50 dark:bg-muted/30 p-4 space-y-3\">\n <div>\n <p className=\"text-2xs uppercase tracking-wide text-muted-foreground\">Market cap</p>\n <p className=\"text-2xl\">\n {marketCap != null ? (\n <StatValue>\n <CurrencyIcon symbol={quoteSymbol} size={18} />\n {marketCap.toLocaleString()} {quoteSymbol}\n </StatValue>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n )}\n </p>\n </div>\n <div className=\"flex items-center justify-between text-sm border-t border-border/60 pt-3\">\n <span className=\"text-muted-foreground\">Launch price</span>\n <span className=\"inline-flex items-center gap-1 font-semibold tabular-nums\">\n <CurrencyIcon symbol={quoteSymbol} size={14} />\n {price} {quoteSymbol} / coin\n </span>\n </div>\n </div>\n\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"font-medium text-brand-rose\">\n You keep {teamPct}%{yourCoins != null ? ` · ${yourCoins.toLocaleString()} ${symbol || \"coins\"}` : \"\"}\n </span>\n <span className=\"text-muted-foreground\">Community {100 - teamPct}%</span>\n </div>\n <div className=\"flex h-2.5 rounded-full overflow-hidden bg-muted-foreground/15\">\n {teamPct > 0 && <div style={{ width: `${teamPct}%`, background: COIN_GRADIENT }} />}\n <div className=\"flex-1\" />\n </div>\n </div>\n\n <p className=\"text-2xs text-muted-foreground/70\">\n Liquidity is locked forever — nobody can pull it, including us.\n </p>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBI;AAtBJ,mBAAkB;AAClB,0BAA2B;AAC3B,gBAAmB;AACnB,2BAA6B;AAe7B,MAAM,gBAAgB;AAEtB,SAAS,UAAU,EAAE,SAAS,GAAkC;AAC9D,SACE,4CAAC,UAAK,WAAU,0EACb,UACH;AAEJ;AAEO,SAAS,kBAAkB,EAAE,MAAM,UAAU,GAAkD;AACpG,QAAM,EAAE,MAAM,QAAQ,aAAa,UAAU,aAAa,OAAO,aAAa,QAAQ,IAAI;AAC1F,QAAM,YAAY,eAAe,OAAO,cAAc,QAAQ;AAC9D,QAAM,YAAY,eAAe,OAAO,eAAe,UAAU,OAAO;AAExE,SACE,6CAAC,SAAI,eAAW,cAAG,wDAAwD,SAAS,GAClF;AAAA,gDAAC,SAAI,WAAU,aACb,sDAAC,OAAE,WAAU,iBAAgB,0BAAY,GAC3C;AAAA,IAEA,6CAAC,SAAI,WAAU,iBAEb;AAAA,mDAAC,SAAI,WAAU,2BACb;AAAA,oDAAC,SAAI,WAAU,iCAAgC,OAAO,EAAE,YAAY,cAAc,GAChF,sDAAC,SAAI,WAAU,4FACZ,qBACC,4CAAC,aAAAA,SAAA,EAAM,KAAK,UAAU,KAAI,IAAG,MAAI,MAAC,OAAM,QAAO,WAAU,gBAAe,aAAW,MAAC,IAEpF,4CAAC,kCAAW,WAAU,8BAA6B,GAEvD,GACF;AAAA,QACA,6CAAC,SAAI,WAAU,kBACb;AAAA,sDAAC,OAAE,eAAW,cAAG,2CAA2C,CAAC,QAAQ,0BAA0B,GAC5F,kBAAQ,aACX;AAAA,UACA,4CAAC,OAAE,WAAU,8CAA8C,mBAAS,IAAI,MAAM,KAAK,WAAU;AAAA,WAC/F;AAAA,SACF;AAAA,MAEC,cACC,4CAAC,OAAE,WAAU,8DAA8D,uBAAY,IACrF;AAAA,MAEJ,6CAAC,SAAI,WAAU,yDACb;AAAA,qDAAC,SACC;AAAA,sDAAC,OAAE,WAAU,0DAAyD,wBAAU;AAAA,UAChF,4CAAC,OAAE,WAAU,YACV,uBAAa,OACZ,6CAAC,aACC;AAAA,wDAAC,qCAAa,QAAQ,aAAa,MAAM,IAAI;AAAA,YAC5C,UAAU,eAAe;AAAA,YAAE;AAAA,YAAE;AAAA,aAChC,IAEA,4CAAC,UAAK,WAAU,yBAAwB,oBAAC,GAE7C;AAAA,WACF;AAAA,QACA,6CAAC,SAAI,WAAU,4EACb;AAAA,sDAAC,UAAK,WAAU,yBAAwB,0BAAY;AAAA,UACpD,6CAAC,UAAK,WAAU,6DACd;AAAA,wDAAC,qCAAa,QAAQ,aAAa,MAAM,IAAI;AAAA,YAC5C;AAAA,YAAM;AAAA,YAAE;AAAA,YAAY;AAAA,aACvB;AAAA,WACF;AAAA,SACF;AAAA,MAEA,6CAAC,SAAI,WAAU,eACb;AAAA,qDAAC,SAAI,WAAU,6CACb;AAAA,uDAAC,UAAK,WAAU,+BAA8B;AAAA;AAAA,YAClC;AAAA,YAAQ;AAAA,YAAE,aAAa,OAAO,SAAM,UAAU,eAAe,CAAC,IAAI,UAAU,OAAO,KAAK;AAAA,aACpG;AAAA,UACA,6CAAC,UAAK,WAAU,yBAAwB;AAAA;AAAA,YAAW,MAAM;AAAA,YAAQ;AAAA,aAAC;AAAA,WACpE;AAAA,QACA,6CAAC,SAAI,WAAU,kEACZ;AAAA,oBAAU,KAAK,4CAAC,SAAI,OAAO,EAAE,OAAO,GAAG,OAAO,KAAK,YAAY,cAAc,GAAG;AAAA,UACjF,4CAAC,SAAI,WAAU,UAAS;AAAA,WAC1B;AAAA,SACF;AAAA,MAEA,4CAAC,OAAE,WAAU,qCAAoC,kFAEjD;AAAA,OACF;AAAA,KACF;AAEJ;","names":["Image"]}
|
|
@@ -3,11 +3,14 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import Image from "./image.js";
|
|
4
4
|
import { TrendingUp } from "lucide-react";
|
|
5
5
|
import { cn } from "../utils/cn.js";
|
|
6
|
-
|
|
6
|
+
import { CurrencyIcon } from "./currency-icon.js";
|
|
7
7
|
const COIN_GRADIENT = "linear-gradient(135deg, #f6608f, #fb8b46)";
|
|
8
|
+
function StatValue({ children }) {
|
|
9
|
+
return /* @__PURE__ */ jsx("span", { className: "inline-flex items-center gap-1 font-bold tabular-nums text-brand-maeve", children });
|
|
10
|
+
}
|
|
8
11
|
function CoinLaunchPreview({ data, className }) {
|
|
9
|
-
const { name, symbol, description, imageUrl, supplyHuman, quoteSymbol, teamPct } = data;
|
|
10
|
-
const marketCap = supplyHuman != null ? supplyHuman *
|
|
12
|
+
const { name, symbol, description, imageUrl, supplyHuman, price, quoteSymbol, teamPct } = data;
|
|
13
|
+
const marketCap = supplyHuman != null ? supplyHuman * price : null;
|
|
11
14
|
const yourCoins = supplyHuman != null ? supplyHuman * (teamPct / 100) : null;
|
|
12
15
|
return /* @__PURE__ */ jsxs("div", { className: cn("rounded-2xl bg-muted/50 dark:bg-card overflow-hidden", className), children: [
|
|
13
16
|
/* @__PURE__ */ jsx("div", { className: "px-5 pt-4", children: /* @__PURE__ */ jsx("p", { className: "section-label", children: "Live preview" }) }),
|
|
@@ -20,40 +23,44 @@ function CoinLaunchPreview({ data, className }) {
|
|
|
20
23
|
] })
|
|
21
24
|
] }),
|
|
22
25
|
description ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed line-clamp-3", children: description }) : null,
|
|
23
|
-
/* @__PURE__ */ jsxs("div", { className: "
|
|
26
|
+
/* @__PURE__ */ jsxs("div", { className: "rounded-xl bg-muted/50 dark:bg-muted/30 p-4 space-y-3", children: [
|
|
24
27
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
25
|
-
/* @__PURE__ */ jsx("p", { className: "text-2xs uppercase tracking-wide text-muted-foreground", children: "
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
-
|
|
28
|
+
/* @__PURE__ */ jsx("p", { className: "text-2xs uppercase tracking-wide text-muted-foreground", children: "Market cap" }),
|
|
29
|
+
/* @__PURE__ */ jsx("p", { className: "text-2xl", children: marketCap != null ? /* @__PURE__ */ jsxs(StatValue, { children: [
|
|
30
|
+
/* @__PURE__ */ jsx(CurrencyIcon, { symbol: quoteSymbol, size: 18 }),
|
|
31
|
+
marketCap.toLocaleString(),
|
|
28
32
|
" ",
|
|
29
33
|
quoteSymbol
|
|
30
|
-
] })
|
|
34
|
+
] }) : /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "\u2014" }) })
|
|
31
35
|
] }),
|
|
32
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
33
|
-
/* @__PURE__ */ jsx("
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-sm border-t border-border/60 pt-3", children: [
|
|
37
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Launch price" }),
|
|
38
|
+
/* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 font-semibold tabular-nums", children: [
|
|
39
|
+
/* @__PURE__ */ jsx(CurrencyIcon, { symbol: quoteSymbol, size: 14 }),
|
|
40
|
+
price,
|
|
41
|
+
" ",
|
|
42
|
+
quoteSymbol,
|
|
43
|
+
" / coin"
|
|
44
|
+
] })
|
|
39
45
|
] })
|
|
40
46
|
] }),
|
|
41
47
|
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
42
|
-
/* @__PURE__ */ jsxs("div", { className: "flex
|
|
43
|
-
teamPct > 0 && /* @__PURE__ */ jsx("div", { style: { width: `${teamPct}%`, background: COIN_GRADIENT } }),
|
|
44
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1" })
|
|
45
|
-
] }),
|
|
46
|
-
/* @__PURE__ */ jsxs("div", { className: "flex justify-between text-2xs text-muted-foreground", children: [
|
|
48
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-sm", children: [
|
|
47
49
|
/* @__PURE__ */ jsxs("span", { className: "font-medium text-brand-rose", children: [
|
|
48
|
-
"You ",
|
|
50
|
+
"You keep ",
|
|
49
51
|
teamPct,
|
|
50
|
-
"%"
|
|
52
|
+
"%",
|
|
53
|
+
yourCoins != null ? ` \xB7 ${yourCoins.toLocaleString()} ${symbol || "coins"}` : ""
|
|
51
54
|
] }),
|
|
52
|
-
/* @__PURE__ */ jsxs("span", { children: [
|
|
55
|
+
/* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
|
|
53
56
|
"Community ",
|
|
54
57
|
100 - teamPct,
|
|
55
58
|
"%"
|
|
56
59
|
] })
|
|
60
|
+
] }),
|
|
61
|
+
/* @__PURE__ */ jsxs("div", { className: "flex h-2.5 rounded-full overflow-hidden bg-muted-foreground/15", children: [
|
|
62
|
+
teamPct > 0 && /* @__PURE__ */ jsx("div", { style: { width: `${teamPct}%`, background: COIN_GRADIENT } }),
|
|
63
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1" })
|
|
57
64
|
] })
|
|
58
65
|
] }),
|
|
59
66
|
/* @__PURE__ */ jsx("p", { className: "text-2xs text-muted-foreground/70", children: "Liquidity is locked forever \u2014 nobody can pull it, including us." })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/coin-launch-preview.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"./image.js\";\nimport { TrendingUp } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\n\nexport interface CoinPreviewData {\n name: string;\n symbol: string;\n description: string;\n\n imageUrl: string | null;\n\n supplyHuman: number | null;\n quoteSymbol: string;\n teamPct: number;\n}\n\nconst
|
|
1
|
+
{"version":3,"sources":["../../src/components/coin-launch-preview.tsx"],"sourcesContent":["\"use client\";\n\nimport Image from \"./image.js\";\nimport { TrendingUp } from \"lucide-react\";\nimport { cn } from \"../utils/cn.js\";\nimport { CurrencyIcon } from \"./currency-icon.js\";\n\nexport interface CoinPreviewData {\n name: string;\n symbol: string;\n description: string;\n\n imageUrl: string | null;\n\n supplyHuman: number | null;\n price: number;\n quoteSymbol: string;\n teamPct: number;\n}\n\nconst COIN_GRADIENT = \"linear-gradient(135deg, #f6608f, #fb8b46)\";\n\nfunction StatValue({ children }: { children: React.ReactNode }) {\n return (\n <span className=\"inline-flex items-center gap-1 font-bold tabular-nums text-brand-maeve\">\n {children}\n </span>\n );\n}\n\nexport function CoinLaunchPreview({ data, className }: { data: CoinPreviewData; className?: string }) {\n const { name, symbol, description, imageUrl, supplyHuman, price, quoteSymbol, teamPct } = data;\n const marketCap = supplyHuman != null ? supplyHuman * price : null;\n const yourCoins = supplyHuman != null ? supplyHuman * (teamPct / 100) : null;\n\n return (\n <div className={cn(\"rounded-2xl bg-muted/50 dark:bg-card overflow-hidden\", className)}>\n <div className=\"px-5 pt-4\">\n <p className=\"section-label\">Live preview</p>\n </div>\n\n <div className=\"p-5 space-y-4\">\n\n <div className=\"flex items-center gap-3\">\n <div className=\"shrink-0 rounded-full p-[2px]\" style={{ background: COIN_GRADIENT }}>\n <div className=\"relative h-14 w-14 rounded-full overflow-hidden bg-card flex items-center justify-center\">\n {imageUrl ? (\n <Image src={imageUrl} alt=\"\" fill sizes=\"56px\" className=\"object-cover\" unoptimized />\n ) : (\n <TrendingUp className=\"h-6 w-6 text-brand-rose/70\" />\n )}\n </div>\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className={cn(\"font-bold text-lg leading-snug truncate\", !name && \"text-muted-foreground/50\")}>\n {name || \"Your coin\"}\n </p>\n <p className=\"text-sm text-muted-foreground tabular-nums\">{symbol ? `$${symbol}` : \"$SYMBOL\"}</p>\n </div>\n </div>\n\n {description ? (\n <p className=\"text-sm text-muted-foreground leading-relaxed line-clamp-3\">{description}</p>\n ) : null}\n\n <div className=\"rounded-xl bg-muted/50 dark:bg-muted/30 p-4 space-y-3\">\n <div>\n <p className=\"text-2xs uppercase tracking-wide text-muted-foreground\">Market cap</p>\n <p className=\"text-2xl\">\n {marketCap != null ? (\n <StatValue>\n <CurrencyIcon symbol={quoteSymbol} size={18} />\n {marketCap.toLocaleString()} {quoteSymbol}\n </StatValue>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n )}\n </p>\n </div>\n <div className=\"flex items-center justify-between text-sm border-t border-border/60 pt-3\">\n <span className=\"text-muted-foreground\">Launch price</span>\n <span className=\"inline-flex items-center gap-1 font-semibold tabular-nums\">\n <CurrencyIcon symbol={quoteSymbol} size={14} />\n {price} {quoteSymbol} / coin\n </span>\n </div>\n </div>\n\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"font-medium text-brand-rose\">\n You keep {teamPct}%{yourCoins != null ? ` · ${yourCoins.toLocaleString()} ${symbol || \"coins\"}` : \"\"}\n </span>\n <span className=\"text-muted-foreground\">Community {100 - teamPct}%</span>\n </div>\n <div className=\"flex h-2.5 rounded-full overflow-hidden bg-muted-foreground/15\">\n {teamPct > 0 && <div style={{ width: `${teamPct}%`, background: COIN_GRADIENT }} />}\n <div className=\"flex-1\" />\n </div>\n </div>\n\n <p className=\"text-2xs text-muted-foreground/70\">\n Liquidity is locked forever — nobody can pull it, including us.\n </p>\n </div>\n </div>\n );\n}\n"],"mappings":";AAwBI,cA6BM,YA7BN;AAtBJ,OAAO,WAAW;AAClB,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AACnB,SAAS,oBAAoB;AAe7B,MAAM,gBAAgB;AAEtB,SAAS,UAAU,EAAE,SAAS,GAAkC;AAC9D,SACE,oBAAC,UAAK,WAAU,0EACb,UACH;AAEJ;AAEO,SAAS,kBAAkB,EAAE,MAAM,UAAU,GAAkD;AACpG,QAAM,EAAE,MAAM,QAAQ,aAAa,UAAU,aAAa,OAAO,aAAa,QAAQ,IAAI;AAC1F,QAAM,YAAY,eAAe,OAAO,cAAc,QAAQ;AAC9D,QAAM,YAAY,eAAe,OAAO,eAAe,UAAU,OAAO;AAExE,SACE,qBAAC,SAAI,WAAW,GAAG,wDAAwD,SAAS,GAClF;AAAA,wBAAC,SAAI,WAAU,aACb,8BAAC,OAAE,WAAU,iBAAgB,0BAAY,GAC3C;AAAA,IAEA,qBAAC,SAAI,WAAU,iBAEb;AAAA,2BAAC,SAAI,WAAU,2BACb;AAAA,4BAAC,SAAI,WAAU,iCAAgC,OAAO,EAAE,YAAY,cAAc,GAChF,8BAAC,SAAI,WAAU,4FACZ,qBACC,oBAAC,SAAM,KAAK,UAAU,KAAI,IAAG,MAAI,MAAC,OAAM,QAAO,WAAU,gBAAe,aAAW,MAAC,IAEpF,oBAAC,cAAW,WAAU,8BAA6B,GAEvD,GACF;AAAA,QACA,qBAAC,SAAI,WAAU,kBACb;AAAA,8BAAC,OAAE,WAAW,GAAG,2CAA2C,CAAC,QAAQ,0BAA0B,GAC5F,kBAAQ,aACX;AAAA,UACA,oBAAC,OAAE,WAAU,8CAA8C,mBAAS,IAAI,MAAM,KAAK,WAAU;AAAA,WAC/F;AAAA,SACF;AAAA,MAEC,cACC,oBAAC,OAAE,WAAU,8DAA8D,uBAAY,IACrF;AAAA,MAEJ,qBAAC,SAAI,WAAU,yDACb;AAAA,6BAAC,SACC;AAAA,8BAAC,OAAE,WAAU,0DAAyD,wBAAU;AAAA,UAChF,oBAAC,OAAE,WAAU,YACV,uBAAa,OACZ,qBAAC,aACC;AAAA,gCAAC,gBAAa,QAAQ,aAAa,MAAM,IAAI;AAAA,YAC5C,UAAU,eAAe;AAAA,YAAE;AAAA,YAAE;AAAA,aAChC,IAEA,oBAAC,UAAK,WAAU,yBAAwB,oBAAC,GAE7C;AAAA,WACF;AAAA,QACA,qBAAC,SAAI,WAAU,4EACb;AAAA,8BAAC,UAAK,WAAU,yBAAwB,0BAAY;AAAA,UACpD,qBAAC,UAAK,WAAU,6DACd;AAAA,gCAAC,gBAAa,QAAQ,aAAa,MAAM,IAAI;AAAA,YAC5C;AAAA,YAAM;AAAA,YAAE;AAAA,YAAY;AAAA,aACvB;AAAA,WACF;AAAA,SACF;AAAA,MAEA,qBAAC,SAAI,WAAU,eACb;AAAA,6BAAC,SAAI,WAAU,6CACb;AAAA,+BAAC,UAAK,WAAU,+BAA8B;AAAA;AAAA,YAClC;AAAA,YAAQ;AAAA,YAAE,aAAa,OAAO,SAAM,UAAU,eAAe,CAAC,IAAI,UAAU,OAAO,KAAK;AAAA,aACpG;AAAA,UACA,qBAAC,UAAK,WAAU,yBAAwB;AAAA;AAAA,YAAW,MAAM;AAAA,YAAQ;AAAA,aAAC;AAAA,WACpE;AAAA,QACA,qBAAC,SAAI,WAAU,kEACZ;AAAA,oBAAU,KAAK,oBAAC,SAAI,OAAO,EAAE,OAAO,GAAG,OAAO,KAAK,YAAY,cAAc,GAAG;AAAA,UACjF,oBAAC,SAAI,WAAU,UAAS;AAAA,WAC1B;AAAA,SACF;AAAA,MAEA,oBAAC,OAAE,WAAU,qCAAoC,kFAEjD;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -23,8 +23,8 @@ declare const dropCreateSchema: z.ZodEffects<z.ZodObject<{
|
|
|
23
23
|
allowlistAddresses: z.ZodDefault<z.ZodString>;
|
|
24
24
|
}, "strip", z.ZodTypeAny, {
|
|
25
25
|
symbol: string;
|
|
26
|
-
name: string;
|
|
27
26
|
derivatives: string;
|
|
27
|
+
name: string;
|
|
28
28
|
ipType: "Audio" | "Video" | "Art" | "Photography" | "NFT" | "Software" | "RWA" | "Patents" | "Posts" | "Publications" | "Documents" | "Custom";
|
|
29
29
|
licenseType: string;
|
|
30
30
|
commercialUse: string;
|
|
@@ -65,8 +65,8 @@ declare const dropCreateSchema: z.ZodEffects<z.ZodObject<{
|
|
|
65
65
|
allowlistAddresses?: string | undefined;
|
|
66
66
|
}>, {
|
|
67
67
|
symbol: string;
|
|
68
|
-
name: string;
|
|
69
68
|
derivatives: string;
|
|
69
|
+
name: string;
|
|
70
70
|
ipType: "Audio" | "Video" | "Art" | "Photography" | "NFT" | "Software" | "RWA" | "Patents" | "Posts" | "Publications" | "Documents" | "Custom";
|
|
71
71
|
licenseType: string;
|
|
72
72
|
commercialUse: string;
|
|
@@ -23,8 +23,8 @@ declare const dropCreateSchema: z.ZodEffects<z.ZodObject<{
|
|
|
23
23
|
allowlistAddresses: z.ZodDefault<z.ZodString>;
|
|
24
24
|
}, "strip", z.ZodTypeAny, {
|
|
25
25
|
symbol: string;
|
|
26
|
-
name: string;
|
|
27
26
|
derivatives: string;
|
|
27
|
+
name: string;
|
|
28
28
|
ipType: "Audio" | "Video" | "Art" | "Photography" | "NFT" | "Software" | "RWA" | "Patents" | "Posts" | "Publications" | "Documents" | "Custom";
|
|
29
29
|
licenseType: string;
|
|
30
30
|
commercialUse: string;
|
|
@@ -65,8 +65,8 @@ declare const dropCreateSchema: z.ZodEffects<z.ZodObject<{
|
|
|
65
65
|
allowlistAddresses?: string | undefined;
|
|
66
66
|
}>, {
|
|
67
67
|
symbol: string;
|
|
68
|
-
name: string;
|
|
69
68
|
derivatives: string;
|
|
69
|
+
name: string;
|
|
70
70
|
ipType: "Audio" | "Video" | "Art" | "Photography" | "NFT" | "Software" | "RWA" | "Patents" | "Posts" | "Publications" | "Documents" | "Custom";
|
|
71
71
|
licenseType: string;
|
|
72
72
|
commercialUse: string;
|