@medialane/ui 0.183.0 → 0.185.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 +114 -0
- package/dist/components/drop/create/drop-create.cjs.map +1 -0
- package/dist/components/drop/create/drop-create.d.cts +20 -0
- package/dist/components/drop/create/drop-create.d.ts +20 -0
- package/dist/components/drop/create/drop-create.js +79 -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 +196 -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 +171 -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-features.cjs +44 -0
- package/dist/components/drop/drop-features.cjs.map +1 -0
- package/dist/components/drop/drop-features.d.cts +5 -0
- package/dist/components/drop/drop-features.d.ts +5 -0
- package/dist/components/drop/drop-features.js +20 -0
- package/dist/components/drop/drop-features.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-status-display.cjs → drop/drop-status.cjs} +12 -43
- package/dist/components/drop/drop-status.cjs.map +1 -0
- package/dist/components/drop/drop-status.d.cts +13 -0
- package/dist/components/drop/drop-status.d.ts +13 -0
- package/dist/components/drop/drop-status.js +47 -0
- package/dist/components/drop/drop-status.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 +15 -0
- package/dist/components/drop/page/drop-action-box.d.ts +15 -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 +167 -0
- package/dist/components/drop/page/drop-page.cjs.map +1 -0
- package/dist/components/drop/page/drop-page.d.cts +15 -0
- package/dist/components/drop/page/drop-page.d.ts +15 -0
- package/dist/components/drop/page/drop-page.js +133 -0
- package/dist/components/drop/page/drop-page.js.map +1 -0
- package/dist/components/image.d.cts +2 -0
- package/dist/components/image.d.ts +2 -0
- package/dist/index.cjs +54 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -11
- package/dist/index.d.ts +21 -11
- package/dist/index.js +34 -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 +48 -45
- package/dist/utils/use-drops.cjs.map +1 -1
- package/dist/utils/use-drops.d.cts +33 -23
- package/dist/utils/use-drops.d.ts +33 -23
- package/dist/utils/use-drops.js +41 -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.cjs.map +0 -1
- package/dist/components/drop-status-display.d.cts +0 -15
- package/dist/components/drop-status-display.d.ts +0 -15
- package/dist/components/drop-status-display.js +0 -77
- package/dist/components/drop-status-display.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, feeBps }) {
|
|
12
|
+
const sale = draft.sale;
|
|
13
|
+
const set = (patch) => setDraft({ sale: { ...sale, ...patch } });
|
|
14
|
+
const line = feeBps === null ? null : collectorPriceLine(sale, feeBps);
|
|
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 } 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, feeBps }: SectionProps & { feeBps: number | null }) {\n const sale = draft.sale;\n const set = (patch: Partial<SaleDraft>) => setDraft({ sale: { ...sale, ...patch } });\n const line = feeBps === null ? null : collectorPriceLine(sale, feeBps);\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,yBAAyB;AAClC,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,OAAO,GAA6C;AACzG,QAAM,OAAO,MAAM;AACnB,QAAM,MAAM,CAAC,UAA8B,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AACnF,QAAM,OAAO,WAAW,OAAO,OAAO,mBAAmB,MAAM,MAAM;AACrE,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 = require("./drop-status.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.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.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,yBAAgC;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,sCAAgB,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.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.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,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var drop_features_exports = {};
|
|
21
|
+
__export(drop_features_exports, {
|
|
22
|
+
DropFeatures: () => DropFeatures
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(drop_features_exports);
|
|
25
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
|
+
var import_lucide_react = require("lucide-react");
|
|
27
|
+
const FEATURES = [
|
|
28
|
+
{ icon: import_lucide_react.Layers, title: "Edition or collection", desc: "One artwork in numbered copies, or many unique items." },
|
|
29
|
+
{ icon: import_lucide_react.Timer, title: "Your sale window", desc: "Open now or on a date, close whenever you choose \u2014 or never." },
|
|
30
|
+
{ icon: import_lucide_react.Users, title: "Everyone or a list", desc: "Open to all, or only the wallets you invite with claim links." },
|
|
31
|
+
{ icon: import_lucide_react.Package, title: "Collectors own them", desc: "Each token is theirs to keep, sell or trade anywhere." }
|
|
32
|
+
];
|
|
33
|
+
function DropFeatures() {
|
|
34
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-4 gap-3", children: FEATURES.map(({ icon: Icon, title, desc }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "bento-cell p-4 space-y-2", children: [
|
|
35
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { className: "h-5 w-5 text-brand-orange" }),
|
|
36
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-semibold leading-tight", children: title }),
|
|
37
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-muted-foreground leading-relaxed", children: desc })
|
|
38
|
+
] }, title)) });
|
|
39
|
+
}
|
|
40
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
41
|
+
0 && (module.exports = {
|
|
42
|
+
DropFeatures
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=drop-features.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-features.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers, Package, Timer, Users } from \"lucide-react\";\n\nconst FEATURES = [\n { icon: Layers, title: \"Edition or collection\", desc: \"One artwork in numbered copies, or many unique items.\" },\n { icon: Timer, title: \"Your sale window\", desc: \"Open now or on a date, close whenever you choose — or never.\" },\n { icon: Users, title: \"Everyone or a list\", desc: \"Open to all, or only the wallets you invite with claim links.\" },\n { icon: Package, title: \"Collectors own them\", desc: \"Each token is theirs to keep, sell or trade anywhere.\" },\n];\n\nexport function DropFeatures() {\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n {FEATURES.map(({ icon: Icon, title, desc }) => (\n <div key={title} className=\"bento-cell p-4 space-y-2\">\n <Icon className=\"h-5 w-5 text-brand-orange\" />\n <p className=\"text-sm font-semibold leading-tight\">{title}</p>\n <p className=\"text-xs text-muted-foreground leading-relaxed\">{desc}</p>\n </div>\n ))}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeQ;AAbR,0BAA8C;AAE9C,MAAM,WAAW;AAAA,EACf,EAAE,MAAM,4BAAQ,OAAO,yBAAyB,MAAM,wDAAwD;AAAA,EAC9G,EAAE,MAAM,2BAAO,OAAO,oBAAoB,MAAM,oEAA+D;AAAA,EAC/G,EAAE,MAAM,2BAAO,OAAO,sBAAsB,MAAM,gEAAgE;AAAA,EAClH,EAAE,MAAM,6BAAS,OAAO,uBAAuB,MAAM,wDAAwD;AAC/G;AAEO,SAAS,eAAe;AAC7B,SACE,4CAAC,SAAI,WAAU,yCACZ,mBAAS,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,KAAK,MACvC,6CAAC,SAAgB,WAAU,4BACzB;AAAA,gDAAC,QAAK,WAAU,6BAA4B;AAAA,IAC5C,4CAAC,OAAE,WAAU,uCAAuC,iBAAM;AAAA,IAC1D,4CAAC,OAAE,WAAU,iDAAiD,gBAAK;AAAA,OAH3D,KAIV,CACD,GACH;AAEJ;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Layers, Package, Timer, Users } from "lucide-react";
|
|
4
|
+
const FEATURES = [
|
|
5
|
+
{ icon: Layers, title: "Edition or collection", desc: "One artwork in numbered copies, or many unique items." },
|
|
6
|
+
{ icon: Timer, title: "Your sale window", desc: "Open now or on a date, close whenever you choose \u2014 or never." },
|
|
7
|
+
{ icon: Users, title: "Everyone or a list", desc: "Open to all, or only the wallets you invite with claim links." },
|
|
8
|
+
{ icon: Package, title: "Collectors own them", desc: "Each token is theirs to keep, sell or trade anywhere." }
|
|
9
|
+
];
|
|
10
|
+
function DropFeatures() {
|
|
11
|
+
return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 sm:grid-cols-4 gap-3", children: FEATURES.map(({ icon: Icon, title, desc }) => /* @__PURE__ */ jsxs("div", { className: "bento-cell p-4 space-y-2", children: [
|
|
12
|
+
/* @__PURE__ */ jsx(Icon, { className: "h-5 w-5 text-brand-orange" }),
|
|
13
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-semibold leading-tight", children: title }),
|
|
14
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground leading-relaxed", children: desc })
|
|
15
|
+
] }, title)) });
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
DropFeatures
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=drop-features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-features.tsx"],"sourcesContent":["\"use client\";\n\nimport { Layers, Package, Timer, Users } from \"lucide-react\";\n\nconst FEATURES = [\n { icon: Layers, title: \"Edition or collection\", desc: \"One artwork in numbered copies, or many unique items.\" },\n { icon: Timer, title: \"Your sale window\", desc: \"Open now or on a date, close whenever you choose — or never.\" },\n { icon: Users, title: \"Everyone or a list\", desc: \"Open to all, or only the wallets you invite with claim links.\" },\n { icon: Package, title: \"Collectors own them\", desc: \"Each token is theirs to keep, sell or trade anywhere.\" },\n];\n\nexport function DropFeatures() {\n return (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3\">\n {FEATURES.map(({ icon: Icon, title, desc }) => (\n <div key={title} className=\"bento-cell p-4 space-y-2\">\n <Icon className=\"h-5 w-5 text-brand-orange\" />\n <p className=\"text-sm font-semibold leading-tight\">{title}</p>\n <p className=\"text-xs text-muted-foreground leading-relaxed\">{desc}</p>\n </div>\n ))}\n </div>\n );\n}\n"],"mappings":";AAeQ,SACE,KADF;AAbR,SAAS,QAAQ,SAAS,OAAO,aAAa;AAE9C,MAAM,WAAW;AAAA,EACf,EAAE,MAAM,QAAQ,OAAO,yBAAyB,MAAM,wDAAwD;AAAA,EAC9G,EAAE,MAAM,OAAO,OAAO,oBAAoB,MAAM,oEAA+D;AAAA,EAC/G,EAAE,MAAM,OAAO,OAAO,sBAAsB,MAAM,gEAAgE;AAAA,EAClH,EAAE,MAAM,SAAS,OAAO,uBAAuB,MAAM,wDAAwD;AAC/G;AAEO,SAAS,eAAe;AAC7B,SACE,oBAAC,SAAI,WAAU,yCACZ,mBAAS,IAAI,CAAC,EAAE,MAAM,MAAM,OAAO,KAAK,MACvC,qBAAC,SAAgB,WAAU,4BACzB;AAAA,wBAAC,QAAK,WAAU,6BAA4B;AAAA,IAC5C,oBAAC,OAAE,WAAU,uCAAuC,iBAAM;AAAA,IAC1D,oBAAC,OAAE,WAAU,iDAAiD,gBAAK;AAAA,OAH3D,KAIV,CACD,GACH;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":[]}
|
|
@@ -17,42 +17,26 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
19
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
-
var
|
|
21
|
-
__export(
|
|
22
|
-
DropPriceDisplay: () => DropPriceDisplay,
|
|
20
|
+
var drop_status_exports = {};
|
|
21
|
+
__export(drop_status_exports, {
|
|
23
22
|
DropStatusBadge: () => DropStatusBadge,
|
|
24
23
|
DropSupplyProgress: () => DropSupplyProgress
|
|
25
24
|
});
|
|
26
|
-
module.exports = __toCommonJS(
|
|
25
|
+
module.exports = __toCommonJS(drop_status_exports);
|
|
27
26
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
28
|
-
var
|
|
29
|
-
|
|
30
|
-
function getTokenByAddress(address) {
|
|
31
|
-
return (0, import_sdk.getListableTokens)().find(
|
|
32
|
-
(t) => (0, import_sdk.normalizeAddress)("STARKNET", t.address) === (0, import_sdk.normalizeAddress)("STARKNET", address)
|
|
33
|
-
) ?? null;
|
|
34
|
-
}
|
|
35
|
-
function DropStatusBadge({ status }) {
|
|
27
|
+
var import_cn = require("../../utils/cn.js");
|
|
28
|
+
function DropStatusBadge({ phase }) {
|
|
36
29
|
const map = {
|
|
37
30
|
live: { label: "Live", cls: "text-green-400 bg-green-500/10" },
|
|
38
31
|
upcoming: { label: "Upcoming", cls: "text-brand-blue bg-brand-blue/10" },
|
|
39
32
|
ended: { label: "Ended", cls: "text-muted-foreground bg-muted" },
|
|
40
|
-
|
|
33
|
+
"sold-out": { label: "Sold out", cls: "text-brand-orange bg-brand-orange/10" }
|
|
41
34
|
};
|
|
42
|
-
const { label, cls } = map[
|
|
43
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
44
|
-
"span",
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"inline-flex items-center gap-1 text-xs font-bold uppercase tracking-widest rounded-full px-3 py-1",
|
|
48
|
-
cls
|
|
49
|
-
),
|
|
50
|
-
children: [
|
|
51
|
-
status === "live" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "h-1.5 w-1.5 rounded-full bg-green-400 animate-pulse" }),
|
|
52
|
-
label
|
|
53
|
-
]
|
|
54
|
-
}
|
|
55
|
-
);
|
|
35
|
+
const { label, cls } = map[phase];
|
|
36
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: (0, import_cn.cn)("inline-flex items-center gap-1 text-xs font-bold uppercase tracking-widest rounded-full px-3 py-1", cls), children: [
|
|
37
|
+
phase === "live" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "h-1.5 w-1.5 rounded-full bg-green-400 animate-pulse" }),
|
|
38
|
+
label
|
|
39
|
+
] });
|
|
56
40
|
}
|
|
57
41
|
function DropSupplyProgress({ minted, max }) {
|
|
58
42
|
const pct = max > 0 ? Math.min(100, minted / max * 100) : 0;
|
|
@@ -80,24 +64,9 @@ function DropSupplyProgress({ minted, max }) {
|
|
|
80
64
|
] })
|
|
81
65
|
] });
|
|
82
66
|
}
|
|
83
|
-
function DropPriceDisplay({ conditions }) {
|
|
84
|
-
if (conditions.price === "0" || conditions.paymentToken === "0x0") {
|
|
85
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex items-center gap-1.5 text-sm font-semibold text-green-500", children: "Free mint" });
|
|
86
|
-
}
|
|
87
|
-
const token = getTokenByAddress(conditions.paymentToken);
|
|
88
|
-
const decimals = token?.decimals ?? 18;
|
|
89
|
-
const priceNum = Number(BigInt(conditions.price) * 10000n / BigInt(10 ** decimals)) / 1e4;
|
|
90
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-1.5 text-sm font-semibold", children: [
|
|
91
|
-
priceNum,
|
|
92
|
-
" ",
|
|
93
|
-
token?.symbol ?? "tokens",
|
|
94
|
-
" per token"
|
|
95
|
-
] });
|
|
96
|
-
}
|
|
97
67
|
// Annotate the CommonJS export names for ESM import in node:
|
|
98
68
|
0 && (module.exports = {
|
|
99
|
-
DropPriceDisplay,
|
|
100
69
|
DropStatusBadge,
|
|
101
70
|
DropSupplyProgress
|
|
102
71
|
});
|
|
103
|
-
//# sourceMappingURL=drop-status
|
|
72
|
+
//# sourceMappingURL=drop-status.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/drop/drop-status.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn } from \"../../utils/cn.js\";\nimport type { DropPhase } from \"../../utils/drop/view.js\";\n\nexport function DropStatusBadge({ phase }: { phase: DropPhase }) {\n const map = {\n live: { label: \"Live\", cls: \"text-green-400 bg-green-500/10\" },\n upcoming: { label: \"Upcoming\", cls: \"text-brand-blue bg-brand-blue/10\" },\n ended: { label: \"Ended\", cls: \"text-muted-foreground bg-muted\" },\n \"sold-out\": { label: \"Sold out\", cls: \"text-brand-orange bg-brand-orange/10\" },\n } as const;\n const { label, cls } = map[phase];\n return (\n <span className={cn(\"inline-flex items-center gap-1 text-xs font-bold uppercase tracking-widest rounded-full px-3 py-1\", cls)}>\n {phase === \"live\" && <span className=\"h-1.5 w-1.5 rounded-full bg-green-400 animate-pulse\" />}\n {label}\n </span>\n );\n}\n\nexport function DropSupplyProgress({ minted, max }: { minted: number; max: number }) {\n const pct = max > 0 ? Math.min(100, (minted / max) * 100) : 0;\n return (\n <div className=\"space-y-1.5\">\n <div className=\"flex justify-between text-xs text-muted-foreground\">\n <span>{minted.toLocaleString()} minted</span>\n <span>of {max.toLocaleString()}</span>\n </div>\n <div className=\"h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-brand-orange transition-all duration-500\"\n style={{ width: `${pct}%` }}\n />\n </div>\n <p className=\"text-xs text-muted-foreground\">{pct.toFixed(1)}% claimed</p>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcI;AAZJ,gBAAmB;AAGZ,SAAS,gBAAgB,EAAE,MAAM,GAAyB;AAC/D,QAAM,MAAM;AAAA,IACV,MAAY,EAAE,OAAO,QAAY,KAAK,iCAAiC;AAAA,IACvE,UAAY,EAAE,OAAO,YAAY,KAAK,mCAAmC;AAAA,IACzE,OAAY,EAAE,OAAO,SAAY,KAAK,iCAAiC;AAAA,IACvE,YAAY,EAAE,OAAO,YAAY,KAAK,uCAAuC;AAAA,EAC/E;AACA,QAAM,EAAE,OAAO,IAAI,IAAI,IAAI,KAAK;AAChC,SACE,6CAAC,UAAK,eAAW,cAAG,qGAAqG,GAAG,GACzH;AAAA,cAAU,UAAU,4CAAC,UAAK,WAAU,uDAAsD;AAAA,IAC1F;AAAA,KACH;AAEJ;AAEO,SAAS,mBAAmB,EAAE,QAAQ,IAAI,GAAoC;AACnF,QAAM,MAAM,MAAM,IAAI,KAAK,IAAI,KAAM,SAAS,MAAO,GAAG,IAAI;AAC5D,SACE,6CAAC,SAAI,WAAU,eACb;AAAA,iDAAC,SAAI,WAAU,sDACb;AAAA,mDAAC,UAAM;AAAA,eAAO,eAAe;AAAA,QAAE;AAAA,SAAO;AAAA,MACtC,6CAAC,UAAK;AAAA;AAAA,QAAI,IAAI,eAAe;AAAA,SAAE;AAAA,OACjC;AAAA,IACA,4CAAC,SAAI,WAAU,6CACb;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,GAAG,GAAG,IAAI;AAAA;AAAA,IAC5B,GACF;AAAA,IACA,6CAAC,OAAE,WAAU,iCAAiC;AAAA,UAAI,QAAQ,CAAC;AAAA,MAAE;AAAA,OAAS;AAAA,KACxE;AAEJ;","names":[]}
|