@medialane/ui 0.182.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/fast-mint/types.cjs.map +1 -1
- package/dist/components/fast-mint/types.d.cts +3 -1
- package/dist/components/fast-mint/types.d.ts +3 -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/dist/utils/wallet-failure.cjs +2 -2
- package/dist/utils/wallet-failure.cjs.map +1 -1
- package/dist/utils/wallet-failure.js +2 -2
- package/dist/utils/wallet-failure.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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/drop-preview-card.tsx"],"sourcesContent":["\"use client\";\n\nimport { Calendar, Lock, ShieldCheck, Users } from \"lucide-react\";\nimport { MedialaneCollectionCard } from \"./medialane-collection-card.js\";\nimport { DropStatusBadge, DropSupplyProgress, DropPriceDisplay } from \"./drop-status-display.js\";\nimport { getDropStatus, type DropConditions } from \"../utils/drop-status.js\";\n\nexport interface DropPreviewCardProps {\n coverImage: string | null;\n name: string;\n symbol: string;\n creatorAddress?: string;\n creatorHref?: string;\n itemCount: number;\n conditions: DropConditions | null;\n whitelistEnabled: boolean;\n gatedContentEnabled: boolean;\n}\n\nfunction formatTs(ts: number): string {\n return new Date(ts * 1000).toLocaleString(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n}\n\nexport function DropPreviewCard({\n coverImage, name, symbol, creatorAddress, creatorHref,\n itemCount, conditions, whitelistEnabled, gatedContentEnabled,\n}: DropPreviewCardProps) {\n const status = getDropStatus(conditions, 0);\n const maxPerWallet = conditions ? parseInt(conditions.maxPerWallet, 10) : 0;\n\n return (\n <div className=\"space-y-3\">\n <div className=\"relative\">\n <MedialaneCollectionCard\n image={coverImage}\n name={name}\n collection={symbol || \"Drop\"}\n creator={creatorAddress}\n creatorHref={creatorHref}\n />\n <span className=\"absolute top-4 right-4 text-[9px] font-bold uppercase tracking-widest text-white bg-black/50 backdrop-blur-sm rounded-full px-2 py-0.5\">\n Drop\n </span>\n </div>\n\n <div className=\"bento-cell p-4 space-y-3\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n <DropStatusBadge status={status} />\n {whitelistEnabled && (\n <span className=\"inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-widest text-brand-orange bg-brand-orange/10 rounded-full px-2 py-0.5\">\n <Users className=\"h-3 w-3\" />\n Whitelist\n </span>\n )}\n {gatedContentEnabled && (\n <span className=\"inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-widest text-primary bg-primary/10 rounded-full px-2 py-0.5\">\n <Lock className=\"h-3 w-3\" />\n Exclusive content\n </span>\n )}\n </div>\n\n <DropSupplyProgress minted={0} max={itemCount} />\n\n {conditions && (\n <div className=\"flex items-center justify-between text-sm\">\n <div className=\"flex items-center gap-2\">\n <ShieldCheck className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <DropPriceDisplay conditions={conditions} />\n </div>\n {maxPerWallet > 0 && (\n <span className=\"text-xs text-muted-foreground\">Max {maxPerWallet}/wallet</span>\n )}\n </div>\n )}\n\n {conditions && conditions.startTime > 0 && conditions.endTime > 0 && (\n <div className=\"space-y-1 text-xs text-muted-foreground border-t border-border/60 pt-3\">\n <div className=\"flex items-center gap-1.5\">\n <Calendar className=\"h-3 w-3 shrink-0\" />\n Opens: {formatTs(conditions.startTime)}\n </div>\n <div className=\"flex items-center gap-1.5\">\n <Calendar className=\"h-3 w-3 shrink-0\" />\n Closes: {formatTs(conditions.endTime)}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";AAmCM,SACE,KADF;AAjCN,SAAS,UAAU,MAAM,aAAa,aAAa;AACnD,SAAS,+BAA+B;AACxC,SAAS,iBAAiB,oBAAoB,wBAAwB;AACtE,SAAS,qBAA0C;AAcnD,SAAS,SAAS,IAAoB;AACpC,SAAO,IAAI,KAAK,KAAK,GAAI,EAAE,eAAe,QAAW;AAAA,IACnD,WAAW;AAAA,IACX,WAAW;AAAA,EACb,CAAC;AACH;AAEO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EAAY;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAgB;AAAA,EAC1C;AAAA,EAAW;AAAA,EAAY;AAAA,EAAkB;AAC3C,GAAyB;AACvB,QAAM,SAAS,cAAc,YAAY,CAAC;AAC1C,QAAM,eAAe,aAAa,SAAS,WAAW,cAAc,EAAE,IAAI;AAE1E,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,yBAAC,SAAI,WAAU,YACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP;AAAA,UACA,YAAY,UAAU;AAAA,UACtB,SAAS;AAAA,UACT;AAAA;AAAA,MACF;AAAA,MACA,oBAAC,UAAK,WAAU,0IAAyI,kBAEzJ;AAAA,OACF;AAAA,IAEA,qBAAC,SAAI,WAAU,4BACb;AAAA,2BAAC,SAAI,WAAU,qCACb;AAAA,4BAAC,mBAAgB,QAAgB;AAAA,QAChC,oBACC,qBAAC,UAAK,WAAU,gJACd;AAAA,8BAAC,SAAM,WAAU,WAAU;AAAA,UAAE;AAAA,WAE/B;AAAA,QAED,uBACC,qBAAC,UAAK,WAAU,sIACd;AAAA,8BAAC,QAAK,WAAU,WAAU;AAAA,UAAE;AAAA,WAE9B;AAAA,SAEJ;AAAA,MAEA,oBAAC,sBAAmB,QAAQ,GAAG,KAAK,WAAW;AAAA,MAE9C,cACC,qBAAC,SAAI,WAAU,6CACb;AAAA,6BAAC,SAAI,WAAU,2BACb;AAAA,8BAAC,eAAY,WAAU,qCAAoC;AAAA,UAC3D,oBAAC,oBAAiB,YAAwB;AAAA,WAC5C;AAAA,QACC,eAAe,KACd,qBAAC,UAAK,WAAU,iCAAgC;AAAA;AAAA,UAAK;AAAA,UAAa;AAAA,WAAO;AAAA,SAE7E;AAAA,MAGD,cAAc,WAAW,YAAY,KAAK,WAAW,UAAU,KAC9D,qBAAC,SAAI,WAAU,0EACb;AAAA,6BAAC,SAAI,WAAU,6BACb;AAAA,8BAAC,YAAS,WAAU,oBAAmB;AAAA,UAAE;AAAA,UACjC,SAAS,WAAW,SAAS;AAAA,WACvC;AAAA,QACA,qBAAC,SAAI,WAAU,6BACb;AAAA,8BAAC,YAAS,WAAU,oBAAmB;AAAA,UAAE;AAAA,UAChC,SAAS,WAAW,OAAO;AAAA,WACtC;AAAA,SACF;AAAA,OAEJ;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
3
|
-
var import_bun_test = require("bun:test");
|
|
4
|
-
var import_server = require("react-dom/server");
|
|
5
|
-
var import_drop_preview_card = require("./drop-preview-card.js");
|
|
6
|
-
(0, import_bun_test.test)("shows placeholder name and zero supply before anything is filled in", () => {
|
|
7
|
-
const html = (0, import_server.renderToStaticMarkup)(
|
|
8
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
9
|
-
import_drop_preview_card.DropPreviewCard,
|
|
10
|
-
{
|
|
11
|
-
coverImage: null,
|
|
12
|
-
name: "",
|
|
13
|
-
symbol: "",
|
|
14
|
-
itemCount: 0,
|
|
15
|
-
conditions: null,
|
|
16
|
-
whitelistEnabled: false,
|
|
17
|
-
gatedContentEnabled: false
|
|
18
|
-
}
|
|
19
|
-
)
|
|
20
|
-
);
|
|
21
|
-
(0, import_bun_test.expect)(html).toContain("Untitled");
|
|
22
|
-
});
|
|
23
|
-
(0, import_bun_test.test)("shows the whitelist badge once enabled", () => {
|
|
24
|
-
const html = (0, import_server.renderToStaticMarkup)(
|
|
25
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
26
|
-
import_drop_preview_card.DropPreviewCard,
|
|
27
|
-
{
|
|
28
|
-
coverImage: null,
|
|
29
|
-
name: "Genesis",
|
|
30
|
-
symbol: "GEN",
|
|
31
|
-
itemCount: 5,
|
|
32
|
-
conditions: null,
|
|
33
|
-
whitelistEnabled: true,
|
|
34
|
-
gatedContentEnabled: false
|
|
35
|
-
}
|
|
36
|
-
)
|
|
37
|
-
);
|
|
38
|
-
(0, import_bun_test.expect)(html).toContain("Whitelist");
|
|
39
|
-
});
|
|
40
|
-
(0, import_bun_test.test)("shows the exclusive content badge once enabled", () => {
|
|
41
|
-
const html = (0, import_server.renderToStaticMarkup)(
|
|
42
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
43
|
-
import_drop_preview_card.DropPreviewCard,
|
|
44
|
-
{
|
|
45
|
-
coverImage: null,
|
|
46
|
-
name: "Genesis",
|
|
47
|
-
symbol: "GEN",
|
|
48
|
-
itemCount: 5,
|
|
49
|
-
conditions: null,
|
|
50
|
-
whitelistEnabled: false,
|
|
51
|
-
gatedContentEnabled: true
|
|
52
|
-
}
|
|
53
|
-
)
|
|
54
|
-
);
|
|
55
|
-
(0, import_bun_test.expect)(html).toContain("Exclusive content");
|
|
56
|
-
});
|
|
57
|
-
(0, import_bun_test.test)("shows mint window open/close dates and max-per-wallet instead of a countdown", () => {
|
|
58
|
-
const html = (0, import_server.renderToStaticMarkup)(
|
|
59
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
60
|
-
import_drop_preview_card.DropPreviewCard,
|
|
61
|
-
{
|
|
62
|
-
coverImage: null,
|
|
63
|
-
name: "Genesis",
|
|
64
|
-
symbol: "GEN",
|
|
65
|
-
itemCount: 5,
|
|
66
|
-
conditions: {
|
|
67
|
-
maxSupply: "5",
|
|
68
|
-
price: "0",
|
|
69
|
-
paymentToken: "0x0",
|
|
70
|
-
startTime: 1893456e3,
|
|
71
|
-
endTime: 1893542400,
|
|
72
|
-
maxPerWallet: "2"
|
|
73
|
-
},
|
|
74
|
-
whitelistEnabled: false,
|
|
75
|
-
gatedContentEnabled: false
|
|
76
|
-
}
|
|
77
|
-
)
|
|
78
|
-
);
|
|
79
|
-
(0, import_bun_test.expect)(html).toContain("Opens:");
|
|
80
|
-
(0, import_bun_test.expect)(html).toContain("Closes:");
|
|
81
|
-
(0, import_bun_test.expect)(html).toContain("Max 2/wallet");
|
|
82
|
-
(0, import_bun_test.expect)(html).not.toContain("HRS");
|
|
83
|
-
});
|
|
84
|
-
//# sourceMappingURL=drop-preview-card.test.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/drop-preview-card.test.tsx"],"sourcesContent":["import { test, expect } from \"bun:test\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { DropPreviewCard } from \"./drop-preview-card.js\";\n\ntest(\"shows placeholder name and zero supply before anything is filled in\", () => {\n const html = renderToStaticMarkup(\n <DropPreviewCard\n coverImage={null} name=\"\" symbol=\"\" itemCount={0}\n conditions={null} whitelistEnabled={false} gatedContentEnabled={false}\n />\n );\n expect(html).toContain(\"Untitled\");\n});\n\ntest(\"shows the whitelist badge once enabled\", () => {\n const html = renderToStaticMarkup(\n <DropPreviewCard\n coverImage={null} name=\"Genesis\" symbol=\"GEN\" itemCount={5}\n conditions={null} whitelistEnabled gatedContentEnabled={false}\n />\n );\n expect(html).toContain(\"Whitelist\");\n});\n\ntest(\"shows the exclusive content badge once enabled\", () => {\n const html = renderToStaticMarkup(\n <DropPreviewCard\n coverImage={null} name=\"Genesis\" symbol=\"GEN\" itemCount={5}\n conditions={null} whitelistEnabled={false} gatedContentEnabled\n />\n );\n expect(html).toContain(\"Exclusive content\");\n});\n\ntest(\"shows mint window open/close dates and max-per-wallet instead of a countdown\", () => {\n const html = renderToStaticMarkup(\n <DropPreviewCard\n coverImage={null} name=\"Genesis\" symbol=\"GEN\" itemCount={5}\n conditions={{\n maxSupply: \"5\", price: \"0\", paymentToken: \"0x0\",\n startTime: 1893456000, endTime: 1893542400, maxPerWallet: \"2\",\n }}\n whitelistEnabled={false} gatedContentEnabled={false}\n />\n );\n expect(html).toContain(\"Opens:\");\n expect(html).toContain(\"Closes:\");\n expect(html).toContain(\"Max 2/wallet\");\n expect(html).not.toContain(\"HRS\");\n});\n"],"mappings":";AAMI;AANJ,sBAA6B;AAC7B,oBAAqC;AACrC,+BAAgC;AAAA,IAEhC,sBAAK,uEAAuE,MAAM;AAChF,QAAM,WAAO;AAAA,IACX;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QAAM,MAAK;AAAA,QAAG,QAAO;AAAA,QAAG,WAAW;AAAA,QAC/C,YAAY;AAAA,QAAM,kBAAkB;AAAA,QAAO,qBAAqB;AAAA;AAAA,IAClE;AAAA,EACF;AACA,8BAAO,IAAI,EAAE,UAAU,UAAU;AACnC,CAAC;AAAA,IAED,sBAAK,0CAA0C,MAAM;AACnD,QAAM,WAAO;AAAA,IACX;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QAAM,MAAK;AAAA,QAAU,QAAO;AAAA,QAAM,WAAW;AAAA,QACzD,YAAY;AAAA,QAAM,kBAAgB;AAAA,QAAC,qBAAqB;AAAA;AAAA,IAC1D;AAAA,EACF;AACA,8BAAO,IAAI,EAAE,UAAU,WAAW;AACpC,CAAC;AAAA,IAED,sBAAK,kDAAkD,MAAM;AAC3D,QAAM,WAAO;AAAA,IACX;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QAAM,MAAK;AAAA,QAAU,QAAO;AAAA,QAAM,WAAW;AAAA,QACzD,YAAY;AAAA,QAAM,kBAAkB;AAAA,QAAO,qBAAmB;AAAA;AAAA,IAChE;AAAA,EACF;AACA,8BAAO,IAAI,EAAE,UAAU,mBAAmB;AAC5C,CAAC;AAAA,IAED,sBAAK,gFAAgF,MAAM;AACzF,QAAM,WAAO;AAAA,IACX;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QAAM,MAAK;AAAA,QAAU,QAAO;AAAA,QAAM,WAAW;AAAA,QACzD,YAAY;AAAA,UACV,WAAW;AAAA,UAAK,OAAO;AAAA,UAAK,cAAc;AAAA,UAC1C,WAAW;AAAA,UAAY,SAAS;AAAA,UAAY,cAAc;AAAA,QAC5D;AAAA,QACA,kBAAkB;AAAA,QAAO,qBAAqB;AAAA;AAAA,IAChD;AAAA,EACF;AACA,8BAAO,IAAI,EAAE,UAAU,QAAQ;AAC/B,8BAAO,IAAI,EAAE,UAAU,SAAS;AAChC,8BAAO,IAAI,EAAE,UAAU,cAAc;AACrC,8BAAO,IAAI,EAAE,IAAI,UAAU,KAAK;AAClC,CAAC;","names":[]}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { test, expect } from "bun:test";
|
|
3
|
-
import { renderToStaticMarkup } from "react-dom/server";
|
|
4
|
-
import { DropPreviewCard } from "./drop-preview-card.js";
|
|
5
|
-
test("shows placeholder name and zero supply before anything is filled in", () => {
|
|
6
|
-
const html = renderToStaticMarkup(
|
|
7
|
-
/* @__PURE__ */ jsx(
|
|
8
|
-
DropPreviewCard,
|
|
9
|
-
{
|
|
10
|
-
coverImage: null,
|
|
11
|
-
name: "",
|
|
12
|
-
symbol: "",
|
|
13
|
-
itemCount: 0,
|
|
14
|
-
conditions: null,
|
|
15
|
-
whitelistEnabled: false,
|
|
16
|
-
gatedContentEnabled: false
|
|
17
|
-
}
|
|
18
|
-
)
|
|
19
|
-
);
|
|
20
|
-
expect(html).toContain("Untitled");
|
|
21
|
-
});
|
|
22
|
-
test("shows the whitelist badge once enabled", () => {
|
|
23
|
-
const html = renderToStaticMarkup(
|
|
24
|
-
/* @__PURE__ */ jsx(
|
|
25
|
-
DropPreviewCard,
|
|
26
|
-
{
|
|
27
|
-
coverImage: null,
|
|
28
|
-
name: "Genesis",
|
|
29
|
-
symbol: "GEN",
|
|
30
|
-
itemCount: 5,
|
|
31
|
-
conditions: null,
|
|
32
|
-
whitelistEnabled: true,
|
|
33
|
-
gatedContentEnabled: false
|
|
34
|
-
}
|
|
35
|
-
)
|
|
36
|
-
);
|
|
37
|
-
expect(html).toContain("Whitelist");
|
|
38
|
-
});
|
|
39
|
-
test("shows the exclusive content badge once enabled", () => {
|
|
40
|
-
const html = renderToStaticMarkup(
|
|
41
|
-
/* @__PURE__ */ jsx(
|
|
42
|
-
DropPreviewCard,
|
|
43
|
-
{
|
|
44
|
-
coverImage: null,
|
|
45
|
-
name: "Genesis",
|
|
46
|
-
symbol: "GEN",
|
|
47
|
-
itemCount: 5,
|
|
48
|
-
conditions: null,
|
|
49
|
-
whitelistEnabled: false,
|
|
50
|
-
gatedContentEnabled: true
|
|
51
|
-
}
|
|
52
|
-
)
|
|
53
|
-
);
|
|
54
|
-
expect(html).toContain("Exclusive content");
|
|
55
|
-
});
|
|
56
|
-
test("shows mint window open/close dates and max-per-wallet instead of a countdown", () => {
|
|
57
|
-
const html = renderToStaticMarkup(
|
|
58
|
-
/* @__PURE__ */ jsx(
|
|
59
|
-
DropPreviewCard,
|
|
60
|
-
{
|
|
61
|
-
coverImage: null,
|
|
62
|
-
name: "Genesis",
|
|
63
|
-
symbol: "GEN",
|
|
64
|
-
itemCount: 5,
|
|
65
|
-
conditions: {
|
|
66
|
-
maxSupply: "5",
|
|
67
|
-
price: "0",
|
|
68
|
-
paymentToken: "0x0",
|
|
69
|
-
startTime: 1893456e3,
|
|
70
|
-
endTime: 1893542400,
|
|
71
|
-
maxPerWallet: "2"
|
|
72
|
-
},
|
|
73
|
-
whitelistEnabled: false,
|
|
74
|
-
gatedContentEnabled: false
|
|
75
|
-
}
|
|
76
|
-
)
|
|
77
|
-
);
|
|
78
|
-
expect(html).toContain("Opens:");
|
|
79
|
-
expect(html).toContain("Closes:");
|
|
80
|
-
expect(html).toContain("Max 2/wallet");
|
|
81
|
-
expect(html).not.toContain("HRS");
|
|
82
|
-
});
|
|
83
|
-
//# sourceMappingURL=drop-preview-card.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/drop-preview-card.test.tsx"],"sourcesContent":["import { test, expect } from \"bun:test\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { DropPreviewCard } from \"./drop-preview-card.js\";\n\ntest(\"shows placeholder name and zero supply before anything is filled in\", () => {\n const html = renderToStaticMarkup(\n <DropPreviewCard\n coverImage={null} name=\"\" symbol=\"\" itemCount={0}\n conditions={null} whitelistEnabled={false} gatedContentEnabled={false}\n />\n );\n expect(html).toContain(\"Untitled\");\n});\n\ntest(\"shows the whitelist badge once enabled\", () => {\n const html = renderToStaticMarkup(\n <DropPreviewCard\n coverImage={null} name=\"Genesis\" symbol=\"GEN\" itemCount={5}\n conditions={null} whitelistEnabled gatedContentEnabled={false}\n />\n );\n expect(html).toContain(\"Whitelist\");\n});\n\ntest(\"shows the exclusive content badge once enabled\", () => {\n const html = renderToStaticMarkup(\n <DropPreviewCard\n coverImage={null} name=\"Genesis\" symbol=\"GEN\" itemCount={5}\n conditions={null} whitelistEnabled={false} gatedContentEnabled\n />\n );\n expect(html).toContain(\"Exclusive content\");\n});\n\ntest(\"shows mint window open/close dates and max-per-wallet instead of a countdown\", () => {\n const html = renderToStaticMarkup(\n <DropPreviewCard\n coverImage={null} name=\"Genesis\" symbol=\"GEN\" itemCount={5}\n conditions={{\n maxSupply: \"5\", price: \"0\", paymentToken: \"0x0\",\n startTime: 1893456000, endTime: 1893542400, maxPerWallet: \"2\",\n }}\n whitelistEnabled={false} gatedContentEnabled={false}\n />\n );\n expect(html).toContain(\"Opens:\");\n expect(html).toContain(\"Closes:\");\n expect(html).toContain(\"Max 2/wallet\");\n expect(html).not.toContain(\"HRS\");\n});\n"],"mappings":"AAMI;AANJ,SAAS,MAAM,cAAc;AAC7B,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAEhC,KAAK,uEAAuE,MAAM;AAChF,QAAM,OAAO;AAAA,IACX;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QAAM,MAAK;AAAA,QAAG,QAAO;AAAA,QAAG,WAAW;AAAA,QAC/C,YAAY;AAAA,QAAM,kBAAkB;AAAA,QAAO,qBAAqB;AAAA;AAAA,IAClE;AAAA,EACF;AACA,SAAO,IAAI,EAAE,UAAU,UAAU;AACnC,CAAC;AAED,KAAK,0CAA0C,MAAM;AACnD,QAAM,OAAO;AAAA,IACX;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QAAM,MAAK;AAAA,QAAU,QAAO;AAAA,QAAM,WAAW;AAAA,QACzD,YAAY;AAAA,QAAM,kBAAgB;AAAA,QAAC,qBAAqB;AAAA;AAAA,IAC1D;AAAA,EACF;AACA,SAAO,IAAI,EAAE,UAAU,WAAW;AACpC,CAAC;AAED,KAAK,kDAAkD,MAAM;AAC3D,QAAM,OAAO;AAAA,IACX;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QAAM,MAAK;AAAA,QAAU,QAAO;AAAA,QAAM,WAAW;AAAA,QACzD,YAAY;AAAA,QAAM,kBAAkB;AAAA,QAAO,qBAAmB;AAAA;AAAA,IAChE;AAAA,EACF;AACA,SAAO,IAAI,EAAE,UAAU,mBAAmB;AAC5C,CAAC;AAED,KAAK,gFAAgF,MAAM;AACzF,QAAM,OAAO;AAAA,IACX;AAAA,MAAC;AAAA;AAAA,QACC,YAAY;AAAA,QAAM,MAAK;AAAA,QAAU,QAAO;AAAA,QAAM,WAAW;AAAA,QACzD,YAAY;AAAA,UACV,WAAW;AAAA,UAAK,OAAO;AAAA,UAAK,cAAc;AAAA,UAC1C,WAAW;AAAA,UAAY,SAAS;AAAA,UAAY,cAAc;AAAA,QAC5D;AAAA,QACA,kBAAkB;AAAA,QAAO,qBAAqB;AAAA;AAAA,IAChD;AAAA,EACF;AACA,SAAO,IAAI,EAAE,UAAU,QAAQ;AAC/B,SAAO,IAAI,EAAE,UAAU,SAAS;AAChC,SAAO,IAAI,EAAE,UAAU,cAAc;AACrC,SAAO,IAAI,EAAE,IAAI,UAAU,KAAK;AAClC,CAAC;","names":[]}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
3
|
-
var import_bun_test = require("bun:test");
|
|
4
|
-
var import_server = require("react-dom/server");
|
|
5
|
-
var import_drop_status_display = require("./drop-status-display.js");
|
|
6
|
-
(0, import_bun_test.test)("DropStatusBadge renders the live label with a pulse dot", () => {
|
|
7
|
-
const html = (0, import_server.renderToStaticMarkup)(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_drop_status_display.DropStatusBadge, { status: "live" }));
|
|
8
|
-
(0, import_bun_test.expect)(html).toContain("Live");
|
|
9
|
-
(0, import_bun_test.expect)(html).toContain("animate-pulse");
|
|
10
|
-
});
|
|
11
|
-
(0, import_bun_test.test)("DropSupplyProgress shows minted-of-max and a percentage", () => {
|
|
12
|
-
const html = (0, import_server.renderToStaticMarkup)(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_drop_status_display.DropSupplyProgress, { minted: 3, max: 10 }));
|
|
13
|
-
(0, import_bun_test.expect)(html).toContain("3");
|
|
14
|
-
(0, import_bun_test.expect)(html).toContain("of 10");
|
|
15
|
-
(0, import_bun_test.expect)(html).toContain("30.0%");
|
|
16
|
-
});
|
|
17
|
-
(0, import_bun_test.test)("DropPriceDisplay shows Free mint for a zero-price drop", () => {
|
|
18
|
-
const conditions = {
|
|
19
|
-
maxSupply: "10",
|
|
20
|
-
price: "0",
|
|
21
|
-
paymentToken: "0x0",
|
|
22
|
-
startTime: 0,
|
|
23
|
-
endTime: 0,
|
|
24
|
-
maxPerWallet: "1"
|
|
25
|
-
};
|
|
26
|
-
const html = (0, import_server.renderToStaticMarkup)(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_drop_status_display.DropPriceDisplay, { conditions }));
|
|
27
|
-
(0, import_bun_test.expect)(html).toContain("Free mint");
|
|
28
|
-
});
|
|
29
|
-
//# sourceMappingURL=drop-status-display.test.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/drop-status-display.test.tsx"],"sourcesContent":["import { test, expect } from \"bun:test\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { DropStatusBadge, DropSupplyProgress, DropPriceDisplay } from \"./drop-status-display.js\";\nimport type { DropConditions } from \"../utils/drop-status.js\";\n\ntest(\"DropStatusBadge renders the live label with a pulse dot\", () => {\n const html = renderToStaticMarkup(<DropStatusBadge status=\"live\" />);\n expect(html).toContain(\"Live\");\n expect(html).toContain(\"animate-pulse\");\n});\n\ntest(\"DropSupplyProgress shows minted-of-max and a percentage\", () => {\n const html = renderToStaticMarkup(<DropSupplyProgress minted={3} max={10} />);\n expect(html).toContain(\"3\");\n expect(html).toContain(\"of 10\");\n expect(html).toContain(\"30.0%\");\n});\n\ntest(\"DropPriceDisplay shows Free mint for a zero-price drop\", () => {\n const conditions: DropConditions = {\n maxSupply: \"10\", price: \"0\", paymentToken: \"0x0\",\n startTime: 0, endTime: 0, maxPerWallet: \"1\",\n };\n const html = renderToStaticMarkup(<DropPriceDisplay conditions={conditions} />);\n expect(html).toContain(\"Free mint\");\n});\n"],"mappings":";AAMoC;AANpC,sBAA6B;AAC7B,oBAAqC;AACrC,iCAAsE;AAAA,IAGtE,sBAAK,2DAA2D,MAAM;AACpE,QAAM,WAAO,oCAAqB,4CAAC,8CAAgB,QAAO,QAAO,CAAE;AACnE,8BAAO,IAAI,EAAE,UAAU,MAAM;AAC7B,8BAAO,IAAI,EAAE,UAAU,eAAe;AACxC,CAAC;AAAA,IAED,sBAAK,2DAA2D,MAAM;AACpE,QAAM,WAAO,oCAAqB,4CAAC,iDAAmB,QAAQ,GAAG,KAAK,IAAI,CAAE;AAC5E,8BAAO,IAAI,EAAE,UAAU,GAAG;AAC1B,8BAAO,IAAI,EAAE,UAAU,OAAO;AAC9B,8BAAO,IAAI,EAAE,UAAU,OAAO;AAChC,CAAC;AAAA,IAED,sBAAK,0DAA0D,MAAM;AACnE,QAAM,aAA6B;AAAA,IACjC,WAAW;AAAA,IAAM,OAAO;AAAA,IAAK,cAAc;AAAA,IAC3C,WAAW;AAAA,IAAG,SAAS;AAAA,IAAG,cAAc;AAAA,EAC1C;AACA,QAAM,WAAO,oCAAqB,4CAAC,+CAAiB,YAAwB,CAAE;AAC9E,8BAAO,IAAI,EAAE,UAAU,WAAW;AACpC,CAAC;","names":[]}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { test, expect } from "bun:test";
|
|
3
|
-
import { renderToStaticMarkup } from "react-dom/server";
|
|
4
|
-
import { DropStatusBadge, DropSupplyProgress, DropPriceDisplay } from "./drop-status-display.js";
|
|
5
|
-
test("DropStatusBadge renders the live label with a pulse dot", () => {
|
|
6
|
-
const html = renderToStaticMarkup(/* @__PURE__ */ jsx(DropStatusBadge, { status: "live" }));
|
|
7
|
-
expect(html).toContain("Live");
|
|
8
|
-
expect(html).toContain("animate-pulse");
|
|
9
|
-
});
|
|
10
|
-
test("DropSupplyProgress shows minted-of-max and a percentage", () => {
|
|
11
|
-
const html = renderToStaticMarkup(/* @__PURE__ */ jsx(DropSupplyProgress, { minted: 3, max: 10 }));
|
|
12
|
-
expect(html).toContain("3");
|
|
13
|
-
expect(html).toContain("of 10");
|
|
14
|
-
expect(html).toContain("30.0%");
|
|
15
|
-
});
|
|
16
|
-
test("DropPriceDisplay shows Free mint for a zero-price drop", () => {
|
|
17
|
-
const conditions = {
|
|
18
|
-
maxSupply: "10",
|
|
19
|
-
price: "0",
|
|
20
|
-
paymentToken: "0x0",
|
|
21
|
-
startTime: 0,
|
|
22
|
-
endTime: 0,
|
|
23
|
-
maxPerWallet: "1"
|
|
24
|
-
};
|
|
25
|
-
const html = renderToStaticMarkup(/* @__PURE__ */ jsx(DropPriceDisplay, { conditions }));
|
|
26
|
-
expect(html).toContain("Free mint");
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=drop-status-display.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/drop-status-display.test.tsx"],"sourcesContent":["import { test, expect } from \"bun:test\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { DropStatusBadge, DropSupplyProgress, DropPriceDisplay } from \"./drop-status-display.js\";\nimport type { DropConditions } from \"../utils/drop-status.js\";\n\ntest(\"DropStatusBadge renders the live label with a pulse dot\", () => {\n const html = renderToStaticMarkup(<DropStatusBadge status=\"live\" />);\n expect(html).toContain(\"Live\");\n expect(html).toContain(\"animate-pulse\");\n});\n\ntest(\"DropSupplyProgress shows minted-of-max and a percentage\", () => {\n const html = renderToStaticMarkup(<DropSupplyProgress minted={3} max={10} />);\n expect(html).toContain(\"3\");\n expect(html).toContain(\"of 10\");\n expect(html).toContain(\"30.0%\");\n});\n\ntest(\"DropPriceDisplay shows Free mint for a zero-price drop\", () => {\n const conditions: DropConditions = {\n maxSupply: \"10\", price: \"0\", paymentToken: \"0x0\",\n startTime: 0, endTime: 0, maxPerWallet: \"1\",\n };\n const html = renderToStaticMarkup(<DropPriceDisplay conditions={conditions} />);\n expect(html).toContain(\"Free mint\");\n});\n"],"mappings":"AAMoC;AANpC,SAAS,MAAM,cAAc;AAC7B,SAAS,4BAA4B;AACrC,SAAS,iBAAiB,oBAAoB,wBAAwB;AAGtE,KAAK,2DAA2D,MAAM;AACpE,QAAM,OAAO,qBAAqB,oBAAC,mBAAgB,QAAO,QAAO,CAAE;AACnE,SAAO,IAAI,EAAE,UAAU,MAAM;AAC7B,SAAO,IAAI,EAAE,UAAU,eAAe;AACxC,CAAC;AAED,KAAK,2DAA2D,MAAM;AACpE,QAAM,OAAO,qBAAqB,oBAAC,sBAAmB,QAAQ,GAAG,KAAK,IAAI,CAAE;AAC5E,SAAO,IAAI,EAAE,UAAU,GAAG;AAC1B,SAAO,IAAI,EAAE,UAAU,OAAO;AAC9B,SAAO,IAAI,EAAE,UAAU,OAAO;AAChC,CAAC;AAED,KAAK,0DAA0D,MAAM;AACnE,QAAM,aAA6B;AAAA,IACjC,WAAW;AAAA,IAAM,OAAO;AAAA,IAAK,cAAc;AAAA,IAC3C,WAAW;AAAA,IAAG,SAAS;AAAA,IAAG,cAAc;AAAA,EAC1C;AACA,QAAM,OAAO,qBAAqB,oBAAC,oBAAiB,YAAwB,CAAE;AAC9E,SAAO,IAAI,EAAE,UAAU,WAAW;AACpC,CAAC;","names":[]}
|
|
@@ -1,88 +0,0 @@
|
|
|
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 exclusive_content_section_exports = {};
|
|
21
|
-
__export(exclusive_content_section_exports, {
|
|
22
|
-
ExclusiveContentSection: () => ExclusiveContentSection
|
|
23
|
-
});
|
|
24
|
-
module.exports = __toCommonJS(exclusive_content_section_exports);
|
|
25
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
|
-
var import_lucide_react = require("lucide-react");
|
|
27
|
-
var import_form = require("./form.js");
|
|
28
|
-
var import_input = require("./input.js");
|
|
29
|
-
var import_select = require("./select.js");
|
|
30
|
-
var import_switch = require("./switch.js");
|
|
31
|
-
var import_collapsible_section = require("./collapsible-section.js");
|
|
32
|
-
var import_gated_content_types = require("../data/gated-content-types.js");
|
|
33
|
-
const CONTENT_TYPES = Object.keys(import_gated_content_types.GATED_CONTENT_TYPES).map((value) => ({
|
|
34
|
-
value,
|
|
35
|
-
label: value.charAt(0) + value.slice(1).toLowerCase()
|
|
36
|
-
}));
|
|
37
|
-
function ExclusiveContentSection({ form }) {
|
|
38
|
-
const gatedEnabled = form.watch("gatedEnabled");
|
|
39
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
40
|
-
import_collapsible_section.CollapsibleSection,
|
|
41
|
-
{
|
|
42
|
-
open: gatedEnabled,
|
|
43
|
-
onOpenChange: (o) => form.setValue("gatedEnabled", o),
|
|
44
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Lock, { className: "h-4 w-4 text-primary" }),
|
|
45
|
-
label: "Exclusive Content",
|
|
46
|
-
hint: gatedEnabled ? "Holders get a locked tab with this content" : "Optional \xB7 reward holders with gated content",
|
|
47
|
-
children: [
|
|
48
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-muted-foreground", children: "Reward your holders with exclusive access \u2014 video, audio, documents, or any link. Only verified token holders can access this content." }),
|
|
49
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
50
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium", children: "Enable exclusive content" }),
|
|
51
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
52
|
-
import_switch.Switch,
|
|
53
|
-
{
|
|
54
|
-
checked: gatedEnabled,
|
|
55
|
-
onCheckedChange: (checked) => form.setValue("gatedEnabled", checked)
|
|
56
|
-
}
|
|
57
|
-
)
|
|
58
|
-
] }),
|
|
59
|
-
gatedEnabled && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
60
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormField, { control: form.control, name: "gatedContentTitle", render: ({ field }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_form.FormItem, { children: [
|
|
61
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormLabel, { children: "Content title" }),
|
|
62
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormControl, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_input.Input, { placeholder: "e.g. Behind-the-scenes footage", ...field }) }),
|
|
63
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormMessage, {})
|
|
64
|
-
] }) }),
|
|
65
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormField, { control: form.control, name: "gatedContentUrl", render: ({ field }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_form.FormItem, { children: [
|
|
66
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormLabel, { children: "Content URL" }),
|
|
67
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormControl, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_input.Input, { placeholder: "https://\u2026", ...field }) }),
|
|
68
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormDescription, { children: "Only holders will see this URL. Use a private or unlisted link." }),
|
|
69
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormMessage, {})
|
|
70
|
-
] }) }),
|
|
71
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormField, { control: form.control, name: "gatedContentType", render: ({ field }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_form.FormItem, { children: [
|
|
72
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormLabel, { children: "Content type" }),
|
|
73
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_select.Select, { value: field.value, onValueChange: field.onChange, children: [
|
|
74
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormControl, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectValue, { placeholder: "Select type" }) }) }),
|
|
75
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectContent, { children: CONTENT_TYPES.map(({ value, label }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectItem, { value, children: label }, value)) })
|
|
76
|
-
] }),
|
|
77
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_form.FormMessage, {})
|
|
78
|
-
] }) })
|
|
79
|
-
] })
|
|
80
|
-
]
|
|
81
|
-
}
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
-
0 && (module.exports = {
|
|
86
|
-
ExclusiveContentSection
|
|
87
|
-
});
|
|
88
|
-
//# sourceMappingURL=exclusive-content-section.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/exclusive-content-section.tsx"],"sourcesContent":["\"use client\";\n\nimport type { UseFormReturn } from \"react-hook-form\";\nimport { Lock } from \"lucide-react\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, FormDescription } from \"./form.js\";\nimport { Input } from \"./input.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"./select.js\";\nimport { Switch } from \"./switch.js\";\nimport { CollapsibleSection } from \"./collapsible-section.js\";\nimport { GATED_CONTENT_TYPES } from \"../data/gated-content-types.js\";\nimport type { DropCreateFormValues } from \"../data/drop-create-schema.js\";\n\nconst CONTENT_TYPES = Object.keys(GATED_CONTENT_TYPES).map((value) => ({\n value,\n label: value.charAt(0) + value.slice(1).toLowerCase(),\n}));\n\nexport function ExclusiveContentSection({ form }: { form: UseFormReturn<DropCreateFormValues> }) {\n const gatedEnabled = form.watch(\"gatedEnabled\");\n\n return (\n <CollapsibleSection\n open={gatedEnabled}\n onOpenChange={(o) => form.setValue(\"gatedEnabled\", o)}\n icon={<Lock className=\"h-4 w-4 text-primary\" />}\n label=\"Exclusive Content\"\n hint={gatedEnabled ? \"Holders get a locked tab with this content\" : \"Optional · reward holders with gated content\"}\n >\n <p className=\"text-xs text-muted-foreground\">\n Reward your holders with exclusive access — video, audio, documents, or any link.\n Only verified token holders can access this content.\n </p>\n\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium\">Enable exclusive content</p>\n <Switch\n checked={gatedEnabled}\n onCheckedChange={(checked) => form.setValue(\"gatedEnabled\", checked)}\n />\n </div>\n\n {gatedEnabled && (\n <>\n <FormField control={form.control} name=\"gatedContentTitle\" render={({ field }) => (\n <FormItem>\n <FormLabel>Content title</FormLabel>\n <FormControl><Input placeholder=\"e.g. Behind-the-scenes footage\" {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n\n <FormField control={form.control} name=\"gatedContentUrl\" render={({ field }) => (\n <FormItem>\n <FormLabel>Content URL</FormLabel>\n <FormControl><Input placeholder=\"https://…\" {...field} /></FormControl>\n <FormDescription>Only holders will see this URL. Use a private or unlisted link.</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n\n <FormField control={form.control} name=\"gatedContentType\" render={({ field }) => (\n <FormItem>\n <FormLabel>Content type</FormLabel>\n <Select value={field.value} onValueChange={field.onChange}>\n <FormControl><SelectTrigger><SelectValue placeholder=\"Select type\" /></SelectTrigger></FormControl>\n <SelectContent>\n {CONTENT_TYPES.map(({ value, label }) => <SelectItem key={value} value={value}>{label}</SelectItem>)}\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )} />\n </>\n )}\n </CollapsibleSection>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBY;AArBZ,0BAAqB;AACrB,kBAA0F;AAC1F,mBAAsB;AACtB,oBAA8E;AAC9E,oBAAuB;AACvB,iCAAmC;AACnC,iCAAoC;AAGpC,MAAM,gBAAgB,OAAO,KAAK,8CAAmB,EAAE,IAAI,CAAC,WAAW;AAAA,EACrE;AAAA,EACA,OAAO,MAAM,OAAO,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,YAAY;AACtD,EAAE;AAEK,SAAS,wBAAwB,EAAE,KAAK,GAAkD;AAC/F,QAAM,eAAe,KAAK,MAAM,cAAc;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,cAAc,CAAC,MAAM,KAAK,SAAS,gBAAgB,CAAC;AAAA,MACpD,MAAM,4CAAC,4BAAK,WAAU,wBAAuB;AAAA,MAC7C,OAAM;AAAA,MACN,MAAM,eAAe,+CAA+C;AAAA,MAEpE;AAAA,oDAAC,OAAE,WAAU,iCAAgC,yJAG7C;AAAA,QAEA,6CAAC,SAAI,WAAU,qCACb;AAAA,sDAAC,OAAE,WAAU,uBAAsB,sCAAwB;AAAA,UAC3D;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,iBAAiB,CAAC,YAAY,KAAK,SAAS,gBAAgB,OAAO;AAAA;AAAA,UACrE;AAAA,WACF;AAAA,QAEC,gBACC,4EACE;AAAA,sDAAC,yBAAU,SAAS,KAAK,SAAS,MAAK,qBAAoB,QAAQ,CAAC,EAAE,MAAM,MAC1E,6CAAC,wBACC;AAAA,wDAAC,yBAAU,2BAAa;AAAA,YACxB,4CAAC,2BAAY,sDAAC,sBAAM,aAAY,kCAAkC,GAAG,OAAO,GAAE;AAAA,YAC9E,4CAAC,2BAAY;AAAA,aACf,GACC;AAAA,UAEH,4CAAC,yBAAU,SAAS,KAAK,SAAS,MAAK,mBAAkB,QAAQ,CAAC,EAAE,MAAM,MACxE,6CAAC,wBACC;AAAA,wDAAC,yBAAU,yBAAW;AAAA,YACtB,4CAAC,2BAAY,sDAAC,sBAAM,aAAY,kBAAa,GAAG,OAAO,GAAE;AAAA,YACzD,4CAAC,+BAAgB,6EAA+D;AAAA,YAChF,4CAAC,2BAAY;AAAA,aACf,GACC;AAAA,UAEH,4CAAC,yBAAU,SAAS,KAAK,SAAS,MAAK,oBAAmB,QAAQ,CAAC,EAAE,MAAM,MACzE,6CAAC,wBACC;AAAA,wDAAC,yBAAU,0BAAY;AAAA,YACvB,6CAAC,wBAAO,OAAO,MAAM,OAAO,eAAe,MAAM,UAC/C;AAAA,0DAAC,2BAAY,sDAAC,+BAAc,sDAAC,6BAAY,aAAY,eAAc,GAAE,GAAgB;AAAA,cACrF,4CAAC,+BACE,wBAAc,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM,4CAAC,4BAAuB,OAAe,mBAAtB,KAA4B,CAAa,GACrG;AAAA,eACF;AAAA,YACA,4CAAC,2BAAY;AAAA,aACf,GACC;AAAA,WACL;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { UseFormReturn } from 'react-hook-form';
|
|
3
|
-
import { DropCreateFormValues } from '../data/drop-create-schema.cjs';
|
|
4
|
-
import 'zod';
|
|
5
|
-
|
|
6
|
-
declare function ExclusiveContentSection({ form }: {
|
|
7
|
-
form: UseFormReturn<DropCreateFormValues>;
|
|
8
|
-
}): react_jsx_runtime.JSX.Element;
|
|
9
|
-
|
|
10
|
-
export { ExclusiveContentSection };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { UseFormReturn } from 'react-hook-form';
|
|
3
|
-
import { DropCreateFormValues } from '../data/drop-create-schema.js';
|
|
4
|
-
import 'zod';
|
|
5
|
-
|
|
6
|
-
declare function ExclusiveContentSection({ form }: {
|
|
7
|
-
form: UseFormReturn<DropCreateFormValues>;
|
|
8
|
-
}): react_jsx_runtime.JSX.Element;
|
|
9
|
-
|
|
10
|
-
export { ExclusiveContentSection };
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Lock } from "lucide-react";
|
|
4
|
-
import { FormControl, FormField, FormItem, FormLabel, FormMessage, FormDescription } from "./form.js";
|
|
5
|
-
import { Input } from "./input.js";
|
|
6
|
-
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./select.js";
|
|
7
|
-
import { Switch } from "./switch.js";
|
|
8
|
-
import { CollapsibleSection } from "./collapsible-section.js";
|
|
9
|
-
import { GATED_CONTENT_TYPES } from "../data/gated-content-types.js";
|
|
10
|
-
const CONTENT_TYPES = Object.keys(GATED_CONTENT_TYPES).map((value) => ({
|
|
11
|
-
value,
|
|
12
|
-
label: value.charAt(0) + value.slice(1).toLowerCase()
|
|
13
|
-
}));
|
|
14
|
-
function ExclusiveContentSection({ form }) {
|
|
15
|
-
const gatedEnabled = form.watch("gatedEnabled");
|
|
16
|
-
return /* @__PURE__ */ jsxs(
|
|
17
|
-
CollapsibleSection,
|
|
18
|
-
{
|
|
19
|
-
open: gatedEnabled,
|
|
20
|
-
onOpenChange: (o) => form.setValue("gatedEnabled", o),
|
|
21
|
-
icon: /* @__PURE__ */ jsx(Lock, { className: "h-4 w-4 text-primary" }),
|
|
22
|
-
label: "Exclusive Content",
|
|
23
|
-
hint: gatedEnabled ? "Holders get a locked tab with this content" : "Optional \xB7 reward holders with gated content",
|
|
24
|
-
children: [
|
|
25
|
-
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Reward your holders with exclusive access \u2014 video, audio, documents, or any link. Only verified token holders can access this content." }),
|
|
26
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Enable exclusive content" }),
|
|
28
|
-
/* @__PURE__ */ jsx(
|
|
29
|
-
Switch,
|
|
30
|
-
{
|
|
31
|
-
checked: gatedEnabled,
|
|
32
|
-
onCheckedChange: (checked) => form.setValue("gatedEnabled", checked)
|
|
33
|
-
}
|
|
34
|
-
)
|
|
35
|
-
] }),
|
|
36
|
-
gatedEnabled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
37
|
-
/* @__PURE__ */ jsx(FormField, { control: form.control, name: "gatedContentTitle", render: ({ field }) => /* @__PURE__ */ jsxs(FormItem, { children: [
|
|
38
|
-
/* @__PURE__ */ jsx(FormLabel, { children: "Content title" }),
|
|
39
|
-
/* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(Input, { placeholder: "e.g. Behind-the-scenes footage", ...field }) }),
|
|
40
|
-
/* @__PURE__ */ jsx(FormMessage, {})
|
|
41
|
-
] }) }),
|
|
42
|
-
/* @__PURE__ */ jsx(FormField, { control: form.control, name: "gatedContentUrl", render: ({ field }) => /* @__PURE__ */ jsxs(FormItem, { children: [
|
|
43
|
-
/* @__PURE__ */ jsx(FormLabel, { children: "Content URL" }),
|
|
44
|
-
/* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(Input, { placeholder: "https://\u2026", ...field }) }),
|
|
45
|
-
/* @__PURE__ */ jsx(FormDescription, { children: "Only holders will see this URL. Use a private or unlisted link." }),
|
|
46
|
-
/* @__PURE__ */ jsx(FormMessage, {})
|
|
47
|
-
] }) }),
|
|
48
|
-
/* @__PURE__ */ jsx(FormField, { control: form.control, name: "gatedContentType", render: ({ field }) => /* @__PURE__ */ jsxs(FormItem, { children: [
|
|
49
|
-
/* @__PURE__ */ jsx(FormLabel, { children: "Content type" }),
|
|
50
|
-
/* @__PURE__ */ jsxs(Select, { value: field.value, onValueChange: field.onChange, children: [
|
|
51
|
-
/* @__PURE__ */ jsx(FormControl, { children: /* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select type" }) }) }),
|
|
52
|
-
/* @__PURE__ */ jsx(SelectContent, { children: CONTENT_TYPES.map(({ value, label }) => /* @__PURE__ */ jsx(SelectItem, { value, children: label }, value)) })
|
|
53
|
-
] }),
|
|
54
|
-
/* @__PURE__ */ jsx(FormMessage, {})
|
|
55
|
-
] }) })
|
|
56
|
-
] })
|
|
57
|
-
]
|
|
58
|
-
}
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
export {
|
|
62
|
-
ExclusiveContentSection
|
|
63
|
-
};
|
|
64
|
-
//# sourceMappingURL=exclusive-content-section.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/exclusive-content-section.tsx"],"sourcesContent":["\"use client\";\n\nimport type { UseFormReturn } from \"react-hook-form\";\nimport { Lock } from \"lucide-react\";\nimport { FormControl, FormField, FormItem, FormLabel, FormMessage, FormDescription } from \"./form.js\";\nimport { Input } from \"./input.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"./select.js\";\nimport { Switch } from \"./switch.js\";\nimport { CollapsibleSection } from \"./collapsible-section.js\";\nimport { GATED_CONTENT_TYPES } from \"../data/gated-content-types.js\";\nimport type { DropCreateFormValues } from \"../data/drop-create-schema.js\";\n\nconst CONTENT_TYPES = Object.keys(GATED_CONTENT_TYPES).map((value) => ({\n value,\n label: value.charAt(0) + value.slice(1).toLowerCase(),\n}));\n\nexport function ExclusiveContentSection({ form }: { form: UseFormReturn<DropCreateFormValues> }) {\n const gatedEnabled = form.watch(\"gatedEnabled\");\n\n return (\n <CollapsibleSection\n open={gatedEnabled}\n onOpenChange={(o) => form.setValue(\"gatedEnabled\", o)}\n icon={<Lock className=\"h-4 w-4 text-primary\" />}\n label=\"Exclusive Content\"\n hint={gatedEnabled ? \"Holders get a locked tab with this content\" : \"Optional · reward holders with gated content\"}\n >\n <p className=\"text-xs text-muted-foreground\">\n Reward your holders with exclusive access — video, audio, documents, or any link.\n Only verified token holders can access this content.\n </p>\n\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-medium\">Enable exclusive content</p>\n <Switch\n checked={gatedEnabled}\n onCheckedChange={(checked) => form.setValue(\"gatedEnabled\", checked)}\n />\n </div>\n\n {gatedEnabled && (\n <>\n <FormField control={form.control} name=\"gatedContentTitle\" render={({ field }) => (\n <FormItem>\n <FormLabel>Content title</FormLabel>\n <FormControl><Input placeholder=\"e.g. Behind-the-scenes footage\" {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n\n <FormField control={form.control} name=\"gatedContentUrl\" render={({ field }) => (\n <FormItem>\n <FormLabel>Content URL</FormLabel>\n <FormControl><Input placeholder=\"https://…\" {...field} /></FormControl>\n <FormDescription>Only holders will see this URL. Use a private or unlisted link.</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n\n <FormField control={form.control} name=\"gatedContentType\" render={({ field }) => (\n <FormItem>\n <FormLabel>Content type</FormLabel>\n <Select value={field.value} onValueChange={field.onChange}>\n <FormControl><SelectTrigger><SelectValue placeholder=\"Select type\" /></SelectTrigger></FormControl>\n <SelectContent>\n {CONTENT_TYPES.map(({ value, label }) => <SelectItem key={value} value={value}>{label}</SelectItem>)}\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )} />\n </>\n )}\n </CollapsibleSection>\n );\n}\n"],"mappings":";AAwBY,SAkBJ,UAlBI,KASN,YATM;AArBZ,SAAS,YAAY;AACrB,SAAS,aAAa,WAAW,UAAU,WAAW,aAAa,uBAAuB;AAC1F,SAAS,aAAa;AACtB,SAAS,QAAQ,eAAe,YAAY,eAAe,mBAAmB;AAC9E,SAAS,cAAc;AACvB,SAAS,0BAA0B;AACnC,SAAS,2BAA2B;AAGpC,MAAM,gBAAgB,OAAO,KAAK,mBAAmB,EAAE,IAAI,CAAC,WAAW;AAAA,EACrE;AAAA,EACA,OAAO,MAAM,OAAO,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,YAAY;AACtD,EAAE;AAEK,SAAS,wBAAwB,EAAE,KAAK,GAAkD;AAC/F,QAAM,eAAe,KAAK,MAAM,cAAc;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,cAAc,CAAC,MAAM,KAAK,SAAS,gBAAgB,CAAC;AAAA,MACpD,MAAM,oBAAC,QAAK,WAAU,wBAAuB;AAAA,MAC7C,OAAM;AAAA,MACN,MAAM,eAAe,+CAA+C;AAAA,MAEpE;AAAA,4BAAC,OAAE,WAAU,iCAAgC,yJAG7C;AAAA,QAEA,qBAAC,SAAI,WAAU,qCACb;AAAA,8BAAC,OAAE,WAAU,uBAAsB,sCAAwB;AAAA,UAC3D;AAAA,YAAC;AAAA;AAAA,cACC,SAAS;AAAA,cACT,iBAAiB,CAAC,YAAY,KAAK,SAAS,gBAAgB,OAAO;AAAA;AAAA,UACrE;AAAA,WACF;AAAA,QAEC,gBACC,iCACE;AAAA,8BAAC,aAAU,SAAS,KAAK,SAAS,MAAK,qBAAoB,QAAQ,CAAC,EAAE,MAAM,MAC1E,qBAAC,YACC;AAAA,gCAAC,aAAU,2BAAa;AAAA,YACxB,oBAAC,eAAY,8BAAC,SAAM,aAAY,kCAAkC,GAAG,OAAO,GAAE;AAAA,YAC9E,oBAAC,eAAY;AAAA,aACf,GACC;AAAA,UAEH,oBAAC,aAAU,SAAS,KAAK,SAAS,MAAK,mBAAkB,QAAQ,CAAC,EAAE,MAAM,MACxE,qBAAC,YACC;AAAA,gCAAC,aAAU,yBAAW;AAAA,YACtB,oBAAC,eAAY,8BAAC,SAAM,aAAY,kBAAa,GAAG,OAAO,GAAE;AAAA,YACzD,oBAAC,mBAAgB,6EAA+D;AAAA,YAChF,oBAAC,eAAY;AAAA,aACf,GACC;AAAA,UAEH,oBAAC,aAAU,SAAS,KAAK,SAAS,MAAK,oBAAmB,QAAQ,CAAC,EAAE,MAAM,MACzE,qBAAC,YACC;AAAA,gCAAC,aAAU,0BAAY;AAAA,YACvB,qBAAC,UAAO,OAAO,MAAM,OAAO,eAAe,MAAM,UAC/C;AAAA,kCAAC,eAAY,8BAAC,iBAAc,8BAAC,eAAY,aAAY,eAAc,GAAE,GAAgB;AAAA,cACrF,oBAAC,iBACE,wBAAc,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM,oBAAC,cAAuB,OAAe,mBAAtB,KAA4B,CAAa,GACrG;AAAA,eACF;AAAA,YACA,oBAAC,eAAY;AAAA,aACf,GACC;AAAA,WACL;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -1,92 +0,0 @@
|
|
|
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_create_schema_exports = {};
|
|
31
|
-
__export(drop_create_schema_exports, {
|
|
32
|
-
dropCreateSchema: () => dropCreateSchema
|
|
33
|
-
});
|
|
34
|
-
module.exports = __toCommonJS(drop_create_schema_exports);
|
|
35
|
-
var z = __toESM(require("zod"), 1);
|
|
36
|
-
var import_ip = require("./ip.js");
|
|
37
|
-
function parseDateTime(date, time) {
|
|
38
|
-
const t = (/* @__PURE__ */ new Date(`${date}T${time}:00`)).getTime();
|
|
39
|
-
return Number.isNaN(t) ? null : t;
|
|
40
|
-
}
|
|
41
|
-
const dropCreateSchema = z.object({
|
|
42
|
-
name: z.string().min(1, "Collection name required").max(100),
|
|
43
|
-
symbol: z.string().min(1, "Symbol required").max(10).regex(/^[A-Z0-9]+$/, "Uppercase letters and numbers only"),
|
|
44
|
-
ipType: z.enum(import_ip.IP_TYPES),
|
|
45
|
-
licenseType: z.string().min(1, "License required"),
|
|
46
|
-
commercialUse: z.string().default(""),
|
|
47
|
-
derivatives: z.string().default(""),
|
|
48
|
-
attribution: z.string().default(""),
|
|
49
|
-
geographicScope: z.string().default("Worldwide"),
|
|
50
|
-
aiPolicy: z.string().default(""),
|
|
51
|
-
royalty: z.coerce.number().min(0).max(50).default(0),
|
|
52
|
-
descriptionTemplate: z.string().max(500).optional(),
|
|
53
|
-
priceAmount: z.string().default("").refine((v) => v === "" || !Number.isNaN(Number(v)), "Enter a valid price").refine((v) => v === "" || Number(v) >= 0, "Price must be zero or greater"),
|
|
54
|
-
paymentToken: z.string(),
|
|
55
|
-
startDate: z.string().min(1, "Start date required"),
|
|
56
|
-
startTime: z.string().default("00:00"),
|
|
57
|
-
endDate: z.string().min(1, "End date required"),
|
|
58
|
-
endTime: z.string().default("23:59"),
|
|
59
|
-
maxPerWallet: z.string().regex(/^\d+$/, "Must be a positive integer").refine((v) => parseInt(v, 10) >= 1, "Minimum 1").default("1"),
|
|
60
|
-
whitelistEnabled: z.boolean().default(false),
|
|
61
|
-
allowlistAddresses: z.string().default(""),
|
|
62
|
-
gatedEnabled: z.boolean().default(false),
|
|
63
|
-
gatedContentTitle: z.string().max(100).default(""),
|
|
64
|
-
gatedContentUrl: z.string().default(""),
|
|
65
|
-
gatedContentType: z.string().default("")
|
|
66
|
-
}).superRefine((values, ctx) => {
|
|
67
|
-
const start = parseDateTime(values.startDate, values.startTime);
|
|
68
|
-
const end = parseDateTime(values.endDate, values.endTime);
|
|
69
|
-
if (start === null) {
|
|
70
|
-
ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["startDate"], message: "Enter a valid start date and time" });
|
|
71
|
-
}
|
|
72
|
-
if (end === null) {
|
|
73
|
-
ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["endDate"], message: "Enter a valid end date and time" });
|
|
74
|
-
}
|
|
75
|
-
if (start !== null && end !== null && end <= start) {
|
|
76
|
-
ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["endDate"], message: "End time must be after the start time" });
|
|
77
|
-
}
|
|
78
|
-
if (values.whitelistEnabled) {
|
|
79
|
-
const addrs = values.allowlistAddresses.split(/[\n,\s]+/).map((a) => a.trim()).filter(Boolean);
|
|
80
|
-
if (addrs.length === 0) {
|
|
81
|
-
ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["allowlistAddresses"], message: "Add at least one address, or turn the whitelist off" });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (values.gatedEnabled && values.gatedContentUrl.trim() === "") {
|
|
85
|
-
ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["gatedContentUrl"], message: "Add a content URL, or turn exclusive content off" });
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
89
|
-
0 && (module.exports = {
|
|
90
|
-
dropCreateSchema
|
|
91
|
-
});
|
|
92
|
-
//# sourceMappingURL=drop-create-schema.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/data/drop-create-schema.ts"],"sourcesContent":["\"use client\";\n\nimport * as z from \"zod\";\nimport { IP_TYPES } from \"./ip.js\";\n\nfunction parseDateTime(date: string, time: string): number | null {\n const t = new Date(`${date}T${time}:00`).getTime();\n return Number.isNaN(t) ? null : t;\n}\n\nexport const dropCreateSchema = z\n .object({\n name: z.string().min(1, \"Collection name required\").max(100),\n symbol: z\n .string()\n .min(1, \"Symbol required\")\n .max(10)\n .regex(/^[A-Z0-9]+$/, \"Uppercase letters and numbers only\"),\n\n ipType: z.enum(IP_TYPES),\n licenseType: z.string().min(1, \"License required\"),\n commercialUse: z.string().default(\"\"),\n derivatives: z.string().default(\"\"),\n attribution: z.string().default(\"\"),\n geographicScope: z.string().default(\"Worldwide\"),\n aiPolicy: z.string().default(\"\"),\n royalty: z.coerce.number().min(0).max(50).default(0),\n descriptionTemplate: z.string().max(500).optional(),\n\n priceAmount: z\n .string()\n .default(\"\")\n .refine((v: string) => v === \"\" || !Number.isNaN(Number(v)), \"Enter a valid price\")\n .refine((v: string) => v === \"\" || Number(v) >= 0, \"Price must be zero or greater\"),\n paymentToken: z.string(),\n startDate: z.string().min(1, \"Start date required\"),\n startTime: z.string().default(\"00:00\"),\n endDate: z.string().min(1, \"End date required\"),\n endTime: z.string().default(\"23:59\"),\n maxPerWallet: z\n .string()\n .regex(/^\\d+$/, \"Must be a positive integer\")\n .refine((v: string) => parseInt(v, 10) >= 1, \"Minimum 1\")\n .default(\"1\"),\n\n whitelistEnabled: z.boolean().default(false),\n allowlistAddresses: z.string().default(\"\"),\n\n gatedEnabled: z.boolean().default(false),\n gatedContentTitle: z.string().max(100).default(\"\"),\n gatedContentUrl: z.string().default(\"\"),\n gatedContentType: z.string().default(\"\"),\n })\n .superRefine((values, ctx) => {\n const start = parseDateTime(values.startDate, values.startTime);\n const end = parseDateTime(values.endDate, values.endTime);\n if (start === null) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"startDate\"], message: \"Enter a valid start date and time\" });\n }\n if (end === null) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"endDate\"], message: \"Enter a valid end date and time\" });\n }\n if (start !== null && end !== null && end <= start) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"endDate\"], message: \"End time must be after the start time\" });\n }\n\n if (values.whitelistEnabled) {\n const addrs = values.allowlistAddresses.split(/[\\n,\\s]+/).map((a) => a.trim()).filter(Boolean);\n if (addrs.length === 0) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"allowlistAddresses\"], message: \"Add at least one address, or turn the whitelist off\" });\n }\n }\n\n if (values.gatedEnabled && values.gatedContentUrl.trim() === \"\") {\n ctx.addIssue({ code: z.ZodIssueCode.custom, path: [\"gatedContentUrl\"], message: \"Add a content URL, or turn exclusive content off\" });\n }\n });\n\nexport type DropCreateFormValues = z.infer<typeof dropCreateSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,QAAmB;AACnB,gBAAyB;AAEzB,SAAS,cAAc,MAAc,MAA6B;AAChE,QAAM,KAAI,oBAAI,KAAK,GAAG,IAAI,IAAI,IAAI,KAAK,GAAE,QAAQ;AACjD,SAAO,OAAO,MAAM,CAAC,IAAI,OAAO;AAClC;AAEO,MAAM,mBAAmB,EAC7B,OAAO;AAAA,EACN,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,0BAA0B,EAAE,IAAI,GAAG;AAAA,EAC3D,QAAQ,EACL,OAAO,EACP,IAAI,GAAG,iBAAiB,EACxB,IAAI,EAAE,EACN,MAAM,eAAe,oCAAoC;AAAA,EAE5D,QAAQ,EAAE,KAAK,kBAAQ;AAAA,EACvB,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,kBAAkB;AAAA,EACjD,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EACpC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EAClC,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EAClC,iBAAiB,EAAE,OAAO,EAAE,QAAQ,WAAW;AAAA,EAC/C,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EAC/B,SAAS,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC;AAAA,EACnD,qBAAqB,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAElD,aAAa,EACV,OAAO,EACP,QAAQ,EAAE,EACV,OAAO,CAAC,MAAc,MAAM,MAAM,CAAC,OAAO,MAAM,OAAO,CAAC,CAAC,GAAG,qBAAqB,EACjF,OAAO,CAAC,MAAc,MAAM,MAAM,OAAO,CAAC,KAAK,GAAG,+BAA+B;AAAA,EACpF,cAAc,EAAE,OAAO;AAAA,EACvB,WAAW,EAAE,OAAO,EAAE,IAAI,GAAG,qBAAqB;AAAA,EAClD,WAAW,EAAE,OAAO,EAAE,QAAQ,OAAO;AAAA,EACrC,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,mBAAmB;AAAA,EAC9C,SAAS,EAAE,OAAO,EAAE,QAAQ,OAAO;AAAA,EACnC,cAAc,EACX,OAAO,EACP,MAAM,SAAS,4BAA4B,EAC3C,OAAO,CAAC,MAAc,SAAS,GAAG,EAAE,KAAK,GAAG,WAAW,EACvD,QAAQ,GAAG;AAAA,EAEd,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC3C,oBAAoB,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EAEzC,cAAc,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvC,mBAAmB,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,EACjD,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EACtC,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE;AACzC,CAAC,EACA,YAAY,CAAC,QAAQ,QAAQ;AAC5B,QAAM,QAAQ,cAAc,OAAO,WAAW,OAAO,SAAS;AAC9D,QAAM,MAAM,cAAc,OAAO,SAAS,OAAO,OAAO;AACxD,MAAI,UAAU,MAAM;AAClB,QAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,MAAM,CAAC,WAAW,GAAG,SAAS,oCAAoC,CAAC;AAAA,EACjH;AACA,MAAI,QAAQ,MAAM;AAChB,QAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,kCAAkC,CAAC;AAAA,EAC7G;AACA,MAAI,UAAU,QAAQ,QAAQ,QAAQ,OAAO,OAAO;AAClD,QAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,wCAAwC,CAAC;AAAA,EACnH;AAEA,MAAI,OAAO,kBAAkB;AAC3B,UAAM,QAAQ,OAAO,mBAAmB,MAAM,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAC7F,QAAI,MAAM,WAAW,GAAG;AACtB,UAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,MAAM,CAAC,oBAAoB,GAAG,SAAS,sDAAsD,CAAC;AAAA,IAC5I;AAAA,EACF;AAEA,MAAI,OAAO,gBAAgB,OAAO,gBAAgB,KAAK,MAAM,IAAI;AAC/D,QAAI,SAAS,EAAE,MAAM,EAAE,aAAa,QAAQ,MAAM,CAAC,iBAAiB,GAAG,SAAS,mDAAmD,CAAC;AAAA,EACtI;AACF,CAAC;","names":[]}
|