@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,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var upload_exports = {};
|
|
20
|
+
__export(upload_exports, {
|
|
21
|
+
uploadAll: () => uploadAll
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(upload_exports);
|
|
24
|
+
async function uploadAll(tasks, upload, onChange, concurrency = 4) {
|
|
25
|
+
const state = tasks.map((t) => ({ ...t }));
|
|
26
|
+
const set = (i, patch) => {
|
|
27
|
+
state[i] = { ...state[i], ...patch };
|
|
28
|
+
onChange(state.map((t) => ({ ...t })));
|
|
29
|
+
};
|
|
30
|
+
const queue = state.map((t, i) => t.status === "done" ? -1 : i).filter((i) => i >= 0);
|
|
31
|
+
const worker = async () => {
|
|
32
|
+
for (let i = queue.shift(); i !== void 0; i = queue.shift()) {
|
|
33
|
+
set(i, { status: "uploading", error: null });
|
|
34
|
+
try {
|
|
35
|
+
set(i, { status: "done", uri: await upload(state[i].file) });
|
|
36
|
+
} catch (err) {
|
|
37
|
+
set(i, { status: "failed", error: err instanceof Error ? err.message : "Upload failed" });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, queue.length) }, worker));
|
|
42
|
+
return state;
|
|
43
|
+
}
|
|
44
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
45
|
+
0 && (module.exports = {
|
|
46
|
+
uploadAll
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=upload.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/upload.ts"],"sourcesContent":["export interface UploadTask {\n id: string;\n file: File;\n status: \"pending\" | \"uploading\" | \"done\" | \"failed\";\n uri: string | null;\n error: string | null;\n}\n\n/** Uploads every task that isn't done, `concurrency` at a time; never throws — failures stay on their task. */\nexport async function uploadAll(\n tasks: UploadTask[],\n upload: (file: File) => Promise<string>,\n onChange: (tasks: UploadTask[]) => void,\n concurrency = 4,\n): Promise<UploadTask[]> {\n const state = tasks.map((t) => ({ ...t }));\n const set = (i: number, patch: Partial<UploadTask>) => {\n state[i] = { ...state[i]!, ...patch };\n onChange(state.map((t) => ({ ...t })));\n };\n const queue = state.map((t, i) => (t.status === \"done\" ? -1 : i)).filter((i) => i >= 0);\n const worker = async () => {\n for (let i = queue.shift(); i !== undefined; i = queue.shift()) {\n set(i, { status: \"uploading\", error: null });\n try {\n set(i, { status: \"done\", uri: await upload(state[i]!.file) });\n } catch (err) {\n set(i, { status: \"failed\", error: err instanceof Error ? err.message : \"Upload failed\" });\n }\n }\n };\n await Promise.all(Array.from({ length: Math.min(concurrency, queue.length) }, worker));\n return state;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,eAAsB,UACpB,OACA,QACA,UACA,cAAc,GACS;AACvB,QAAM,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;AACzC,QAAM,MAAM,CAAC,GAAW,UAA+B;AACrD,UAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAI,GAAG,MAAM;AACpC,aAAS,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;AAAA,EACvC;AACA,QAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAO,EAAE,WAAW,SAAS,KAAK,CAAE,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;AACtF,QAAM,SAAS,YAAY;AACzB,aAAS,IAAI,MAAM,MAAM,GAAG,MAAM,QAAW,IAAI,MAAM,MAAM,GAAG;AAC9D,UAAI,GAAG,EAAE,QAAQ,aAAa,OAAO,KAAK,CAAC;AAC3C,UAAI;AACF,YAAI,GAAG,EAAE,QAAQ,QAAQ,KAAK,MAAM,OAAO,MAAM,CAAC,EAAG,IAAI,EAAE,CAAC;AAAA,MAC9D,SAAS,KAAK;AACZ,YAAI,GAAG,EAAE,QAAQ,UAAU,OAAO,eAAe,QAAQ,IAAI,UAAU,gBAAgB,CAAC;AAAA,MAC1F;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,aAAa,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC;AACrF,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface UploadTask {
|
|
2
|
+
id: string;
|
|
3
|
+
file: File;
|
|
4
|
+
status: "pending" | "uploading" | "done" | "failed";
|
|
5
|
+
uri: string | null;
|
|
6
|
+
error: string | null;
|
|
7
|
+
}
|
|
8
|
+
/** Uploads every task that isn't done, `concurrency` at a time; never throws — failures stay on their task. */
|
|
9
|
+
declare function uploadAll(tasks: UploadTask[], upload: (file: File) => Promise<string>, onChange: (tasks: UploadTask[]) => void, concurrency?: number): Promise<UploadTask[]>;
|
|
10
|
+
|
|
11
|
+
export { type UploadTask, uploadAll };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface UploadTask {
|
|
2
|
+
id: string;
|
|
3
|
+
file: File;
|
|
4
|
+
status: "pending" | "uploading" | "done" | "failed";
|
|
5
|
+
uri: string | null;
|
|
6
|
+
error: string | null;
|
|
7
|
+
}
|
|
8
|
+
/** Uploads every task that isn't done, `concurrency` at a time; never throws — failures stay on their task. */
|
|
9
|
+
declare function uploadAll(tasks: UploadTask[], upload: (file: File) => Promise<string>, onChange: (tasks: UploadTask[]) => void, concurrency?: number): Promise<UploadTask[]>;
|
|
10
|
+
|
|
11
|
+
export { type UploadTask, uploadAll };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
async function uploadAll(tasks, upload, onChange, concurrency = 4) {
|
|
2
|
+
const state = tasks.map((t) => ({ ...t }));
|
|
3
|
+
const set = (i, patch) => {
|
|
4
|
+
state[i] = { ...state[i], ...patch };
|
|
5
|
+
onChange(state.map((t) => ({ ...t })));
|
|
6
|
+
};
|
|
7
|
+
const queue = state.map((t, i) => t.status === "done" ? -1 : i).filter((i) => i >= 0);
|
|
8
|
+
const worker = async () => {
|
|
9
|
+
for (let i = queue.shift(); i !== void 0; i = queue.shift()) {
|
|
10
|
+
set(i, { status: "uploading", error: null });
|
|
11
|
+
try {
|
|
12
|
+
set(i, { status: "done", uri: await upload(state[i].file) });
|
|
13
|
+
} catch (err) {
|
|
14
|
+
set(i, { status: "failed", error: err instanceof Error ? err.message : "Upload failed" });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
await Promise.all(Array.from({ length: Math.min(concurrency, queue.length) }, worker));
|
|
19
|
+
return state;
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
uploadAll
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/upload.ts"],"sourcesContent":["export interface UploadTask {\n id: string;\n file: File;\n status: \"pending\" | \"uploading\" | \"done\" | \"failed\";\n uri: string | null;\n error: string | null;\n}\n\n/** Uploads every task that isn't done, `concurrency` at a time; never throws — failures stay on their task. */\nexport async function uploadAll(\n tasks: UploadTask[],\n upload: (file: File) => Promise<string>,\n onChange: (tasks: UploadTask[]) => void,\n concurrency = 4,\n): Promise<UploadTask[]> {\n const state = tasks.map((t) => ({ ...t }));\n const set = (i: number, patch: Partial<UploadTask>) => {\n state[i] = { ...state[i]!, ...patch };\n onChange(state.map((t) => ({ ...t })));\n };\n const queue = state.map((t, i) => (t.status === \"done\" ? -1 : i)).filter((i) => i >= 0);\n const worker = async () => {\n for (let i = queue.shift(); i !== undefined; i = queue.shift()) {\n set(i, { status: \"uploading\", error: null });\n try {\n set(i, { status: \"done\", uri: await upload(state[i]!.file) });\n } catch (err) {\n set(i, { status: \"failed\", error: err instanceof Error ? err.message : \"Upload failed\" });\n }\n }\n };\n await Promise.all(Array.from({ length: Math.min(concurrency, queue.length) }, worker));\n return state;\n}\n"],"mappings":"AASA,eAAsB,UACpB,OACA,QACA,UACA,cAAc,GACS;AACvB,QAAM,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;AACzC,QAAM,MAAM,CAAC,GAAW,UAA+B;AACrD,UAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAI,GAAG,MAAM;AACpC,aAAS,MAAM,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;AAAA,EACvC;AACA,QAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAO,EAAE,WAAW,SAAS,KAAK,CAAE,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;AACtF,QAAM,SAAS,YAAY;AACzB,aAAS,IAAI,MAAM,MAAM,GAAG,MAAM,QAAW,IAAI,MAAM,MAAM,GAAG;AAC9D,UAAI,GAAG,EAAE,QAAQ,aAAa,OAAO,KAAK,CAAC;AAC3C,UAAI;AACF,YAAI,GAAG,EAAE,QAAQ,QAAQ,KAAK,MAAM,OAAO,MAAM,CAAC,EAAG,IAAI,EAAE,CAAC;AAAA,MAC9D,SAAS,KAAK;AACZ,YAAI,GAAG,EAAE,QAAQ,UAAU,OAAO,eAAe,QAAQ,IAAI,UAAU,gBAAgB,CAAC;AAAA,MAC1F;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,aAAa,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC;AACrF,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
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 use_now_exports = {};
|
|
21
|
+
__export(use_now_exports, {
|
|
22
|
+
useNow: () => useNow
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(use_now_exports);
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
function useNow(intervalMs = 1e3) {
|
|
27
|
+
const [now, setNow] = (0, import_react.useState)(() => Math.floor(Date.now() / 1e3));
|
|
28
|
+
(0, import_react.useEffect)(() => {
|
|
29
|
+
const id = setInterval(() => setNow(Math.floor(Date.now() / 1e3)), intervalMs);
|
|
30
|
+
return () => clearInterval(id);
|
|
31
|
+
}, [intervalMs]);
|
|
32
|
+
return now;
|
|
33
|
+
}
|
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
35
|
+
0 && (module.exports = {
|
|
36
|
+
useNow
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=use-now.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/use-now.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/** Unix seconds, refreshed every `intervalMs`. */\nexport function useNow(intervalMs = 1000): number {\n const [now, setNow] = useState(() => Math.floor(Date.now() / 1000));\n useEffect(() => {\n const id = setInterval(() => setNow(Math.floor(Date.now() / 1000)), intervalMs);\n return () => clearInterval(id);\n }, [intervalMs]);\n return now;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAoC;AAG7B,SAAS,OAAO,aAAa,KAAc;AAChD,QAAM,CAAC,KAAK,MAAM,QAAI,uBAAS,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,CAAC;AAClE,8BAAU,MAAM;AACd,UAAM,KAAK,YAAY,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,CAAC,GAAG,UAAU;AAC9E,WAAO,MAAM,cAAc,EAAE;AAAA,EAC/B,GAAG,CAAC,UAAU,CAAC;AACf,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
function useNow(intervalMs = 1e3) {
|
|
4
|
+
const [now, setNow] = useState(() => Math.floor(Date.now() / 1e3));
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const id = setInterval(() => setNow(Math.floor(Date.now() / 1e3)), intervalMs);
|
|
7
|
+
return () => clearInterval(id);
|
|
8
|
+
}, [intervalMs]);
|
|
9
|
+
return now;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
useNow
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=use-now.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/use-now.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/** Unix seconds, refreshed every `intervalMs`. */\nexport function useNow(intervalMs = 1000): number {\n const [now, setNow] = useState(() => Math.floor(Date.now() / 1000));\n useEffect(() => {\n const id = setInterval(() => setNow(Math.floor(Date.now() / 1000)), intervalMs);\n return () => clearInterval(id);\n }, [intervalMs]);\n return now;\n}\n"],"mappings":";AAEA,SAAS,WAAW,gBAAgB;AAG7B,SAAS,OAAO,aAAa,KAAc;AAChD,QAAM,CAAC,KAAK,MAAM,IAAI,SAAS,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,CAAC;AAClE,YAAU,MAAM;AACd,UAAM,KAAK,YAAY,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,CAAC,GAAG,UAAU;AAC9E,WAAO,MAAM,cAAc,EAAE;AAAA,EAC/B,GAAG,CAAC,UAAU,CAAC;AACf,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var view_exports = {};
|
|
20
|
+
__export(view_exports, {
|
|
21
|
+
actionBoxView: () => actionBoxView,
|
|
22
|
+
dropPhase: () => dropPhase
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(view_exports);
|
|
25
|
+
var import_sdk = require("@medialane/sdk");
|
|
26
|
+
var import_starknet = require("@medialane/sdk/starknet");
|
|
27
|
+
var import_sale = require("./sale.js");
|
|
28
|
+
function dropPhase(t, maxSupply, minted, now) {
|
|
29
|
+
if (maxSupply !== 0n && minted >= maxSupply) return "sold-out";
|
|
30
|
+
if (t.startTime !== 0 && now < t.startTime) return "upcoming";
|
|
31
|
+
if (t.endTime !== 0 && now > t.endTime) return "ended";
|
|
32
|
+
return "live";
|
|
33
|
+
}
|
|
34
|
+
const when = (ts) => new Date(ts * 1e3).toLocaleString(void 0, { weekday: "short", day: "numeric", month: "short", hour: "2-digit", minute: "2-digit" });
|
|
35
|
+
function actionBoxView(input) {
|
|
36
|
+
const { drop, mint, feeConfig, now } = input;
|
|
37
|
+
const phase = dropPhase(drop, drop.maxSupply, drop.totalMinted, now);
|
|
38
|
+
const token = (0, import_sdk.getTokenByAddress)(drop.paymentToken);
|
|
39
|
+
const listed = BigInt(drop.allowlistRoot) !== 0n;
|
|
40
|
+
const quantity = input.quantity < 1n ? 1n : input.quantity > mint.maxQuantity ? mint.maxQuantity : input.quantity;
|
|
41
|
+
const statusText = phase === "upcoming" ? `Upcoming \xB7 starts ${when(drop.startTime)}` : phase === "sold-out" ? "Sold out" : phase === "ended" ? "Ended" : drop.endTime === 0 ? "Live \xB7 no end date" : "Live";
|
|
42
|
+
const countdown = phase === "upcoming" ? { label: "Starts in", target: drop.startTime } : phase === "live" && drop.endTime !== 0 ? { label: "Ends in", target: drop.endTime } : null;
|
|
43
|
+
let totalText = null;
|
|
44
|
+
if (mint.state === "ready" && drop.price > 0n && token) {
|
|
45
|
+
const { total } = (0, import_starknet.dropMintCost)(drop.price, quantity, feeConfig);
|
|
46
|
+
totalText = `Total ${(0, import_sdk.formatAmount)(total.toString(), token.decimals)} ${token.symbol} (incl. platform fee)`;
|
|
47
|
+
}
|
|
48
|
+
const button = (() => {
|
|
49
|
+
switch (mint.state) {
|
|
50
|
+
case "ready":
|
|
51
|
+
return { label: `Mint ${quantity}`, action: "mint" };
|
|
52
|
+
case "no-wallet":
|
|
53
|
+
return { label: "Sign in to mint", action: "sign-in" };
|
|
54
|
+
case "upcoming":
|
|
55
|
+
return { label: `Starts ${when(drop.startTime)}`, action: "none" };
|
|
56
|
+
case "ended":
|
|
57
|
+
return { label: "This drop has ended", action: "none" };
|
|
58
|
+
case "sold-out":
|
|
59
|
+
return { label: "Sold out", action: "none" };
|
|
60
|
+
case "no-link":
|
|
61
|
+
return { label: "Open your claim link to mint", action: "none" };
|
|
62
|
+
case "not-on-list":
|
|
63
|
+
return { label: "This wallet isn't on the list", action: "none" };
|
|
64
|
+
case "limit-reached":
|
|
65
|
+
return { label: `You've minted your limit (${drop.maxPerWallet})`, action: "none" };
|
|
66
|
+
case "insufficient-balance":
|
|
67
|
+
return { label: `Not enough ${token?.symbol ?? "balance"}`, action: "none" };
|
|
68
|
+
case "loading":
|
|
69
|
+
return { label: "Checking\u2026", action: "none" };
|
|
70
|
+
}
|
|
71
|
+
})();
|
|
72
|
+
const eligibility = !listed ? "Open to everyone" : mint.state === "ready" ? "You're on the list" : mint.state === "no-link" ? "This drop is for a list \u2014 open your claim link to mint" : "This drop is for a list";
|
|
73
|
+
return {
|
|
74
|
+
phase,
|
|
75
|
+
statusText,
|
|
76
|
+
countdown,
|
|
77
|
+
priceText: (0, import_sale.priceLabel)(drop.price.toString(), drop.paymentToken),
|
|
78
|
+
totalText,
|
|
79
|
+
eligibility,
|
|
80
|
+
button,
|
|
81
|
+
maxQuantity: mint.maxQuantity
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
+
0 && (module.exports = {
|
|
86
|
+
actionBoxView,
|
|
87
|
+
dropPhase
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=view.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/view.ts"],"sourcesContent":["import { formatAmount, getTokenByAddress, type ResolvedFeeConfig } from \"@medialane/sdk\";\nimport { dropMintCost, type DropMintState, type DropOnchain } from \"@medialane/sdk/starknet\";\nimport { priceLabel } from \"./sale.js\";\n\nexport type DropPhase = \"upcoming\" | \"live\" | \"sold-out\" | \"ended\";\n\nexport function dropPhase(t: { startTime: number; endTime: number }, maxSupply: bigint, minted: bigint, now: number): DropPhase {\n if (maxSupply !== 0n && minted >= maxSupply) return \"sold-out\";\n if (t.startTime !== 0 && now < t.startTime) return \"upcoming\";\n if (t.endTime !== 0 && now > t.endTime) return \"ended\";\n return \"live\";\n}\n\nexport interface ActionBoxView {\n phase: DropPhase;\n statusText: string;\n countdown: { label: string; target: number } | null;\n priceText: string;\n totalText: string | null;\n eligibility: string | null;\n button: { label: string; action: \"mint\" | \"sign-in\" | \"none\" };\n maxQuantity: bigint;\n}\n\nconst when = (ts: number) => new Date(ts * 1000).toLocaleString(undefined, { weekday: \"short\", day: \"numeric\", month: \"short\", hour: \"2-digit\", minute: \"2-digit\" });\n\n/** Everything the mint box shows, decided from chain state before any transaction. */\nexport function actionBoxView(input: {\n drop: DropOnchain;\n mint: DropMintState;\n quantity: bigint;\n feeConfig: ResolvedFeeConfig;\n now: number;\n}): ActionBoxView {\n const { drop, mint, feeConfig, now } = input;\n const phase = dropPhase(drop, drop.maxSupply, drop.totalMinted, now);\n const token = getTokenByAddress(drop.paymentToken);\n const listed = BigInt(drop.allowlistRoot) !== 0n;\n const quantity = input.quantity < 1n ? 1n : input.quantity > mint.maxQuantity ? mint.maxQuantity : input.quantity;\n\n const statusText =\n phase === \"upcoming\" ? `Upcoming · starts ${when(drop.startTime)}`\n : phase === \"sold-out\" ? \"Sold out\"\n : phase === \"ended\" ? \"Ended\"\n : drop.endTime === 0 ? \"Live · no end date\" : \"Live\";\n const countdown =\n phase === \"upcoming\" ? { label: \"Starts in\", target: drop.startTime }\n : phase === \"live\" && drop.endTime !== 0 ? { label: \"Ends in\", target: drop.endTime }\n : null;\n\n let totalText: string | null = null;\n if (mint.state === \"ready\" && drop.price > 0n && token) {\n const { total } = dropMintCost(drop.price, quantity, feeConfig);\n totalText = `Total ${formatAmount(total.toString(), token.decimals)} ${token.symbol} (incl. platform fee)`;\n }\n\n const button: ActionBoxView[\"button\"] = (() => {\n switch (mint.state) {\n case \"ready\": return { label: `Mint ${quantity}`, action: \"mint\" };\n case \"no-wallet\": return { label: \"Sign in to mint\", action: \"sign-in\" };\n case \"upcoming\": return { label: `Starts ${when(drop.startTime)}`, action: \"none\" };\n case \"ended\": return { label: \"This drop has ended\", action: \"none\" };\n case \"sold-out\": return { label: \"Sold out\", action: \"none\" };\n case \"no-link\": return { label: \"Open your claim link to mint\", action: \"none\" };\n case \"not-on-list\": return { label: \"This wallet isn't on the list\", action: \"none\" };\n case \"limit-reached\": return { label: `You've minted your limit (${drop.maxPerWallet})`, action: \"none\" };\n case \"insufficient-balance\": return { label: `Not enough ${token?.symbol ?? \"balance\"}`, action: \"none\" };\n case \"loading\": return { label: \"Checking…\", action: \"none\" };\n }\n })();\n\n const eligibility =\n !listed ? \"Open to everyone\"\n : mint.state === \"ready\" ? \"You're on the list\"\n : mint.state === \"no-link\" ? \"This drop is for a list — open your claim link to mint\"\n : \"This drop is for a list\";\n\n return {\n phase,\n statusText,\n countdown,\n priceText: priceLabel(drop.price.toString(), drop.paymentToken),\n totalText,\n eligibility,\n button,\n maxQuantity: mint.maxQuantity,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAwE;AACxE,sBAAmE;AACnE,kBAA2B;AAIpB,SAAS,UAAU,GAA2C,WAAmB,QAAgB,KAAwB;AAC9H,MAAI,cAAc,MAAM,UAAU,UAAW,QAAO;AACpD,MAAI,EAAE,cAAc,KAAK,MAAM,EAAE,UAAW,QAAO;AACnD,MAAI,EAAE,YAAY,KAAK,MAAM,EAAE,QAAS,QAAO;AAC/C,SAAO;AACT;AAaA,MAAM,OAAO,CAAC,OAAe,IAAI,KAAK,KAAK,GAAI,EAAE,eAAe,QAAW,EAAE,SAAS,SAAS,KAAK,WAAW,OAAO,SAAS,MAAM,WAAW,QAAQ,UAAU,CAAC;AAG5J,SAAS,cAAc,OAMZ;AAChB,QAAM,EAAE,MAAM,MAAM,WAAW,IAAI,IAAI;AACvC,QAAM,QAAQ,UAAU,MAAM,KAAK,WAAW,KAAK,aAAa,GAAG;AACnE,QAAM,YAAQ,8BAAkB,KAAK,YAAY;AACjD,QAAM,SAAS,OAAO,KAAK,aAAa,MAAM;AAC9C,QAAM,WAAW,MAAM,WAAW,KAAK,KAAK,MAAM,WAAW,KAAK,cAAc,KAAK,cAAc,MAAM;AAEzG,QAAM,aACJ,UAAU,aAAa,wBAAqB,KAAK,KAAK,SAAS,CAAC,KAC9D,UAAU,aAAa,aACvB,UAAU,UAAU,UACpB,KAAK,YAAY,IAAI,0BAAuB;AAChD,QAAM,YACJ,UAAU,aAAa,EAAE,OAAO,aAAa,QAAQ,KAAK,UAAU,IAClE,UAAU,UAAU,KAAK,YAAY,IAAI,EAAE,OAAO,WAAW,QAAQ,KAAK,QAAQ,IAClF;AAEJ,MAAI,YAA2B;AAC/B,MAAI,KAAK,UAAU,WAAW,KAAK,QAAQ,MAAM,OAAO;AACtD,UAAM,EAAE,MAAM,QAAI,8BAAa,KAAK,OAAO,UAAU,SAAS;AAC9D,gBAAY,aAAS,yBAAa,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,MAAM,MAAM;AAAA,EACrF;AAEA,QAAM,UAAmC,MAAM;AAC7C,YAAQ,KAAK,OAAO;AAAA,MAClB,KAAK;AAAS,eAAO,EAAE,OAAO,QAAQ,QAAQ,IAAI,QAAQ,OAAO;AAAA,MACjE,KAAK;AAAa,eAAO,EAAE,OAAO,mBAAmB,QAAQ,UAAU;AAAA,MACvE,KAAK;AAAY,eAAO,EAAE,OAAO,UAAU,KAAK,KAAK,SAAS,CAAC,IAAI,QAAQ,OAAO;AAAA,MAClF,KAAK;AAAS,eAAO,EAAE,OAAO,uBAAuB,QAAQ,OAAO;AAAA,MACpE,KAAK;AAAY,eAAO,EAAE,OAAO,YAAY,QAAQ,OAAO;AAAA,MAC5D,KAAK;AAAW,eAAO,EAAE,OAAO,gCAAgC,QAAQ,OAAO;AAAA,MAC/E,KAAK;AAAe,eAAO,EAAE,OAAO,iCAAiC,QAAQ,OAAO;AAAA,MACpF,KAAK;AAAiB,eAAO,EAAE,OAAO,6BAA6B,KAAK,YAAY,KAAK,QAAQ,OAAO;AAAA,MACxG,KAAK;AAAwB,eAAO,EAAE,OAAO,cAAc,OAAO,UAAU,SAAS,IAAI,QAAQ,OAAO;AAAA,MACxG,KAAK;AAAW,eAAO,EAAE,OAAO,kBAAa,QAAQ,OAAO;AAAA,IAC9D;AAAA,EACF,GAAG;AAEH,QAAM,cACJ,CAAC,SAAS,qBACR,KAAK,UAAU,UAAU,uBACzB,KAAK,UAAU,YAAY,gEAC3B;AAEJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAW,wBAAW,KAAK,MAAM,SAAS,GAAG,KAAK,YAAY;AAAA,IAC9D;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,KAAK;AAAA,EACpB;AACF;","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ResolvedFeeConfig } from '@medialane/sdk';
|
|
2
|
+
import { DropOnchain, DropMintState } from '@medialane/sdk/starknet';
|
|
3
|
+
|
|
4
|
+
type DropPhase = "upcoming" | "live" | "sold-out" | "ended";
|
|
5
|
+
declare function dropPhase(t: {
|
|
6
|
+
startTime: number;
|
|
7
|
+
endTime: number;
|
|
8
|
+
}, maxSupply: bigint, minted: bigint, now: number): DropPhase;
|
|
9
|
+
interface ActionBoxView {
|
|
10
|
+
phase: DropPhase;
|
|
11
|
+
statusText: string;
|
|
12
|
+
countdown: {
|
|
13
|
+
label: string;
|
|
14
|
+
target: number;
|
|
15
|
+
} | null;
|
|
16
|
+
priceText: string;
|
|
17
|
+
totalText: string | null;
|
|
18
|
+
eligibility: string | null;
|
|
19
|
+
button: {
|
|
20
|
+
label: string;
|
|
21
|
+
action: "mint" | "sign-in" | "none";
|
|
22
|
+
};
|
|
23
|
+
maxQuantity: bigint;
|
|
24
|
+
}
|
|
25
|
+
/** Everything the mint box shows, decided from chain state before any transaction. */
|
|
26
|
+
declare function actionBoxView(input: {
|
|
27
|
+
drop: DropOnchain;
|
|
28
|
+
mint: DropMintState;
|
|
29
|
+
quantity: bigint;
|
|
30
|
+
feeConfig: ResolvedFeeConfig;
|
|
31
|
+
now: number;
|
|
32
|
+
}): ActionBoxView;
|
|
33
|
+
|
|
34
|
+
export { type ActionBoxView, type DropPhase, actionBoxView, dropPhase };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ResolvedFeeConfig } from '@medialane/sdk';
|
|
2
|
+
import { DropOnchain, DropMintState } from '@medialane/sdk/starknet';
|
|
3
|
+
|
|
4
|
+
type DropPhase = "upcoming" | "live" | "sold-out" | "ended";
|
|
5
|
+
declare function dropPhase(t: {
|
|
6
|
+
startTime: number;
|
|
7
|
+
endTime: number;
|
|
8
|
+
}, maxSupply: bigint, minted: bigint, now: number): DropPhase;
|
|
9
|
+
interface ActionBoxView {
|
|
10
|
+
phase: DropPhase;
|
|
11
|
+
statusText: string;
|
|
12
|
+
countdown: {
|
|
13
|
+
label: string;
|
|
14
|
+
target: number;
|
|
15
|
+
} | null;
|
|
16
|
+
priceText: string;
|
|
17
|
+
totalText: string | null;
|
|
18
|
+
eligibility: string | null;
|
|
19
|
+
button: {
|
|
20
|
+
label: string;
|
|
21
|
+
action: "mint" | "sign-in" | "none";
|
|
22
|
+
};
|
|
23
|
+
maxQuantity: bigint;
|
|
24
|
+
}
|
|
25
|
+
/** Everything the mint box shows, decided from chain state before any transaction. */
|
|
26
|
+
declare function actionBoxView(input: {
|
|
27
|
+
drop: DropOnchain;
|
|
28
|
+
mint: DropMintState;
|
|
29
|
+
quantity: bigint;
|
|
30
|
+
feeConfig: ResolvedFeeConfig;
|
|
31
|
+
now: number;
|
|
32
|
+
}): ActionBoxView;
|
|
33
|
+
|
|
34
|
+
export { type ActionBoxView, type DropPhase, actionBoxView, dropPhase };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { formatAmount, getTokenByAddress } from "@medialane/sdk";
|
|
2
|
+
import { dropMintCost } from "@medialane/sdk/starknet";
|
|
3
|
+
import { priceLabel } from "./sale.js";
|
|
4
|
+
function dropPhase(t, maxSupply, minted, now) {
|
|
5
|
+
if (maxSupply !== 0n && minted >= maxSupply) return "sold-out";
|
|
6
|
+
if (t.startTime !== 0 && now < t.startTime) return "upcoming";
|
|
7
|
+
if (t.endTime !== 0 && now > t.endTime) return "ended";
|
|
8
|
+
return "live";
|
|
9
|
+
}
|
|
10
|
+
const when = (ts) => new Date(ts * 1e3).toLocaleString(void 0, { weekday: "short", day: "numeric", month: "short", hour: "2-digit", minute: "2-digit" });
|
|
11
|
+
function actionBoxView(input) {
|
|
12
|
+
const { drop, mint, feeConfig, now } = input;
|
|
13
|
+
const phase = dropPhase(drop, drop.maxSupply, drop.totalMinted, now);
|
|
14
|
+
const token = getTokenByAddress(drop.paymentToken);
|
|
15
|
+
const listed = BigInt(drop.allowlistRoot) !== 0n;
|
|
16
|
+
const quantity = input.quantity < 1n ? 1n : input.quantity > mint.maxQuantity ? mint.maxQuantity : input.quantity;
|
|
17
|
+
const statusText = phase === "upcoming" ? `Upcoming \xB7 starts ${when(drop.startTime)}` : phase === "sold-out" ? "Sold out" : phase === "ended" ? "Ended" : drop.endTime === 0 ? "Live \xB7 no end date" : "Live";
|
|
18
|
+
const countdown = phase === "upcoming" ? { label: "Starts in", target: drop.startTime } : phase === "live" && drop.endTime !== 0 ? { label: "Ends in", target: drop.endTime } : null;
|
|
19
|
+
let totalText = null;
|
|
20
|
+
if (mint.state === "ready" && drop.price > 0n && token) {
|
|
21
|
+
const { total } = dropMintCost(drop.price, quantity, feeConfig);
|
|
22
|
+
totalText = `Total ${formatAmount(total.toString(), token.decimals)} ${token.symbol} (incl. platform fee)`;
|
|
23
|
+
}
|
|
24
|
+
const button = (() => {
|
|
25
|
+
switch (mint.state) {
|
|
26
|
+
case "ready":
|
|
27
|
+
return { label: `Mint ${quantity}`, action: "mint" };
|
|
28
|
+
case "no-wallet":
|
|
29
|
+
return { label: "Sign in to mint", action: "sign-in" };
|
|
30
|
+
case "upcoming":
|
|
31
|
+
return { label: `Starts ${when(drop.startTime)}`, action: "none" };
|
|
32
|
+
case "ended":
|
|
33
|
+
return { label: "This drop has ended", action: "none" };
|
|
34
|
+
case "sold-out":
|
|
35
|
+
return { label: "Sold out", action: "none" };
|
|
36
|
+
case "no-link":
|
|
37
|
+
return { label: "Open your claim link to mint", action: "none" };
|
|
38
|
+
case "not-on-list":
|
|
39
|
+
return { label: "This wallet isn't on the list", action: "none" };
|
|
40
|
+
case "limit-reached":
|
|
41
|
+
return { label: `You've minted your limit (${drop.maxPerWallet})`, action: "none" };
|
|
42
|
+
case "insufficient-balance":
|
|
43
|
+
return { label: `Not enough ${token?.symbol ?? "balance"}`, action: "none" };
|
|
44
|
+
case "loading":
|
|
45
|
+
return { label: "Checking\u2026", action: "none" };
|
|
46
|
+
}
|
|
47
|
+
})();
|
|
48
|
+
const eligibility = !listed ? "Open to everyone" : mint.state === "ready" ? "You're on the list" : mint.state === "no-link" ? "This drop is for a list \u2014 open your claim link to mint" : "This drop is for a list";
|
|
49
|
+
return {
|
|
50
|
+
phase,
|
|
51
|
+
statusText,
|
|
52
|
+
countdown,
|
|
53
|
+
priceText: priceLabel(drop.price.toString(), drop.paymentToken),
|
|
54
|
+
totalText,
|
|
55
|
+
eligibility,
|
|
56
|
+
button,
|
|
57
|
+
maxQuantity: mint.maxQuantity
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
actionBoxView,
|
|
62
|
+
dropPhase
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/view.ts"],"sourcesContent":["import { formatAmount, getTokenByAddress, type ResolvedFeeConfig } from \"@medialane/sdk\";\nimport { dropMintCost, type DropMintState, type DropOnchain } from \"@medialane/sdk/starknet\";\nimport { priceLabel } from \"./sale.js\";\n\nexport type DropPhase = \"upcoming\" | \"live\" | \"sold-out\" | \"ended\";\n\nexport function dropPhase(t: { startTime: number; endTime: number }, maxSupply: bigint, minted: bigint, now: number): DropPhase {\n if (maxSupply !== 0n && minted >= maxSupply) return \"sold-out\";\n if (t.startTime !== 0 && now < t.startTime) return \"upcoming\";\n if (t.endTime !== 0 && now > t.endTime) return \"ended\";\n return \"live\";\n}\n\nexport interface ActionBoxView {\n phase: DropPhase;\n statusText: string;\n countdown: { label: string; target: number } | null;\n priceText: string;\n totalText: string | null;\n eligibility: string | null;\n button: { label: string; action: \"mint\" | \"sign-in\" | \"none\" };\n maxQuantity: bigint;\n}\n\nconst when = (ts: number) => new Date(ts * 1000).toLocaleString(undefined, { weekday: \"short\", day: \"numeric\", month: \"short\", hour: \"2-digit\", minute: \"2-digit\" });\n\n/** Everything the mint box shows, decided from chain state before any transaction. */\nexport function actionBoxView(input: {\n drop: DropOnchain;\n mint: DropMintState;\n quantity: bigint;\n feeConfig: ResolvedFeeConfig;\n now: number;\n}): ActionBoxView {\n const { drop, mint, feeConfig, now } = input;\n const phase = dropPhase(drop, drop.maxSupply, drop.totalMinted, now);\n const token = getTokenByAddress(drop.paymentToken);\n const listed = BigInt(drop.allowlistRoot) !== 0n;\n const quantity = input.quantity < 1n ? 1n : input.quantity > mint.maxQuantity ? mint.maxQuantity : input.quantity;\n\n const statusText =\n phase === \"upcoming\" ? `Upcoming · starts ${when(drop.startTime)}`\n : phase === \"sold-out\" ? \"Sold out\"\n : phase === \"ended\" ? \"Ended\"\n : drop.endTime === 0 ? \"Live · no end date\" : \"Live\";\n const countdown =\n phase === \"upcoming\" ? { label: \"Starts in\", target: drop.startTime }\n : phase === \"live\" && drop.endTime !== 0 ? { label: \"Ends in\", target: drop.endTime }\n : null;\n\n let totalText: string | null = null;\n if (mint.state === \"ready\" && drop.price > 0n && token) {\n const { total } = dropMintCost(drop.price, quantity, feeConfig);\n totalText = `Total ${formatAmount(total.toString(), token.decimals)} ${token.symbol} (incl. platform fee)`;\n }\n\n const button: ActionBoxView[\"button\"] = (() => {\n switch (mint.state) {\n case \"ready\": return { label: `Mint ${quantity}`, action: \"mint\" };\n case \"no-wallet\": return { label: \"Sign in to mint\", action: \"sign-in\" };\n case \"upcoming\": return { label: `Starts ${when(drop.startTime)}`, action: \"none\" };\n case \"ended\": return { label: \"This drop has ended\", action: \"none\" };\n case \"sold-out\": return { label: \"Sold out\", action: \"none\" };\n case \"no-link\": return { label: \"Open your claim link to mint\", action: \"none\" };\n case \"not-on-list\": return { label: \"This wallet isn't on the list\", action: \"none\" };\n case \"limit-reached\": return { label: `You've minted your limit (${drop.maxPerWallet})`, action: \"none\" };\n case \"insufficient-balance\": return { label: `Not enough ${token?.symbol ?? \"balance\"}`, action: \"none\" };\n case \"loading\": return { label: \"Checking…\", action: \"none\" };\n }\n })();\n\n const eligibility =\n !listed ? \"Open to everyone\"\n : mint.state === \"ready\" ? \"You're on the list\"\n : mint.state === \"no-link\" ? \"This drop is for a list — open your claim link to mint\"\n : \"This drop is for a list\";\n\n return {\n phase,\n statusText,\n countdown,\n priceText: priceLabel(drop.price.toString(), drop.paymentToken),\n totalText,\n eligibility,\n button,\n maxQuantity: mint.maxQuantity,\n };\n}\n"],"mappings":"AAAA,SAAS,cAAc,yBAAiD;AACxE,SAAS,oBAA0D;AACnE,SAAS,kBAAkB;AAIpB,SAAS,UAAU,GAA2C,WAAmB,QAAgB,KAAwB;AAC9H,MAAI,cAAc,MAAM,UAAU,UAAW,QAAO;AACpD,MAAI,EAAE,cAAc,KAAK,MAAM,EAAE,UAAW,QAAO;AACnD,MAAI,EAAE,YAAY,KAAK,MAAM,EAAE,QAAS,QAAO;AAC/C,SAAO;AACT;AAaA,MAAM,OAAO,CAAC,OAAe,IAAI,KAAK,KAAK,GAAI,EAAE,eAAe,QAAW,EAAE,SAAS,SAAS,KAAK,WAAW,OAAO,SAAS,MAAM,WAAW,QAAQ,UAAU,CAAC;AAG5J,SAAS,cAAc,OAMZ;AAChB,QAAM,EAAE,MAAM,MAAM,WAAW,IAAI,IAAI;AACvC,QAAM,QAAQ,UAAU,MAAM,KAAK,WAAW,KAAK,aAAa,GAAG;AACnE,QAAM,QAAQ,kBAAkB,KAAK,YAAY;AACjD,QAAM,SAAS,OAAO,KAAK,aAAa,MAAM;AAC9C,QAAM,WAAW,MAAM,WAAW,KAAK,KAAK,MAAM,WAAW,KAAK,cAAc,KAAK,cAAc,MAAM;AAEzG,QAAM,aACJ,UAAU,aAAa,wBAAqB,KAAK,KAAK,SAAS,CAAC,KAC9D,UAAU,aAAa,aACvB,UAAU,UAAU,UACpB,KAAK,YAAY,IAAI,0BAAuB;AAChD,QAAM,YACJ,UAAU,aAAa,EAAE,OAAO,aAAa,QAAQ,KAAK,UAAU,IAClE,UAAU,UAAU,KAAK,YAAY,IAAI,EAAE,OAAO,WAAW,QAAQ,KAAK,QAAQ,IAClF;AAEJ,MAAI,YAA2B;AAC/B,MAAI,KAAK,UAAU,WAAW,KAAK,QAAQ,MAAM,OAAO;AACtD,UAAM,EAAE,MAAM,IAAI,aAAa,KAAK,OAAO,UAAU,SAAS;AAC9D,gBAAY,SAAS,aAAa,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,MAAM,MAAM;AAAA,EACrF;AAEA,QAAM,UAAmC,MAAM;AAC7C,YAAQ,KAAK,OAAO;AAAA,MAClB,KAAK;AAAS,eAAO,EAAE,OAAO,QAAQ,QAAQ,IAAI,QAAQ,OAAO;AAAA,MACjE,KAAK;AAAa,eAAO,EAAE,OAAO,mBAAmB,QAAQ,UAAU;AAAA,MACvE,KAAK;AAAY,eAAO,EAAE,OAAO,UAAU,KAAK,KAAK,SAAS,CAAC,IAAI,QAAQ,OAAO;AAAA,MAClF,KAAK;AAAS,eAAO,EAAE,OAAO,uBAAuB,QAAQ,OAAO;AAAA,MACpE,KAAK;AAAY,eAAO,EAAE,OAAO,YAAY,QAAQ,OAAO;AAAA,MAC5D,KAAK;AAAW,eAAO,EAAE,OAAO,gCAAgC,QAAQ,OAAO;AAAA,MAC/E,KAAK;AAAe,eAAO,EAAE,OAAO,iCAAiC,QAAQ,OAAO;AAAA,MACpF,KAAK;AAAiB,eAAO,EAAE,OAAO,6BAA6B,KAAK,YAAY,KAAK,QAAQ,OAAO;AAAA,MACxG,KAAK;AAAwB,eAAO,EAAE,OAAO,cAAc,OAAO,UAAU,SAAS,IAAI,QAAQ,OAAO;AAAA,MACxG,KAAK;AAAW,eAAO,EAAE,OAAO,kBAAa,QAAQ,OAAO;AAAA,IAC9D;AAAA,EACF,GAAG;AAEH,QAAM,cACJ,CAAC,SAAS,qBACR,KAAK,UAAU,UAAU,uBACzB,KAAK,UAAU,YAAY,gEAC3B;AAEJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,WAAW,KAAK,MAAM,SAAS,GAAG,KAAK,YAAY;AAAA,IAC9D;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,KAAK;AAAA,EACpB;AACF;","names":[]}
|
|
@@ -20,7 +20,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
var launchpad_defaults_exports = {};
|
|
21
21
|
__export(launchpad_defaults_exports, {
|
|
22
22
|
getDefaultClaimWindow: () => getDefaultClaimWindow,
|
|
23
|
-
getDefaultDropSchedule: () => getDefaultDropSchedule,
|
|
24
23
|
suggestLaunchpadSymbol: () => suggestLaunchpadSymbol
|
|
25
24
|
});
|
|
26
25
|
module.exports = __toCommonJS(launchpad_defaults_exports);
|
|
@@ -35,26 +34,6 @@ function formatTimeForInput(date) {
|
|
|
35
34
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
36
35
|
return `${hours}:${minutes}`;
|
|
37
36
|
}
|
|
38
|
-
function roundUpToQuarterHour(date) {
|
|
39
|
-
const rounded = new Date(date);
|
|
40
|
-
rounded.setSeconds(0, 0);
|
|
41
|
-
const minutes = rounded.getMinutes();
|
|
42
|
-
const delta = (15 - minutes % 15) % 15 || 15;
|
|
43
|
-
rounded.setMinutes(minutes + delta);
|
|
44
|
-
return rounded;
|
|
45
|
-
}
|
|
46
|
-
function getDefaultDropSchedule(now = /* @__PURE__ */ new Date()) {
|
|
47
|
-
const start = roundUpToQuarterHour(now);
|
|
48
|
-
const end = new Date(start);
|
|
49
|
-
end.setDate(end.getDate() + 7);
|
|
50
|
-
end.setHours(23, 59, 0, 0);
|
|
51
|
-
return {
|
|
52
|
-
startDate: formatDateForInput(start),
|
|
53
|
-
startTime: formatTimeForInput(start),
|
|
54
|
-
endDate: formatDateForInput(end),
|
|
55
|
-
endTime: formatTimeForInput(end)
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
37
|
function getDefaultClaimWindow(daysFromNow = 30, now = /* @__PURE__ */ new Date()) {
|
|
59
38
|
const end = new Date(now);
|
|
60
39
|
end.setDate(end.getDate() + daysFromNow);
|
|
@@ -79,7 +58,6 @@ function suggestLaunchpadSymbol(name, maxLength = 10) {
|
|
|
79
58
|
// Annotate the CommonJS export names for ESM import in node:
|
|
80
59
|
0 && (module.exports = {
|
|
81
60
|
getDefaultClaimWindow,
|
|
82
|
-
getDefaultDropSchedule,
|
|
83
61
|
suggestLaunchpadSymbol
|
|
84
62
|
});
|
|
85
63
|
//# sourceMappingURL=launchpad-defaults.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/launchpad-defaults.ts"],"sourcesContent":["\"use client\";\n\nfunction formatDateForInput(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nfunction formatTimeForInput(date: Date): string {\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${hours}:${minutes}`;\n}\n\
|
|
1
|
+
{"version":3,"sources":["../../src/utils/launchpad-defaults.ts"],"sourcesContent":["\"use client\";\n\nfunction formatDateForInput(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nfunction formatTimeForInput(date: Date): string {\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${hours}:${minutes}`;\n}\n\nexport function getDefaultClaimWindow(daysFromNow = 30, now = new Date()) {\n const end = new Date(now);\n end.setDate(end.getDate() + daysFromNow);\n end.setHours(23, 59, 0, 0);\n\n return {\n claimEndDate: formatDateForInput(end),\n claimEndTime: formatTimeForInput(end),\n };\n}\n\nexport function suggestLaunchpadSymbol(name: string, maxLength = 10): string {\n const cleaned = name.toUpperCase().replace(/[^A-Z0-9 ]+/g, \" \").trim();\n if (!cleaned) return \"\";\n\n const words = cleaned.split(/\\s+/).filter(Boolean);\n const initials = words\n .filter((word) => /[A-Z0-9]/.test(word))\n .map((word) => word[0])\n .join(\"\");\n const digits = words.join(\"\").replace(/[^0-9]/g, \"\");\n\n let candidate = `${initials}${digits}`.slice(0, maxLength);\n if (candidate.length < 3) {\n candidate = words.join(\"\").replace(/\\s+/g, \"\").slice(0, maxLength);\n }\n\n return candidate.slice(0, maxLength);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,SAAS,mBAAmB,MAAoB;AAC9C,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,QAAQ,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,QAAM,MAAM,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,SAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG;AAChC;AAEA,SAAS,mBAAmB,MAAoB;AAC9C,QAAM,QAAQ,OAAO,KAAK,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AACrD,QAAM,UAAU,OAAO,KAAK,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,SAAO,GAAG,KAAK,IAAI,OAAO;AAC5B;AAEO,SAAS,sBAAsB,cAAc,IAAI,MAAM,oBAAI,KAAK,GAAG;AACxE,QAAM,MAAM,IAAI,KAAK,GAAG;AACxB,MAAI,QAAQ,IAAI,QAAQ,IAAI,WAAW;AACvC,MAAI,SAAS,IAAI,IAAI,GAAG,CAAC;AAEzB,SAAO;AAAA,IACL,cAAc,mBAAmB,GAAG;AAAA,IACpC,cAAc,mBAAmB,GAAG;AAAA,EACtC;AACF;AAEO,SAAS,uBAAuB,MAAc,YAAY,IAAY;AAC3E,QAAM,UAAU,KAAK,YAAY,EAAE,QAAQ,gBAAgB,GAAG,EAAE,KAAK;AACrE,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,QAAQ,QAAQ,MAAM,KAAK,EAAE,OAAO,OAAO;AACjD,QAAM,WAAW,MACd,OAAO,CAAC,SAAS,WAAW,KAAK,IAAI,CAAC,EACtC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EACrB,KAAK,EAAE;AACV,QAAM,SAAS,MAAM,KAAK,EAAE,EAAE,QAAQ,WAAW,EAAE;AAEnD,MAAI,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;AACzD,MAAI,UAAU,SAAS,GAAG;AACxB,gBAAY,MAAM,KAAK,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,MAAM,GAAG,SAAS;AAAA,EACnE;AAEA,SAAO,UAAU,MAAM,GAAG,SAAS;AACrC;","names":[]}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
declare function getDefaultDropSchedule(now?: Date): {
|
|
2
|
-
startDate: string;
|
|
3
|
-
startTime: string;
|
|
4
|
-
endDate: string;
|
|
5
|
-
endTime: string;
|
|
6
|
-
};
|
|
7
1
|
declare function getDefaultClaimWindow(daysFromNow?: number, now?: Date): {
|
|
8
2
|
claimEndDate: string;
|
|
9
3
|
claimEndTime: string;
|
|
10
4
|
};
|
|
11
5
|
declare function suggestLaunchpadSymbol(name: string, maxLength?: number): string;
|
|
12
6
|
|
|
13
|
-
export { getDefaultClaimWindow,
|
|
7
|
+
export { getDefaultClaimWindow, suggestLaunchpadSymbol };
|
|
@@ -1,13 +1,7 @@
|
|
|
1
|
-
declare function getDefaultDropSchedule(now?: Date): {
|
|
2
|
-
startDate: string;
|
|
3
|
-
startTime: string;
|
|
4
|
-
endDate: string;
|
|
5
|
-
endTime: string;
|
|
6
|
-
};
|
|
7
1
|
declare function getDefaultClaimWindow(daysFromNow?: number, now?: Date): {
|
|
8
2
|
claimEndDate: string;
|
|
9
3
|
claimEndTime: string;
|
|
10
4
|
};
|
|
11
5
|
declare function suggestLaunchpadSymbol(name: string, maxLength?: number): string;
|
|
12
6
|
|
|
13
|
-
export { getDefaultClaimWindow,
|
|
7
|
+
export { getDefaultClaimWindow, suggestLaunchpadSymbol };
|
|
@@ -10,26 +10,6 @@ function formatTimeForInput(date) {
|
|
|
10
10
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
11
11
|
return `${hours}:${minutes}`;
|
|
12
12
|
}
|
|
13
|
-
function roundUpToQuarterHour(date) {
|
|
14
|
-
const rounded = new Date(date);
|
|
15
|
-
rounded.setSeconds(0, 0);
|
|
16
|
-
const minutes = rounded.getMinutes();
|
|
17
|
-
const delta = (15 - minutes % 15) % 15 || 15;
|
|
18
|
-
rounded.setMinutes(minutes + delta);
|
|
19
|
-
return rounded;
|
|
20
|
-
}
|
|
21
|
-
function getDefaultDropSchedule(now = /* @__PURE__ */ new Date()) {
|
|
22
|
-
const start = roundUpToQuarterHour(now);
|
|
23
|
-
const end = new Date(start);
|
|
24
|
-
end.setDate(end.getDate() + 7);
|
|
25
|
-
end.setHours(23, 59, 0, 0);
|
|
26
|
-
return {
|
|
27
|
-
startDate: formatDateForInput(start),
|
|
28
|
-
startTime: formatTimeForInput(start),
|
|
29
|
-
endDate: formatDateForInput(end),
|
|
30
|
-
endTime: formatTimeForInput(end)
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
13
|
function getDefaultClaimWindow(daysFromNow = 30, now = /* @__PURE__ */ new Date()) {
|
|
34
14
|
const end = new Date(now);
|
|
35
15
|
end.setDate(end.getDate() + daysFromNow);
|
|
@@ -53,7 +33,6 @@ function suggestLaunchpadSymbol(name, maxLength = 10) {
|
|
|
53
33
|
}
|
|
54
34
|
export {
|
|
55
35
|
getDefaultClaimWindow,
|
|
56
|
-
getDefaultDropSchedule,
|
|
57
36
|
suggestLaunchpadSymbol
|
|
58
37
|
};
|
|
59
38
|
//# sourceMappingURL=launchpad-defaults.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/launchpad-defaults.ts"],"sourcesContent":["\"use client\";\n\nfunction formatDateForInput(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nfunction formatTimeForInput(date: Date): string {\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${hours}:${minutes}`;\n}\n\
|
|
1
|
+
{"version":3,"sources":["../../src/utils/launchpad-defaults.ts"],"sourcesContent":["\"use client\";\n\nfunction formatDateForInput(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nfunction formatTimeForInput(date: Date): string {\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${hours}:${minutes}`;\n}\n\nexport function getDefaultClaimWindow(daysFromNow = 30, now = new Date()) {\n const end = new Date(now);\n end.setDate(end.getDate() + daysFromNow);\n end.setHours(23, 59, 0, 0);\n\n return {\n claimEndDate: formatDateForInput(end),\n claimEndTime: formatTimeForInput(end),\n };\n}\n\nexport function suggestLaunchpadSymbol(name: string, maxLength = 10): string {\n const cleaned = name.toUpperCase().replace(/[^A-Z0-9 ]+/g, \" \").trim();\n if (!cleaned) return \"\";\n\n const words = cleaned.split(/\\s+/).filter(Boolean);\n const initials = words\n .filter((word) => /[A-Z0-9]/.test(word))\n .map((word) => word[0])\n .join(\"\");\n const digits = words.join(\"\").replace(/[^0-9]/g, \"\");\n\n let candidate = `${initials}${digits}`.slice(0, maxLength);\n if (candidate.length < 3) {\n candidate = words.join(\"\").replace(/\\s+/g, \"\").slice(0, maxLength);\n }\n\n return candidate.slice(0, maxLength);\n}\n"],"mappings":";AAEA,SAAS,mBAAmB,MAAoB;AAC9C,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,QAAQ,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,QAAM,MAAM,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,SAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG;AAChC;AAEA,SAAS,mBAAmB,MAAoB;AAC9C,QAAM,QAAQ,OAAO,KAAK,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AACrD,QAAM,UAAU,OAAO,KAAK,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,SAAO,GAAG,KAAK,IAAI,OAAO;AAC5B;AAEO,SAAS,sBAAsB,cAAc,IAAI,MAAM,oBAAI,KAAK,GAAG;AACxE,QAAM,MAAM,IAAI,KAAK,GAAG;AACxB,MAAI,QAAQ,IAAI,QAAQ,IAAI,WAAW;AACvC,MAAI,SAAS,IAAI,IAAI,GAAG,CAAC;AAEzB,SAAO;AAAA,IACL,cAAc,mBAAmB,GAAG;AAAA,IACpC,cAAc,mBAAmB,GAAG;AAAA,EACtC;AACF;AAEO,SAAS,uBAAuB,MAAc,YAAY,IAAY;AAC3E,QAAM,UAAU,KAAK,YAAY,EAAE,QAAQ,gBAAgB,GAAG,EAAE,KAAK;AACrE,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,QAAQ,QAAQ,MAAM,KAAK,EAAE,OAAO,OAAO;AACjD,QAAM,WAAW,MACd,OAAO,CAAC,SAAS,WAAW,KAAK,IAAI,CAAC,EACtC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EACrB,KAAK,EAAE;AACV,QAAM,SAAS,MAAM,KAAK,EAAE,EAAE,QAAQ,WAAW,EAAE;AAEnD,MAAI,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;AACzD,MAAI,UAAU,SAAS,GAAG;AACxB,gBAAY,MAAM,KAAK,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,MAAM,GAAG,SAAS;AAAA,EACnE;AAEA,SAAO,UAAU,MAAM,GAAG,SAAS;AACrC;","names":[]}
|