@medialane/ui 0.183.0 → 0.184.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/drop/create/artwork-section.cjs +115 -0
- package/dist/components/drop/create/artwork-section.cjs.map +1 -0
- package/dist/components/drop/create/artwork-section.d.cts +23 -0
- package/dist/components/drop/create/artwork-section.d.ts +23 -0
- package/dist/components/drop/create/artwork-section.js +79 -0
- package/dist/components/drop/create/artwork-section.js.map +1 -0
- package/dist/components/drop/create/details-section.cjs +110 -0
- package/dist/components/drop/create/details-section.cjs.map +1 -0
- package/dist/components/drop/create/details-section.d.cts +11 -0
- package/dist/components/drop/create/details-section.d.ts +11 -0
- package/dist/components/drop/create/details-section.js +86 -0
- package/dist/components/drop/create/details-section.js.map +1 -0
- package/dist/components/drop/create/drop-create.cjs +112 -0
- package/dist/components/drop/create/drop-create.cjs.map +1 -0
- package/dist/components/drop/create/drop-create.d.cts +22 -0
- package/dist/components/drop/create/drop-create.d.ts +22 -0
- package/dist/components/drop/create/drop-create.js +77 -0
- package/dist/components/drop/create/drop-create.js.map +1 -0
- package/dist/components/drop/create/exclusive-fields.cjs +45 -0
- package/dist/components/drop/create/exclusive-fields.cjs.map +1 -0
- package/dist/components/drop/create/exclusive-fields.d.cts +14 -0
- package/dist/components/drop/create/exclusive-fields.d.ts +14 -0
- package/dist/components/drop/create/exclusive-fields.js +21 -0
- package/dist/components/drop/create/exclusive-fields.js.map +1 -0
- package/dist/components/drop/create/launch-dialog.cjs +193 -0
- package/dist/components/drop/create/launch-dialog.cjs.map +1 -0
- package/dist/components/drop/create/launch-dialog.d.cts +21 -0
- package/dist/components/drop/create/launch-dialog.d.ts +21 -0
- package/dist/components/drop/create/launch-dialog.js +168 -0
- package/dist/components/drop/create/launch-dialog.js.map +1 -0
- package/dist/components/drop/create/list-section.cjs +67 -0
- package/dist/components/drop/create/list-section.cjs.map +1 -0
- package/dist/components/drop/create/list-section.d.cts +11 -0
- package/dist/components/drop/create/list-section.d.ts +11 -0
- package/dist/components/drop/create/list-section.js +43 -0
- package/dist/components/drop/create/list-section.js.map +1 -0
- package/dist/components/drop/create/sale-section.cjs +78 -0
- package/dist/components/drop/create/sale-section.cjs.map +1 -0
- package/dist/components/drop/create/sale-section.d.cts +13 -0
- package/dist/components/drop/create/sale-section.d.ts +13 -0
- package/dist/components/drop/create/sale-section.js +54 -0
- package/dist/components/drop/create/sale-section.js.map +1 -0
- package/dist/components/drop/drop-card.cjs +81 -0
- package/dist/components/drop/drop-card.cjs.map +1 -0
- package/dist/components/drop/drop-card.d.cts +18 -0
- package/dist/components/drop/drop-card.d.ts +18 -0
- package/dist/components/drop/drop-card.js +45 -0
- package/dist/components/drop/drop-card.js.map +1 -0
- package/dist/components/drop/drop-listing.cjs +79 -0
- package/dist/components/drop/drop-listing.cjs.map +1 -0
- package/dist/components/drop/drop-listing.d.cts +10 -0
- package/dist/components/drop/drop-listing.d.ts +10 -0
- package/dist/components/drop/drop-listing.js +45 -0
- package/dist/components/drop/drop-listing.js.map +1 -0
- package/dist/components/drop/drop-token-link.cjs +63 -0
- package/dist/components/drop/drop-token-link.cjs.map +1 -0
- package/dist/components/drop/drop-token-link.d.cts +9 -0
- package/dist/components/drop/drop-token-link.d.ts +9 -0
- package/dist/components/drop/drop-token-link.js +29 -0
- package/dist/components/drop/drop-token-link.js.map +1 -0
- package/dist/components/drop/my-drops.cjs +71 -0
- package/dist/components/drop/my-drops.cjs.map +1 -0
- package/dist/components/drop/my-drops.d.cts +12 -0
- package/dist/components/drop/my-drops.d.ts +12 -0
- package/dist/components/drop/my-drops.js +37 -0
- package/dist/components/drop/my-drops.js.map +1 -0
- package/dist/components/drop/page/drop-action-box.cjs +63 -0
- package/dist/components/drop/page/drop-action-box.cjs.map +1 -0
- package/dist/components/drop/page/drop-action-box.d.cts +16 -0
- package/dist/components/drop/page/drop-action-box.d.ts +16 -0
- package/dist/components/drop/page/drop-action-box.js +39 -0
- package/dist/components/drop/page/drop-action-box.js.map +1 -0
- package/dist/components/drop/page/drop-activity.cjs +42 -0
- package/dist/components/drop/page/drop-activity.cjs.map +1 -0
- package/dist/components/drop/page/drop-activity.d.cts +8 -0
- package/dist/components/drop/page/drop-activity.d.ts +8 -0
- package/dist/components/drop/page/drop-activity.js +18 -0
- package/dist/components/drop/page/drop-activity.js.map +1 -0
- package/dist/components/drop/page/drop-manage.cjs +161 -0
- package/dist/components/drop/page/drop-manage.cjs.map +1 -0
- package/dist/components/drop/page/drop-manage.d.cts +24 -0
- package/dist/components/drop/page/drop-manage.d.ts +24 -0
- package/dist/components/drop/page/drop-manage.js +137 -0
- package/dist/components/drop/page/drop-manage.js.map +1 -0
- package/dist/components/drop/page/drop-mint-dialog.cjs +97 -0
- package/dist/components/drop/page/drop-mint-dialog.cjs.map +1 -0
- package/dist/components/drop/page/drop-mint-dialog.d.cts +15 -0
- package/dist/components/drop/page/drop-mint-dialog.d.ts +15 -0
- package/dist/components/drop/page/drop-mint-dialog.js +73 -0
- package/dist/components/drop/page/drop-mint-dialog.js.map +1 -0
- package/dist/components/drop/page/drop-page.cjs +165 -0
- package/dist/components/drop/page/drop-page.cjs.map +1 -0
- package/dist/components/drop/page/drop-page.d.cts +16 -0
- package/dist/components/drop/page/drop-page.d.ts +16 -0
- package/dist/components/drop/page/drop-page.js +131 -0
- package/dist/components/drop/page/drop-page.js.map +1 -0
- package/dist/components/drop-status-display.cjs +7 -38
- package/dist/components/drop-status-display.cjs.map +1 -1
- package/dist/components/drop-status-display.d.cts +6 -7
- package/dist/components/drop-status-display.d.ts +6 -7
- package/dist/components/drop-status-display.js +7 -37
- package/dist/components/drop-status-display.js.map +1 -1
- package/dist/components/image.d.cts +2 -0
- package/dist/components/image.d.ts +2 -0
- package/dist/index.cjs +46 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -11
- package/dist/index.d.ts +20 -11
- package/dist/index.js +31 -25
- package/dist/index.js.map +1 -1
- package/dist/utils/drop/actions.cjs +76 -0
- package/dist/utils/drop/actions.cjs.map +1 -0
- package/dist/utils/drop/actions.d.cts +46 -0
- package/dist/utils/drop/actions.d.ts +46 -0
- package/dist/utils/drop/actions.js +49 -0
- package/dist/utils/drop/actions.js.map +1 -0
- package/dist/utils/drop/allowlist.cjs +50 -0
- package/dist/utils/drop/allowlist.cjs.map +1 -0
- package/dist/utils/drop/allowlist.d.cts +10 -0
- package/dist/utils/drop/allowlist.d.ts +10 -0
- package/dist/utils/drop/allowlist.js +26 -0
- package/dist/utils/drop/allowlist.js.map +1 -0
- package/dist/utils/drop/chain.cjs +37 -0
- package/dist/utils/drop/chain.cjs.map +1 -0
- package/dist/utils/drop/chain.d.cts +5 -0
- package/dist/utils/drop/chain.d.ts +5 -0
- package/dist/utils/drop/chain.js +13 -0
- package/dist/utils/drop/chain.js.map +1 -0
- package/dist/utils/drop/claim-proof.cjs +48 -0
- package/dist/utils/drop/claim-proof.cjs.map +1 -0
- package/dist/utils/drop/claim-proof.d.cts +9 -0
- package/dist/utils/drop/claim-proof.d.ts +9 -0
- package/dist/utils/drop/claim-proof.js +24 -0
- package/dist/utils/drop/claim-proof.js.map +1 -0
- package/dist/utils/drop/draft.cjs +87 -0
- package/dist/utils/drop/draft.cjs.map +1 -0
- package/dist/utils/drop/draft.d.cts +32 -0
- package/dist/utils/drop/draft.d.ts +32 -0
- package/dist/utils/drop/draft.js +61 -0
- package/dist/utils/drop/draft.js.map +1 -0
- package/dist/utils/drop/metadata.cjs +70 -0
- package/dist/utils/drop/metadata.cjs.map +1 -0
- package/dist/utils/drop/metadata.d.cts +34 -0
- package/dist/utils/drop/metadata.d.ts +34 -0
- package/dist/utils/drop/metadata.js +43 -0
- package/dist/utils/drop/metadata.js.map +1 -0
- package/dist/utils/{drop-status.cjs → drop/preview.cjs} +14 -14
- package/dist/utils/drop/preview.cjs.map +1 -0
- package/dist/utils/drop/preview.d.cts +4 -0
- package/dist/utils/drop/preview.d.ts +4 -0
- package/dist/utils/drop/preview.js +13 -0
- package/dist/utils/drop/preview.js.map +1 -0
- package/dist/utils/drop/receipt.cjs +39 -0
- package/dist/utils/drop/receipt.cjs.map +1 -0
- package/dist/utils/drop/receipt.d.cts +6 -0
- package/dist/utils/drop/receipt.d.ts +6 -0
- package/dist/utils/drop/receipt.js +15 -0
- package/dist/utils/drop/receipt.js.map +1 -0
- package/dist/utils/drop/sale.cjs +108 -0
- package/dist/utils/drop/sale.cjs.map +1 -0
- package/dist/utils/drop/sale.d.cts +52 -0
- package/dist/utils/drop/sale.d.ts +52 -0
- package/dist/utils/drop/sale.js +78 -0
- package/dist/utils/drop/sale.js.map +1 -0
- package/dist/utils/drop/types.cjs +17 -0
- package/dist/utils/drop/types.cjs.map +1 -0
- package/dist/utils/drop/types.d.cts +20 -0
- package/dist/utils/drop/types.d.ts +20 -0
- package/dist/utils/drop/types.js +1 -0
- package/dist/utils/drop/types.js.map +1 -0
- package/dist/utils/drop/upload.cjs +48 -0
- package/dist/utils/drop/upload.cjs.map +1 -0
- package/dist/utils/drop/upload.d.cts +11 -0
- package/dist/utils/drop/upload.d.ts +11 -0
- package/dist/utils/drop/upload.js +24 -0
- package/dist/utils/drop/upload.js.map +1 -0
- package/dist/utils/drop/use-now.cjs +38 -0
- package/dist/utils/drop/use-now.cjs.map +1 -0
- package/dist/utils/drop/use-now.d.cts +4 -0
- package/dist/utils/drop/use-now.d.ts +4 -0
- package/dist/utils/drop/use-now.js +14 -0
- package/dist/utils/drop/use-now.js.map +1 -0
- package/dist/utils/drop/view.cjs +89 -0
- package/dist/utils/drop/view.cjs.map +1 -0
- package/dist/utils/drop/view.d.cts +34 -0
- package/dist/utils/drop/view.d.ts +34 -0
- package/dist/utils/drop/view.js +64 -0
- package/dist/utils/drop/view.js.map +1 -0
- package/dist/utils/launchpad-defaults.cjs +0 -22
- package/dist/utils/launchpad-defaults.cjs.map +1 -1
- package/dist/utils/launchpad-defaults.d.cts +1 -7
- package/dist/utils/launchpad-defaults.d.ts +1 -7
- package/dist/utils/launchpad-defaults.js +0 -21
- package/dist/utils/launchpad-defaults.js.map +1 -1
- package/dist/utils/use-drops.cjs +41 -45
- package/dist/utils/use-drops.cjs.map +1 -1
- package/dist/utils/use-drops.d.cts +31 -23
- package/dist/utils/use-drops.d.ts +31 -23
- package/dist/utils/use-drops.js +35 -40
- package/dist/utils/use-drops.js.map +1 -1
- package/package.json +3 -3
- package/dist/components/account/account.test.cjs +0 -86
- package/dist/components/account/account.test.cjs.map +0 -1
- package/dist/components/account/account.test.d.cts +0 -2
- package/dist/components/account/account.test.d.ts +0 -2
- package/dist/components/account/account.test.js +0 -85
- package/dist/components/account/account.test.js.map +0 -1
- package/dist/components/drop-create-form.cjs +0 -341
- package/dist/components/drop-create-form.cjs.map +0 -1
- package/dist/components/drop-create-form.d.cts +0 -39
- package/dist/components/drop-create-form.d.ts +0 -39
- package/dist/components/drop-create-form.js +0 -322
- package/dist/components/drop-create-form.js.map +0 -1
- package/dist/components/drop-preview-card.cjs +0 -106
- package/dist/components/drop-preview-card.cjs.map +0 -1
- package/dist/components/drop-preview-card.d.cts +0 -17
- package/dist/components/drop-preview-card.d.ts +0 -17
- package/dist/components/drop-preview-card.js +0 -82
- package/dist/components/drop-preview-card.js.map +0 -1
- package/dist/components/drop-preview-card.test.cjs +0 -84
- package/dist/components/drop-preview-card.test.cjs.map +0 -1
- package/dist/components/drop-preview-card.test.d.cts +0 -3
- package/dist/components/drop-preview-card.test.d.ts +0 -3
- package/dist/components/drop-preview-card.test.js +0 -83
- package/dist/components/drop-preview-card.test.js.map +0 -1
- package/dist/components/drop-status-display.test.cjs +0 -29
- package/dist/components/drop-status-display.test.cjs.map +0 -1
- package/dist/components/drop-status-display.test.d.cts +0 -2
- package/dist/components/drop-status-display.test.d.ts +0 -2
- package/dist/components/drop-status-display.test.js +0 -28
- package/dist/components/drop-status-display.test.js.map +0 -1
- package/dist/components/exclusive-content-section.cjs +0 -88
- package/dist/components/exclusive-content-section.cjs.map +0 -1
- package/dist/components/exclusive-content-section.d.cts +0 -10
- package/dist/components/exclusive-content-section.d.ts +0 -10
- package/dist/components/exclusive-content-section.js +0 -64
- package/dist/components/exclusive-content-section.js.map +0 -1
- package/dist/data/drop-create-schema.cjs +0 -92
- package/dist/data/drop-create-schema.cjs.map +0 -1
- package/dist/data/drop-create-schema.d.cts +0 -131
- package/dist/data/drop-create-schema.d.ts +0 -131
- package/dist/data/drop-create-schema.js +0 -58
- package/dist/data/drop-create-schema.js.map +0 -1
- package/dist/utils/drop-status.cjs.map +0 -1
- package/dist/utils/drop-status.d.cts +0 -12
- package/dist/utils/drop-status.d.ts +0 -12
- package/dist/utils/drop-status.js +0 -13
- package/dist/utils/drop-status.js.map +0 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Tag } from "lucide-react";
|
|
4
|
+
import { getListableTokens } from "@medialane/sdk";
|
|
5
|
+
import { Input } from "../../input.js";
|
|
6
|
+
import { Switch } from "../../switch.js";
|
|
7
|
+
import { Section, ToggleGroup } from "../../create-form-primitives.js";
|
|
8
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../select.js";
|
|
9
|
+
import { collectorPriceLine } from "../../../utils/drop/sale.js";
|
|
10
|
+
import { FieldError } from "./artwork-section.js";
|
|
11
|
+
function SaleSection({ draft, setDraft, errors, feeConfig }) {
|
|
12
|
+
const sale = draft.sale;
|
|
13
|
+
const set = (patch) => setDraft({ sale: { ...sale, ...patch } });
|
|
14
|
+
const line = collectorPriceLine(sale, feeConfig);
|
|
15
|
+
return /* @__PURE__ */ jsxs(Section, { title: "Sale", icon: /* @__PURE__ */ jsx(Tag, { className: "h-4 w-4" }), children: [
|
|
16
|
+
/* @__PURE__ */ jsx(ToggleGroup, { value: sale.paid ? "Paid" : "Free", options: ["Free", "Paid"], onChange: (v) => set({ paid: v === "Paid" }) }),
|
|
17
|
+
sale.paid && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
18
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
19
|
+
/* @__PURE__ */ jsx(Input, { inputMode: "decimal", placeholder: "Price per token", value: sale.price, onChange: (e) => set({ price: e.target.value.trim() }) }),
|
|
20
|
+
/* @__PURE__ */ jsxs(Select, { value: sale.tokenSymbol, onValueChange: (v) => set({ tokenSymbol: v }), children: [
|
|
21
|
+
/* @__PURE__ */ jsx(SelectTrigger, { className: "w-28", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
22
|
+
/* @__PURE__ */ jsx(SelectContent, { children: getListableTokens().map((t) => /* @__PURE__ */ jsx(SelectItem, { value: t.symbol, children: t.symbol }, t.symbol)) })
|
|
23
|
+
] })
|
|
24
|
+
] }),
|
|
25
|
+
line && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: line }),
|
|
26
|
+
/* @__PURE__ */ jsx(FieldError, { message: errors.price })
|
|
27
|
+
] }),
|
|
28
|
+
/* @__PURE__ */ jsx(Toggle, { label: "Starts now", checked: sale.startNow, onChange: (v) => set({ startNow: v }) }),
|
|
29
|
+
!sale.startNow && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Input, { type: "datetime-local", value: sale.start, onChange: (e) => set({ start: e.target.value }) }),
|
|
31
|
+
/* @__PURE__ */ jsx(FieldError, { message: errors.start })
|
|
32
|
+
] }),
|
|
33
|
+
/* @__PURE__ */ jsx(Toggle, { label: "Has an end date", checked: sale.hasEnd, onChange: (v) => set({ hasEnd: v }) }),
|
|
34
|
+
sale.hasEnd && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
35
|
+
/* @__PURE__ */ jsx(Input, { type: "datetime-local", value: sale.end, onChange: (e) => set({ end: e.target.value }) }),
|
|
36
|
+
/* @__PURE__ */ jsx(FieldError, { message: errors.end })
|
|
37
|
+
] }),
|
|
38
|
+
/* @__PURE__ */ jsx(Toggle, { label: "Limit per wallet", checked: sale.limitPerWallet, onChange: (v) => set({ limitPerWallet: v }) }),
|
|
39
|
+
sale.limitPerWallet && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
40
|
+
/* @__PURE__ */ jsx(Input, { inputMode: "numeric", className: "max-w-[10rem]", value: sale.perWallet, onChange: (e) => set({ perWallet: e.target.value.trim() }) }),
|
|
41
|
+
/* @__PURE__ */ jsx(FieldError, { message: errors.perWallet })
|
|
42
|
+
] })
|
|
43
|
+
] });
|
|
44
|
+
}
|
|
45
|
+
function Toggle({ label, checked, onChange }) {
|
|
46
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
47
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm", children: label }),
|
|
48
|
+
/* @__PURE__ */ jsx(Switch, { checked, onCheckedChange: onChange })
|
|
49
|
+
] });
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
SaleSection
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=sale-section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/drop/create/sale-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tag } from \"lucide-react\";\nimport { getListableTokens, type ResolvedFeeConfig } from \"@medialane/sdk\";\nimport { Input } from \"../../input.js\";\nimport { Switch } from \"../../switch.js\";\nimport { Section, ToggleGroup } from \"../../create-form-primitives.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../../select.js\";\nimport { collectorPriceLine, type SaleDraft } from \"../../../utils/drop/sale.js\";\nimport { FieldError, type SectionProps } from \"./artwork-section.js\";\n\nexport function SaleSection({ draft, setDraft, errors, feeConfig }: SectionProps & { feeConfig: ResolvedFeeConfig }) {\n const sale = draft.sale;\n const set = (patch: Partial<SaleDraft>) => setDraft({ sale: { ...sale, ...patch } });\n const line = collectorPriceLine(sale, feeConfig);\n return (\n <Section title=\"Sale\" icon={<Tag className=\"h-4 w-4\" />}>\n <ToggleGroup value={sale.paid ? \"Paid\" : \"Free\"} options={[\"Free\", \"Paid\"]} onChange={(v) => set({ paid: v === \"Paid\" })} />\n {sale.paid && (\n <div className=\"space-y-1.5\">\n <div className=\"flex gap-2\">\n <Input inputMode=\"decimal\" placeholder=\"Price per token\" value={sale.price} onChange={(e) => set({ price: e.target.value.trim() })} />\n <Select value={sale.tokenSymbol} onValueChange={(v) => set({ tokenSymbol: v })}>\n <SelectTrigger className=\"w-28\"><SelectValue /></SelectTrigger>\n <SelectContent>{getListableTokens().map((t) => <SelectItem key={t.symbol} value={t.symbol}>{t.symbol}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n {line && <p className=\"text-xs text-muted-foreground\">{line}</p>}\n <FieldError message={errors.price} />\n </div>\n )}\n <Toggle label=\"Starts now\" checked={sale.startNow} onChange={(v) => set({ startNow: v })} />\n {!sale.startNow && (\n <div className=\"space-y-1.5\">\n <Input type=\"datetime-local\" value={sale.start} onChange={(e) => set({ start: e.target.value })} />\n <FieldError message={errors.start} />\n </div>\n )}\n <Toggle label=\"Has an end date\" checked={sale.hasEnd} onChange={(v) => set({ hasEnd: v })} />\n {sale.hasEnd && (\n <div className=\"space-y-1.5\">\n <Input type=\"datetime-local\" value={sale.end} onChange={(e) => set({ end: e.target.value })} />\n <FieldError message={errors.end} />\n </div>\n )}\n <Toggle label=\"Limit per wallet\" checked={sale.limitPerWallet} onChange={(v) => set({ limitPerWallet: v })} />\n {sale.limitPerWallet && (\n <div className=\"space-y-1.5\">\n <Input inputMode=\"numeric\" className=\"max-w-[10rem]\" value={sale.perWallet} onChange={(e) => set({ perWallet: e.target.value.trim() })} />\n <FieldError message={errors.perWallet} />\n </div>\n )}\n </Section>\n );\n}\n\nfunction Toggle({ label, checked, onChange }: { label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm\">{label}</span>\n <Switch checked={checked} onCheckedChange={onChange} />\n </div>\n );\n}\n"],"mappings":";AAgBgC,cAMpB,YANoB;AAdhC,SAAS,WAAW;AACpB,SAAS,yBAAiD;AAC1D,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,SAAS,mBAAmB;AACrC,SAAS,QAAQ,eAAe,YAAY,eAAe,mBAAmB;AAC9E,SAAS,0BAA0C;AACnD,SAAS,kBAAqC;AAEvC,SAAS,YAAY,EAAE,OAAO,UAAU,QAAQ,UAAU,GAAoD;AACnH,QAAM,OAAO,MAAM;AACnB,QAAM,MAAM,CAAC,UAA8B,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AACnF,QAAM,OAAO,mBAAmB,MAAM,SAAS;AAC/C,SACE,qBAAC,WAAQ,OAAM,QAAO,MAAM,oBAAC,OAAI,WAAU,WAAU,GACnD;AAAA,wBAAC,eAAY,OAAO,KAAK,OAAO,SAAS,QAAQ,SAAS,CAAC,QAAQ,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,EAAE,MAAM,MAAM,OAAO,CAAC,GAAG;AAAA,IACzH,KAAK,QACJ,qBAAC,SAAI,WAAU,eACb;AAAA,2BAAC,SAAI,WAAU,cACb;AAAA,4BAAC,SAAM,WAAU,WAAU,aAAY,mBAAkB,OAAO,KAAK,OAAO,UAAU,CAAC,MAAM,IAAI,EAAE,OAAO,EAAE,OAAO,MAAM,KAAK,EAAE,CAAC,GAAG;AAAA,QACpI,qBAAC,UAAO,OAAO,KAAK,aAAa,eAAe,CAAC,MAAM,IAAI,EAAE,aAAa,EAAE,CAAC,GAC3E;AAAA,8BAAC,iBAAc,WAAU,QAAO,8BAAC,eAAY,GAAE;AAAA,UAC/C,oBAAC,iBAAe,4BAAkB,EAAE,IAAI,CAAC,MAAM,oBAAC,cAA0B,OAAO,EAAE,QAAS,YAAE,UAA9B,EAAE,MAAmC,CAAa,GAAE;AAAA,WACtH;AAAA,SACF;AAAA,MACC,QAAQ,oBAAC,OAAE,WAAU,iCAAiC,gBAAK;AAAA,MAC5D,oBAAC,cAAW,SAAS,OAAO,OAAO;AAAA,OACrC;AAAA,IAEF,oBAAC,UAAO,OAAM,cAAa,SAAS,KAAK,UAAU,UAAU,CAAC,MAAM,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG;AAAA,IACzF,CAAC,KAAK,YACL,qBAAC,SAAI,WAAU,eACb;AAAA,0BAAC,SAAM,MAAK,kBAAiB,OAAO,KAAK,OAAO,UAAU,CAAC,MAAM,IAAI,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC,GAAG;AAAA,MACjG,oBAAC,cAAW,SAAS,OAAO,OAAO;AAAA,OACrC;AAAA,IAEF,oBAAC,UAAO,OAAM,mBAAkB,SAAS,KAAK,QAAQ,UAAU,CAAC,MAAM,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG;AAAA,IAC1F,KAAK,UACJ,qBAAC,SAAI,WAAU,eACb;AAAA,0BAAC,SAAM,MAAK,kBAAiB,OAAO,KAAK,KAAK,UAAU,CAAC,MAAM,IAAI,EAAE,KAAK,EAAE,OAAO,MAAM,CAAC,GAAG;AAAA,MAC7F,oBAAC,cAAW,SAAS,OAAO,KAAK;AAAA,OACnC;AAAA,IAEF,oBAAC,UAAO,OAAM,oBAAmB,SAAS,KAAK,gBAAgB,UAAU,CAAC,MAAM,IAAI,EAAE,gBAAgB,EAAE,CAAC,GAAG;AAAA,IAC3G,KAAK,kBACJ,qBAAC,SAAI,WAAU,eACb;AAAA,0BAAC,SAAM,WAAU,WAAU,WAAU,iBAAgB,OAAO,KAAK,WAAW,UAAU,CAAC,MAAM,IAAI,EAAE,WAAW,EAAE,OAAO,MAAM,KAAK,EAAE,CAAC,GAAG;AAAA,MACxI,oBAAC,cAAW,SAAS,OAAO,WAAW;AAAA,OACzC;AAAA,KAEJ;AAEJ;AAEA,SAAS,OAAO,EAAE,OAAO,SAAS,SAAS,GAAwE;AACjH,SACE,qBAAC,SAAI,WAAU,qCACb;AAAA,wBAAC,UAAK,WAAU,WAAW,iBAAM;AAAA,IACjC,oBAAC,UAAO,SAAkB,iBAAiB,UAAU;AAAA,KACvD;AAEJ;","names":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
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 drop_card_exports = {};
|
|
31
|
+
__export(drop_card_exports, {
|
|
32
|
+
DropCard: () => DropCard,
|
|
33
|
+
DropGrid: () => DropGrid,
|
|
34
|
+
DropGridSkeleton: () => DropGridSkeleton
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(drop_card_exports);
|
|
37
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
38
|
+
var import_sdk = require("@medialane/sdk");
|
|
39
|
+
var import_image = __toESM(require("../image.js"), 1);
|
|
40
|
+
var import_link = __toESM(require("../link.js"), 1);
|
|
41
|
+
var import_drop_status_display = require("../drop-status-display.js");
|
|
42
|
+
var import_ipfs = require("../../utils/ipfs.js");
|
|
43
|
+
var import_view = require("../../utils/drop/view.js");
|
|
44
|
+
var import_sale = require("../../utils/drop/sale.js");
|
|
45
|
+
function DropCard({ drop, now, manage }) {
|
|
46
|
+
const phase = (0, import_view.dropPhase)(drop.terms, BigInt(drop.maxSupply), BigInt(drop.minted), now);
|
|
47
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
48
|
+
import_link.default,
|
|
49
|
+
{
|
|
50
|
+
href: `${(0, import_sdk.dropHref)(drop.contractAddress)}${manage ? "?tab=manage" : ""}`,
|
|
51
|
+
className: "group block rounded-2xl border border-border bg-card overflow-hidden transition-colors hover:border-primary/40",
|
|
52
|
+
children: [
|
|
53
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "relative aspect-square bg-muted", children: [
|
|
54
|
+
drop.image && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_image.default, { src: (0, import_ipfs.ipfsToHttp)(drop.image), alt: drop.name ?? "Drop", fill: true, unoptimized: true, className: "object-cover transition-transform group-hover:scale-[1.02]" }),
|
|
55
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "absolute left-3 top-3", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_drop_status_display.DropStatusBadge, { phase }) })
|
|
56
|
+
] }),
|
|
57
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1 p-4", children: [
|
|
58
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "truncate font-semibold", children: drop.name ?? "Untitled drop" }),
|
|
59
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex justify-between gap-2 text-xs text-muted-foreground", children: [
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: (0, import_sale.priceLabel)(drop.terms.price, drop.terms.paymentToken) }),
|
|
61
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: (0, import_sale.supplyLabel)(drop.minted, drop.maxSupply) })
|
|
62
|
+
] }),
|
|
63
|
+
manage && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "pt-1 text-xs font-semibold text-primary", children: "Manage" })
|
|
64
|
+
] })
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
function DropGrid({ drops, now, manage }) {
|
|
70
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: drops.map((d) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DropCard, { drop: d, now, manage }, d.contractAddress)) });
|
|
71
|
+
}
|
|
72
|
+
function DropGridSkeleton() {
|
|
73
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "aspect-[4/5] animate-pulse rounded-2xl bg-muted" }, i)) });
|
|
74
|
+
}
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
DropCard,
|
|
78
|
+
DropGrid,
|
|
79
|
+
DropGridSkeleton
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=drop-card.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { dropHref, type ApiDrop } from \"@medialane/sdk\";\nimport Image from \"../image.js\";\nimport Link from \"../link.js\";\nimport { DropStatusBadge } from \"../drop-status-display.js\";\nimport { ipfsToHttp } from \"../../utils/ipfs.js\";\nimport { dropPhase } from \"../../utils/drop/view.js\";\nimport { priceLabel, supplyLabel } from \"../../utils/drop/sale.js\";\n\nexport interface DropCardProps {\n drop: ApiDrop;\n now: number;\n /** Organizer view: links to the Manage tab. */\n manage?: boolean;\n}\n\nexport function DropCard({ drop, now, manage }: DropCardProps) {\n const phase = dropPhase(drop.terms, BigInt(drop.maxSupply), BigInt(drop.minted), now);\n return (\n <Link\n href={`${dropHref(drop.contractAddress)}${manage ? \"?tab=manage\" : \"\"}`}\n className=\"group block rounded-2xl border border-border bg-card overflow-hidden transition-colors hover:border-primary/40\"\n >\n <div className=\"relative aspect-square bg-muted\">\n {drop.image && (\n <Image src={ipfsToHttp(drop.image)} alt={drop.name ?? \"Drop\"} fill unoptimized className=\"object-cover transition-transform group-hover:scale-[1.02]\" />\n )}\n <div className=\"absolute left-3 top-3\"><DropStatusBadge phase={phase} /></div>\n </div>\n <div className=\"space-y-1 p-4\">\n <p className=\"truncate font-semibold\">{drop.name ?? \"Untitled drop\"}</p>\n <div className=\"flex justify-between gap-2 text-xs text-muted-foreground\">\n <span>{priceLabel(drop.terms.price, drop.terms.paymentToken)}</span>\n <span>{supplyLabel(drop.minted, drop.maxSupply)}</span>\n </div>\n {manage && <p className=\"pt-1 text-xs font-semibold text-primary\">Manage</p>}\n </div>\n </Link>\n );\n}\n\nexport function DropGrid({ drops, now, manage }: { drops: ApiDrop[]; now: number; manage?: boolean }) {\n return (\n <div className=\"grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3\">\n {drops.map((d) => <DropCard key={d.contractAddress} drop={d} now={now} manage={manage} />)}\n </div>\n );\n}\n\nexport function DropGridSkeleton() {\n return (\n <div className=\"grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3\">\n {Array.from({ length: 6 }).map((_, i) => <div key={i} className=\"aspect-[4/5] animate-pulse rounded-2xl bg-muted\" />)}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBM;AAtBN,iBAAuC;AACvC,mBAAkB;AAClB,kBAAiB;AACjB,iCAAgC;AAChC,kBAA2B;AAC3B,kBAA0B;AAC1B,kBAAwC;AASjC,SAAS,SAAS,EAAE,MAAM,KAAK,OAAO,GAAkB;AAC7D,QAAM,YAAQ,uBAAU,KAAK,OAAO,OAAO,KAAK,SAAS,GAAG,OAAO,KAAK,MAAM,GAAG,GAAG;AACpF,SACE;AAAA,IAAC,YAAAA;AAAA,IAAA;AAAA,MACC,MAAM,OAAG,qBAAS,KAAK,eAAe,CAAC,GAAG,SAAS,gBAAgB,EAAE;AAAA,MACrE,WAAU;AAAA,MAEV;AAAA,qDAAC,SAAI,WAAU,mCACZ;AAAA,eAAK,SACJ,4CAAC,aAAAC,SAAA,EAAM,SAAK,wBAAW,KAAK,KAAK,GAAG,KAAK,KAAK,QAAQ,QAAQ,MAAI,MAAC,aAAW,MAAC,WAAU,8DAA6D;AAAA,UAExJ,4CAAC,SAAI,WAAU,yBAAwB,sDAAC,8CAAgB,OAAc,GAAE;AAAA,WAC1E;AAAA,QACA,6CAAC,SAAI,WAAU,iBACb;AAAA,sDAAC,OAAE,WAAU,0BAA0B,eAAK,QAAQ,iBAAgB;AAAA,UACpE,6CAAC,SAAI,WAAU,4DACb;AAAA,wDAAC,UAAM,sCAAW,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,GAAE;AAAA,YAC7D,4CAAC,UAAM,uCAAY,KAAK,QAAQ,KAAK,SAAS,GAAE;AAAA,aAClD;AAAA,UACC,UAAU,4CAAC,OAAE,WAAU,2CAA0C,oBAAM;AAAA,WAC1E;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,SAAS,EAAE,OAAO,KAAK,OAAO,GAAwD;AACpG,SACE,4CAAC,SAAI,WAAU,wDACZ,gBAAM,IAAI,CAAC,MAAM,4CAAC,YAAiC,MAAM,GAAG,KAAU,UAAtC,EAAE,eAAoD,CAAE,GAC3F;AAEJ;AAEO,SAAS,mBAAmB;AACjC,SACE,4CAAC,SAAI,WAAU,wDACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,4CAAC,SAAY,WAAU,qDAAb,CAA+D,CAAE,GACtH;AAEJ;","names":["Link","Image"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ApiDrop } from '@medialane/sdk';
|
|
3
|
+
|
|
4
|
+
interface DropCardProps {
|
|
5
|
+
drop: ApiDrop;
|
|
6
|
+
now: number;
|
|
7
|
+
/** Organizer view: links to the Manage tab. */
|
|
8
|
+
manage?: boolean;
|
|
9
|
+
}
|
|
10
|
+
declare function DropCard({ drop, now, manage }: DropCardProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare function DropGrid({ drops, now, manage }: {
|
|
12
|
+
drops: ApiDrop[];
|
|
13
|
+
now: number;
|
|
14
|
+
manage?: boolean;
|
|
15
|
+
}): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function DropGridSkeleton(): react_jsx_runtime.JSX.Element;
|
|
17
|
+
|
|
18
|
+
export { DropCard, type DropCardProps, DropGrid, DropGridSkeleton };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ApiDrop } from '@medialane/sdk';
|
|
3
|
+
|
|
4
|
+
interface DropCardProps {
|
|
5
|
+
drop: ApiDrop;
|
|
6
|
+
now: number;
|
|
7
|
+
/** Organizer view: links to the Manage tab. */
|
|
8
|
+
manage?: boolean;
|
|
9
|
+
}
|
|
10
|
+
declare function DropCard({ drop, now, manage }: DropCardProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare function DropGrid({ drops, now, manage }: {
|
|
12
|
+
drops: ApiDrop[];
|
|
13
|
+
now: number;
|
|
14
|
+
manage?: boolean;
|
|
15
|
+
}): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function DropGridSkeleton(): react_jsx_runtime.JSX.Element;
|
|
17
|
+
|
|
18
|
+
export { DropCard, type DropCardProps, DropGrid, DropGridSkeleton };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { dropHref } from "@medialane/sdk";
|
|
4
|
+
import Image from "../image.js";
|
|
5
|
+
import Link from "../link.js";
|
|
6
|
+
import { DropStatusBadge } from "../drop-status-display.js";
|
|
7
|
+
import { ipfsToHttp } from "../../utils/ipfs.js";
|
|
8
|
+
import { dropPhase } from "../../utils/drop/view.js";
|
|
9
|
+
import { priceLabel, supplyLabel } from "../../utils/drop/sale.js";
|
|
10
|
+
function DropCard({ drop, now, manage }) {
|
|
11
|
+
const phase = dropPhase(drop.terms, BigInt(drop.maxSupply), BigInt(drop.minted), now);
|
|
12
|
+
return /* @__PURE__ */ jsxs(
|
|
13
|
+
Link,
|
|
14
|
+
{
|
|
15
|
+
href: `${dropHref(drop.contractAddress)}${manage ? "?tab=manage" : ""}`,
|
|
16
|
+
className: "group block rounded-2xl border border-border bg-card overflow-hidden transition-colors hover:border-primary/40",
|
|
17
|
+
children: [
|
|
18
|
+
/* @__PURE__ */ jsxs("div", { className: "relative aspect-square bg-muted", children: [
|
|
19
|
+
drop.image && /* @__PURE__ */ jsx(Image, { src: ipfsToHttp(drop.image), alt: drop.name ?? "Drop", fill: true, unoptimized: true, className: "object-cover transition-transform group-hover:scale-[1.02]" }),
|
|
20
|
+
/* @__PURE__ */ jsx("div", { className: "absolute left-3 top-3", children: /* @__PURE__ */ jsx(DropStatusBadge, { phase }) })
|
|
21
|
+
] }),
|
|
22
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1 p-4", children: [
|
|
23
|
+
/* @__PURE__ */ jsx("p", { className: "truncate font-semibold", children: drop.name ?? "Untitled drop" }),
|
|
24
|
+
/* @__PURE__ */ jsxs("div", { className: "flex justify-between gap-2 text-xs text-muted-foreground", children: [
|
|
25
|
+
/* @__PURE__ */ jsx("span", { children: priceLabel(drop.terms.price, drop.terms.paymentToken) }),
|
|
26
|
+
/* @__PURE__ */ jsx("span", { children: supplyLabel(drop.minted, drop.maxSupply) })
|
|
27
|
+
] }),
|
|
28
|
+
manage && /* @__PURE__ */ jsx("p", { className: "pt-1 text-xs font-semibold text-primary", children: "Manage" })
|
|
29
|
+
] })
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
function DropGrid({ drops, now, manage }) {
|
|
35
|
+
return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: drops.map((d) => /* @__PURE__ */ jsx(DropCard, { drop: d, now, manage }, d.contractAddress)) });
|
|
36
|
+
}
|
|
37
|
+
function DropGridSkeleton() {
|
|
38
|
+
return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsx("div", { className: "aspect-[4/5] animate-pulse rounded-2xl bg-muted" }, i)) });
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
DropCard,
|
|
42
|
+
DropGrid,
|
|
43
|
+
DropGridSkeleton
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=drop-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { dropHref, type ApiDrop } from \"@medialane/sdk\";\nimport Image from \"../image.js\";\nimport Link from \"../link.js\";\nimport { DropStatusBadge } from \"../drop-status-display.js\";\nimport { ipfsToHttp } from \"../../utils/ipfs.js\";\nimport { dropPhase } from \"../../utils/drop/view.js\";\nimport { priceLabel, supplyLabel } from \"../../utils/drop/sale.js\";\n\nexport interface DropCardProps {\n drop: ApiDrop;\n now: number;\n /** Organizer view: links to the Manage tab. */\n manage?: boolean;\n}\n\nexport function DropCard({ drop, now, manage }: DropCardProps) {\n const phase = dropPhase(drop.terms, BigInt(drop.maxSupply), BigInt(drop.minted), now);\n return (\n <Link\n href={`${dropHref(drop.contractAddress)}${manage ? \"?tab=manage\" : \"\"}`}\n className=\"group block rounded-2xl border border-border bg-card overflow-hidden transition-colors hover:border-primary/40\"\n >\n <div className=\"relative aspect-square bg-muted\">\n {drop.image && (\n <Image src={ipfsToHttp(drop.image)} alt={drop.name ?? \"Drop\"} fill unoptimized className=\"object-cover transition-transform group-hover:scale-[1.02]\" />\n )}\n <div className=\"absolute left-3 top-3\"><DropStatusBadge phase={phase} /></div>\n </div>\n <div className=\"space-y-1 p-4\">\n <p className=\"truncate font-semibold\">{drop.name ?? \"Untitled drop\"}</p>\n <div className=\"flex justify-between gap-2 text-xs text-muted-foreground\">\n <span>{priceLabel(drop.terms.price, drop.terms.paymentToken)}</span>\n <span>{supplyLabel(drop.minted, drop.maxSupply)}</span>\n </div>\n {manage && <p className=\"pt-1 text-xs font-semibold text-primary\">Manage</p>}\n </div>\n </Link>\n );\n}\n\nexport function DropGrid({ drops, now, manage }: { drops: ApiDrop[]; now: number; manage?: boolean }) {\n return (\n <div className=\"grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3\">\n {drops.map((d) => <DropCard key={d.contractAddress} drop={d} now={now} manage={manage} />)}\n </div>\n );\n}\n\nexport function DropGridSkeleton() {\n return (\n <div className=\"grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3\">\n {Array.from({ length: 6 }).map((_, i) => <div key={i} className=\"aspect-[4/5] animate-pulse rounded-2xl bg-muted\" />)}\n </div>\n );\n}\n"],"mappings":";AAwBM,SAEI,KAFJ;AAtBN,SAAS,gBAA8B;AACvC,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,YAAY,mBAAmB;AASjC,SAAS,SAAS,EAAE,MAAM,KAAK,OAAO,GAAkB;AAC7D,QAAM,QAAQ,UAAU,KAAK,OAAO,OAAO,KAAK,SAAS,GAAG,OAAO,KAAK,MAAM,GAAG,GAAG;AACpF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,GAAG,SAAS,KAAK,eAAe,CAAC,GAAG,SAAS,gBAAgB,EAAE;AAAA,MACrE,WAAU;AAAA,MAEV;AAAA,6BAAC,SAAI,WAAU,mCACZ;AAAA,eAAK,SACJ,oBAAC,SAAM,KAAK,WAAW,KAAK,KAAK,GAAG,KAAK,KAAK,QAAQ,QAAQ,MAAI,MAAC,aAAW,MAAC,WAAU,8DAA6D;AAAA,UAExJ,oBAAC,SAAI,WAAU,yBAAwB,8BAAC,mBAAgB,OAAc,GAAE;AAAA,WAC1E;AAAA,QACA,qBAAC,SAAI,WAAU,iBACb;AAAA,8BAAC,OAAE,WAAU,0BAA0B,eAAK,QAAQ,iBAAgB;AAAA,UACpE,qBAAC,SAAI,WAAU,4DACb;AAAA,gCAAC,UAAM,qBAAW,KAAK,MAAM,OAAO,KAAK,MAAM,YAAY,GAAE;AAAA,YAC7D,oBAAC,UAAM,sBAAY,KAAK,QAAQ,KAAK,SAAS,GAAE;AAAA,aAClD;AAAA,UACC,UAAU,oBAAC,OAAE,WAAU,2CAA0C,oBAAM;AAAA,WAC1E;AAAA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,SAAS,EAAE,OAAO,KAAK,OAAO,GAAwD;AACpG,SACE,oBAAC,SAAI,WAAU,wDACZ,gBAAM,IAAI,CAAC,MAAM,oBAAC,YAAiC,MAAM,GAAG,KAAU,UAAtC,EAAE,eAAoD,CAAE,GAC3F;AAEJ;AAEO,SAAS,mBAAmB;AACjC,SACE,oBAAC,SAAI,WAAU,wDACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,oBAAC,SAAY,WAAU,qDAAb,CAA+D,CAAE,GACtH;AAEJ;","names":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
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 drop_listing_exports = {};
|
|
31
|
+
__export(drop_listing_exports, {
|
|
32
|
+
DropListing: () => DropListing
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(drop_listing_exports);
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
+
var import_react = require("react");
|
|
37
|
+
var import_lucide_react = require("lucide-react");
|
|
38
|
+
var import_link = __toESM(require("../link.js"), 1);
|
|
39
|
+
var import_tabs = require("../tabs.js");
|
|
40
|
+
var import_tab_empty_state = require("../tab-empty-state.js");
|
|
41
|
+
var import_drop_card = require("./drop-card.js");
|
|
42
|
+
var import_use_drops = require("../../utils/use-drops.js");
|
|
43
|
+
var import_use_now = require("../../utils/drop/use-now.js");
|
|
44
|
+
const EMPTY = {
|
|
45
|
+
live: { heading: "No live drops", body: "Nothing is open for minting right now. Check Upcoming, or launch your own." },
|
|
46
|
+
upcoming: { heading: "No upcoming drops", body: "Scheduled drops will show here before they open." },
|
|
47
|
+
ended: { heading: "No ended drops", body: "Drops that sold out or closed will show here." }
|
|
48
|
+
};
|
|
49
|
+
function DropListing({
|
|
50
|
+
getClient,
|
|
51
|
+
createHref = "/launchpad/drop/create",
|
|
52
|
+
myDropsHref = "/launchpad/drop/my-drops"
|
|
53
|
+
}) {
|
|
54
|
+
const [tab, setTab] = (0, import_react.useState)("live");
|
|
55
|
+
const { drops, isLoading } = (0, import_use_drops.useDrops)(getClient, tab);
|
|
56
|
+
const now = (0, import_use_now.useNow)(6e4);
|
|
57
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-6", children: [
|
|
58
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
|
|
59
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tabs.Tabs, { value: tab, onValueChange: (v) => setTab(v), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_tabs.TabsList, { children: [
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tabs.TabsTrigger, { value: "live", children: "Live" }),
|
|
61
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tabs.TabsTrigger, { value: "upcoming", children: "Upcoming" }),
|
|
62
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tabs.TabsTrigger, { value: "ended", children: "Ended" })
|
|
63
|
+
] }) }),
|
|
64
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
65
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: myDropsHref, className: "inline-flex h-9 items-center rounded-md border border-border px-3 text-sm hover:bg-muted/60", children: "My drops" }),
|
|
66
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_link.default, { href: createHref, className: "inline-flex h-9 items-center gap-1.5 rounded-md bg-primary px-3 text-sm font-semibold text-primary-foreground hover:brightness-110", children: [
|
|
67
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Plus, { className: "h-3.5 w-3.5" }),
|
|
68
|
+
"Create a drop"
|
|
69
|
+
] })
|
|
70
|
+
] })
|
|
71
|
+
] }),
|
|
72
|
+
isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_drop_card.DropGridSkeleton, {}) : drops.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_tab_empty_state.TabEmptyState, { icon: import_lucide_react.Package, ...EMPTY[tab] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_drop_card.DropGrid, { drops, now })
|
|
73
|
+
] });
|
|
74
|
+
}
|
|
75
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
76
|
+
0 && (module.exports = {
|
|
77
|
+
DropListing
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=drop-listing.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-listing.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { Package, Plus } from \"lucide-react\";\nimport type { ApiDropListStatus } from \"@medialane/sdk\";\nimport type { MedialaneClient } from \"@medialane/sdk/starknet\";\nimport Link from \"../link.js\";\nimport { Tabs, TabsList, TabsTrigger } from \"../tabs.js\";\nimport { TabEmptyState } from \"../tab-empty-state.js\";\nimport { DropGrid, DropGridSkeleton } from \"./drop-card.js\";\nimport { useDrops } from \"../../utils/use-drops.js\";\nimport { useNow } from \"../../utils/drop/use-now.js\";\n\nconst EMPTY: Record<ApiDropListStatus, { heading: string; body: string }> = {\n live: { heading: \"No live drops\", body: \"Nothing is open for minting right now. Check Upcoming, or launch your own.\" },\n upcoming: { heading: \"No upcoming drops\", body: \"Scheduled drops will show here before they open.\" },\n ended: { heading: \"No ended drops\", body: \"Drops that sold out or closed will show here.\" },\n};\n\nexport function DropListing({\n getClient,\n createHref = \"/launchpad/drop/create\",\n myDropsHref = \"/launchpad/drop/my-drops\",\n}: {\n getClient: () => MedialaneClient;\n createHref?: string;\n myDropsHref?: string;\n}) {\n const [tab, setTab] = useState<ApiDropListStatus>(\"live\");\n const { drops, isLoading } = useDrops(getClient, tab);\n const now = useNow(60_000);\n return (\n <div className=\"space-y-6\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <Tabs value={tab} onValueChange={(v) => setTab(v as ApiDropListStatus)}>\n <TabsList>\n <TabsTrigger value=\"live\">Live</TabsTrigger>\n <TabsTrigger value=\"upcoming\">Upcoming</TabsTrigger>\n <TabsTrigger value=\"ended\">Ended</TabsTrigger>\n </TabsList>\n </Tabs>\n <div className=\"flex items-center gap-2\">\n <Link href={myDropsHref} className=\"inline-flex h-9 items-center rounded-md border border-border px-3 text-sm hover:bg-muted/60\">My drops</Link>\n <Link href={createHref} className=\"inline-flex h-9 items-center gap-1.5 rounded-md bg-primary px-3 text-sm font-semibold text-primary-foreground hover:brightness-110\">\n <Plus className=\"h-3.5 w-3.5\" />\n Create a drop\n </Link>\n </div>\n </div>\n {isLoading ? <DropGridSkeleton /> : drops.length === 0 ? <TabEmptyState icon={Package} {...EMPTY[tab]} /> : <DropGrid drops={drops} now={now} />}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCU;AAjCV,mBAAyB;AACzB,0BAA8B;AAG9B,kBAAiB;AACjB,kBAA4C;AAC5C,6BAA8B;AAC9B,uBAA2C;AAC3C,uBAAyB;AACzB,qBAAuB;AAEvB,MAAM,QAAsE;AAAA,EAC1E,MAAM,EAAE,SAAS,iBAAiB,MAAM,6EAA6E;AAAA,EACrH,UAAU,EAAE,SAAS,qBAAqB,MAAM,mDAAmD;AAAA,EACnG,OAAO,EAAE,SAAS,kBAAkB,MAAM,gDAAgD;AAC5F;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAChB,GAIG;AACD,QAAM,CAAC,KAAK,MAAM,QAAI,uBAA4B,MAAM;AACxD,QAAM,EAAE,OAAO,UAAU,QAAI,2BAAS,WAAW,GAAG;AACpD,QAAM,UAAM,uBAAO,GAAM;AACzB,SACE,6CAAC,SAAI,WAAU,aACb;AAAA,iDAAC,SAAI,WAAU,qDACb;AAAA,kDAAC,oBAAK,OAAO,KAAK,eAAe,CAAC,MAAM,OAAO,CAAsB,GACnE,uDAAC,wBACC;AAAA,oDAAC,2BAAY,OAAM,QAAO,kBAAI;AAAA,QAC9B,4CAAC,2BAAY,OAAM,YAAW,sBAAQ;AAAA,QACtC,4CAAC,2BAAY,OAAM,SAAQ,mBAAK;AAAA,SAClC,GACF;AAAA,MACA,6CAAC,SAAI,WAAU,2BACb;AAAA,oDAAC,YAAAA,SAAA,EAAK,MAAM,aAAa,WAAU,+FAA8F,sBAAQ;AAAA,QACzI,6CAAC,YAAAA,SAAA,EAAK,MAAM,YAAY,WAAU,sIAChC;AAAA,sDAAC,4BAAK,WAAU,eAAc;AAAA,UAAE;AAAA,WAElC;AAAA,SACF;AAAA,OACF;AAAA,IACC,YAAY,4CAAC,qCAAiB,IAAK,MAAM,WAAW,IAAI,4CAAC,wCAAc,MAAM,6BAAU,GAAG,MAAM,GAAG,GAAG,IAAK,4CAAC,6BAAS,OAAc,KAAU;AAAA,KAChJ;AAEJ;","names":["Link"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { MedialaneClient } from '@medialane/sdk/starknet';
|
|
3
|
+
|
|
4
|
+
declare function DropListing({ getClient, createHref, myDropsHref, }: {
|
|
5
|
+
getClient: () => MedialaneClient;
|
|
6
|
+
createHref?: string;
|
|
7
|
+
myDropsHref?: string;
|
|
8
|
+
}): react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { DropListing };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { MedialaneClient } from '@medialane/sdk/starknet';
|
|
3
|
+
|
|
4
|
+
declare function DropListing({ getClient, createHref, myDropsHref, }: {
|
|
5
|
+
getClient: () => MedialaneClient;
|
|
6
|
+
createHref?: string;
|
|
7
|
+
myDropsHref?: string;
|
|
8
|
+
}): react_jsx_runtime.JSX.Element;
|
|
9
|
+
|
|
10
|
+
export { DropListing };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Package, Plus } from "lucide-react";
|
|
5
|
+
import Link from "../link.js";
|
|
6
|
+
import { Tabs, TabsList, TabsTrigger } from "../tabs.js";
|
|
7
|
+
import { TabEmptyState } from "../tab-empty-state.js";
|
|
8
|
+
import { DropGrid, DropGridSkeleton } from "./drop-card.js";
|
|
9
|
+
import { useDrops } from "../../utils/use-drops.js";
|
|
10
|
+
import { useNow } from "../../utils/drop/use-now.js";
|
|
11
|
+
const EMPTY = {
|
|
12
|
+
live: { heading: "No live drops", body: "Nothing is open for minting right now. Check Upcoming, or launch your own." },
|
|
13
|
+
upcoming: { heading: "No upcoming drops", body: "Scheduled drops will show here before they open." },
|
|
14
|
+
ended: { heading: "No ended drops", body: "Drops that sold out or closed will show here." }
|
|
15
|
+
};
|
|
16
|
+
function DropListing({
|
|
17
|
+
getClient,
|
|
18
|
+
createHref = "/launchpad/drop/create",
|
|
19
|
+
myDropsHref = "/launchpad/drop/my-drops"
|
|
20
|
+
}) {
|
|
21
|
+
const [tab, setTab] = useState("live");
|
|
22
|
+
const { drops, isLoading } = useDrops(getClient, tab);
|
|
23
|
+
const now = useNow(6e4);
|
|
24
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
|
|
25
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
|
|
26
|
+
/* @__PURE__ */ jsx(Tabs, { value: tab, onValueChange: (v) => setTab(v), children: /* @__PURE__ */ jsxs(TabsList, { children: [
|
|
27
|
+
/* @__PURE__ */ jsx(TabsTrigger, { value: "live", children: "Live" }),
|
|
28
|
+
/* @__PURE__ */ jsx(TabsTrigger, { value: "upcoming", children: "Upcoming" }),
|
|
29
|
+
/* @__PURE__ */ jsx(TabsTrigger, { value: "ended", children: "Ended" })
|
|
30
|
+
] }) }),
|
|
31
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
32
|
+
/* @__PURE__ */ jsx(Link, { href: myDropsHref, className: "inline-flex h-9 items-center rounded-md border border-border px-3 text-sm hover:bg-muted/60", children: "My drops" }),
|
|
33
|
+
/* @__PURE__ */ jsxs(Link, { href: createHref, className: "inline-flex h-9 items-center gap-1.5 rounded-md bg-primary px-3 text-sm font-semibold text-primary-foreground hover:brightness-110", children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5" }),
|
|
35
|
+
"Create a drop"
|
|
36
|
+
] })
|
|
37
|
+
] })
|
|
38
|
+
] }),
|
|
39
|
+
isLoading ? /* @__PURE__ */ jsx(DropGridSkeleton, {}) : drops.length === 0 ? /* @__PURE__ */ jsx(TabEmptyState, { icon: Package, ...EMPTY[tab] }) : /* @__PURE__ */ jsx(DropGrid, { drops, now })
|
|
40
|
+
] });
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
DropListing
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=drop-listing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-listing.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { Package, Plus } from \"lucide-react\";\nimport type { ApiDropListStatus } from \"@medialane/sdk\";\nimport type { MedialaneClient } from \"@medialane/sdk/starknet\";\nimport Link from \"../link.js\";\nimport { Tabs, TabsList, TabsTrigger } from \"../tabs.js\";\nimport { TabEmptyState } from \"../tab-empty-state.js\";\nimport { DropGrid, DropGridSkeleton } from \"./drop-card.js\";\nimport { useDrops } from \"../../utils/use-drops.js\";\nimport { useNow } from \"../../utils/drop/use-now.js\";\n\nconst EMPTY: Record<ApiDropListStatus, { heading: string; body: string }> = {\n live: { heading: \"No live drops\", body: \"Nothing is open for minting right now. Check Upcoming, or launch your own.\" },\n upcoming: { heading: \"No upcoming drops\", body: \"Scheduled drops will show here before they open.\" },\n ended: { heading: \"No ended drops\", body: \"Drops that sold out or closed will show here.\" },\n};\n\nexport function DropListing({\n getClient,\n createHref = \"/launchpad/drop/create\",\n myDropsHref = \"/launchpad/drop/my-drops\",\n}: {\n getClient: () => MedialaneClient;\n createHref?: string;\n myDropsHref?: string;\n}) {\n const [tab, setTab] = useState<ApiDropListStatus>(\"live\");\n const { drops, isLoading } = useDrops(getClient, tab);\n const now = useNow(60_000);\n return (\n <div className=\"space-y-6\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <Tabs value={tab} onValueChange={(v) => setTab(v as ApiDropListStatus)}>\n <TabsList>\n <TabsTrigger value=\"live\">Live</TabsTrigger>\n <TabsTrigger value=\"upcoming\">Upcoming</TabsTrigger>\n <TabsTrigger value=\"ended\">Ended</TabsTrigger>\n </TabsList>\n </Tabs>\n <div className=\"flex items-center gap-2\">\n <Link href={myDropsHref} className=\"inline-flex h-9 items-center rounded-md border border-border px-3 text-sm hover:bg-muted/60\">My drops</Link>\n <Link href={createHref} className=\"inline-flex h-9 items-center gap-1.5 rounded-md bg-primary px-3 text-sm font-semibold text-primary-foreground hover:brightness-110\">\n <Plus className=\"h-3.5 w-3.5\" />\n Create a drop\n </Link>\n </div>\n </div>\n {isLoading ? <DropGridSkeleton /> : drops.length === 0 ? <TabEmptyState icon={Package} {...EMPTY[tab]} /> : <DropGrid drops={drops} now={now} />}\n </div>\n );\n}\n"],"mappings":";AAmCU,SACE,KADF;AAjCV,SAAS,gBAAgB;AACzB,SAAS,SAAS,YAAY;AAG9B,OAAO,UAAU;AACjB,SAAS,MAAM,UAAU,mBAAmB;AAC5C,SAAS,qBAAqB;AAC9B,SAAS,UAAU,wBAAwB;AAC3C,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,MAAM,QAAsE;AAAA,EAC1E,MAAM,EAAE,SAAS,iBAAiB,MAAM,6EAA6E;AAAA,EACrH,UAAU,EAAE,SAAS,qBAAqB,MAAM,mDAAmD;AAAA,EACnG,OAAO,EAAE,SAAS,kBAAkB,MAAM,gDAAgD;AAC5F;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAChB,GAIG;AACD,QAAM,CAAC,KAAK,MAAM,IAAI,SAA4B,MAAM;AACxD,QAAM,EAAE,OAAO,UAAU,IAAI,SAAS,WAAW,GAAG;AACpD,QAAM,MAAM,OAAO,GAAM;AACzB,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,yBAAC,SAAI,WAAU,qDACb;AAAA,0BAAC,QAAK,OAAO,KAAK,eAAe,CAAC,MAAM,OAAO,CAAsB,GACnE,+BAAC,YACC;AAAA,4BAAC,eAAY,OAAM,QAAO,kBAAI;AAAA,QAC9B,oBAAC,eAAY,OAAM,YAAW,sBAAQ;AAAA,QACtC,oBAAC,eAAY,OAAM,SAAQ,mBAAK;AAAA,SAClC,GACF;AAAA,MACA,qBAAC,SAAI,WAAU,2BACb;AAAA,4BAAC,QAAK,MAAM,aAAa,WAAU,+FAA8F,sBAAQ;AAAA,QACzI,qBAAC,QAAK,MAAM,YAAY,WAAU,sIAChC;AAAA,8BAAC,QAAK,WAAU,eAAc;AAAA,UAAE;AAAA,WAElC;AAAA,SACF;AAAA,OACF;AAAA,IACC,YAAY,oBAAC,oBAAiB,IAAK,MAAM,WAAW,IAAI,oBAAC,iBAAc,MAAM,SAAU,GAAG,MAAM,GAAG,GAAG,IAAK,oBAAC,YAAS,OAAc,KAAU;AAAA,KAChJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
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 drop_token_link_exports = {};
|
|
31
|
+
__export(drop_token_link_exports, {
|
|
32
|
+
DropTokenLink: () => DropTokenLink
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(drop_token_link_exports);
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
+
var import_lucide_react = require("lucide-react");
|
|
37
|
+
var import_sdk = require("@medialane/sdk");
|
|
38
|
+
var import_link = __toESM(require("../link.js"), 1);
|
|
39
|
+
function DropTokenLink({ contract, name }) {
|
|
40
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
41
|
+
import_link.default,
|
|
42
|
+
{
|
|
43
|
+
href: (0, import_sdk.dropHref)(contract),
|
|
44
|
+
className: "flex items-center justify-between gap-3 rounded-xl border border-border px-4 py-3 transition-colors hover:bg-muted/40",
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "flex min-w-0 items-center gap-2 text-sm", children: [
|
|
47
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Package, { className: "h-4 w-4 shrink-0 text-brand-orange" }),
|
|
48
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: "From the drop" }),
|
|
49
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "truncate font-semibold", children: name ?? "Drop" })
|
|
50
|
+
] }),
|
|
51
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "flex shrink-0 items-center gap-1 text-sm font-semibold text-primary", children: [
|
|
52
|
+
"View drop ",
|
|
53
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "h-3.5 w-3.5" })
|
|
54
|
+
] })
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
60
|
+
0 && (module.exports = {
|
|
61
|
+
DropTokenLink
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=drop-token-link.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-token-link.tsx"],"sourcesContent":["\"use client\";\n\nimport { ArrowRight, Package } from \"lucide-react\";\nimport { dropHref } from \"@medialane/sdk\";\nimport Link from \"../link.js\";\n\n/** On a token page: where the token was minted. */\nexport function DropTokenLink({ contract, name }: { contract: string; name: string | null }) {\n return (\n <Link\n href={dropHref(contract)}\n className=\"flex items-center justify-between gap-3 rounded-xl border border-border px-4 py-3 transition-colors hover:bg-muted/40\"\n >\n <span className=\"flex min-w-0 items-center gap-2 text-sm\">\n <Package className=\"h-4 w-4 shrink-0 text-brand-orange\" />\n <span className=\"text-muted-foreground\">From the drop</span>\n <span className=\"truncate font-semibold\">{name ?? \"Drop\"}</span>\n </span>\n <span className=\"flex shrink-0 items-center gap-1 text-sm font-semibold text-primary\">\n View drop <ArrowRight className=\"h-3.5 w-3.5\" />\n </span>\n </Link>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaM;AAXN,0BAAoC;AACpC,iBAAyB;AACzB,kBAAiB;AAGV,SAAS,cAAc,EAAE,UAAU,KAAK,GAA8C;AAC3F,SACE;AAAA,IAAC,YAAAA;AAAA,IAAA;AAAA,MACC,UAAM,qBAAS,QAAQ;AAAA,MACvB,WAAU;AAAA,MAEV;AAAA,qDAAC,UAAK,WAAU,2CACd;AAAA,sDAAC,+BAAQ,WAAU,sCAAqC;AAAA,UACxD,4CAAC,UAAK,WAAU,yBAAwB,2BAAa;AAAA,UACrD,4CAAC,UAAK,WAAU,0BAA0B,kBAAQ,QAAO;AAAA,WAC3D;AAAA,QACA,6CAAC,UAAK,WAAU,uEAAsE;AAAA;AAAA,UAC1E,4CAAC,kCAAW,WAAU,eAAc;AAAA,WAChD;AAAA;AAAA;AAAA,EACF;AAEJ;","names":["Link"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
/** On a token page: where the token was minted. */
|
|
4
|
+
declare function DropTokenLink({ contract, name }: {
|
|
5
|
+
contract: string;
|
|
6
|
+
name: string | null;
|
|
7
|
+
}): react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { DropTokenLink };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
/** On a token page: where the token was minted. */
|
|
4
|
+
declare function DropTokenLink({ contract, name }: {
|
|
5
|
+
contract: string;
|
|
6
|
+
name: string | null;
|
|
7
|
+
}): react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { DropTokenLink };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ArrowRight, Package } from "lucide-react";
|
|
4
|
+
import { dropHref } from "@medialane/sdk";
|
|
5
|
+
import Link from "../link.js";
|
|
6
|
+
function DropTokenLink({ contract, name }) {
|
|
7
|
+
return /* @__PURE__ */ jsxs(
|
|
8
|
+
Link,
|
|
9
|
+
{
|
|
10
|
+
href: dropHref(contract),
|
|
11
|
+
className: "flex items-center justify-between gap-3 rounded-xl border border-border px-4 py-3 transition-colors hover:bg-muted/40",
|
|
12
|
+
children: [
|
|
13
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 items-center gap-2 text-sm", children: [
|
|
14
|
+
/* @__PURE__ */ jsx(Package, { className: "h-4 w-4 shrink-0 text-brand-orange" }),
|
|
15
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "From the drop" }),
|
|
16
|
+
/* @__PURE__ */ jsx("span", { className: "truncate font-semibold", children: name ?? "Drop" })
|
|
17
|
+
] }),
|
|
18
|
+
/* @__PURE__ */ jsxs("span", { className: "flex shrink-0 items-center gap-1 text-sm font-semibold text-primary", children: [
|
|
19
|
+
"View drop ",
|
|
20
|
+
/* @__PURE__ */ jsx(ArrowRight, { className: "h-3.5 w-3.5" })
|
|
21
|
+
] })
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
DropTokenLink
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=drop-token-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-token-link.tsx"],"sourcesContent":["\"use client\";\n\nimport { ArrowRight, Package } from \"lucide-react\";\nimport { dropHref } from \"@medialane/sdk\";\nimport Link from \"../link.js\";\n\n/** On a token page: where the token was minted. */\nexport function DropTokenLink({ contract, name }: { contract: string; name: string | null }) {\n return (\n <Link\n href={dropHref(contract)}\n className=\"flex items-center justify-between gap-3 rounded-xl border border-border px-4 py-3 transition-colors hover:bg-muted/40\"\n >\n <span className=\"flex min-w-0 items-center gap-2 text-sm\">\n <Package className=\"h-4 w-4 shrink-0 text-brand-orange\" />\n <span className=\"text-muted-foreground\">From the drop</span>\n <span className=\"truncate font-semibold\">{name ?? \"Drop\"}</span>\n </span>\n <span className=\"flex shrink-0 items-center gap-1 text-sm font-semibold text-primary\">\n View drop <ArrowRight className=\"h-3.5 w-3.5\" />\n </span>\n </Link>\n );\n}\n"],"mappings":";AAaM,SACE,KADF;AAXN,SAAS,YAAY,eAAe;AACpC,SAAS,gBAAgB;AACzB,OAAO,UAAU;AAGV,SAAS,cAAc,EAAE,UAAU,KAAK,GAA8C;AAC3F,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,SAAS,QAAQ;AAAA,MACvB,WAAU;AAAA,MAEV;AAAA,6BAAC,UAAK,WAAU,2CACd;AAAA,8BAAC,WAAQ,WAAU,sCAAqC;AAAA,UACxD,oBAAC,UAAK,WAAU,yBAAwB,2BAAa;AAAA,UACrD,oBAAC,UAAK,WAAU,0BAA0B,kBAAQ,QAAO;AAAA,WAC3D;AAAA,QACA,qBAAC,UAAK,WAAU,uEAAsE;AAAA;AAAA,UAC1E,oBAAC,cAAW,WAAU,eAAc;AAAA,WAChD;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|